[taurus] 02/05: Imported Upstream version 3.3.0+dfsg

Frédéric-Emmanuel Picca picca at moszumanska.debian.org
Sat Jul 12 16:39:37 UTC 2014


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

picca pushed a commit to branch master
in repository taurus.

commit 3cd436e0941434a8e6335e052a19d32a5e0ed90b
Author: Picca Frédéric-Emmanuel <picca at debian.org>
Date:   Fri Jul 11 22:39:51 2014 +0200

    Imported Upstream version 3.3.0+dfsg
---
 PKG-INFO                                           |    4 +-
 doc/auto_rst4api.py                                |   24 +-
 doc/man/macroexecutor.1                            |   36 -
 doc/man/sequencer.1                                |   36 -
 doc/man/tau2taurus.1                               |   10 +-
 doc/man/taurusconfigbrowser.1                      |   18 +-
 doc/man/tauruscurve.1                              |   20 +-
 doc/man/taurusdemo.1                               |   16 +-
 doc/man/taurusdesigner.1                           |   12 +-
 doc/man/taurusdevicepanel.1                        |   20 +-
 doc/man/taurusdoc.1                                |   20 +-
 doc/man/taurusform.1                               |   22 +-
 doc/man/taurusgui.1                                |   20 +-
 doc/man/taurusimage.1                              |   20 +-
 doc/man/tauruspanel.1                              |   18 +-
 doc/man/taurusplot.1                               |   26 +-
 doc/man/taurusremotelogmonitor.1                   |   22 +-
 doc/man/taurustrend.1                              |   30 +-
 doc/man/taurustrend1d.1                            |   24 +-
 doc/man/taurustrend2d.1                            |   24 +-
 doc/man/taurusuic4.1                               |   14 +-
 doc/source/contents.rst                            |    1 -
 doc/source/devel/api/taurus.rst                    |    2 +
 doc/source/devel/api/taurus/core/tango.rst         |    2 -
 doc/source/devel/api/taurus/core/tango/sardana.rst |   69 -
 .../core/tango/sardana/_BaseSardanaElement.rst     |   14 -
 .../tango/sardana/_BaseSardanaElementContainer.rst |   14 -
 .../core/tango/sardana/_ControllerClassInfo.rst    |   14 -
 .../taurus/core/tango/sardana/_ControllerInfo.rst  |   14 -
 .../devel/api/taurus/core/tango/sardana/_Door.rst  |   14 -
 .../api/taurus/core/tango/sardana/_MacroServer.rst |   14 -
 .../devel/api/taurus/core/tango/sardana/_Pool.rst  |   14 -
 .../api/taurus/core/tango/sardana/_Sardana.rst     |   14 -
 doc/source/devel/api/taurus/core/util.rst          |    2 +
 doc/source/devel/api/taurus/qt/qtcore/tango.rst    |    8 -
 .../devel/api/taurus/qt/qtcore/tango/sardana.rst   |   23 -
 doc/source/devel/api/taurus/qt/qtgui.rst           |   10 +-
 doc/source/devel/api/taurus/qt/qtgui/button.rst    |    8 +
 .../devel/api/taurus/qt/qtgui/button/test.rst      |   25 +
 .../devel/api/taurus/qt/qtgui/button/test/res.rst  |   17 +
 doc/source/devel/api/taurus/qt/qtgui/compact.rst   |   35 +
 .../taurus/qt/qtgui/compact/_TaurusLabelEditRW.rst |   14 +
 .../qt/qtgui/compact/_TaurusReadWriteSwitcher.rst  |   14 +
 doc/source/devel/api/taurus/qt/qtgui/display.rst   |    2 +
 .../devel/api/taurus/qt/qtgui/display/test.rst     |   17 +
 .../api/taurus/qt/qtgui/extra_macroexecutor.rst    |   75 -
 .../qt/qtgui/extra_macroexecutor/_DoorDebug.rst    |   14 -
 .../qt/qtgui/extra_macroexecutor/_DoorOutput.rst   |   14 -
 .../qt/qtgui/extra_macroexecutor/_DoorResult.rst   |   14 -
 .../qt/qtgui/extra_macroexecutor/_MacroButton.rst  |   14 -
 .../extra_macroexecutor/_MacroButtonAbortDoor.rst  |   14 -
 .../_TaurusMacroConfigurationDialog.rst            |   14 -
 .../_TaurusMacroDescriptionViewer.rst              |   14 -
 .../extra_macroexecutor/_TaurusMacroExecutor.rst   |   14 -
 .../_TaurusMacroExecutorWidget.rst                 |   14 -
 .../qtgui/extra_macroexecutor/favouriteseditor.rst |   35 -
 .../favouriteseditor/_FavouritesMacrosEditor.rst   |   14 -
 .../favouriteseditor/_HistoryMacrosViewer.rst      |   14 -
 .../extra_macroexecutor/macroparameterseditor.rst  |   47 -
 .../macroparameterseditor/_ParamEditorManager.rst  |   14 -
 .../macroparameterseditor/_ParamEditorModel.rst    |   14 -
 .../_StandardMacroParametersEditor.rst             |   14 -
 .../macroparameterseditor/customeditors.rst        |   31 -
 .../customeditors/_SenvEditor.rst                  |   14 -
 .../qtgui/extra_macroexecutor/sequenceeditor.rst   |   41 -
 .../sequenceeditor/_TaurusSequencer.rst            |   14 -
 .../sequenceeditor/_TaurusSequencerWidget.rst      |   14 -
 .../devel/api/taurus/qt/qtgui/extra_pool.rst       |  103 --
 .../_LabelWidgetDragsDeviceAndAttribute.rst        |   14 -
 .../taurus/qt/qtgui/extra_pool/_PoolChannel.rst    |   14 -
 .../taurus/qt/qtgui/extra_pool/_PoolChannelTV.rst  |   14 -
 .../taurus/qt/qtgui/extra_pool/_PoolIORegister.rst |   14 -
 .../qt/qtgui/extra_pool/_PoolIORegisterButtons.rst |   14 -
 .../qtgui/extra_pool/_PoolIORegisterReadWidget.rst |   14 -
 .../qt/qtgui/extra_pool/_PoolIORegisterTV.rst      |   14 -
 .../extra_pool/_PoolIORegisterWriteWidget.rst      |   14 -
 .../api/taurus/qt/qtgui/extra_pool/_PoolMotor.rst  |   14 -
 .../taurus/qt/qtgui/extra_pool/_PoolMotorSlim.rst  |   14 -
 .../taurus/qt/qtgui/extra_pool/_PoolMotorTV.rst    |   14 -
 .../qtgui/extra_pool/_PoolMotorTVLabelWidget.rst   |   14 -
 .../qt/qtgui/extra_pool/_PoolMotorTVReadWidget.rst |   14 -
 .../qtgui/extra_pool/_PoolMotorTVUnitsWidget.rst   |   14 -
 .../qtgui/extra_pool/_PoolMotorTVWriteWidget.rst   |   14 -
 .../taurus/qt/qtgui/extra_pool/_TaurusMotorH.rst   |   14 -
 .../taurus/qt/qtgui/extra_pool/_TaurusMotorH2.rst  |   14 -
 .../taurus/qt/qtgui/extra_pool/_TaurusMotorV.rst   |   14 -
 .../taurus/qt/qtgui/extra_pool/_TaurusMotorV2.rst  |   14 -
 .../devel/api/taurus/qt/qtgui/extra_sardana.rst    |   51 -
 .../qtgui/extra_sardana/_ExpDescriptionEditor.rst  |   14 -
 .../qtgui/extra_sardana/_MntGrpChannelEditor.rst   |   14 -
 .../qt/qtgui/extra_sardana/_SardanaEditor.rst      |   14 -
 .../extra_sardana/_SardanaElementTreeWidget.rst    |   14 -
 .../devel/api/taurus/qt/qtgui/extra_sardana/ui.rst |   17 -
 doc/source/devel/api/taurus/qt/qtgui/graphic.rst   |   16 +-
 .../{_newDialog.rst => _QGraphicsTextBoxing.rst}   |    8 +-
 .../{_newDialog.rst => _TaurusGroupItem.rst}       |    8 +-
 .../{_newDialog.rst => _TaurusSplineStateItem.rst} |    8 +-
 .../devel/api/taurus/qt/qtgui/graphic/jdraw.rst    |    8 +
 .../api/taurus/qt/qtgui/graphic/jdraw/test.rst     |   25 +
 .../api/taurus/qt/qtgui/graphic/jdraw/test/res.rst |   17 +
 doc/source/devel/api/taurus/qt/qtgui/panel.rst     |    2 +
 .../devel/api/taurus/qt/qtgui/panel/test.rst       |   17 +
 doc/source/devel/api/taurus/qt/qtgui/taurusgui.rst |    4 -
 .../api/taurus/qt/qtgui/taurusgui/_MacroBroker.rst |   14 -
 doc/source/devel/api/taurus/qt/qtgui/test.rst      |   35 +
 .../taurus/qt/qtgui/test/_BaseWidgetTestCase.rst   |   14 +
 .../qt/qtgui/test/_GenericWidgetTestCase.rst       |   14 +
 doc/source/devel/api/taurus/qt/qtgui/util.rst      |   14 +
 doc/source/devel/api/taurus/qt/qtgui/util/test.rst |   25 +
 .../api/taurus/qt/qtgui/util/test/test_ui.rst      |   37 +
 .../util/test/test_ui/_UILoadableTestCase.rst      |   14 +
 doc/source/devel/api/taurus/test.rst               |   47 +
 .../_ModuleExplorer.rst}                           |    8 +-
 doc/source/devel/api/taurus_AllClasses.rst         |  120 +-
 doc/source/devel/catalog.html                      | 1370 +++++++--------
 doc/source/devel/coding_guide.rst                  |   20 +-
 doc/source/devel/examples.rst                      |   27 +-
 doc/source/devel/examples/dumpy-bakeout.jdw        |    0
 doc/source/devel/examples/edit01.py                |    2 +-
 doc/source/devel/examples/edit02.py                |    2 +-
 doc/source/devel/examples/edit03.py                |    2 +-
 doc/source/devel/examples/forms01.py               |    2 +-
 doc/source/devel/examples/label01.py               |    2 +-
 doc/source/devel/examples/label02.py               |    2 +-
 doc/source/devel/examples/label03.py               |    2 +-
 doc/source/devel/examples/label04.py               |    2 +-
 doc/source/devel/examples/label05.py               |    2 +-
 doc/source/devel/examples/label06.py               |    2 +-
 .../devel/examples/parentmodel_issue_demo.py       |    2 +-
 doc/source/devel/examples/taurusplot01.py          |    2 +-
 doc/source/devel/examples/taurusplot02.py          |    2 +-
 doc/source/devel/examples/taurusplot03.py          |    2 +-
 doc/source/devel/examples/taurustrend01.py         |    2 +-
 doc/source/devel/examples/taurusvalue01.py         |    2 +-
 doc/source/devel/icon_example.py                   |    2 +-
 doc/source/index.rst                               |    3 +
 doc/source/revision.rst                            |   45 -
 doc/source/users/introduction.rst                  |    2 +-
 doc/source/users/ui/experimentconfiguration.rst    |    2 +-
 doc/source/users/ui/sardanaeditor.rst              |    2 +-
 lib/taurus/core/release.py                         |    2 +-
 lib/taurus/core/tango/sardana/macro.py             | 1119 ------------
 lib/taurus/core/tango/sardana/macroserver.py       | 1159 -------------
 lib/taurus/core/tango/sardana/motion.py            |  567 -------
 lib/taurus/core/tango/sardana/pool.py              | 1780 --------------------
 lib/taurus/core/tango/sardana/sardana.py           |  713 --------
 lib/taurus/core/tango/starter.py                   |  228 +++
 lib/taurus/core/tango/tangoattribute.py            |  142 +-
 lib/taurus/core/taurusconfiguration.py             |    3 +
 lib/taurus/core/taurushelper.py                    |  107 +-
 lib/taurus/core/util/colors.py                     |    0
 lib/taurus/core/util/containers.py                 |    5 +-
 lib/taurus/core/util/enumeration.py                |   36 +-
 lib/taurus/core/util/log.py                        |   19 +-
 .../extra_sardana/ui => external}/__init__.py      |   14 +-
 .../argparse/__init__.py}                          |   26 +-
 .../compile_UIs.sh => external/enum/__init__.py}   |   31 +-
 .../ordereddict/__init__.py}                       |   32 +-
 .../compile_UIs.sh => external/pint/__init__.py}   |   34 +-
 scripts/sequencer => lib/taurus/external/qt/Qt.py  |   20 +-
 lib/taurus/{qt/Qt.py => external/qt/QtCore.py}     |  159 +-
 .../__init__.py => external/qt/QtDesigner.py}      |   24 +-
 .../sardana/__init__.py => external/qt/QtGui.py}   |   32 +-
 .../__init__.py => external/qt/QtNetwork.py}       |   24 +-
 .../__init__.py => external/qt/QtSvg.py}           |   24 +-
 .../__init__.py => external/qt/QtUiTools.py}       |   24 +-
 .../__init__.py => external/qt/QtWebKit.py}        |   24 +-
 .../__init__.py => external/qt/Qwt5.py}            |   23 +-
 lib/taurus/external/qt/__init__.py                 |  412 +++++
 lib/taurus/external/qt/uic.py                      |  136 ++
 .../extra_sardana/ui => external/test}/__init__.py |   14 +-
 lib/taurus/external/test/test_qt.py                |  115 ++
 .../unittest/__init__.py}                          |   27 +-
 lib/taurus/qt/Qt.py                                |  131 +-
 lib/taurus/qt/QtCore.py                            |   48 +-
 lib/taurus/qt/QtDesigner.py                        |   15 +-
 lib/taurus/qt/QtGui.py                             |   15 +-
 lib/taurus/qt/QtNetwork.py                         |   15 +-
 lib/taurus/qt/QtSvg.py                             |   15 +-
 .../taurusdesigner => lib/taurus/qt/QtUiTools.py   |   24 +-
 lib/taurus/qt/QtWebKit.py                          |   15 +-
 lib/taurus/qt/Qwt5.py                              |   15 +-
 lib/taurus/qt/__init__.py                          |   14 +-
 .../qt/qtcore/communication/communication.py       |    2 +-
 .../qt/qtcore/configuration/configuration.py       |    8 +-
 lib/taurus/qt/qtcore/model/taurusdatabasemodel.py  |    8 +-
 lib/taurus/qt/qtcore/model/taurusmodel.py          |    4 +-
 lib/taurus/qt/qtcore/tango/sardana/macroserver.py  |  174 --
 lib/taurus/qt/qtcore/tango/sardana/model.py        |  461 -----
 lib/taurus/qt/qtcore/tango/sardana/pool.py         |   93 -
 lib/taurus/qt/qtcore/taurusqlistener.py            |    2 +-
 lib/taurus/qt/qtcore/util/emitter.py               |    2 +-
 lib/taurus/qt/qtcore/util/properties.py            |    2 +-
 lib/taurus/qt/qtcore/util/tauruslog.py             |    2 +-
 lib/taurus/qt/qtdesigner/containerplugin.py        |   16 +-
 lib/taurus/qt/qtdesigner/taurusdesigner.py         |    2 +-
 .../qt/qtdesigner/taurusplugin/taurusplugin.py     |    4 +-
 lib/taurus/qt/qtdesigner/tauruspluginplugin.py     |    2 +-
 .../qt/qtgui/application/taurusapplication.py      |   14 +-
 lib/taurus/qt/qtgui/base/taurusbase.py             |   36 +-
 lib/taurus/qt/qtgui/base/tauruscontroller.py       |    7 +-
 lib/taurus/qt/qtgui/base/taurusqattribute.py       |    2 +-
 lib/taurus/qt/qtgui/button/qbuttonbox.py           |    2 +-
 lib/taurus/qt/qtgui/button/taurusbutton.py         |    8 +-
 .../{extra_sardana/ui => button/test}/__init__.py  |   10 +-
 lib/taurus/qt/qtgui/button/test/res/Timeout        |  124 ++
 .../customeditors => button/test/res}/__init__.py  |   10 +-
 .../qt/qtgui/button/test/test_taurusbutton.py      |   97 ++
 .../tango/sardana => qtgui/compact}/__init__.py    |   16 +-
 lib/taurus/qt/qtgui/compact/abstractswitcher.py    |  380 +++++
 lib/taurus/qt/qtgui/compact/basicswitcher.py       |   76 +
 lib/taurus/qt/qtgui/console/taurusconsole.py       |    2 +-
 .../qt/qtgui/console/taurusconsoleapplication.py   |    2 +-
 .../qt/qtgui/console/taurusconsoleextensions.py    |    5 +-
 .../qt/qtgui/console/taurusconsolefactory.py       |    2 +-
 lib/taurus/qt/qtgui/console/taurusconsolewindow.py |    2 +-
 lib/taurus/qt/qtgui/container/qcontainer.py        |    2 +-
 .../qt/qtgui/container/taurusbasecontainer.py      |    2 +-
 lib/taurus/qt/qtgui/container/taurusframe.py       |    2 +-
 lib/taurus/qt/qtgui/container/taurusgroupbox.py    |    2 +-
 lib/taurus/qt/qtgui/container/taurusgroupwidget.py |    2 +-
 lib/taurus/qt/qtgui/container/taurusmainwindow.py  |   12 +-
 lib/taurus/qt/qtgui/container/taurusscrollarea.py  |    2 +-
 lib/taurus/qt/qtgui/container/tauruswidget.py      |    2 +-
 .../qt/qtgui/dialog/taurusconfigurationdialog.py   |    2 +-
 lib/taurus/qt/qtgui/dialog/taurusinputdialog.py    |    2 +-
 lib/taurus/qt/qtgui/dialog/taurusmessagebox.py     |    2 +-
 .../qt/qtgui/display/demo/qpixmapwidgetdemo.py     |    2 +-
 .../qt/qtgui/display/demo/tauruslabeldemo.py       |    2 +-
 lib/taurus/qt/qtgui/display/demo/tauruslcddemo.py  |    2 +-
 lib/taurus/qt/qtgui/display/demo/taurusleddemo.py  |    2 +-
 lib/taurus/qt/qtgui/display/qfallback.py           |    2 +-
 lib/taurus/qt/qtgui/display/qled.py                |    2 +-
 lib/taurus/qt/qtgui/display/qlogo.py               |    2 +-
 lib/taurus/qt/qtgui/display/qpixmapwidget.py       |    2 +-
 lib/taurus/qt/qtgui/display/qsevensegment.py       |    2 +-
 lib/taurus/qt/qtgui/display/taurusboolled.py       |    2 +-
 lib/taurus/qt/qtgui/display/taurusconfiglabel.py   |    2 +-
 lib/taurus/qt/qtgui/display/tauruslabel.py         |   11 +-
 lib/taurus/qt/qtgui/display/tauruslcd.py           |    2 +-
 lib/taurus/qt/qtgui/display/tauruslcdvalue.py      |    2 +-
 lib/taurus/qt/qtgui/display/taurusled.py           |    2 +-
 lib/taurus/qt/qtgui/display/taurusstateled.py      |    2 +-
 lib/taurus/qt/qtgui/display/taurusvaluelabel.py    |    4 +-
 .../ui/compile_UIs.sh => display/test/__init__.py} |   13 +-
 .../qt/qtgui/display/test/test_tauruslabel.py      |   86 +
 lib/taurus/qt/qtgui/editor/tauruseditor.py         |    2 +-
 lib/taurus/qt/qtgui/extra_guiqwt/curve.py          |    2 +-
 lib/taurus/qt/qtgui/extra_guiqwt/curvesmodel.py    |  242 ++-
 lib/taurus/qt/qtgui/extra_guiqwt/image.py          |   35 +-
 lib/taurus/qt/qtgui/extra_guiqwt/plot.py           |    2 +-
 lib/taurus/qt/qtgui/extra_guiqwt/taurustrend2d.py  |    2 +-
 lib/taurus/qt/qtgui/extra_guiqwt/tools.py          |    2 +-
 .../qtgui/extra_guiqwt/ui/ui_CurveItemConfDlg.py   |  100 --
 .../qt/qtgui/extra_macroexecutor/__init__.py       |   20 +-
 lib/taurus/qt/qtgui/extra_macroexecutor/common.py  |  340 ----
 .../qt/qtgui/extra_macroexecutor/dooroutput.py     |  212 ---
 .../favouriteseditor/favouriteseditor.py           |  217 ---
 .../favouriteseditor/historyviewer.py              |  177 --
 .../extra_macroexecutor/favouriteseditor/model.py  |  103 --
 lib/taurus/qt/qtgui/extra_macroexecutor/globals.py |  186 --
 .../qt/qtgui/extra_macroexecutor/macrobutton.py    |  366 ----
 .../extra_macroexecutor/macrodescriptionviewer.py  |  100 --
 .../qt/qtgui/extra_macroexecutor/macroeditor.py    |  238 ---
 .../qt/qtgui/extra_macroexecutor/macroexecutor.py  |  998 -----------
 .../macroparameterseditor/customeditors/senv.py    |  374 ----
 .../macroparameterseditor/delegate.py              |  125 --
 .../macroparameterseditor/macroparameterseditor.py |  379 -----
 .../macroparameterseditor/model.py                 |  222 ---
 .../macroparameterseditor/parameditors.py          |  327 ----
 .../qt/qtgui/extra_macroexecutor/scanplotter.py    |  161 --
 .../extra_macroexecutor/sequenceeditor/delegate.py |  153 --
 .../extra_macroexecutor/sequenceeditor/model.py    |  406 -----
 .../sequenceeditor/sequenceeditor.py               |  875 ----------
 .../qt/qtgui/extra_macroexecutor/ui/macrobutton.ui |   93 -
 .../qt/qtgui/extra_macroexecutor/ui_macrobutton.py |   61 -
 .../qt/qtgui/extra_nexus/taurusnexuswidget.py      |    2 +-
 lib/taurus/qt/qtgui/extra_pool/__init__.py         |   21 +-
 lib/taurus/qt/qtgui/extra_pool/motor.py            | 1140 -------------
 lib/taurus/qt/qtgui/extra_pool/poolchannel.py      |  129 --
 lib/taurus/qt/qtgui/extra_pool/poolioregister.py   |  302 ----
 lib/taurus/qt/qtgui/extra_pool/poolmotor.py        | 1458 ----------------
 lib/taurus/qt/qtgui/extra_pool/poolmotor.py.tests  |  460 -----
 .../qtgui/extra_pool/ui/AppleiiPLCTemperature.ui   |  211 ---
 .../extra_pool/ui/AppleiiPLCTemperatureAlarms.ui   |  255 ---
 lib/taurus/qt/qtgui/extra_pool/ui/PoolMotorSlim.ui |  375 -----
 lib/taurus/qt/qtgui/extra_pool/ui/TaurusMotorH.ui  |  226 ---
 lib/taurus/qt/qtgui/extra_pool/ui/TaurusMotorH2.ui |  235 ---
 lib/taurus/qt/qtgui/extra_pool/ui/TaurusMotorV.ui  |  224 ---
 lib/taurus/qt/qtgui/extra_pool/ui/TaurusMotorV2.ui |  882 ----------
 .../qtgui/extra_pool/ui/poolioregisterbuttons.ui   |   49 -
 .../qtgui/extra_pool/ui_poolioregisterbuttons.py   |   50 -
 lib/taurus/qt/qtgui/extra_pool/ui_poolmotorslim.py |  202 ---
 lib/taurus/qt/qtgui/extra_pool/ui_taurusmotorh.py  |  107 --
 lib/taurus/qt/qtgui/extra_pool/ui_taurusmotorh2.py |  113 --
 lib/taurus/qt/qtgui/extra_pool/ui_taurusmotorv.py  |  112 --
 lib/taurus/qt/qtgui/extra_pool/ui_taurusmotorv2.py |  409 -----
 lib/taurus/qt/qtgui/extra_sardana/__init__.py      |   27 +-
 lib/taurus/qt/qtgui/extra_sardana/cmdline.py       |  110 --
 .../qt/qtgui/extra_sardana/controllertree.py       |  346 ----
 lib/taurus/qt/qtgui/extra_sardana/elementtree.py   |   98 --
 lib/taurus/qt/qtgui/extra_sardana/environment.py   |  101 --
 .../qt/qtgui/extra_sardana/expdescription.py       |  395 -----
 lib/taurus/qt/qtgui/extra_sardana/macrotree.py     |  320 ----
 .../qt/qtgui/extra_sardana/measurementgroup.py     |  980 -----------
 .../qt/qtgui/extra_sardana/sardanabasewizard.py    |   82 -
 lib/taurus/qt/qtgui/extra_sardana/sardanaeditor.py |  557 ------
 lib/taurus/qt/qtgui/extra_sardana/startup.py       |  185 --
 .../qtgui/extra_sardana/ui/ExpDescriptionEditor.ui |  268 ---
 .../extra_sardana/ui/ui_ExpDescriptionEditor.py    |  166 --
 lib/taurus/qt/qtgui/extra_xterm/qxtermwidget.py    |    2 +-
 lib/taurus/qt/qtgui/gauge/demo/qmeterdemo.py       |    2 +-
 lib/taurus/qt/qtgui/gauge/qmeter.py                |    2 +-
 lib/taurus/qt/qtgui/gauge/taurusgauge.py           |    2 +-
 lib/taurus/qt/qtgui/graphic/jdraw/jdraw.py         |  233 ++-
 lib/taurus/qt/qtgui/graphic/jdraw/jdraw_lextab.py  |    9 +
 lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py  |   81 +-
 lib/taurus/qt/qtgui/graphic/jdraw/jdraw_view.py    |   48 +-
 lib/taurus/qt/qtgui/graphic/jdraw/jdraw_yacctab.py |   63 +
 .../ui => graphic/jdraw/test}/__init__.py          |    0
 .../graphic/jdraw/test/res/SimpleScalarViewer.jdw  |  171 ++
 .../jdraw/test/res}/__init__.py                    |   14 +-
 .../qt/qtgui/graphic/jdraw/test/res/styles.jdw     |   70 +
 lib/taurus/qt/qtgui/graphic/taurusgraphic.py       |  350 +++-
 lib/taurus/qt/qtgui/graphic/taurusgraphicview.py   |    2 +-
 lib/taurus/qt/qtgui/image/taurusqub.py             |    2 +-
 lib/taurus/qt/qtgui/input/choicedlg.py             |    2 +-
 lib/taurus/qt/qtgui/input/qwheel.py                |    2 +-
 lib/taurus/qt/qtgui/input/tauruscheckbox.py        |    2 +-
 lib/taurus/qt/qtgui/input/tauruscombobox.py        |    2 +-
 lib/taurus/qt/qtgui/input/tauruslineedit.py        |    2 +-
 lib/taurus/qt/qtgui/input/taurusspinbox.py         |   37 +-
 lib/taurus/qt/qtgui/input/tauruswheel.py           |    2 +-
 lib/taurus/qt/qtgui/model/qbasemodel.py            |    2 +-
 lib/taurus/qt/qtgui/panel/qdataexportdialog.py     |    9 +-
 lib/taurus/qt/qtgui/panel/qdoublelist.py           |   13 +-
 lib/taurus/qt/qtgui/panel/qrawdatachooser.py       |   12 +-
 lib/taurus/qt/qtgui/panel/report/albareport.py     |    2 +-
 lib/taurus/qt/qtgui/panel/report/basicreport.py    |   12 +-
 .../qt/qtgui/panel/report/ui/ui_SendMailForm.py    |   65 -
 .../qt/qtgui/panel/taurusattributechooser.py       |    8 +-
 lib/taurus/qt/qtgui/panel/taurusconfigbrowser.py   |    2 +-
 lib/taurus/qt/qtgui/panel/taurusconfigeditor.py    |    2 +-
 .../qt/qtgui/panel/taurusconfigurationpanel.py     |   14 +-
 lib/taurus/qt/qtgui/panel/taurusdevicepanel.py     |   13 +-
 lib/taurus/qt/qtgui/panel/taurusfilterpanel.py     |   56 +-
 lib/taurus/qt/qtgui/panel/taurusform.py            |   31 +-
 lib/taurus/qt/qtgui/panel/taurusinputpanel.py      |   16 +-
 lib/taurus/qt/qtgui/panel/taurusmessagepanel.py    |   55 +-
 lib/taurus/qt/qtgui/panel/taurusmodelchooser.py    |    2 +-
 lib/taurus/qt/qtgui/panel/taurusmodellist.py       |    2 +-
 lib/taurus/qt/qtgui/panel/taurusvalue.py           |   56 +-
 .../{extra_sardana/ui => panel/test}/__init__.py   |    8 +-
 lib/taurus/qt/qtgui/panel/test/test_taurusform.py  |   72 +
 lib/taurus/qt/qtgui/panel/test/test_taurusvalue.py |   62 +
 .../ui/{DataExportDlg.ui => QDataExportDialog.ui}  |    0
 .../ui/{DoubleListDlg.ui => QDoubleListDlg.ui}     |    0
 .../ui/{RawDataChooser.ui => QRawDataWidget.ui}    |    0
 ...tributeChooser.ui => TaurusAttributeChooser.ui} |    0
 .../qt/qtgui/panel/ui/TaurusConfigurationPanel.ui  |   40 +-
 .../qt/qtgui/{ => panel}/ui/TaurusDevPanel.ui      |   10 +-
 .../{FilterView.ui => ui/TaurusFilterPanel.ui}     |    0
 lib/taurus/qt/qtgui/panel/ui/TaurusInputPanel.ui   |    4 +-
 lib/taurus/qt/qtgui/panel/ui/TaurusMessagePanel.ui |   34 +-
 .../qt/qtgui/panel/ui/ui_AttributeChooser.py       |  163 --
 lib/taurus/qt/qtgui/panel/ui/ui_DataExportDlg.py   |   63 -
 lib/taurus/qt/qtgui/panel/ui/ui_DoubleListDlg.py   |   99 --
 lib/taurus/qt/qtgui/panel/ui/ui_RawDataChooser.py  |  208 ---
 .../qtgui/panel/ui/ui_TaurusConfigurationPanel.py  |  207 ---
 .../qtgui/panel/ui/ui_TaurusConfigurationPanel.ui  |  353 ----
 .../qt/qtgui/panel/ui/ui_TaurusInputPanel.py       |   69 -
 .../qt/qtgui/panel/ui/ui_TaurusMessagePanel.py     |  106 --
 lib/taurus/qt/qtgui/plot/arrayedit.py              |   32 +-
 lib/taurus/qt/qtgui/plot/curveStatsDlg.py          |    8 +-
 lib/taurus/qt/qtgui/plot/curveprops.py             |   14 +-
 .../qt/qtgui/plot/curvesAppearanceChooserDlg.py    |   18 +-
 lib/taurus/qt/qtgui/plot/monitor.py                |    2 +-
 lib/taurus/qt/qtgui/plot/qwtdialog.py              |   18 +-
 lib/taurus/qt/qtgui/plot/scales.py                 |    2 +-
 lib/taurus/qt/qtgui/plot/taurusarrayedit.py        |    2 +-
 lib/taurus/qt/qtgui/plot/taurusplot.py             |    2 +-
 lib/taurus/qt/qtgui/plot/taurusplotconf.py         |   12 +-
 lib/taurus/qt/qtgui/plot/taurustrend.py            |    8 +-
 ...aranceChooser.ui => CurvesAppearanceChooser.ui} |    0
 .../ui/{TaurusPlotConf.ui => TaurusPlotConfDlg.ui} |    0
 lib/taurus/qt/qtgui/plot/ui/ui_AddCPointsDialog.py |   98 --
 lib/taurus/qt/qtgui/plot/ui/ui_ArrayEditor.py      |   70 -
 lib/taurus/qt/qtgui/plot/ui/ui_ControllerBox.py    |  105 --
 .../qt/qtgui/plot/ui/ui_CurvePropertiesView.py     |  136 --
 lib/taurus/qt/qtgui/plot/ui/ui_CurveStatsDialog.py |  174 --
 .../qt/qtgui/plot/ui/ui_EditCPointsDialog.py       |   68 -
 lib/taurus/qt/qtgui/plot/ui/ui_TaurusPlotConf.py   |  200 ---
 .../qt/qtgui/plot/ui/ui_TaurusPlotConfigDialog.py  |  231 ---
 .../qt/qtgui/plot/ui/ui_curvesAppearanceChooser.py |  195 ---
 lib/taurus/qt/qtgui/resource/catalog.html          | 1370 +++++++--------
 .../resource/extra-icons/designer/devs_tree.png    |  Bin
 .../resource/extra-icons/designer/ledgreen.png     |  Bin 1307 -> 1415 bytes
 .../qtgui/resource/extra-icons/designer/ledred.png |  Bin 1165 -> 1416 bytes
 .../resource/rrze-icons/emblems/inspector-hat.svg  |    0
 .../qt/qtgui/resource/taurus_resource_utils.py     |    2 +-
 lib/taurus/qt/qtgui/style/__init__.py              |    2 +-
 lib/taurus/qt/qtgui/style/nebula.py                |    2 +-
 lib/taurus/qt/qtgui/table/qdictionary.py           |    2 +-
 lib/taurus/qt/qtgui/table/qlogtable.py             |    2 +-
 lib/taurus/qt/qtgui/table/qtable.py                |    3 +-
 lib/taurus/qt/qtgui/table/taurusdbtable.py         |    2 +-
 .../qt/qtgui/table/taurusdevicepropertytable.py    |    2 +-
 lib/taurus/qt/qtgui/table/taurusgrid.py            |   19 +-
 lib/taurus/qt/qtgui/table/taurusvaluestable.py     |    2 +-
 lib/taurus/qt/qtgui/table/taurusvaluestable_ro.py  |    2 +-
 .../qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py |    2 +-
 lib/taurus/qt/qtgui/taurusgui/__init__.py          |   31 +-
 lib/taurus/qt/qtgui/taurusgui/appsettingswizard.py | 1056 ++++++------
 .../gui_noconf.py}                                 |   28 +-
 .../gui_pureconf.py}                               |   28 +-
 .../gui_selfconf.py}                               |   27 +-
 lib/taurus/qt/qtgui/taurusgui/macrolistener.py     |  674 +++++---
 .../qt/qtgui/taurusgui/paneldescriptionwizard.py   |    2 +-
 lib/taurus/qt/qtgui/taurusgui/taurusgui.py         |  887 +++++-----
 ...anelAssociationsDlg.ui => AssociationDialog.ui} |    0
 .../qtgui/taurusgui/ui/ui_PanelAssociationsDlg.py  |   90 -
 lib/taurus/qt/qtgui/taurusgui/utils.py             |   19 +-
 .../taurus/qt/qtgui/test/__init__.py               |   11 +-
 lib/taurus/qt/qtgui/test/base.py                   |  158 ++
 lib/taurus/qt/qtgui/tree/qtree.py                  |    3 +-
 lib/taurus/qt/qtgui/tree/taurusdbtree.py           |    2 +-
 lib/taurus/qt/qtgui/tree/taurusdevicetree.py       |   39 +-
 lib/taurus/qt/qtgui/ui/ui_TaurusDevPanel.py        |   82 -
 lib/taurus/qt/qtgui/util/__init__.py               |    3 +-
 lib/taurus/qt/qtgui/util/qdraganddropdebug.py      |    2 +-
 lib/taurus/qt/qtgui/util/taurusaction.py           |    2 +-
 lib/taurus/qt/qtgui/util/taurusactionfactory.py    |    2 +-
 lib/taurus/qt/qtgui/util/tauruscolor.py            |    2 +-
 lib/taurus/qt/qtgui/util/taurusscreenshot.py       |    8 +-
 lib/taurus/qt/qtgui/util/tauruswidgetfactory.py    |    2 +-
 lib/taurus/qt/qtgui/util/tauruswidgettree.py       |    2 +-
 .../{extra_sardana/ui => util/test}/__init__.py    |    8 +-
 .../test/test_ui}/__init__.py                      |    7 +-
 lib/taurus/qt/qtgui/util/test/test_ui/test_ui.py   |   87 +
 .../qt/qtgui/util/test/test_ui/ui/MyWidget1.ui     |   32 +
 .../test/test_ui/ui/mywidget2/mywidget2_custom.ui  |   32 +
 lib/taurus/qt/qtgui/util/ui.py                     |  175 ++
 lib/taurus/qt/taurusqtoptions.py                   |   98 --
 lib/taurus/qt/uic/__init__.py                      |    2 +-
 lib/taurus/tauruscustomsettings.py                 |   94 +-
 lib/taurus/test/__init__.py                        |   71 +
 lib/taurus/test/base.py                            |  137 ++
 lib/taurus/test/fuzzytest.py                       |  134 ++
 {tests => lib/taurus/test}/moduleexplorer.py       |  203 ++-
 lib/taurus/test/resource.py                        |   69 +
 lib/taurus/test/skip.py                            |   75 +
 .../taurus/test/test_import.py                     |   37 +-
 lib/taurus/test/testsuite.py                       |   67 +
 scripts/taurusdemo                                 |    2 +-
 scripts/taurusdesigner                             |    2 +-
 scripts/taurusuic4                                 |    7 +
 setup.cfg                                          |    3 -
 setup.py                                           |  337 ++--
 458 files changed, 8955 insertions(+), 31630 deletions(-)

diff --git a/PKG-INFO b/PKG-INFO
index 772d54d..4905b54 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: taurus
-Version: 3.2.0
+Version: 3.3.0
 Summary: A library designed to provide an abstraction layer over PyTango.
 Home-page: http://packages.python.org/taurus
 Author: Carlos Pascual-Izarra
@@ -37,7 +37,7 @@ Requires: PyQt4 (>=4.4)
 Requires: PyQt4.Qwt5 (>=5.2.0)
 Requires: ply (>=2.3)
 Requires: lxml (>=2.1)
-Requires: spyder (>=2.1)
+Requires: spyder (>=2.2)
 Provides: taurus
 Provides: taurus.core
 Provides: taurus.qt
diff --git a/doc/auto_rst4api.py b/doc/auto_rst4api.py
index 0757dee..863a039 100644
--- a/doc/auto_rst4api.py
+++ b/doc/auto_rst4api.py
@@ -28,12 +28,20 @@
 the API of a python module with sphinx'''
 
 import sys, os
+import imp
 from jinja2 import Environment, FileSystemLoader
 
-#import ModuleExplorer from "../tests/modulexplorer.py"
-from imp import load_source
-mpath = os.path.abspath(os.path.join(os.path.dirname(__file__),os.path.pardir,'tests','moduleexplorer.py'))
-ModuleExplorer = load_source('moduleexplorer', mpath).ModuleExplorer
+def taurusabspath(*path):
+    """A method to determine absolute path for a given relative path to the
+    directory where the setup.py script is located"""
+    this_dir = os.path.dirname(os.path.abspath(__file__))
+    setup_dir = os.path.abspath(os.path.join(this_dir, os.pardir))
+    return os.path.join(setup_dir, *path)
+
+#import moduleexplorer from the sources, and without importing taurus
+__name = "moduleexplorer"
+__path = taurusabspath('lib', 'taurus', 'test', 'moduleexplorer.py')
+ModuleExplorer = imp.load_source(__name, __path).ModuleExplorer
 
 
 class Auto_rst4API_Creator(object):
@@ -151,7 +159,7 @@ class Auto_rst4API_Creator(object):
         for sminfo in info['submodules'].itervalues():
             self.createStubs(sminfo, absdocpath)
     
-    def documentModule(self, modulename, docparentpath, exclude_patterns=()):
+    def documentModule(self, modulename, docparentpath, exclude_patterns=None):
         '''
         recursive function that walks on the module structure and generates
         documentation files for the given module and its submodules. It also
@@ -168,7 +176,11 @@ class Auto_rst4API_Creator(object):
         :return: (list<str>) list of warning messages 
         '''
         if self.verbose: print "\nDocumenting %s..."%modulename
-        moduleinfo, w = ModuleExplorer.explore(modulename, exclude_patterns=self.exclude_patterns, verbose=self.verbose)
+        if exclude_patterns is None:
+            exclude_patterns = self.exclude_patterns
+        moduleinfo, w = ModuleExplorer.explore(modulename, 
+                                               exclude_patterns=exclude_patterns, 
+                                               verbose=self.verbose)
         self.createStubs(moduleinfo, docparentpath)
         self.createClassIndex(moduleinfo, os.path.join(docparentpath,"%s_AllClasses.rst"%modulename))
         if len (w) == 0: return []
diff --git a/doc/man/macroexecutor.1 b/doc/man/macroexecutor.1
deleted file mode 100644
index 2e16778..0000000
--- a/doc/man/macroexecutor.1
+++ /dev/null
@@ -1,36 +0,0 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH MACROEXECUTOR "1" "February 2014" "macroexecutor 3.2.0" "User Commands"
-.SH NAME
-macroexecutor \- manual page for macroexecutor 3.2.0
-.SH SYNOPSIS
-.B macroexecutor
-[\fIoptions\fR]
-.SH OPTIONS
-.TP
-\fB\-\-version\fR
-show program's version number and exit
-.TP
-\fB\-h\fR, \fB\-\-help\fR
-show this help message and exit
-.IP
-Taurus Options:
-.IP
-Basic options present in any taurus application
-.TP
-\fB\-\-taurus\-log\-level\fR=\fILEVEL\fR
-taurus log level. Allowed values are (case
-insensitive): critical, error, warning/warn, info,
-debug, trace
-.TP
-\fB\-\-taurus\-polling\-period\fR=\fIMILLISEC\fR
-taurus global polling period in milliseconds
-.TP
-\fB\-\-taurus\-serialization\-mode\fR=\fISERIAL\fR
-taurus serialization mode. Allowed values are (case
-insensitive): serial, concurrent (default)
-.TP
-\fB\-\-tango\-host\fR=\fITANGO_HOST\fR
-Tango host name
-.TP
-\fB\-\-remote\-console\-port\fR=\fIPORT\fR
-enables remote debugging using the given port
diff --git a/doc/man/sequencer.1 b/doc/man/sequencer.1
deleted file mode 100644
index 6383cae..0000000
--- a/doc/man/sequencer.1
+++ /dev/null
@@ -1,36 +0,0 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH SEQUENCER "1" "February 2014" "sequencer 3.2.0" "User Commands"
-.SH NAME
-sequencer \- manual page for sequencer 3.2.0
-.SH SYNOPSIS
-.B sequencer
-[\fIoptions\fR]
-.SH OPTIONS
-.TP
-\fB\-\-version\fR
-show program's version number and exit
-.TP
-\fB\-h\fR, \fB\-\-help\fR
-show this help message and exit
-.IP
-Taurus Options:
-.IP
-Basic options present in any taurus application
-.TP
-\fB\-\-taurus\-log\-level\fR=\fILEVEL\fR
-taurus log level. Allowed values are (case
-insensitive): critical, error, warning/warn, info,
-debug, trace
-.TP
-\fB\-\-taurus\-polling\-period\fR=\fIMILLISEC\fR
-taurus global polling period in milliseconds
-.TP
-\fB\-\-taurus\-serialization\-mode\fR=\fISERIAL\fR
-taurus serialization mode. Allowed values are (case
-insensitive): serial, concurrent (default)
-.TP
-\fB\-\-tango\-host\fR=\fITANGO_HOST\fR
-Tango host name
-.TP
-\fB\-\-remote\-console\-port\fR=\fIPORT\fR
-enables remote debugging using the given port
diff --git a/doc/man/tau2taurus.1 b/doc/man/tau2taurus.1
index 2a67434..bfc6fef 100644
--- a/doc/man/tau2taurus.1
+++ b/doc/man/tau2taurus.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH TAU2TAURUS "1" "February 2014" "tau2taurus 3.2.0" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.45.1.
+.TH TAU2TAURUS "1" "July 2014" "tau2taurus 3.3.0" "User Commands"
 .SH NAME
-tau2taurus \- manual page for tau2taurus 3.2.0
+tau2taurus \- manual page for tau2taurus 3.3.0
 .SH SYNOPSIS
 .B tau2taurus
-[\fIoptions\fR] \fIinputfile\fR
+[\fI\,options\/\fR] \fI\,inputfile\/\fR
 .SH DESCRIPTION
 tau to taurus ui file translator
 .SH OPTIONS
@@ -15,5 +15,5 @@ show program's version number and exit
 \fB\-h\fR, \fB\-\-help\fR
 show this help message and exit
 .TP
-\fB\-o\fR FILE, \fB\-\-output\fR=\fIFILE\fR
+\fB\-o\fR FILE, \fB\-\-output\fR=\fI\,FILE\/\fR
 output FILE [default=console]
diff --git a/doc/man/taurusconfigbrowser.1 b/doc/man/taurusconfigbrowser.1
index cb1c105..b4ea065 100644
--- a/doc/man/taurusconfigbrowser.1
+++ b/doc/man/taurusconfigbrowser.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH TAURUSCONFIGEDITOR "1" "February 2014" "taurusconfigeditor 3.2.0" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.45.1.
+.TH TAURUSCONFIGEDITOR "1" "July 2014" "taurusconfigeditor 3.3.0" "User Commands"
 .SH NAME
-taurusconfigeditor \- manual page for taurusconfigeditor 3.2.0
+taurusconfigeditor \- manual page for taurusconfigeditor 3.3.0
 .SH SYNOPSIS
 .B taurusconfigbrowser
-[\fIoptions\fR] [\fIINIFILENAME\fR]
+[\fI\,options\/\fR] [\fI\,INIFILENAME\/\fR]
 .SH DESCRIPTION
 taurus configuration editor
 .SH OPTIONS
@@ -19,20 +19,20 @@ Taurus Options:
 .IP
 Basic options present in any taurus application
 .TP
-\fB\-\-taurus\-log\-level\fR=\fILEVEL\fR
+\fB\-\-taurus\-log\-level\fR=\fI\,LEVEL\/\fR
 taurus log level. Allowed values are (case
 insensitive): critical, error, warning/warn, info,
 debug, trace
 .TP
-\fB\-\-taurus\-polling\-period\fR=\fIMILLISEC\fR
+\fB\-\-taurus\-polling\-period\fR=\fI\,MILLISEC\/\fR
 taurus global polling period in milliseconds
 .TP
-\fB\-\-taurus\-serialization\-mode\fR=\fISERIAL\fR
+\fB\-\-taurus\-serialization\-mode\fR=\fI\,SERIAL\/\fR
 taurus serialization mode. Allowed values are (case
 insensitive): serial, concurrent (default)
 .TP
-\fB\-\-tango\-host\fR=\fITANGO_HOST\fR
+\fB\-\-tango\-host\fR=\fI\,TANGO_HOST\/\fR
 Tango host name
 .TP
-\fB\-\-remote\-console\-port\fR=\fIPORT\fR
+\fB\-\-remote\-console\-port\fR=\fI\,PORT\/\fR
 enables remote debugging using the given port
diff --git a/doc/man/tauruscurve.1 b/doc/man/tauruscurve.1
index 515bdbd..27e5895 100644
--- a/doc/man/tauruscurve.1
+++ b/doc/man/tauruscurve.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH TAURUS "1" "February 2014" "Taurus Curve Dialog 3.2.0" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.45.1.
+.TH TAURUS "1" "July 2014" "Taurus Curve Dialog 3.3.0" "User Commands"
 .SH NAME
-Taurus \- manual page for Taurus Curve Dialog 3.2.0
+Taurus \- manual page for Taurus Curve Dialog 3.3.0
 .SH SYNOPSIS
 .B tauruscurve
-[\fIoptions\fR] [\fI<model1> \fR[\fI<model2>\fR] ...]
+[\fI\,options\/\fR] [\fI\,<model1> \/\fR[\fI\,<model2>\/\fR] ...]
 .SH DESCRIPTION
 a taurus application for plotting 1D data sets
 .SH OPTIONS
@@ -15,7 +15,7 @@ show this help message and exit
 \fB\-\-demo\fR
 show a demo of the widget
 .TP
-\fB\-\-window\-name\fR=\fIWINDOW_NAME\fR
+\fB\-\-window\-name\fR=\fI\,WINDOW_NAME\/\fR
 Name of the window
 .TP
 \fB\-\-version\fR
@@ -25,20 +25,20 @@ Taurus Options:
 .IP
 Basic options present in any taurus application
 .TP
-\fB\-\-taurus\-log\-level\fR=\fILEVEL\fR
+\fB\-\-taurus\-log\-level\fR=\fI\,LEVEL\/\fR
 taurus log level. Allowed values are (case
 insensitive): critical, error, warning/warn, info,
 debug, trace
 .TP
-\fB\-\-taurus\-polling\-period\fR=\fIMILLISEC\fR
+\fB\-\-taurus\-polling\-period\fR=\fI\,MILLISEC\/\fR
 taurus global polling period in milliseconds
 .TP
-\fB\-\-taurus\-serialization\-mode\fR=\fISERIAL\fR
+\fB\-\-taurus\-serialization\-mode\fR=\fI\,SERIAL\/\fR
 taurus serialization mode. Allowed values are (case
 insensitive): serial, concurrent (default)
 .TP
-\fB\-\-tango\-host\fR=\fITANGO_HOST\fR
+\fB\-\-tango\-host\fR=\fI\,TANGO_HOST\/\fR
 Tango host name
 .TP
-\fB\-\-remote\-console\-port\fR=\fIPORT\fR
+\fB\-\-remote\-console\-port\fR=\fI\,PORT\/\fR
 enables remote debugging using the given port
diff --git a/doc/man/taurusdemo.1 b/doc/man/taurusdemo.1
index 4e496dd..1e11893 100644
--- a/doc/man/taurusdemo.1
+++ b/doc/man/taurusdemo.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH TAURUSDEMO "1" "February 2014" "taurusdemo 1.0" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.45.1.
+.TH TAURUSDEMO "1" "July 2014" "taurusdemo 1.0" "User Commands"
 .SH NAME
 taurusdemo \- manual page for taurusdemo 1.0
 .SH SYNOPSIS
 .B taurusdemo
-[\fIoptions\fR]
+[\fI\,options\/\fR]
 .SH DESCRIPTION
 A demo application for taurus
 .SH OPTIONS
@@ -19,20 +19,20 @@ Taurus Options:
 .IP
 Basic options present in any taurus application
 .TP
-\fB\-\-taurus\-log\-level\fR=\fILEVEL\fR
+\fB\-\-taurus\-log\-level\fR=\fI\,LEVEL\/\fR
 taurus log level. Allowed values are (case
 insensitive): critical, error, warning/warn, info,
 debug, trace
 .TP
-\fB\-\-taurus\-polling\-period\fR=\fIMILLISEC\fR
+\fB\-\-taurus\-polling\-period\fR=\fI\,MILLISEC\/\fR
 taurus global polling period in milliseconds
 .TP
-\fB\-\-taurus\-serialization\-mode\fR=\fISERIAL\fR
+\fB\-\-taurus\-serialization\-mode\fR=\fI\,SERIAL\/\fR
 taurus serialization mode. Allowed values are (case
 insensitive): serial, concurrent (default)
 .TP
-\fB\-\-tango\-host\fR=\fITANGO_HOST\fR
+\fB\-\-tango\-host\fR=\fI\,TANGO_HOST\/\fR
 Tango host name
 .TP
-\fB\-\-remote\-console\-port\fR=\fIPORT\fR
+\fB\-\-remote\-console\-port\fR=\fI\,PORT\/\fR
 enables remote debugging using the given port
diff --git a/doc/man/taurusdesigner.1 b/doc/man/taurusdesigner.1
index 2d658c8..a91203c 100644
--- a/doc/man/taurusdesigner.1
+++ b/doc/man/taurusdesigner.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH TAURUSDESIGNER "1" "February 2014" "taurusdesigner 3.2.0" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.45.1.
+.TH TAURUSDESIGNER "1" "July 2014" "taurusdesigner 3.3.0" "User Commands"
 .SH NAME
-taurusdesigner \- manual page for taurusdesigner 3.2.0
+taurusdesigner \- manual page for taurusdesigner 3.3.0
 .SH SYNOPSIS
 .B taurusdesigner
-[\fIoptions\fR] \fI<ui file(s)>\fR
+[\fI\,options\/\fR] \fI\,<ui file(s)>\/\fR
 .SH DESCRIPTION
 The Qt designer application customized for taurus
 .SH OPTIONS
@@ -15,8 +15,8 @@ show program's version number and exit
 \fB\-h\fR, \fB\-\-help\fR
 show this help message and exit
 .TP
-\fB\-\-taurus\-path\fR=\fITAURUSPATH\fR
+\fB\-\-taurus\-path\fR=\fI\,TAURUSPATH\/\fR
 additional directories to look for taurus widgets
 .TP
-\fB\-\-qt\-designer\-path\fR=\fIPYQTDESIGNERPATH\fR
+\fB\-\-qt\-designer\-path\fR=\fI\,PYQTDESIGNERPATH\/\fR
 additional directories to look for python qt widgets
diff --git a/doc/man/taurusdevicepanel.1 b/doc/man/taurusdevicepanel.1
index 664a407..2e546f4 100644
--- a/doc/man/taurusdevicepanel.1
+++ b/doc/man/taurusdevicepanel.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH TAURUSDEVICEPANEL "1" "February 2014" "TaurusDevicePanel 3.2.0" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.45.1.
+.TH TAURUSDEVICEPANEL "1" "July 2014" "TaurusDevicePanel 3.3.0" "User Commands"
 .SH NAME
-TaurusDevicePanel \- manual page for TaurusDevicePanel 3.2.0
+TaurusDevicePanel \- manual page for TaurusDevicePanel 3.3.0
 .SH SYNOPSIS
 .B taurusdevicepanel
-[\fIoptions\fR] [\fIdevname \fR[\fIattrs\fR]]
+[\fI\,options\/\fR] [\fI\,devname \/\fR[\fI\,attrs\/\fR]]
 .SH DESCRIPTION
 Taurus Application inspired in Jive and Atk Panel
 .SH OPTIONS
@@ -12,7 +12,7 @@ Taurus Application inspired in Jive and Atk Panel
 \fB\-h\fR, \fB\-\-help\fR
 show this help message and exit
 .TP
-\fB\-\-config\-file\fR=\fICONFIG_FILE\fR
+\fB\-\-config\-file\fR=\fI\,CONFIG_FILE\/\fR
 load a config file (TODO: document this option)
 .TP
 \fB\-\-version\fR
@@ -22,20 +22,20 @@ Taurus Options:
 .IP
 Basic options present in any taurus application
 .TP
-\fB\-\-taurus\-log\-level\fR=\fILEVEL\fR
+\fB\-\-taurus\-log\-level\fR=\fI\,LEVEL\/\fR
 taurus log level. Allowed values are (case
 insensitive): critical, error, warning/warn, info,
 debug, trace
 .TP
-\fB\-\-taurus\-polling\-period\fR=\fIMILLISEC\fR
+\fB\-\-taurus\-polling\-period\fR=\fI\,MILLISEC\/\fR
 taurus global polling period in milliseconds
 .TP
-\fB\-\-taurus\-serialization\-mode\fR=\fISERIAL\fR
+\fB\-\-taurus\-serialization\-mode\fR=\fI\,SERIAL\/\fR
 taurus serialization mode. Allowed values are (case
 insensitive): serial, concurrent (default)
 .TP
-\fB\-\-tango\-host\fR=\fITANGO_HOST\fR
+\fB\-\-tango\-host\fR=\fI\,TANGO_HOST\/\fR
 Tango host name
 .TP
-\fB\-\-remote\-console\-port\fR=\fIPORT\fR
+\fB\-\-remote\-console\-port\fR=\fI\,PORT\/\fR
 enables remote debugging using the given port
diff --git a/doc/man/taurusdoc.1 b/doc/man/taurusdoc.1
index 13d8a5e..4f9b17f 100644
--- a/doc/man/taurusdoc.1
+++ b/doc/man/taurusdoc.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH TAURUSDOC "1" "February 2014" "taurusdoc 3.2.0" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.45.1.
+.TH TAURUSDOC "1" "July 2014" "taurusdoc 3.3.0" "User Commands"
 .SH NAME
-taurusdoc \- manual page for taurusdoc 3.2.0
+taurusdoc \- manual page for taurusdoc 3.3.0
 .SH SYNOPSIS
 .B taurusdoc
-[\fIoptions\fR]
+[\fI\,options\/\fR]
 .SH DESCRIPTION
 a tool to help developers preview the documentation generated by their code
 .SH OPTIONS
@@ -21,7 +21,7 @@ display a lot of information [default]
 \fB\-q\fR, \fB\-\-quiet\fR
 be really silent
 .TP
-\fB\-\-build\-dir\fR=\fIBUILD_DIR\fR
+\fB\-\-build\-dir\fR=\fI\,BUILD_DIR\/\fR
 build directory [default=./build]
 .TP
 \fB\-a\fR, \fB\-\-all\-files\fR
@@ -30,19 +30,19 @@ generate from scratch [default]
 \fB\-\-cache\fR
 use previously generated files
 .TP
-\fB\-\-format\fR=\fIBUILDER\fR
+\fB\-\-format\fR=\fI\,BUILDER\/\fR
 output format [default=html]
 .TP
-\fB\-\-prefix\fR=\fIPREFIX\fR
+\fB\-\-prefix\fR=\fI\,PREFIX\/\fR
 output directory
 .TP
-\fB\-\-class\fR=\fIKLASS\fR
+\fB\-\-class\fR=\fI\,KLASS\/\fR
 full class name to generate doc for (ex.:
 taurus.qt.qtgui.display.TaurusLabel
 .TP
-\fB\-\-package\fR=\fIPACKAGE\fR
+\fB\-\-package\fR=\fI\,PACKAGE\/\fR
 full package name to generate doc for (ex.:
 taurus.qt.qtgui.display)
 .TP
-\fB\-\-file\fR=\fIFILENAME\fR
+\fB\-\-file\fR=\fI\,FILENAME\/\fR
 RST file
diff --git a/doc/man/taurusform.1 b/doc/man/taurusform.1
index f05b1ae..e55811d 100644
--- a/doc/man/taurusform.1
+++ b/doc/man/taurusform.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH TAURUSFORM "1" "February 2014" "taurusform 3.2.0" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.45.1.
+.TH TAURUSFORM "1" "July 2014" "taurusform 3.3.0" "User Commands"
 .SH NAME
-taurusform \- manual page for taurusform 3.2.0
+taurusform \- manual page for taurusform 3.3.0
 .SH SYNOPSIS
 .B taurusform
-[\fIoptions\fR] [\fImodel1 \fR[\fImodel2 \fR...]]
+[\fI\,options\/\fR] [\fI\,model1 \/\fR[\fI\,model2 \/\fR...]]
 .SH DESCRIPTION
 the taurus form panel application
 .SH OPTIONS
@@ -12,10 +12,10 @@ the taurus form panel application
 \fB\-h\fR, \fB\-\-help\fR
 show this help message and exit
 .TP
-\fB\-\-window\-name\fR=\fIWINDOW_NAME\fR
+\fB\-\-window\-name\fR=\fI\,WINDOW_NAME\/\fR
 Name of the window
 .TP
-\fB\-\-config\fR=\fICONFIG_FILE\fR, \fB\-\-config\-file\fR=\fICONFIG_FILE\fR
+\fB\-\-config\fR=\fI\,CONFIG_FILE\/\fR, \fB\-\-config\-file\fR=\fI\,CONFIG_FILE\/\fR
 use the given config file for initialization
 .TP
 \fB\-\-version\fR
@@ -25,20 +25,20 @@ Taurus Options:
 .IP
 Basic options present in any taurus application
 .TP
-\fB\-\-taurus\-log\-level\fR=\fILEVEL\fR
+\fB\-\-taurus\-log\-level\fR=\fI\,LEVEL\/\fR
 taurus log level. Allowed values are (case
 insensitive): critical, error, warning/warn, info,
 debug, trace
 .TP
-\fB\-\-taurus\-polling\-period\fR=\fIMILLISEC\fR
+\fB\-\-taurus\-polling\-period\fR=\fI\,MILLISEC\/\fR
 taurus global polling period in milliseconds
 .TP
-\fB\-\-taurus\-serialization\-mode\fR=\fISERIAL\fR
+\fB\-\-taurus\-serialization\-mode\fR=\fI\,SERIAL\/\fR
 taurus serialization mode. Allowed values are (case
 insensitive): serial, concurrent (default)
 .TP
-\fB\-\-tango\-host\fR=\fITANGO_HOST\fR
+\fB\-\-tango\-host\fR=\fI\,TANGO_HOST\/\fR
 Tango host name
 .TP
-\fB\-\-remote\-console\-port\fR=\fIPORT\fR
+\fB\-\-remote\-console\-port\fR=\fI\,PORT\/\fR
 enables remote debugging using the given port
diff --git a/doc/man/taurusgui.1 b/doc/man/taurusgui.1
index 9a64a50..ac81ada 100644
--- a/doc/man/taurusgui.1
+++ b/doc/man/taurusgui.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH TAURUSGUI "1" "February 2014" "taurusgui 3.2.0" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.45.1.
+.TH TAURUSGUI "1" "July 2014" "taurusgui 3.3.0" "User Commands"
 .SH NAME
-taurusgui \- manual page for taurusgui 3.2.0
+taurusgui \- manual page for taurusgui 3.3.0
 .SH SYNOPSIS
 .B taurusgui
-[\fIoptions\fR] \fIconfname\fR
+[\fI\,options\/\fR] \fI\,confname\/\fR
 .SH DESCRIPTION
 The taurus GUI application
 .SH OPTIONS
@@ -12,7 +12,7 @@ The taurus GUI application
 \fB\-h\fR, \fB\-\-help\fR
 show this help message and exit
 .TP
-\fB\-\-config\-dir\fR=\fICONFIG_DIR\fR
+\fB\-\-config\-dir\fR=\fI\,CONFIG_DIR\/\fR
 use the given configuration directory for
 initialization
 .TP
@@ -31,20 +31,20 @@ Taurus Options:
 .IP
 Basic options present in any taurus application
 .TP
-\fB\-\-taurus\-log\-level\fR=\fILEVEL\fR
+\fB\-\-taurus\-log\-level\fR=\fI\,LEVEL\/\fR
 taurus log level. Allowed values are (case
 insensitive): critical, error, warning/warn, info,
 debug, trace
 .TP
-\fB\-\-taurus\-polling\-period\fR=\fIMILLISEC\fR
+\fB\-\-taurus\-polling\-period\fR=\fI\,MILLISEC\/\fR
 taurus global polling period in milliseconds
 .TP
-\fB\-\-taurus\-serialization\-mode\fR=\fISERIAL\fR
+\fB\-\-taurus\-serialization\-mode\fR=\fI\,SERIAL\/\fR
 taurus serialization mode. Allowed values are (case
 insensitive): serial, concurrent (default)
 .TP
-\fB\-\-tango\-host\fR=\fITANGO_HOST\fR
+\fB\-\-tango\-host\fR=\fI\,TANGO_HOST\/\fR
 Tango host name
 .TP
-\fB\-\-remote\-console\-port\fR=\fIPORT\fR
+\fB\-\-remote\-console\-port\fR=\fI\,PORT\/\fR
 enables remote debugging using the given port
diff --git a/doc/man/taurusimage.1 b/doc/man/taurusimage.1
index 69f5d40..0364ae1 100644
--- a/doc/man/taurusimage.1
+++ b/doc/man/taurusimage.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH TAURUS "1" "February 2014" "Taurus Image Dialog 3.2.0" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.45.1.
+.TH TAURUS "1" "July 2014" "Taurus Image Dialog 3.3.0" "User Commands"
 .SH NAME
-Taurus \- manual page for Taurus Image Dialog 3.2.0
+Taurus \- manual page for Taurus Image Dialog 3.3.0
 .SH SYNOPSIS
 .B taurusimage
-[\fIoptions\fR] \fI<model>\fR
+[\fI\,options\/\fR] \fI\,<model>\/\fR
 .SH DESCRIPTION
 a Taurus application for plotting Image Attributes
 .SH OPTIONS
@@ -18,7 +18,7 @@ show a demo of the widget
 \fB\-\-rgb\fR
 assume image is RGB
 .TP
-\fB\-\-window\-name\fR=\fIWINDOW_NAME\fR
+\fB\-\-window\-name\fR=\fI\,WINDOW_NAME\/\fR
 Name of the window
 .TP
 \fB\-\-version\fR
@@ -28,20 +28,20 @@ Taurus Options:
 .IP
 Basic options present in any taurus application
 .TP
-\fB\-\-taurus\-log\-level\fR=\fILEVEL\fR
+\fB\-\-taurus\-log\-level\fR=\fI\,LEVEL\/\fR
 taurus log level. Allowed values are (case
 insensitive): critical, error, warning/warn, info,
 debug, trace
 .TP
-\fB\-\-taurus\-polling\-period\fR=\fIMILLISEC\fR
+\fB\-\-taurus\-polling\-period\fR=\fI\,MILLISEC\/\fR
 taurus global polling period in milliseconds
 .TP
-\fB\-\-taurus\-serialization\-mode\fR=\fISERIAL\fR
+\fB\-\-taurus\-serialization\-mode\fR=\fI\,SERIAL\/\fR
 taurus serialization mode. Allowed values are (case
 insensitive): serial, concurrent (default)
 .TP
-\fB\-\-tango\-host\fR=\fITANGO_HOST\fR
+\fB\-\-tango\-host\fR=\fI\,TANGO_HOST\/\fR
 Tango host name
 .TP
-\fB\-\-remote\-console\-port\fR=\fIPORT\fR
+\fB\-\-remote\-console\-port\fR=\fI\,PORT\/\fR
 enables remote debugging using the given port
diff --git a/doc/man/tauruspanel.1 b/doc/man/tauruspanel.1
index 611e27d..833d38b 100644
--- a/doc/man/tauruspanel.1
+++ b/doc/man/tauruspanel.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH TAURUSPANEL "1" "February 2014" "tauruspanel 3.2.0" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.45.1.
+.TH TAURUSPANEL "1" "July 2014" "tauruspanel 3.3.0" "User Commands"
 .SH NAME
-tauruspanel \- manual page for tauruspanel 3.2.0
+tauruspanel \- manual page for tauruspanel 3.3.0
 .SH SYNOPSIS
 .B tauruspanel
-[\fIoptions\fR] [\fIdevname\fR]
+[\fI\,options\/\fR] [\fI\,devname\/\fR]
 .SH DESCRIPTION
 Taurus Application inspired in Jive and Atk Panel
 .SH OPTIONS
@@ -19,20 +19,20 @@ Taurus Options:
 .IP
 Basic options present in any taurus application
 .TP
-\fB\-\-taurus\-log\-level\fR=\fILEVEL\fR
+\fB\-\-taurus\-log\-level\fR=\fI\,LEVEL\/\fR
 taurus log level. Allowed values are (case
 insensitive): critical, error, warning/warn, info,
 debug, trace
 .TP
-\fB\-\-taurus\-polling\-period\fR=\fIMILLISEC\fR
+\fB\-\-taurus\-polling\-period\fR=\fI\,MILLISEC\/\fR
 taurus global polling period in milliseconds
 .TP
-\fB\-\-taurus\-serialization\-mode\fR=\fISERIAL\fR
+\fB\-\-taurus\-serialization\-mode\fR=\fI\,SERIAL\/\fR
 taurus serialization mode. Allowed values are (case
 insensitive): serial, concurrent (default)
 .TP
-\fB\-\-tango\-host\fR=\fITANGO_HOST\fR
+\fB\-\-tango\-host\fR=\fI\,TANGO_HOST\/\fR
 Tango host name
 .TP
-\fB\-\-remote\-console\-port\fR=\fIPORT\fR
+\fB\-\-remote\-console\-port\fR=\fI\,PORT\/\fR
 enables remote debugging using the given port
diff --git a/doc/man/taurusplot.1 b/doc/man/taurusplot.1
index a481f61..07c8278 100644
--- a/doc/man/taurusplot.1
+++ b/doc/man/taurusplot.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH TAURUSPLOT "1" "February 2014" "taurusplot 3.2.0" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.45.1.
+.TH TAURUSPLOT "1" "July 2014" "taurusplot 3.3.0" "User Commands"
 .SH NAME
-taurusplot \- manual page for taurusplot 3.2.0
+taurusplot \- manual page for taurusplot 3.3.0
 .SH SYNOPSIS
 .B taurusplot
-[\fIoptions\fR] [\fI<model1> \fR[\fI<model2>\fR] ...]
+[\fI\,options\/\fR] [\fI\,<model1> \/\fR[\fI\,<model2>\/\fR] ...]
 .SH DESCRIPTION
 a taurus application for plotting 1D data sets
 .SH OPTIONS
@@ -12,19 +12,19 @@ a taurus application for plotting 1D data sets
 \fB\-h\fR, \fB\-\-help\fR
 show this help message and exit
 .TP
-\fB\-x\fR t|n, \fB\-\-x\-axis\-mode\fR=\fIt\fR|n
+\fB\-x\fR t|n, \fB\-\-x\-axis\-mode\fR=\fI\,t\/\fR|n
 interprete X values as either timestamps (t) or
 numbers (n). Accepted values: t|n (e is also accepted
 as a synonim of n)
 .TP
-\fB\-\-config\fR=\fICONFIG_FILE\fR, \fB\-\-config\-file\fR=\fICONFIG_FILE\fR
+\fB\-\-config\fR=\fI\,CONFIG_FILE\/\fR, \fB\-\-config\-file\fR=\fI\,CONFIG_FILE\/\fR
 use the given config file for initialization
 .TP
-\fB\-\-export\fR=\fIEXPORT_FILE\fR, \fB\-\-export\-file\fR=\fIEXPORT_FILE\fR
+\fB\-\-export\fR=\fI\,EXPORT_FILE\/\fR, \fB\-\-export\-file\fR=\fI\,EXPORT_FILE\/\fR
 use the given file to as output instead of showing the
 plot
 .TP
-\fB\-\-window\-name\fR=\fIWINDOW_NAME\fR
+\fB\-\-window\-name\fR=\fI\,WINDOW_NAME\/\fR
 Name of the window
 .TP
 \fB\-\-version\fR
@@ -34,20 +34,20 @@ Taurus Options:
 .IP
 Basic options present in any taurus application
 .TP
-\fB\-\-taurus\-log\-level\fR=\fILEVEL\fR
+\fB\-\-taurus\-log\-level\fR=\fI\,LEVEL\/\fR
 taurus log level. Allowed values are (case
 insensitive): critical, error, warning/warn, info,
 debug, trace
 .TP
-\fB\-\-taurus\-polling\-period\fR=\fIMILLISEC\fR
+\fB\-\-taurus\-polling\-period\fR=\fI\,MILLISEC\/\fR
 taurus global polling period in milliseconds
 .TP
-\fB\-\-taurus\-serialization\-mode\fR=\fISERIAL\fR
+\fB\-\-taurus\-serialization\-mode\fR=\fI\,SERIAL\/\fR
 taurus serialization mode. Allowed values are (case
 insensitive): serial, concurrent (default)
 .TP
-\fB\-\-tango\-host\fR=\fITANGO_HOST\fR
+\fB\-\-tango\-host\fR=\fI\,TANGO_HOST\/\fR
 Tango host name
 .TP
-\fB\-\-remote\-console\-port\fR=\fIPORT\fR
+\fB\-\-remote\-console\-port\fR=\fI\,PORT\/\fR
 enables remote debugging using the given port
diff --git a/doc/man/taurusremotelogmonitor.1 b/doc/man/taurusremotelogmonitor.1
index 7f858d9..fb81be9 100644
--- a/doc/man/taurusremotelogmonitor.1
+++ b/doc/man/taurusremotelogmonitor.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH TAURUS "1" "February 2014" "Taurus remote logger 1.0" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.45.1.
+.TH TAURUS "1" "July 2014" "Taurus remote logger 1.0" "User Commands"
 .SH NAME
 Taurus \- manual page for Taurus remote logger 1.0
 .SH SYNOPSIS
 .B taurusremotelogmonitor
-[\fIoptions\fR]
+[\fI\,options\/\fR]
 .SH OPTIONS
 .TP
 \fB\-h\fR, \fB\-\-help\fR
@@ -16,14 +16,14 @@ gui mode [default]
 \fB\-c\fR, \fB\-\-console\fR
 console mode
 .TP
-\fB\-\-log\-port\fR=\fILOG_PORT\fR
+\fB\-\-log\-port\fR=\fI\,LOG_PORT\/\fR
 port where log server is running [default: 9020]
 .TP
-\fB\-\-log\-name\fR=\fILOG_NAME\fR
+\fB\-\-log\-name\fR=\fI\,LOG_NAME\/\fR
 filter specific log object [default: None, meaning
 don't filter]
 .TP
-\fB\-\-log\-level\fR=\fILOG_LEVEL\fR
+\fB\-\-log\-level\fR=\fI\,LOG_LEVEL\/\fR
 filter specific log level.Allowed values are (case
 insensitive): critical, error, warning/warn, info,
 debug, trace [default: debug].
@@ -35,20 +35,20 @@ Taurus Options:
 .IP
 Basic options present in any taurus application
 .TP
-\fB\-\-taurus\-log\-level\fR=\fILEVEL\fR
+\fB\-\-taurus\-log\-level\fR=\fI\,LEVEL\/\fR
 taurus log level. Allowed values are (case
 insensitive): critical, error, warning/warn, info,
 debug, trace
 .TP
-\fB\-\-taurus\-polling\-period\fR=\fIMILLISEC\fR
+\fB\-\-taurus\-polling\-period\fR=\fI\,MILLISEC\/\fR
 taurus global polling period in milliseconds
 .TP
-\fB\-\-taurus\-serialization\-mode\fR=\fISERIAL\fR
+\fB\-\-taurus\-serialization\-mode\fR=\fI\,SERIAL\/\fR
 taurus serialization mode. Allowed values are (case
 insensitive): serial, concurrent (default)
 .TP
-\fB\-\-tango\-host\fR=\fITANGO_HOST\fR
+\fB\-\-tango\-host\fR=\fI\,TANGO_HOST\/\fR
 Tango host name
 .TP
-\fB\-\-remote\-console\-port\fR=\fIPORT\fR
+\fB\-\-remote\-console\-port\fR=\fI\,PORT\/\fR
 enables remote debugging using the given port
diff --git a/doc/man/taurustrend.1 b/doc/man/taurustrend.1
index ce11215..7b8af79 100644
--- a/doc/man/taurustrend.1
+++ b/doc/man/taurustrend.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH TAURUSTREND "1" "February 2014" "taurustrend 3.2.0" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.45.1.
+.TH TAURUSTREND "1" "July 2014" "taurustrend 3.3.0" "User Commands"
 .SH NAME
-taurustrend \- manual page for taurustrend 3.2.0
+taurustrend \- manual page for taurustrend 3.3.0
 .SH SYNOPSIS
 .B taurustrend
-[\fIoptions\fR] [\fI<model1> \fR[\fI<model2>\fR] ...]
+[\fI\,options\/\fR] [\fI\,<model1> \/\fR[\fI\,<model2>\/\fR] ...]
 .SH DESCRIPTION
 a taurus application for plotting trends
 .SH OPTIONS
@@ -12,29 +12,29 @@ a taurus application for plotting trends
 \fB\-h\fR, \fB\-\-help\fR
 show this help message and exit
 .TP
-\fB\-x\fR t|e, \fB\-\-x\-axis\-mode\fR=\fIt\fR|e
+\fB\-x\fR t|e, \fB\-\-x\-axis\-mode\fR=\fI\,t\/\fR|e
 interprete X values as either timestamps (t) or event
 numbers (e). Accepted values: t|e
 .TP
-\fB\-b\fR MAX_BUFFER_SIZE, \fB\-\-buffer\fR=\fIMAX_BUFFER_SIZE\fR
+\fB\-b\fR MAX_BUFFER_SIZE, \fB\-\-buffer\fR=\fI\,MAX_BUFFER_SIZE\/\fR
 maximum number of values per curve to be plotted
 (default = 65536) (when reached, the oldest values
 will be discarded)
 .TP
-\fB\-\-config\fR=\fICONFIG_FILE\fR, \fB\-\-config\-file\fR=\fICONFIG_FILE\fR
+\fB\-\-config\fR=\fI\,CONFIG_FILE\/\fR, \fB\-\-config\-file\fR=\fI\,CONFIG_FILE\/\fR
 use the given config file for initialization
 .TP
-\fB\-\-export\fR=\fIEXPORT_FILE\fR, \fB\-\-export\-file\fR=\fIEXPORT_FILE\fR
+\fB\-\-export\fR=\fI\,EXPORT_FILE\/\fR, \fB\-\-export\-file\fR=\fI\,EXPORT_FILE\/\fR
 use the given file to as output instead of showing the
 plot
 .TP
-\fB\-r\fR MILLISECONDS, \fB\-\-forced\-read\fR=\fIMILLISECONDS\fR
+\fB\-r\fR MILLISECONDS, \fB\-\-forced\-read\fR=\fI\,MILLISECONDS\/\fR
 force Taurustrend to re\-read the attributes every
 MILLISECONDS ms
 .HP
 \fB\-a\fR, \fB\-\-use\-archiving\fR
 .TP
-\fB\-\-window\-name\fR=\fIWINDOW_NAME\fR
+\fB\-\-window\-name\fR=\fI\,WINDOW_NAME\/\fR
 Name of the window
 .TP
 \fB\-\-version\fR
@@ -44,20 +44,20 @@ Taurus Options:
 .IP
 Basic options present in any taurus application
 .TP
-\fB\-\-taurus\-log\-level\fR=\fILEVEL\fR
+\fB\-\-taurus\-log\-level\fR=\fI\,LEVEL\/\fR
 taurus log level. Allowed values are (case
 insensitive): critical, error, warning/warn, info,
 debug, trace
 .TP
-\fB\-\-taurus\-polling\-period\fR=\fIMILLISEC\fR
+\fB\-\-taurus\-polling\-period\fR=\fI\,MILLISEC\/\fR
 taurus global polling period in milliseconds
 .TP
-\fB\-\-taurus\-serialization\-mode\fR=\fISERIAL\fR
+\fB\-\-taurus\-serialization\-mode\fR=\fI\,SERIAL\/\fR
 taurus serialization mode. Allowed values are (case
 insensitive): serial, concurrent (default)
 .TP
-\fB\-\-tango\-host\fR=\fITANGO_HOST\fR
+\fB\-\-tango\-host\fR=\fI\,TANGO_HOST\/\fR
 Tango host name
 .TP
-\fB\-\-remote\-console\-port\fR=\fIPORT\fR
+\fB\-\-remote\-console\-port\fR=\fI\,PORT\/\fR
 enables remote debugging using the given port
diff --git a/doc/man/taurustrend1d.1 b/doc/man/taurustrend1d.1
index 3e4dab3..b24f25d 100644
--- a/doc/man/taurustrend1d.1
+++ b/doc/man/taurustrend1d.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH TAURUS "1" "February 2014" "Taurus Trend 3.2.0" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.45.1.
+.TH TAURUS "1" "July 2014" "Taurus Trend 3.3.0" "User Commands"
 .SH NAME
-Taurus \- manual page for Taurus Trend 3.2.0
+Taurus \- manual page for Taurus Trend 3.3.0
 .SH SYNOPSIS
 .B taurustrend1d
-[\fIoptions\fR] \fI<model>\fR
+[\fI\,options\/\fR] \fI\,<model>\/\fR
 .SH DESCRIPTION
 a Taurus application for plotting trends of scalars
 .SH OPTIONS
@@ -12,11 +12,11 @@ a Taurus application for plotting trends of scalars
 \fB\-h\fR, \fB\-\-help\fR
 show this help message and exit
 .TP
-\fB\-x\fR t|d|e, \fB\-\-x\-axis\-mode\fR=\fIt\fR|d|e
+\fB\-x\fR t|d|e, \fB\-\-x\-axis\-mode\fR=\fI\,t\/\fR|d|e
 interpret X values as timestamps (t), time deltas (d)
 or event numbers (e). Accepted values: t|d|e
 .TP
-\fB\-b\fR MAX_BUFFER_SIZE, \fB\-\-buffer\fR=\fIMAX_BUFFER_SIZE\fR
+\fB\-b\fR MAX_BUFFER_SIZE, \fB\-\-buffer\fR=\fI\,MAX_BUFFER_SIZE\/\fR
 maximum number of values to be plotted (when reached,
 the oldest values will be discarded)
 .HP
@@ -25,7 +25,7 @@ the oldest values will be discarded)
 \fB\-\-demo\fR
 show a demo of the widget
 .TP
-\fB\-\-window\-name\fR=\fIWINDOW_NAME\fR
+\fB\-\-window\-name\fR=\fI\,WINDOW_NAME\/\fR
 Name of the window
 .TP
 \fB\-\-version\fR
@@ -35,20 +35,20 @@ Taurus Options:
 .IP
 Basic options present in any taurus application
 .TP
-\fB\-\-taurus\-log\-level\fR=\fILEVEL\fR
+\fB\-\-taurus\-log\-level\fR=\fI\,LEVEL\/\fR
 taurus log level. Allowed values are (case
 insensitive): critical, error, warning/warn, info,
 debug, trace
 .TP
-\fB\-\-taurus\-polling\-period\fR=\fIMILLISEC\fR
+\fB\-\-taurus\-polling\-period\fR=\fI\,MILLISEC\/\fR
 taurus global polling period in milliseconds
 .TP
-\fB\-\-taurus\-serialization\-mode\fR=\fISERIAL\fR
+\fB\-\-taurus\-serialization\-mode\fR=\fI\,SERIAL\/\fR
 taurus serialization mode. Allowed values are (case
 insensitive): serial, concurrent (default)
 .TP
-\fB\-\-tango\-host\fR=\fITANGO_HOST\fR
+\fB\-\-tango\-host\fR=\fI\,TANGO_HOST\/\fR
 Tango host name
 .TP
-\fB\-\-remote\-console\-port\fR=\fIPORT\fR
+\fB\-\-remote\-console\-port\fR=\fI\,PORT\/\fR
 enables remote debugging using the given port
diff --git a/doc/man/taurustrend2d.1 b/doc/man/taurustrend2d.1
index d3f2fbe..5953448 100644
--- a/doc/man/taurustrend2d.1
+++ b/doc/man/taurustrend2d.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH TAURUS "1" "February 2014" "Taurus Trend 2D 3.2.0" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.45.1.
+.TH TAURUS "1" "July 2014" "Taurus Trend 2D 3.3.0" "User Commands"
 .SH NAME
-Taurus \- manual page for Taurus Trend 2D 3.2.0
+Taurus \- manual page for Taurus Trend 2D 3.3.0
 .SH SYNOPSIS
 .B taurustrend2d
-[\fIoptions\fR] \fI<model>\fR
+[\fI\,options\/\fR] \fI\,<model>\/\fR
 .SH DESCRIPTION
 a Taurus application for plotting trends of arrays (aka "spectrograms")
 .SH OPTIONS
@@ -12,11 +12,11 @@ a Taurus application for plotting trends of arrays (aka "spectrograms")
 \fB\-h\fR, \fB\-\-help\fR
 show this help message and exit
 .TP
-\fB\-x\fR t|d|e, \fB\-\-x\-axis\-mode\fR=\fIt\fR|d|e
+\fB\-x\fR t|d|e, \fB\-\-x\-axis\-mode\fR=\fI\,t\/\fR|d|e
 interpret X values as timestamps (t), time deltas (d)
 or event numbers (e). Accepted values: t|d|e
 .TP
-\fB\-b\fR MAX_BUFFER_SIZE, \fB\-\-buffer\fR=\fIMAX_BUFFER_SIZE\fR
+\fB\-b\fR MAX_BUFFER_SIZE, \fB\-\-buffer\fR=\fI\,MAX_BUFFER_SIZE\/\fR
 maximum number of values to be stacked (when reached,
 the oldest values will be discarded)
 .HP
@@ -25,7 +25,7 @@ the oldest values will be discarded)
 \fB\-\-demo\fR
 show a demo of the widget
 .TP
-\fB\-\-window\-name\fR=\fIWINDOW_NAME\fR
+\fB\-\-window\-name\fR=\fI\,WINDOW_NAME\/\fR
 Name of the window
 .TP
 \fB\-\-version\fR
@@ -35,20 +35,20 @@ Taurus Options:
 .IP
 Basic options present in any taurus application
 .TP
-\fB\-\-taurus\-log\-level\fR=\fILEVEL\fR
+\fB\-\-taurus\-log\-level\fR=\fI\,LEVEL\/\fR
 taurus log level. Allowed values are (case
 insensitive): critical, error, warning/warn, info,
 debug, trace
 .TP
-\fB\-\-taurus\-polling\-period\fR=\fIMILLISEC\fR
+\fB\-\-taurus\-polling\-period\fR=\fI\,MILLISEC\/\fR
 taurus global polling period in milliseconds
 .TP
-\fB\-\-taurus\-serialization\-mode\fR=\fISERIAL\fR
+\fB\-\-taurus\-serialization\-mode\fR=\fI\,SERIAL\/\fR
 taurus serialization mode. Allowed values are (case
 insensitive): serial, concurrent (default)
 .TP
-\fB\-\-tango\-host\fR=\fITANGO_HOST\fR
+\fB\-\-tango\-host\fR=\fI\,TANGO_HOST\/\fR
 Tango host name
 .TP
-\fB\-\-remote\-console\-port\fR=\fIPORT\fR
+\fB\-\-remote\-console\-port\fR=\fI\,PORT\/\fR
 enables remote debugging using the given port
diff --git a/doc/man/taurusuic4.1 b/doc/man/taurusuic4.1
index 5041e61..1edbd29 100644
--- a/doc/man/taurusuic4.1
+++ b/doc/man/taurusuic4.1
@@ -1,10 +1,10 @@
-.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.43.3.
-.TH TAURUSUIC4 "1" "February 2014" "taurusuic4 3.2.0" "User Commands"
+.\" DO NOT MODIFY THIS FILE!  It was generated by help2man 1.45.1.
+.TH TAURUSUIC4 "1" "July 2014" "taurusuic4 3.3.0" "User Commands"
 .SH NAME
-taurusuic4 \- manual page for taurusuic4 3.2.0
+taurusuic4 \- manual page for taurusuic4 3.3.0
 .SH SYNOPSIS
 .B taurusuic4
-[\fIoptions\fR] \fI<ui-file>\fR
+[\fI\,options\/\fR] \fI\,<ui-file>\/\fR
 .SH DESCRIPTION
 a taurus customized pyuic4
 .SH OPTIONS
@@ -15,9 +15,9 @@ show program's version number and exit
 \fB\-h\fR, \fB\-\-help\fR
 show this help message and exit
 .HP
-\fB\-p\fR PREVIEW, \fB\-\-preview\fR=\fIPREVIEW\fR
+\fB\-p\fR PREVIEW, \fB\-\-preview\fR=\fI\,PREVIEW\/\fR
 .TP
-\fB\-o\fR FILE, \fB\-\-output\fR=\fIFILE\fR
+\fB\-o\fR FILE, \fB\-\-output\fR=\fI\,FILE\/\fR
 write generated code to FILE instead of stdout
 .TP
 \fB\-x\fR, \fB\-\-execute\fR
@@ -26,7 +26,7 @@ generate extra code to test and display the class
 \fB\-d\fR, \fB\-\-debug\fR
 show debug output
 .TP
-\fB\-i\fR N, \fB\-\-indent\fR=\fIN\fR
+\fB\-i\fR N, \fB\-\-indent\fR=\fI\,N\/\fR
 set indent width to N spaces, tab if N is 0 (default:
 4)
 .TP
diff --git a/doc/source/contents.rst b/doc/source/contents.rst
index b53ad00..c258839 100644
--- a/doc/source/contents.rst
+++ b/doc/source/contents.rst
@@ -12,7 +12,6 @@ Contents
 
    users/index.rst
    devel/index.rst
-   History of changes <revision>
    
 * :ref:`genindex`
 * :ref:`modindex`
diff --git a/doc/source/devel/api/taurus.rst b/doc/source/devel/api/taurus.rst
index 0d8c157..a56109a 100644
--- a/doc/source/devel/api/taurus.rst
+++ b/doc/source/devel/api/taurus.rst
@@ -19,6 +19,8 @@
 
     qt <taurus/qt>
 
+    test <taurus/test>
+
     web <taurus/web>
 
 
diff --git a/doc/source/devel/api/taurus/core/tango.rst b/doc/source/devel/api/taurus/core/tango.rst
index 2c26ffc..5783290 100644
--- a/doc/source/devel/api/taurus/core/tango.rst
+++ b/doc/source/devel/api/taurus/core/tango.rst
@@ -15,8 +15,6 @@
 
     img <tango/img>
 
-    sardana <tango/sardana>
-
 
     
 
diff --git a/doc/source/devel/api/taurus/core/tango/sardana.rst b/doc/source/devel/api/taurus/core/tango/sardana.rst
deleted file mode 100644
index 38b17b6..0000000
--- a/doc/source/devel/api/taurus/core/tango/sardana.rst
+++ /dev/null
@@ -1,69 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.sardana
-
-:mod:`taurus.core.tango.sardana`
-================================
-
-.. automodule:: taurus.core.tango.sardana
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    sardana/_BaseSardanaElement.rst
-
-    sardana/_BaseSardanaElementContainer.rst
-
-    sardana/_ControllerClassInfo.rst
-
-    sardana/_ControllerInfo.rst
-
-    sardana/_Door.rst
-
-    sardana/_MacroServer.rst
-
-    sardana/_Pool.rst
-
-    sardana/_Sardana.rst
-
-    sardana/_SardanaManager.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`BaseSardanaElement`
-
-    * :class:`BaseSardanaElementContainer`
-
-    * :class:`ControllerClassInfo`
-
-    * :class:`ControllerInfo`
-
-    * :class:`Door`
-
-    * :class:`MacroServer`
-
-    * :class:`Pool`
-
-    * :class:`Sardana`
-
-    * :class:`SardanaManager`
-
-
-
-
-.. rubric:: Functions
-
-
-.. autofunction:: registerExtensions
-
-
-
diff --git a/doc/source/devel/api/taurus/core/tango/sardana/_BaseSardanaElement.rst b/doc/source/devel/api/taurus/core/tango/sardana/_BaseSardanaElement.rst
deleted file mode 100644
index 52718c9..0000000
--- a/doc/source/devel/api/taurus/core/tango/sardana/_BaseSardanaElement.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.sardana
-
-:class:`BaseSardanaElement`
-===========================
-
-.. inheritance-diagram:: BaseSardanaElement
-    :parts: 1
-    
-.. autoclass:: BaseSardanaElement
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/sardana/_BaseSardanaElementContainer.rst b/doc/source/devel/api/taurus/core/tango/sardana/_BaseSardanaElementContainer.rst
deleted file mode 100644
index fa9bdec..0000000
--- a/doc/source/devel/api/taurus/core/tango/sardana/_BaseSardanaElementContainer.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.sardana
-
-:class:`BaseSardanaElementContainer`
-====================================
-
-.. inheritance-diagram:: BaseSardanaElementContainer
-    :parts: 1
-    
-.. autoclass:: BaseSardanaElementContainer
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/sardana/_ControllerClassInfo.rst b/doc/source/devel/api/taurus/core/tango/sardana/_ControllerClassInfo.rst
deleted file mode 100644
index ed16efd..0000000
--- a/doc/source/devel/api/taurus/core/tango/sardana/_ControllerClassInfo.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.sardana
-
-:class:`ControllerClassInfo`
-============================
-
-.. inheritance-diagram:: ControllerClassInfo
-    :parts: 1
-    
-.. autoclass:: ControllerClassInfo
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/sardana/_ControllerInfo.rst b/doc/source/devel/api/taurus/core/tango/sardana/_ControllerInfo.rst
deleted file mode 100644
index d76db1f..0000000
--- a/doc/source/devel/api/taurus/core/tango/sardana/_ControllerInfo.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.sardana
-
-:class:`ControllerInfo`
-=======================
-
-.. inheritance-diagram:: ControllerInfo
-    :parts: 1
-    
-.. autoclass:: ControllerInfo
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/sardana/_Door.rst b/doc/source/devel/api/taurus/core/tango/sardana/_Door.rst
deleted file mode 100644
index e40c567..0000000
--- a/doc/source/devel/api/taurus/core/tango/sardana/_Door.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.sardana
-
-:class:`Door`
-=============
-
-.. inheritance-diagram:: Door
-    :parts: 1
-    
-.. autoclass:: Door
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/sardana/_MacroServer.rst b/doc/source/devel/api/taurus/core/tango/sardana/_MacroServer.rst
deleted file mode 100644
index fe813ee..0000000
--- a/doc/source/devel/api/taurus/core/tango/sardana/_MacroServer.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.sardana
-
-:class:`MacroServer`
-====================
-
-.. inheritance-diagram:: MacroServer
-    :parts: 1
-    
-.. autoclass:: MacroServer
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/sardana/_Pool.rst b/doc/source/devel/api/taurus/core/tango/sardana/_Pool.rst
deleted file mode 100644
index 01ea8df..0000000
--- a/doc/source/devel/api/taurus/core/tango/sardana/_Pool.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.sardana
-
-:class:`Pool`
-=============
-
-.. inheritance-diagram:: Pool
-    :parts: 1
-    
-.. autoclass:: Pool
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/sardana/_Sardana.rst b/doc/source/devel/api/taurus/core/tango/sardana/_Sardana.rst
deleted file mode 100644
index faea49c..0000000
--- a/doc/source/devel/api/taurus/core/tango/sardana/_Sardana.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.sardana
-
-:class:`Sardana`
-================
-
-.. inheritance-diagram:: Sardana
-    :parts: 1
-    
-.. autoclass:: Sardana
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util.rst b/doc/source/devel/api/taurus/core/util.rst
index 1760d23..d85904b 100644
--- a/doc/source/devel/api/taurus/core/util.rst
+++ b/doc/source/devel/api/taurus/core/util.rst
@@ -241,6 +241,8 @@
 
 .. autofunction:: error
 
+.. autofunction:: fatal
+
 .. autofunction:: getDictAsTree
 
 .. autofunction:: getSystemUserName
diff --git a/doc/source/devel/api/taurus/qt/qtcore/tango.rst b/doc/source/devel/api/taurus/qt/qtcore/tango.rst
index 61ec038..8b498b0 100644
--- a/doc/source/devel/api/taurus/qt/qtcore/tango.rst
+++ b/doc/source/devel/api/taurus/qt/qtcore/tango.rst
@@ -8,14 +8,6 @@
 .. automodule:: taurus.qt.qtcore.tango
 
 
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    sardana <tango/sardana>
-
-
     
 
 
diff --git a/doc/source/devel/api/taurus/qt/qtcore/tango/sardana.rst b/doc/source/devel/api/taurus/qt/qtcore/tango/sardana.rst
deleted file mode 100644
index 2192910..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/tango/sardana.rst
+++ /dev/null
@@ -1,23 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.tango.sardana
-
-:mod:`taurus.qt.qtcore.tango.sardana`
-=====================================
-
-.. automodule:: taurus.qt.qtcore.tango.sardana
-
-
-    
-
-
-
-
-
-.. rubric:: Functions
-
-
-.. autofunction:: registerExtensions
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui.rst b/doc/source/devel/api/taurus/qt/qtgui.rst
index 011f082..a8298aa 100644
--- a/doc/source/devel/api/taurus/qt/qtgui.rst
+++ b/doc/source/devel/api/taurus/qt/qtgui.rst
@@ -19,6 +19,8 @@
 
     button <qtgui/button>
 
+    compact <qtgui/compact>
+
     console <qtgui/console>
 
     container <qtgui/container>
@@ -31,14 +33,8 @@
 
     extra_guiqwt <qtgui/extra_guiqwt>
 
-    extra_macroexecutor <qtgui/extra_macroexecutor>
-
     extra_nexus <qtgui/extra_nexus>
 
-    extra_pool <qtgui/extra_pool>
-
-    extra_sardana <qtgui/extra_sardana>
-
     extra_xterm <qtgui/extra_xterm>
 
     gauge <qtgui/gauge>
@@ -63,6 +59,8 @@
 
     taurusgui <qtgui/taurusgui>
 
+    test <qtgui/test>
+
     tree <qtgui/tree>
 
     ui <qtgui/ui>
diff --git a/doc/source/devel/api/taurus/qt/qtgui/button.rst b/doc/source/devel/api/taurus/qt/qtgui/button.rst
index f7957dc..84c6e5f 100644
--- a/doc/source/devel/api/taurus/qt/qtgui/button.rst
+++ b/doc/source/devel/api/taurus/qt/qtgui/button.rst
@@ -8,6 +8,14 @@
 .. automodule:: taurus.qt.qtgui.button
 
 
+.. rubric:: Modules
+
+.. toctree::
+    :maxdepth: 1
+
+    test <button/test>
+
+
     
 
 
diff --git a/doc/source/devel/api/taurus/qt/qtgui/button/test.rst b/doc/source/devel/api/taurus/qt/qtgui/button/test.rst
new file mode 100644
index 0000000..966b0cb
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/button/test.rst
@@ -0,0 +1,25 @@
+.. AUTO_RST4API
+.. This file was generated by auto_rst4api.py. Changes may be lost
+.. currentmodule:: taurus.qt.qtgui.button.test
+
+:mod:`taurus.qt.qtgui.button.test`
+==================================
+
+.. automodule:: taurus.qt.qtgui.button.test
+
+
+.. rubric:: Modules
+
+.. toctree::
+    :maxdepth: 1
+
+    res <test/res>
+
+
+    
+
+
+
+
+
+
diff --git a/doc/source/devel/api/taurus/qt/qtgui/button/test/res.rst b/doc/source/devel/api/taurus/qt/qtgui/button/test/res.rst
new file mode 100644
index 0000000..da8bcdd
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/button/test/res.rst
@@ -0,0 +1,17 @@
+.. AUTO_RST4API
+.. This file was generated by auto_rst4api.py. Changes may be lost
+.. currentmodule:: taurus.qt.qtgui.button.test.res
+
+:mod:`taurus.qt.qtgui.button.test.res`
+======================================
+
+.. automodule:: taurus.qt.qtgui.button.test.res
+
+
+    
+
+
+
+
+
+
diff --git a/doc/source/devel/api/taurus/qt/qtgui/compact.rst b/doc/source/devel/api/taurus/qt/qtgui/compact.rst
new file mode 100644
index 0000000..f0e8792
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/compact.rst
@@ -0,0 +1,35 @@
+.. AUTO_RST4API
+.. This file was generated by auto_rst4api.py. Changes may be lost
+.. currentmodule:: taurus.qt.qtgui.compact
+
+:mod:`taurus.qt.qtgui.compact`
+==============================
+
+.. automodule:: taurus.qt.qtgui.compact
+
+
+    
+
+
+
+.. rubric:: Classes
+
+.. toctree::
+    :hidden:
+
+    compact/_TaurusLabelEditRW.rst
+
+    compact/_TaurusReadWriteSwitcher.rst
+
+
+.. hlist::
+    :columns: 2
+
+    * :class:`TaurusLabelEditRW`
+
+    * :class:`TaurusReadWriteSwitcher`
+
+
+
+
+
diff --git a/doc/source/devel/api/taurus/qt/qtgui/compact/_TaurusLabelEditRW.rst b/doc/source/devel/api/taurus/qt/qtgui/compact/_TaurusLabelEditRW.rst
new file mode 100644
index 0000000..4144ffe
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/compact/_TaurusLabelEditRW.rst
@@ -0,0 +1,14 @@
+.. AUTO_RST4API
+.. This file was generated by auto_rst4api.py. Changes may be lost
+.. currentmodule:: taurus.qt.qtgui.compact
+
+:class:`TaurusLabelEditRW`
+==========================
+
+.. inheritance-diagram:: TaurusLabelEditRW
+    :parts: 1
+    
+.. autoclass:: TaurusLabelEditRW
+    :members:
+    :undoc-members:
+    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/compact/_TaurusReadWriteSwitcher.rst b/doc/source/devel/api/taurus/qt/qtgui/compact/_TaurusReadWriteSwitcher.rst
new file mode 100644
index 0000000..0f1af27
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/compact/_TaurusReadWriteSwitcher.rst
@@ -0,0 +1,14 @@
+.. AUTO_RST4API
+.. This file was generated by auto_rst4api.py. Changes may be lost
+.. currentmodule:: taurus.qt.qtgui.compact
+
+:class:`TaurusReadWriteSwitcher`
+================================
+
+.. inheritance-diagram:: TaurusReadWriteSwitcher
+    :parts: 1
+    
+.. autoclass:: TaurusReadWriteSwitcher
+    :members:
+    :undoc-members:
+    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/display.rst b/doc/source/devel/api/taurus/qt/qtgui/display.rst
index 05d58d2..98cecf7 100644
--- a/doc/source/devel/api/taurus/qt/qtgui/display.rst
+++ b/doc/source/devel/api/taurus/qt/qtgui/display.rst
@@ -15,6 +15,8 @@
 
     demo <display/demo>
 
+    test <display/test>
+
 
     
 
diff --git a/doc/source/devel/api/taurus/qt/qtgui/display/test.rst b/doc/source/devel/api/taurus/qt/qtgui/display/test.rst
new file mode 100644
index 0000000..62e373c
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/display/test.rst
@@ -0,0 +1,17 @@
+.. AUTO_RST4API
+.. This file was generated by auto_rst4api.py. Changes may be lost
+.. currentmodule:: taurus.qt.qtgui.display.test
+
+:mod:`taurus.qt.qtgui.display.test`
+===================================
+
+.. automodule:: taurus.qt.qtgui.display.test
+
+
+    
+
+
+
+
+
+
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor.rst
deleted file mode 100644
index fb58363..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor.rst
+++ /dev/null
@@ -1,75 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor
-
-:mod:`taurus.qt.qtgui.extra_macroexecutor`
-==========================================
-
-.. automodule:: taurus.qt.qtgui.extra_macroexecutor
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    favouriteseditor <extra_macroexecutor/favouriteseditor>
-
-    macroparameterseditor <extra_macroexecutor/macroparameterseditor>
-
-    sequenceeditor <extra_macroexecutor/sequenceeditor>
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    extra_macroexecutor/_DoorDebug.rst
-
-    extra_macroexecutor/_DoorOutput.rst
-
-    extra_macroexecutor/_DoorResult.rst
-
-    extra_macroexecutor/_MacroButton.rst
-
-    extra_macroexecutor/_MacroButtonAbortDoor.rst
-
-    extra_macroexecutor/_TaurusMacroConfigurationDialog.rst
-
-    extra_macroexecutor/_TaurusMacroDescriptionViewer.rst
-
-    extra_macroexecutor/_TaurusMacroExecutor.rst
-
-    extra_macroexecutor/_TaurusMacroExecutorWidget.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`DoorDebug`
-
-    * :class:`DoorOutput`
-
-    * :class:`DoorResult`
-
-    * :class:`MacroButton`
-
-    * :class:`MacroButtonAbortDoor`
-
-    * :class:`TaurusMacroConfigurationDialog`
-
-    * :class:`TaurusMacroDescriptionViewer`
-
-    * :class:`TaurusMacroExecutor`
-
-    * :class:`TaurusMacroExecutorWidget`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_DoorDebug.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_DoorDebug.rst
deleted file mode 100644
index ad79122..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_DoorDebug.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor
-
-:class:`DoorDebug`
-==================
-
-.. inheritance-diagram:: DoorDebug
-    :parts: 1
-    
-.. autoclass:: DoorDebug
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_DoorOutput.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_DoorOutput.rst
deleted file mode 100644
index de3ad82..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_DoorOutput.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor
-
-:class:`DoorOutput`
-===================
-
-.. inheritance-diagram:: DoorOutput
-    :parts: 1
-    
-.. autoclass:: DoorOutput
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_DoorResult.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_DoorResult.rst
deleted file mode 100644
index a8d62d6..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_DoorResult.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor
-
-:class:`DoorResult`
-===================
-
-.. inheritance-diagram:: DoorResult
-    :parts: 1
-    
-.. autoclass:: DoorResult
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_MacroButton.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_MacroButton.rst
deleted file mode 100644
index 5ed7632..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_MacroButton.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor
-
-:class:`MacroButton`
-====================
-
-.. inheritance-diagram:: MacroButton
-    :parts: 1
-    
-.. autoclass:: MacroButton
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_MacroButtonAbortDoor.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_MacroButtonAbortDoor.rst
deleted file mode 100644
index c790dd2..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_MacroButtonAbortDoor.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor
-
-:class:`MacroButtonAbortDoor`
-=============================
-
-.. inheritance-diagram:: MacroButtonAbortDoor
-    :parts: 1
-    
-.. autoclass:: MacroButtonAbortDoor
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_TaurusMacroConfigurationDialog.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_TaurusMacroConfigurationDialog.rst
deleted file mode 100644
index 82d2ffb..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_TaurusMacroConfigurationDialog.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor
-
-:class:`TaurusMacroConfigurationDialog`
-=======================================
-
-.. inheritance-diagram:: TaurusMacroConfigurationDialog
-    :parts: 1
-    
-.. autoclass:: TaurusMacroConfigurationDialog
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_TaurusMacroDescriptionViewer.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_TaurusMacroDescriptionViewer.rst
deleted file mode 100644
index a90a0c0..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_TaurusMacroDescriptionViewer.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor
-
-:class:`TaurusMacroDescriptionViewer`
-=====================================
-
-.. inheritance-diagram:: TaurusMacroDescriptionViewer
-    :parts: 1
-    
-.. autoclass:: TaurusMacroDescriptionViewer
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_TaurusMacroExecutor.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_TaurusMacroExecutor.rst
deleted file mode 100644
index 9bc5c71..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_TaurusMacroExecutor.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor
-
-:class:`TaurusMacroExecutor`
-============================
-
-.. inheritance-diagram:: TaurusMacroExecutor
-    :parts: 1
-    
-.. autoclass:: TaurusMacroExecutor
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_TaurusMacroExecutorWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_TaurusMacroExecutorWidget.rst
deleted file mode 100644
index ecc2bce..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_TaurusMacroExecutorWidget.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor
-
-:class:`TaurusMacroExecutorWidget`
-==================================
-
-.. inheritance-diagram:: TaurusMacroExecutorWidget
-    :parts: 1
-    
-.. autoclass:: TaurusMacroExecutorWidget
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor.rst
deleted file mode 100644
index cfd7660..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor.rst
+++ /dev/null
@@ -1,35 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor.favouriteseditor
-
-:mod:`taurus.qt.qtgui.extra_macroexecutor.favouriteseditor`
-===========================================================
-
-.. automodule:: taurus.qt.qtgui.extra_macroexecutor.favouriteseditor
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    favouriteseditor/_FavouritesMacrosEditor.rst
-
-    favouriteseditor/_HistoryMacrosViewer.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`FavouritesMacrosEditor`
-
-    * :class:`HistoryMacrosViewer`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/_FavouritesMacrosEditor.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/_FavouritesMacrosEditor.rst
deleted file mode 100644
index 41690b0..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/_FavouritesMacrosEditor.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor.favouriteseditor
-
-:class:`FavouritesMacrosEditor`
-===============================
-
-.. inheritance-diagram:: FavouritesMacrosEditor
-    :parts: 1
-    
-.. autoclass:: FavouritesMacrosEditor
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/_HistoryMacrosViewer.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/_HistoryMacrosViewer.rst
deleted file mode 100644
index aabce6f..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/_HistoryMacrosViewer.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor.favouriteseditor
-
-:class:`HistoryMacrosViewer`
-============================
-
-.. inheritance-diagram:: HistoryMacrosViewer
-    :parts: 1
-    
-.. autoclass:: HistoryMacrosViewer
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor.rst
deleted file mode 100644
index c2d084d..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor.rst
+++ /dev/null
@@ -1,47 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor
-
-:mod:`taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor`
-================================================================
-
-.. automodule:: taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    customeditors <macroparameterseditor/customeditors>
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    macroparameterseditor/_ParamEditorManager.rst
-
-    macroparameterseditor/_ParamEditorModel.rst
-
-    macroparameterseditor/_StandardMacroParametersEditor.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`ParamEditorManager`
-
-    * :class:`ParamEditorModel`
-
-    * :class:`StandardMacroParametersEditor`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/_ParamEditorManager.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/_ParamEditorManager.rst
deleted file mode 100644
index 7b1e164..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/_ParamEditorManager.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor
-
-:class:`ParamEditorManager`
-===========================
-
-.. inheritance-diagram:: ParamEditorManager
-    :parts: 1
-    
-.. autoclass:: ParamEditorManager
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/_ParamEditorModel.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/_ParamEditorModel.rst
deleted file mode 100644
index 5b79c57..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/_ParamEditorModel.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor
-
-:class:`ParamEditorModel`
-=========================
-
-.. inheritance-diagram:: ParamEditorModel
-    :parts: 1
-    
-.. autoclass:: ParamEditorModel
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/_StandardMacroParametersEditor.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/_StandardMacroParametersEditor.rst
deleted file mode 100644
index 820eb93..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/_StandardMacroParametersEditor.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor
-
-:class:`StandardMacroParametersEditor`
-======================================
-
-.. inheritance-diagram:: StandardMacroParametersEditor
-    :parts: 1
-    
-.. autoclass:: StandardMacroParametersEditor
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors.rst
deleted file mode 100644
index 22cfc77..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors.rst
+++ /dev/null
@@ -1,31 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.customeditors
-
-:mod:`taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.customeditors`
-==============================================================================
-
-.. automodule:: taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.customeditors
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    customeditors/_SenvEditor.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`SenvEditor`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors/_SenvEditor.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors/_SenvEditor.rst
deleted file mode 100644
index 343cc4c..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors/_SenvEditor.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.customeditors
-
-:class:`SenvEditor`
-===================
-
-.. inheritance-diagram:: SenvEditor
-    :parts: 1
-    
-.. autoclass:: SenvEditor
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor.rst
deleted file mode 100644
index d7e0ce1..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor.rst
+++ /dev/null
@@ -1,41 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor.sequenceeditor
-
-:mod:`taurus.qt.qtgui.extra_macroexecutor.sequenceeditor`
-=========================================================
-
-.. automodule:: taurus.qt.qtgui.extra_macroexecutor.sequenceeditor
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    sequenceeditor/_TaurusSequencer.rst
-
-    sequenceeditor/_TaurusSequencerWidget.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`TaurusSequencer`
-
-    * :class:`TaurusSequencerWidget`
-
-
-
-
-.. rubric:: Functions
-
-
-.. autofunction:: main
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/_TaurusSequencer.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/_TaurusSequencer.rst
deleted file mode 100644
index 3e08ee5..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/_TaurusSequencer.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor.sequenceeditor
-
-:class:`TaurusSequencer`
-========================
-
-.. inheritance-diagram:: TaurusSequencer
-    :parts: 1
-    
-.. autoclass:: TaurusSequencer
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/_TaurusSequencerWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/_TaurusSequencerWidget.rst
deleted file mode 100644
index 84cb893..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/_TaurusSequencerWidget.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_macroexecutor.sequenceeditor
-
-:class:`TaurusSequencerWidget`
-==============================
-
-.. inheritance-diagram:: TaurusSequencerWidget
-    :parts: 1
-    
-.. autoclass:: TaurusSequencerWidget
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool.rst
deleted file mode 100644
index efa73c9..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool.rst
+++ /dev/null
@@ -1,103 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:mod:`taurus.qt.qtgui.extra_pool`
-=================================
-
-.. automodule:: taurus.qt.qtgui.extra_pool
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    extra_pool/_LabelWidgetDragsDeviceAndAttribute.rst
-
-    extra_pool/_PoolChannel.rst
-
-    extra_pool/_PoolChannelTV.rst
-
-    extra_pool/_PoolIORegister.rst
-
-    extra_pool/_PoolIORegisterButtons.rst
-
-    extra_pool/_PoolIORegisterReadWidget.rst
-
-    extra_pool/_PoolIORegisterTV.rst
-
-    extra_pool/_PoolIORegisterWriteWidget.rst
-
-    extra_pool/_PoolMotor.rst
-
-    extra_pool/_PoolMotorSlim.rst
-
-    extra_pool/_PoolMotorTV.rst
-
-    extra_pool/_PoolMotorTVLabelWidget.rst
-
-    extra_pool/_PoolMotorTVReadWidget.rst
-
-    extra_pool/_PoolMotorTVUnitsWidget.rst
-
-    extra_pool/_PoolMotorTVWriteWidget.rst
-
-    extra_pool/_TaurusMotorH.rst
-
-    extra_pool/_TaurusMotorH2.rst
-
-    extra_pool/_TaurusMotorV.rst
-
-    extra_pool/_TaurusMotorV2.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`LabelWidgetDragsDeviceAndAttribute`
-
-    * :class:`PoolChannel`
-
-    * :class:`PoolChannelTV`
-
-    * :class:`PoolIORegister`
-
-    * :class:`PoolIORegisterButtons`
-
-    * :class:`PoolIORegisterReadWidget`
-
-    * :class:`PoolIORegisterTV`
-
-    * :class:`PoolIORegisterWriteWidget`
-
-    * :class:`PoolMotor`
-
-    * :class:`PoolMotorSlim`
-
-    * :class:`PoolMotorTV`
-
-    * :class:`PoolMotorTVLabelWidget`
-
-    * :class:`PoolMotorTVReadWidget`
-
-    * :class:`PoolMotorTVUnitsWidget`
-
-    * :class:`PoolMotorTVWriteWidget`
-
-    * :class:`TaurusMotorH`
-
-    * :class:`TaurusMotorH2`
-
-    * :class:`TaurusMotorV`
-
-    * :class:`TaurusMotorV2`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_LabelWidgetDragsDeviceAndAttribute.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_LabelWidgetDragsDeviceAndAttribute.rst
deleted file mode 100644
index 79a138d..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_LabelWidgetDragsDeviceAndAttribute.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`LabelWidgetDragsDeviceAndAttribute`
-===========================================
-
-.. inheritance-diagram:: LabelWidgetDragsDeviceAndAttribute
-    :parts: 1
-    
-.. autoclass:: LabelWidgetDragsDeviceAndAttribute
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolChannel.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolChannel.rst
deleted file mode 100644
index e9987ea..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolChannel.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`PoolChannel`
-====================
-
-.. inheritance-diagram:: PoolChannel
-    :parts: 1
-    
-.. autoclass:: PoolChannel
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolChannelTV.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolChannelTV.rst
deleted file mode 100644
index 516bb89..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolChannelTV.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`PoolChannelTV`
-======================
-
-.. inheritance-diagram:: PoolChannelTV
-    :parts: 1
-    
-.. autoclass:: PoolChannelTV
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolIORegister.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolIORegister.rst
deleted file mode 100644
index 209f7d0..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolIORegister.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`PoolIORegister`
-=======================
-
-.. inheritance-diagram:: PoolIORegister
-    :parts: 1
-    
-.. autoclass:: PoolIORegister
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolIORegisterButtons.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolIORegisterButtons.rst
deleted file mode 100644
index 0bb12d3..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolIORegisterButtons.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`PoolIORegisterButtons`
-==============================
-
-.. inheritance-diagram:: PoolIORegisterButtons
-    :parts: 1
-    
-.. autoclass:: PoolIORegisterButtons
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolIORegisterReadWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolIORegisterReadWidget.rst
deleted file mode 100644
index 507bb44..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolIORegisterReadWidget.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`PoolIORegisterReadWidget`
-=================================
-
-.. inheritance-diagram:: PoolIORegisterReadWidget
-    :parts: 1
-    
-.. autoclass:: PoolIORegisterReadWidget
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolIORegisterTV.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolIORegisterTV.rst
deleted file mode 100644
index 7734fdf..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolIORegisterTV.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`PoolIORegisterTV`
-=========================
-
-.. inheritance-diagram:: PoolIORegisterTV
-    :parts: 1
-    
-.. autoclass:: PoolIORegisterTV
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolIORegisterWriteWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolIORegisterWriteWidget.rst
deleted file mode 100644
index 1e7a504..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolIORegisterWriteWidget.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`PoolIORegisterWriteWidget`
-==================================
-
-.. inheritance-diagram:: PoolIORegisterWriteWidget
-    :parts: 1
-    
-.. autoclass:: PoolIORegisterWriteWidget
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotor.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotor.rst
deleted file mode 100644
index 487fa73..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotor.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`PoolMotor`
-==================
-
-.. inheritance-diagram:: PoolMotor
-    :parts: 1
-    
-.. autoclass:: PoolMotor
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorSlim.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorSlim.rst
deleted file mode 100644
index 0a673d3..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorSlim.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`PoolMotorSlim`
-======================
-
-.. inheritance-diagram:: PoolMotorSlim
-    :parts: 1
-    
-.. autoclass:: PoolMotorSlim
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorTV.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorTV.rst
deleted file mode 100644
index 5d2eefe..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorTV.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`PoolMotorTV`
-====================
-
-.. inheritance-diagram:: PoolMotorTV
-    :parts: 1
-    
-.. autoclass:: PoolMotorTV
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorTVLabelWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorTVLabelWidget.rst
deleted file mode 100644
index e0427a9..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorTVLabelWidget.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`PoolMotorTVLabelWidget`
-===============================
-
-.. inheritance-diagram:: PoolMotorTVLabelWidget
-    :parts: 1
-    
-.. autoclass:: PoolMotorTVLabelWidget
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorTVReadWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorTVReadWidget.rst
deleted file mode 100644
index 776994b..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorTVReadWidget.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`PoolMotorTVReadWidget`
-==============================
-
-.. inheritance-diagram:: PoolMotorTVReadWidget
-    :parts: 1
-    
-.. autoclass:: PoolMotorTVReadWidget
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorTVUnitsWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorTVUnitsWidget.rst
deleted file mode 100644
index c2a138e..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorTVUnitsWidget.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`PoolMotorTVUnitsWidget`
-===============================
-
-.. inheritance-diagram:: PoolMotorTVUnitsWidget
-    :parts: 1
-    
-.. autoclass:: PoolMotorTVUnitsWidget
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorTVWriteWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorTVWriteWidget.rst
deleted file mode 100644
index 0fa2c07..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorTVWriteWidget.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`PoolMotorTVWriteWidget`
-===============================
-
-.. inheritance-diagram:: PoolMotorTVWriteWidget
-    :parts: 1
-    
-.. autoclass:: PoolMotorTVWriteWidget
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_TaurusMotorH.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_TaurusMotorH.rst
deleted file mode 100644
index e606ab7..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_TaurusMotorH.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`TaurusMotorH`
-=====================
-
-.. inheritance-diagram:: TaurusMotorH
-    :parts: 1
-    
-.. autoclass:: TaurusMotorH
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_TaurusMotorH2.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_TaurusMotorH2.rst
deleted file mode 100644
index 6388c08..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_TaurusMotorH2.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`TaurusMotorH2`
-======================
-
-.. inheritance-diagram:: TaurusMotorH2
-    :parts: 1
-    
-.. autoclass:: TaurusMotorH2
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_TaurusMotorV.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_TaurusMotorV.rst
deleted file mode 100644
index 33b9bcb..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_TaurusMotorV.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`TaurusMotorV`
-=====================
-
-.. inheritance-diagram:: TaurusMotorV
-    :parts: 1
-    
-.. autoclass:: TaurusMotorV
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_TaurusMotorV2.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_TaurusMotorV2.rst
deleted file mode 100644
index 85aac3b..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_TaurusMotorV2.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_pool
-
-:class:`TaurusMotorV2`
-======================
-
-.. inheritance-diagram:: TaurusMotorV2
-    :parts: 1
-    
-.. autoclass:: TaurusMotorV2
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_sardana.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_sardana.rst
deleted file mode 100644
index f1d2693..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_sardana.rst
+++ /dev/null
@@ -1,51 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_sardana
-
-:mod:`taurus.qt.qtgui.extra_sardana`
-====================================
-
-.. automodule:: taurus.qt.qtgui.extra_sardana
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    ui <extra_sardana/ui>
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    extra_sardana/_ExpDescriptionEditor.rst
-
-    extra_sardana/_MntGrpChannelEditor.rst
-
-    extra_sardana/_SardanaEditor.rst
-
-    extra_sardana/_SardanaElementTreeWidget.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`ExpDescriptionEditor`
-
-    * :class:`MntGrpChannelEditor`
-
-    * :class:`SardanaEditor`
-
-    * :class:`SardanaElementTreeWidget`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_ExpDescriptionEditor.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_ExpDescriptionEditor.rst
deleted file mode 100644
index 2b9ce89..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_ExpDescriptionEditor.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_sardana
-
-:class:`ExpDescriptionEditor`
-=============================
-
-.. inheritance-diagram:: ExpDescriptionEditor
-    :parts: 1
-    
-.. autoclass:: ExpDescriptionEditor
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_MntGrpChannelEditor.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_MntGrpChannelEditor.rst
deleted file mode 100644
index d4bbecf..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_MntGrpChannelEditor.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_sardana
-
-:class:`MntGrpChannelEditor`
-============================
-
-.. inheritance-diagram:: MntGrpChannelEditor
-    :parts: 1
-    
-.. autoclass:: MntGrpChannelEditor
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_SardanaEditor.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_SardanaEditor.rst
deleted file mode 100644
index 3563ea3..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_SardanaEditor.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_sardana
-
-:class:`SardanaEditor`
-======================
-
-.. inheritance-diagram:: SardanaEditor
-    :parts: 1
-    
-.. autoclass:: SardanaEditor
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_SardanaElementTreeWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_SardanaElementTreeWidget.rst
deleted file mode 100644
index cff273d..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_SardanaElementTreeWidget.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_sardana
-
-:class:`SardanaElementTreeWidget`
-=================================
-
-.. inheritance-diagram:: SardanaElementTreeWidget
-    :parts: 1
-    
-.. autoclass:: SardanaElementTreeWidget
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/ui.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/ui.rst
deleted file mode 100644
index 5f6ba80..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/ui.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_sardana.ui
-
-:mod:`taurus.qt.qtgui.extra_sardana.ui`
-=======================================
-
-.. automodule:: taurus.qt.qtgui.extra_sardana.ui
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic.rst
index 2f7db4d..e1feaeb 100644
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic.rst
+++ b/doc/source/devel/api/taurus/qt/qtgui/graphic.rst
@@ -25,6 +25,8 @@
 .. toctree::
     :hidden:
 
+    graphic/_QGraphicsTextBoxing.rst
+
     graphic/_QSpline.rst
 
     graphic/_TaurusBaseGraphicsFactory.rst
@@ -43,6 +45,8 @@
 
     graphic/_TaurusGraphicsView.rst
 
+    graphic/_TaurusGroupItem.rst
+
     graphic/_TaurusGroupStateItem.rst
 
     graphic/_TaurusLineStateItem.rst
@@ -51,16 +55,18 @@
 
     graphic/_TaurusRectStateItem.rst
 
+    graphic/_TaurusSplineStateItem.rst
+
     graphic/_TaurusTextAttributeItem.rst
 
     graphic/_TaurusTextStateItem.rst
 
-    graphic/_newDialog.rst
-
 
 .. hlist::
     :columns: 2
 
+    * :class:`QGraphicsTextBoxing`
+
     * :class:`QSpline`
 
     * :class:`TaurusBaseGraphicsFactory`
@@ -79,6 +85,8 @@
 
     * :class:`TaurusGraphicsView`
 
+    * :class:`TaurusGroupItem`
+
     * :class:`TaurusGroupStateItem`
 
     * :class:`TaurusLineStateItem`
@@ -87,12 +95,12 @@
 
     * :class:`TaurusRectStateItem`
 
+    * :class:`TaurusSplineStateItem`
+
     * :class:`TaurusTextAttributeItem`
 
     * :class:`TaurusTextStateItem`
 
-    * :class:`newDialog`
-
 
 
 
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_newDialog.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_QGraphicsTextBoxing.rst
similarity index 53%
copy from doc/source/devel/api/taurus/qt/qtgui/graphic/_newDialog.rst
copy to doc/source/devel/api/taurus/qt/qtgui/graphic/_QGraphicsTextBoxing.rst
index 0831156..dd708da 100644
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_newDialog.rst
+++ b/doc/source/devel/api/taurus/qt/qtgui/graphic/_QGraphicsTextBoxing.rst
@@ -2,13 +2,13 @@
 .. This file was generated by auto_rst4api.py. Changes may be lost
 .. currentmodule:: taurus.qt.qtgui.graphic
 
-:class:`newDialog`
-==================
+:class:`QGraphicsTextBoxing`
+============================
 
-.. inheritance-diagram:: newDialog
+.. inheritance-diagram:: QGraphicsTextBoxing
     :parts: 1
     
-.. autoclass:: newDialog
+.. autoclass:: QGraphicsTextBoxing
     :members:
     :undoc-members:
     :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_newDialog.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGroupItem.rst
similarity index 55%
copy from doc/source/devel/api/taurus/qt/qtgui/graphic/_newDialog.rst
copy to doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGroupItem.rst
index 0831156..b36d849 100644
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_newDialog.rst
+++ b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGroupItem.rst
@@ -2,13 +2,13 @@
 .. This file was generated by auto_rst4api.py. Changes may be lost
 .. currentmodule:: taurus.qt.qtgui.graphic
 
-:class:`newDialog`
-==================
+:class:`TaurusGroupItem`
+========================
 
-.. inheritance-diagram:: newDialog
+.. inheritance-diagram:: TaurusGroupItem
     :parts: 1
     
-.. autoclass:: newDialog
+.. autoclass:: TaurusGroupItem
     :members:
     :undoc-members:
     :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_newDialog.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusSplineStateItem.rst
similarity index 51%
rename from doc/source/devel/api/taurus/qt/qtgui/graphic/_newDialog.rst
rename to doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusSplineStateItem.rst
index 0831156..92e2bb2 100644
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_newDialog.rst
+++ b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusSplineStateItem.rst
@@ -2,13 +2,13 @@
 .. This file was generated by auto_rst4api.py. Changes may be lost
 .. currentmodule:: taurus.qt.qtgui.graphic
 
-:class:`newDialog`
-==================
+:class:`TaurusSplineStateItem`
+==============================
 
-.. inheritance-diagram:: newDialog
+.. inheritance-diagram:: TaurusSplineStateItem
     :parts: 1
     
-.. autoclass:: newDialog
+.. autoclass:: TaurusSplineStateItem
     :members:
     :undoc-members:
     :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/jdraw.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/jdraw.rst
index a07021b..a935a15 100644
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/jdraw.rst
+++ b/doc/source/devel/api/taurus/qt/qtgui/graphic/jdraw.rst
@@ -8,6 +8,14 @@
 .. automodule:: taurus.qt.qtgui.graphic.jdraw
 
 
+.. rubric:: Modules
+
+.. toctree::
+    :maxdepth: 1
+
+    test <jdraw/test>
+
+
     
 
 
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/jdraw/test.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/jdraw/test.rst
new file mode 100644
index 0000000..712ab37
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/graphic/jdraw/test.rst
@@ -0,0 +1,25 @@
+.. AUTO_RST4API
+.. This file was generated by auto_rst4api.py. Changes may be lost
+.. currentmodule:: taurus.qt.qtgui.graphic.jdraw.test
+
+:mod:`taurus.qt.qtgui.graphic.jdraw.test`
+=========================================
+
+.. automodule:: taurus.qt.qtgui.graphic.jdraw.test
+
+
+.. rubric:: Modules
+
+.. toctree::
+    :maxdepth: 1
+
+    res <test/res>
+
+
+    
+
+
+
+
+
+
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/jdraw/test/res.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/jdraw/test/res.rst
new file mode 100644
index 0000000..3395aaa
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/graphic/jdraw/test/res.rst
@@ -0,0 +1,17 @@
+.. AUTO_RST4API
+.. This file was generated by auto_rst4api.py. Changes may be lost
+.. currentmodule:: taurus.qt.qtgui.graphic.jdraw.test.res
+
+:mod:`taurus.qt.qtgui.graphic.jdraw.test.res`
+=============================================
+
+.. automodule:: taurus.qt.qtgui.graphic.jdraw.test.res
+
+
+    
+
+
+
+
+
+
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel.rst b/doc/source/devel/api/taurus/qt/qtgui/panel.rst
index 2850319..62a6436 100644
--- a/doc/source/devel/api/taurus/qt/qtgui/panel.rst
+++ b/doc/source/devel/api/taurus/qt/qtgui/panel.rst
@@ -15,6 +15,8 @@
 
     report <panel/report>
 
+    test <panel/test>
+
     ui <panel/ui>
 
 
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/test.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/test.rst
new file mode 100644
index 0000000..1fafceb
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/panel/test.rst
@@ -0,0 +1,17 @@
+.. AUTO_RST4API
+.. This file was generated by auto_rst4api.py. Changes may be lost
+.. currentmodule:: taurus.qt.qtgui.panel.test
+
+:mod:`taurus.qt.qtgui.panel.test`
+=================================
+
+.. automodule:: taurus.qt.qtgui.panel.test
+
+
+    
+
+
+
+
+
+
diff --git a/doc/source/devel/api/taurus/qt/qtgui/taurusgui.rst b/doc/source/devel/api/taurus/qt/qtgui/taurusgui.rst
index 40304a4..4cf8cdb 100644
--- a/doc/source/devel/api/taurus/qt/qtgui/taurusgui.rst
+++ b/doc/source/devel/api/taurus/qt/qtgui/taurusgui.rst
@@ -33,8 +33,6 @@
 
     taurusgui/_ExternalAppEditor.rst
 
-    taurusgui/_MacroBroker.rst
-
     taurusgui/_PanelDescriptionWizard.rst
 
     taurusgui/_TaurusGui.rst
@@ -49,8 +47,6 @@
 
     * :class:`ExternalAppEditor`
 
-    * :class:`MacroBroker`
-
     * :class:`PanelDescriptionWizard`
 
     * :class:`TaurusGui`
diff --git a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_MacroBroker.rst b/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_MacroBroker.rst
deleted file mode 100644
index e0612ba..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_MacroBroker.rst
+++ /dev/null
@@ -1,14 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.taurusgui
-
-:class:`MacroBroker`
-====================
-
-.. inheritance-diagram:: MacroBroker
-    :parts: 1
-    
-.. autoclass:: MacroBroker
-    :members:
-    :undoc-members:
-    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/test.rst b/doc/source/devel/api/taurus/qt/qtgui/test.rst
new file mode 100644
index 0000000..93cdae8
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/test.rst
@@ -0,0 +1,35 @@
+.. AUTO_RST4API
+.. This file was generated by auto_rst4api.py. Changes may be lost
+.. currentmodule:: taurus.qt.qtgui.test
+
+:mod:`taurus.qt.qtgui.test`
+===========================
+
+.. automodule:: taurus.qt.qtgui.test
+
+
+    
+
+
+
+.. rubric:: Classes
+
+.. toctree::
+    :hidden:
+
+    test/_BaseWidgetTestCase.rst
+
+    test/_GenericWidgetTestCase.rst
+
+
+.. hlist::
+    :columns: 2
+
+    * :class:`BaseWidgetTestCase`
+
+    * :class:`GenericWidgetTestCase`
+
+
+
+
+
diff --git a/doc/source/devel/api/taurus/qt/qtgui/test/_BaseWidgetTestCase.rst b/doc/source/devel/api/taurus/qt/qtgui/test/_BaseWidgetTestCase.rst
new file mode 100644
index 0000000..84771e2
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/test/_BaseWidgetTestCase.rst
@@ -0,0 +1,14 @@
+.. AUTO_RST4API
+.. This file was generated by auto_rst4api.py. Changes may be lost
+.. currentmodule:: taurus.qt.qtgui.test
+
+:class:`BaseWidgetTestCase`
+===========================
+
+.. inheritance-diagram:: BaseWidgetTestCase
+    :parts: 1
+    
+.. autoclass:: BaseWidgetTestCase
+    :members:
+    :undoc-members:
+    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/test/_GenericWidgetTestCase.rst b/doc/source/devel/api/taurus/qt/qtgui/test/_GenericWidgetTestCase.rst
new file mode 100644
index 0000000..b2eb3ed
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/test/_GenericWidgetTestCase.rst
@@ -0,0 +1,14 @@
+.. AUTO_RST4API
+.. This file was generated by auto_rst4api.py. Changes may be lost
+.. currentmodule:: taurus.qt.qtgui.test
+
+:class:`GenericWidgetTestCase`
+==============================
+
+.. inheritance-diagram:: GenericWidgetTestCase
+    :parts: 1
+    
+.. autoclass:: GenericWidgetTestCase
+    :members:
+    :undoc-members:
+    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util.rst b/doc/source/devel/api/taurus/qt/qtgui/util.rst
index 31c1ee0..3e891ea 100644
--- a/doc/source/devel/api/taurus/qt/qtgui/util.rst
+++ b/doc/source/devel/api/taurus/qt/qtgui/util.rst
@@ -8,6 +8,14 @@
 .. automodule:: taurus.qt.qtgui.util
 
 
+.. rubric:: Modules
+
+.. toctree::
+    :maxdepth: 1
+
+    test <util/test>
+
+
     
 
 
@@ -87,9 +95,15 @@
 .. rubric:: Functions
 
 
+.. autofunction:: UILoadable
+
 .. autofunction:: getWidgetsOfType
 
 .. autofunction:: grabWidget
 
+.. autofunction:: loadUi
+
+.. autofunction:: main
+
 
 
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/test.rst b/doc/source/devel/api/taurus/qt/qtgui/util/test.rst
new file mode 100644
index 0000000..8ac4964
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/util/test.rst
@@ -0,0 +1,25 @@
+.. AUTO_RST4API
+.. This file was generated by auto_rst4api.py. Changes may be lost
+.. currentmodule:: taurus.qt.qtgui.util.test
+
+:mod:`taurus.qt.qtgui.util.test`
+================================
+
+.. automodule:: taurus.qt.qtgui.util.test
+
+
+.. rubric:: Modules
+
+.. toctree::
+    :maxdepth: 1
+
+    test_ui <test/test_ui>
+
+
+    
+
+
+
+
+
+
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/test/test_ui.rst b/doc/source/devel/api/taurus/qt/qtgui/util/test/test_ui.rst
new file mode 100644
index 0000000..5cb63e5
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/util/test/test_ui.rst
@@ -0,0 +1,37 @@
+.. AUTO_RST4API
+.. This file was generated by auto_rst4api.py. Changes may be lost
+.. currentmodule:: taurus.qt.qtgui.util.test.test_ui
+
+:mod:`taurus.qt.qtgui.util.test.test_ui`
+========================================
+
+.. automodule:: taurus.qt.qtgui.util.test.test_ui
+
+
+    
+
+
+
+.. rubric:: Classes
+
+.. toctree::
+    :hidden:
+
+    test_ui/_UILoadableTestCase.rst
+
+
+.. hlist::
+    :columns: 2
+
+    * :class:`UILoadableTestCase`
+
+
+
+
+.. rubric:: Functions
+
+
+.. autofunction:: main
+
+
+
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/test/test_ui/_UILoadableTestCase.rst b/doc/source/devel/api/taurus/qt/qtgui/util/test/test_ui/_UILoadableTestCase.rst
new file mode 100644
index 0000000..1b429a9
--- /dev/null
+++ b/doc/source/devel/api/taurus/qt/qtgui/util/test/test_ui/_UILoadableTestCase.rst
@@ -0,0 +1,14 @@
+.. AUTO_RST4API
+.. This file was generated by auto_rst4api.py. Changes may be lost
+.. currentmodule:: taurus.qt.qtgui.util.test.test_ui
+
+:class:`UILoadableTestCase`
+===========================
+
+.. inheritance-diagram:: UILoadableTestCase
+    :parts: 1
+    
+.. autoclass:: UILoadableTestCase
+    :members:
+    :undoc-members:
+    :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/test.rst b/doc/source/devel/api/taurus/test.rst
new file mode 100644
index 0000000..e1dab02
--- /dev/null
+++ b/doc/source/devel/api/taurus/test.rst
@@ -0,0 +1,47 @@
+.. AUTO_RST4API
+.. This file was generated by auto_rst4api.py. Changes may be lost
+.. currentmodule:: taurus.test
+
+:mod:`taurus.test`
+==================
+
+.. automodule:: taurus.test
+
+
+    
+
+
+
+.. rubric:: Classes
+
+.. toctree::
+    :hidden:
+
+    test/_ModuleExplorer.rst
+
+
+.. hlist::
+    :columns: 2
+
+    * :class:`ModuleExplorer`
+
+
+
+
+.. rubric:: Functions
+
+
+.. autofunction:: calculateTestFuzziness
+
+.. autofunction:: getResourcePath
+
+.. autofunction:: insertTest
+
+.. autofunction:: loopSubprocess
+
+.. autofunction:: loopTest
+
+.. autofunction:: skipUnlessGui
+
+
+
diff --git a/doc/source/devel/api/taurus/core/tango/sardana/_SardanaManager.rst b/doc/source/devel/api/taurus/test/_ModuleExplorer.rst
similarity index 50%
rename from doc/source/devel/api/taurus/core/tango/sardana/_SardanaManager.rst
rename to doc/source/devel/api/taurus/test/_ModuleExplorer.rst
index 02bbc8a..39eca2b 100644
--- a/doc/source/devel/api/taurus/core/tango/sardana/_SardanaManager.rst
+++ b/doc/source/devel/api/taurus/test/_ModuleExplorer.rst
@@ -1,14 +1,14 @@
 .. AUTO_RST4API
 .. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.sardana
+.. currentmodule:: taurus.test
 
-:class:`SardanaManager`
+:class:`ModuleExplorer`
 =======================
 
-.. inheritance-diagram:: SardanaManager
+.. inheritance-diagram:: ModuleExplorer
     :parts: 1
     
-.. autoclass:: SardanaManager
+.. autoclass:: ModuleExplorer
     :members:
     :undoc-members:
     :show-inheritance:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus_AllClasses.rst b/doc/source/devel/api/taurus_AllClasses.rst
index 46a6794..d0c9999 100644
--- a/doc/source/devel/api/taurus_AllClasses.rst
+++ b/doc/source/devel/api/taurus_AllClasses.rst
@@ -38,12 +38,10 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.qt.qtcore.configuration.BaseConfigurableClass`
 
-    * :class:`~taurus.core.tango.sardana.BaseSardanaElement`
-
-    * :class:`~taurus.core.tango.sardana.BaseSardanaElementContainer`
-
     * :class:`~taurus.qt.qtgui.model.BaseToolBar`
 
+    * :class:`~taurus.qt.qtgui.test.BaseWidgetTestCase`
+
     * :class:`~taurus.core.util.BoundMethodWeakref`
 
     * :class:`~taurus.core.tango.img.CCDPVCAM`
@@ -72,10 +70,6 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.core.ConfigurationNameValidator`
 
-    * :class:`~taurus.core.tango.sardana.ControllerClassInfo`
-
-    * :class:`~taurus.core.tango.sardana.ControllerInfo`
-
     * :class:`~taurus.core.util.CriticalIt`
 
     * :class:`~taurus.qt.qtgui.plot.CurveAppearanceProperties`
@@ -110,14 +104,6 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.qt.qtgui.taurusgui.DockWidgetPanel`
 
-    * :class:`~taurus.core.tango.sardana.Door`
-
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.DoorDebug`
-
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.DoorOutput`
-
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.DoorResult`
-
     * :class:`~taurus.core.DoubleRegistration`
 
     * :class:`~taurus.qt.qtgui.util.DropDebugger`
@@ -166,8 +152,6 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.core.util.EventListener`
 
-    * :class:`~taurus.qt.qtgui.extra_sardana.ExpDescriptionEditor`
-
     * :class:`~taurus.qt.qtgui.util.ExternalAppAction`
 
     * :class:`~taurus.qt.qtgui.taurusgui.ExternalAppEditor`
@@ -176,8 +160,6 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.qt.qtgui.plot.FancyScaleDraw`
 
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.favouriteseditor.FavouritesMacrosEditor`
-
     * :class:`~taurus.qt.qtgui.model.FilterToolBar`
 
     * :class:`~taurus.qt.qtgui.plot.FixedLabelsScaleDraw`
@@ -186,14 +168,14 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.core.util.FunctionCodec`
 
+    * :class:`~taurus.qt.qtgui.test.GenericWidgetTestCase`
+
     * :class:`~taurus.qt.qtgui.util.Grabber`
 
     * :class:`~taurus.qt.qtgui.input.GraphicalChoiceDlg`
 
     * :class:`~taurus.qt.qtgui.input.GraphicalChoiceWidget`
 
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.favouriteseditor.HistoryMacrosViewer`
-
     * :class:`~taurus.core.tango.img.ImageCounterDevice`
 
     * :class:`~taurus.core.tango.img.ImageDevice`
@@ -208,8 +190,6 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.core.util.LIFO`
 
-    * :class:`~taurus.qt.qtgui.extra_pool.LabelWidgetDragsDeviceAndAttribute`
-
     * :class:`~taurus.core.util.ListEventGenerator`
 
     * :class:`~taurus.core.util.LogExceptHook`
@@ -222,66 +202,24 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.core.util.LoopList`
 
-    * :class:`~taurus.qt.qtgui.taurusgui.MacroBroker`
-
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.MacroButton`
-
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.MacroButtonAbortDoor`
-
-    * :class:`~taurus.core.tango.sardana.MacroServer`
-
     * :class:`~taurus.qt.qtgui.panel.MacroServerMessageErrorHandler`
 
     * :class:`~taurus.core.util.MemoryLogHandler`
 
-    * :class:`~taurus.qt.qtgui.extra_sardana.MntGrpChannelEditor`
-
     * :class:`~taurus.core.resource.ModuleDict`
 
+    * :class:`~taurus.test.ModuleExplorer`
+
     * :class:`~taurus.core.util.NullCodec`
 
     * :class:`~taurus.core.util.Object`
 
     * :class:`~taurus.qt.qtgui.taurusgui.PanelDescriptionWizard`
 
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.ParamEditorManager`
-
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.ParamEditorModel`
-
     * :class:`~taurus.qt.qtgui.model.PerspectiveToolBar`
 
     * :class:`~taurus.core.util.PlotCodec`
 
-    * :class:`~taurus.core.tango.sardana.Pool`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.PoolChannel`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.PoolChannelTV`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.PoolIORegister`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.PoolIORegisterButtons`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.PoolIORegisterReadWidget`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.PoolIORegisterTV`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.PoolIORegisterWriteWidget`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.PoolMotor`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.PoolMotorSlim`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.PoolMotorTV`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.PoolMotorTVLabelWidget`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.PoolMotorTVReadWidget`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.PoolMotorTVUnitsWidget`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.PoolMotorTVWriteWidget`
-
     * :class:`~taurus.qt.qtgui.dialog.ProtectTaurusMessageBox`
 
     * :class:`~taurus.core.tango.img.PyImageViewer`
@@ -308,6 +246,8 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.qt.qtgui.display.QFallBackWidget`
 
+    * :class:`~taurus.qt.qtgui.graphic.QGraphicsTextBoxing`
+
     * :class:`~taurus.qt.qtgui.container.QGroupWidget`
 
     * :class:`~taurus.qt.qtgui.display.QLed`
@@ -344,20 +284,10 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.core.util.SafeEvaluator`
 
-    * :class:`~taurus.core.tango.sardana.Sardana`
-
-    * :class:`~taurus.qt.qtgui.extra_sardana.SardanaEditor`
-
-    * :class:`~taurus.qt.qtgui.extra_sardana.SardanaElementTreeWidget`
-
-    * :class:`~taurus.core.tango.sardana.SardanaManager`
-
     * :class:`~taurus.qt.qtgui.plot.ScanTrendsSet`
 
     * :class:`~taurus.qt.qtgui.model.SelectionToolBar`
 
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.customeditors.SenvEditor`
-
     * :class:`~taurus.qt.qtgui.util.SeparatorAction`
 
     * :class:`~taurus.qt.qtcore.communication.SharedDataManager`
@@ -374,8 +304,6 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.core.util.Singleton`
 
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.StandardMacroParametersEditor`
-
     * :class:`~taurus.core.tango.TangoAttribute`
 
     * :class:`~taurus.core.tango.TangoAttributeEventListener`
@@ -556,6 +484,8 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.qt.qtgui.container.TaurusGroupBox`
 
+    * :class:`~taurus.qt.qtgui.graphic.TaurusGroupItem`
+
     * :class:`~taurus.qt.qtgui.graphic.TaurusGroupStateItem`
 
     * :class:`~taurus.qt.qtgui.container.TaurusGroupWidget`
@@ -580,6 +510,8 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.qt.qtgui.display.TaurusLabel`
 
+    * :class:`~taurus.qt.qtgui.compact.TaurusLabelEditRW`
+
     * :class:`~taurus.qt.qtgui.button.TaurusLauncherButton`
 
     * :class:`~taurus.qt.qtgui.display.TaurusLed`
@@ -592,14 +524,6 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.core.TaurusLockInfo`
 
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.TaurusMacroConfigurationDialog`
-
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.TaurusMacroDescriptionViewer`
-
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.TaurusMacroExecutor`
-
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.TaurusMacroExecutorWidget`
-
     * :class:`~taurus.qt.qtgui.container.TaurusMainWindow`
 
     * :class:`~taurus.core.TaurusManager`
@@ -628,14 +552,6 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.qt.qtgui.plot.TaurusMonitorTiny`
 
-    * :class:`~taurus.qt.qtgui.extra_pool.TaurusMotorH`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.TaurusMotorH2`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.TaurusMotorV`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.TaurusMotorV2`
-
     * :class:`~taurus.qt.qtgui.extra_nexus.TaurusNeXusBrowser`
 
     * :class:`~taurus.core.TaurusOperation`
@@ -656,6 +572,8 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.qt.qtgui.base.TaurusQAttributeFactory`
 
+    * :class:`~taurus.qt.qtgui.compact.TaurusReadWriteSwitcher`
+
     * :class:`~taurus.qt.qtgui.graphic.TaurusRectStateItem`
 
     * :class:`~taurus.qt.qtgui.base.TaurusScalarAttributeControllerHelper`
@@ -664,14 +582,12 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.qt.qtgui.tree.TaurusSearchTree`
 
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.sequenceeditor.TaurusSequencer`
-
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.sequenceeditor.TaurusSequencerWidget`
-
     * :class:`~taurus.core.TaurusServInfo`
 
     * :class:`~taurus.core.TaurusServerTree`
 
+    * :class:`~taurus.qt.qtgui.graphic.TaurusSplineStateItem`
+
     * :class:`~taurus.core.TaurusStateAttribute`
 
     * :class:`~taurus.qt.qtgui.display.TaurusStateLabel`
@@ -756,6 +672,8 @@ All Classes for :mod:`taurus`
 
     * :class:`~taurus.core.util.TraceIt`
 
+    * :class:`~taurus.qt.qtgui.util.test.test_ui.UILoadableTestCase`
+
     * :class:`~taurus.core.util.WarnIt`
 
     * :class:`~taurus.core.util.Worker`
@@ -767,5 +685,3 @@ All Classes for :mod:`taurus`
     * :class:`~taurus.qt.qtcore.configuration.configurableProperty`
 
     * :class:`~taurus.core.util.defaultdict_fromkey`
-
-    * :class:`~taurus.qt.qtgui.graphic.newDialog`
diff --git a/doc/source/devel/catalog.html b/doc/source/devel/catalog.html
index 834c1f5..a39db1a 100644
--- a/doc/source/devel/catalog.html
+++ b/doc/source/devel/catalog.html
@@ -5,31 +5,31 @@
 <body>
 <h1>Index</h1>
 <ul><li><a href="#_base">Base icons</a></li>
-<li><a href="#rrze-icons/emblems">rrze-icons/emblems (:/emblems/)</a></li>
-<li><a href="#rrze-icons/devices">rrze-icons/devices (:/devices/)</a></li>
+<li><a href="#external/jive">external/jive (:/jive/)</a></li>
+<li><a href="#external">external (:/)</a></li>
+<li><a href="#large/snapshot">large/snapshot (:/snapshot/)</a></li>
+<li><a href="#large">large (:/)</a></li>
 <li><a href="#rrze-icons/actions">rrze-icons/actions (:/actions/)</a></li>
+<li><a href="#rrze-icons/categories">rrze-icons/categories (:/categories/)</a></li>
+<li><a href="#rrze-icons/devices">rrze-icons/devices (:/devices/)</a></li>
+<li><a href="#rrze-icons/emblems">rrze-icons/emblems (:/emblems/)</a></li>
 <li><a href="#rrze-icons/mime-types">rrze-icons/mime-types (:/mime-types/)</a></li>
 <li><a href="#rrze-icons/status">rrze-icons/status (:/status/)</a></li>
-<li><a href="#rrze-icons/categories">rrze-icons/categories (:/categories/)</a></li>
-<li><a href="#tango-icons/status">tango-icons/status (:/status/)</a></li>
 <li><a href="#tango-icons/actions">tango-icons/actions (:/actions/)</a></li>
-<li><a href="#tango-icons/mimetypes">tango-icons/mimetypes (:/mimetypes/)</a></li>
-<li><a href="#tango-icons/emblems">tango-icons/emblems (:/emblems/)</a></li>
-<li><a href="#tango-icons/devices">tango-icons/devices (:/devices/)</a></li>
 <li><a href="#tango-icons/apps">tango-icons/apps (:/apps/)</a></li>
 <li><a href="#tango-icons/categories">tango-icons/categories (:/categories/)</a></li>
-<li><a href="#tango-icons/places">tango-icons/places (:/places/)</a></li>
+<li><a href="#tango-icons/devices">tango-icons/devices (:/devices/)</a></li>
+<li><a href="#tango-icons/emblems">tango-icons/emblems (:/emblems/)</a></li>
 <li><a href="#tango-icons/emotes">tango-icons/emotes (:/emotes/)</a></li>
-<li><a href="#extra-icons/designer">extra-icons/designer (:/designer/)</a></li>
+<li><a href="#tango-icons/mimetypes">tango-icons/mimetypes (:/mimetypes/)</a></li>
+<li><a href="#tango-icons/places">tango-icons/places (:/places/)</a></li>
+<li><a href="#tango-icons/status">tango-icons/status (:/status/)</a></li>
 <li><a href="#extra-icons/actions">extra-icons/actions (:/actions/)</a></li>
+<li><a href="#extra-icons/designer">extra-icons/designer (:/designer/)</a></li>
+<li><a href="#extra-icons/leds/images24">extra-icons/leds/images24 (:/leds/images24/)</a></li>
 <li><a href="#extra-icons/leds/images256">extra-icons/leds/images256 (:/leds/images256/)</a></li>
 <li><a href="#extra-icons/leds/images48">extra-icons/leds/images48 (:/leds/images48/)</a></li>
-<li><a href="#extra-icons/leds/images24">extra-icons/leds/images24 (:/leds/images24/)</a></li>
 <li><a href="#extra-icons">extra-icons (:/)</a></li>
-<li><a href="#external/jive">external/jive (:/jive/)</a></li>
-<li><a href="#external">external (:/)</a></li>
-<li><a href="#large/snapshot">large/snapshot (:/snapshot/)</a></li>
-<li><a href="#large">large (:/)</a></li>
 </ul>
 <h2><a name="_base">Base icons</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
@@ -37,817 +37,817 @@
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="taurus.png" alt="taurus.png"/></td><td width="400">:/taurus.png</td><td width="400">taurus.png</td><td width="200">taurus</td></tr>
 </table>
-<h2><a name="rrze-icons/emblems">:/emblems/ (rrze-icons/emblems)</a></h2>
+<h2><a name="external/jive">:/jive/ (external/jive)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/emblems/" Directory: "rrze-icons/emblems"</th>
+<th colspan="4">Resource: ":/jive/" Directory: "external/jive"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/relay.png" alt="rrze-icons/emblems/relay.svg"/></td><td width="400">:/emblems/relay.svg</td><td width="400">rrze-icons/emblems/relay.svg</td><td width="200">relay</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/at.png" alt="rrze-icons/emblems/at.svg"/></td><td width="400">:/emblems/at.svg</td><td width="400">rrze-icons/emblems/at.svg</td><td width="200">at</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/table.png" alt="rrze-icons/emblems/table.svg"/></td><td width="400">:/emblems/table.svg</td><td width="400">rrze-icons/emblems/table.svg</td><td width="200">table</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/message-new.png" alt="rrze-icons/emblems/message-new.svg"/></td><td width="400">:/emblems/message-new.svg</td><td width="400">rrze-icons/emblems/message-new.svg</td><td width="200">message-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tree-diagramm-delete.png" alt="rrze-icons/emblems/tree-diagramm-delete.svg"/></td><td width="400">:/emblems/tree-diagramm-delete.svg</td><td width="400">rrze-icons/emblems/tree-diagramm-delete.svg</td><td width="200">tree-diagramm-delete</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/affiliation-abstract.png" alt="rrze-icons/emblems/affiliation-abstract.svg"/></td><td width="400">:/emblems/affiliation-abstract.svg</td><td width="400">rrze-icons/emblems/affiliation-abstract.svg</td><td width="200">affiliation-abstract</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/mailbox.png" alt="rrze-icons/emblems/mailbox.svg"/></td><td width="400">:/emblems/mailbox.svg</td><td width="400">rrze-icons/emblems/mailbox.svg</td><td width="200">mailbox</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report.png" alt="rrze-icons/emblems/report.svg"/></td><td width="400">:/emblems/report.svg</td><td width="400">rrze-icons/emblems/report.svg</td><td width="200">report</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/wide-area-network-connection.png" alt="rrze-icons/emblems/wide-area-network-connection.svg"/></td><td width="400">:/emblems/wide-area-network-connection.svg</td><td width="400">rrze-icons/emblems/wide-area-network-connection.svg</td><td width="200">wide-area-network-connection</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/ten-per-page.png" alt="rrze-icons/emblems/ten-per-page.svg"/></td><td width="400">:/emblems/ten-per-page.svg</td><td width="400">rrze-icons/emblems/ten-per-page.svg</td><td width="200">ten-per-page</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/media-floppy-green.png" alt="rrze-icons/emblems/media-floppy-green.svg"/></td><td width="400">:/emblems/media-floppy-green.svg</td><td width="400">rrze-icons/emblems/media-floppy-green.svg</td><td width="200">media-floppy-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/account-new.png" alt="rrze-icons/emblems/account-new.svg"/></td><td width="400">:/emblems/account-new.svg</td><td width="400">rrze-icons/emblems/account-new.svg</td><td width="200">account-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-run.png" alt="rrze-icons/emblems/report-run.svg"/></td><td width="400">:/emblems/report-run.svg</td><td width="400">rrze-icons/emblems/report-run.svg</td><td width="200">report-run</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/statistic.png" alt="rrze-icons/emblems/statistic.svg"/></td><td width="400">:/emblems/statistic.svg</td><td width="400">rrze-icons/emblems/statistic.svg</td><td width="200">statistic</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/organisational-unit-tree.png" alt="rrze-icons/emblems/organisational-unit-tree.svg"/></td><td width="400">:/emblems/organisational-unit-tree.svg</td><td width="400">rrze-icons/emblems/organisational-unit-tree.svg</td><td width="200">organisational-unit-tree</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/note.png" alt="rrze-icons/emblems/note.svg"/></td><td width="400">:/emblems/note.svg</td><td width="400">rrze-icons/emblems/note.svg</td><td width="200">note</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/template.png" alt="rrze-icons/emblems/template.svg"/></td><td width="400">:/emblems/template.svg</td><td width="400">rrze-icons/emblems/template.svg</td><td width="200">template</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/folder.png" alt="rrze-icons/emblems/folder.svg"/></td><td width="400">:/emblems/folder.svg</td><td width="400">rrze-icons/emblems/folder.svg</td><td width="200">folder</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/page-all.png" alt="rrze-icons/emblems/page-all.svg"/></td><td width="400">:/emblems/page-all.svg</td><td width="400">rrze-icons/emblems/page-all.svg</td><td width="200">page-all</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/footnote-delete.png" alt="rrze-icons/emblems/footnote-delete.svg"/></td><td width="400">:/emblems/footnote-delete.svg</td><td width="400">rrze-icons/emblems/footnote-delete.svg</td><td width="200">footnote-delete</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/id.png" alt="rrze-icons/emblems/id.svg"/></td><td width="400">:/emblems/id.svg</td><td width="400">rrze-icons/emblems/id.svg</td><td width="200">id</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/page-25.png" alt="rrze-icons/emblems/page-25.svg"/></td><td width="400">:/emblems/page-25.svg</td><td width="400">rrze-icons/emblems/page-25.svg</td><td width="200">page-25</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/affirmation.png" alt="rrze-icons/emblems/affirmation.svg"/></td><td width="400">:/emblems/affirmation.svg</td><td width="400">rrze-icons/emblems/affirmation.svg</td><td width="200">affirmation</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/inspector-hat.png" alt="rrze-icons/emblems/inspector-hat.svg"/></td><td width="400">:/emblems/inspector-hat.svg</td><td width="400">rrze-icons/emblems/inspector-hat.svg</td><td width="200">inspector-hat</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/network-cloud.png" alt="rrze-icons/emblems/network-cloud.svg"/></td><td width="400">:/emblems/network-cloud.svg</td><td width="400">rrze-icons/emblems/network-cloud.svg</td><td width="200">network-cloud</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/unix.png" alt="rrze-icons/emblems/unix.svg"/></td><td width="400">:/emblems/unix.svg</td><td width="400">rrze-icons/emblems/unix.svg</td><td width="200">unix</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/lock.png" alt="rrze-icons/emblems/lock.svg"/></td><td width="400">:/emblems/lock.svg</td><td width="400">rrze-icons/emblems/lock.svg</td><td width="200">lock</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database.png" alt="rrze-icons/emblems/database.svg"/></td><td width="400">:/emblems/database.svg</td><td width="400">rrze-icons/emblems/database.svg</td><td width="200">database</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/wide-area-network-link.png" alt="rrze-icons/emblems/wide-area-network-link.svg"/></td><td width="400">:/emblems/wide-area-network-link.svg</td><td width="400">rrze-icons/emblems/wide-area-network-link.svg</td><td width="200">wide-area-network-link</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tree-diagramm-move.png" alt="rrze-icons/emblems/tree-diagramm-move.svg"/></td><td width="400">:/emblems/tree-diagramm-move.svg</td><td width="400">rrze-icons/emblems/tree-diagramm-move.svg</td><td width="200">tree-diagramm-move</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/audio-visual-slide.png" alt="rrze-icons/emblems/audio-visual-slide.svg"/></td><td width="400">:/emblems/audio-visual-slide.svg</td><td width="400">rrze-icons/emblems/audio-visual-slide.svg</td><td width="200">audio-visual-slide</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/twenty-five-per-page.png" alt="rrze-icons/emblems/twenty-five-per-page.svg"/></td><td width="400">:/emblems/twenty-five-per-page.svg</td><td width="400">rrze-icons/emblems/twenty-five-per-page.svg</td><td width="200">twenty-five-per-page</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/bridge-stone.png" alt="rrze-icons/emblems/bridge-stone.svg"/></td><td width="400">:/emblems/bridge-stone.svg</td><td width="400">rrze-icons/emblems/bridge-stone.svg</td><td width="200">bridge-stone</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-attribute.png" alt="rrze-icons/emblems/directory-attribute.svg"/></td><td width="400">:/emblems/directory-attribute.svg</td><td width="400">rrze-icons/emblems/directory-attribute.svg</td><td width="200">directory-attribute</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/wifi.png" alt="rrze-icons/emblems/wifi.svg"/></td><td width="400">:/emblems/wifi.svg</td><td width="400">rrze-icons/emblems/wifi.svg</td><td width="200">wifi</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/information.png" alt="rrze-icons/emblems/information.svg"/></td><td width="400">:/emblems/information.svg</td><td width="400">rrze-icons/emblems/information.svg</td><td width="200">information</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/email.png" alt="rrze-icons/emblems/email.svg"/></td><td width="400">:/emblems/email.svg</td><td width="400">rrze-icons/emblems/email.svg</td><td width="200">email</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-schema.png" alt="rrze-icons/emblems/directory-schema.svg"/></td><td width="400">:/emblems/directory-schema.svg</td><td width="400">rrze-icons/emblems/directory-schema.svg</td><td width="200">directory-schema</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/affiliation.png" alt="rrze-icons/emblems/affiliation.svg"/></td><td width="400">:/emblems/affiliation.svg</td><td width="400">rrze-icons/emblems/affiliation.svg</td><td width="200">affiliation</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/entitlement.png" alt="rrze-icons/emblems/entitlement.svg"/></td><td width="400">:/emblems/entitlement.svg</td><td width="400">rrze-icons/emblems/entitlement.svg</td><td width="200">entitlement</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-upload.png" alt="rrze-icons/emblems/report-upload.svg"/></td><td width="400">:/emblems/report-upload.svg</td><td width="400">rrze-icons/emblems/report-upload.svg</td><td width="200">report-upload</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/account-delete.png" alt="rrze-icons/emblems/account-delete.svg"/></td><td width="400">:/emblems/account-delete.svg</td><td width="400">rrze-icons/emblems/account-delete.svg</td><td width="200">account-delete</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/for-free.png" alt="rrze-icons/emblems/for-free.svg"/></td><td width="400">:/emblems/for-free.svg</td><td width="400">rrze-icons/emblems/for-free.svg</td><td width="200">for-free</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-vcs-subversion.png" alt="rrze-icons/emblems/database-vcs-subversion.svg"/></td><td width="400">:/emblems/database-vcs-subversion.svg</td><td width="400">rrze-icons/emblems/database-vcs-subversion.svg</td><td width="200">database-vcs-subversion</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/pen.png" alt="rrze-icons/emblems/pen.svg"/></td><td width="400">:/emblems/pen.svg</td><td width="400">rrze-icons/emblems/pen.svg</td><td width="200">pen</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/floppy-disc-green.png" alt="rrze-icons/emblems/floppy-disc-green.svg"/></td><td width="400">:/emblems/floppy-disc-green.svg</td><td width="400">rrze-icons/emblems/floppy-disc-green.svg</td><td width="200">floppy-disc-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tree-diagramm-new.png" alt="rrze-icons/emblems/tree-diagramm-new.svg"/></td><td width="400">:/emblems/tree-diagramm-new.svg</td><td width="400">rrze-icons/emblems/tree-diagramm-new.svg</td><td width="200">tree-diagramm-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/bridge-stone-new.png" alt="rrze-icons/emblems/bridge-stone-new.svg"/></td><td width="400">:/emblems/bridge-stone-new.svg</td><td width="400">rrze-icons/emblems/bridge-stone-new.svg</td><td width="200">bridge-stone-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/subversion.png" alt="rrze-icons/emblems/subversion.svg"/></td><td width="400">:/emblems/subversion.svg</td><td width="400">rrze-icons/emblems/subversion.svg</td><td width="200">subversion</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tomcat.png" alt="rrze-icons/emblems/tomcat.svg"/></td><td width="400">:/emblems/tomcat.svg</td><td width="400">rrze-icons/emblems/tomcat.svg</td><td width="200">tomcat</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/geo-id.png" alt="rrze-icons/emblems/geo-id.svg"/></td><td width="400">:/emblems/geo-id.svg</td><td width="400">rrze-icons/emblems/geo-id.svg</td><td width="200">geo-id</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-postgres.png" alt="rrze-icons/emblems/database-postgres.svg"/></td><td width="400">:/emblems/database-postgres.svg</td><td width="400">rrze-icons/emblems/database-postgres.svg</td><td width="200">database-postgres</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/video-film.png" alt="rrze-icons/emblems/video-film.svg"/></td><td width="400">:/emblems/video-film.svg</td><td width="400">rrze-icons/emblems/video-film.svg</td><td width="200">video-film</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-mysql.png" alt="rrze-icons/emblems/database-mysql.svg"/></td><td width="400">:/emblems/database-mysql.svg</td><td width="400">rrze-icons/emblems/database-mysql.svg</td><td width="200">database-mysql</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/subversion-logo.png" alt="rrze-icons/emblems/subversion-logo.svg"/></td><td width="400">:/emblems/subversion-logo.svg</td><td width="400">rrze-icons/emblems/subversion-logo.svg</td><td width="200">subversion-logo</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/task.png" alt="rrze-icons/emblems/task.svg"/></td><td width="400">:/emblems/task.svg</td><td width="400">rrze-icons/emblems/task.svg</td><td width="200">task</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/all-per-page.png" alt="rrze-icons/emblems/all-per-page.svg"/></td><td width="400">:/emblems/all-per-page.svg</td><td width="400">rrze-icons/emblems/all-per-page.svg</td><td width="200">all-per-page</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/slide-audio.png" alt="rrze-icons/emblems/slide-audio.svg"/></td><td width="400">:/emblems/slide-audio.svg</td><td width="400">rrze-icons/emblems/slide-audio.svg</td><td width="200">slide-audio</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/movie-audio.png" alt="rrze-icons/emblems/movie-audio.svg"/></td><td width="400">:/emblems/movie-audio.svg</td><td width="400">rrze-icons/emblems/movie-audio.svg</td><td width="200">movie-audio</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/bridge-stone-delete.png" alt="rrze-icons/emblems/bridge-stone-delete.svg"/></td><td width="400">:/emblems/bridge-stone-delete.svg</td><td width="400">rrze-icons/emblems/bridge-stone-delete.svg</td><td width="200">bridge-stone-delete</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/promotion-data.png" alt="rrze-icons/emblems/promotion-data.svg"/></td><td width="400">:/emblems/promotion-data.svg</td><td width="400">rrze-icons/emblems/promotion-data.svg</td><td width="200">promotion-data</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/rss-feed.png" alt="rrze-icons/emblems/rss-feed.svg"/></td><td width="400">:/emblems/rss-feed.svg</td><td width="400">rrze-icons/emblems/rss-feed.svg</td><td width="200">rss-feed</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/peace-sign.png" alt="rrze-icons/emblems/peace-sign.svg"/></td><td width="400">:/emblems/peace-sign.svg</td><td width="400">rrze-icons/emblems/peace-sign.svg</td><td width="200">peace-sign</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/firewall.png" alt="rrze-icons/emblems/firewall.svg"/></td><td width="400">:/emblems/firewall.svg</td><td width="400">rrze-icons/emblems/firewall.svg</td><td width="200">firewall</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/slide.png" alt="rrze-icons/emblems/slide.svg"/></td><td width="400">:/emblems/slide.svg</td><td width="400">rrze-icons/emblems/slide.svg</td><td width="200">slide</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/audio-itunes.png" alt="rrze-icons/emblems/audio-itunes.svg"/></td><td width="400">:/emblems/audio-itunes.svg</td><td width="400">rrze-icons/emblems/audio-itunes.svg</td><td width="200">audio-itunes</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/footnote-new.png" alt="rrze-icons/emblems/footnote-new.svg"/></td><td width="400">:/emblems/footnote-new.svg</td><td width="400">rrze-icons/emblems/footnote-new.svg</td><td width="200">footnote-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/index.png" alt="rrze-icons/emblems/index.svg"/></td><td width="400">:/emblems/index.svg</td><td width="400">rrze-icons/emblems/index.svg</td><td width="200">index</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/doctoral-cap.png" alt="rrze-icons/emblems/doctoral-cap.svg"/></td><td width="400">:/emblems/doctoral-cap.svg</td><td width="400">rrze-icons/emblems/doctoral-cap.svg</td><td width="200">doctoral-cap</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/zipper.png" alt="rrze-icons/emblems/zipper.svg"/></td><td width="400">:/emblems/zipper.svg</td><td width="400">rrze-icons/emblems/zipper.svg</td><td width="200">zipper</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/organizational-unit.png" alt="rrze-icons/emblems/organizational-unit.svg"/></td><td width="400">:/emblems/organizational-unit.svg</td><td width="400">rrze-icons/emblems/organizational-unit.svg</td><td width="200">organizational-unit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/account-edit.png" alt="rrze-icons/emblems/account-edit.svg"/></td><td width="400">:/emblems/account-edit.svg</td><td width="400">rrze-icons/emblems/account-edit.svg</td><td width="200">account-edit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/structured-program-stay-abroad.png" alt="rrze-icons/emblems/structured-program-stay-abroad.svg"/></td><td width="400">:/emblems/structured-program-stay-abroad.svg</td><td width="400">rrze-icons/emblems/structured-program-stay-abroad.svg</td><td width="200">structured-program-stay-abroad</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/fifty-per-page.png" alt="rrze-icons/emblems/fifty-per-page.svg"/></td><td width="400">:/emblems/fifty-per-page.svg</td><td width="400">rrze-icons/emblems/fifty-per-page.svg</td><td width="200">fifty-per-page</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/money.png" alt="rrze-icons/emblems/money.svg"/></td><td width="400">:/emblems/money.svg</td><td width="400">rrze-icons/emblems/money.svg</td><td width="200">money</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-object.png" alt="rrze-icons/emblems/directory-object.svg"/></td><td width="400">:/emblems/directory-object.svg</td><td width="400">rrze-icons/emblems/directory-object.svg</td><td width="200">directory-object</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-new.png" alt="rrze-icons/emblems/report-new.svg"/></td><td width="400">:/emblems/report-new.svg</td><td width="400">rrze-icons/emblems/report-new.svg</td><td width="200">report-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/single-sign-on.png" alt="rrze-icons/emblems/single-sign-on.svg"/></td><td width="400">:/emblems/single-sign-on.svg</td><td width="400">rrze-icons/emblems/single-sign-on.svg</td><td width="200">single-sign-on</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-delete.png" alt="rrze-icons/emblems/report-delete.svg"/></td><td width="400">:/emblems/report-delete.svg</td><td width="400">rrze-icons/emblems/report-delete.svg</td><td width="200">report-delete</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-firebird.png" alt="rrze-icons/emblems/database-firebird.svg"/></td><td width="400">:/emblems/database-firebird.svg</td><td width="400">rrze-icons/emblems/database-firebird.svg</td><td width="200">database-firebird</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/page-50.png" alt="rrze-icons/emblems/page-50.svg"/></td><td width="400">:/emblems/page-50.svg</td><td width="400">rrze-icons/emblems/page-50.svg</td><td width="200">page-50</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/office-word.png" alt="rrze-icons/emblems/office-word.svg"/></td><td width="400">:/emblems/office-word.svg</td><td width="400">rrze-icons/emblems/office-word.svg</td><td width="200">office-word</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-syntax.png" alt="rrze-icons/emblems/directory-syntax.svg"/></td><td width="400">:/emblems/directory-syntax.svg</td><td width="400">rrze-icons/emblems/directory-syntax.svg</td><td width="200">directory-syntax</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-object-class.png" alt="rrze-icons/emblems/directory-object-class.svg"/></td><td width="400">:/emblems/directory-object-class.svg</td><td width="400">rrze-icons/emblems/directory-object-class.svg</td><td width="200">directory-object-class</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/footnote-edit.png" alt="rrze-icons/emblems/footnote-edit.svg"/></td><td width="400">:/emblems/footnote-edit.svg</td><td width="400">rrze-icons/emblems/footnote-edit.svg</td><td width="200">footnote-edit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/office-excel.png" alt="rrze-icons/emblems/office-excel.svg"/></td><td width="400">:/emblems/office-excel.svg</td><td width="400">rrze-icons/emblems/office-excel.svg</td><td width="200">office-excel</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/webview.png" alt="rrze-icons/emblems/webview.svg"/></td><td width="400">:/emblems/webview.svg</td><td width="400">rrze-icons/emblems/webview.svg</td><td width="200">webview</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-edit.png" alt="rrze-icons/emblems/report-edit.svg"/></td><td width="400">:/emblems/report-edit.svg</td><td width="400">rrze-icons/emblems/report-edit.svg</td><td width="200">report-edit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/export.png" alt="rrze-icons/emblems/export.svg"/></td><td width="400">:/emblems/export.svg</td><td width="400">rrze-icons/emblems/export.svg</td><td width="200">export</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/globe.png" alt="rrze-icons/emblems/globe.svg"/></td><td width="400">:/emblems/globe.svg</td><td width="400">rrze-icons/emblems/globe.svg</td><td width="200">globe</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/phone.png" alt="rrze-icons/emblems/phone.svg"/></td><td width="400">:/emblems/phone.svg</td><td width="400">rrze-icons/emblems/phone.svg</td><td width="200">phone</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/footnote.png" alt="rrze-icons/emblems/footnote.svg"/></td><td width="400">:/emblems/footnote.svg</td><td width="400">rrze-icons/emblems/footnote.svg</td><td width="200">footnote</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory.png" alt="rrze-icons/emblems/directory.svg"/></td><td width="400">:/emblems/directory.svg</td><td width="400">rrze-icons/emblems/directory.svg</td><td width="200">directory</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-openldap.png" alt="rrze-icons/emblems/database-openldap.svg"/></td><td width="400">:/emblems/database-openldap.svg</td><td width="400">rrze-icons/emblems/database-openldap.svg</td><td width="200">database-openldap</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/audio-itunes-u.png" alt="rrze-icons/emblems/audio-itunes-u.svg"/></td><td width="400">:/emblems/audio-itunes-u.svg</td><td width="400">rrze-icons/emblems/audio-itunes-u.svg</td><td width="200">audio-itunes-u</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-otrs.png" alt="rrze-icons/emblems/database-otrs.svg"/></td><td width="400">:/emblems/database-otrs.svg</td><td width="400">rrze-icons/emblems/database-otrs.svg</td><td width="200">database-otrs</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/media-film.png" alt="rrze-icons/emblems/media-film.svg"/></td><td width="400">:/emblems/media-film.svg</td><td width="400">rrze-icons/emblems/media-film.svg</td><td width="200">media-film</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tree-diagramm.png" alt="rrze-icons/emblems/tree-diagramm.svg"/></td><td width="400">:/emblems/tree-diagramm.svg</td><td width="400">rrze-icons/emblems/tree-diagramm.svg</td><td width="200">tree-diagramm</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/jive/class.png" alt="external/jive/class.png"/></td><td width="400">:/jive/class.png</td><td width="400">external/jive/class.png</td><td width="200">class</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/jive/device.png" alt="external/jive/device.png"/></td><td width="400">:/jive/device.png</td><td width="400">external/jive/device.png</td><td width="200">device</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/jive/server.png" alt="external/jive/server.png"/></td><td width="400">:/jive/server.png</td><td width="400">external/jive/server.png</td><td width="200">server</td></tr>
 </table>
-<h2><a name="rrze-icons/devices">:/devices/ (rrze-icons/devices)</a></h2>
+<h2><a name="external">:/ (external)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/devices/" Directory: "rrze-icons/devices"</th>
+<th colspan="4">Resource: ":/" Directory: "external"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/wlan-controller.png" alt="rrze-icons/devices/wlan-controller.svg"/></td><td width="400">:/devices/wlan-controller.svg</td><td width="400">rrze-icons/devices/wlan-controller.svg</td><td width="200">wlan-controller</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-access.png" alt="rrze-icons/devices/server-access.svg"/></td><td width="400">:/devices/server-access.svg</td><td width="400">rrze-icons/devices/server-access.svg</td><td width="200">server-access</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-book.png" alt="rrze-icons/devices/server-book.svg"/></td><td width="400">:/devices/server-book.svg</td><td width="400">rrze-icons/devices/server-book.svg</td><td width="200">server-book</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-web-secure.png" alt="rrze-icons/devices/server-web-secure.svg"/></td><td width="400">:/devices/server-web-secure.svg</td><td width="400">rrze-icons/devices/server-web-secure.svg</td><td width="200">server-web-secure</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-yellow.png" alt="rrze-icons/devices/server-database-yellow.svg"/></td><td width="400">:/devices/server-database-yellow.svg</td><td width="400">rrze-icons/devices/server-database-yellow.svg</td><td width="200">server-database-yellow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/router.png" alt="rrze-icons/devices/router.svg"/></td><td width="400">:/devices/router.svg</td><td width="400">rrze-icons/devices/router.svg</td><td width="200">router</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-web-yellow.png" alt="rrze-icons/devices/server-web-yellow.svg"/></td><td width="400">:/devices/server-web-yellow.svg</td><td width="400">rrze-icons/devices/server-web-yellow.svg</td><td width="200">server-web-yellow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-firewall.png" alt="rrze-icons/devices/server-firewall.svg"/></td><td width="400">:/devices/server-firewall.svg</td><td width="400">rrze-icons/devices/server-firewall.svg</td><td width="200">server-firewall</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-vpn.png" alt="rrze-icons/devices/server-vpn.svg"/></td><td width="400">:/devices/server-vpn.svg</td><td width="400">rrze-icons/devices/server-vpn.svg</td><td width="200">server-vpn</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-print.png" alt="rrze-icons/devices/server-print.svg"/></td><td width="400">:/devices/server-print.svg</td><td width="400">rrze-icons/devices/server-print.svg</td><td width="200">server-print</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-otrs.png" alt="rrze-icons/devices/server-database-otrs.svg"/></td><td width="400">:/devices/server-database-otrs.svg</td><td width="400">rrze-icons/devices/server-database-otrs.svg</td><td width="200">server-database-otrs</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-email.png" alt="rrze-icons/devices/server-email.svg"/></td><td width="400">:/devices/server-email.svg</td><td width="400">rrze-icons/devices/server-email.svg</td><td width="200">server-email</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-green.png" alt="rrze-icons/devices/server-green.svg"/></td><td width="400">:/devices/server-green.svg</td><td width="400">rrze-icons/devices/server-green.svg</td><td width="200">server-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-directory-green.png" alt="rrze-icons/devices/server-directory-green.svg"/></td><td width="400">:/devices/server-directory-green.svg</td><td width="400">rrze-icons/devices/server-directory-green.svg</td><td width="200">server-directory-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-directory-yellow.png" alt="rrze-icons/devices/server-directory-yellow.svg"/></td><td width="400">:/devices/server-directory-yellow.svg</td><td width="400">rrze-icons/devices/server-directory-yellow.svg</td><td width="200">server-directory-yellow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-multiple.png" alt="rrze-icons/devices/server-multiple.svg"/></td><td width="400">:/devices/server-multiple.svg</td><td width="400">rrze-icons/devices/server-multiple.svg</td><td width="200">server-multiple</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/switch.png" alt="rrze-icons/devices/switch.svg"/></td><td width="400">:/devices/switch.svg</td><td width="400">rrze-icons/devices/switch.svg</td><td width="200">switch</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-mysql.png" alt="rrze-icons/devices/server-database-mysql.svg"/></td><td width="400">:/devices/server-database-mysql.svg</td><td width="400">rrze-icons/devices/server-database-mysql.svg</td><td width="200">server-database-mysql</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/wlan-access-point.png" alt="rrze-icons/devices/wlan-access-point.svg"/></td><td width="400">:/devices/wlan-access-point.svg</td><td width="400">rrze-icons/devices/wlan-access-point.svg</td><td width="200">wlan-access-point</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-user.png" alt="rrze-icons/devices/server-user.svg"/></td><td width="400">:/devices/server-user.svg</td><td width="400">rrze-icons/devices/server-user.svg</td><td width="200">server-user</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-web-green.png" alt="rrze-icons/devices/server-web-green.svg"/></td><td width="400">:/devices/server-web-green.svg</td><td width="400">rrze-icons/devices/server-web-green.svg</td><td width="200">server-web-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-blades.png" alt="rrze-icons/devices/server-blades.svg"/></td><td width="400">:/devices/server-blades.svg</td><td width="400">rrze-icons/devices/server-blades.svg</td><td width="200">server-blades</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-file.png" alt="rrze-icons/devices/server-file.svg"/></td><td width="400">:/devices/server-file.svg</td><td width="400">rrze-icons/devices/server-file.svg</td><td width="200">server-file</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/modem.png" alt="rrze-icons/devices/modem.svg"/></td><td width="400">:/devices/modem.svg</td><td width="400">rrze-icons/devices/modem.svg</td><td width="200">modem</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/workstation.png" alt="rrze-icons/devices/workstation.svg"/></td><td width="400">:/devices/workstation.svg</td><td width="400">rrze-icons/devices/workstation.svg</td><td width="200">workstation</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database.png" alt="rrze-icons/devices/server-database.svg"/></td><td width="400">:/devices/server-database.svg</td><td width="400">rrze-icons/devices/server-database.svg</td><td width="200">server-database</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-postgres.png" alt="rrze-icons/devices/server-database-postgres.svg"/></td><td width="400">:/devices/server-database-postgres.svg</td><td width="400">rrze-icons/devices/server-database-postgres.svg</td><td width="200">server-database-postgres</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-monitoring.png" alt="rrze-icons/devices/server-monitoring.svg"/></td><td width="400">:/devices/server-monitoring.svg</td><td width="400">rrze-icons/devices/server-monitoring.svg</td><td width="200">server-monitoring</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-firebird.png" alt="rrze-icons/devices/server-database-firebird.svg"/></td><td width="400">:/devices/server-database-firebird.svg</td><td width="400">rrze-icons/devices/server-database-firebird.svg</td><td width="200">server-database-firebird</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-directory.png" alt="rrze-icons/devices/server-directory.svg"/></td><td width="400">:/devices/server-directory.svg</td><td width="400">rrze-icons/devices/server-directory.svg</td><td width="200">server-directory</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-subversion.png" alt="rrze-icons/devices/server-subversion.svg"/></td><td width="400">:/devices/server-subversion.svg</td><td width="400">rrze-icons/devices/server-subversion.svg</td><td width="200">server-subversion</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/database-locked.png" alt="rrze-icons/devices/database-locked.svg"/></td><td width="400">:/devices/database-locked.svg</td><td width="400">rrze-icons/devices/database-locked.svg</td><td width="200">database-locked</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-web.png" alt="rrze-icons/devices/server-web.svg"/></td><td width="400">:/devices/server-web.svg</td><td width="400">rrze-icons/devices/server-web.svg</td><td width="200">server-web</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-email-relay.png" alt="rrze-icons/devices/server-email-relay.svg"/></td><td width="400">:/devices/server-email-relay.svg</td><td width="400">rrze-icons/devices/server-email-relay.svg</td><td width="200">server-email-relay</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-yellow.png" alt="rrze-icons/devices/server-yellow.svg"/></td><td width="400">:/devices/server-yellow.svg</td><td width="400">rrze-icons/devices/server-yellow.svg</td><td width="200">server-yellow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-green.png" alt="rrze-icons/devices/server-database-green.svg"/></td><td width="400">:/devices/server-database-green.svg</td><td width="400">rrze-icons/devices/server-database-green.svg</td><td width="200">server-database-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-red.png" alt="rrze-icons/devices/server-red.svg"/></td><td width="400">:/devices/server-red.svg</td><td width="400">rrze-icons/devices/server-red.svg</td><td width="200">server-red</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-accounting.png" alt="rrze-icons/devices/server-accounting.svg"/></td><td width="400">:/devices/server-accounting.svg</td><td width="400">rrze-icons/devices/server-accounting.svg</td><td width="200">server-accounting</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-radius.png" alt="rrze-icons/devices/server-radius.svg"/></td><td width="400">:/devices/server-radius.svg</td><td width="400">rrze-icons/devices/server-radius.svg</td><td width="200">server-radius</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server.png" alt="rrze-icons/devices/server.svg"/></td><td width="400">:/devices/server.svg</td><td width="400">rrze-icons/devices/server.svg</td><td width="200">server</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/class.png" alt="external/class.png"/></td><td width="400">:/class.png</td><td width="400">external/class.png</td><td width="200">class</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/function.png" alt="external/function.png"/></td><td width="400">:/function.png</td><td width="400">external/function.png</td><td width="200">function</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/ipython.png" alt="external/ipython.png"/></td><td width="400">:/ipython.png</td><td width="400">external/ipython.png</td><td width="200">ipython</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/python-console.png" alt="external/python-console.png"/></td><td width="400">:/python-console.png</td><td width="400">external/python-console.png</td><td width="200">python-console</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/python-file.png" alt="external/python-file.png"/></td><td width="400">:/python-file.png</td><td width="400">external/python-file.png</td><td width="200">python-file</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/python-module.png" alt="external/python-module.png"/></td><td width="400">:/python-module.png</td><td width="400">external/python-module.png</td><td width="200">python-module</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/python-package.png" alt="external/python-package.png"/></td><td width="400">:/python-package.png</td><td width="400">external/python-package.png</td><td width="200">python-package</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/python.png" alt="external/python.png"/></td><td width="400">:/python.png</td><td width="400">external/python.png</td><td width="200">python</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/pythonw-console.png" alt="external/pythonw-console.png"/></td><td width="400">:/pythonw-console.png</td><td width="400">external/pythonw-console.png</td><td width="200">pythonw-console</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/tango.png" alt="external/tango.png"/></td><td width="400">:/tango.png</td><td width="400">external/tango.png</td><td width="200">tango</td></tr>
+</table>
+<h2><a name="large/snapshot">:/snapshot/ (large/snapshot)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/snapshot/" Directory: "large/snapshot"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/SardanaEditor.png" alt="large/snapshot/SardanaEditor.png"/></td><td width="400">:/snapshot/SardanaEditor.png</td><td width="400">large/snapshot/SardanaEditor.png</td><td width="200">SardanaEditor</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusArrayEditor.png" alt="large/snapshot/TaurusArrayEditor.png"/></td><td width="400">:/snapshot/TaurusArrayEditor.png</td><td width="400">large/snapshot/TaurusArrayEditor.png</td><td width="200">TaurusArrayEditor</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusDbTreeWidget.png" alt="large/snapshot/TaurusDbTreeWidget.png"/></td><td width="400">:/snapshot/TaurusDbTreeWidget.png</td><td width="400">large/snapshot/TaurusDbTreeWidget.png</td><td width="200">TaurusDbTreeWidget</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusDevicePanel.png" alt="large/snapshot/TaurusDevicePanel.png"/></td><td width="400">:/snapshot/TaurusDevicePanel.png</td><td width="400">large/snapshot/TaurusDevicePanel.png</td><td width="200">TaurusDevicePanel</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusForm.png" alt="large/snapshot/TaurusForm.png"/></td><td width="400">:/snapshot/TaurusForm.png</td><td width="400">large/snapshot/TaurusForm.png</td><td width="200">TaurusForm</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusImageDialog.png" alt="large/snapshot/TaurusImageDialog.png"/></td><td width="400">:/snapshot/TaurusImageDialog.png</td><td width="400">large/snapshot/TaurusImageDialog.png</td><td width="200">TaurusImageDialog</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusJDrawSynopticsView.png" alt="large/snapshot/TaurusJDrawSynopticsView.png"/></td><td width="400">:/snapshot/TaurusJDrawSynopticsView.png</td><td width="400">large/snapshot/TaurusJDrawSynopticsView.png</td><td width="200">TaurusJDrawSynopticsView</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusNeXusBrowser.png" alt="large/snapshot/TaurusNeXusBrowser.png"/></td><td width="400">:/snapshot/TaurusNeXusBrowser.png</td><td width="400">large/snapshot/TaurusNeXusBrowser.png</td><td width="200">TaurusNeXusBrowser</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusPlot.png" alt="large/snapshot/TaurusPlot.png"/></td><td width="400">:/snapshot/TaurusPlot.png</td><td width="400">large/snapshot/TaurusPlot.png</td><td width="200">TaurusPlot</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusQubDataImageDisplay.png" alt="large/snapshot/TaurusQubDataImageDisplay.png"/></td><td width="400">:/snapshot/TaurusQubDataImageDisplay.png</td><td width="400">large/snapshot/TaurusQubDataImageDisplay.png</td><td width="200">TaurusQubDataImageDisplay</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusShell.png" alt="large/snapshot/TaurusShell.png"/></td><td width="400">:/snapshot/TaurusShell.png</td><td width="400">large/snapshot/TaurusShell.png</td><td width="200">TaurusShell</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusTrend.png" alt="large/snapshot/TaurusTrend.png"/></td><td width="400">:/snapshot/TaurusTrend.png</td><td width="400">large/snapshot/TaurusTrend.png</td><td width="200">TaurusTrend</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusTrend2DDialog.png" alt="large/snapshot/TaurusTrend2DDialog.png"/></td><td width="400">:/snapshot/TaurusTrend2DDialog.png</td><td width="400">large/snapshot/TaurusTrend2DDialog.png</td><td width="200">TaurusTrend2DDialog</td></tr>
+</table>
+<h2><a name="large">:/ (large)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/" Directory: "large"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/TaurusSplash.png" alt="large/TaurusSplash.png"/></td><td width="400">:/TaurusSplash.png</td><td width="400">large/TaurusSplash.png</td><td width="200">TaurusSplash</td></tr>
 </table>
 <h2><a name="rrze-icons/actions">:/actions/ (rrze-icons/actions)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/actions/" Directory: "rrze-icons/actions"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/run.png" alt="rrze-icons/actions/run.svg"/></td><td width="400">:/actions/run.svg</td><td width="400">rrze-icons/actions/run.svg</td><td width="200">run</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/hide.png" alt="rrze-icons/actions/hide.svg"/></td><td width="400">:/actions/hide.svg</td><td width="400">rrze-icons/actions/hide.svg</td><td width="200">hide</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-down.png" alt="rrze-icons/actions/sort-down.svg"/></td><td width="400">:/actions/sort-down.svg</td><td width="400">rrze-icons/actions/sort-down.svg</td><td width="200">sort-down</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/up.png" alt="rrze-icons/actions/up.svg"/></td><td width="400">:/actions/up.svg</td><td width="400">rrze-icons/actions/up.svg</td><td width="200">up</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dynamic-blue-down.png" alt="rrze-icons/actions/dynamic-blue-down.svg"/></td><td width="400">:/actions/dynamic-blue-down.svg</td><td width="400">rrze-icons/actions/dynamic-blue-down.svg</td><td width="200">dynamic-blue-down</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/up-grey.png" alt="rrze-icons/actions/up-grey.svg"/></td><td width="400">:/actions/up-grey.svg</td><td width="400">rrze-icons/actions/up-grey.svg</td><td width="200">up-grey</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/left-grey.png" alt="rrze-icons/actions/left-grey.svg"/></td><td width="400">:/actions/left-grey.svg</td><td width="400">rrze-icons/actions/left-grey.svg</td><td width="200">left-grey</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-down-grey.png" alt="rrze-icons/actions/move-waiting-down-grey.svg"/></td><td width="400">:/actions/move-waiting-down-grey.svg</td><td width="400">rrze-icons/actions/move-waiting-down-grey.svg</td><td width="200">move-waiting-down-grey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/action-undo.png" alt="rrze-icons/actions/action-undo.svg"/></td><td width="400">:/actions/action-undo.svg</td><td width="400">rrze-icons/actions/action-undo.svg</td><td width="200">action-undo</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/add-participant.png" alt="rrze-icons/actions/add-participant.svg"/></td><td width="400">:/actions/add-participant.svg</td><td width="400">rrze-icons/actions/add-participant.svg</td><td width="200">add-participant</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/right.png" alt="rrze-icons/actions/right.svg"/></td><td width="400">:/actions/right.svg</td><td width="400">rrze-icons/actions/right.svg</td><td width="200">right</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/add.png" alt="rrze-icons/actions/add.svg"/></td><td width="400">:/actions/add.svg</td><td width="400">rrze-icons/actions/add.svg</td><td width="200">add</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/approval.png" alt="rrze-icons/actions/approval.svg"/></td><td width="400">:/actions/approval.svg</td><td width="400">rrze-icons/actions/approval.svg</td><td width="200">approval</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/manage-settings.png" alt="rrze-icons/actions/manage-settings.svg"/></td><td width="400">:/actions/manage-settings.svg</td><td width="400">rrze-icons/actions/manage-settings.svg</td><td width="200">manage-settings</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/load-settings.png" alt="rrze-icons/actions/load-settings.svg"/></td><td width="400">:/actions/load-settings.svg</td><td width="400">rrze-icons/actions/load-settings.svg</td><td width="200">load-settings</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/arrange-boxes.png" alt="rrze-icons/actions/arrange-boxes.svg"/></td><td width="400">:/actions/arrange-boxes.svg</td><td width="400">rrze-icons/actions/arrange-boxes.svg</td><td width="200">arrange-boxes</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dynamic-blue-right.png" alt="rrze-icons/actions/dynamic-blue-right.svg"/></td><td width="400">:/actions/dynamic-blue-right.svg</td><td width="400">rrze-icons/actions/dynamic-blue-right.svg</td><td width="200">dynamic-blue-right</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/left.png" alt="rrze-icons/actions/left.svg"/></td><td width="400">:/actions/left.svg</td><td width="400">rrze-icons/actions/left.svg</td><td width="200">left</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/download.png" alt="rrze-icons/actions/download.svg"/></td><td width="400">:/actions/download.svg</td><td width="400">rrze-icons/actions/download.svg</td><td width="200">download</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/switch-course-book.png" alt="rrze-icons/actions/switch-course-book.svg"/></td><td width="400">:/actions/switch-course-book.svg</td><td width="400">rrze-icons/actions/switch-course-book.svg</td><td width="200">switch-course-book</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/data-transfer.png" alt="rrze-icons/actions/data-transfer.svg"/></td><td width="400">:/actions/data-transfer.svg</td><td width="400">rrze-icons/actions/data-transfer.svg</td><td width="200">data-transfer</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/send-email-group.png" alt="rrze-icons/actions/send-email-group.svg"/></td><td width="400">:/actions/send-email-group.svg</td><td width="400">rrze-icons/actions/send-email-group.svg</td><td width="200">send-email-group</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/switch-course.png" alt="rrze-icons/actions/switch-course.svg"/></td><td width="400">:/actions/switch-course.svg</td><td width="400">rrze-icons/actions/switch-course.svg</td><td width="200">switch-course</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/right-grey.png" alt="rrze-icons/actions/right-grey.svg"/></td><td width="400">:/actions/right-grey.svg</td><td width="400">rrze-icons/actions/right-grey.svg</td><td width="200">right-grey</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/send-email-user.png" alt="rrze-icons/actions/send-email-user.svg"/></td><td width="400">:/actions/send-email-user.svg</td><td width="400">rrze-icons/actions/send-email-user.svg</td><td width="200">send-email-user</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/back-to-ou.png" alt="rrze-icons/actions/back-to-ou.svg"/></td><td width="400">:/actions/back-to-ou.svg</td><td width="400">rrze-icons/actions/back-to-ou.svg</td><td width="200">back-to-ou</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/data-transfer.png" alt="rrze-icons/actions/data-transfer.svg"/></td><td width="400">:/actions/data-transfer.svg</td><td width="400">rrze-icons/actions/data-transfer.svg</td><td width="200">data-transfer</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/delete-all-participants.png" alt="rrze-icons/actions/delete-all-participants.svg"/></td><td width="400">:/actions/delete-all-participants.svg</td><td width="400">rrze-icons/actions/delete-all-participants.svg</td><td width="200">delete-all-participants</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dial-in.png" alt="rrze-icons/actions/dial-in.svg"/></td><td width="400">:/actions/dial-in.svg</td><td width="400">rrze-icons/actions/dial-in.svg</td><td width="200">dial-in</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/down-grey.png" alt="rrze-icons/actions/down-grey.svg"/></td><td width="400">:/actions/down-grey.svg</td><td width="400">rrze-icons/actions/down-grey.svg</td><td width="200">down-grey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/down.png" alt="rrze-icons/actions/down.svg"/></td><td width="400">:/actions/down.svg</td><td width="400">rrze-icons/actions/down.svg</td><td width="200">down</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/download.png" alt="rrze-icons/actions/download.svg"/></td><td width="400">:/actions/download.svg</td><td width="400">rrze-icons/actions/download.svg</td><td width="200">download</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dynamic-blue-down.png" alt="rrze-icons/actions/dynamic-blue-down.svg"/></td><td width="400">:/actions/dynamic-blue-down.svg</td><td width="400">rrze-icons/actions/dynamic-blue-down.svg</td><td width="200">dynamic-blue-down</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dynamic-blue-left.png" alt="rrze-icons/actions/dynamic-blue-left.svg"/></td><td width="400">:/actions/dynamic-blue-left.svg</td><td width="400">rrze-icons/actions/dynamic-blue-left.svg</td><td width="200">dynamic-blue-left</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dynamic-blue-right.png" alt="rrze-icons/actions/dynamic-blue-right.svg"/></td><td width="400">:/actions/dynamic-blue-right.svg</td><td width="400">rrze-icons/actions/dynamic-blue-right.svg</td><td width="200">dynamic-blue-right</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dynamic-blue-up.png" alt="rrze-icons/actions/dynamic-blue-up.svg"/></td><td width="400">:/actions/dynamic-blue-up.svg</td><td width="400">rrze-icons/actions/dynamic-blue-up.svg</td><td width="200">dynamic-blue-up</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/email-not-available.png" alt="rrze-icons/actions/email-not-available.svg"/></td><td width="400">:/actions/email-not-available.svg</td><td width="400">rrze-icons/actions/email-not-available.svg</td><td width="200">email-not-available</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/filter.png" alt="rrze-icons/actions/filter.svg"/></td><td width="400">:/actions/filter.svg</td><td width="400">rrze-icons/actions/filter.svg</td><td width="200">filter</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-up-green.png" alt="rrze-icons/actions/sort-up-green.svg"/></td><td width="400">:/actions/sort-up-green.svg</td><td width="400">rrze-icons/actions/sort-up-green.svg</td><td width="200">sort-up-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/go-bottom.png" alt="rrze-icons/actions/go-bottom.svg"/></td><td width="400">:/actions/go-bottom.svg</td><td width="400">rrze-icons/actions/go-bottom.svg</td><td width="200">go-bottom</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/go-top.png" alt="rrze-icons/actions/go-top.svg"/></td><td width="400">:/actions/go-top.svg</td><td width="400">rrze-icons/actions/go-top.svg</td><td width="200">go-top</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/show.png" alt="rrze-icons/actions/show.svg"/></td><td width="400">:/actions/show.svg</td><td width="400">rrze-icons/actions/show.svg</td><td width="200">show</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/refuse.png" alt="rrze-icons/actions/refuse.svg"/></td><td width="400">:/actions/refuse.svg</td><td width="400">rrze-icons/actions/refuse.svg</td><td width="200">refuse</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/hide.png" alt="rrze-icons/actions/hide.svg"/></td><td width="400">:/actions/hide.svg</td><td width="400">rrze-icons/actions/hide.svg</td><td width="200">hide</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/left-grey.png" alt="rrze-icons/actions/left-grey.svg"/></td><td width="400">:/actions/left-grey.svg</td><td width="400">rrze-icons/actions/left-grey.svg</td><td width="200">left-grey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/left.png" alt="rrze-icons/actions/left.svg"/></td><td width="400">:/actions/left.svg</td><td width="400">rrze-icons/actions/left.svg</td><td width="200">left</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/list-all-participants.png" alt="rrze-icons/actions/list-all-participants.svg"/></td><td width="400">:/actions/list-all-participants.svg</td><td width="400">rrze-icons/actions/list-all-participants.svg</td><td width="200">list-all-participants</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-down-red.png" alt="rrze-icons/actions/sort-down-red.svg"/></td><td width="400">:/actions/sort-down-red.svg</td><td width="400">rrze-icons/actions/sort-down-red.svg</td><td width="200">sort-down-red</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/transfer-up_down.png" alt="rrze-icons/actions/transfer-up_down.svg"/></td><td width="400">:/actions/transfer-up_down.svg</td><td width="400">rrze-icons/actions/transfer-up_down.svg</td><td width="200">transfer-up_down</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/print.png" alt="rrze-icons/actions/print.svg"/></td><td width="400">:/actions/print.svg</td><td width="400">rrze-icons/actions/print.svg</td><td width="200">print</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-up-grey.png" alt="rrze-icons/actions/move-waiting-up-grey.svg"/></td><td width="400">:/actions/move-waiting-up-grey.svg</td><td width="400">rrze-icons/actions/move-waiting-up-grey.svg</td><td width="200">move-waiting-up-grey</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-up.png" alt="rrze-icons/actions/sort-up.svg"/></td><td width="400">:/actions/sort-up.svg</td><td width="400">rrze-icons/actions/sort-up.svg</td><td width="200">sort-up</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dynamic-blue-up.png" alt="rrze-icons/actions/dynamic-blue-up.svg"/></td><td width="400">:/actions/dynamic-blue-up.svg</td><td width="400">rrze-icons/actions/dynamic-blue-up.svg</td><td width="200">dynamic-blue-up</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/workflow.png" alt="rrze-icons/actions/workflow.svg"/></td><td width="400">:/actions/workflow.svg</td><td width="400">rrze-icons/actions/workflow.svg</td><td width="200">workflow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-neutral.png" alt="rrze-icons/actions/sort-neutral.svg"/></td><td width="400">:/actions/sort-neutral.svg</td><td width="400">rrze-icons/actions/sort-neutral.svg</td><td width="200">sort-neutral</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/add.png" alt="rrze-icons/actions/add.svg"/></td><td width="400">:/actions/add.svg</td><td width="400">rrze-icons/actions/add.svg</td><td width="200">add</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/switch-course-book-grey.png" alt="rrze-icons/actions/switch-course-book-grey.svg"/></td><td width="400">:/actions/switch-course-book-grey.svg</td><td width="400">rrze-icons/actions/switch-course-book-grey.svg</td><td width="200">switch-course-book-grey</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/down.png" alt="rrze-icons/actions/down.svg"/></td><td width="400">:/actions/down.svg</td><td width="400">rrze-icons/actions/down.svg</td><td width="200">down</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-down-green.png" alt="rrze-icons/actions/sort-down-green.svg"/></td><td width="400">:/actions/sort-down-green.svg</td><td width="400">rrze-icons/actions/sort-down-green.svg</td><td width="200">sort-down-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/switch-course-grey.png" alt="rrze-icons/actions/switch-course-grey.svg"/></td><td width="400">:/actions/switch-course-grey.svg</td><td width="400">rrze-icons/actions/switch-course-grey.svg</td><td width="200">switch-course-grey</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-down.png" alt="rrze-icons/actions/move-waiting-down.svg"/></td><td width="400">:/actions/move-waiting-down.svg</td><td width="400">rrze-icons/actions/move-waiting-down.svg</td><td width="200">move-waiting-down</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/action-undo.png" alt="rrze-icons/actions/action-undo.svg"/></td><td width="400">:/actions/action-undo.svg</td><td width="400">rrze-icons/actions/action-undo.svg</td><td width="200">action-undo</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dial-in.png" alt="rrze-icons/actions/dial-in.svg"/></td><td width="400">:/actions/dial-in.svg</td><td width="400">rrze-icons/actions/dial-in.svg</td><td width="200">dial-in</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-neutral-red.png" alt="rrze-icons/actions/sort-neutral-red.svg"/></td><td width="400">:/actions/sort-neutral-red.svg</td><td width="400">rrze-icons/actions/sort-neutral-red.svg</td><td width="200">sort-neutral-red</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/load-settings.png" alt="rrze-icons/actions/load-settings.svg"/></td><td width="400">:/actions/load-settings.svg</td><td width="400">rrze-icons/actions/load-settings.svg</td><td width="200">load-settings</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/log-in.png" alt="rrze-icons/actions/log-in.svg"/></td><td width="400">:/actions/log-in.svg</td><td width="400">rrze-icons/actions/log-in.svg</td><td width="200">log-in</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/log-out.png" alt="rrze-icons/actions/log-out.svg"/></td><td width="400">:/actions/log-out.svg</td><td width="400">rrze-icons/actions/log-out.svg</td><td width="200">log-out</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/email-not-available.png" alt="rrze-icons/actions/email-not-available.svg"/></td><td width="400">:/actions/email-not-available.svg</td><td width="400">rrze-icons/actions/email-not-available.svg</td><td width="200">email-not-available</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/go-bottom.png" alt="rrze-icons/actions/go-bottom.svg"/></td><td width="400">:/actions/go-bottom.svg</td><td width="400">rrze-icons/actions/go-bottom.svg</td><td width="200">go-bottom</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/transfer-right_left.png" alt="rrze-icons/actions/transfer-right_left.svg"/></td><td width="400">:/actions/transfer-right_left.svg</td><td width="400">rrze-icons/actions/transfer-right_left.svg</td><td width="200">transfer-right_left</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/manage-settings.png" alt="rrze-icons/actions/manage-settings.svg"/></td><td width="400">:/actions/manage-settings.svg</td><td width="400">rrze-icons/actions/manage-settings.svg</td><td width="200">manage-settings</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/merge-affiliation.png" alt="rrze-icons/actions/merge-affiliation.svg"/></td><td width="400">:/actions/merge-affiliation.svg</td><td width="400">rrze-icons/actions/merge-affiliation.svg</td><td width="200">merge-affiliation</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-up-green.png" alt="rrze-icons/actions/sort-up-green.svg"/></td><td width="400">:/actions/sort-up-green.svg</td><td width="400">rrze-icons/actions/sort-up-green.svg</td><td width="200">sort-up-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/delete-all-participants.png" alt="rrze-icons/actions/delete-all-participants.svg"/></td><td width="400">:/actions/delete-all-participants.svg</td><td width="400">rrze-icons/actions/delete-all-participants.svg</td><td width="200">delete-all-participants</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/send-email.png" alt="rrze-icons/actions/send-email.svg"/></td><td width="400">:/actions/send-email.svg</td><td width="400">rrze-icons/actions/send-email.svg</td><td width="200">send-email</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/transfer-left_right.png" alt="rrze-icons/actions/transfer-left_right.svg"/></td><td width="400">:/actions/transfer-left_right.svg</td><td width="400">rrze-icons/actions/transfer-left_right.svg</td><td width="200">transfer-left_right</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-to-participant-green-arrow.png" alt="rrze-icons/actions/move-waiting-to-participant-green-arrow.svg"/></td><td width="400">:/actions/move-waiting-to-participant-green-arrow.svg</td><td width="400">rrze-icons/actions/move-waiting-to-participant-green-arrow.svg</td><td width="200">move-waiting-to-participant-green-arrow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/send-email-user-other.png" alt="rrze-icons/actions/send-email-user-other.svg"/></td><td width="400">:/actions/send-email-user-other.svg</td><td width="400">rrze-icons/actions/send-email-user-other.svg</td><td width="200">send-email-user-other</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dynamic-blue-left.png" alt="rrze-icons/actions/dynamic-blue-left.svg"/></td><td width="400">:/actions/dynamic-blue-left.svg</td><td width="400">rrze-icons/actions/dynamic-blue-left.svg</td><td width="200">dynamic-blue-left</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/view.png" alt="rrze-icons/actions/view.svg"/></td><td width="400">:/actions/view.svg</td><td width="400">rrze-icons/actions/view.svg</td><td width="200">view</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/monitoring.png" alt="rrze-icons/actions/monitoring.svg"/></td><td width="400">:/actions/monitoring.svg</td><td width="400">rrze-icons/actions/monitoring.svg</td><td width="200">monitoring</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-participant-to-waiting-red-grey.png" alt="rrze-icons/actions/move-participant-to-waiting-red-grey.svg"/></td><td width="400">:/actions/move-participant-to-waiting-red-grey.svg</td><td width="400">rrze-icons/actions/move-participant-to-waiting-red-grey.svg</td><td width="200">move-participant-to-waiting-red-grey</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-participant-to-waiting-red.png" alt="rrze-icons/actions/move-participant-to-waiting-red.svg"/></td><td width="400">:/actions/move-participant-to-waiting-red.svg</td><td width="400">rrze-icons/actions/move-participant-to-waiting-red.svg</td><td width="200">move-participant-to-waiting-red</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/transfer-down_up.png" alt="rrze-icons/actions/transfer-down_up.svg"/></td><td width="400">:/actions/transfer-down_up.svg</td><td width="400">rrze-icons/actions/transfer-down_up.svg</td><td width="200">transfer-down_up</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/filter.png" alt="rrze-icons/actions/filter.svg"/></td><td width="400">:/actions/filter.svg</td><td width="400">rrze-icons/actions/filter.svg</td><td width="200">filter</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/log-in.png" alt="rrze-icons/actions/log-in.svg"/></td><td width="400">:/actions/log-in.svg</td><td width="400">rrze-icons/actions/log-in.svg</td><td width="200">log-in</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-down-grey.png" alt="rrze-icons/actions/move-waiting-down-grey.svg"/></td><td width="400">:/actions/move-waiting-down-grey.svg</td><td width="400">rrze-icons/actions/move-waiting-down-grey.svg</td><td width="200">move-waiting-down-grey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-down.png" alt="rrze-icons/actions/move-waiting-down.svg"/></td><td width="400">:/actions/move-waiting-down.svg</td><td width="400">rrze-icons/actions/move-waiting-down.svg</td><td width="200">move-waiting-down</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-to-participant-green-arrow.png" alt="rrze-icons/actions/move-waiting-to-participant-green-arrow.svg"/></td><td width="400">:/actions/move-waiting-to-participant-green-arrow.svg</td><td width="400">rrze-icons/actions/move-waiting-to-participant-green-arrow.svg</td><td width="200">move-waiting-to-participant-green-arrow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-up-grey.png" alt="rrze-icons/actions/move-waiting-up-grey.svg"/></td><td width="400">:/actions/move-waiting-up-grey.svg</td><td width="400">rrze-icons/actions/move-waiting-up-grey.svg</td><td width="200">move-waiting-up-grey</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-up.png" alt="rrze-icons/actions/move-waiting-up.svg"/></td><td width="400">:/actions/move-waiting-up.svg</td><td width="400">rrze-icons/actions/move-waiting-up.svg</td><td width="200">move-waiting-up</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/monitoring.png" alt="rrze-icons/actions/monitoring.svg"/></td><td width="400">:/actions/monitoring.svg</td><td width="400">rrze-icons/actions/monitoring.svg</td><td width="200">monitoring</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/upload.png" alt="rrze-icons/actions/upload.svg"/></td><td width="400">:/actions/upload.svg</td><td width="400">rrze-icons/actions/upload.svg</td><td width="200">upload</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-up-red.png" alt="rrze-icons/actions/sort-up-red.svg"/></td><td width="400">:/actions/sort-up-red.svg</td><td width="400">rrze-icons/actions/sort-up-red.svg</td><td width="200">sort-up-red</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/print.png" alt="rrze-icons/actions/print.svg"/></td><td width="400">:/actions/print.svg</td><td width="400">rrze-icons/actions/print.svg</td><td width="200">print</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/refuse.png" alt="rrze-icons/actions/refuse.svg"/></td><td width="400">:/actions/refuse.svg</td><td width="400">rrze-icons/actions/refuse.svg</td><td width="200">refuse</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/right-grey.png" alt="rrze-icons/actions/right-grey.svg"/></td><td width="400">:/actions/right-grey.svg</td><td width="400">rrze-icons/actions/right-grey.svg</td><td width="200">right-grey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/right.png" alt="rrze-icons/actions/right.svg"/></td><td width="400">:/actions/right.svg</td><td width="400">rrze-icons/actions/right.svg</td><td width="200">right</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/run.png" alt="rrze-icons/actions/run.svg"/></td><td width="400">:/actions/run.svg</td><td width="400">rrze-icons/actions/run.svg</td><td width="200">run</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/send-email-group.png" alt="rrze-icons/actions/send-email-group.svg"/></td><td width="400">:/actions/send-email-group.svg</td><td width="400">rrze-icons/actions/send-email-group.svg</td><td width="200">send-email-group</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/send-email-user-other.png" alt="rrze-icons/actions/send-email-user-other.svg"/></td><td width="400">:/actions/send-email-user-other.svg</td><td width="400">rrze-icons/actions/send-email-user-other.svg</td><td width="200">send-email-user-other</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/send-email-user.png" alt="rrze-icons/actions/send-email-user.svg"/></td><td width="400">:/actions/send-email-user.svg</td><td width="400">rrze-icons/actions/send-email-user.svg</td><td width="200">send-email-user</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/send-email.png" alt="rrze-icons/actions/send-email.svg"/></td><td width="400">:/actions/send-email.svg</td><td width="400">rrze-icons/actions/send-email.svg</td><td width="200">send-email</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/show.png" alt="rrze-icons/actions/show.svg"/></td><td width="400">:/actions/show.svg</td><td width="400">rrze-icons/actions/show.svg</td><td width="200">show</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-down-green.png" alt="rrze-icons/actions/sort-down-green.svg"/></td><td width="400">:/actions/sort-down-green.svg</td><td width="400">rrze-icons/actions/sort-down-green.svg</td><td width="200">sort-down-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-down-red.png" alt="rrze-icons/actions/sort-down-red.svg"/></td><td width="400">:/actions/sort-down-red.svg</td><td width="400">rrze-icons/actions/sort-down-red.svg</td><td width="200">sort-down-red</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-down.png" alt="rrze-icons/actions/sort-down.svg"/></td><td width="400">:/actions/sort-down.svg</td><td width="400">rrze-icons/actions/sort-down.svg</td><td width="200">sort-down</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-neutral-green.png" alt="rrze-icons/actions/sort-neutral-green.svg"/></td><td width="400">:/actions/sort-neutral-green.svg</td><td width="400">rrze-icons/actions/sort-neutral-green.svg</td><td width="200">sort-neutral-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-neutral-red.png" alt="rrze-icons/actions/sort-neutral-red.svg"/></td><td width="400">:/actions/sort-neutral-red.svg</td><td width="400">rrze-icons/actions/sort-neutral-red.svg</td><td width="200">sort-neutral-red</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-neutral.png" alt="rrze-icons/actions/sort-neutral.svg"/></td><td width="400">:/actions/sort-neutral.svg</td><td width="400">rrze-icons/actions/sort-neutral.svg</td><td width="200">sort-neutral</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-up-red.png" alt="rrze-icons/actions/sort-up-red.svg"/></td><td width="400">:/actions/sort-up-red.svg</td><td width="400">rrze-icons/actions/sort-up-red.svg</td><td width="200">sort-up-red</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-up.png" alt="rrze-icons/actions/sort-up.svg"/></td><td width="400">:/actions/sort-up.svg</td><td width="400">rrze-icons/actions/sort-up.svg</td><td width="200">sort-up</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/split-affiliation.png" alt="rrze-icons/actions/split-affiliation.svg"/></td><td width="400">:/actions/split-affiliation.svg</td><td width="400">rrze-icons/actions/split-affiliation.svg</td><td width="200">split-affiliation</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-participant-to-waiting-red-grey.png" alt="rrze-icons/actions/move-participant-to-waiting-red-grey.svg"/></td><td width="400">:/actions/move-participant-to-waiting-red-grey.svg</td><td width="400">rrze-icons/actions/move-participant-to-waiting-red-grey.svg</td><td width="200">move-participant-to-waiting-red-grey</td></tr>
-</table>
-<h2><a name="rrze-icons/mime-types">:/mime-types/ (rrze-icons/mime-types)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/mime-types/" Directory: "rrze-icons/mime-types"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-slide-audio.png" alt="rrze-icons/mime-types/media-slide-audio.svg"/></td><td width="400">:/mime-types/media-slide-audio.svg</td><td width="400">rrze-icons/mime-types/media-slide-audio.svg</td><td width="200">media-slide-audio</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/audio-mp3.png" alt="rrze-icons/mime-types/audio-mp3.svg"/></td><td width="400">:/mime-types/audio-mp3.svg</td><td width="400">rrze-icons/mime-types/audio-mp3.svg</td><td width="200">audio-mp3</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-audio-itunes.png" alt="rrze-icons/mime-types/media-audio-itunes.svg"/></td><td width="400">:/mime-types/media-audio-itunes.svg</td><td width="400">rrze-icons/mime-types/media-audio-itunes.svg</td><td width="200">media-audio-itunes</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/office-ms-word.png" alt="rrze-icons/mime-types/office-ms-word.svg"/></td><td width="400">:/mime-types/office-ms-word.svg</td><td width="400">rrze-icons/mime-types/office-ms-word.svg</td><td width="200">office-ms-word</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/office-ms-excel.png" alt="rrze-icons/mime-types/office-ms-excel.svg"/></td><td width="400">:/mime-types/office-ms-excel.svg</td><td width="400">rrze-icons/mime-types/office-ms-excel.svg</td><td width="200">office-ms-excel</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-video-film.png" alt="rrze-icons/mime-types/media-video-film.svg"/></td><td width="400">:/mime-types/media-video-film.svg</td><td width="400">rrze-icons/mime-types/media-video-film.svg</td><td width="200">media-video-film</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-audio-itunes-u.png" alt="rrze-icons/mime-types/media-audio-itunes-u.svg"/></td><td width="400">:/mime-types/media-audio-itunes-u.svg</td><td width="400">rrze-icons/mime-types/media-audio-itunes-u.svg</td><td width="200">media-audio-itunes-u</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-movie.png" alt="rrze-icons/mime-types/media-movie.svg"/></td><td width="400">:/mime-types/media-movie.svg</td><td width="400">rrze-icons/mime-types/media-movie.svg</td><td width="200">media-movie</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/video-mov.png" alt="rrze-icons/mime-types/video-mov.svg"/></td><td width="400">:/mime-types/video-mov.svg</td><td width="400">rrze-icons/mime-types/video-mov.svg</td><td width="200">video-mov</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/document-pdf.png" alt="rrze-icons/mime-types/document-pdf.svg"/></td><td width="400">:/mime-types/document-pdf.svg</td><td width="400">rrze-icons/mime-types/document-pdf.svg</td><td width="200">document-pdf</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-movie-audio.png" alt="rrze-icons/mime-types/media-movie-audio.svg"/></td><td width="400">:/mime-types/media-movie-audio.svg</td><td width="400">rrze-icons/mime-types/media-movie-audio.svg</td><td width="200">media-movie-audio</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-audio-visual-slide.png" alt="rrze-icons/mime-types/media-audio-visual-slide.svg"/></td><td width="400">:/mime-types/media-audio-visual-slide.svg</td><td width="400">rrze-icons/mime-types/media-audio-visual-slide.svg</td><td width="200">media-audio-visual-slide</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/text-csv-text.png" alt="rrze-icons/mime-types/text-csv-text.svg"/></td><td width="400">:/mime-types/text-csv-text.svg</td><td width="400">rrze-icons/mime-types/text-csv-text.svg</td><td width="200">text-csv-text</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/audio-mp4.png" alt="rrze-icons/mime-types/audio-mp4.svg"/></td><td width="400">:/mime-types/audio-mp4.svg</td><td width="400">rrze-icons/mime-types/audio-mp4.svg</td><td width="200">audio-mp4</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/video-m4v.png" alt="rrze-icons/mime-types/video-m4v.svg"/></td><td width="400">:/mime-types/video-m4v.svg</td><td width="400">rrze-icons/mime-types/video-m4v.svg</td><td width="200">video-m4v</td></tr>
-</table>
-<h2><a name="rrze-icons/status">:/status/ (rrze-icons/status)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/status/" Directory: "rrze-icons/status"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/true.png" alt="rrze-icons/status/true.svg"/></td><td width="400">:/status/true.svg</td><td width="400">rrze-icons/status/true.svg</td><td width="200">true</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/available.png" alt="rrze-icons/status/available.svg"/></td><td width="400">:/status/available.svg</td><td width="400">rrze-icons/status/available.svg</td><td width="200">available</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/maintenance-time.png" alt="rrze-icons/status/maintenance-time.svg"/></td><td width="400">:/status/maintenance-time.svg</td><td width="400">rrze-icons/status/maintenance-time.svg</td><td width="200">maintenance-time</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/hourglass.png" alt="rrze-icons/status/hourglass.svg"/></td><td width="400">:/status/hourglass.svg</td><td width="400">rrze-icons/status/hourglass.svg</td><td width="200">hourglass</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/temporarily-not-available.png" alt="rrze-icons/status/temporarily-not-available.svg"/></td><td width="400">:/status/temporarily-not-available.svg</td><td width="400">rrze-icons/status/temporarily-not-available.svg</td><td width="200">temporarily-not-available</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/true-orange.png" alt="rrze-icons/status/true-orange.svg"/></td><td width="400">:/status/true-orange.svg</td><td width="400">rrze-icons/status/true-orange.svg</td><td width="200">true-orange</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/synchronized.png" alt="rrze-icons/status/synchronized.svg"/></td><td width="400">:/status/synchronized.svg</td><td width="400">rrze-icons/status/synchronized.svg</td><td width="200">synchronized</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-yellow-mail.png" alt="rrze-icons/status/flag-yellow-mail.svg"/></td><td width="400">:/status/flag-yellow-mail.svg</td><td width="400">rrze-icons/status/flag-yellow-mail.svg</td><td width="200">flag-yellow-mail</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-yellow-clock.png" alt="rrze-icons/status/flag-yellow-clock.svg"/></td><td width="400">:/status/flag-yellow-clock.svg</td><td width="400">rrze-icons/status/flag-yellow-clock.svg</td><td width="200">flag-yellow-clock</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/temporarily-not-available-clock.png" alt="rrze-icons/status/temporarily-not-available-clock.svg"/></td><td width="400">:/status/temporarily-not-available-clock.svg</td><td width="400">rrze-icons/status/temporarily-not-available-clock.svg</td><td width="200">temporarily-not-available-clock</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/false.png" alt="rrze-icons/status/false.svg"/></td><td width="400">:/status/false.svg</td><td width="400">rrze-icons/status/false.svg</td><td width="200">false</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/not-synchronized.png" alt="rrze-icons/status/not-synchronized.svg"/></td><td width="400">:/status/not-synchronized.svg</td><td width="400">rrze-icons/status/not-synchronized.svg</td><td width="200">not-synchronized</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/exclamation-mark.png" alt="rrze-icons/status/exclamation-mark.svg"/></td><td width="400">:/status/exclamation-mark.svg</td><td width="400">rrze-icons/status/exclamation-mark.svg</td><td width="200">exclamation-mark</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-green-mail.png" alt="rrze-icons/status/flag-green-mail.svg"/></td><td width="400">:/status/flag-green-mail.svg</td><td width="400">rrze-icons/status/flag-green-mail.svg</td><td width="200">flag-green-mail</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/expired.png" alt="rrze-icons/status/expired.svg"/></td><td width="400">:/status/expired.svg</td><td width="400">rrze-icons/status/expired.svg</td><td width="200">expired</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/error.png" alt="rrze-icons/status/error.svg"/></td><td width="400">:/status/error.svg</td><td width="400">rrze-icons/status/error.svg</td><td width="200">error</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/awaiting-plus.png" alt="rrze-icons/status/awaiting-plus.svg"/></td><td width="400">:/status/awaiting-plus.svg</td><td width="400">rrze-icons/status/awaiting-plus.svg</td><td width="200">awaiting-plus</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-green-clock.png" alt="rrze-icons/status/flag-green-clock.svg"/></td><td width="400">:/status/flag-green-clock.svg</td><td width="400">rrze-icons/status/flag-green-clock.svg</td><td width="200">flag-green-clock</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-red-mail.png" alt="rrze-icons/status/flag-red-mail.svg"/></td><td width="400">:/status/flag-red-mail.svg</td><td width="400">rrze-icons/status/flag-red-mail.svg</td><td width="200">flag-red-mail</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/male.png" alt="rrze-icons/status/male.svg"/></td><td width="400">:/status/male.svg</td><td width="400">rrze-icons/status/male.svg</td><td width="200">male</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-red-clock.png" alt="rrze-icons/status/flag-red-clock.svg"/></td><td width="400">:/status/flag-red-clock.svg</td><td width="400">rrze-icons/status/flag-red-clock.svg</td><td width="200">flag-red-clock</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-yellow.png" alt="rrze-icons/status/flag-yellow.svg"/></td><td width="400">:/status/flag-yellow.svg</td><td width="400">rrze-icons/status/flag-yellow.svg</td><td width="200">flag-yellow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/unlocked.png" alt="rrze-icons/status/unlocked.svg"/></td><td width="400">:/status/unlocked.svg</td><td width="400">rrze-icons/status/unlocked.svg</td><td width="200">unlocked</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/warning.png" alt="rrze-icons/status/warning.svg"/></td><td width="400">:/status/warning.svg</td><td width="400">rrze-icons/status/warning.svg</td><td width="200">warning</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/not-known.png" alt="rrze-icons/status/not-known.svg"/></td><td width="400">:/status/not-known.svg</td><td width="400">rrze-icons/status/not-known.svg</td><td width="200">not-known</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/not-available.png" alt="rrze-icons/status/not-available.svg"/></td><td width="400">:/status/not-available.svg</td><td width="400">rrze-icons/status/not-available.svg</td><td width="200">not-available</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/binational.png" alt="rrze-icons/status/binational.svg"/></td><td width="400">:/status/binational.svg</td><td width="400">rrze-icons/status/binational.svg</td><td width="200">binational</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-red.png" alt="rrze-icons/status/flag-red.svg"/></td><td width="400">:/status/flag-red.svg</td><td width="400">rrze-icons/status/flag-red.svg</td><td width="200">flag-red</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-green.png" alt="rrze-icons/status/flag-green.svg"/></td><td width="400">:/status/flag-green.svg</td><td width="400">rrze-icons/status/flag-green.svg</td><td width="200">flag-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/female.png" alt="rrze-icons/status/female.svg"/></td><td width="400">:/status/female.svg</td><td width="400">rrze-icons/status/female.svg</td><td width="200">female</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/awaiting.png" alt="rrze-icons/status/awaiting.svg"/></td><td width="400">:/status/awaiting.svg</td><td width="400">rrze-icons/status/awaiting.svg</td><td width="200">awaiting</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/important.png" alt="rrze-icons/status/important.svg"/></td><td width="400">:/status/important.svg</td><td width="400">rrze-icons/status/important.svg</td><td width="200">important</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/not-specified.png" alt="rrze-icons/status/not-specified.svg"/></td><td width="400">:/status/not-specified.svg</td><td width="400">rrze-icons/status/not-specified.svg</td><td width="200">not-specified</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/switch-course-book-grey.png" alt="rrze-icons/actions/switch-course-book-grey.svg"/></td><td width="400">:/actions/switch-course-book-grey.svg</td><td width="400">rrze-icons/actions/switch-course-book-grey.svg</td><td width="200">switch-course-book-grey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/switch-course-book.png" alt="rrze-icons/actions/switch-course-book.svg"/></td><td width="400">:/actions/switch-course-book.svg</td><td width="400">rrze-icons/actions/switch-course-book.svg</td><td width="200">switch-course-book</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/switch-course-grey.png" alt="rrze-icons/actions/switch-course-grey.svg"/></td><td width="400">:/actions/switch-course-grey.svg</td><td width="400">rrze-icons/actions/switch-course-grey.svg</td><td width="200">switch-course-grey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/switch-course.png" alt="rrze-icons/actions/switch-course.svg"/></td><td width="400">:/actions/switch-course.svg</td><td width="400">rrze-icons/actions/switch-course.svg</td><td width="200">switch-course</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/transfer-down_up.png" alt="rrze-icons/actions/transfer-down_up.svg"/></td><td width="400">:/actions/transfer-down_up.svg</td><td width="400">rrze-icons/actions/transfer-down_up.svg</td><td width="200">transfer-down_up</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/transfer-left_right.png" alt="rrze-icons/actions/transfer-left_right.svg"/></td><td width="400">:/actions/transfer-left_right.svg</td><td width="400">rrze-icons/actions/transfer-left_right.svg</td><td width="200">transfer-left_right</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/transfer-right_left.png" alt="rrze-icons/actions/transfer-right_left.svg"/></td><td width="400">:/actions/transfer-right_left.svg</td><td width="400">rrze-icons/actions/transfer-right_left.svg</td><td width="200">transfer-right_left</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/transfer-up_down.png" alt="rrze-icons/actions/transfer-up_down.svg"/></td><td width="400">:/actions/transfer-up_down.svg</td><td width="400">rrze-icons/actions/transfer-up_down.svg</td><td width="200">transfer-up_down</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/up-grey.png" alt="rrze-icons/actions/up-grey.svg"/></td><td width="400">:/actions/up-grey.svg</td><td width="400">rrze-icons/actions/up-grey.svg</td><td width="200">up-grey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/up.png" alt="rrze-icons/actions/up.svg"/></td><td width="400">:/actions/up.svg</td><td width="400">rrze-icons/actions/up.svg</td><td width="200">up</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/upload.png" alt="rrze-icons/actions/upload.svg"/></td><td width="400">:/actions/upload.svg</td><td width="400">rrze-icons/actions/upload.svg</td><td width="200">upload</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/view.png" alt="rrze-icons/actions/view.svg"/></td><td width="400">:/actions/view.svg</td><td width="400">rrze-icons/actions/view.svg</td><td width="200">view</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/workflow.png" alt="rrze-icons/actions/workflow.svg"/></td><td width="400">:/actions/workflow.svg</td><td width="400">rrze-icons/actions/workflow.svg</td><td width="200">workflow</td></tr>
 </table>
 <h2><a name="rrze-icons/categories">:/categories/ (rrze-icons/categories)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/categories/" Directory: "rrze-icons/categories"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/book.png" alt="rrze-icons/categories/book.svg"/></td><td width="400">:/categories/book.svg</td><td width="400">rrze-icons/categories/book.svg</td><td width="200">book</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-helpdesk.png" alt="rrze-icons/categories/user-helpdesk.svg"/></td><td width="400">:/categories/user-helpdesk.svg</td><td width="400">rrze-icons/categories/user-helpdesk.svg</td><td width="200">user-helpdesk</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-other.png" alt="rrze-icons/categories/user-other.svg"/></td><td width="400">:/categories/user-other.svg</td><td width="400">rrze-icons/categories/user-other.svg</td><td width="200">user-other</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-phd-group.png" alt="rrze-icons/categories/user-phd-group.svg"/></td><td width="400">:/categories/user-phd-group.svg</td><td width="400">rrze-icons/categories/user-phd-group.svg</td><td width="200">user-phd-group</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-examiner-group.png" alt="rrze-icons/categories/user-examiner-group.svg"/></td><td width="400">:/categories/user-examiner-group.svg</td><td width="400">rrze-icons/categories/user-examiner-group.svg</td><td width="200">user-examiner-group</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-other-new.png" alt="rrze-icons/categories/user-other-new.svg"/></td><td width="400">:/categories/user-other-new.svg</td><td width="400">rrze-icons/categories/user-other-new.svg</td><td width="200">user-other-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/affiliation-guest.png" alt="rrze-icons/categories/affiliation-guest.svg"/></td><td width="400">:/categories/affiliation-guest.svg</td><td width="400">rrze-icons/categories/affiliation-guest.svg</td><td width="200">affiliation-guest</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-partner.png" alt="rrze-icons/categories/user-partner.svg"/></td><td width="400">:/categories/user-partner.svg</td><td width="400">rrze-icons/categories/user-partner.svg</td><td width="200">user-partner</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-customer.png" alt="rrze-icons/categories/user-customer.svg"/></td><td width="400">:/categories/user-customer.svg</td><td width="400">rrze-icons/categories/user-customer.svg</td><td width="200">user-customer</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/mood-level-green.png" alt="rrze-icons/categories/mood-level-green.svg"/></td><td width="400">:/categories/mood-level-green.svg</td><td width="400">rrze-icons/categories/mood-level-green.svg</td><td width="200">mood-level-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-other-female.png" alt="rrze-icons/categories/user-other-female.svg"/></td><td width="400">:/categories/user-other-female.svg</td><td width="400">rrze-icons/categories/user-other-female.svg</td><td width="200">user-other-female</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-other-business.png" alt="rrze-icons/categories/user-other-business.svg"/></td><td width="400">:/categories/user-other-business.svg</td><td width="400">rrze-icons/categories/user-other-business.svg</td><td width="200">user-other-business</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-student-assistant.png" alt="rrze-icons/categories/user-student-assistant.svg"/></td><td width="400">:/categories/user-student-assistant.svg</td><td width="400">rrze-icons/categories/user-student-assistant.svg</td><td width="200">user-student-assistant</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-real-person.png" alt="rrze-icons/categories/user-real-person.svg"/></td><td width="400">:/categories/user-real-person.svg</td><td width="400">rrze-icons/categories/user-real-person.svg</td><td width="200">user-real-person</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-disabled.png" alt="rrze-icons/categories/user-disabled.svg"/></td><td width="400">:/categories/user-disabled.svg</td><td width="400">rrze-icons/categories/user-disabled.svg</td><td width="200">user-disabled</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/affiliation-employee.png" alt="rrze-icons/categories/affiliation-employee.svg"/></td><td width="400">:/categories/affiliation-employee.svg</td><td width="400">rrze-icons/categories/affiliation-employee.svg</td><td width="200">affiliation-employee</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/alumni-group.png" alt="rrze-icons/categories/alumni-group.svg"/></td><td width="400">:/categories/alumni-group.svg</td><td width="400">rrze-icons/categories/alumni-group.svg</td><td width="200">alumni-group</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-expert.png" alt="rrze-icons/categories/user-expert.svg"/></td><td width="400">:/categories/user-expert.svg</td><td width="400">rrze-icons/categories/user-expert.svg</td><td width="200">user-expert</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/affiliation-guest.png" alt="rrze-icons/categories/affiliation-guest.svg"/></td><td width="400">:/categories/affiliation-guest.svg</td><td width="400">rrze-icons/categories/affiliation-guest.svg</td><td width="200">affiliation-guest</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/affiliation-student.png" alt="rrze-icons/categories/affiliation-student.svg"/></td><td width="400">:/categories/affiliation-student.svg</td><td width="400">rrze-icons/categories/affiliation-student.svg</td><td width="200">affiliation-student</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/mood-level-yellow.png" alt="rrze-icons/categories/mood-level-yellow.svg"/></td><td width="400">:/categories/mood-level-yellow.svg</td><td width="400">rrze-icons/categories/mood-level-yellow.svg</td><td width="200">mood-level-yellow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-enrolee.png" alt="rrze-icons/categories/user-enrolee.svg"/></td><td width="400">:/categories/user-enrolee.svg</td><td width="400">rrze-icons/categories/user-enrolee.svg</td><td width="200">user-enrolee</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-library.png" alt="rrze-icons/categories/user-library.svg"/></td><td width="400">:/categories/user-library.svg</td><td width="400">rrze-icons/categories/user-library.svg</td><td width="200">user-library</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-employee.png" alt="rrze-icons/categories/user-employee.svg"/></td><td width="400">:/categories/user-employee.svg</td><td width="400">rrze-icons/categories/user-employee.svg</td><td width="200">user-employee</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-admin-gear.png" alt="rrze-icons/categories/user-admin-gear.svg"/></td><td width="400">:/categories/user-admin-gear.svg</td><td width="400">rrze-icons/categories/user-admin-gear.svg</td><td width="200">user-admin-gear</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-business.png" alt="rrze-icons/categories/user-business.svg"/></td><td width="400">:/categories/user-business.svg</td><td width="400">rrze-icons/categories/user-business.svg</td><td width="200">user-business</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/mood-level-red.png" alt="rrze-icons/categories/mood-level-red.svg"/></td><td width="400">:/categories/mood-level-red.svg</td><td width="400">rrze-icons/categories/mood-level-red.svg</td><td width="200">mood-level-red</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-admin.png" alt="rrze-icons/categories/user-admin.svg"/></td><td width="400">:/categories/user-admin.svg</td><td width="400">rrze-icons/categories/user-admin.svg</td><td width="200">user-admin</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/alumni-group.png" alt="rrze-icons/categories/alumni-group.svg"/></td><td width="400">:/categories/alumni-group.svg</td><td width="400">rrze-icons/categories/alumni-group.svg</td><td width="200">alumni-group</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/book-marks.png" alt="rrze-icons/categories/book-marks.svg"/></td><td width="400">:/categories/book-marks.svg</td><td width="400">rrze-icons/categories/book-marks.svg</td><td width="200">book-marks</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-phd.png" alt="rrze-icons/categories/user-phd.svg"/></td><td width="400">:/categories/user-phd.svg</td><td width="400">rrze-icons/categories/user-phd.svg</td><td width="200">user-phd</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/book.png" alt="rrze-icons/categories/book.svg"/></td><td width="400">:/categories/book.svg</td><td width="400">rrze-icons/categories/book.svg</td><td width="200">book</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/bookmark.png" alt="rrze-icons/categories/bookmark.svg"/></td><td width="400">:/categories/bookmark.svg</td><td width="400">rrze-icons/categories/bookmark.svg</td><td width="200">bookmark</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-unknown.png" alt="rrze-icons/categories/user-unknown.svg"/></td><td width="400">:/categories/user-unknown.svg</td><td width="400">rrze-icons/categories/user-unknown.svg</td><td width="200">user-unknown</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-manager.png" alt="rrze-icons/categories/user-manager.svg"/></td><td width="400">:/categories/user-manager.svg</td><td width="400">rrze-icons/categories/user-manager.svg</td><td width="200">user-manager</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-group.png" alt="rrze-icons/categories/user-group.svg"/></td><td width="400">:/categories/user-group.svg</td><td width="400">rrze-icons/categories/user-group.svg</td><td width="200">user-group</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-examiner.png" alt="rrze-icons/categories/user-examiner.svg"/></td><td width="400">:/categories/user-examiner.svg</td><td width="400">rrze-icons/categories/user-examiner.svg</td><td width="200">user-examiner</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-student.png" alt="rrze-icons/categories/user-student.svg"/></td><td width="400">:/categories/user-student.svg</td><td width="400">rrze-icons/categories/user-student.svg</td><td width="200">user-student</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-endcustomer.png" alt="rrze-icons/categories/user-endcustomer.svg"/></td><td width="400">:/categories/user-endcustomer.svg</td><td width="400">rrze-icons/categories/user-endcustomer.svg</td><td width="200">user-endcustomer</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/icon-inspector.png" alt="rrze-icons/categories/icon-inspector.svg"/></td><td width="400">:/categories/icon-inspector.svg</td><td width="400">rrze-icons/categories/icon-inspector.svg</td><td width="200">icon-inspector</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/magnifying-glass.png" alt="rrze-icons/categories/magnifying-glass.svg"/></td><td width="400">:/categories/magnifying-glass.svg</td><td width="400">rrze-icons/categories/magnifying-glass.svg</td><td width="200">magnifying-glass</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/mood-level-green.png" alt="rrze-icons/categories/mood-level-green.svg"/></td><td width="400">:/categories/mood-level-green.svg</td><td width="400">rrze-icons/categories/mood-level-green.svg</td><td width="200">mood-level-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/mood-level-red.png" alt="rrze-icons/categories/mood-level-red.svg"/></td><td width="400">:/categories/mood-level-red.svg</td><td width="400">rrze-icons/categories/mood-level-red.svg</td><td width="200">mood-level-red</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/mood-level-yellow.png" alt="rrze-icons/categories/mood-level-yellow.svg"/></td><td width="400">:/categories/mood-level-yellow.svg</td><td width="400">rrze-icons/categories/mood-level-yellow.svg</td><td width="200">mood-level-yellow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-admin-gear.png" alt="rrze-icons/categories/user-admin-gear.svg"/></td><td width="400">:/categories/user-admin-gear.svg</td><td width="400">rrze-icons/categories/user-admin-gear.svg</td><td width="200">user-admin-gear</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-admin.png" alt="rrze-icons/categories/user-admin.svg"/></td><td width="400">:/categories/user-admin.svg</td><td width="400">rrze-icons/categories/user-admin.svg</td><td width="200">user-admin</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-business.png" alt="rrze-icons/categories/user-business.svg"/></td><td width="400">:/categories/user-business.svg</td><td width="400">rrze-icons/categories/user-business.svg</td><td width="200">user-business</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-customer.png" alt="rrze-icons/categories/user-customer.svg"/></td><td width="400">:/categories/user-customer.svg</td><td width="400">rrze-icons/categories/user-customer.svg</td><td width="200">user-customer</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-digital-person.png" alt="rrze-icons/categories/user-digital-person.svg"/></td><td width="400">:/categories/user-digital-person.svg</td><td width="400">rrze-icons/categories/user-digital-person.svg</td><td width="200">user-digital-person</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/icon-inspector.png" alt="rrze-icons/categories/icon-inspector.svg"/></td><td width="400">:/categories/icon-inspector.svg</td><td width="400">rrze-icons/categories/icon-inspector.svg</td><td width="200">icon-inspector</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-disabled.png" alt="rrze-icons/categories/user-disabled.svg"/></td><td width="400">:/categories/user-disabled.svg</td><td width="400">rrze-icons/categories/user-disabled.svg</td><td width="200">user-disabled</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-employee.png" alt="rrze-icons/categories/user-employee.svg"/></td><td width="400">:/categories/user-employee.svg</td><td width="400">rrze-icons/categories/user-employee.svg</td><td width="200">user-employee</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-endcustomer.png" alt="rrze-icons/categories/user-endcustomer.svg"/></td><td width="400">:/categories/user-endcustomer.svg</td><td width="400">rrze-icons/categories/user-endcustomer.svg</td><td width="200">user-endcustomer</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-enrolee.png" alt="rrze-icons/categories/user-enrolee.svg"/></td><td width="400">:/categories/user-enrolee.svg</td><td width="400">rrze-icons/categories/user-enrolee.svg</td><td width="200">user-enrolee</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-examiner-group.png" alt="rrze-icons/categories/user-examiner-group.svg"/></td><td width="400">:/categories/user-examiner-group.svg</td><td width="400">rrze-icons/categories/user-examiner-group.svg</td><td width="200">user-examiner-group</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-examiner.png" alt="rrze-icons/categories/user-examiner.svg"/></td><td width="400">:/categories/user-examiner.svg</td><td width="400">rrze-icons/categories/user-examiner.svg</td><td width="200">user-examiner</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-expert.png" alt="rrze-icons/categories/user-expert.svg"/></td><td width="400">:/categories/user-expert.svg</td><td width="400">rrze-icons/categories/user-expert.svg</td><td width="200">user-expert</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-group.png" alt="rrze-icons/categories/user-group.svg"/></td><td width="400">:/categories/user-group.svg</td><td width="400">rrze-icons/categories/user-group.svg</td><td width="200">user-group</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-helpdesk-faq.png" alt="rrze-icons/categories/user-helpdesk-faq.svg"/></td><td width="400">:/categories/user-helpdesk-faq.svg</td><td width="400">rrze-icons/categories/user-helpdesk-faq.svg</td><td width="200">user-helpdesk-faq</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-helpdesk.png" alt="rrze-icons/categories/user-helpdesk.svg"/></td><td width="400">:/categories/user-helpdesk.svg</td><td width="400">rrze-icons/categories/user-helpdesk.svg</td><td width="200">user-helpdesk</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-library.png" alt="rrze-icons/categories/user-library.svg"/></td><td width="400">:/categories/user-library.svg</td><td width="400">rrze-icons/categories/user-library.svg</td><td width="200">user-library</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-manager.png" alt="rrze-icons/categories/user-manager.svg"/></td><td width="400">:/categories/user-manager.svg</td><td width="400">rrze-icons/categories/user-manager.svg</td><td width="200">user-manager</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-other-business.png" alt="rrze-icons/categories/user-other-business.svg"/></td><td width="400">:/categories/user-other-business.svg</td><td width="400">rrze-icons/categories/user-other-business.svg</td><td width="200">user-other-business</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-other-female.png" alt="rrze-icons/categories/user-other-female.svg"/></td><td width="400">:/categories/user-other-female.svg</td><td width="400">rrze-icons/categories/user-other-female.svg</td><td width="200">user-other-female</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-other-new.png" alt="rrze-icons/categories/user-other-new.svg"/></td><td width="400">:/categories/user-other-new.svg</td><td width="400">rrze-icons/categories/user-other-new.svg</td><td width="200">user-other-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-other.png" alt="rrze-icons/categories/user-other.svg"/></td><td width="400">:/categories/user-other.svg</td><td width="400">rrze-icons/categories/user-other.svg</td><td width="200">user-other</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-partner.png" alt="rrze-icons/categories/user-partner.svg"/></td><td width="400">:/categories/user-partner.svg</td><td width="400">rrze-icons/categories/user-partner.svg</td><td width="200">user-partner</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-phd-group.png" alt="rrze-icons/categories/user-phd-group.svg"/></td><td width="400">:/categories/user-phd-group.svg</td><td width="400">rrze-icons/categories/user-phd-group.svg</td><td width="200">user-phd-group</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-phd.png" alt="rrze-icons/categories/user-phd.svg"/></td><td width="400">:/categories/user-phd.svg</td><td width="400">rrze-icons/categories/user-phd.svg</td><td width="200">user-phd</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-real-person.png" alt="rrze-icons/categories/user-real-person.svg"/></td><td width="400">:/categories/user-real-person.svg</td><td width="400">rrze-icons/categories/user-real-person.svg</td><td width="200">user-real-person</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-student-assistant.png" alt="rrze-icons/categories/user-student-assistant.svg"/></td><td width="400">:/categories/user-student-assistant.svg</td><td width="400">rrze-icons/categories/user-student-assistant.svg</td><td width="200">user-student-assistant</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-student.png" alt="rrze-icons/categories/user-student.svg"/></td><td width="400">:/categories/user-student.svg</td><td width="400">rrze-icons/categories/user-student.svg</td><td width="200">user-student</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-unknown.png" alt="rrze-icons/categories/user-unknown.svg"/></td><td width="400">:/categories/user-unknown.svg</td><td width="400">rrze-icons/categories/user-unknown.svg</td><td width="200">user-unknown</td></tr>
 </table>
-<h2><a name="tango-icons/status">:/status/ (tango-icons/status)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/status/" Directory: "tango-icons/status"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-few-clouds.png" alt="tango-icons/status/weather-few-clouds.svg"/></td><td width="400">:/status/weather-few-clouds.svg</td><td width="400">tango-icons/status/weather-few-clouds.svg</td><td width="200">weather-few-clouds</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/user-trash-full.png" alt="tango-icons/status/user-trash-full.svg"/></td><td width="400">:/status/user-trash-full.svg</td><td width="400">tango-icons/status/user-trash-full.svg</td><td width="200">user-trash-full</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/mail-attachment.png" alt="tango-icons/status/mail-attachment.svg"/></td><td width="400">:/status/mail-attachment.svg</td><td width="400">tango-icons/status/mail-attachment.svg</td><td width="200">mail-attachment</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-transmit.png" alt="tango-icons/status/network-transmit.svg"/></td><td width="400">:/status/network-transmit.svg</td><td width="400">tango-icons/status/network-transmit.svg</td><td width="200">network-transmit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-overcast.png" alt="tango-icons/status/weather-overcast.svg"/></td><td width="400">:/status/weather-overcast.svg</td><td width="400">tango-icons/status/weather-overcast.svg</td><td width="200">weather-overcast</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-transmit-receive.png" alt="tango-icons/status/network-transmit-receive.svg"/></td><td width="400">:/status/network-transmit-receive.svg</td><td width="400">tango-icons/status/network-transmit-receive.svg</td><td width="200">network-transmit-receive</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/image-missing.png" alt="tango-icons/status/image-missing.svg"/></td><td width="400">:/status/image-missing.svg</td><td width="400">tango-icons/status/image-missing.svg</td><td width="200">image-missing</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/folder-drag-accept.png" alt="tango-icons/status/folder-drag-accept.svg"/></td><td width="400">:/status/folder-drag-accept.svg</td><td width="400">tango-icons/status/folder-drag-accept.svg</td><td width="200">folder-drag-accept</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-clear.png" alt="tango-icons/status/weather-clear.svg"/></td><td width="400">:/status/weather-clear.svg</td><td width="400">tango-icons/status/weather-clear.svg</td><td width="200">weather-clear</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/audio-volume-muted.png" alt="tango-icons/status/audio-volume-muted.svg"/></td><td width="400">:/status/audio-volume-muted.svg</td><td width="400">tango-icons/status/audio-volume-muted.svg</td><td width="200">audio-volume-muted</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/dialog-information.png" alt="tango-icons/status/dialog-information.svg"/></td><td width="400">:/status/dialog-information.svg</td><td width="400">tango-icons/status/dialog-information.svg</td><td width="200">dialog-information</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-showers-scattered.png" alt="tango-icons/status/weather-showers-scattered.svg"/></td><td width="400">:/status/weather-showers-scattered.svg</td><td width="400">tango-icons/status/weather-showers-scattered.svg</td><td width="200">weather-showers-scattered</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/image-loading.png" alt="tango-icons/status/image-loading.svg"/></td><td width="400">:/status/image-loading.svg</td><td width="400">tango-icons/status/image-loading.svg</td><td width="200">image-loading</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-clear-night.png" alt="tango-icons/status/weather-clear-night.svg"/></td><td width="400">:/status/weather-clear-night.svg</td><td width="400">tango-icons/status/weather-clear-night.svg</td><td width="200">weather-clear-night</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-storm.png" alt="tango-icons/status/weather-storm.svg"/></td><td width="400">:/status/weather-storm.svg</td><td width="400">tango-icons/status/weather-storm.svg</td><td width="200">weather-storm</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/audio-volume-medium.png" alt="tango-icons/status/audio-volume-medium.svg"/></td><td width="400">:/status/audio-volume-medium.svg</td><td width="400">tango-icons/status/audio-volume-medium.svg</td><td width="200">audio-volume-medium</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-snow.png" alt="tango-icons/status/weather-snow.svg"/></td><td width="400">:/status/weather-snow.svg</td><td width="400">tango-icons/status/weather-snow.svg</td><td width="200">weather-snow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-error.png" alt="tango-icons/status/network-error.svg"/></td><td width="400">:/status/network-error.svg</td><td width="400">tango-icons/status/network-error.svg</td><td width="200">network-error</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/folder-open.png" alt="tango-icons/status/folder-open.svg"/></td><td width="400">:/status/folder-open.svg</td><td width="400">tango-icons/status/folder-open.svg</td><td width="200">folder-open</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/audio-volume-high.png" alt="tango-icons/status/audio-volume-high.svg"/></td><td width="400">:/status/audio-volume-high.svg</td><td width="400">tango-icons/status/audio-volume-high.svg</td><td width="200">audio-volume-high</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/dialog-error.png" alt="tango-icons/status/dialog-error.svg"/></td><td width="400">:/status/dialog-error.svg</td><td width="400">tango-icons/status/dialog-error.svg</td><td width="200">dialog-error</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/printer-error.png" alt="tango-icons/status/printer-error.svg"/></td><td width="400">:/status/printer-error.svg</td><td width="400">tango-icons/status/printer-error.svg</td><td width="200">printer-error</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-wireless-encrypted.png" alt="tango-icons/status/network-wireless-encrypted.svg"/></td><td width="400">:/status/network-wireless-encrypted.svg</td><td width="400">tango-icons/status/network-wireless-encrypted.svg</td><td width="200">network-wireless-encrypted</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-idle.png" alt="tango-icons/status/network-idle.svg"/></td><td width="400">:/status/network-idle.svg</td><td width="400">tango-icons/status/network-idle.svg</td><td width="200">network-idle</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/software-update-urgent.png" alt="tango-icons/status/software-update-urgent.svg"/></td><td width="400">:/status/software-update-urgent.svg</td><td width="400">tango-icons/status/software-update-urgent.svg</td><td width="200">software-update-urgent</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-few-clouds-night.png" alt="tango-icons/status/weather-few-clouds-night.svg"/></td><td width="400">:/status/weather-few-clouds-night.svg</td><td width="400">tango-icons/status/weather-few-clouds-night.svg</td><td width="200">weather-few-clouds-night</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/folder-visiting.png" alt="tango-icons/status/folder-visiting.svg"/></td><td width="400">:/status/folder-visiting.svg</td><td width="400">tango-icons/status/folder-visiting.svg</td><td width="200">folder-visiting</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-severe-alert.png" alt="tango-icons/status/weather-severe-alert.svg"/></td><td width="400">:/status/weather-severe-alert.svg</td><td width="400">tango-icons/status/weather-severe-alert.svg</td><td width="200">weather-severe-alert</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-showers.png" alt="tango-icons/status/weather-showers.svg"/></td><td width="400">:/status/weather-showers.svg</td><td width="400">tango-icons/status/weather-showers.svg</td><td width="200">weather-showers</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/software-update-available.png" alt="tango-icons/status/software-update-available.svg"/></td><td width="400">:/status/software-update-available.svg</td><td width="400">tango-icons/status/software-update-available.svg</td><td width="200">software-update-available</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-receive.png" alt="tango-icons/status/network-receive.svg"/></td><td width="400">:/status/network-receive.svg</td><td width="400">tango-icons/status/network-receive.svg</td><td width="200">network-receive</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/battery-caution.png" alt="tango-icons/status/battery-caution.svg"/></td><td width="400">:/status/battery-caution.svg</td><td width="400">tango-icons/status/battery-caution.svg</td><td width="200">battery-caution</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/audio-volume-low.png" alt="tango-icons/status/audio-volume-low.svg"/></td><td width="400">:/status/audio-volume-low.svg</td><td width="400">tango-icons/status/audio-volume-low.svg</td><td width="200">audio-volume-low</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-offline.png" alt="tango-icons/status/network-offline.svg"/></td><td width="400">:/status/network-offline.svg</td><td width="400">tango-icons/status/network-offline.svg</td><td width="200">network-offline</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/dialog-warning.png" alt="tango-icons/status/dialog-warning.svg"/></td><td width="400">:/status/dialog-warning.svg</td><td width="400">tango-icons/status/dialog-warning.svg</td><td width="200">dialog-warning</td></tr>
-</table>
-<h2><a name="tango-icons/actions">:/actions/ (tango-icons/actions)</a></h2>
+<h2><a name="rrze-icons/devices">:/devices/ (rrze-icons/devices)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/actions/" Directory: "tango-icons/actions"</th>
+<th colspan="4">Resource: ":/devices/" Directory: "rrze-icons/devices"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/database-locked.png" alt="rrze-icons/devices/database-locked.svg"/></td><td width="400">:/devices/database-locked.svg</td><td width="400">rrze-icons/devices/database-locked.svg</td><td width="200">database-locked</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/modem.png" alt="rrze-icons/devices/modem.svg"/></td><td width="400">:/devices/modem.svg</td><td width="400">rrze-icons/devices/modem.svg</td><td width="200">modem</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/router.png" alt="rrze-icons/devices/router.svg"/></td><td width="400">:/devices/router.svg</td><td width="400">rrze-icons/devices/router.svg</td><td width="200">router</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-access.png" alt="rrze-icons/devices/server-access.svg"/></td><td width="400">:/devices/server-access.svg</td><td width="400">rrze-icons/devices/server-access.svg</td><td width="200">server-access</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-accounting.png" alt="rrze-icons/devices/server-accounting.svg"/></td><td width="400">:/devices/server-accounting.svg</td><td width="400">rrze-icons/devices/server-accounting.svg</td><td width="200">server-accounting</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-blades.png" alt="rrze-icons/devices/server-blades.svg"/></td><td width="400">:/devices/server-blades.svg</td><td width="400">rrze-icons/devices/server-blades.svg</td><td width="200">server-blades</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-book.png" alt="rrze-icons/devices/server-book.svg"/></td><td width="400">:/devices/server-book.svg</td><td width="400">rrze-icons/devices/server-book.svg</td><td width="200">server-book</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-firebird.png" alt="rrze-icons/devices/server-database-firebird.svg"/></td><td width="400">:/devices/server-database-firebird.svg</td><td width="400">rrze-icons/devices/server-database-firebird.svg</td><td width="200">server-database-firebird</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-green.png" alt="rrze-icons/devices/server-database-green.svg"/></td><td width="400">:/devices/server-database-green.svg</td><td width="400">rrze-icons/devices/server-database-green.svg</td><td width="200">server-database-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-mysql.png" alt="rrze-icons/devices/server-database-mysql.svg"/></td><td width="400">:/devices/server-database-mysql.svg</td><td width="400">rrze-icons/devices/server-database-mysql.svg</td><td width="200">server-database-mysql</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-otrs.png" alt="rrze-icons/devices/server-database-otrs.svg"/></td><td width="400">:/devices/server-database-otrs.svg</td><td width="400">rrze-icons/devices/server-database-otrs.svg</td><td width="200">server-database-otrs</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-postgres.png" alt="rrze-icons/devices/server-database-postgres.svg"/></td><td width="400">:/devices/server-database-postgres.svg</td><td width="400">rrze-icons/devices/server-database-postgres.svg</td><td width="200">server-database-postgres</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-yellow.png" alt="rrze-icons/devices/server-database-yellow.svg"/></td><td width="400">:/devices/server-database-yellow.svg</td><td width="400">rrze-icons/devices/server-database-yellow.svg</td><td width="200">server-database-yellow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database.png" alt="rrze-icons/devices/server-database.svg"/></td><td width="400">:/devices/server-database.svg</td><td width="400">rrze-icons/devices/server-database.svg</td><td width="200">server-database</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-directory-green.png" alt="rrze-icons/devices/server-directory-green.svg"/></td><td width="400">:/devices/server-directory-green.svg</td><td width="400">rrze-icons/devices/server-directory-green.svg</td><td width="200">server-directory-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-directory-yellow.png" alt="rrze-icons/devices/server-directory-yellow.svg"/></td><td width="400">:/devices/server-directory-yellow.svg</td><td width="400">rrze-icons/devices/server-directory-yellow.svg</td><td width="200">server-directory-yellow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-directory.png" alt="rrze-icons/devices/server-directory.svg"/></td><td width="400">:/devices/server-directory.svg</td><td width="400">rrze-icons/devices/server-directory.svg</td><td width="200">server-directory</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-email-relay.png" alt="rrze-icons/devices/server-email-relay.svg"/></td><td width="400">:/devices/server-email-relay.svg</td><td width="400">rrze-icons/devices/server-email-relay.svg</td><td width="200">server-email-relay</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-email.png" alt="rrze-icons/devices/server-email.svg"/></td><td width="400">:/devices/server-email.svg</td><td width="400">rrze-icons/devices/server-email.svg</td><td width="200">server-email</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-file.png" alt="rrze-icons/devices/server-file.svg"/></td><td width="400">:/devices/server-file.svg</td><td width="400">rrze-icons/devices/server-file.svg</td><td width="200">server-file</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-firewall.png" alt="rrze-icons/devices/server-firewall.svg"/></td><td width="400">:/devices/server-firewall.svg</td><td width="400">rrze-icons/devices/server-firewall.svg</td><td width="200">server-firewall</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-green.png" alt="rrze-icons/devices/server-green.svg"/></td><td width="400">:/devices/server-green.svg</td><td width="400">rrze-icons/devices/server-green.svg</td><td width="200">server-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-monitoring.png" alt="rrze-icons/devices/server-monitoring.svg"/></td><td width="400">:/devices/server-monitoring.svg</td><td width="400">rrze-icons/devices/server-monitoring.svg</td><td width="200">server-monitoring</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-multiple.png" alt="rrze-icons/devices/server-multiple.svg"/></td><td width="400">:/devices/server-multiple.svg</td><td width="400">rrze-icons/devices/server-multiple.svg</td><td width="200">server-multiple</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-print.png" alt="rrze-icons/devices/server-print.svg"/></td><td width="400">:/devices/server-print.svg</td><td width="400">rrze-icons/devices/server-print.svg</td><td width="200">server-print</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-radius.png" alt="rrze-icons/devices/server-radius.svg"/></td><td width="400">:/devices/server-radius.svg</td><td width="400">rrze-icons/devices/server-radius.svg</td><td width="200">server-radius</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-red.png" alt="rrze-icons/devices/server-red.svg"/></td><td width="400">:/devices/server-red.svg</td><td width="400">rrze-icons/devices/server-red.svg</td><td width="200">server-red</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-subversion.png" alt="rrze-icons/devices/server-subversion.svg"/></td><td width="400">:/devices/server-subversion.svg</td><td width="400">rrze-icons/devices/server-subversion.svg</td><td width="200">server-subversion</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-user.png" alt="rrze-icons/devices/server-user.svg"/></td><td width="400">:/devices/server-user.svg</td><td width="400">rrze-icons/devices/server-user.svg</td><td width="200">server-user</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-vpn.png" alt="rrze-icons/devices/server-vpn.svg"/></td><td width="400">:/devices/server-vpn.svg</td><td width="400">rrze-icons/devices/server-vpn.svg</td><td width="200">server-vpn</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-web-green.png" alt="rrze-icons/devices/server-web-green.svg"/></td><td width="400">:/devices/server-web-green.svg</td><td width="400">rrze-icons/devices/server-web-green.svg</td><td width="200">server-web-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-web-secure.png" alt="rrze-icons/devices/server-web-secure.svg"/></td><td width="400">:/devices/server-web-secure.svg</td><td width="400">rrze-icons/devices/server-web-secure.svg</td><td width="200">server-web-secure</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-web-yellow.png" alt="rrze-icons/devices/server-web-yellow.svg"/></td><td width="400">:/devices/server-web-yellow.svg</td><td width="400">rrze-icons/devices/server-web-yellow.svg</td><td width="200">server-web-yellow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-web.png" alt="rrze-icons/devices/server-web.svg"/></td><td width="400">:/devices/server-web.svg</td><td width="400">rrze-icons/devices/server-web.svg</td><td width="200">server-web</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-yellow.png" alt="rrze-icons/devices/server-yellow.svg"/></td><td width="400">:/devices/server-yellow.svg</td><td width="400">rrze-icons/devices/server-yellow.svg</td><td width="200">server-yellow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server.png" alt="rrze-icons/devices/server.svg"/></td><td width="400">:/devices/server.svg</td><td width="400">rrze-icons/devices/server.svg</td><td width="200">server</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/switch.png" alt="rrze-icons/devices/switch.svg"/></td><td width="400">:/devices/switch.svg</td><td width="400">rrze-icons/devices/switch.svg</td><td width="200">switch</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/wlan-access-point.png" alt="rrze-icons/devices/wlan-access-point.svg"/></td><td width="400">:/devices/wlan-access-point.svg</td><td width="400">rrze-icons/devices/wlan-access-point.svg</td><td width="200">wlan-access-point</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/wlan-controller.png" alt="rrze-icons/devices/wlan-controller.svg"/></td><td width="400">:/devices/wlan-controller.svg</td><td width="400">rrze-icons/devices/wlan-controller.svg</td><td width="200">wlan-controller</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/workstation.png" alt="rrze-icons/devices/workstation.svg"/></td><td width="400">:/devices/workstation.svg</td><td width="400">rrze-icons/devices/workstation.svg</td><td width="200">workstation</td></tr>
+</table>
+<h2><a name="rrze-icons/emblems">:/emblems/ (rrze-icons/emblems)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/emblems/" Directory: "rrze-icons/emblems"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/account-delete.png" alt="rrze-icons/emblems/account-delete.svg"/></td><td width="400">:/emblems/account-delete.svg</td><td width="400">rrze-icons/emblems/account-delete.svg</td><td width="200">account-delete</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/account-edit.png" alt="rrze-icons/emblems/account-edit.svg"/></td><td width="400">:/emblems/account-edit.svg</td><td width="400">rrze-icons/emblems/account-edit.svg</td><td width="200">account-edit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/account-new.png" alt="rrze-icons/emblems/account-new.svg"/></td><td width="400">:/emblems/account-new.svg</td><td width="400">rrze-icons/emblems/account-new.svg</td><td width="200">account-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/affiliation-abstract.png" alt="rrze-icons/emblems/affiliation-abstract.svg"/></td><td width="400">:/emblems/affiliation-abstract.svg</td><td width="400">rrze-icons/emblems/affiliation-abstract.svg</td><td width="200">affiliation-abstract</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/affiliation.png" alt="rrze-icons/emblems/affiliation.svg"/></td><td width="400">:/emblems/affiliation.svg</td><td width="400">rrze-icons/emblems/affiliation.svg</td><td width="200">affiliation</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/affirmation.png" alt="rrze-icons/emblems/affirmation.svg"/></td><td width="400">:/emblems/affirmation.svg</td><td width="400">rrze-icons/emblems/affirmation.svg</td><td width="200">affirmation</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/all-per-page.png" alt="rrze-icons/emblems/all-per-page.svg"/></td><td width="400">:/emblems/all-per-page.svg</td><td width="400">rrze-icons/emblems/all-per-page.svg</td><td width="200">all-per-page</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/at.png" alt="rrze-icons/emblems/at.svg"/></td><td width="400">:/emblems/at.svg</td><td width="400">rrze-icons/emblems/at.svg</td><td width="200">at</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/audio-itunes-u.png" alt="rrze-icons/emblems/audio-itunes-u.svg"/></td><td width="400">:/emblems/audio-itunes-u.svg</td><td width="400">rrze-icons/emblems/audio-itunes-u.svg</td><td width="200">audio-itunes-u</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/audio-itunes.png" alt="rrze-icons/emblems/audio-itunes.svg"/></td><td width="400">:/emblems/audio-itunes.svg</td><td width="400">rrze-icons/emblems/audio-itunes.svg</td><td width="200">audio-itunes</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/audio-visual-slide.png" alt="rrze-icons/emblems/audio-visual-slide.svg"/></td><td width="400">:/emblems/audio-visual-slide.svg</td><td width="400">rrze-icons/emblems/audio-visual-slide.svg</td><td width="200">audio-visual-slide</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/bridge-stone-delete.png" alt="rrze-icons/emblems/bridge-stone-delete.svg"/></td><td width="400">:/emblems/bridge-stone-delete.svg</td><td width="400">rrze-icons/emblems/bridge-stone-delete.svg</td><td width="200">bridge-stone-delete</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/bridge-stone-new.png" alt="rrze-icons/emblems/bridge-stone-new.svg"/></td><td width="400">:/emblems/bridge-stone-new.svg</td><td width="400">rrze-icons/emblems/bridge-stone-new.svg</td><td width="200">bridge-stone-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/bridge-stone.png" alt="rrze-icons/emblems/bridge-stone.svg"/></td><td width="400">:/emblems/bridge-stone.svg</td><td width="400">rrze-icons/emblems/bridge-stone.svg</td><td width="200">bridge-stone</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-firebird.png" alt="rrze-icons/emblems/database-firebird.svg"/></td><td width="400">:/emblems/database-firebird.svg</td><td width="400">rrze-icons/emblems/database-firebird.svg</td><td width="200">database-firebird</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-mysql.png" alt="rrze-icons/emblems/database-mysql.svg"/></td><td width="400">:/emblems/database-mysql.svg</td><td width="400">rrze-icons/emblems/database-mysql.svg</td><td width="200">database-mysql</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-openldap.png" alt="rrze-icons/emblems/database-openldap.svg"/></td><td width="400">:/emblems/database-openldap.svg</td><td width="400">rrze-icons/emblems/database-openldap.svg</td><td width="200">database-openldap</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-otrs.png" alt="rrze-icons/emblems/database-otrs.svg"/></td><td width="400">:/emblems/database-otrs.svg</td><td width="400">rrze-icons/emblems/database-otrs.svg</td><td width="200">database-otrs</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-postgres.png" alt="rrze-icons/emblems/database-postgres.svg"/></td><td width="400">:/emblems/database-postgres.svg</td><td width="400">rrze-icons/emblems/database-postgres.svg</td><td width="200">database-postgres</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-vcs-subversion.png" alt="rrze-icons/emblems/database-vcs-subversion.svg"/></td><td width="400">:/emblems/database-vcs-subversion.svg</td><td width="400">rrze-icons/emblems/database-vcs-subversion.svg</td><td width="200">database-vcs-subversion</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database.png" alt="rrze-icons/emblems/database.svg"/></td><td width="400">:/emblems/database.svg</td><td width="400">rrze-icons/emblems/database.svg</td><td width="200">database</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-attribute.png" alt="rrze-icons/emblems/directory-attribute.svg"/></td><td width="400">:/emblems/directory-attribute.svg</td><td width="400">rrze-icons/emblems/directory-attribute.svg</td><td width="200">directory-attribute</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-object-class.png" alt="rrze-icons/emblems/directory-object-class.svg"/></td><td width="400">:/emblems/directory-object-class.svg</td><td width="400">rrze-icons/emblems/directory-object-class.svg</td><td width="200">directory-object-class</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-object.png" alt="rrze-icons/emblems/directory-object.svg"/></td><td width="400">:/emblems/directory-object.svg</td><td width="400">rrze-icons/emblems/directory-object.svg</td><td width="200">directory-object</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-schema.png" alt="rrze-icons/emblems/directory-schema.svg"/></td><td width="400">:/emblems/directory-schema.svg</td><td width="400">rrze-icons/emblems/directory-schema.svg</td><td width="200">directory-schema</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-syntax.png" alt="rrze-icons/emblems/directory-syntax.svg"/></td><td width="400">:/emblems/directory-syntax.svg</td><td width="400">rrze-icons/emblems/directory-syntax.svg</td><td width="200">directory-syntax</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory.png" alt="rrze-icons/emblems/directory.svg"/></td><td width="400">:/emblems/directory.svg</td><td width="400">rrze-icons/emblems/directory.svg</td><td width="200">directory</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/doctoral-cap.png" alt="rrze-icons/emblems/doctoral-cap.svg"/></td><td width="400">:/emblems/doctoral-cap.svg</td><td width="400">rrze-icons/emblems/doctoral-cap.svg</td><td width="200">doctoral-cap</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/email.png" alt="rrze-icons/emblems/email.svg"/></td><td width="400">:/emblems/email.svg</td><td width="400">rrze-icons/emblems/email.svg</td><td width="200">email</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/entitlement.png" alt="rrze-icons/emblems/entitlement.svg"/></td><td width="400">:/emblems/entitlement.svg</td><td width="400">rrze-icons/emblems/entitlement.svg</td><td width="200">entitlement</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/export.png" alt="rrze-icons/emblems/export.svg"/></td><td width="400">:/emblems/export.svg</td><td width="400">rrze-icons/emblems/export.svg</td><td width="200">export</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/fifty-per-page.png" alt="rrze-icons/emblems/fifty-per-page.svg"/></td><td width="400">:/emblems/fifty-per-page.svg</td><td width="400">rrze-icons/emblems/fifty-per-page.svg</td><td width="200">fifty-per-page</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/firewall.png" alt="rrze-icons/emblems/firewall.svg"/></td><td width="400">:/emblems/firewall.svg</td><td width="400">rrze-icons/emblems/firewall.svg</td><td width="200">firewall</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/floppy-disc-green.png" alt="rrze-icons/emblems/floppy-disc-green.svg"/></td><td width="400">:/emblems/floppy-disc-green.svg</td><td width="400">rrze-icons/emblems/floppy-disc-green.svg</td><td width="200">floppy-disc-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/folder.png" alt="rrze-icons/emblems/folder.svg"/></td><td width="400">:/emblems/folder.svg</td><td width="400">rrze-icons/emblems/folder.svg</td><td width="200">folder</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/footnote-delete.png" alt="rrze-icons/emblems/footnote-delete.svg"/></td><td width="400">:/emblems/footnote-delete.svg</td><td width="400">rrze-icons/emblems/footnote-delete.svg</td><td width="200">footnote-delete</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/footnote-edit.png" alt="rrze-icons/emblems/footnote-edit.svg"/></td><td width="400">:/emblems/footnote-edit.svg</td><td width="400">rrze-icons/emblems/footnote-edit.svg</td><td width="200">footnote-edit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/footnote-new.png" alt="rrze-icons/emblems/footnote-new.svg"/></td><td width="400">:/emblems/footnote-new.svg</td><td width="400">rrze-icons/emblems/footnote-new.svg</td><td width="200">footnote-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/footnote.png" alt="rrze-icons/emblems/footnote.svg"/></td><td width="400">:/emblems/footnote.svg</td><td width="400">rrze-icons/emblems/footnote.svg</td><td width="200">footnote</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/for-free.png" alt="rrze-icons/emblems/for-free.svg"/></td><td width="400">:/emblems/for-free.svg</td><td width="400">rrze-icons/emblems/for-free.svg</td><td width="200">for-free</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/geo-id.png" alt="rrze-icons/emblems/geo-id.svg"/></td><td width="400">:/emblems/geo-id.svg</td><td width="400">rrze-icons/emblems/geo-id.svg</td><td width="200">geo-id</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/globe.png" alt="rrze-icons/emblems/globe.svg"/></td><td width="400">:/emblems/globe.svg</td><td width="400">rrze-icons/emblems/globe.svg</td><td width="200">globe</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/id.png" alt="rrze-icons/emblems/id.svg"/></td><td width="400">:/emblems/id.svg</td><td width="400">rrze-icons/emblems/id.svg</td><td width="200">id</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/index.png" alt="rrze-icons/emblems/index.svg"/></td><td width="400">:/emblems/index.svg</td><td width="400">rrze-icons/emblems/index.svg</td><td width="200">index</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/information.png" alt="rrze-icons/emblems/information.svg"/></td><td width="400">:/emblems/information.svg</td><td width="400">rrze-icons/emblems/information.svg</td><td width="200">information</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/inspector-hat.png" alt="rrze-icons/emblems/inspector-hat.svg"/></td><td width="400">:/emblems/inspector-hat.svg</td><td width="400">rrze-icons/emblems/inspector-hat.svg</td><td width="200">inspector-hat</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/lock.png" alt="rrze-icons/emblems/lock.svg"/></td><td width="400">:/emblems/lock.svg</td><td width="400">rrze-icons/emblems/lock.svg</td><td width="200">lock</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/mailbox.png" alt="rrze-icons/emblems/mailbox.svg"/></td><td width="400">:/emblems/mailbox.svg</td><td width="400">rrze-icons/emblems/mailbox.svg</td><td width="200">mailbox</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/media-film.png" alt="rrze-icons/emblems/media-film.svg"/></td><td width="400">:/emblems/media-film.svg</td><td width="400">rrze-icons/emblems/media-film.svg</td><td width="200">media-film</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/media-floppy-green.png" alt="rrze-icons/emblems/media-floppy-green.svg"/></td><td width="400">:/emblems/media-floppy-green.svg</td><td width="400">rrze-icons/emblems/media-floppy-green.svg</td><td width="200">media-floppy-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/message-new.png" alt="rrze-icons/emblems/message-new.svg"/></td><td width="400">:/emblems/message-new.svg</td><td width="400">rrze-icons/emblems/message-new.svg</td><td width="200">message-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/money.png" alt="rrze-icons/emblems/money.svg"/></td><td width="400">:/emblems/money.svg</td><td width="400">rrze-icons/emblems/money.svg</td><td width="200">money</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/movie-audio.png" alt="rrze-icons/emblems/movie-audio.svg"/></td><td width="400">:/emblems/movie-audio.svg</td><td width="400">rrze-icons/emblems/movie-audio.svg</td><td width="200">movie-audio</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/network-cloud.png" alt="rrze-icons/emblems/network-cloud.svg"/></td><td width="400">:/emblems/network-cloud.svg</td><td width="400">rrze-icons/emblems/network-cloud.svg</td><td width="200">network-cloud</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/note.png" alt="rrze-icons/emblems/note.svg"/></td><td width="400">:/emblems/note.svg</td><td width="400">rrze-icons/emblems/note.svg</td><td width="200">note</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/video-film.png" alt="rrze-icons/emblems/video-film.svg"/></td><td width="400">:/emblems/video-film.svg</td><td width="400">rrze-icons/emblems/video-film.svg</td><td width="200">video-film</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/office-excel.png" alt="rrze-icons/emblems/office-excel.svg"/></td><td width="400">:/emblems/office-excel.svg</td><td width="400">rrze-icons/emblems/office-excel.svg</td><td width="200">office-excel</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/office-word.png" alt="rrze-icons/emblems/office-word.svg"/></td><td width="400">:/emblems/office-word.svg</td><td width="400">rrze-icons/emblems/office-word.svg</td><td width="200">office-word</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/organisational-unit-tree.png" alt="rrze-icons/emblems/organisational-unit-tree.svg"/></td><td width="400">:/emblems/organisational-unit-tree.svg</td><td width="400">rrze-icons/emblems/organisational-unit-tree.svg</td><td width="200">organisational-unit-tree</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/organizational-unit.png" alt="rrze-icons/emblems/organizational-unit.svg"/></td><td width="400">:/emblems/organizational-unit.svg</td><td width="400">rrze-icons/emblems/organizational-unit.svg</td><td width="200">organizational-unit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/page-25.png" alt="rrze-icons/emblems/page-25.svg"/></td><td width="400">:/emblems/page-25.svg</td><td width="400">rrze-icons/emblems/page-25.svg</td><td width="200">page-25</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/page-50.png" alt="rrze-icons/emblems/page-50.svg"/></td><td width="400">:/emblems/page-50.svg</td><td width="400">rrze-icons/emblems/page-50.svg</td><td width="200">page-50</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/page-all.png" alt="rrze-icons/emblems/page-all.svg"/></td><td width="400">:/emblems/page-all.svg</td><td width="400">rrze-icons/emblems/page-all.svg</td><td width="200">page-all</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/peace-sign.png" alt="rrze-icons/emblems/peace-sign.svg"/></td><td width="400">:/emblems/peace-sign.svg</td><td width="400">rrze-icons/emblems/peace-sign.svg</td><td width="200">peace-sign</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/pen.png" alt="rrze-icons/emblems/pen.svg"/></td><td width="400">:/emblems/pen.svg</td><td width="400">rrze-icons/emblems/pen.svg</td><td width="200">pen</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/phone.png" alt="rrze-icons/emblems/phone.svg"/></td><td width="400">:/emblems/phone.svg</td><td width="400">rrze-icons/emblems/phone.svg</td><td width="200">phone</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/promotion-data.png" alt="rrze-icons/emblems/promotion-data.svg"/></td><td width="400">:/emblems/promotion-data.svg</td><td width="400">rrze-icons/emblems/promotion-data.svg</td><td width="200">promotion-data</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/relay.png" alt="rrze-icons/emblems/relay.svg"/></td><td width="400">:/emblems/relay.svg</td><td width="400">rrze-icons/emblems/relay.svg</td><td width="200">relay</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-delete.png" alt="rrze-icons/emblems/report-delete.svg"/></td><td width="400">:/emblems/report-delete.svg</td><td width="400">rrze-icons/emblems/report-delete.svg</td><td width="200">report-delete</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-edit.png" alt="rrze-icons/emblems/report-edit.svg"/></td><td width="400">:/emblems/report-edit.svg</td><td width="400">rrze-icons/emblems/report-edit.svg</td><td width="200">report-edit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-new.png" alt="rrze-icons/emblems/report-new.svg"/></td><td width="400">:/emblems/report-new.svg</td><td width="400">rrze-icons/emblems/report-new.svg</td><td width="200">report-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-run.png" alt="rrze-icons/emblems/report-run.svg"/></td><td width="400">:/emblems/report-run.svg</td><td width="400">rrze-icons/emblems/report-run.svg</td><td width="200">report-run</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-upload.png" alt="rrze-icons/emblems/report-upload.svg"/></td><td width="400">:/emblems/report-upload.svg</td><td width="400">rrze-icons/emblems/report-upload.svg</td><td width="200">report-upload</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report.png" alt="rrze-icons/emblems/report.svg"/></td><td width="400">:/emblems/report.svg</td><td width="400">rrze-icons/emblems/report.svg</td><td width="200">report</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/rss-feed.png" alt="rrze-icons/emblems/rss-feed.svg"/></td><td width="400">:/emblems/rss-feed.svg</td><td width="400">rrze-icons/emblems/rss-feed.svg</td><td width="200">rss-feed</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/single-sign-on.png" alt="rrze-icons/emblems/single-sign-on.svg"/></td><td width="400">:/emblems/single-sign-on.svg</td><td width="400">rrze-icons/emblems/single-sign-on.svg</td><td width="200">single-sign-on</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/slide-audio.png" alt="rrze-icons/emblems/slide-audio.svg"/></td><td width="400">:/emblems/slide-audio.svg</td><td width="400">rrze-icons/emblems/slide-audio.svg</td><td width="200">slide-audio</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/slide.png" alt="rrze-icons/emblems/slide.svg"/></td><td width="400">:/emblems/slide.svg</td><td width="400">rrze-icons/emblems/slide.svg</td><td width="200">slide</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/statistic.png" alt="rrze-icons/emblems/statistic.svg"/></td><td width="400">:/emblems/statistic.svg</td><td width="400">rrze-icons/emblems/statistic.svg</td><td width="200">statistic</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/structured-program-stay-abroad.png" alt="rrze-icons/emblems/structured-program-stay-abroad.svg"/></td><td width="400">:/emblems/structured-program-stay-abroad.svg</td><td width="400">rrze-icons/emblems/structured-program-stay-abroad.svg</td><td width="200">structured-program-stay-abroad</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/subversion-logo.png" alt="rrze-icons/emblems/subversion-logo.svg"/></td><td width="400">:/emblems/subversion-logo.svg</td><td width="400">rrze-icons/emblems/subversion-logo.svg</td><td width="200">subversion-logo</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/subversion.png" alt="rrze-icons/emblems/subversion.svg"/></td><td width="400">:/emblems/subversion.svg</td><td width="400">rrze-icons/emblems/subversion.svg</td><td width="200">subversion</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/table.png" alt="rrze-icons/emblems/table.svg"/></td><td width="400">:/emblems/table.svg</td><td width="400">rrze-icons/emblems/table.svg</td><td width="200">table</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/task.png" alt="rrze-icons/emblems/task.svg"/></td><td width="400">:/emblems/task.svg</td><td width="400">rrze-icons/emblems/task.svg</td><td width="200">task</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/template.png" alt="rrze-icons/emblems/template.svg"/></td><td width="400">:/emblems/template.svg</td><td width="400">rrze-icons/emblems/template.svg</td><td width="200">template</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/ten-per-page.png" alt="rrze-icons/emblems/ten-per-page.svg"/></td><td width="400">:/emblems/ten-per-page.svg</td><td width="400">rrze-icons/emblems/ten-per-page.svg</td><td width="200">ten-per-page</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tomcat.png" alt="rrze-icons/emblems/tomcat.svg"/></td><td width="400">:/emblems/tomcat.svg</td><td width="400">rrze-icons/emblems/tomcat.svg</td><td width="200">tomcat</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tree-diagramm-delete.png" alt="rrze-icons/emblems/tree-diagramm-delete.svg"/></td><td width="400">:/emblems/tree-diagramm-delete.svg</td><td width="400">rrze-icons/emblems/tree-diagramm-delete.svg</td><td width="200">tree-diagramm-delete</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tree-diagramm-move.png" alt="rrze-icons/emblems/tree-diagramm-move.svg"/></td><td width="400">:/emblems/tree-diagramm-move.svg</td><td width="400">rrze-icons/emblems/tree-diagramm-move.svg</td><td width="200">tree-diagramm-move</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tree-diagramm-new.png" alt="rrze-icons/emblems/tree-diagramm-new.svg"/></td><td width="400">:/emblems/tree-diagramm-new.svg</td><td width="400">rrze-icons/emblems/tree-diagramm-new.svg</td><td width="200">tree-diagramm-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tree-diagramm.png" alt="rrze-icons/emblems/tree-diagramm.svg"/></td><td width="400">:/emblems/tree-diagramm.svg</td><td width="400">rrze-icons/emblems/tree-diagramm.svg</td><td width="200">tree-diagramm</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/twenty-five-per-page.png" alt="rrze-icons/emblems/twenty-five-per-page.svg"/></td><td width="400">:/emblems/twenty-five-per-page.svg</td><td width="400">rrze-icons/emblems/twenty-five-per-page.svg</td><td width="200">twenty-five-per-page</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/unix.png" alt="rrze-icons/emblems/unix.svg"/></td><td width="400">:/emblems/unix.svg</td><td width="400">rrze-icons/emblems/unix.svg</td><td width="200">unix</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/webview.png" alt="rrze-icons/emblems/webview.svg"/></td><td width="400">:/emblems/webview.svg</td><td width="400">rrze-icons/emblems/webview.svg</td><td width="200">webview</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/wide-area-network-connection.png" alt="rrze-icons/emblems/wide-area-network-connection.svg"/></td><td width="400">:/emblems/wide-area-network-connection.svg</td><td width="400">rrze-icons/emblems/wide-area-network-connection.svg</td><td width="200">wide-area-network-connection</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/wide-area-network-link.png" alt="rrze-icons/emblems/wide-area-network-link.svg"/></td><td width="400">:/emblems/wide-area-network-link.svg</td><td width="400">rrze-icons/emblems/wide-area-network-link.svg</td><td width="200">wide-area-network-link</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/wifi.png" alt="rrze-icons/emblems/wifi.svg"/></td><td width="400">:/emblems/wifi.svg</td><td width="400">rrze-icons/emblems/wifi.svg</td><td width="200">wifi</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/zipper.png" alt="rrze-icons/emblems/zipper.svg"/></td><td width="400">:/emblems/zipper.svg</td><td width="400">rrze-icons/emblems/zipper.svg</td><td width="200">zipper</td></tr>
+</table>
+<h2><a name="rrze-icons/mime-types">:/mime-types/ (rrze-icons/mime-types)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/mime-types/" Directory: "rrze-icons/mime-types"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/audio-mp3.png" alt="rrze-icons/mime-types/audio-mp3.svg"/></td><td width="400">:/mime-types/audio-mp3.svg</td><td width="400">rrze-icons/mime-types/audio-mp3.svg</td><td width="200">audio-mp3</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/audio-mp4.png" alt="rrze-icons/mime-types/audio-mp4.svg"/></td><td width="400">:/mime-types/audio-mp4.svg</td><td width="400">rrze-icons/mime-types/audio-mp4.svg</td><td width="200">audio-mp4</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/document-pdf.png" alt="rrze-icons/mime-types/document-pdf.svg"/></td><td width="400">:/mime-types/document-pdf.svg</td><td width="400">rrze-icons/mime-types/document-pdf.svg</td><td width="200">document-pdf</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-audio-itunes-u.png" alt="rrze-icons/mime-types/media-audio-itunes-u.svg"/></td><td width="400">:/mime-types/media-audio-itunes-u.svg</td><td width="400">rrze-icons/mime-types/media-audio-itunes-u.svg</td><td width="200">media-audio-itunes-u</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-audio-itunes.png" alt="rrze-icons/mime-types/media-audio-itunes.svg"/></td><td width="400">:/mime-types/media-audio-itunes.svg</td><td width="400">rrze-icons/mime-types/media-audio-itunes.svg</td><td width="200">media-audio-itunes</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-audio-visual-slide.png" alt="rrze-icons/mime-types/media-audio-visual-slide.svg"/></td><td width="400">:/mime-types/media-audio-visual-slide.svg</td><td width="400">rrze-icons/mime-types/media-audio-visual-slide.svg</td><td width="200">media-audio-visual-slide</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-movie-audio.png" alt="rrze-icons/mime-types/media-movie-audio.svg"/></td><td width="400">:/mime-types/media-movie-audio.svg</td><td width="400">rrze-icons/mime-types/media-movie-audio.svg</td><td width="200">media-movie-audio</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-movie.png" alt="rrze-icons/mime-types/media-movie.svg"/></td><td width="400">:/mime-types/media-movie.svg</td><td width="400">rrze-icons/mime-types/media-movie.svg</td><td width="200">media-movie</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-slide-audio.png" alt="rrze-icons/mime-types/media-slide-audio.svg"/></td><td width="400">:/mime-types/media-slide-audio.svg</td><td width="400">rrze-icons/mime-types/media-slide-audio.svg</td><td width="200">media-slide-audio</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-video-film.png" alt="rrze-icons/mime-types/media-video-film.svg"/></td><td width="400">:/mime-types/media-video-film.svg</td><td width="400">rrze-icons/mime-types/media-video-film.svg</td><td width="200">media-video-film</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/office-ms-excel.png" alt="rrze-icons/mime-types/office-ms-excel.svg"/></td><td width="400">:/mime-types/office-ms-excel.svg</td><td width="400">rrze-icons/mime-types/office-ms-excel.svg</td><td width="200">office-ms-excel</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/office-ms-word.png" alt="rrze-icons/mime-types/office-ms-word.svg"/></td><td width="400">:/mime-types/office-ms-word.svg</td><td width="400">rrze-icons/mime-types/office-ms-word.svg</td><td width="200">office-ms-word</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/text-csv-text.png" alt="rrze-icons/mime-types/text-csv-text.svg"/></td><td width="400">:/mime-types/text-csv-text.svg</td><td width="400">rrze-icons/mime-types/text-csv-text.svg</td><td width="200">text-csv-text</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/video-m4v.png" alt="rrze-icons/mime-types/video-m4v.svg"/></td><td width="400">:/mime-types/video-m4v.svg</td><td width="400">rrze-icons/mime-types/video-m4v.svg</td><td width="200">video-m4v</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/video-mov.png" alt="rrze-icons/mime-types/video-mov.svg"/></td><td width="400">:/mime-types/video-mov.svg</td><td width="400">rrze-icons/mime-types/video-mov.svg</td><td width="200">video-mov</td></tr>
+</table>
+<h2><a name="rrze-icons/status">:/status/ (rrze-icons/status)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/status/" Directory: "rrze-icons/status"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/available.png" alt="rrze-icons/status/available.svg"/></td><td width="400">:/status/available.svg</td><td width="400">rrze-icons/status/available.svg</td><td width="200">available</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/awaiting-plus.png" alt="rrze-icons/status/awaiting-plus.svg"/></td><td width="400">:/status/awaiting-plus.svg</td><td width="400">rrze-icons/status/awaiting-plus.svg</td><td width="200">awaiting-plus</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/awaiting.png" alt="rrze-icons/status/awaiting.svg"/></td><td width="400">:/status/awaiting.svg</td><td width="400">rrze-icons/status/awaiting.svg</td><td width="200">awaiting</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/binational.png" alt="rrze-icons/status/binational.svg"/></td><td width="400">:/status/binational.svg</td><td width="400">rrze-icons/status/binational.svg</td><td width="200">binational</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/error.png" alt="rrze-icons/status/error.svg"/></td><td width="400">:/status/error.svg</td><td width="400">rrze-icons/status/error.svg</td><td width="200">error</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/exclamation-mark.png" alt="rrze-icons/status/exclamation-mark.svg"/></td><td width="400">:/status/exclamation-mark.svg</td><td width="400">rrze-icons/status/exclamation-mark.svg</td><td width="200">exclamation-mark</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/expired.png" alt="rrze-icons/status/expired.svg"/></td><td width="400">:/status/expired.svg</td><td width="400">rrze-icons/status/expired.svg</td><td width="200">expired</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/false.png" alt="rrze-icons/status/false.svg"/></td><td width="400">:/status/false.svg</td><td width="400">rrze-icons/status/false.svg</td><td width="200">false</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/female.png" alt="rrze-icons/status/female.svg"/></td><td width="400">:/status/female.svg</td><td width="400">rrze-icons/status/female.svg</td><td width="200">female</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-green-clock.png" alt="rrze-icons/status/flag-green-clock.svg"/></td><td width="400">:/status/flag-green-clock.svg</td><td width="400">rrze-icons/status/flag-green-clock.svg</td><td width="200">flag-green-clock</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-green-mail.png" alt="rrze-icons/status/flag-green-mail.svg"/></td><td width="400">:/status/flag-green-mail.svg</td><td width="400">rrze-icons/status/flag-green-mail.svg</td><td width="200">flag-green-mail</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-green.png" alt="rrze-icons/status/flag-green.svg"/></td><td width="400">:/status/flag-green.svg</td><td width="400">rrze-icons/status/flag-green.svg</td><td width="200">flag-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-red-clock.png" alt="rrze-icons/status/flag-red-clock.svg"/></td><td width="400">:/status/flag-red-clock.svg</td><td width="400">rrze-icons/status/flag-red-clock.svg</td><td width="200">flag-red-clock</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-red-mail.png" alt="rrze-icons/status/flag-red-mail.svg"/></td><td width="400">:/status/flag-red-mail.svg</td><td width="400">rrze-icons/status/flag-red-mail.svg</td><td width="200">flag-red-mail</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-red.png" alt="rrze-icons/status/flag-red.svg"/></td><td width="400">:/status/flag-red.svg</td><td width="400">rrze-icons/status/flag-red.svg</td><td width="200">flag-red</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-yellow-clock.png" alt="rrze-icons/status/flag-yellow-clock.svg"/></td><td width="400">:/status/flag-yellow-clock.svg</td><td width="400">rrze-icons/status/flag-yellow-clock.svg</td><td width="200">flag-yellow-clock</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-yellow-mail.png" alt="rrze-icons/status/flag-yellow-mail.svg"/></td><td width="400">:/status/flag-yellow-mail.svg</td><td width="400">rrze-icons/status/flag-yellow-mail.svg</td><td width="200">flag-yellow-mail</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-yellow.png" alt="rrze-icons/status/flag-yellow.svg"/></td><td width="400">:/status/flag-yellow.svg</td><td width="400">rrze-icons/status/flag-yellow.svg</td><td width="200">flag-yellow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/hourglass.png" alt="rrze-icons/status/hourglass.svg"/></td><td width="400">:/status/hourglass.svg</td><td width="400">rrze-icons/status/hourglass.svg</td><td width="200">hourglass</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/important.png" alt="rrze-icons/status/important.svg"/></td><td width="400">:/status/important.svg</td><td width="400">rrze-icons/status/important.svg</td><td width="200">important</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/maintenance-time.png" alt="rrze-icons/status/maintenance-time.svg"/></td><td width="400">:/status/maintenance-time.svg</td><td width="400">rrze-icons/status/maintenance-time.svg</td><td width="200">maintenance-time</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/male.png" alt="rrze-icons/status/male.svg"/></td><td width="400">:/status/male.svg</td><td width="400">rrze-icons/status/male.svg</td><td width="200">male</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/not-available.png" alt="rrze-icons/status/not-available.svg"/></td><td width="400">:/status/not-available.svg</td><td width="400">rrze-icons/status/not-available.svg</td><td width="200">not-available</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/not-known.png" alt="rrze-icons/status/not-known.svg"/></td><td width="400">:/status/not-known.svg</td><td width="400">rrze-icons/status/not-known.svg</td><td width="200">not-known</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/not-specified.png" alt="rrze-icons/status/not-specified.svg"/></td><td width="400">:/status/not-specified.svg</td><td width="400">rrze-icons/status/not-specified.svg</td><td width="200">not-specified</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/not-synchronized.png" alt="rrze-icons/status/not-synchronized.svg"/></td><td width="400">:/status/not-synchronized.svg</td><td width="400">rrze-icons/status/not-synchronized.svg</td><td width="200">not-synchronized</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/synchronized.png" alt="rrze-icons/status/synchronized.svg"/></td><td width="400">:/status/synchronized.svg</td><td width="400">rrze-icons/status/synchronized.svg</td><td width="200">synchronized</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/temporarily-not-available-clock.png" alt="rrze-icons/status/temporarily-not-available-clock.svg"/></td><td width="400">:/status/temporarily-not-available-clock.svg</td><td width="400">rrze-icons/status/temporarily-not-available-clock.svg</td><td width="200">temporarily-not-available-clock</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/temporarily-not-available.png" alt="rrze-icons/status/temporarily-not-available.svg"/></td><td width="400">:/status/temporarily-not-available.svg</td><td width="400">rrze-icons/status/temporarily-not-available.svg</td><td width="200">temporarily-not-available</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/true-orange.png" alt="rrze-icons/status/true-orange.svg"/></td><td width="400">:/status/true-orange.svg</td><td width="400">rrze-icons/status/true-orange.svg</td><td width="200">true-orange</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/true.png" alt="rrze-icons/status/true.svg"/></td><td width="400">:/status/true.svg</td><td width="400">rrze-icons/status/true.svg</td><td width="200">true</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/unlocked.png" alt="rrze-icons/status/unlocked.svg"/></td><td width="400">:/status/unlocked.svg</td><td width="400">rrze-icons/status/unlocked.svg</td><td width="200">unlocked</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/warning.png" alt="rrze-icons/status/warning.svg"/></td><td width="400">:/status/warning.svg</td><td width="400">rrze-icons/status/warning.svg</td><td width="200">warning</td></tr>
+</table>
+<h2><a name="tango-icons/actions">:/actions/ (tango-icons/actions)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/actions/" Directory: "tango-icons/actions"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-down.png" alt="tango-icons/actions/go-down.svg"/></td><td width="400">:/actions/go-down.svg</td><td width="400">tango-icons/actions/go-down.svg</td><td width="200">go-down</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-home.png" alt="tango-icons/actions/go-home.svg"/></td><td width="400">:/actions/go-home.svg</td><td width="400">tango-icons/actions/go-home.svg</td><td width="200">go-home</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-first.png" alt="tango-icons/actions/go-first.svg"/></td><td width="400">:/actions/go-first.svg</td><td width="400">tango-icons/actions/go-first.svg</td><td width="200">go-first</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-find-replace.png" alt="tango-icons/actions/edit-find-replace.svg"/></td><td width="400">:/actions/edit-find-replace.svg</td><td width="400">tango-icons/actions/edit-find-replace.svg</td><td width="200">edit-find-replace</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-cut.png" alt="tango-icons/actions/edit-cut.svg"/></td><td width="400">:/actions/edit-cut.svg</td><td width="400">tango-icons/actions/edit-cut.svg</td><td width="200">edit-cut</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-indent-more.png" alt="tango-icons/actions/format-indent-more.svg"/></td><td width="400">:/actions/format-indent-more.svg</td><td width="400">tango-icons/actions/format-indent-more.svg</td><td width="200">format-indent-more</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-justify-left.png" alt="tango-icons/actions/format-justify-left.svg"/></td><td width="400">:/actions/format-justify-left.svg</td><td width="400">tango-icons/actions/format-justify-left.svg</td><td width="200">format-justify-left</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-print-preview.png" alt="tango-icons/actions/document-print-preview.svg"/></td><td width="400">:/actions/document-print-preview.svg</td><td width="400">tango-icons/actions/document-print-preview.svg</td><td width="200">document-print-preview</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-text-bold.png" alt="tango-icons/actions/format-text-bold.svg"/></td><td width="400">:/actions/format-text-bold.svg</td><td width="400">tango-icons/actions/format-text-bold.svg</td><td width="200">format-text-bold</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-open.png" alt="tango-icons/actions/document-open.svg"/></td><td width="400">:/actions/document-open.svg</td><td width="400">tango-icons/actions/document-open.svg</td><td width="200">document-open</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-bottom.png" alt="tango-icons/actions/go-bottom.svg"/></td><td width="400">:/actions/go-bottom.svg</td><td width="400">tango-icons/actions/go-bottom.svg</td><td width="200">go-bottom</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-last.png" alt="tango-icons/actions/go-last.svg"/></td><td width="400">:/actions/go-last.svg</td><td width="400">tango-icons/actions/go-last.svg</td><td width="200">go-last</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-seek-backward.png" alt="tango-icons/actions/media-seek-backward.svg"/></td><td width="400">:/actions/media-seek-backward.svg</td><td width="400">tango-icons/actions/media-seek-backward.svg</td><td width="200">media-seek-backward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-justify-right.png" alt="tango-icons/actions/format-justify-right.svg"/></td><td width="400">:/actions/format-justify-right.svg</td><td width="400">tango-icons/actions/format-justify-right.svg</td><td width="200">format-justify-right</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/window-new.png" alt="tango-icons/actions/window-new.svg"/></td><td width="400">:/actions/window-new.svg</td><td width="400">tango-icons/actions/window-new.svg</td><td width="200">window-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-save.png" alt="tango-icons/actions/document-save.svg"/></td><td width="400">:/actions/document-save.svg</td><td width="400">tango-icons/actions/document-save.svg</td><td width="200">document-save</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/folder-new.png" alt="tango-icons/actions/folder-new.svg"/></td><td width="400">:/actions/folder-new.svg</td><td width="400">tango-icons/actions/folder-new.svg</td><td width="200">folder-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-eject.png" alt="tango-icons/actions/media-eject.svg"/></td><td width="400">:/actions/media-eject.svg</td><td width="400">tango-icons/actions/media-eject.svg</td><td width="200">media-eject</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-up.png" alt="tango-icons/actions/go-up.svg"/></td><td width="400">:/actions/go-up.svg</td><td width="400">tango-icons/actions/go-up.svg</td><td width="200">go-up</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-new.png" alt="tango-icons/actions/document-new.svg"/></td><td width="400">:/actions/document-new.svg</td><td width="400">tango-icons/actions/document-new.svg</td><td width="200">document-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-print.png" alt="tango-icons/actions/document-print.svg"/></td><td width="400">:/actions/document-print.svg</td><td width="400">tango-icons/actions/document-print.svg</td><td width="200">document-print</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-playback-pause.png" alt="tango-icons/actions/media-playback-pause.svg"/></td><td width="400">:/actions/media-playback-pause.svg</td><td width="400">tango-icons/actions/media-playback-pause.svg</td><td width="200">media-playback-pause</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/address-book-new.png" alt="tango-icons/actions/address-book-new.svg"/></td><td width="400">:/actions/address-book-new.svg</td><td width="400">tango-icons/actions/address-book-new.svg</td><td width="200">address-book-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-delete.png" alt="tango-icons/actions/edit-delete.svg"/></td><td width="400">:/actions/edit-delete.svg</td><td width="400">tango-icons/actions/edit-delete.svg</td><td width="200">edit-delete</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/appointment-new.png" alt="tango-icons/actions/appointment-new.svg"/></td><td width="400">:/actions/appointment-new.svg</td><td width="400">tango-icons/actions/appointment-new.svg</td><td width="200">appointment-new</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/bookmark-new.png" alt="tango-icons/actions/bookmark-new.svg"/></td><td width="400">:/actions/bookmark-new.svg</td><td width="400">tango-icons/actions/bookmark-new.svg</td><td width="200">bookmark-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-message-new.png" alt="tango-icons/actions/mail-message-new.svg"/></td><td width="400">:/actions/mail-message-new.svg</td><td width="400">tango-icons/actions/mail-message-new.svg</td><td width="200">mail-message-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/system-log-out.png" alt="tango-icons/actions/system-log-out.svg"/></td><td width="400">:/actions/system-log-out.svg</td><td width="400">tango-icons/actions/system-log-out.svg</td><td width="200">system-log-out</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/system-search.png" alt="tango-icons/actions/system-search.svg"/></td><td width="400">:/actions/system-search.svg</td><td width="400">tango-icons/actions/system-search.svg</td><td width="200">system-search</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-justify-center.png" alt="tango-icons/actions/format-justify-center.svg"/></td><td width="400">:/actions/format-justify-center.svg</td><td width="400">tango-icons/actions/format-justify-center.svg</td><td width="200">format-justify-center</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-justify-fill.png" alt="tango-icons/actions/format-justify-fill.svg"/></td><td width="400">:/actions/format-justify-fill.svg</td><td width="400">tango-icons/actions/format-justify-fill.svg</td><td width="200">format-justify-fill</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-redo.png" alt="tango-icons/actions/edit-redo.svg"/></td><td width="400">:/actions/edit-redo.svg</td><td width="400">tango-icons/actions/edit-redo.svg</td><td width="200">edit-redo</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-jump.png" alt="tango-icons/actions/go-jump.svg"/></td><td width="400">:/actions/go-jump.svg</td><td width="400">tango-icons/actions/go-jump.svg</td><td width="200">go-jump</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-text-underline.png" alt="tango-icons/actions/format-text-underline.svg"/></td><td width="400">:/actions/format-text-underline.svg</td><td width="400">tango-icons/actions/format-text-underline.svg</td><td width="200">format-text-underline</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/list-add.png" alt="tango-icons/actions/list-add.svg"/></td><td width="400">:/actions/list-add.svg</td><td width="400">tango-icons/actions/list-add.svg</td><td width="200">list-add</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-mark-not-junk.png" alt="tango-icons/actions/mail-mark-not-junk.svg"/></td><td width="400">:/actions/mail-mark-not-junk.svg</td><td width="400">tango-icons/actions/mail-mark-not-junk.svg</td><td width="200">mail-mark-not-junk</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-undo.png" alt="tango-icons/actions/edit-undo.svg"/></td><td width="400">:/actions/edit-undo.svg</td><td width="400">tango-icons/actions/edit-undo.svg</td><td width="200">edit-undo</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/list-remove.png" alt="tango-icons/actions/list-remove.svg"/></td><td width="400">:/actions/list-remove.svg</td><td width="400">tango-icons/actions/list-remove.svg</td><td width="200">list-remove</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-copy.png" alt="tango-icons/actions/edit-copy.svg"/></td><td width="400">:/actions/edit-copy.svg</td><td width="400">tango-icons/actions/edit-copy.svg</td><td width="200">edit-copy</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/view-fullscreen.png" alt="tango-icons/actions/view-fullscreen.svg"/></td><td width="400">:/actions/view-fullscreen.svg</td><td width="400">tango-icons/actions/view-fullscreen.svg</td><td width="200">view-fullscreen</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-paste.png" alt="tango-icons/actions/edit-paste.svg"/></td><td width="400">:/actions/edit-paste.svg</td><td width="400">tango-icons/actions/edit-paste.svg</td><td width="200">edit-paste</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-save-as.png" alt="tango-icons/actions/document-save-as.svg"/></td><td width="400">:/actions/document-save-as.svg</td><td width="400">tango-icons/actions/document-save-as.svg</td><td width="200">document-save-as</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-send-receive.png" alt="tango-icons/actions/mail-send-receive.svg"/></td><td width="400">:/actions/mail-send-receive.svg</td><td width="400">tango-icons/actions/mail-send-receive.svg</td><td width="200">mail-send-receive</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/contact-new.png" alt="tango-icons/actions/contact-new.svg"/></td><td width="400">:/actions/contact-new.svg</td><td width="400">tango-icons/actions/contact-new.svg</td><td width="200">contact-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-new.png" alt="tango-icons/actions/document-new.svg"/></td><td width="400">:/actions/document-new.svg</td><td width="400">tango-icons/actions/document-new.svg</td><td width="200">document-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-open.png" alt="tango-icons/actions/document-open.svg"/></td><td width="400">:/actions/document-open.svg</td><td width="400">tango-icons/actions/document-open.svg</td><td width="200">document-open</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-print-preview.png" alt="tango-icons/actions/document-print-preview.svg"/></td><td width="400">:/actions/document-print-preview.svg</td><td width="400">tango-icons/actions/document-print-preview.svg</td><td width="200">document-print-preview</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-print.png" alt="tango-icons/actions/document-print.svg"/></td><td width="400">:/actions/document-print.svg</td><td width="400">tango-icons/actions/document-print.svg</td><td width="200">document-print</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-properties.png" alt="tango-icons/actions/document-properties.svg"/></td><td width="400">:/actions/document-properties.svg</td><td width="400">tango-icons/actions/document-properties.svg</td><td width="200">document-properties</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-save-as.png" alt="tango-icons/actions/document-save-as.svg"/></td><td width="400">:/actions/document-save-as.svg</td><td width="400">tango-icons/actions/document-save-as.svg</td><td width="200">document-save-as</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-save.png" alt="tango-icons/actions/document-save.svg"/></td><td width="400">:/actions/document-save.svg</td><td width="400">tango-icons/actions/document-save.svg</td><td width="200">document-save</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-clear.png" alt="tango-icons/actions/edit-clear.svg"/></td><td width="400">:/actions/edit-clear.svg</td><td width="400">tango-icons/actions/edit-clear.svg</td><td width="200">edit-clear</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-copy.png" alt="tango-icons/actions/edit-copy.svg"/></td><td width="400">:/actions/edit-copy.svg</td><td width="400">tango-icons/actions/edit-copy.svg</td><td width="200">edit-copy</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-cut.png" alt="tango-icons/actions/edit-cut.svg"/></td><td width="400">:/actions/edit-cut.svg</td><td width="400">tango-icons/actions/edit-cut.svg</td><td width="200">edit-cut</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-delete.png" alt="tango-icons/actions/edit-delete.svg"/></td><td width="400">:/actions/edit-delete.svg</td><td width="400">tango-icons/actions/edit-delete.svg</td><td width="200">edit-delete</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-find-replace.png" alt="tango-icons/actions/edit-find-replace.svg"/></td><td width="400">:/actions/edit-find-replace.svg</td><td width="400">tango-icons/actions/edit-find-replace.svg</td><td width="200">edit-find-replace</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-find.png" alt="tango-icons/actions/edit-find.svg"/></td><td width="400">:/actions/edit-find.svg</td><td width="400">tango-icons/actions/edit-find.svg</td><td width="200">edit-find</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/system-shutdown.png" alt="tango-icons/actions/system-shutdown.svg"/></td><td width="400">:/actions/system-shutdown.svg</td><td width="400">tango-icons/actions/system-shutdown.svg</td><td width="200">system-shutdown</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-skip-forward.png" alt="tango-icons/actions/media-skip-forward.svg"/></td><td width="400">:/actions/media-skip-forward.svg</td><td width="400">tango-icons/actions/media-skip-forward.svg</td><td width="200">media-skip-forward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-paste.png" alt="tango-icons/actions/edit-paste.svg"/></td><td width="400">:/actions/edit-paste.svg</td><td width="400">tango-icons/actions/edit-paste.svg</td><td width="200">edit-paste</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-redo.png" alt="tango-icons/actions/edit-redo.svg"/></td><td width="400">:/actions/edit-redo.svg</td><td width="400">tango-icons/actions/edit-redo.svg</td><td width="200">edit-redo</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-select-all.png" alt="tango-icons/actions/edit-select-all.svg"/></td><td width="400">:/actions/edit-select-all.svg</td><td width="400">tango-icons/actions/edit-select-all.svg</td><td width="200">edit-select-all</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/view-refresh.png" alt="tango-icons/actions/view-refresh.svg"/></td><td width="400">:/actions/view-refresh.svg</td><td width="400">tango-icons/actions/view-refresh.svg</td><td width="200">view-refresh</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/tab-new.png" alt="tango-icons/actions/tab-new.svg"/></td><td width="400">:/actions/tab-new.svg</td><td width="400">tango-icons/actions/tab-new.svg</td><td width="200">tab-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-skip-backward.png" alt="tango-icons/actions/media-skip-backward.svg"/></td><td width="400">:/actions/media-skip-backward.svg</td><td width="400">tango-icons/actions/media-skip-backward.svg</td><td width="200">media-skip-backward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-reply-all.png" alt="tango-icons/actions/mail-reply-all.svg"/></td><td width="400">:/actions/mail-reply-all.svg</td><td width="400">tango-icons/actions/mail-reply-all.svg</td><td width="200">mail-reply-all</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-playback-start.png" alt="tango-icons/actions/media-playback-start.svg"/></td><td width="400">:/actions/media-playback-start.svg</td><td width="400">tango-icons/actions/media-playback-start.svg</td><td width="200">media-playback-start</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-playback-stop.png" alt="tango-icons/actions/media-playback-stop.svg"/></td><td width="400">:/actions/media-playback-stop.svg</td><td width="400">tango-icons/actions/media-playback-stop.svg</td><td width="200">media-playback-stop</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-undo.png" alt="tango-icons/actions/edit-undo.svg"/></td><td width="400">:/actions/edit-undo.svg</td><td width="400">tango-icons/actions/edit-undo.svg</td><td width="200">edit-undo</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/folder-new.png" alt="tango-icons/actions/folder-new.svg"/></td><td width="400">:/actions/folder-new.svg</td><td width="400">tango-icons/actions/folder-new.svg</td><td width="200">folder-new</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-indent-less.png" alt="tango-icons/actions/format-indent-less.svg"/></td><td width="400">:/actions/format-indent-less.svg</td><td width="400">tango-icons/actions/format-indent-less.svg</td><td width="200">format-indent-less</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/appointment-new.png" alt="tango-icons/actions/appointment-new.svg"/></td><td width="400">:/actions/appointment-new.svg</td><td width="400">tango-icons/actions/appointment-new.svg</td><td width="200">appointment-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-previous.png" alt="tango-icons/actions/go-previous.svg"/></td><td width="400">:/actions/go-previous.svg</td><td width="400">tango-icons/actions/go-previous.svg</td><td width="200">go-previous</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-mark-junk.png" alt="tango-icons/actions/mail-mark-junk.svg"/></td><td width="400">:/actions/mail-mark-junk.svg</td><td width="400">tango-icons/actions/mail-mark-junk.svg</td><td width="200">mail-mark-junk</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/process-stop.png" alt="tango-icons/actions/process-stop.svg"/></td><td width="400">:/actions/process-stop.svg</td><td width="400">tango-icons/actions/process-stop.svg</td><td width="200">process-stop</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-indent-more.png" alt="tango-icons/actions/format-indent-more.svg"/></td><td width="400">:/actions/format-indent-more.svg</td><td width="400">tango-icons/actions/format-indent-more.svg</td><td width="200">format-indent-more</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-justify-center.png" alt="tango-icons/actions/format-justify-center.svg"/></td><td width="400">:/actions/format-justify-center.svg</td><td width="400">tango-icons/actions/format-justify-center.svg</td><td width="200">format-justify-center</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-justify-fill.png" alt="tango-icons/actions/format-justify-fill.svg"/></td><td width="400">:/actions/format-justify-fill.svg</td><td width="400">tango-icons/actions/format-justify-fill.svg</td><td width="200">format-justify-fill</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-justify-left.png" alt="tango-icons/actions/format-justify-left.svg"/></td><td width="400">:/actions/format-justify-left.svg</td><td width="400">tango-icons/actions/format-justify-left.svg</td><td width="200">format-justify-left</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-justify-right.png" alt="tango-icons/actions/format-justify-right.svg"/></td><td width="400">:/actions/format-justify-right.svg</td><td width="400">tango-icons/actions/format-justify-right.svg</td><td width="200">format-justify-right</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-text-bold.png" alt="tango-icons/actions/format-text-bold.svg"/></td><td width="400">:/actions/format-text-bold.svg</td><td width="400">tango-icons/actions/format-text-bold.svg</td><td width="200">format-text-bold</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-text-italic.png" alt="tango-icons/actions/format-text-italic.svg"/></td><td width="400">:/actions/format-text-italic.svg</td><td width="400">tango-icons/actions/format-text-italic.svg</td><td width="200">format-text-italic</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-reply-sender.png" alt="tango-icons/actions/mail-reply-sender.svg"/></td><td width="400">:/actions/mail-reply-sender.svg</td><td width="400">tango-icons/actions/mail-reply-sender.svg</td><td width="200">mail-reply-sender</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-text-strikethrough.png" alt="tango-icons/actions/format-text-strikethrough.svg"/></td><td width="400">:/actions/format-text-strikethrough.svg</td><td width="400">tango-icons/actions/format-text-strikethrough.svg</td><td width="200">format-text-strikethrough</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-text-underline.png" alt="tango-icons/actions/format-text-underline.svg"/></td><td width="400">:/actions/format-text-underline.svg</td><td width="400">tango-icons/actions/format-text-underline.svg</td><td width="200">format-text-underline</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-bottom.png" alt="tango-icons/actions/go-bottom.svg"/></td><td width="400">:/actions/go-bottom.svg</td><td width="400">tango-icons/actions/go-bottom.svg</td><td width="200">go-bottom</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-down.png" alt="tango-icons/actions/go-down.svg"/></td><td width="400">:/actions/go-down.svg</td><td width="400">tango-icons/actions/go-down.svg</td><td width="200">go-down</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-first.png" alt="tango-icons/actions/go-first.svg"/></td><td width="400">:/actions/go-first.svg</td><td width="400">tango-icons/actions/go-first.svg</td><td width="200">go-first</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-home.png" alt="tango-icons/actions/go-home.svg"/></td><td width="400">:/actions/go-home.svg</td><td width="400">tango-icons/actions/go-home.svg</td><td width="200">go-home</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-jump.png" alt="tango-icons/actions/go-jump.svg"/></td><td width="400">:/actions/go-jump.svg</td><td width="400">tango-icons/actions/go-jump.svg</td><td width="200">go-jump</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-last.png" alt="tango-icons/actions/go-last.svg"/></td><td width="400">:/actions/go-last.svg</td><td width="400">tango-icons/actions/go-last.svg</td><td width="200">go-last</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-next.png" alt="tango-icons/actions/go-next.svg"/></td><td width="400">:/actions/go-next.svg</td><td width="400">tango-icons/actions/go-next.svg</td><td width="200">go-next</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-forward.png" alt="tango-icons/actions/mail-forward.svg"/></td><td width="400">:/actions/mail-forward.svg</td><td width="400">tango-icons/actions/mail-forward.svg</td><td width="200">mail-forward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-record.png" alt="tango-icons/actions/media-record.svg"/></td><td width="400">:/actions/media-record.svg</td><td width="400">tango-icons/actions/media-record.svg</td><td width="200">media-record</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-previous.png" alt="tango-icons/actions/go-previous.svg"/></td><td width="400">:/actions/go-previous.svg</td><td width="400">tango-icons/actions/go-previous.svg</td><td width="200">go-previous</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-top.png" alt="tango-icons/actions/go-top.svg"/></td><td width="400">:/actions/go-top.svg</td><td width="400">tango-icons/actions/go-top.svg</td><td width="200">go-top</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-seek-forward.png" alt="tango-icons/actions/media-seek-forward.svg"/></td><td width="400">:/actions/media-seek-forward.svg</td><td width="400">tango-icons/actions/media-seek-forward.svg</td><td width="200">media-seek-forward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-properties.png" alt="tango-icons/actions/document-properties.svg"/></td><td width="400">:/actions/document-properties.svg</td><td width="400">tango-icons/actions/document-properties.svg</td><td width="200">document-properties</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/system-lock-screen.png" alt="tango-icons/actions/system-lock-screen.svg"/></td><td width="400">:/actions/system-lock-screen.svg</td><td width="400">tango-icons/actions/system-lock-screen.svg</td><td width="200">system-lock-screen</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-clear.png" alt="tango-icons/actions/edit-clear.svg"/></td><td width="400">:/actions/edit-clear.svg</td><td width="400">tango-icons/actions/edit-clear.svg</td><td width="200">edit-clear</td></tr>
-</table>
-<h2><a name="tango-icons/mimetypes">:/mimetypes/ (tango-icons/mimetypes)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/mimetypes/" Directory: "tango-icons/mimetypes"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/text-x-script.png" alt="tango-icons/mimetypes/text-x-script.svg"/></td><td width="400">:/mimetypes/text-x-script.svg</td><td width="400">tango-icons/mimetypes/text-x-script.svg</td><td width="200">text-x-script</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/video-x-generic.png" alt="tango-icons/mimetypes/video-x-generic.svg"/></td><td width="400">:/mimetypes/video-x-generic.svg</td><td width="400">tango-icons/mimetypes/video-x-generic.svg</td><td width="200">video-x-generic</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-spreadsheet-template.png" alt="tango-icons/mimetypes/x-office-spreadsheet-template.svg"/></td><td width="400">:/mimetypes/x-office-spreadsheet-template.svg</td><td width="400">tango-icons/mimetypes/x-office-spreadsheet-template.svg</td><td width="200">x-office-spreadsheet-template</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/text-html.png" alt="tango-icons/mimetypes/text-html.svg"/></td><td width="400">:/mimetypes/text-html.svg</td><td width="400">tango-icons/mimetypes/text-html.svg</td><td width="200">text-html</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-presentation.png" alt="tango-icons/mimetypes/x-office-presentation.svg"/></td><td width="400">:/mimetypes/x-office-presentation.svg</td><td width="400">tango-icons/mimetypes/x-office-presentation.svg</td><td width="200">x-office-presentation</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/package-x-generic.png" alt="tango-icons/mimetypes/package-x-generic.svg"/></td><td width="400">:/mimetypes/package-x-generic.svg</td><td width="400">tango-icons/mimetypes/package-x-generic.svg</td><td width="200">package-x-generic</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/application-x-executable.png" alt="tango-icons/mimetypes/application-x-executable.svg"/></td><td width="400">:/mimetypes/application-x-executable.svg</td><td width="400">tango-icons/mimetypes/application-x-executable.svg</td><td width="200">application-x-executable</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-drawing.png" alt="tango-icons/mimetypes/x-office-drawing.svg"/></td><td width="400">:/mimetypes/x-office-drawing.svg</td><td width="400">tango-icons/mimetypes/x-office-drawing.svg</td><td width="200">x-office-drawing</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/audio-x-generic.png" alt="tango-icons/mimetypes/audio-x-generic.svg"/></td><td width="400">:/mimetypes/audio-x-generic.svg</td><td width="400">tango-icons/mimetypes/audio-x-generic.svg</td><td width="200">audio-x-generic</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/application-certificate.png" alt="tango-icons/mimetypes/application-certificate.svg"/></td><td width="400">:/mimetypes/application-certificate.svg</td><td width="400">tango-icons/mimetypes/application-certificate.svg</td><td width="200">application-certificate</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/image-x-generic.png" alt="tango-icons/mimetypes/image-x-generic.svg"/></td><td width="400">:/mimetypes/image-x-generic.svg</td><td width="400">tango-icons/mimetypes/image-x-generic.svg</td><td width="200">image-x-generic</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-presentation-template.png" alt="tango-icons/mimetypes/x-office-presentation-template.svg"/></td><td width="400">:/mimetypes/x-office-presentation-template.svg</td><td width="400">tango-icons/mimetypes/x-office-presentation-template.svg</td><td width="200">x-office-presentation-template</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-calendar.png" alt="tango-icons/mimetypes/x-office-calendar.svg"/></td><td width="400">:/mimetypes/x-office-calendar.svg</td><td width="400">tango-icons/mimetypes/x-office-calendar.svg</td><td width="200">x-office-calendar</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-address-book.png" alt="tango-icons/mimetypes/x-office-address-book.svg"/></td><td width="400">:/mimetypes/x-office-address-book.svg</td><td width="400">tango-icons/mimetypes/x-office-address-book.svg</td><td width="200">x-office-address-book</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/text-x-generic.png" alt="tango-icons/mimetypes/text-x-generic.svg"/></td><td width="400">:/mimetypes/text-x-generic.svg</td><td width="400">tango-icons/mimetypes/text-x-generic.svg</td><td width="200">text-x-generic</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/font-x-generic.png" alt="tango-icons/mimetypes/font-x-generic.svg"/></td><td width="400">:/mimetypes/font-x-generic.svg</td><td width="400">tango-icons/mimetypes/font-x-generic.svg</td><td width="200">font-x-generic</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-spreadsheet.png" alt="tango-icons/mimetypes/x-office-spreadsheet.svg"/></td><td width="400">:/mimetypes/x-office-spreadsheet.svg</td><td width="400">tango-icons/mimetypes/x-office-spreadsheet.svg</td><td width="200">x-office-spreadsheet</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/text-x-generic-template.png" alt="tango-icons/mimetypes/text-x-generic-template.svg"/></td><td width="400">:/mimetypes/text-x-generic-template.svg</td><td width="400">tango-icons/mimetypes/text-x-generic-template.svg</td><td width="200">text-x-generic-template</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-document-template.png" alt="tango-icons/mimetypes/x-office-document-template.svg"/></td><td width="400">:/mimetypes/x-office-document-template.svg</td><td width="400">tango-icons/mimetypes/x-office-document-template.svg</td><td width="200">x-office-document-template</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-document.png" alt="tango-icons/mimetypes/x-office-document.svg"/></td><td width="400">:/mimetypes/x-office-document.svg</td><td width="400">tango-icons/mimetypes/x-office-document.svg</td><td width="200">x-office-document</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-drawing-template.png" alt="tango-icons/mimetypes/x-office-drawing-template.svg"/></td><td width="400">:/mimetypes/x-office-drawing-template.svg</td><td width="400">tango-icons/mimetypes/x-office-drawing-template.svg</td><td width="200">x-office-drawing-template</td></tr>
-</table>
-<h2><a name="tango-icons/emblems">:/emblems/ (tango-icons/emblems)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/emblems/" Directory: "tango-icons/emblems"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-unreadable.png" alt="tango-icons/emblems/emblem-unreadable.svg"/></td><td width="400">:/emblems/emblem-unreadable.svg</td><td width="400">tango-icons/emblems/emblem-unreadable.svg</td><td width="200">emblem-unreadable</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-important.png" alt="tango-icons/emblems/emblem-important.svg"/></td><td width="400">:/emblems/emblem-important.svg</td><td width="400">tango-icons/emblems/emblem-important.svg</td><td width="200">emblem-important</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-favorite.png" alt="tango-icons/emblems/emblem-favorite.svg"/></td><td width="400">:/emblems/emblem-favorite.svg</td><td width="400">tango-icons/emblems/emblem-favorite.svg</td><td width="200">emblem-favorite</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-readonly.png" alt="tango-icons/emblems/emblem-readonly.svg"/></td><td width="400">:/emblems/emblem-readonly.svg</td><td width="400">tango-icons/emblems/emblem-readonly.svg</td><td width="200">emblem-readonly</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-symbolic-link.png" alt="tango-icons/emblems/emblem-symbolic-link.svg"/></td><td width="400">:/emblems/emblem-symbolic-link.svg</td><td width="400">tango-icons/emblems/emblem-symbolic-link.svg</td><td width="200">emblem-symbolic-link</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-photos.png" alt="tango-icons/emblems/emblem-photos.svg"/></td><td width="400">:/emblems/emblem-photos.svg</td><td width="400">tango-icons/emblems/emblem-photos.svg</td><td width="200">emblem-photos</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-system.png" alt="tango-icons/emblems/emblem-system.svg"/></td><td width="400">:/emblems/emblem-system.svg</td><td width="400">tango-icons/emblems/emblem-system.svg</td><td width="200">emblem-system</td></tr>
-</table>
-<h2><a name="tango-icons/devices">:/devices/ (tango-icons/devices)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/devices/" Directory: "tango-icons/devices"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/multimedia-player.png" alt="tango-icons/devices/multimedia-player.svg"/></td><td width="400">:/devices/multimedia-player.svg</td><td width="400">tango-icons/devices/multimedia-player.svg</td><td width="200">multimedia-player</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/drive-harddisk.png" alt="tango-icons/devices/drive-harddisk.svg"/></td><td width="400">:/devices/drive-harddisk.svg</td><td width="400">tango-icons/devices/drive-harddisk.svg</td><td width="200">drive-harddisk</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/camera-video.png" alt="tango-icons/devices/camera-video.svg"/></td><td width="400">:/devices/camera-video.svg</td><td width="400">tango-icons/devices/camera-video.svg</td><td width="200">camera-video</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/network-wireless.png" alt="tango-icons/devices/network-wireless.svg"/></td><td width="400">:/devices/network-wireless.svg</td><td width="400">tango-icons/devices/network-wireless.svg</td><td width="200">network-wireless</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/audio-input-microphone.png" alt="tango-icons/devices/audio-input-microphone.svg"/></td><td width="400">:/devices/audio-input-microphone.svg</td><td width="400">tango-icons/devices/audio-input-microphone.svg</td><td width="200">audio-input-microphone</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/media-floppy.png" alt="tango-icons/devices/media-floppy.svg"/></td><td width="400">:/devices/media-floppy.svg</td><td width="400">tango-icons/devices/media-floppy.svg</td><td width="200">media-floppy</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/computer.png" alt="tango-icons/devices/computer.svg"/></td><td width="400">:/devices/computer.svg</td><td width="400">tango-icons/devices/computer.svg</td><td width="200">computer</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/video-display.png" alt="tango-icons/devices/video-display.svg"/></td><td width="400">:/devices/video-display.svg</td><td width="400">tango-icons/devices/video-display.svg</td><td width="200">video-display</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/input-keyboard.png" alt="tango-icons/devices/input-keyboard.svg"/></td><td width="400">:/devices/input-keyboard.svg</td><td width="400">tango-icons/devices/input-keyboard.svg</td><td width="200">input-keyboard</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/printer.png" alt="tango-icons/devices/printer.svg"/></td><td width="400">:/devices/printer.svg</td><td width="400">tango-icons/devices/printer.svg</td><td width="200">printer</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/camera-photo.png" alt="tango-icons/devices/camera-photo.svg"/></td><td width="400">:/devices/camera-photo.svg</td><td width="400">tango-icons/devices/camera-photo.svg</td><td width="200">camera-photo</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/input-gaming.png" alt="tango-icons/devices/input-gaming.svg"/></td><td width="400">:/devices/input-gaming.svg</td><td width="400">tango-icons/devices/input-gaming.svg</td><td width="200">input-gaming</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/input-mouse.png" alt="tango-icons/devices/input-mouse.svg"/></td><td width="400">:/devices/input-mouse.svg</td><td width="400">tango-icons/devices/input-mouse.svg</td><td width="200">input-mouse</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/network-wired.png" alt="tango-icons/devices/network-wired.svg"/></td><td width="400">:/devices/network-wired.svg</td><td width="400">tango-icons/devices/network-wired.svg</td><td width="200">network-wired</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/audio-card.png" alt="tango-icons/devices/audio-card.svg"/></td><td width="400">:/devices/audio-card.svg</td><td width="400">tango-icons/devices/audio-card.svg</td><td width="200">audio-card</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/media-optical.png" alt="tango-icons/devices/media-optical.svg"/></td><td width="400">:/devices/media-optical.svg</td><td width="400">tango-icons/devices/media-optical.svg</td><td width="200">media-optical</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/drive-removable-media.png" alt="tango-icons/devices/drive-removable-media.svg"/></td><td width="400">:/devices/drive-removable-media.svg</td><td width="400">tango-icons/devices/drive-removable-media.svg</td><td width="200">drive-removable-media</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/drive-optical.png" alt="tango-icons/devices/drive-optical.svg"/></td><td width="400">:/devices/drive-optical.svg</td><td width="400">tango-icons/devices/drive-optical.svg</td><td width="200">drive-optical</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/media-flash.png" alt="tango-icons/devices/media-flash.svg"/></td><td width="400">:/devices/media-flash.svg</td><td width="400">tango-icons/devices/media-flash.svg</td><td width="200">media-flash</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/battery.png" alt="tango-icons/devices/battery.svg"/></td><td width="400">:/devices/battery.svg</td><td width="400">tango-icons/devices/battery.svg</td><td width="200">battery</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-up.png" alt="tango-icons/actions/go-up.svg"/></td><td width="400">:/actions/go-up.svg</td><td width="400">tango-icons/actions/go-up.svg</td><td width="200">go-up</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/list-add.png" alt="tango-icons/actions/list-add.svg"/></td><td width="400">:/actions/list-add.svg</td><td width="400">tango-icons/actions/list-add.svg</td><td width="200">list-add</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/list-remove.png" alt="tango-icons/actions/list-remove.svg"/></td><td width="400">:/actions/list-remove.svg</td><td width="400">tango-icons/actions/list-remove.svg</td><td width="200">list-remove</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-forward.png" alt="tango-icons/actions/mail-forward.svg"/></td><td width="400">:/actions/mail-forward.svg</td><td width="400">tango-icons/actions/mail-forward.svg</td><td width="200">mail-forward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-mark-junk.png" alt="tango-icons/actions/mail-mark-junk.svg"/></td><td width="400">:/actions/mail-mark-junk.svg</td><td width="400">tango-icons/actions/mail-mark-junk.svg</td><td width="200">mail-mark-junk</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-mark-not-junk.png" alt="tango-icons/actions/mail-mark-not-junk.svg"/></td><td width="400">:/actions/mail-mark-not-junk.svg</td><td width="400">tango-icons/actions/mail-mark-not-junk.svg</td><td width="200">mail-mark-not-junk</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-message-new.png" alt="tango-icons/actions/mail-message-new.svg"/></td><td width="400">:/actions/mail-message-new.svg</td><td width="400">tango-icons/actions/mail-message-new.svg</td><td width="200">mail-message-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-reply-all.png" alt="tango-icons/actions/mail-reply-all.svg"/></td><td width="400">:/actions/mail-reply-all.svg</td><td width="400">tango-icons/actions/mail-reply-all.svg</td><td width="200">mail-reply-all</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-reply-sender.png" alt="tango-icons/actions/mail-reply-sender.svg"/></td><td width="400">:/actions/mail-reply-sender.svg</td><td width="400">tango-icons/actions/mail-reply-sender.svg</td><td width="200">mail-reply-sender</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-send-receive.png" alt="tango-icons/actions/mail-send-receive.svg"/></td><td width="400">:/actions/mail-send-receive.svg</td><td width="400">tango-icons/actions/mail-send-receive.svg</td><td width="200">mail-send-receive</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-eject.png" alt="tango-icons/actions/media-eject.svg"/></td><td width="400">:/actions/media-eject.svg</td><td width="400">tango-icons/actions/media-eject.svg</td><td width="200">media-eject</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/window-new.png" alt="tango-icons/actions/window-new.svg"/></td><td width="400">:/actions/window-new.svg</td><td width="400">tango-icons/actions/window-new.svg</td><td width="200">window-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-playback-pause.png" alt="tango-icons/actions/media-playback-pause.svg"/></td><td width="400">:/actions/media-playback-pause.svg</td><td width="400">tango-icons/actions/media-playback-pause.svg</td><td width="200">media-playback-pause</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-playback-start.png" alt="tango-icons/actions/media-playback-start.svg"/></td><td width="400">:/actions/media-playback-start.svg</td><td width="400">tango-icons/actions/media-playback-start.svg</td><td width="200">media-playback-start</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-playback-stop.png" alt="tango-icons/actions/media-playback-stop.svg"/></td><td width="400">:/actions/media-playback-stop.svg</td><td width="400">tango-icons/actions/media-playback-stop.svg</td><td width="200">media-playback-stop</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-record.png" alt="tango-icons/actions/media-record.svg"/></td><td width="400">:/actions/media-record.svg</td><td width="400">tango-icons/actions/media-record.svg</td><td width="200">media-record</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-seek-backward.png" alt="tango-icons/actions/media-seek-backward.svg"/></td><td width="400">:/actions/media-seek-backward.svg</td><td width="400">tango-icons/actions/media-seek-backward.svg</td><td width="200">media-seek-backward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-seek-forward.png" alt="tango-icons/actions/media-seek-forward.svg"/></td><td width="400">:/actions/media-seek-forward.svg</td><td width="400">tango-icons/actions/media-seek-forward.svg</td><td width="200">media-seek-forward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-skip-backward.png" alt="tango-icons/actions/media-skip-backward.svg"/></td><td width="400">:/actions/media-skip-backward.svg</td><td width="400">tango-icons/actions/media-skip-backward.svg</td><td width="200">media-skip-backward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-skip-forward.png" alt="tango-icons/actions/media-skip-forward.svg"/></td><td width="400">:/actions/media-skip-forward.svg</td><td width="400">tango-icons/actions/media-skip-forward.svg</td><td width="200">media-skip-forward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/process-stop.png" alt="tango-icons/actions/process-stop.svg"/></td><td width="400">:/actions/process-stop.svg</td><td width="400">tango-icons/actions/process-stop.svg</td><td width="200">process-stop</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/system-lock-screen.png" alt="tango-icons/actions/system-lock-screen.svg"/></td><td width="400">:/actions/system-lock-screen.svg</td><td width="400">tango-icons/actions/system-lock-screen.svg</td><td width="200">system-lock-screen</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/system-log-out.png" alt="tango-icons/actions/system-log-out.svg"/></td><td width="400">:/actions/system-log-out.svg</td><td width="400">tango-icons/actions/system-log-out.svg</td><td width="200">system-log-out</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/system-search.png" alt="tango-icons/actions/system-search.svg"/></td><td width="400">:/actions/system-search.svg</td><td width="400">tango-icons/actions/system-search.svg</td><td width="200">system-search</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/system-shutdown.png" alt="tango-icons/actions/system-shutdown.svg"/></td><td width="400">:/actions/system-shutdown.svg</td><td width="400">tango-icons/actions/system-shutdown.svg</td><td width="200">system-shutdown</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/tab-new.png" alt="tango-icons/actions/tab-new.svg"/></td><td width="400">:/actions/tab-new.svg</td><td width="400">tango-icons/actions/tab-new.svg</td><td width="200">tab-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/view-fullscreen.png" alt="tango-icons/actions/view-fullscreen.svg"/></td><td width="400">:/actions/view-fullscreen.svg</td><td width="400">tango-icons/actions/view-fullscreen.svg</td><td width="200">view-fullscreen</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/view-refresh.png" alt="tango-icons/actions/view-refresh.svg"/></td><td width="400">:/actions/view-refresh.svg</td><td width="400">tango-icons/actions/view-refresh.svg</td><td width="200">view-refresh</td></tr>
 </table>
 <h2><a name="tango-icons/apps">:/apps/ (tango-icons/apps)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/apps/" Directory: "tango-icons/apps"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-system-windows.png" alt="tango-icons/apps/preferences-system-windows.svg"/></td><td width="400">:/apps/preferences-system-windows.svg</td><td width="400">tango-icons/apps/preferences-system-windows.svg</td><td width="200">preferences-system-windows</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-theme.png" alt="tango-icons/apps/preferences-desktop-theme.svg"/></td><td width="400">:/apps/preferences-desktop-theme.svg</td><td width="400">tango-icons/apps/preferences-desktop-theme.svg</td><td width="200">preferences-desktop-theme</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/internet-group-chat.png" alt="tango-icons/apps/internet-group-chat.svg"/></td><td width="400">:/apps/internet-group-chat.svg</td><td width="400">tango-icons/apps/internet-group-chat.svg</td><td width="200">internet-group-chat</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-locale.png" alt="tango-icons/apps/preferences-desktop-locale.svg"/></td><td width="400">:/apps/preferences-desktop-locale.svg</td><td width="400">tango-icons/apps/preferences-desktop-locale.svg</td><td width="200">preferences-desktop-locale</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-remote-desktop.png" alt="tango-icons/apps/preferences-desktop-remote-desktop.svg"/></td><td width="400">:/apps/preferences-desktop-remote-desktop.svg</td><td width="400">tango-icons/apps/preferences-desktop-remote-desktop.svg</td><td width="200">preferences-desktop-remote-desktop</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/accessories-calculator.png" alt="tango-icons/apps/accessories-calculator.svg"/></td><td width="400">:/apps/accessories-calculator.svg</td><td width="400">tango-icons/apps/accessories-calculator.svg</td><td width="200">accessories-calculator</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/accessories-character-map.png" alt="tango-icons/apps/accessories-character-map.svg"/></td><td width="400">:/apps/accessories-character-map.svg</td><td width="400">tango-icons/apps/accessories-character-map.svg</td><td width="200">accessories-character-map</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/accessories-text-editor.png" alt="tango-icons/apps/accessories-text-editor.svg"/></td><td width="400">:/apps/accessories-text-editor.svg</td><td width="400">tango-icons/apps/accessories-text-editor.svg</td><td width="200">accessories-text-editor</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/help-browser.png" alt="tango-icons/apps/help-browser.svg"/></td><td width="400">:/apps/help-browser.svg</td><td width="400">tango-icons/apps/help-browser.svg</td><td width="200">help-browser</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-system-network-proxy.png" alt="tango-icons/apps/preferences-system-network-proxy.svg"/></td><td width="400">:/apps/preferences-system-network-proxy.svg</td><td width="400">tango-icons/apps/preferences-system-network-proxy.svg</td><td width="200">preferences-system-network-proxy</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/internet-group-chat.png" alt="tango-icons/apps/internet-group-chat.svg"/></td><td width="400">:/apps/internet-group-chat.svg</td><td width="400">tango-icons/apps/internet-group-chat.svg</td><td width="200">internet-group-chat</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/internet-mail.png" alt="tango-icons/apps/internet-mail.svg"/></td><td width="400">:/apps/internet-mail.svg</td><td width="400">tango-icons/apps/internet-mail.svg</td><td width="200">internet-mail</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/internet-news-reader.png" alt="tango-icons/apps/internet-news-reader.svg"/></td><td width="400">:/apps/internet-news-reader.svg</td><td width="400">tango-icons/apps/internet-news-reader.svg</td><td width="200">internet-news-reader</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/internet-web-browser.png" alt="tango-icons/apps/internet-web-browser.svg"/></td><td width="400">:/apps/internet-web-browser.svg</td><td width="400">tango-icons/apps/internet-web-browser.svg</td><td width="200">internet-web-browser</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/office-calendar.png" alt="tango-icons/apps/office-calendar.svg"/></td><td width="400">:/apps/office-calendar.svg</td><td width="400">tango-icons/apps/office-calendar.svg</td><td width="200">office-calendar</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-accessibility.png" alt="tango-icons/apps/preferences-desktop-accessibility.svg"/></td><td width="400">:/apps/preferences-desktop-accessibility.svg</td><td width="400">tango-icons/apps/preferences-desktop-accessibility.svg</td><td width="200">preferences-desktop-accessibility</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-font.png" alt="tango-icons/apps/preferences-desktop-font.svg"/></td><td width="400">:/apps/preferences-desktop-font.svg</td><td width="400">tango-icons/apps/preferences-desktop-font.svg</td><td width="200">preferences-desktop-font</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/system-users.png" alt="tango-icons/apps/system-users.svg"/></td><td width="400">:/apps/system-users.svg</td><td width="400">tango-icons/apps/system-users.svg</td><td width="200">system-users</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/internet-mail.png" alt="tango-icons/apps/internet-mail.svg"/></td><td width="400">:/apps/internet-mail.svg</td><td width="400">tango-icons/apps/internet-mail.svg</td><td width="200">internet-mail</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/system-file-manager.png" alt="tango-icons/apps/system-file-manager.svg"/></td><td width="400">:/apps/system-file-manager.svg</td><td width="400">tango-icons/apps/system-file-manager.svg</td><td width="200">system-file-manager</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/system-installer.png" alt="tango-icons/apps/system-installer.svg"/></td><td width="400">:/apps/system-installer.svg</td><td width="400">tango-icons/apps/system-installer.svg</td><td width="200">system-installer</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/system-software-update.png" alt="tango-icons/apps/system-software-update.svg"/></td><td width="400">:/apps/system-software-update.svg</td><td width="400">tango-icons/apps/system-software-update.svg</td><td width="200">system-software-update</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-assistive-technology.png" alt="tango-icons/apps/preferences-desktop-assistive-technology.svg"/></td><td width="400">:/apps/preferences-desktop-assistive-technology.svg</td><td width="400">tango-icons/apps/preferences-desktop-assistive-technology.svg</td><td width="200">preferences-desktop-assistive-technology</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-font.png" alt="tango-icons/apps/preferences-desktop-font.svg"/></td><td width="400">:/apps/preferences-desktop-font.svg</td><td width="400">tango-icons/apps/preferences-desktop-font.svg</td><td width="200">preferences-desktop-font</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-keyboard-shortcuts.png" alt="tango-icons/apps/preferences-desktop-keyboard-shortcuts.svg"/></td><td width="400">:/apps/preferences-desktop-keyboard-shortcuts.svg</td><td width="400">tango-icons/apps/preferences-desktop-keyboard-shortcuts.svg</td><td width="200">preferences-desktop-keyboard-shortcuts</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-locale.png" alt="tango-icons/apps/preferences-desktop-locale.svg"/></td><td width="400">:/apps/preferences-desktop-locale.svg</td><td width="400">tango-icons/apps/preferences-desktop-locale.svg</td><td width="200">preferences-desktop-locale</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-multimedia.png" alt="tango-icons/apps/preferences-desktop-multimedia.svg"/></td><td width="400">:/apps/preferences-desktop-multimedia.svg</td><td width="400">tango-icons/apps/preferences-desktop-multimedia.svg</td><td width="200">preferences-desktop-multimedia</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-remote-desktop.png" alt="tango-icons/apps/preferences-desktop-remote-desktop.svg"/></td><td width="400">:/apps/preferences-desktop-remote-desktop.svg</td><td width="400">tango-icons/apps/preferences-desktop-remote-desktop.svg</td><td width="200">preferences-desktop-remote-desktop</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-screensaver.png" alt="tango-icons/apps/preferences-desktop-screensaver.svg"/></td><td width="400">:/apps/preferences-desktop-screensaver.svg</td><td width="400">tango-icons/apps/preferences-desktop-screensaver.svg</td><td width="200">preferences-desktop-screensaver</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-theme.png" alt="tango-icons/apps/preferences-desktop-theme.svg"/></td><td width="400">:/apps/preferences-desktop-theme.svg</td><td width="400">tango-icons/apps/preferences-desktop-theme.svg</td><td width="200">preferences-desktop-theme</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-wallpaper.png" alt="tango-icons/apps/preferences-desktop-wallpaper.svg"/></td><td width="400">:/apps/preferences-desktop-wallpaper.svg</td><td width="400">tango-icons/apps/preferences-desktop-wallpaper.svg</td><td width="200">preferences-desktop-wallpaper</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/office-calendar.png" alt="tango-icons/apps/office-calendar.svg"/></td><td width="400">:/apps/office-calendar.svg</td><td width="400">tango-icons/apps/office-calendar.svg</td><td width="200">office-calendar</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-system-network-proxy.png" alt="tango-icons/apps/preferences-system-network-proxy.svg"/></td><td width="400">:/apps/preferences-system-network-proxy.svg</td><td width="400">tango-icons/apps/preferences-system-network-proxy.svg</td><td width="200">preferences-system-network-proxy</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-system-session.png" alt="tango-icons/apps/preferences-system-session.svg"/></td><td width="400">:/apps/preferences-system-session.svg</td><td width="400">tango-icons/apps/preferences-system-session.svg</td><td width="200">preferences-system-session</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-multimedia.png" alt="tango-icons/apps/preferences-desktop-multimedia.svg"/></td><td width="400">:/apps/preferences-desktop-multimedia.svg</td><td width="400">tango-icons/apps/preferences-desktop-multimedia.svg</td><td width="200">preferences-desktop-multimedia</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-keyboard-shortcuts.png" alt="tango-icons/apps/preferences-desktop-keyboard-shortcuts.svg"/></td><td width="400">:/apps/preferences-desktop-keyboard-shortcuts.svg</td><td width="400">tango-icons/apps/preferences-desktop-keyboard-shortcuts.svg</td><td width="200">preferences-desktop-keyboard-shortcuts</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/accessories-calculator.png" alt="tango-icons/apps/accessories-calculator.svg"/></td><td width="400">:/apps/accessories-calculator.svg</td><td width="400">tango-icons/apps/accessories-calculator.svg</td><td width="200">accessories-calculator</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/utilities-terminal.png" alt="tango-icons/apps/utilities-terminal.svg"/></td><td width="400">:/apps/utilities-terminal.svg</td><td width="400">tango-icons/apps/utilities-terminal.svg</td><td width="200">utilities-terminal</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-system-windows.png" alt="tango-icons/apps/preferences-system-windows.svg"/></td><td width="400">:/apps/preferences-system-windows.svg</td><td width="400">tango-icons/apps/preferences-system-windows.svg</td><td width="200">preferences-system-windows</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/system-file-manager.png" alt="tango-icons/apps/system-file-manager.svg"/></td><td width="400">:/apps/system-file-manager.svg</td><td width="400">tango-icons/apps/system-file-manager.svg</td><td width="200">system-file-manager</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/system-installer.png" alt="tango-icons/apps/system-installer.svg"/></td><td width="400">:/apps/system-installer.svg</td><td width="400">tango-icons/apps/system-installer.svg</td><td width="200">system-installer</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/system-software-update.png" alt="tango-icons/apps/system-software-update.svg"/></td><td width="400">:/apps/system-software-update.svg</td><td width="400">tango-icons/apps/system-software-update.svg</td><td width="200">system-software-update</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/system-users.png" alt="tango-icons/apps/system-users.svg"/></td><td width="400">:/apps/system-users.svg</td><td width="400">tango-icons/apps/system-users.svg</td><td width="200">system-users</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/utilities-system-monitor.png" alt="tango-icons/apps/utilities-system-monitor.svg"/></td><td width="400">:/apps/utilities-system-monitor.svg</td><td width="400">tango-icons/apps/utilities-system-monitor.svg</td><td width="200">utilities-system-monitor</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/accessories-text-editor.png" alt="tango-icons/apps/accessories-text-editor.svg"/></td><td width="400">:/apps/accessories-text-editor.svg</td><td width="400">tango-icons/apps/accessories-text-editor.svg</td><td width="200">accessories-text-editor</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/accessories-character-map.png" alt="tango-icons/apps/accessories-character-map.svg"/></td><td width="400">:/apps/accessories-character-map.svg</td><td width="400">tango-icons/apps/accessories-character-map.svg</td><td width="200">accessories-character-map</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/internet-news-reader.png" alt="tango-icons/apps/internet-news-reader.svg"/></td><td width="400">:/apps/internet-news-reader.svg</td><td width="400">tango-icons/apps/internet-news-reader.svg</td><td width="200">internet-news-reader</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/utilities-terminal.png" alt="tango-icons/apps/utilities-terminal.svg"/></td><td width="400">:/apps/utilities-terminal.svg</td><td width="400">tango-icons/apps/utilities-terminal.svg</td><td width="200">utilities-terminal</td></tr>
 </table>
 <h2><a name="tango-icons/categories">:/categories/ (tango-icons/categories)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/categories/" Directory: "tango-icons/categories"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-accessories.png" alt="tango-icons/categories/applications-accessories.svg"/></td><td width="400">:/categories/applications-accessories.svg</td><td width="400">tango-icons/categories/applications-accessories.svg</td><td width="200">applications-accessories</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-development.png" alt="tango-icons/categories/applications-development.svg"/></td><td width="400">:/categories/applications-development.svg</td><td width="400">tango-icons/categories/applications-development.svg</td><td width="200">applications-development</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/preferences-system.png" alt="tango-icons/categories/preferences-system.svg"/></td><td width="400">:/categories/preferences-system.svg</td><td width="400">tango-icons/categories/preferences-system.svg</td><td width="200">preferences-system</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-system.png" alt="tango-icons/categories/applications-system.svg"/></td><td width="400">:/categories/applications-system.svg</td><td width="400">tango-icons/categories/applications-system.svg</td><td width="200">applications-system</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-games.png" alt="tango-icons/categories/applications-games.svg"/></td><td width="400">:/categories/applications-games.svg</td><td width="400">tango-icons/categories/applications-games.svg</td><td width="200">applications-games</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-office.png" alt="tango-icons/categories/applications-office.svg"/></td><td width="400">:/categories/applications-office.svg</td><td width="400">tango-icons/categories/applications-office.svg</td><td width="200">applications-office</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-graphics.png" alt="tango-icons/categories/applications-graphics.svg"/></td><td width="400">:/categories/applications-graphics.svg</td><td width="400">tango-icons/categories/applications-graphics.svg</td><td width="200">applications-graphics</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-multimedia.png" alt="tango-icons/categories/applications-multimedia.svg"/></td><td width="400">:/categories/applications-multimedia.svg</td><td width="400">tango-icons/categories/applications-multimedia.svg</td><td width="200">applications-multimedia</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-internet.png" alt="tango-icons/categories/applications-internet.svg"/></td><td width="400">:/categories/applications-internet.svg</td><td width="400">tango-icons/categories/applications-internet.svg</td><td width="200">applications-internet</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-accessories.png" alt="tango-icons/categories/applications-accessories.svg"/></td><td width="400">:/categories/applications-accessories.svg</td><td width="400">tango-icons/categories/applications-accessories.svg</td><td width="200">applications-accessories</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-multimedia.png" alt="tango-icons/categories/applications-multimedia.svg"/></td><td width="400">:/categories/applications-multimedia.svg</td><td width="400">tango-icons/categories/applications-multimedia.svg</td><td width="200">applications-multimedia</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-office.png" alt="tango-icons/categories/applications-office.svg"/></td><td width="400">:/categories/applications-office.svg</td><td width="400">tango-icons/categories/applications-office.svg</td><td width="200">applications-office</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-other.png" alt="tango-icons/categories/applications-other.svg"/></td><td width="400">:/categories/applications-other.svg</td><td width="400">tango-icons/categories/applications-other.svg</td><td width="200">applications-other</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-system.png" alt="tango-icons/categories/applications-system.svg"/></td><td width="400">:/categories/applications-system.svg</td><td width="400">tango-icons/categories/applications-system.svg</td><td width="200">applications-system</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/preferences-desktop-peripherals.png" alt="tango-icons/categories/preferences-desktop-peripherals.svg"/></td><td width="400">:/categories/preferences-desktop-peripherals.svg</td><td width="400">tango-icons/categories/preferences-desktop-peripherals.svg</td><td width="200">preferences-desktop-peripherals</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/preferences-desktop.png" alt="tango-icons/categories/preferences-desktop.svg"/></td><td width="400">:/categories/preferences-desktop.svg</td><td width="400">tango-icons/categories/preferences-desktop.svg</td><td width="200">preferences-desktop</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-other.png" alt="tango-icons/categories/applications-other.svg"/></td><td width="400">:/categories/applications-other.svg</td><td width="400">tango-icons/categories/applications-other.svg</td><td width="200">applications-other</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/preferences-system.png" alt="tango-icons/categories/preferences-system.svg"/></td><td width="400">:/categories/preferences-system.svg</td><td width="400">tango-icons/categories/preferences-system.svg</td><td width="200">preferences-system</td></tr>
 </table>
-<h2><a name="tango-icons/places">:/places/ (tango-icons/places)</a></h2>
+<h2><a name="tango-icons/devices">:/devices/ (tango-icons/devices)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/places/" Directory: "tango-icons/places"</th>
+<th colspan="4">Resource: ":/devices/" Directory: "tango-icons/devices"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/user-home.png" alt="tango-icons/places/user-home.svg"/></td><td width="400">:/places/user-home.svg</td><td width="400">tango-icons/places/user-home.svg</td><td width="200">user-home</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/start-here.png" alt="tango-icons/places/start-here.svg"/></td><td width="400">:/places/start-here.svg</td><td width="400">tango-icons/places/start-here.svg</td><td width="200">start-here</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/user-desktop.png" alt="tango-icons/places/user-desktop.svg"/></td><td width="400">:/places/user-desktop.svg</td><td width="400">tango-icons/places/user-desktop.svg</td><td width="200">user-desktop</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/network-workgroup.png" alt="tango-icons/places/network-workgroup.svg"/></td><td width="400">:/places/network-workgroup.svg</td><td width="400">tango-icons/places/network-workgroup.svg</td><td width="200">network-workgroup</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/user-trash.png" alt="tango-icons/places/user-trash.svg"/></td><td width="400">:/places/user-trash.svg</td><td width="400">tango-icons/places/user-trash.svg</td><td width="200">user-trash</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/network-server.png" alt="tango-icons/places/network-server.svg"/></td><td width="400">:/places/network-server.svg</td><td width="400">tango-icons/places/network-server.svg</td><td width="200">network-server</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/folder-remote.png" alt="tango-icons/places/folder-remote.svg"/></td><td width="400">:/places/folder-remote.svg</td><td width="400">tango-icons/places/folder-remote.svg</td><td width="200">folder-remote</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/folder.png" alt="tango-icons/places/folder.svg"/></td><td width="400">:/places/folder.svg</td><td width="400">tango-icons/places/folder.svg</td><td width="200">folder</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/folder-saved-search.png" alt="tango-icons/places/folder-saved-search.svg"/></td><td width="400">:/places/folder-saved-search.svg</td><td width="400">tango-icons/places/folder-saved-search.svg</td><td width="200">folder-saved-search</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/audio-card.png" alt="tango-icons/devices/audio-card.svg"/></td><td width="400">:/devices/audio-card.svg</td><td width="400">tango-icons/devices/audio-card.svg</td><td width="200">audio-card</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/audio-input-microphone.png" alt="tango-icons/devices/audio-input-microphone.svg"/></td><td width="400">:/devices/audio-input-microphone.svg</td><td width="400">tango-icons/devices/audio-input-microphone.svg</td><td width="200">audio-input-microphone</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/battery.png" alt="tango-icons/devices/battery.svg"/></td><td width="400">:/devices/battery.svg</td><td width="400">tango-icons/devices/battery.svg</td><td width="200">battery</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/camera-photo.png" alt="tango-icons/devices/camera-photo.svg"/></td><td width="400">:/devices/camera-photo.svg</td><td width="400">tango-icons/devices/camera-photo.svg</td><td width="200">camera-photo</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/camera-video.png" alt="tango-icons/devices/camera-video.svg"/></td><td width="400">:/devices/camera-video.svg</td><td width="400">tango-icons/devices/camera-video.svg</td><td width="200">camera-video</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/computer.png" alt="tango-icons/devices/computer.svg"/></td><td width="400">:/devices/computer.svg</td><td width="400">tango-icons/devices/computer.svg</td><td width="200">computer</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/drive-harddisk.png" alt="tango-icons/devices/drive-harddisk.svg"/></td><td width="400">:/devices/drive-harddisk.svg</td><td width="400">tango-icons/devices/drive-harddisk.svg</td><td width="200">drive-harddisk</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/drive-optical.png" alt="tango-icons/devices/drive-optical.svg"/></td><td width="400">:/devices/drive-optical.svg</td><td width="400">tango-icons/devices/drive-optical.svg</td><td width="200">drive-optical</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/drive-removable-media.png" alt="tango-icons/devices/drive-removable-media.svg"/></td><td width="400">:/devices/drive-removable-media.svg</td><td width="400">tango-icons/devices/drive-removable-media.svg</td><td width="200">drive-removable-media</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/input-gaming.png" alt="tango-icons/devices/input-gaming.svg"/></td><td width="400">:/devices/input-gaming.svg</td><td width="400">tango-icons/devices/input-gaming.svg</td><td width="200">input-gaming</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/input-keyboard.png" alt="tango-icons/devices/input-keyboard.svg"/></td><td width="400">:/devices/input-keyboard.svg</td><td width="400">tango-icons/devices/input-keyboard.svg</td><td width="200">input-keyboard</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/input-mouse.png" alt="tango-icons/devices/input-mouse.svg"/></td><td width="400">:/devices/input-mouse.svg</td><td width="400">tango-icons/devices/input-mouse.svg</td><td width="200">input-mouse</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/media-flash.png" alt="tango-icons/devices/media-flash.svg"/></td><td width="400">:/devices/media-flash.svg</td><td width="400">tango-icons/devices/media-flash.svg</td><td width="200">media-flash</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/media-floppy.png" alt="tango-icons/devices/media-floppy.svg"/></td><td width="400">:/devices/media-floppy.svg</td><td width="400">tango-icons/devices/media-floppy.svg</td><td width="200">media-floppy</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/media-optical.png" alt="tango-icons/devices/media-optical.svg"/></td><td width="400">:/devices/media-optical.svg</td><td width="400">tango-icons/devices/media-optical.svg</td><td width="200">media-optical</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/multimedia-player.png" alt="tango-icons/devices/multimedia-player.svg"/></td><td width="400">:/devices/multimedia-player.svg</td><td width="400">tango-icons/devices/multimedia-player.svg</td><td width="200">multimedia-player</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/network-wired.png" alt="tango-icons/devices/network-wired.svg"/></td><td width="400">:/devices/network-wired.svg</td><td width="400">tango-icons/devices/network-wired.svg</td><td width="200">network-wired</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/network-wireless.png" alt="tango-icons/devices/network-wireless.svg"/></td><td width="400">:/devices/network-wireless.svg</td><td width="400">tango-icons/devices/network-wireless.svg</td><td width="200">network-wireless</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/printer.png" alt="tango-icons/devices/printer.svg"/></td><td width="400">:/devices/printer.svg</td><td width="400">tango-icons/devices/printer.svg</td><td width="200">printer</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/video-display.png" alt="tango-icons/devices/video-display.svg"/></td><td width="400">:/devices/video-display.svg</td><td width="400">tango-icons/devices/video-display.svg</td><td width="200">video-display</td></tr>
+</table>
+<h2><a name="tango-icons/emblems">:/emblems/ (tango-icons/emblems)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/emblems/" Directory: "tango-icons/emblems"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-favorite.png" alt="tango-icons/emblems/emblem-favorite.svg"/></td><td width="400">:/emblems/emblem-favorite.svg</td><td width="400">tango-icons/emblems/emblem-favorite.svg</td><td width="200">emblem-favorite</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-important.png" alt="tango-icons/emblems/emblem-important.svg"/></td><td width="400">:/emblems/emblem-important.svg</td><td width="400">tango-icons/emblems/emblem-important.svg</td><td width="200">emblem-important</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-photos.png" alt="tango-icons/emblems/emblem-photos.svg"/></td><td width="400">:/emblems/emblem-photos.svg</td><td width="400">tango-icons/emblems/emblem-photos.svg</td><td width="200">emblem-photos</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-readonly.png" alt="tango-icons/emblems/emblem-readonly.svg"/></td><td width="400">:/emblems/emblem-readonly.svg</td><td width="400">tango-icons/emblems/emblem-readonly.svg</td><td width="200">emblem-readonly</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-symbolic-link.png" alt="tango-icons/emblems/emblem-symbolic-link.svg"/></td><td width="400">:/emblems/emblem-symbolic-link.svg</td><td width="400">tango-icons/emblems/emblem-symbolic-link.svg</td><td width="200">emblem-symbolic-link</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-system.png" alt="tango-icons/emblems/emblem-system.svg"/></td><td width="400">:/emblems/emblem-system.svg</td><td width="400">tango-icons/emblems/emblem-system.svg</td><td width="200">emblem-system</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-unreadable.png" alt="tango-icons/emblems/emblem-unreadable.svg"/></td><td width="400">:/emblems/emblem-unreadable.svg</td><td width="400">tango-icons/emblems/emblem-unreadable.svg</td><td width="200">emblem-unreadable</td></tr>
 </table>
 <h2><a name="tango-icons/emotes">:/emotes/ (tango-icons/emotes)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/emotes/" Directory: "tango-icons/emotes"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-cool.png" alt="tango-icons/emotes/face-cool.svg"/></td><td width="400">:/emotes/face-cool.svg</td><td width="400">tango-icons/emotes/face-cool.svg</td><td width="200">face-cool</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-angel.png" alt="tango-icons/emotes/face-angel.svg"/></td><td width="400">:/emotes/face-angel.svg</td><td width="400">tango-icons/emotes/face-angel.svg</td><td width="200">face-angel</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-smile.png" alt="tango-icons/emotes/face-smile.svg"/></td><td width="400">:/emotes/face-smile.svg</td><td width="400">tango-icons/emotes/face-smile.svg</td><td width="200">face-smile</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-smile-big.png" alt="tango-icons/emotes/face-smile-big.svg"/></td><td width="400">:/emotes/face-smile-big.svg</td><td width="400">tango-icons/emotes/face-smile-big.svg</td><td width="200">face-smile-big</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-grin.png" alt="tango-icons/emotes/face-grin.svg"/></td><td width="400">:/emotes/face-grin.svg</td><td width="400">tango-icons/emotes/face-grin.svg</td><td width="200">face-grin</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-cool.png" alt="tango-icons/emotes/face-cool.svg"/></td><td width="400">:/emotes/face-cool.svg</td><td width="400">tango-icons/emotes/face-cool.svg</td><td width="200">face-cool</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-crying.png" alt="tango-icons/emotes/face-crying.svg"/></td><td width="400">:/emotes/face-crying.svg</td><td width="400">tango-icons/emotes/face-crying.svg</td><td width="200">face-crying</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-devilish.png" alt="tango-icons/emotes/face-devilish.svg"/></td><td width="400">:/emotes/face-devilish.svg</td><td width="400">tango-icons/emotes/face-devilish.svg</td><td width="200">face-devilish</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-glasses.png" alt="tango-icons/emotes/face-glasses.svg"/></td><td width="400">:/emotes/face-glasses.svg</td><td width="400">tango-icons/emotes/face-glasses.svg</td><td width="200">face-glasses</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-grin.png" alt="tango-icons/emotes/face-grin.svg"/></td><td width="400">:/emotes/face-grin.svg</td><td width="400">tango-icons/emotes/face-grin.svg</td><td width="200">face-grin</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-kiss.png" alt="tango-icons/emotes/face-kiss.svg"/></td><td width="400">:/emotes/face-kiss.svg</td><td width="400">tango-icons/emotes/face-kiss.svg</td><td width="200">face-kiss</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-monkey.png" alt="tango-icons/emotes/face-monkey.svg"/></td><td width="400">:/emotes/face-monkey.svg</td><td width="400">tango-icons/emotes/face-monkey.svg</td><td width="200">face-monkey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-plain.png" alt="tango-icons/emotes/face-plain.svg"/></td><td width="400">:/emotes/face-plain.svg</td><td width="400">tango-icons/emotes/face-plain.svg</td><td width="200">face-plain</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-sad.png" alt="tango-icons/emotes/face-sad.svg"/></td><td width="400">:/emotes/face-sad.svg</td><td width="400">tango-icons/emotes/face-sad.svg</td><td width="200">face-sad</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-devilish.png" alt="tango-icons/emotes/face-devilish.svg"/></td><td width="400">:/emotes/face-devilish.svg</td><td width="400">tango-icons/emotes/face-devilish.svg</td><td width="200">face-devilish</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-smile-big.png" alt="tango-icons/emotes/face-smile-big.svg"/></td><td width="400">:/emotes/face-smile-big.svg</td><td width="400">tango-icons/emotes/face-smile-big.svg</td><td width="200">face-smile-big</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-smile.png" alt="tango-icons/emotes/face-smile.svg"/></td><td width="400">:/emotes/face-smile.svg</td><td width="400">tango-icons/emotes/face-smile.svg</td><td width="200">face-smile</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-surprise.png" alt="tango-icons/emotes/face-surprise.svg"/></td><td width="400">:/emotes/face-surprise.svg</td><td width="400">tango-icons/emotes/face-surprise.svg</td><td width="200">face-surprise</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-kiss.png" alt="tango-icons/emotes/face-kiss.svg"/></td><td width="400">:/emotes/face-kiss.svg</td><td width="400">tango-icons/emotes/face-kiss.svg</td><td width="200">face-kiss</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-plain.png" alt="tango-icons/emotes/face-plain.svg"/></td><td width="400">:/emotes/face-plain.svg</td><td width="400">tango-icons/emotes/face-plain.svg</td><td width="200">face-plain</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-wink.png" alt="tango-icons/emotes/face-wink.svg"/></td><td width="400">:/emotes/face-wink.svg</td><td width="400">tango-icons/emotes/face-wink.svg</td><td width="200">face-wink</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-crying.png" alt="tango-icons/emotes/face-crying.svg"/></td><td width="400">:/emotes/face-crying.svg</td><td width="400">tango-icons/emotes/face-crying.svg</td><td width="200">face-crying</td></tr>
+</table>
+<h2><a name="tango-icons/mimetypes">:/mimetypes/ (tango-icons/mimetypes)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/mimetypes/" Directory: "tango-icons/mimetypes"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/application-certificate.png" alt="tango-icons/mimetypes/application-certificate.svg"/></td><td width="400">:/mimetypes/application-certificate.svg</td><td width="400">tango-icons/mimetypes/application-certificate.svg</td><td width="200">application-certificate</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/application-x-executable.png" alt="tango-icons/mimetypes/application-x-executable.svg"/></td><td width="400">:/mimetypes/application-x-executable.svg</td><td width="400">tango-icons/mimetypes/application-x-executable.svg</td><td width="200">application-x-executable</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/audio-x-generic.png" alt="tango-icons/mimetypes/audio-x-generic.svg"/></td><td width="400">:/mimetypes/audio-x-generic.svg</td><td width="400">tango-icons/mimetypes/audio-x-generic.svg</td><td width="200">audio-x-generic</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/font-x-generic.png" alt="tango-icons/mimetypes/font-x-generic.svg"/></td><td width="400">:/mimetypes/font-x-generic.svg</td><td width="400">tango-icons/mimetypes/font-x-generic.svg</td><td width="200">font-x-generic</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/image-x-generic.png" alt="tango-icons/mimetypes/image-x-generic.svg"/></td><td width="400">:/mimetypes/image-x-generic.svg</td><td width="400">tango-icons/mimetypes/image-x-generic.svg</td><td width="200">image-x-generic</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/package-x-generic.png" alt="tango-icons/mimetypes/package-x-generic.svg"/></td><td width="400">:/mimetypes/package-x-generic.svg</td><td width="400">tango-icons/mimetypes/package-x-generic.svg</td><td width="200">package-x-generic</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/text-html.png" alt="tango-icons/mimetypes/text-html.svg"/></td><td width="400">:/mimetypes/text-html.svg</td><td width="400">tango-icons/mimetypes/text-html.svg</td><td width="200">text-html</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/text-x-generic-template.png" alt="tango-icons/mimetypes/text-x-generic-template.svg"/></td><td width="400">:/mimetypes/text-x-generic-template.svg</td><td width="400">tango-icons/mimetypes/text-x-generic-template.svg</td><td width="200">text-x-generic-template</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/text-x-generic.png" alt="tango-icons/mimetypes/text-x-generic.svg"/></td><td width="400">:/mimetypes/text-x-generic.svg</td><td width="400">tango-icons/mimetypes/text-x-generic.svg</td><td width="200">text-x-generic</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/text-x-script.png" alt="tango-icons/mimetypes/text-x-script.svg"/></td><td width="400">:/mimetypes/text-x-script.svg</td><td width="400">tango-icons/mimetypes/text-x-script.svg</td><td width="200">text-x-script</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/video-x-generic.png" alt="tango-icons/mimetypes/video-x-generic.svg"/></td><td width="400">:/mimetypes/video-x-generic.svg</td><td width="400">tango-icons/mimetypes/video-x-generic.svg</td><td width="200">video-x-generic</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-address-book.png" alt="tango-icons/mimetypes/x-office-address-book.svg"/></td><td width="400">:/mimetypes/x-office-address-book.svg</td><td width="400">tango-icons/mimetypes/x-office-address-book.svg</td><td width="200">x-office-address-book</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-calendar.png" alt="tango-icons/mimetypes/x-office-calendar.svg"/></td><td width="400">:/mimetypes/x-office-calendar.svg</td><td width="400">tango-icons/mimetypes/x-office-calendar.svg</td><td width="200">x-office-calendar</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-document-template.png" alt="tango-icons/mimetypes/x-office-document-template.svg"/></td><td width="400">:/mimetypes/x-office-document-template.svg</td><td width="400">tango-icons/mimetypes/x-office-document-template.svg</td><td width="200">x-office-document-template</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-document.png" alt="tango-icons/mimetypes/x-office-document.svg"/></td><td width="400">:/mimetypes/x-office-document.svg</td><td width="400">tango-icons/mimetypes/x-office-document.svg</td><td width="200">x-office-document</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-drawing-template.png" alt="tango-icons/mimetypes/x-office-drawing-template.svg"/></td><td width="400">:/mimetypes/x-office-drawing-template.svg</td><td width="400">tango-icons/mimetypes/x-office-drawing-template.svg</td><td width="200">x-office-drawing-template</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-drawing.png" alt="tango-icons/mimetypes/x-office-drawing.svg"/></td><td width="400">:/mimetypes/x-office-drawing.svg</td><td width="400">tango-icons/mimetypes/x-office-drawing.svg</td><td width="200">x-office-drawing</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-presentation-template.png" alt="tango-icons/mimetypes/x-office-presentation-template.svg"/></td><td width="400">:/mimetypes/x-office-presentation-template.svg</td><td width="400">tango-icons/mimetypes/x-office-presentation-template.svg</td><td width="200">x-office-presentation-template</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-presentation.png" alt="tango-icons/mimetypes/x-office-presentation.svg"/></td><td width="400">:/mimetypes/x-office-presentation.svg</td><td width="400">tango-icons/mimetypes/x-office-presentation.svg</td><td width="200">x-office-presentation</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-spreadsheet-template.png" alt="tango-icons/mimetypes/x-office-spreadsheet-template.svg"/></td><td width="400">:/mimetypes/x-office-spreadsheet-template.svg</td><td width="400">tango-icons/mimetypes/x-office-spreadsheet-template.svg</td><td width="200">x-office-spreadsheet-template</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-spreadsheet.png" alt="tango-icons/mimetypes/x-office-spreadsheet.svg"/></td><td width="400">:/mimetypes/x-office-spreadsheet.svg</td><td width="400">tango-icons/mimetypes/x-office-spreadsheet.svg</td><td width="200">x-office-spreadsheet</td></tr>
+</table>
+<h2><a name="tango-icons/places">:/places/ (tango-icons/places)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/places/" Directory: "tango-icons/places"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/folder-remote.png" alt="tango-icons/places/folder-remote.svg"/></td><td width="400">:/places/folder-remote.svg</td><td width="400">tango-icons/places/folder-remote.svg</td><td width="200">folder-remote</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/folder-saved-search.png" alt="tango-icons/places/folder-saved-search.svg"/></td><td width="400">:/places/folder-saved-search.svg</td><td width="400">tango-icons/places/folder-saved-search.svg</td><td width="200">folder-saved-search</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/folder.png" alt="tango-icons/places/folder.svg"/></td><td width="400">:/places/folder.svg</td><td width="400">tango-icons/places/folder.svg</td><td width="200">folder</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/network-server.png" alt="tango-icons/places/network-server.svg"/></td><td width="400">:/places/network-server.svg</td><td width="400">tango-icons/places/network-server.svg</td><td width="200">network-server</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/network-workgroup.png" alt="tango-icons/places/network-workgroup.svg"/></td><td width="400">:/places/network-workgroup.svg</td><td width="400">tango-icons/places/network-workgroup.svg</td><td width="200">network-workgroup</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/start-here.png" alt="tango-icons/places/start-here.svg"/></td><td width="400">:/places/start-here.svg</td><td width="400">tango-icons/places/start-here.svg</td><td width="200">start-here</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/user-desktop.png" alt="tango-icons/places/user-desktop.svg"/></td><td width="400">:/places/user-desktop.svg</td><td width="400">tango-icons/places/user-desktop.svg</td><td width="200">user-desktop</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/user-home.png" alt="tango-icons/places/user-home.svg"/></td><td width="400">:/places/user-home.svg</td><td width="400">tango-icons/places/user-home.svg</td><td width="200">user-home</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/user-trash.png" alt="tango-icons/places/user-trash.svg"/></td><td width="400">:/places/user-trash.svg</td><td width="400">tango-icons/places/user-trash.svg</td><td width="200">user-trash</td></tr>
+</table>
+<h2><a name="tango-icons/status">:/status/ (tango-icons/status)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/status/" Directory: "tango-icons/status"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/audio-volume-high.png" alt="tango-icons/status/audio-volume-high.svg"/></td><td width="400">:/status/audio-volume-high.svg</td><td width="400">tango-icons/status/audio-volume-high.svg</td><td width="200">audio-volume-high</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/audio-volume-low.png" alt="tango-icons/status/audio-volume-low.svg"/></td><td width="400">:/status/audio-volume-low.svg</td><td width="400">tango-icons/status/audio-volume-low.svg</td><td width="200">audio-volume-low</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/audio-volume-medium.png" alt="tango-icons/status/audio-volume-medium.svg"/></td><td width="400">:/status/audio-volume-medium.svg</td><td width="400">tango-icons/status/audio-volume-medium.svg</td><td width="200">audio-volume-medium</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/audio-volume-muted.png" alt="tango-icons/status/audio-volume-muted.svg"/></td><td width="400">:/status/audio-volume-muted.svg</td><td width="400">tango-icons/status/audio-volume-muted.svg</td><td width="200">audio-volume-muted</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/battery-caution.png" alt="tango-icons/status/battery-caution.svg"/></td><td width="400">:/status/battery-caution.svg</td><td width="400">tango-icons/status/battery-caution.svg</td><td width="200">battery-caution</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/dialog-error.png" alt="tango-icons/status/dialog-error.svg"/></td><td width="400">:/status/dialog-error.svg</td><td width="400">tango-icons/status/dialog-error.svg</td><td width="200">dialog-error</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/dialog-information.png" alt="tango-icons/status/dialog-information.svg"/></td><td width="400">:/status/dialog-information.svg</td><td width="400">tango-icons/status/dialog-information.svg</td><td width="200">dialog-information</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/dialog-warning.png" alt="tango-icons/status/dialog-warning.svg"/></td><td width="400">:/status/dialog-warning.svg</td><td width="400">tango-icons/status/dialog-warning.svg</td><td width="200">dialog-warning</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/folder-drag-accept.png" alt="tango-icons/status/folder-drag-accept.svg"/></td><td width="400">:/status/folder-drag-accept.svg</td><td width="400">tango-icons/status/folder-drag-accept.svg</td><td width="200">folder-drag-accept</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/folder-open.png" alt="tango-icons/status/folder-open.svg"/></td><td width="400">:/status/folder-open.svg</td><td width="400">tango-icons/status/folder-open.svg</td><td width="200">folder-open</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/folder-visiting.png" alt="tango-icons/status/folder-visiting.svg"/></td><td width="400">:/status/folder-visiting.svg</td><td width="400">tango-icons/status/folder-visiting.svg</td><td width="200">folder-visiting</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/image-loading.png" alt="tango-icons/status/image-loading.svg"/></td><td width="400">:/status/image-loading.svg</td><td width="400">tango-icons/status/image-loading.svg</td><td width="200">image-loading</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/image-missing.png" alt="tango-icons/status/image-missing.svg"/></td><td width="400">:/status/image-missing.svg</td><td width="400">tango-icons/status/image-missing.svg</td><td width="200">image-missing</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/mail-attachment.png" alt="tango-icons/status/mail-attachment.svg"/></td><td width="400">:/status/mail-attachment.svg</td><td width="400">tango-icons/status/mail-attachment.svg</td><td width="200">mail-attachment</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-error.png" alt="tango-icons/status/network-error.svg"/></td><td width="400">:/status/network-error.svg</td><td width="400">tango-icons/status/network-error.svg</td><td width="200">network-error</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-idle.png" alt="tango-icons/status/network-idle.svg"/></td><td width="400">:/status/network-idle.svg</td><td width="400">tango-icons/status/network-idle.svg</td><td width="200">network-idle</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-offline.png" alt="tango-icons/status/network-offline.svg"/></td><td width="400">:/status/network-offline.svg</td><td width="400">tango-icons/status/network-offline.svg</td><td width="200">network-offline</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-receive.png" alt="tango-icons/status/network-receive.svg"/></td><td width="400">:/status/network-receive.svg</td><td width="400">tango-icons/status/network-receive.svg</td><td width="200">network-receive</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-transmit-receive.png" alt="tango-icons/status/network-transmit-receive.svg"/></td><td width="400">:/status/network-transmit-receive.svg</td><td width="400">tango-icons/status/network-transmit-receive.svg</td><td width="200">network-transmit-receive</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-transmit.png" alt="tango-icons/status/network-transmit.svg"/></td><td width="400">:/status/network-transmit.svg</td><td width="400">tango-icons/status/network-transmit.svg</td><td width="200">network-transmit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-wireless-encrypted.png" alt="tango-icons/status/network-wireless-encrypted.svg"/></td><td width="400">:/status/network-wireless-encrypted.svg</td><td width="400">tango-icons/status/network-wireless-encrypted.svg</td><td width="200">network-wireless-encrypted</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/printer-error.png" alt="tango-icons/status/printer-error.svg"/></td><td width="400">:/status/printer-error.svg</td><td width="400">tango-icons/status/printer-error.svg</td><td width="200">printer-error</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/software-update-available.png" alt="tango-icons/status/software-update-available.svg"/></td><td width="400">:/status/software-update-available.svg</td><td width="400">tango-icons/status/software-update-available.svg</td><td width="200">software-update-available</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/software-update-urgent.png" alt="tango-icons/status/software-update-urgent.svg"/></td><td width="400">:/status/software-update-urgent.svg</td><td width="400">tango-icons/status/software-update-urgent.svg</td><td width="200">software-update-urgent</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/user-trash-full.png" alt="tango-icons/status/user-trash-full.svg"/></td><td width="400">:/status/user-trash-full.svg</td><td width="400">tango-icons/status/user-trash-full.svg</td><td width="200">user-trash-full</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-clear-night.png" alt="tango-icons/status/weather-clear-night.svg"/></td><td width="400">:/status/weather-clear-night.svg</td><td width="400">tango-icons/status/weather-clear-night.svg</td><td width="200">weather-clear-night</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-clear.png" alt="tango-icons/status/weather-clear.svg"/></td><td width="400">:/status/weather-clear.svg</td><td width="400">tango-icons/status/weather-clear.svg</td><td width="200">weather-clear</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-few-clouds-night.png" alt="tango-icons/status/weather-few-clouds-night.svg"/></td><td width="400">:/status/weather-few-clouds-night.svg</td><td width="400">tango-icons/status/weather-few-clouds-night.svg</td><td width="200">weather-few-clouds-night</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-few-clouds.png" alt="tango-icons/status/weather-few-clouds.svg"/></td><td width="400">:/status/weather-few-clouds.svg</td><td width="400">tango-icons/status/weather-few-clouds.svg</td><td width="200">weather-few-clouds</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-overcast.png" alt="tango-icons/status/weather-overcast.svg"/></td><td width="400">:/status/weather-overcast.svg</td><td width="400">tango-icons/status/weather-overcast.svg</td><td width="200">weather-overcast</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-severe-alert.png" alt="tango-icons/status/weather-severe-alert.svg"/></td><td width="400">:/status/weather-severe-alert.svg</td><td width="400">tango-icons/status/weather-severe-alert.svg</td><td width="200">weather-severe-alert</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-showers-scattered.png" alt="tango-icons/status/weather-showers-scattered.svg"/></td><td width="400">:/status/weather-showers-scattered.svg</td><td width="400">tango-icons/status/weather-showers-scattered.svg</td><td width="200">weather-showers-scattered</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-showers.png" alt="tango-icons/status/weather-showers.svg"/></td><td width="400">:/status/weather-showers.svg</td><td width="400">tango-icons/status/weather-showers.svg</td><td width="200">weather-showers</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-snow.png" alt="tango-icons/status/weather-snow.svg"/></td><td width="400">:/status/weather-snow.svg</td><td width="400">tango-icons/status/weather-snow.svg</td><td width="200">weather-snow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-storm.png" alt="tango-icons/status/weather-storm.svg"/></td><td width="400">:/status/weather-storm.svg</td><td width="400">tango-icons/status/weather-storm.svg</td><td width="200">weather-storm</td></tr>
+</table>
+<h2><a name="extra-icons/actions">:/actions/ (extra-icons/actions)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/actions/" Directory: "extra-icons/actions"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/collapse-all.png" alt="extra-icons/actions/collapse-all.svg"/></td><td width="400">:/actions/collapse-all.svg</td><td width="400">extra-icons/actions/collapse-all.svg</td><td width="200">collapse-all</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/collapse-selection.png" alt="extra-icons/actions/collapse-selection.png"/></td><td width="400">:/actions/collapse-selection.png</td><td width="400">extra-icons/actions/collapse-selection.png</td><td width="200">collapse-selection</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/collapse.png" alt="extra-icons/actions/collapse.png"/></td><td width="400">:/actions/collapse.png</td><td width="400">extra-icons/actions/collapse.png</td><td width="200">collapse</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/expand-all.png" alt="extra-icons/actions/expand-all.svg"/></td><td width="400">:/actions/expand-all.svg</td><td width="400">extra-icons/actions/expand-all.svg</td><td width="200">expand-all</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/expand-selection.png" alt="extra-icons/actions/expand-selection.png"/></td><td width="400">:/actions/expand-selection.png</td><td width="400">extra-icons/actions/expand-selection.png</td><td width="200">expand-selection</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/expand.png" alt="extra-icons/actions/expand.png"/></td><td width="400">:/actions/expand.png</td><td width="400">extra-icons/actions/expand.png</td><td width="200">expand</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/go-backward.png" alt="extra-icons/actions/go-backward.svg"/></td><td width="400">:/actions/go-backward.svg</td><td width="400">extra-icons/actions/go-backward.svg</td><td width="200">go-backward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/go-forward.png" alt="extra-icons/actions/go-forward.svg"/></td><td width="400">:/actions/go-forward.svg</td><td width="400">extra-icons/actions/go-forward.svg</td><td width="200">go-forward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media-seek-backward-green.png" alt="extra-icons/actions/media-seek-backward-green.svg"/></td><td width="400">:/actions/media-seek-backward-green.svg</td><td width="400">extra-icons/actions/media-seek-backward-green.svg</td><td width="200">media-seek-backward-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media-seek-forward-green.png" alt="extra-icons/actions/media-seek-forward-green.svg"/></td><td width="400">:/actions/media-seek-forward-green.svg</td><td width="400">extra-icons/actions/media-seek-forward-green.svg</td><td width="200">media-seek-forward-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_backward.png" alt="extra-icons/actions/media_playback_backward.svg"/></td><td width="400">:/actions/media_playback_backward.svg</td><td width="400">extra-icons/actions/media_playback_backward.svg</td><td width="200">media_playback_backward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_pause.png" alt="extra-icons/actions/media_playback_pause.svg"/></td><td width="400">:/actions/media_playback_pause.svg</td><td width="400">extra-icons/actions/media_playback_pause.svg</td><td width="200">media_playback_pause</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_start.png" alt="extra-icons/actions/media_playback_start.svg"/></td><td width="400">:/actions/media_playback_start.svg</td><td width="400">extra-icons/actions/media_playback_start.svg</td><td width="200">media_playback_start</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_stop.png" alt="extra-icons/actions/media_playback_stop.svg"/></td><td width="400">:/actions/media_playback_stop.svg</td><td width="400">extra-icons/actions/media_playback_stop.svg</td><td width="200">media_playback_stop</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_stop_green.png" alt="extra-icons/actions/media_playback_stop_green.svg"/></td><td width="400">:/actions/media_playback_stop_green.svg</td><td width="400">extra-icons/actions/media_playback_stop_green.svg</td><td width="200">media_playback_stop_green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_seek_backward.png" alt="extra-icons/actions/media_seek_backward.svg"/></td><td width="400">:/actions/media_seek_backward.svg</td><td width="400">extra-icons/actions/media_seek_backward.svg</td><td width="200">media_seek_backward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_seek_forward.png" alt="extra-icons/actions/media_seek_forward.svg"/></td><td width="400">:/actions/media_seek_forward.svg</td><td width="400">extra-icons/actions/media_seek_forward.svg</td><td width="200">media_seek_forward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_skip_backward.png" alt="extra-icons/actions/media_skip_backward.svg"/></td><td width="400">:/actions/media_skip_backward.svg</td><td width="400">extra-icons/actions/media_skip_backward.svg</td><td width="200">media_skip_backward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_skip_forward.png" alt="extra-icons/actions/media_skip_forward.svg"/></td><td width="400">:/actions/media_skip_forward.svg</td><td width="400">extra-icons/actions/media_skip_forward.svg</td><td width="200">media_skip_forward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/stop.png" alt="extra-icons/actions/stop.svg"/></td><td width="400">:/actions/stop.svg</td><td width="400">extra-icons/actions/stop.svg</td><td width="200">stop</td></tr>
 </table>
 <h2><a name="extra-icons/designer">:/designer/ (extra-icons/designer)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/designer/" Directory: "extra-icons/designer"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/scheduler.png" alt="extra-icons/designer/scheduler.png"/></td><td width="400">:/designer/scheduler.png</td><td width="400">extra-icons/designer/scheduler.png</td><td width="200">scheduler</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/arrayedit.png" alt="extra-icons/designer/arrayedit.png"/></td><td width="400">:/designer/arrayedit.png</td><td width="400">extra-icons/designer/arrayedit.png</td><td width="200">arrayedit</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/back.png" alt="extra-icons/designer/back.png"/></td><td width="400">:/designer/back.png</td><td width="400">extra-icons/designer/back.png</td><td width="200">back</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/calendarwidget.png" alt="extra-icons/designer/calendarwidget.png"/></td><td width="400">:/designer/calendarwidget.png</td><td width="400">extra-icons/designer/calendarwidget.png</td><td width="200">calendarwidget</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/checkbox.png" alt="extra-icons/designer/checkbox.png"/></td><td width="400">:/designer/checkbox.png</td><td width="400">extra-icons/designer/checkbox.png</td><td width="200">checkbox</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/circular_gauge.png" alt="extra-icons/designer/circular_gauge.png"/></td><td width="400">:/designer/circular_gauge.png</td><td width="400">extra-icons/designer/circular_gauge.png</td><td width="200">circular_gauge</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/columnview.png" alt="extra-icons/designer/columnview.png"/></td><td width="400">:/designer/columnview.png</td><td width="400">extra-icons/designer/columnview.png</td><td width="200">columnview</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/combobox.png" alt="extra-icons/designer/combobox.png"/></td><td width="400">:/designer/combobox.png</td><td width="400">extra-icons/designer/combobox.png</td><td width="200">combobox</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/commandlinkbutton.png" alt="extra-icons/designer/commandlinkbutton.png"/></td><td width="400">:/designer/commandlinkbutton.png</td><td width="400">extra-icons/designer/commandlinkbutton.png</td><td width="200">commandlinkbutton</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/compression.png" alt="extra-icons/designer/compression.png"/></td><td width="400">:/designer/compression.png</td><td width="400">extra-icons/designer/compression.png</td><td width="200">compression</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/dateedit.png" alt="extra-icons/designer/dateedit.png"/></td><td width="400">:/designer/dateedit.png</td><td width="400">extra-icons/designer/dateedit.png</td><td width="200">dateedit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/datetimeedit.png" alt="extra-icons/designer/datetimeedit.png"/></td><td width="400">:/designer/datetimeedit.png</td><td width="400">extra-icons/designer/datetimeedit.png</td><td width="200">datetimeedit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/devs_table.png" alt="extra-icons/designer/devs_table.png"/></td><td width="400">:/designer/devs_table.png</td><td width="400">extra-icons/designer/devs_table.png</td><td width="200">devs_table</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/devs_tree.png" alt="extra-icons/designer/devs_tree.png"/></td><td width="400">:/designer/devs_tree.png</td><td width="400">extra-icons/designer/devs_tree.png</td><td width="200">devs_tree</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/dial.png" alt="extra-icons/designer/dial.png"/></td><td width="400">:/designer/dial.png</td><td width="400">extra-icons/designer/dial.png</td><td width="200">dial</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/dialogbuttonbox.png" alt="extra-icons/designer/dialogbuttonbox.png"/></td><td width="400">:/designer/dialogbuttonbox.png</td><td width="400">extra-icons/designer/dialogbuttonbox.png</td><td width="200">dialogbuttonbox</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/dockwidget.png" alt="extra-icons/designer/dockwidget.png"/></td><td width="400">:/designer/dockwidget.png</td><td width="400">extra-icons/designer/dockwidget.png</td><td width="200">dockwidget</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/doublespinbox.png" alt="extra-icons/designer/doublespinbox.png"/></td><td width="400">:/designer/doublespinbox.png</td><td width="400">extra-icons/designer/doublespinbox.png</td><td width="200">doublespinbox</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/down.png" alt="extra-icons/designer/down.png"/></td><td width="400">:/designer/down.png</td><td width="400">extra-icons/designer/down.png</td><td width="200">down</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/progress.png" alt="extra-icons/designer/progress.png"/></td><td width="400">:/designer/progress.png</td><td width="400">extra-icons/designer/progress.png</td><td width="200">progress</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/props_table.png" alt="extra-icons/designer/props_table.png"/></td><td width="400">:/designer/props_table.png</td><td width="400">extra-icons/designer/props_table.png</td><td width="200">props_table</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/listview.png" alt="extra-icons/designer/listview.png"/></td><td width="400">:/designer/listview.png</td><td width="400">extra-icons/designer/listview.png</td><td width="200">listview</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/editdelete.png" alt="extra-icons/designer/editdelete.png"/></td><td width="400">:/designer/editdelete.png</td><td width="400">extra-icons/designer/editdelete.png</td><td width="200">editdelete</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/extra_motor.png" alt="extra-icons/designer/extra_motor.png"/></td><td width="400">:/designer/extra_motor.png</td><td width="400">extra-icons/designer/extra_motor.png</td><td width="200">extra_motor</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/filereader.png" alt="extra-icons/designer/filereader.png"/></td><td width="400">:/designer/filereader.png</td><td width="400">extra-icons/designer/filereader.png</td><td width="200">filereader</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/fontcombobox.png" alt="extra-icons/designer/fontcombobox.png"/></td><td width="400">:/designer/fontcombobox.png</td><td width="400">extra-icons/designer/fontcombobox.png</td><td width="200">fontcombobox</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/forward.png" alt="extra-icons/designer/forward.png"/></td><td width="400">:/designer/forward.png</td><td width="400">extra-icons/designer/forward.png</td><td width="200">forward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/frame.png" alt="extra-icons/designer/frame.png"/></td><td width="400">:/designer/frame.png</td><td width="400">extra-icons/designer/frame.png</td><td width="200">frame</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/graphicsview.png" alt="extra-icons/designer/graphicsview.png"/></td><td width="400">:/designer/graphicsview.png</td><td width="400">extra-icons/designer/graphicsview.png</td><td width="200">graphicsview</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/label.png" alt="extra-icons/designer/label.png"/></td><td width="400">:/designer/label.png</td><td width="400">extra-icons/designer/label.png</td><td width="200">label</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/grid.png" alt="extra-icons/designer/grid.png"/></td><td width="400">:/designer/grid.png</td><td width="400">extra-icons/designer/grid.png</td><td width="200">grid</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/groupbox.png" alt="extra-icons/designer/groupbox.png"/></td><td width="400">:/designer/groupbox.png</td><td width="400">extra-icons/designer/groupbox.png</td><td width="200">groupbox</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/toolbox.png" alt="extra-icons/designer/toolbox.png"/></td><td width="400">:/designer/toolbox.png</td><td width="400">extra-icons/designer/toolbox.png</td><td width="200">toolbox</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vline.png" alt="extra-icons/designer/vline.png"/></td><td width="400">:/designer/vline.png</td><td width="400">extra-icons/designer/vline.png</td><td width="200">vline</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/groupboxcollapsible.png" alt="extra-icons/designer/groupboxcollapsible.png"/></td><td width="400">:/designer/groupboxcollapsible.png</td><td width="400">extra-icons/designer/groupboxcollapsible.png</td><td width="200">groupboxcollapsible</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/dateedit.png" alt="extra-icons/designer/dateedit.png"/></td><td width="400">:/designer/dateedit.png</td><td width="400">extra-icons/designer/dateedit.png</td><td width="200">dateedit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/lineedit.png" alt="extra-icons/designer/lineedit.png"/></td><td width="400">:/designer/lineedit.png</td><td width="400">extra-icons/designer/lineedit.png</td><td width="200">lineedit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/listview.png" alt="extra-icons/designer/listview.png"/></td><td width="400">:/designer/listview.png</td><td width="400">extra-icons/designer/listview.png</td><td width="200">listview</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/dockwidget.png" alt="extra-icons/designer/dockwidget.png"/></td><td width="400">:/designer/dockwidget.png</td><td width="400">extra-icons/designer/dockwidget.png</td><td width="200">dockwidget</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/wizard.png" alt="extra-icons/designer/wizard.png"/></td><td width="400">:/designer/wizard.png</td><td width="400">extra-icons/designer/wizard.png</td><td width="200">wizard</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/groupwidget.png" alt="extra-icons/designer/groupwidget.png"/></td><td width="400">:/designer/groupwidget.png</td><td width="400">extra-icons/designer/groupwidget.png</td><td width="200">groupwidget</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/horizontal_linear_gauge.png" alt="extra-icons/designer/horizontal_linear_gauge.png"/></td><td width="400">:/designer/horizontal_linear_gauge.png</td><td width="400">extra-icons/designer/horizontal_linear_gauge.png</td><td width="200">horizontal_linear_gauge</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/hscrollbar.png" alt="extra-icons/designer/hscrollbar.png"/></td><td width="400">:/designer/hscrollbar.png</td><td width="400">extra-icons/designer/hscrollbar.png</td><td width="200">hscrollbar</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/hslider.png" alt="extra-icons/designer/hslider.png"/></td><td width="400">:/designer/hslider.png</td><td width="400">extra-icons/designer/hslider.png</td><td width="200">hslider</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/hsplit.png" alt="extra-icons/designer/hsplit.png"/></td><td width="400">:/designer/hsplit.png</td><td width="400">extra-icons/designer/hsplit.png</td><td width="200">hsplit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/widget.png" alt="extra-icons/designer/widget.png"/></td><td width="400">:/designer/widget.png</td><td width="400">extra-icons/designer/widget.png</td><td width="200">widget</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/devs_tree.png" alt="extra-icons/designer/devs_tree.png"/></td><td width="400">:/designer/devs_tree.png</td><td width="400">extra-icons/designer/devs_tree.png</td><td width="200">devs_tree</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/extra_motor.png" alt="extra-icons/designer/extra_motor.png"/></td><td width="400">:/designer/extra_motor.png</td><td width="400">extra-icons/designer/extra_motor.png</td><td width="200">extra_motor</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/toolbutton.png" alt="extra-icons/designer/toolbutton.png"/></td><td width="400">:/designer/toolbutton.png</td><td width="400">extra-icons/designer/toolbutton.png</td><td width="200">toolbutton</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/table.png" alt="extra-icons/designer/table.png"/></td><td width="400">:/designer/table.png</td><td width="400">extra-icons/designer/table.png</td><td width="200">table</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/tabwidget.png" alt="extra-icons/designer/tabwidget.png"/></td><td width="400">:/designer/tabwidget.png</td><td width="400">extra-icons/designer/tabwidget.png</td><td width="200">tabwidget</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/editdelete.png" alt="extra-icons/designer/editdelete.png"/></td><td width="400">:/designer/editdelete.png</td><td width="400">extra-icons/designer/editdelete.png</td><td width="200">editdelete</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/wheeledit.png" alt="extra-icons/designer/wheeledit.png"/></td><td width="400">:/designer/wheeledit.png</td><td width="400">extra-icons/designer/wheeledit.png</td><td width="200">wheeledit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/label.png" alt="extra-icons/designer/label.png"/></td><td width="400">:/designer/label.png</td><td width="400">extra-icons/designer/label.png</td><td width="200">label</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/lcdnumber.png" alt="extra-icons/designer/lcdnumber.png"/></td><td width="400">:/designer/lcdnumber.png</td><td width="400">extra-icons/designer/lcdnumber.png</td><td width="200">lcdnumber</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/ledred.png" alt="extra-icons/designer/ledred.png"/></td><td width="400">:/designer/ledred.png</td><td width="400">extra-icons/designer/ledred.png</td><td width="200">ledred</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/hscrollbar.png" alt="extra-icons/designer/hscrollbar.png"/></td><td width="400">:/designer/hscrollbar.png</td><td width="400">extra-icons/designer/hscrollbar.png</td><td width="200">hscrollbar</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/circular_gauge.png" alt="extra-icons/designer/circular_gauge.png"/></td><td width="400">:/designer/circular_gauge.png</td><td width="400">extra-icons/designer/circular_gauge.png</td><td width="200">circular_gauge</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/ledgreen.png" alt="extra-icons/designer/ledgreen.png"/></td><td width="400">:/designer/ledgreen.png</td><td width="400">extra-icons/designer/ledgreen.png</td><td width="200">ledgreen</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/line.png" alt="extra-icons/designer/line.png"/></td><td width="400">:/designer/line.png</td><td width="400">extra-icons/designer/line.png</td><td width="200">line</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/lineedit.png" alt="extra-icons/designer/lineedit.png"/></td><td width="400">:/designer/lineedit.png</td><td width="400">extra-icons/designer/lineedit.png</td><td width="200">lineedit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/listbox.png" alt="extra-icons/designer/listbox.png"/></td><td width="400">:/designer/listbox.png</td><td width="400">extra-icons/designer/listbox.png</td><td width="200">listbox</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/macroserver.png" alt="extra-icons/designer/macroserver.png"/></td><td width="400">:/designer/macroserver.png</td><td width="400">extra-icons/designer/macroserver.png</td><td width="200">macroserver</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/mdiarea.png" alt="extra-icons/designer/mdiarea.png"/></td><td width="400">:/designer/mdiarea.png</td><td width="400">extra-icons/designer/mdiarea.png</td><td width="200">mdiarea</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/minus.png" alt="extra-icons/designer/minus.png"/></td><td width="400">:/designer/minus.png</td><td width="400">extra-icons/designer/minus.png</td><td width="200">minus</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/plaintextedit.png" alt="extra-icons/designer/plaintextedit.png"/></td><td width="400">:/designer/plaintextedit.png</td><td width="400">extra-icons/designer/plaintextedit.png</td><td width="200">plaintextedit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/plus.png" alt="extra-icons/designer/plus.png"/></td><td width="400">:/designer/plus.png</td><td width="400">extra-icons/designer/plus.png</td><td width="200">plus</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/progress.png" alt="extra-icons/designer/progress.png"/></td><td width="400">:/designer/progress.png</td><td width="400">extra-icons/designer/progress.png</td><td width="200">progress</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/props_table.png" alt="extra-icons/designer/props_table.png"/></td><td width="400">:/designer/props_table.png</td><td width="400">extra-icons/designer/props_table.png</td><td width="200">props_table</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/pushbutton.png" alt="extra-icons/designer/pushbutton.png"/></td><td width="400">:/designer/pushbutton.png</td><td width="400">extra-icons/designer/pushbutton.png</td><td width="200">pushbutton</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/qwtplot.png" alt="extra-icons/designer/qwtplot.png"/></td><td width="400">:/designer/qwtplot.png</td><td width="400">extra-icons/designer/qwtplot.png</td><td width="200">qwtplot</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/tau.png" alt="extra-icons/designer/tau.png"/></td><td width="400">:/designer/tau.png</td><td width="400">extra-icons/designer/tau.png</td><td width="200">tau</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/spacer.png" alt="extra-icons/designer/spacer.png"/></td><td width="400">:/designer/spacer.png</td><td width="400">extra-icons/designer/spacer.png</td><td width="200">spacer</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/checkbox.png" alt="extra-icons/designer/checkbox.png"/></td><td width="400">:/designer/checkbox.png</td><td width="400">extra-icons/designer/checkbox.png</td><td width="200">checkbox</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/dial.png" alt="extra-icons/designer/dial.png"/></td><td width="400">:/designer/dial.png</td><td width="400">extra-icons/designer/dial.png</td><td width="200">dial</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/combobox.png" alt="extra-icons/designer/combobox.png"/></td><td width="400">:/designer/combobox.png</td><td width="400">extra-icons/designer/combobox.png</td><td width="200">combobox</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/radiobutton.png" alt="extra-icons/designer/radiobutton.png"/></td><td width="400">:/designer/radiobutton.png</td><td width="400">extra-icons/designer/radiobutton.png</td><td width="200">radiobutton</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/scheduler.png" alt="extra-icons/designer/scheduler.png"/></td><td width="400">:/designer/scheduler.png</td><td width="400">extra-icons/designer/scheduler.png</td><td width="200">scheduler</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/scrollarea.png" alt="extra-icons/designer/scrollarea.png"/></td><td width="400">:/designer/scrollarea.png</td><td width="400">extra-icons/designer/scrollarea.png</td><td width="200">scrollarea</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/spacer.png" alt="extra-icons/designer/spacer.png"/></td><td width="400">:/designer/spacer.png</td><td width="400">extra-icons/designer/spacer.png</td><td width="200">spacer</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/spinbox.png" alt="extra-icons/designer/spinbox.png"/></td><td width="400">:/designer/spinbox.png</td><td width="400">extra-icons/designer/spinbox.png</td><td width="200">spinbox</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/textedit.png" alt="extra-icons/designer/textedit.png"/></td><td width="400">:/designer/textedit.png</td><td width="400">extra-icons/designer/textedit.png</td><td width="200">textedit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vspacer.png" alt="extra-icons/designer/vspacer.png"/></td><td width="400">:/designer/vspacer.png</td><td width="400">extra-icons/designer/vspacer.png</td><td width="200">vspacer</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/dialogbuttonbox.png" alt="extra-icons/designer/dialogbuttonbox.png"/></td><td width="400">:/designer/dialogbuttonbox.png</td><td width="400">extra-icons/designer/dialogbuttonbox.png</td><td width="200">dialogbuttonbox</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/widgetstack.png" alt="extra-icons/designer/widgetstack.png"/></td><td width="400">:/designer/widgetstack.png</td><td width="400">extra-icons/designer/widgetstack.png</td><td width="200">widgetstack</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/state.png" alt="extra-icons/designer/state.png"/></td><td width="400">:/designer/state.png</td><td width="400">extra-icons/designer/state.png</td><td width="200">state</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/line.png" alt="extra-icons/designer/line.png"/></td><td width="400">:/designer/line.png</td><td width="400">extra-icons/designer/line.png</td><td width="200">line</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/columnview.png" alt="extra-icons/designer/columnview.png"/></td><td width="400">:/designer/columnview.png</td><td width="400">extra-icons/designer/columnview.png</td><td width="200">columnview</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/grid.png" alt="extra-icons/designer/grid.png"/></td><td width="400">:/designer/grid.png</td><td width="400">extra-icons/designer/grid.png</td><td width="200">grid</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/tabbar.png" alt="extra-icons/designer/tabbar.png"/></td><td width="400">:/designer/tabbar.png</td><td width="400">extra-icons/designer/tabbar.png</td><td width="200">tabbar</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/table.png" alt="extra-icons/designer/table.png"/></td><td width="400">:/designer/table.png</td><td width="400">extra-icons/designer/table.png</td><td width="200">table</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/tabwidget.png" alt="extra-icons/designer/tabwidget.png"/></td><td width="400">:/designer/tabwidget.png</td><td width="400">extra-icons/designer/tabwidget.png</td><td width="200">tabwidget</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/tau.png" alt="extra-icons/designer/tau.png"/></td><td width="400">:/designer/tau.png</td><td width="400">extra-icons/designer/tau.png</td><td width="200">tau</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/taurus.png" alt="extra-icons/designer/taurus.png"/></td><td width="400">:/designer/taurus.png</td><td width="400">extra-icons/designer/taurus.png</td><td width="200">taurus</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/textedit.png" alt="extra-icons/designer/textedit.png"/></td><td width="400">:/designer/textedit.png</td><td width="400">extra-icons/designer/textedit.png</td><td width="200">textedit</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/timeedit.png" alt="extra-icons/designer/timeedit.png"/></td><td width="400">:/designer/timeedit.png</td><td width="400">extra-icons/designer/timeedit.png</td><td width="200">timeedit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/zoomin.png" alt="extra-icons/designer/zoomin.png"/></td><td width="400">:/designer/zoomin.png</td><td width="400">extra-icons/designer/zoomin.png</td><td width="200">zoomin</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/toolbox.png" alt="extra-icons/designer/toolbox.png"/></td><td width="400">:/designer/toolbox.png</td><td width="400">extra-icons/designer/toolbox.png</td><td width="200">toolbox</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/toolbutton.png" alt="extra-icons/designer/toolbutton.png"/></td><td width="400">:/designer/toolbutton.png</td><td width="400">extra-icons/designer/toolbutton.png</td><td width="200">toolbutton</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/up.png" alt="extra-icons/designer/up.png"/></td><td width="400">:/designer/up.png</td><td width="400">extra-icons/designer/up.png</td><td width="200">up</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/arrayedit.png" alt="extra-icons/designer/arrayedit.png"/></td><td width="400">:/designer/arrayedit.png</td><td width="400">extra-icons/designer/arrayedit.png</td><td width="200">arrayedit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/minus.png" alt="extra-icons/designer/minus.png"/></td><td width="400">:/designer/minus.png</td><td width="400">extra-icons/designer/minus.png</td><td width="200">minus</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/calendarwidget.png" alt="extra-icons/designer/calendarwidget.png"/></td><td width="400">:/designer/calendarwidget.png</td><td width="400">extra-icons/designer/calendarwidget.png</td><td width="200">calendarwidget</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/filereader.png" alt="extra-icons/designer/filereader.png"/></td><td width="400">:/designer/filereader.png</td><td width="400">extra-icons/designer/filereader.png</td><td width="200">filereader</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/horizontal_linear_gauge.png" alt="extra-icons/designer/horizontal_linear_gauge.png"/></td><td width="400">:/designer/horizontal_linear_gauge.png</td><td width="400">extra-icons/designer/horizontal_linear_gauge.png</td><td width="200">horizontal_linear_gauge</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/ledgreen.png" alt="extra-icons/designer/ledgreen.png"/></td><td width="400">:/designer/ledgreen.png</td><td width="400">extra-icons/designer/ledgreen.png</td><td width="200">ledgreen</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/plaintextedit.png" alt="extra-icons/designer/plaintextedit.png"/></td><td width="400">:/designer/plaintextedit.png</td><td width="400">extra-icons/designer/plaintextedit.png</td><td width="200">plaintextedit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/mdiarea.png" alt="extra-icons/designer/mdiarea.png"/></td><td width="400">:/designer/mdiarea.png</td><td width="400">extra-icons/designer/mdiarea.png</td><td width="200">mdiarea</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vslider.png" alt="extra-icons/designer/vslider.png"/></td><td width="400">:/designer/vslider.png</td><td width="400">extra-icons/designer/vslider.png</td><td width="200">vslider</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/commandlinkbutton.png" alt="extra-icons/designer/commandlinkbutton.png"/></td><td width="400">:/designer/commandlinkbutton.png</td><td width="400">extra-icons/designer/commandlinkbutton.png</td><td width="200">commandlinkbutton</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/forward.png" alt="extra-icons/designer/forward.png"/></td><td width="400">:/designer/forward.png</td><td width="400">extra-icons/designer/forward.png</td><td width="200">forward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/lcdnumber.png" alt="extra-icons/designer/lcdnumber.png"/></td><td width="400">:/designer/lcdnumber.png</td><td width="400">extra-icons/designer/lcdnumber.png</td><td width="200">lcdnumber</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/frame.png" alt="extra-icons/designer/frame.png"/></td><td width="400">:/designer/frame.png</td><td width="400">extra-icons/designer/frame.png</td><td width="200">frame</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/taurus.png" alt="extra-icons/designer/taurus.png"/></td><td width="400">:/designer/taurus.png</td><td width="400">extra-icons/designer/taurus.png</td><td width="200">taurus</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/datetimeedit.png" alt="extra-icons/designer/datetimeedit.png"/></td><td width="400">:/designer/datetimeedit.png</td><td width="400">extra-icons/designer/datetimeedit.png</td><td width="200">datetimeedit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/compression.png" alt="extra-icons/designer/compression.png"/></td><td width="400">:/designer/compression.png</td><td width="400">extra-icons/designer/compression.png</td><td width="200">compression</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/hslider.png" alt="extra-icons/designer/hslider.png"/></td><td width="400">:/designer/hslider.png</td><td width="400">extra-icons/designer/hslider.png</td><td width="200">hslider</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vscrollbar.png" alt="extra-icons/designer/vscrollbar.png"/></td><td width="400">:/designer/vscrollbar.png</td><td width="400">extra-icons/designer/vscrollbar.png</td><td width="200">vscrollbar</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/devs_table.png" alt="extra-icons/designer/devs_table.png"/></td><td width="400">:/designer/devs_table.png</td><td width="400">extra-icons/designer/devs_table.png</td><td width="200">devs_table</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/scrollarea.png" alt="extra-icons/designer/scrollarea.png"/></td><td width="400">:/designer/scrollarea.png</td><td width="400">extra-icons/designer/scrollarea.png</td><td width="200">scrollarea</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/groupwidget.png" alt="extra-icons/designer/groupwidget.png"/></td><td width="400">:/designer/groupwidget.png</td><td width="400">extra-icons/designer/groupwidget.png</td><td width="200">groupwidget</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/macroserver.png" alt="extra-icons/designer/macroserver.png"/></td><td width="400">:/designer/macroserver.png</td><td width="400">extra-icons/designer/macroserver.png</td><td width="200">macroserver</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/plus.png" alt="extra-icons/designer/plus.png"/></td><td width="400">:/designer/plus.png</td><td width="400">extra-icons/designer/plus.png</td><td width="200">plus</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vertical_linear_gauge.png" alt="extra-icons/designer/vertical_linear_gauge.png"/></td><td width="400">:/designer/vertical_linear_gauge.png</td><td width="400">extra-icons/designer/vertical_linear_gauge.png</td><td width="200">vertical_linear_gauge</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/listbox.png" alt="extra-icons/designer/listbox.png"/></td><td width="400">:/designer/listbox.png</td><td width="400">extra-icons/designer/listbox.png</td><td width="200">listbox</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/fontcombobox.png" alt="extra-icons/designer/fontcombobox.png"/></td><td width="400">:/designer/fontcombobox.png</td><td width="400">extra-icons/designer/fontcombobox.png</td><td width="200">fontcombobox</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/tabbar.png" alt="extra-icons/designer/tabbar.png"/></td><td width="400">:/designer/tabbar.png</td><td width="400">extra-icons/designer/tabbar.png</td><td width="200">tabbar</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/pushbutton.png" alt="extra-icons/designer/pushbutton.png"/></td><td width="400">:/designer/pushbutton.png</td><td width="400">extra-icons/designer/pushbutton.png</td><td width="200">pushbutton</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/doublespinbox.png" alt="extra-icons/designer/doublespinbox.png"/></td><td width="400">:/designer/doublespinbox.png</td><td width="400">extra-icons/designer/doublespinbox.png</td><td width="200">doublespinbox</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vline.png" alt="extra-icons/designer/vline.png"/></td><td width="400">:/designer/vline.png</td><td width="400">extra-icons/designer/vline.png</td><td width="200">vline</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vscrollbar.png" alt="extra-icons/designer/vscrollbar.png"/></td><td width="400">:/designer/vscrollbar.png</td><td width="400">extra-icons/designer/vscrollbar.png</td><td width="200">vscrollbar</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vslider.png" alt="extra-icons/designer/vslider.png"/></td><td width="400">:/designer/vslider.png</td><td width="400">extra-icons/designer/vslider.png</td><td width="200">vslider</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vspacer.png" alt="extra-icons/designer/vspacer.png"/></td><td width="400">:/designer/vspacer.png</td><td width="400">extra-icons/designer/vspacer.png</td><td width="200">vspacer</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/wheeledit.png" alt="extra-icons/designer/wheeledit.png"/></td><td width="400">:/designer/wheeledit.png</td><td width="400">extra-icons/designer/wheeledit.png</td><td width="200">wheeledit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/widget.png" alt="extra-icons/designer/widget.png"/></td><td width="400">:/designer/widget.png</td><td width="400">extra-icons/designer/widget.png</td><td width="200">widget</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/widgetstack.png" alt="extra-icons/designer/widgetstack.png"/></td><td width="400">:/designer/widgetstack.png</td><td width="400">extra-icons/designer/widgetstack.png</td><td width="200">widgetstack</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/wizard.png" alt="extra-icons/designer/wizard.png"/></td><td width="400">:/designer/wizard.png</td><td width="400">extra-icons/designer/wizard.png</td><td width="200">wizard</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/zoomin.png" alt="extra-icons/designer/zoomin.png"/></td><td width="400">:/designer/zoomin.png</td><td width="400">extra-icons/designer/zoomin.png</td><td width="200">zoomin</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/zoomout.png" alt="extra-icons/designer/zoomout.png"/></td><td width="400">:/designer/zoomout.png</td><td width="400">extra-icons/designer/zoomout.png</td><td width="200">zoomout</td></tr>
 </table>
-<h2><a name="extra-icons/actions">:/actions/ (extra-icons/actions)</a></h2>
+<h2><a name="extra-icons/leds/images24">:/leds/images24/ (extra-icons/leds/images24)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/actions/" Directory: "extra-icons/actions"</th>
+<th colspan="4">Resource: ":/leds/images24/" Directory: "extra-icons/leds/images24"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_stop.png" alt="extra-icons/actions/media_playback_stop.svg"/></td><td width="400">:/actions/media_playback_stop.svg</td><td width="400">extra-icons/actions/media_playback_stop.svg</td><td width="200">media_playback_stop</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_seek_backward.png" alt="extra-icons/actions/media_seek_backward.svg"/></td><td width="400">:/actions/media_seek_backward.svg</td><td width="400">extra-icons/actions/media_seek_backward.svg</td><td width="200">media_seek_backward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_skip_forward.png" alt="extra-icons/actions/media_skip_forward.svg"/></td><td width="400">:/actions/media_skip_forward.svg</td><td width="400">extra-icons/actions/media_skip_forward.svg</td><td width="200">media_skip_forward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_stop_green.png" alt="extra-icons/actions/media_playback_stop_green.svg"/></td><td width="400">:/actions/media_playback_stop_green.svg</td><td width="400">extra-icons/actions/media_playback_stop_green.svg</td><td width="200">media_playback_stop_green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media-seek-backward-green.png" alt="extra-icons/actions/media-seek-backward-green.svg"/></td><td width="400">:/actions/media-seek-backward-green.svg</td><td width="400">extra-icons/actions/media-seek-backward-green.svg</td><td width="200">media-seek-backward-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_seek_forward.png" alt="extra-icons/actions/media_seek_forward.svg"/></td><td width="400">:/actions/media_seek_forward.svg</td><td width="400">extra-icons/actions/media_seek_forward.svg</td><td width="200">media_seek_forward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_backward.png" alt="extra-icons/actions/media_playback_backward.svg"/></td><td width="400">:/actions/media_playback_backward.svg</td><td width="400">extra-icons/actions/media_playback_backward.svg</td><td width="200">media_playback_backward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media-seek-forward-green.png" alt="extra-icons/actions/media-seek-forward-green.svg"/></td><td width="400">:/actions/media-seek-forward-green.svg</td><td width="400">extra-icons/actions/media-seek-forward-green.svg</td><td width="200">media-seek-forward-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/collapse.png" alt="extra-icons/actions/collapse.png"/></td><td width="400">:/actions/collapse.png</td><td width="400">extra-icons/actions/collapse.png</td><td width="200">collapse</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/go-backward.png" alt="extra-icons/actions/go-backward.svg"/></td><td width="400">:/actions/go-backward.svg</td><td width="400">extra-icons/actions/go-backward.svg</td><td width="200">go-backward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/stop.png" alt="extra-icons/actions/stop.svg"/></td><td width="400">:/actions/stop.svg</td><td width="400">extra-icons/actions/stop.svg</td><td width="200">stop</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/expand-selection.png" alt="extra-icons/actions/expand-selection.png"/></td><td width="400">:/actions/expand-selection.png</td><td width="400">extra-icons/actions/expand-selection.png</td><td width="200">expand-selection</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/expand-all.png" alt="extra-icons/actions/expand-all.svg"/></td><td width="400">:/actions/expand-all.svg</td><td width="400">extra-icons/actions/expand-all.svg</td><td width="200">expand-all</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/go-forward.png" alt="extra-icons/actions/go-forward.svg"/></td><td width="400">:/actions/go-forward.svg</td><td width="400">extra-icons/actions/go-forward.svg</td><td width="200">go-forward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/collapse-all.png" alt="extra-icons/actions/collapse-all.svg"/></td><td width="400">:/actions/collapse-all.svg</td><td width="400">extra-icons/actions/collapse-all.svg</td><td width="200">collapse-all</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_pause.png" alt="extra-icons/actions/media_playback_pause.svg"/></td><td width="400">:/actions/media_playback_pause.svg</td><td width="400">extra-icons/actions/media_playback_pause.svg</td><td width="200">media_playback_pause</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/expand.png" alt="extra-icons/actions/expand.png"/></td><td width="400">:/actions/expand.png</td><td width="400">extra-icons/actions/expand.png</td><td width="200">expand</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_start.png" alt="extra-icons/actions/media_playback_start.svg"/></td><td width="400">:/actions/media_playback_start.svg</td><td width="400">extra-icons/actions/media_playback_start.svg</td><td width="200">media_playback_start</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_skip_backward.png" alt="extra-icons/actions/media_skip_backward.svg"/></td><td width="400">:/actions/media_skip_backward.svg</td><td width="400">extra-icons/actions/media_skip_backward.svg</td><td width="200">media_skip_backward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/collapse-selection.png" alt="extra-icons/actions/collapse-selection.png"/></td><td width="400">:/actions/collapse-selection.png</td><td width="400">extra-icons/actions/collapse-selection.png</td><td width="200">collapse-selection</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledblue.png" alt="extra-icons/leds/images24/ledblue.png"/></td><td width="400">:/leds/images24/ledblue.png</td><td width="400">extra-icons/leds/images24/ledblue.png</td><td width="200">ledblue</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledblueoff.png" alt="extra-icons/leds/images24/ledblueoff.png"/></td><td width="400">:/leds/images24/ledblueoff.png</td><td width="400">extra-icons/leds/images24/ledblueoff.png</td><td width="200">ledblueoff</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledgreen.png" alt="extra-icons/leds/images24/ledgreen.png"/></td><td width="400">:/leds/images24/ledgreen.png</td><td width="400">extra-icons/leds/images24/ledgreen.png</td><td width="200">ledgreen</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledgreenoff.png" alt="extra-icons/leds/images24/ledgreenoff.png"/></td><td width="400">:/leds/images24/ledgreenoff.png</td><td width="400">extra-icons/leds/images24/ledgreenoff.png</td><td width="200">ledgreenoff</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledorange.png" alt="extra-icons/leds/images24/ledorange.png"/></td><td width="400">:/leds/images24/ledorange.png</td><td width="400">extra-icons/leds/images24/ledorange.png</td><td width="200">ledorange</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledorangeoff.png" alt="extra-icons/leds/images24/ledorangeoff.png"/></td><td width="400">:/leds/images24/ledorangeoff.png</td><td width="400">extra-icons/leds/images24/ledorangeoff.png</td><td width="200">ledorangeoff</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledred.png" alt="extra-icons/leds/images24/ledred.png"/></td><td width="400">:/leds/images24/ledred.png</td><td width="400">extra-icons/leds/images24/ledred.png</td><td width="200">ledred</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledredoff.png" alt="extra-icons/leds/images24/ledredoff.png"/></td><td width="400">:/leds/images24/ledredoff.png</td><td width="400">extra-icons/leds/images24/ledredoff.png</td><td width="200">ledredoff</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledyellow.png" alt="extra-icons/leds/images24/ledyellow.png"/></td><td width="400">:/leds/images24/ledyellow.png</td><td width="400">extra-icons/leds/images24/ledyellow.png</td><td width="200">ledyellow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledyellowoff.png" alt="extra-icons/leds/images24/ledyellowoff.png"/></td><td width="400">:/leds/images24/ledyellowoff.png</td><td width="400">extra-icons/leds/images24/ledyellowoff.png</td><td width="200">ledyellowoff</td></tr>
 </table>
 <h2><a name="extra-icons/leds/images256">:/leds/images256/ (extra-icons/leds/images256)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/leds/images256/" Directory: "extra-icons/leds/images256"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_yellow_off.png" alt="extra-icons/leds/images256/led_yellow_off.png"/></td><td width="400">:/leds/images256/led_yellow_off.png</td><td width="400">extra-icons/leds/images256/led_yellow_off.png</td><td width="200">led_yellow_off</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_red_on.png" alt="extra-icons/leds/images256/led_red_on.png"/></td><td width="400">:/leds/images256/led_red_on.png</td><td width="400">extra-icons/leds/images256/led_red_on.png</td><td width="200">led_red_on</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_white_on.png" alt="extra-icons/leds/images256/led_white_on.png"/></td><td width="400">:/leds/images256/led_white_on.png</td><td width="400">extra-icons/leds/images256/led_white_on.png</td><td width="200">led_white_on</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_green_on.png" alt="extra-icons/leds/images256/led_green_on.png"/></td><td width="400">:/leds/images256/led_green_on.png</td><td width="400">extra-icons/leds/images256/led_green_on.png</td><td width="200">led_green_on</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_blue_on.png" alt="extra-icons/leds/images256/led_blue_on.png"/></td><td width="400">:/leds/images256/led_blue_on.png</td><td width="400">extra-icons/leds/images256/led_blue_on.png</td><td width="200">led_blue_on</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_magenta_off.png" alt="extra-icons/leds/images256/led_magenta_off.png"/></td><td width="400">:/leds/images256/led_magenta_off.png</td><td width="400">extra-icons/leds/images256/led_magenta_off.png</td><td width="200">led_magenta_off</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_off.png" alt="extra-icons/leds/images256/led_off.png"/></td><td width="400">:/leds/images256/led_off.png</td><td width="400">extra-icons/leds/images256/led_off.png</td><td width="200">led_off</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_orange_on.png" alt="extra-icons/leds/images256/led_orange_on.png"/></td><td width="400">:/leds/images256/led_orange_on.png</td><td width="400">extra-icons/leds/images256/led_orange_on.png</td><td width="200">led_orange_on</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_blue_off.png" alt="extra-icons/leds/images256/led_blue_off.png"/></td><td width="400">:/leds/images256/led_blue_off.png</td><td width="400">extra-icons/leds/images256/led_blue_off.png</td><td width="200">led_blue_off</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_black_off.png" alt="extra-icons/leds/images256/led_black_off.png"/></td><td width="400">:/leds/images256/led_black_off.png</td><td width="400">extra-icons/leds/images256/led_black_off.png</td><td width="200">led_black_off</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_black_on.png" alt="extra-icons/leds/images256/led_black_on.png"/></td><td width="400">:/leds/images256/led_black_on.png</td><td width="400">extra-icons/leds/images256/led_black_on.png</td><td width="200">led_black_on</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_blue_off.png" alt="extra-icons/leds/images256/led_blue_off.png"/></td><td width="400">:/leds/images256/led_blue_off.png</td><td width="400">extra-icons/leds/images256/led_blue_off.png</td><td width="200">led_blue_off</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_blue_on.png" alt="extra-icons/leds/images256/led_blue_on.png"/></td><td width="400">:/leds/images256/led_blue_on.png</td><td width="400">extra-icons/leds/images256/led_blue_on.png</td><td width="200">led_blue_on</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_green_off.png" alt="extra-icons/leds/images256/led_green_off.png"/></td><td width="400">:/leds/images256/led_green_off.png</td><td width="400">extra-icons/leds/images256/led_green_off.png</td><td width="200">led_green_off</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_green_on.png" alt="extra-icons/leds/images256/led_green_on.png"/></td><td width="400">:/leds/images256/led_green_on.png</td><td width="400">extra-icons/leds/images256/led_green_on.png</td><td width="200">led_green_on</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_grenoble_off.png" alt="extra-icons/leds/images256/led_grenoble_off.png"/></td><td width="400">:/leds/images256/led_grenoble_off.png</td><td width="400">extra-icons/leds/images256/led_grenoble_off.png</td><td width="200">led_grenoble_off</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_grenoble_on.png" alt="extra-icons/leds/images256/led_grenoble_on.png"/></td><td width="400">:/leds/images256/led_grenoble_on.png</td><td width="400">extra-icons/leds/images256/led_grenoble_on.png</td><td width="200">led_grenoble_on</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_magenta_off.png" alt="extra-icons/leds/images256/led_magenta_off.png"/></td><td width="400">:/leds/images256/led_magenta_off.png</td><td width="400">extra-icons/leds/images256/led_magenta_off.png</td><td width="200">led_magenta_off</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_magenta_on.png" alt="extra-icons/leds/images256/led_magenta_on.png"/></td><td width="400">:/leds/images256/led_magenta_on.png</td><td width="400">extra-icons/leds/images256/led_magenta_on.png</td><td width="200">led_magenta_on</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_off.png" alt="extra-icons/leds/images256/led_off.png"/></td><td width="400">:/leds/images256/led_off.png</td><td width="400">extra-icons/leds/images256/led_off.png</td><td width="200">led_off</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_orange_off.png" alt="extra-icons/leds/images256/led_orange_off.png"/></td><td width="400">:/leds/images256/led_orange_off.png</td><td width="400">extra-icons/leds/images256/led_orange_off.png</td><td width="200">led_orange_off</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_orange_on.png" alt="extra-icons/leds/images256/led_orange_on.png"/></td><td width="400">:/leds/images256/led_orange_on.png</td><td width="400">extra-icons/leds/images256/led_orange_on.png</td><td width="200">led_orange_on</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_red_off.png" alt="extra-icons/leds/images256/led_red_off.png"/></td><td width="400">:/leds/images256/led_red_off.png</td><td width="400">extra-icons/leds/images256/led_red_off.png</td><td width="200">led_red_off</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_yellow_on.png" alt="extra-icons/leds/images256/led_yellow_on.png"/></td><td width="400">:/leds/images256/led_yellow_on.png</td><td width="400">extra-icons/leds/images256/led_yellow_on.png</td><td width="200">led_yellow_on</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_green_off.png" alt="extra-icons/leds/images256/led_green_off.png"/></td><td width="400">:/leds/images256/led_green_off.png</td><td width="400">extra-icons/leds/images256/led_green_off.png</td><td width="200">led_green_off</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_red_on.png" alt="extra-icons/leds/images256/led_red_on.png"/></td><td width="400">:/leds/images256/led_red_on.png</td><td width="400">extra-icons/leds/images256/led_red_on.png</td><td width="200">led_red_on</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_white_off.png" alt="extra-icons/leds/images256/led_white_off.png"/></td><td width="400">:/leds/images256/led_white_off.png</td><td width="400">extra-icons/leds/images256/led_white_off.png</td><td width="200">led_white_off</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_black_off.png" alt="extra-icons/leds/images256/led_black_off.png"/></td><td width="400">:/leds/images256/led_black_off.png</td><td width="400">extra-icons/leds/images256/led_black_off.png</td><td width="200">led_black_off</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_white_on.png" alt="extra-icons/leds/images256/led_white_on.png"/></td><td width="400">:/leds/images256/led_white_on.png</td><td width="400">extra-icons/leds/images256/led_white_on.png</td><td width="200">led_white_on</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_yellow_off.png" alt="extra-icons/leds/images256/led_yellow_off.png"/></td><td width="400">:/leds/images256/led_yellow_off.png</td><td width="400">extra-icons/leds/images256/led_yellow_off.png</td><td width="200">led_yellow_off</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_yellow_on.png" alt="extra-icons/leds/images256/led_yellow_on.png"/></td><td width="400">:/leds/images256/led_yellow_on.png</td><td width="400">extra-icons/leds/images256/led_yellow_on.png</td><td width="200">led_yellow_on</td></tr>
 </table>
 <h2><a name="extra-icons/leds/images48">:/leds/images48/ (extra-icons/leds/images48)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/leds/images48/" Directory: "extra-icons/leds/images48"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledblue.png" alt="extra-icons/leds/images48/ledblue.png"/></td><td width="400">:/leds/images48/ledblue.png</td><td width="400">extra-icons/leds/images48/ledblue.png</td><td width="200">ledblue</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledorange.png" alt="extra-icons/leds/images48/ledorange.png"/></td><td width="400">:/leds/images48/ledorange.png</td><td width="400">extra-icons/leds/images48/ledorange.png</td><td width="200">ledorange</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledblueoff.png" alt="extra-icons/leds/images48/ledblueoff.png"/></td><td width="400">:/leds/images48/ledblueoff.png</td><td width="400">extra-icons/leds/images48/ledblueoff.png</td><td width="200">ledblueoff</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledgreen.png" alt="extra-icons/leds/images48/ledgreen.png"/></td><td width="400">:/leds/images48/ledgreen.png</td><td width="400">extra-icons/leds/images48/ledgreen.png</td><td width="200">ledgreen</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledgreenoff.png" alt="extra-icons/leds/images48/ledgreenoff.png"/></td><td width="400">:/leds/images48/ledgreenoff.png</td><td width="400">extra-icons/leds/images48/ledgreenoff.png</td><td width="200">ledgreenoff</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledyellowoff.png" alt="extra-icons/leds/images48/ledyellowoff.png"/></td><td width="400">:/leds/images48/ledyellowoff.png</td><td width="400">extra-icons/leds/images48/ledyellowoff.png</td><td width="200">ledyellowoff</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledorange.png" alt="extra-icons/leds/images48/ledorange.png"/></td><td width="400">:/leds/images48/ledorange.png</td><td width="400">extra-icons/leds/images48/ledorange.png</td><td width="200">ledorange</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledorangeoff.png" alt="extra-icons/leds/images48/ledorangeoff.png"/></td><td width="400">:/leds/images48/ledorangeoff.png</td><td width="400">extra-icons/leds/images48/ledorangeoff.png</td><td width="200">ledorangeoff</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledred.png" alt="extra-icons/leds/images48/ledred.png"/></td><td width="400">:/leds/images48/ledred.png</td><td width="400">extra-icons/leds/images48/ledred.png</td><td width="200">ledred</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledredoff.png" alt="extra-icons/leds/images48/ledredoff.png"/></td><td width="400">:/leds/images48/ledredoff.png</td><td width="400">extra-icons/leds/images48/ledredoff.png</td><td width="200">ledredoff</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledyellow.png" alt="extra-icons/leds/images48/ledyellow.png"/></td><td width="400">:/leds/images48/ledyellow.png</td><td width="400">extra-icons/leds/images48/ledyellow.png</td><td width="200">ledyellow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledred.png" alt="extra-icons/leds/images48/ledred.png"/></td><td width="400">:/leds/images48/ledred.png</td><td width="400">extra-icons/leds/images48/ledred.png</td><td width="200">ledred</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledorangeoff.png" alt="extra-icons/leds/images48/ledorangeoff.png"/></td><td width="400">:/leds/images48/ledorangeoff.png</td><td width="400">extra-icons/leds/images48/ledorangeoff.png</td><td width="200">ledorangeoff</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledgreen.png" alt="extra-icons/leds/images48/ledgreen.png"/></td><td width="400">:/leds/images48/ledgreen.png</td><td width="400">extra-icons/leds/images48/ledgreen.png</td><td width="200">ledgreen</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledblueoff.png" alt="extra-icons/leds/images48/ledblueoff.png"/></td><td width="400">:/leds/images48/ledblueoff.png</td><td width="400">extra-icons/leds/images48/ledblueoff.png</td><td width="200">ledblueoff</td></tr>
-</table>
-<h2><a name="extra-icons/leds/images24">:/leds/images24/ (extra-icons/leds/images24)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/leds/images24/" Directory: "extra-icons/leds/images24"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledgreen.png" alt="extra-icons/leds/images24/ledgreen.png"/></td><td width="400">:/leds/images24/ledgreen.png</td><td width="400">extra-icons/leds/images24/ledgreen.png</td><td width="200">ledgreen</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledorangeoff.png" alt="extra-icons/leds/images24/ledorangeoff.png"/></td><td width="400">:/leds/images24/ledorangeoff.png</td><td width="400">extra-icons/leds/images24/ledorangeoff.png</td><td width="200">ledorangeoff</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledorange.png" alt="extra-icons/leds/images24/ledorange.png"/></td><td width="400">:/leds/images24/ledorange.png</td><td width="400">extra-icons/leds/images24/ledorange.png</td><td width="200">ledorange</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledblueoff.png" alt="extra-icons/leds/images24/ledblueoff.png"/></td><td width="400">:/leds/images24/ledblueoff.png</td><td width="400">extra-icons/leds/images24/ledblueoff.png</td><td width="200">ledblueoff</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledgreenoff.png" alt="extra-icons/leds/images24/ledgreenoff.png"/></td><td width="400">:/leds/images24/ledgreenoff.png</td><td width="400">extra-icons/leds/images24/ledgreenoff.png</td><td width="200">ledgreenoff</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledyellowoff.png" alt="extra-icons/leds/images24/ledyellowoff.png"/></td><td width="400">:/leds/images24/ledyellowoff.png</td><td width="400">extra-icons/leds/images24/ledyellowoff.png</td><td width="200">ledyellowoff</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledred.png" alt="extra-icons/leds/images24/ledred.png"/></td><td width="400">:/leds/images24/ledred.png</td><td width="400">extra-icons/leds/images24/ledred.png</td><td width="200">ledred</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledblue.png" alt="extra-icons/leds/images24/ledblue.png"/></td><td width="400">:/leds/images24/ledblue.png</td><td width="400">extra-icons/leds/images24/ledblue.png</td><td width="200">ledblue</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledyellow.png" alt="extra-icons/leds/images24/ledyellow.png"/></td><td width="400">:/leds/images24/ledyellow.png</td><td width="400">extra-icons/leds/images24/ledyellow.png</td><td width="200">ledyellow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledredoff.png" alt="extra-icons/leds/images24/ledredoff.png"/></td><td width="400">:/leds/images24/ledredoff.png</td><td width="400">extra-icons/leds/images24/ledredoff.png</td><td width="200">ledredoff</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledyellowoff.png" alt="extra-icons/leds/images48/ledyellowoff.png"/></td><td width="400">:/leds/images48/ledyellowoff.png</td><td width="400">extra-icons/leds/images48/ledyellowoff.png</td><td width="200">ledyellowoff</td></tr>
 </table>
 <h2><a name="extra-icons">:/ (extra-icons)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/" Directory: "extra-icons"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/arrow01.png" alt="extra-icons/arrow01.svg"/></td><td width="400">:/arrow01.svg</td><td width="400">extra-icons/arrow01.svg</td><td width="200">arrow01</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/lock_unknown.png" alt="extra-icons/lock_unknown.svg"/></td><td width="400">:/lock_unknown.svg</td><td width="400">extra-icons/lock_unknown.svg</td><td width="200">lock_unknown</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_close_white.png" alt="extra-icons/titlebar_close_white.png"/></td><td width="400">:/titlebar_close_white.png</td><td width="400">extra-icons/titlebar_close_white.png</td><td width="200">titlebar_close_white</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_close.png" alt="extra-icons/titlebar_close.png"/></td><td width="400">:/titlebar_close.png</td><td width="400">extra-icons/titlebar_close.png</td><td width="200">titlebar_close</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/color-fill.png" alt="extra-icons/color-fill.svg"/></td><td width="400">:/color-fill.svg</td><td width="400">extra-icons/color-fill.svg</td><td width="200">color-fill</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/lock_locked.png" alt="extra-icons/lock_locked.svg"/></td><td width="400">:/lock_locked.svg</td><td width="400">extra-icons/lock_locked.svg</td><td width="200">lock_locked</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/lock_unlocked.png" alt="extra-icons/lock_unlocked.svg"/></td><td width="400">:/lock_unlocked.svg</td><td width="400">extra-icons/lock_unlocked.svg</td><td width="200">lock_unlocked</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/lock_locked_unpreviledged.png" alt="extra-icons/lock_locked_unpreviledged.svg"/></td><td width="400">:/lock_locked_unpreviledged.svg</td><td width="400">extra-icons/lock_locked_unpreviledged.svg</td><td width="200">lock_locked_unpreviledged</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/lock_unknown.png" alt="extra-icons/lock_unknown.svg"/></td><td width="400">:/lock_unknown.svg</td><td width="400">extra-icons/lock_unknown.svg</td><td width="200">lock_unknown</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/lock_unlocked.png" alt="extra-icons/lock_unlocked.svg"/></td><td width="400">:/lock_unlocked.svg</td><td width="400">extra-icons/lock_unlocked.svg</td><td width="200">lock_unlocked</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_close.png" alt="extra-icons/titlebar_close.png"/></td><td width="400">:/titlebar_close.png</td><td width="400">extra-icons/titlebar_close.png</td><td width="200">titlebar_close</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_close_black.png" alt="extra-icons/titlebar_close_black.png"/></td><td width="400">:/titlebar_close_black.png</td><td width="400">extra-icons/titlebar_close_black.png</td><td width="200">titlebar_close_black</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_undock_gray.png" alt="extra-icons/titlebar_undock_gray.png"/></td><td width="400">:/titlebar_undock_gray.png</td><td width="400">extra-icons/titlebar_undock_gray.png</td><td width="200">titlebar_undock_gray</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_undock.png" alt="extra-icons/titlebar_undock.png"/></td><td width="400">:/titlebar_undock.png</td><td width="400">extra-icons/titlebar_undock.png</td><td width="200">titlebar_undock</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_undock_white.png" alt="extra-icons/titlebar_undock_white.png"/></td><td width="400">:/titlebar_undock_white.png</td><td width="400">extra-icons/titlebar_undock_white.png</td><td width="200">titlebar_undock_white</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/color-fill.png" alt="extra-icons/color-fill.svg"/></td><td width="400">:/color-fill.svg</td><td width="400">extra-icons/color-fill.svg</td><td width="200">color-fill</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_close_gray.png" alt="extra-icons/titlebar_close_gray.png"/></td><td width="400">:/titlebar_close_gray.png</td><td width="400">extra-icons/titlebar_close_gray.png</td><td width="200">titlebar_close_gray</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_close_white.png" alt="extra-icons/titlebar_close_white.png"/></td><td width="400">:/titlebar_close_white.png</td><td width="400">extra-icons/titlebar_close_white.png</td><td width="200">titlebar_close_white</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_undock.png" alt="extra-icons/titlebar_undock.png"/></td><td width="400">:/titlebar_undock.png</td><td width="400">extra-icons/titlebar_undock.png</td><td width="200">titlebar_undock</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_undock_black.png" alt="extra-icons/titlebar_undock_black.png"/></td><td width="400">:/titlebar_undock_black.png</td><td width="400">extra-icons/titlebar_undock_black.png</td><td width="200">titlebar_undock_black</td></tr>
-</table>
-<h2><a name="external/jive">:/jive/ (external/jive)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/jive/" Directory: "external/jive"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/jive/device.png" alt="external/jive/device.png"/></td><td width="400">:/jive/device.png</td><td width="400">external/jive/device.png</td><td width="200">device</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/jive/class.png" alt="external/jive/class.png"/></td><td width="400">:/jive/class.png</td><td width="400">external/jive/class.png</td><td width="200">class</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/jive/server.png" alt="external/jive/server.png"/></td><td width="400">:/jive/server.png</td><td width="400">external/jive/server.png</td><td width="200">server</td></tr>
-</table>
-<h2><a name="external">:/ (external)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/" Directory: "external"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/class.png" alt="external/class.png"/></td><td width="400">:/class.png</td><td width="400">external/class.png</td><td width="200">class</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/python-file.png" alt="external/python-file.png"/></td><td width="400">:/python-file.png</td><td width="400">external/python-file.png</td><td width="200">python-file</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/python-package.png" alt="external/python-package.png"/></td><td width="400">:/python-package.png</td><td width="400">external/python-package.png</td><td width="200">python-package</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/tango.png" alt="external/tango.png"/></td><td width="400">:/tango.png</td><td width="400">external/tango.png</td><td width="200">tango</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/ipython.png" alt="external/ipython.png"/></td><td width="400">:/ipython.png</td><td width="400">external/ipython.png</td><td width="200">ipython</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/pythonw-console.png" alt="external/pythonw-console.png"/></td><td width="400">:/pythonw-console.png</td><td width="400">external/pythonw-console.png</td><td width="200">pythonw-console</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/python-console.png" alt="external/python-console.png"/></td><td width="400">:/python-console.png</td><td width="400">external/python-console.png</td><td width="200">python-console</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/python-module.png" alt="external/python-module.png"/></td><td width="400">:/python-module.png</td><td width="400">external/python-module.png</td><td width="200">python-module</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/function.png" alt="external/function.png"/></td><td width="400">:/function.png</td><td width="400">external/function.png</td><td width="200">function</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/python.png" alt="external/python.png"/></td><td width="400">:/python.png</td><td width="400">external/python.png</td><td width="200">python</td></tr>
-</table>
-<h2><a name="large/snapshot">:/snapshot/ (large/snapshot)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/snapshot/" Directory: "large/snapshot"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusShell.png" alt="large/snapshot/TaurusShell.png"/></td><td width="400">:/snapshot/TaurusShell.png</td><td width="400">large/snapshot/TaurusShell.png</td><td width="200">TaurusShell</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusForm.png" alt="large/snapshot/TaurusForm.png"/></td><td width="400">:/snapshot/TaurusForm.png</td><td width="400">large/snapshot/TaurusForm.png</td><td width="200">TaurusForm</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusTrend2DDialog.png" alt="large/snapshot/TaurusTrend2DDialog.png"/></td><td width="400">:/snapshot/TaurusTrend2DDialog.png</td><td width="400">large/snapshot/TaurusTrend2DDialog.png</td><td width="200">TaurusTrend2DDialog</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusDevicePanel.png" alt="large/snapshot/TaurusDevicePanel.png"/></td><td width="400">:/snapshot/TaurusDevicePanel.png</td><td width="400">large/snapshot/TaurusDevicePanel.png</td><td width="200">TaurusDevicePanel</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusArrayEditor.png" alt="large/snapshot/TaurusArrayEditor.png"/></td><td width="400">:/snapshot/TaurusArrayEditor.png</td><td width="400">large/snapshot/TaurusArrayEditor.png</td><td width="200">TaurusArrayEditor</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusJDrawSynopticsView.png" alt="large/snapshot/TaurusJDrawSynopticsView.png"/></td><td width="400">:/snapshot/TaurusJDrawSynopticsView.png</td><td width="400">large/snapshot/TaurusJDrawSynopticsView.png</td><td width="200">TaurusJDrawSynopticsView</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusImageDialog.png" alt="large/snapshot/TaurusImageDialog.png"/></td><td width="400">:/snapshot/TaurusImageDialog.png</td><td width="400">large/snapshot/TaurusImageDialog.png</td><td width="200">TaurusImageDialog</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusNeXusBrowser.png" alt="large/snapshot/TaurusNeXusBrowser.png"/></td><td width="400">:/snapshot/TaurusNeXusBrowser.png</td><td width="400">large/snapshot/TaurusNeXusBrowser.png</td><td width="200">TaurusNeXusBrowser</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusQubDataImageDisplay.png" alt="large/snapshot/TaurusQubDataImageDisplay.png"/></td><td width="400">:/snapshot/TaurusQubDataImageDisplay.png</td><td width="400">large/snapshot/TaurusQubDataImageDisplay.png</td><td width="200">TaurusQubDataImageDisplay</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/SardanaEditor.png" alt="large/snapshot/SardanaEditor.png"/></td><td width="400">:/snapshot/SardanaEditor.png</td><td width="400">large/snapshot/SardanaEditor.png</td><td width="200">SardanaEditor</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusDbTreeWidget.png" alt="large/snapshot/TaurusDbTreeWidget.png"/></td><td width="400">:/snapshot/TaurusDbTreeWidget.png</td><td width="400">large/snapshot/TaurusDbTreeWidget.png</td><td width="200">TaurusDbTreeWidget</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusPlot.png" alt="large/snapshot/TaurusPlot.png"/></td><td width="400">:/snapshot/TaurusPlot.png</td><td width="400">large/snapshot/TaurusPlot.png</td><td width="200">TaurusPlot</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusTrend.png" alt="large/snapshot/TaurusTrend.png"/></td><td width="400">:/snapshot/TaurusTrend.png</td><td width="400">large/snapshot/TaurusTrend.png</td><td width="200">TaurusTrend</td></tr>
-</table>
-<h2><a name="large">:/ (large)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/" Directory: "large"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/TaurusSplash.png" alt="large/TaurusSplash.png"/></td><td width="400">:/TaurusSplash.png</td><td width="400">large/TaurusSplash.png</td><td width="200">TaurusSplash</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_undock_gray.png" alt="extra-icons/titlebar_undock_gray.png"/></td><td width="400">:/titlebar_undock_gray.png</td><td width="400">extra-icons/titlebar_undock_gray.png</td><td width="200">titlebar_undock_gray</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_undock_white.png" alt="extra-icons/titlebar_undock_white.png"/></td><td width="400">:/titlebar_undock_white.png</td><td width="400">extra-icons/titlebar_undock_white.png</td><td width="200">titlebar_undock_white</td></tr>
 </table>
 </body></html>
\ No newline at end of file
diff --git a/doc/source/devel/coding_guide.rst b/doc/source/devel/coding_guide.rst
index f193ae1..3ac9bbe 100644
--- a/doc/source/devel/coding_guide.rst
+++ b/doc/source/devel/coding_guide.rst
@@ -124,12 +124,12 @@ PyQt4/PySide versions.
    
    Should be replaced by::
    
-       from taurus.qt import Qt
-       from taurus.qt import QtCore
-       from taurus.qt import QtGui
-       from taurus.qt import QtNetwork
-       from taurus.qt import QtWebKit
-       from taurus.qt import Qwt5
+       from taurus.external.qt import Qt
+       from taurus.external.qt import QtCore
+       from taurus.external.qt import QtGui
+       from taurus.external.qt import QtNetwork
+       from taurus.external.qt import QtWebKit
+       from taurus.external.qt import Qwt5
 
 2. Usage of :class:`~PyQt4.QString` is **discouraged**. You should always use
    :class:`str`. QString objects don't exist in PySide or in the new PyQt4
@@ -148,7 +148,8 @@ PyQt4/PySide versions.
        print str(label.text())         # never assume Qt objects return str.
 
    For compatibility reasons, QString and QStringList are always available
-   (even when using PySide or PyQt4 with API >=2) from :mod:`taurus.qt.Qt`.
+   (even when using PySide or PyQt4 with API >=2) from 
+   :mod:`taurus.external.qt.Qt`.
    Note that if you are using PySide or PyQt4 with API >=2 then QString is 
    actually :class:`str` and QStringList is actually :class:`list`!
    
@@ -182,10 +183,11 @@ PyQt4/PySide versions.
                return Qt.from_qvariant()
 
    For compatibility reasons, QVariant are always available
-   (even when using PySide or PyQt4 with API >=2) from :mod:`taurus.qt.Qt`.
+   (even when using PySide or PyQt4 with API >=2) from 
+   :mod:`taurus.external.qt.Qt`.
    Note that if you are using PySide or PyQt4 with API >=2 then QVariant(pyobj)
    if function that returns actually pyobj (exactly the same as
-   :func:`~taurus.qt.Qt.from_qvariant`.)
+   :func:`~taurus.external.qt.Qt.from_qvariant`.)
 
 .. _Tango: http://www.tango-controls.org/
 .. _Sardana: http://www.sardana-controls.org/
diff --git a/doc/source/devel/examples.rst b/doc/source/devel/examples.rst
index 8334316..23a4dca 100644
--- a/doc/source/devel/examples.rst
+++ b/doc/source/devel/examples.rst
@@ -46,7 +46,7 @@ does not include the following header and footer code lines:
 header::
 
     import sys
-    from taurus.qt import Qt
+    from taurus.external.qt import Qt
     from taurus.qt.qtgui.application import TaurusApplication
     
     app = TaurusApplication(sys.argv)
@@ -59,7 +59,7 @@ footer::
     panel.show()
     sys.exit(app.exec_())
 
-**You must prepend and postpend the above code in order for the examples to 
+**You must prepend and append the above code in order for the examples to 
 work properly.**
 
 .. _examples_display_attribute_value:
@@ -76,7 +76,7 @@ Displaying a tango attribute value in a GUI is easy with taurus and
 code::
 
     import sys
-    from taurus.qt import Qt
+    from taurus.external.qt import Qt
     from taurus.qt.qtgui.application import TaurusApplication
 
     app = TaurusApplication(sys.argv)
@@ -140,7 +140,7 @@ code::
 Interactively display attribute
 -------------------------------
 
-Humm... Now supose the user wants to change this value. :class:`input.TaurusValueLineEdit`
+Humm... Now suppose the user wants to change this value. :class:`input.TaurusValueLineEdit`
 does this job well (and so does :class:`input.TaurusValueSpinBox` and 
 :class:`input.TaurusWheelEdit` :-)
 
@@ -244,7 +244,7 @@ Let's go graphical
 Simple plotting of various spectrum attributes
 """"""""""""""""""""""""""""""""""""""""""""""
 
-Say you want to plot two SPECTRUM atributes and watch them changing on-line?
+Say you want to plot two SPECTRUM attributes and watch them changing on-line?
 Taurus provides a very complete widget: :class:`plot.TaurusPlot`
 (which makes use of the PyQwt_ library) .
 
@@ -356,4 +356,19 @@ Note: if you pass a model that is a Tango SPECTRUM attribute (instead of a
 scalar), TaurusTrend will interpret it as a collection of scalar values and will
 plot a separate trend line for each.
 
-.. _PyQwt: http://pyqwt.sourceforge.net/
\ No newline at end of file
+.. _PyQwt: http://pyqwt.sourceforge.net/
+
+
+Even higher level: creating a TaurusGui 
+---------------------------------------
+
+:class:`taurusgui.TaurusGui` provides very convenient way of creating 
+feature-rich and very configurable GUIs by using existing widgets as "panels".
+TaurusGuis can be created via a wizard application (no programming at all!) with
+a few clicks. You can try it out by running::
+
+	taurusgui --new-gui
+	
+For more details and tricks regarding TaurusGui, check the 
+:mod:`taurus.qt.qtgui.taurusgui` module
+
diff --git a/doc/source/devel/examples/dumpy-bakeout.jdw b/doc/source/devel/examples/dumpy-bakeout.jdw
old mode 100755
new mode 100644
diff --git a/doc/source/devel/examples/edit01.py b/doc/source/devel/examples/edit01.py
index 5fc9544..99b3c10 100644
--- a/doc/source/devel/examples/edit01.py
+++ b/doc/source/devel/examples/edit01.py
@@ -1,5 +1,5 @@
 import sys
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.application import TaurusApplication
 
 app = TaurusApplication(sys.argv)
diff --git a/doc/source/devel/examples/edit02.py b/doc/source/devel/examples/edit02.py
index c3e89df..956bb9e 100644
--- a/doc/source/devel/examples/edit02.py
+++ b/doc/source/devel/examples/edit02.py
@@ -1,5 +1,5 @@
 import sys
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.container import TaurusWidget
 from taurus.qt.qtgui.display import TaurusValueLabel, TaurusConfigLabel
 from taurus.qt.qtgui.input import TaurusValueSpinBox
diff --git a/doc/source/devel/examples/edit03.py b/doc/source/devel/examples/edit03.py
index 109dcb9..d8c9536 100644
--- a/doc/source/devel/examples/edit03.py
+++ b/doc/source/devel/examples/edit03.py
@@ -1,5 +1,5 @@
 import sys
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.container import TaurusWidget
 from taurus.qt.qtgui.display import TaurusValueLabel, TaurusConfigLabel
 from taurus.qt.qtgui.input import TaurusWheelEdit
diff --git a/doc/source/devel/examples/forms01.py b/doc/source/devel/examples/forms01.py
index 1beb1ad..220b836 100644
--- a/doc/source/devel/examples/forms01.py
+++ b/doc/source/devel/examples/forms01.py
@@ -1,5 +1,5 @@
 import sys
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.panel import TaurusForm
 
 app = Qt.QApplication(sys.argv)
diff --git a/doc/source/devel/examples/label01.py b/doc/source/devel/examples/label01.py
index cb143d8..c42a2e2 100644
--- a/doc/source/devel/examples/label01.py
+++ b/doc/source/devel/examples/label01.py
@@ -1,5 +1,5 @@
 import sys
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.application import TaurusApplication
 
 app = TaurusApplication(sys.argv)
diff --git a/doc/source/devel/examples/label02.py b/doc/source/devel/examples/label02.py
index 744df71..0b7fce4 100644
--- a/doc/source/devel/examples/label02.py
+++ b/doc/source/devel/examples/label02.py
@@ -1,5 +1,5 @@
 import sys
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.application import TaurusApplication
 
 app = TaurusApplication(sys.argv)
diff --git a/doc/source/devel/examples/label03.py b/doc/source/devel/examples/label03.py
index 7b1a308..d5a482a 100644
--- a/doc/source/devel/examples/label03.py
+++ b/doc/source/devel/examples/label03.py
@@ -1,5 +1,5 @@
 import sys
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.application import TaurusApplication
 
 app = TaurusApplication(sys.argv)
diff --git a/doc/source/devel/examples/label04.py b/doc/source/devel/examples/label04.py
index f3a998e..6f2f290 100644
--- a/doc/source/devel/examples/label04.py
+++ b/doc/source/devel/examples/label04.py
@@ -1,5 +1,5 @@
 import sys
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.container import TaurusWidget
 from taurus.qt.qtgui.display import TaurusValueLabel, TaurusConfigLabel
 
diff --git a/doc/source/devel/examples/label05.py b/doc/source/devel/examples/label05.py
index 43e3402..861272f 100644
--- a/doc/source/devel/examples/label05.py
+++ b/doc/source/devel/examples/label05.py
@@ -1,5 +1,5 @@
 import sys
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.display import TaurusStateLabel
 
 app = Qt.QApplication(sys.argv)
diff --git a/doc/source/devel/examples/label06.py b/doc/source/devel/examples/label06.py
index 0474d34..5820a0b 100644
--- a/doc/source/devel/examples/label06.py
+++ b/doc/source/devel/examples/label06.py
@@ -1,5 +1,5 @@
 import sys
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.display import TaurusStateLabel
 
 app = Qt.QApplication(sys.argv)
diff --git a/doc/source/devel/examples/parentmodel_issue_demo.py b/doc/source/devel/examples/parentmodel_issue_demo.py
index ae016b0..abf4aa7 100644
--- a/doc/source/devel/examples/parentmodel_issue_demo.py
+++ b/doc/source/devel/examples/parentmodel_issue_demo.py
@@ -9,7 +9,7 @@ call recheckTaurusParent for all designer created widgets that use TaurusParentM
 You can do it right after calling the setupUi method.
 '''
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.container import TaurusWidget
 from taurus.qt.qtgui.display import TaurusValueLabel
 import sys
diff --git a/doc/source/devel/examples/taurusplot01.py b/doc/source/devel/examples/taurusplot01.py
index 9c04715..5b06833 100644
--- a/doc/source/devel/examples/taurusplot01.py
+++ b/doc/source/devel/examples/taurusplot01.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 import sys
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.plot import TaurusPlot
 
 app = Qt.QApplication(sys.argv)
diff --git a/doc/source/devel/examples/taurusplot02.py b/doc/source/devel/examples/taurusplot02.py
index 7a84ca0..6975d1c 100644
--- a/doc/source/devel/examples/taurusplot02.py
+++ b/doc/source/devel/examples/taurusplot02.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 import sys
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.plot import TaurusPlot
 
 app = Qt.QApplication(sys.argv)
diff --git a/doc/source/devel/examples/taurusplot03.py b/doc/source/devel/examples/taurusplot03.py
index 908db9f..4e3948c 100644
--- a/doc/source/devel/examples/taurusplot03.py
+++ b/doc/source/devel/examples/taurusplot03.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 import sys
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.plot import TaurusPlot, CurveAppearanceProperties
 
 app = Qt.QApplication(sys.argv)
diff --git a/doc/source/devel/examples/taurustrend01.py b/doc/source/devel/examples/taurustrend01.py
index 1ab7b66..a0f0657 100644
--- a/doc/source/devel/examples/taurustrend01.py
+++ b/doc/source/devel/examples/taurustrend01.py
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
 
 import sys
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.plot import TaurusTrend
 
 app = Qt.QApplication(sys.argv)
diff --git a/doc/source/devel/examples/taurusvalue01.py b/doc/source/devel/examples/taurusvalue01.py
index 955b25b..c2cbc9a 100644
--- a/doc/source/devel/examples/taurusvalue01.py
+++ b/doc/source/devel/examples/taurusvalue01.py
@@ -1,5 +1,5 @@
 import sys
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.application import TaurusApplication
 from taurus.qt.qtgui.panel import TaurusValue
 
diff --git a/doc/source/devel/icon_example.py b/doc/source/devel/icon_example.py
index 9828d97..2ee250f 100644
--- a/doc/source/devel/icon_example.py
+++ b/doc/source/devel/icon_example.py
@@ -1,4 +1,4 @@
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.resource import getThemeIcon
 
 class MyGUI(Qt.QMainWindow):
diff --git a/doc/source/index.rst b/doc/source/index.rst
index 99c7a47..c126e23 100644
--- a/doc/source/index.rst
+++ b/doc/source/index.rst
@@ -10,6 +10,9 @@ Welcome to Taurus's |version| documentation!
 
 .. sidebar:: Latest news
 
+    2014-07-11
+        Taurus 3.3.0 released!
+        
     2014-02-14
         Taurus 3.2.0 released!
 
diff --git a/doc/source/revision.rst b/doc/source/revision.rst
deleted file mode 100644
index 9e142f3..0000000
--- a/doc/source/revision.rst
+++ /dev/null
@@ -1,45 +0,0 @@
-.. _revision:
-
-Revision
-========
-
-:Contributers: T\. Coutinho, C\. Pascual-Izarra
-
-(Actually the two persons above are the contact persons. The number of 
-developers include the entire controls section of the ALBA synchrotron who 
-actually did most of the work)
-
-:Last Update: |today|
-
-.. _history-modifications:
-
-History of modifications
-------------------------
-
-+----------+----------+----------------------------------------------------+-------------------------+
-|   Date   | Revision |                          Description               | Author                  |
-+==========+==========+====================================================+=========================+
-| 21/01/10 | 1.0      | Initial Version                                    | T\. Coutinho, R\. Suñe  |
-|          |          |                                                    | C\. Pascual-Izarra`     |
-+----------+----------+----------------------------------------------------+-------------------------+
-| 01/10/10 | 2.0      | Refactoring for taurus                             | T\. Coutinho,           |
-|          |          |                                                    | C\. Pascual-Izarra      |
-+----------+----------+----------------------------------------------------+-------------------------+
-| 18/01/11 | 2.1      | Online release of taurus 2.0 documentation         | T\. Coutinho,           |
-|          |          |                                                    | C\. Pascual-Izarra      |
-+----------+----------+----------------------------------------------------+-------------------------+
-
-.. _version-history:
-
-Version history
----------------
-
-+------------+---------------------------------------------------------------------------------+
-| version    | Changes                                                                         |
-+============+=================================================================================+
-| 1.1.0      | First unofficial release to the Tango community                                 |
-+------------+---------------------------------------------------------------------------------+
-| 1.2.1      | First official release to the Tango community                                   |
-+------------+---------------------------------------------------------------------------------+
-| 2.0        | Refactoring for taurus                                                          |
-+------------+---------------------------------------------------------------------------------+
\ No newline at end of file
diff --git a/doc/source/users/introduction.rst b/doc/source/users/introduction.rst
index df1536f..ea2c113 100644
--- a/doc/source/users/introduction.rst
+++ b/doc/source/users/introduction.rst
@@ -34,7 +34,7 @@ For example, to display the values of four attributes (state, position, velocity
 of a device (motor/icepap/01)::
 
     import sys
-    from PyQt4 import Qt
+    from taurus.external.qt import Qt
     from taurus.qt.qtgui.panel import TaurusForm
     from taurus.qt.qtgui.application import TaurusApplication
     
diff --git a/doc/source/users/ui/experimentconfiguration.rst b/doc/source/users/ui/experimentconfiguration.rst
index a17af25..d6bcd3e 100644
--- a/doc/source/users/ui/experimentconfiguration.rst
+++ b/doc/source/users/ui/experimentconfiguration.rst
@@ -1,4 +1,4 @@
-.. currentmodule:: taurus.qt.qtgui.extra_sardana
+.. currentmodule:: sardana.taurus.qt.qtgui.extra_sardana
 
 .. _expconf_ui:
 
diff --git a/doc/source/users/ui/sardanaeditor.rst b/doc/source/users/ui/sardanaeditor.rst
index 56873dc..fe2e89a 100644
--- a/doc/source/users/ui/sardanaeditor.rst
+++ b/doc/source/users/ui/sardanaeditor.rst
@@ -1,4 +1,4 @@
-.. currentmodule:: taurus.qt.qtgui.extra_sardana
+.. currentmodule:: sardana.taurus.qt.qtgui.extra_sardana
 
 .. _sardanaeditor_ui:
 
diff --git a/lib/taurus/core/release.py b/lib/taurus/core/release.py
index 8dcff53..0176434 100644
--- a/lib/taurus/core/release.py
+++ b/lib/taurus/core/release.py
@@ -53,7 +53,7 @@ name = 'taurus'
 # bdist_deb does not accept underscores (a Debian convention).
 
 
-version_info = (3,2,0,'rc',0)
+version_info = (3,3,0,'rc',0)
 version = '.'.join(map(str, version_info[:3]))
 revision = str(version_info[4])
 
diff --git a/lib/taurus/core/tango/sardana/macro.py b/lib/taurus/core/tango/sardana/macro.py
deleted file mode 100644
index 12dbc47..0000000
--- a/lib/taurus/core/tango/sardana/macro.py
+++ /dev/null
@@ -1,1119 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""The macro submodule."""
-
-__all__ = ["MacroInfo", "Macro", "MacroNode", "ParamFactory",
-           "MacroRunException"]
-
-__docformat__ = 'restructuredtext'
-
-import os
-import tempfile
-import types
-import operator
-import copy
-import threading
-import PyTango
-
-from lxml import etree
-
-from taurus.core.util.user import USER_NAME
-from taurus.core.util.codecs import CodecFactory
-
-class MacroRunException(Exception):
-    pass
-
-class MacroInfo(object):
-    """Contains all information about a macro: name, documentation, parameters, 
-    result, etc"""
-    
-    def __init__(self, from_json_str=None, from_json=None):
-        json_obj = from_json
-        if from_json_str is not None:
-            json_obj = self._fromJSON(from_json_str)
-        
-        if json_obj:
-            self.__dict__.update(json_obj)
-            self._buildDoc()
-    
-    def _fromJSON(self, json_str):
-        json_codec = CodecFactory().getCodec('json')
-        format, data = json_codec.decode(('json', json_str))
-        return data
-    
-    def _buildDoc(self):
-        if self.hasParams():
-            self._parameter_line = self._buildParameterLine(self.parameters)
-            self._parameter_description = self._buildParameterDescription(self.parameters)
-        if self.hasResult():
-            self._result_line = self._buildResultLine(self.result)
-            self._result_description = self._buildResultDescription(self.result)
-            
-        doc = 'Syntax:\n\t%s %s' % (self.name, self.getParamStr())
-        if self.hasResult():
-            doc += ' -> ' + self.getResultStr()
-        doc += '\n\n'
-        doc += self.description
-        if self.hasParams():
-            doc += '\n\nParameters:\n\t'
-            doc += '\n\t'.join(self.getParamDescr())
-        if self.hasResult():
-            doc += '\n\nResult:\n\t'
-            doc += '\n\t'.join(self.getResultDescr())
-        self.doc = doc
-
-    def _hasParamComplex(self, parameters=None):
-        if parameters is None:
-            parameters = self.parameters
-        
-        for p in parameters:
-            if self._isParamComplex(p):
-                return True
-        return False
-    
-    def _isParamComplex(self, p):
-        return not self._isParamAtomic(p)
-    
-    def _isParamAtomic(self, p):
-        return type(p['type']) in types.StringTypes
-    
-    def _buildParameterLine(self, parameters):
-        l = []
-        for p in parameters:
-            t = p['type']
-            if type(t) in types.StringTypes:
-                #Simple parameter
-                l.append('<%s>' % p['name'])
-            else:
-                l.append('[ %s ]' % self._buildParameterLine(t))
-        return ' '.join(l)
-    
-    _buildResultLine = _buildParameterLine
-    
-    def _buildParameterDescription(self, parameters):
-        l = []
-        for p in parameters:
-            t = p['type']
-            if type(t) in types.StringTypes:
-                #Simple parameter
-                l.append('{name} : ({type}) {description}'.format(**p))
-            else:
-                l.extend(self._buildParameterDescription(t))
-        return l
-    
-    _buildResultDescription = _buildParameterDescription
-
-    def hasParams(self):
-        """Determines if the macro has parameters
-        
-        :return: (bool) True if the macro has parameters or False otherwise
-        """
-        return hasattr(self ,'parameters')
-    
-    def getParamList(self):
-        """Returs the list of parameters
-        
-        :return: (sequence) a list of parameters
-        """
-        if not self.hasParams():
-            return []
-        return self.parameters
-            
-    def getParam(self,idx=0):
-        """Gets the parameter for the given index
-        
-        :param idx: (int) the index (default is 0)
-        
-        :return: (object) the parameter or None if the macro does not have the 
-                 desired parameter
-        """
-        if not self.hasParams():
-            return
-        return self.parameters[idx]
-
-    def getPossibleParams(self, idx, parameters=None):
-        """Gets the possible parameters for the given index
-        
-        :param idx: (int) parameter index
-        :param parameters: (sequence) sequence of parameter information (default 
-                           is None which means use the macro parameters
-        :return: (sequence) list of possible parameters
-        """
-        if parameters is None:
-            parameters = self.parameters
-        
-        res = []
-        n = len(parameters)
-        if idx >= n:
-            if self._hasParamComplex(parameters):
-                p = copy.copy(parameters)
-                p.reverse()
-                res.extend(self.getPossibleParams(0, p))
-            return res
-        
-        res = []
-        for i,p in enumerate(parameters):
-            atomic = self._isParamAtomic(p)
-            if i < idx:
-                if atomic: continue
-                else:
-                    res.extend(self.getPossibleParams(idx-i, p['type']))
-            elif i == idx:
-                if atomic:
-                    res.append(p)
-                else: 
-                    res.extend(self.getPossibleParams(0, p['type']))
-            else:
-                break
-        return res
-
-    def getParamStr(self):
-        """Returns the string line representing the macro parameters.
-           For example, if a macro has a motor parameter followed by a list of
-           numbers it will return:
-           '<motor> [ <number> ]'
-
-        :return: (str) a string representing the macro parameter line
-        """
-        if not self.hasParams():
-            return ''
-        return self._parameter_line
-
-    def getParamDescr(self):
-        """Returns the list of strings, each one documenting each macro parameter
-        
-        :return: (sequence<str>) list of parameter lines
-        """
-        if not self.hasParams():
-            return []
-        return self._parameter_description
-
-    def hasResult(self):
-        """Determines if the macro has a result
-        
-        :return: (bool) True if the macro has a result or False otherwise
-        """
-        return hasattr(self ,'result')
-
-    def getResultList(self):
-        """Returns the list of results
-        
-        :return: (sequence) a list of results
-        """
-        if not self.hasResult():
-            return []
-        return self.result
-    
-    def getResult(self,idx=0):
-        """Gets the result for the given index
-        
-        :param idx: (int) the index (default is 0)
-        
-        :return: (object) the result or None if the macro does not have the 
-                 desired result
-        """
-        return self.result[idx]
-
-    def getResultStr(self):
-        """Returns the string line representing the macro results.
-           For example, if a macro returns a number, this method it will return:
-           '<number>'
-
-        :return: (str) a string representing the macro result line
-        """
-        if not self.hasResult():
-            return ''
-        return self._result_line
-    
-    def getResultDescr(self):
-        """Returns the list of strings, each one documenting each macro result
-        
-        :return: (sequence<str>) list of result lines
-        """
-        if not self.hasResult():
-            return []
-        return self._result_description
-
-    def formatResult(self, res):
-        if not self.hasResult():
-            if res is None:
-                return None
-            raise Exception('Macro %s does not return any result' % self.name)
-        result_info = self.getResult()
-        rtype = result_info['type']
-        if rtype == 'File':
-            fd, filename = tempfile.mkstemp(prefix='spock_',text=True)
-            os.write(fd, res[1])
-            os.close(fd)
-            # put the local filename in the result
-            res.insert(0,filename)
-            return res
-        if len(res) > 0:
-            if rtype == 'Float':
-                return float(res[0])
-            elif rtype == 'Integer':
-                return int(res[0])
-            elif rtype == 'Boolean':
-                return res[0].lower() == 'true'
-            elif rtype in ('String', 'User', 'Filename'):
-                return res[0]
-            else:
-                raise Exception('Unknown return type for macro %s' % self.name)
-        else:
-            return None
-
-    def __str__(self):
-        return self.name
-
-class Macro(object):
-
-    Ready    = PyTango.DevState.ON
-    Init     = PyTango.DevState.INIT
-    Running  = PyTango.DevState.RUNNING
-    Pause    = PyTango.DevState.STANDBY
-    Fault    = PyTango.DevState.FAULT
-    Finished = PyTango.DevState.ON
-    Abort    = PyTango.DevState.ALARM
-
-    def __init__(self, door, name, id, xml_obj):
-        self.door = door
-        self.name = name
-        self.xml_node = xml_obj
-        self.id = id
-        self.range = None
-        self.step = None
-        self.result = None
-    
-    def getID(self):
-        return self.id
-    
-    def getRange(self):
-        return self.range
-    
-    def getStep(self):
-        return self.step
-    
-    def getInfo(self):
-        return self.door.macro_server.getMacroInfoObj(self.name)
-
-    def setResult(self, res):
-        self.result = self.getInfo().formatResult(res)
-
-    def getResult(self):
-        return self.result
-    
-
-class BaseNode(object):
-    """Base class defining basic interface for all type of nodes used to represent,
-    relationship between sequence, macros and parameters."""
-    
-    def __init__(self, parent=None):
-#        if parent:
-#            parent = weakref.ref(parent)
-        self._parent = parent
-    
-    def parent(self):
-        return self._parent
-    
-    def setParent(self, parent):
-#        if parent:
-#            parent = weakref.ref(parent)
-        self._parent = parent
-    
-    def value(self):
-        return ""
-    
-    def isAllowedMoveUp(self):
-        return False
-    
-    def isAllowedMoveDown(self):
-        return False
-    
-    def isAllowedDelete(self):
-        return False
-    
-class BranchNode(BaseNode):
-    """Class used to represent all types of elements which contain
-    a list of other elements (children)"""
-
-    def __init__(self, parent=None):
-        BaseNode.__init__(self, parent)
-        self._children = []
-        
-    def __len__(self):
-        return len(self.children())
-        
-    def children(self):
-        return self._children
-    
-    def child(self, idx):
-        try:
-            children = self.children()
-            return children[idx]
-        except:
-            return None
-    
-    def rowOfChild(self, child):
-        try:
-            return self.children().index(child)
-        except ValueError:
-            return -1
-        
-    def insertChild(self, child, row=-1):
-        child.setParent(self)
-        if row == -1: row = len(self)
-        self.children().insert(row, child)
-        return row
-        
-    def removeChild(self, child):
-        self.children().remove(child)
-        
-    def upChild(self, child):
-        i = self.children().index(child)
-        if i == 0: return
-        self.removeChild(child)
-        self.children().insert(child, i - 1)
-        
-    def downChild(self, child):
-        i = self.children().index(child)
-        if i == len(self)-1: return
-        self.removeChild(child)
-        self.children().insert(i + 1,child)
-        
-    def toRun(self):
-        values = []
-        alert = ""
-        for child in self.children():
-            val, ale = child.toRun()
-            values += val
-            alert += ale            
-        return values, alert
-                
-class ParamNode(BaseNode):
-    """Base class for param elements: single parameters and param repeats.
-    It groups a common interface of them."""
-    
-    def __init__(self, parent=None, param=None):
-        BaseNode.__init__(self, parent)
-        if param is None:
-            self.setName(None)
-            self.setDescription(None)
-            self.setMin(None)
-            self.setMax(None)
-        else:
-            self.setName(str(param.get('name')))
-            self.setDescription(str(param.get('description')))
-            self.setMin(str(param.get('min')))
-            self.setMax(str(param.get('max')))
-        
-            
-    def name(self):
-        return self._name
-    
-    def setName(self, name):
-        self._name = name
-    
-    def description(self):
-        return self._description
-    
-    def setDescription(self, description):
-        self._description = description
-        
-    def min(self):
-        return self._min
-    
-    def setMin(self, min):
-        if min == 'None':
-            min = None
-        elif min:
-            min = float(min)
-        self._min = min
-        
-    def max(self):
-        return self._max
-    
-    def setMax(self, max):
-        if max == 'None':
-            max = None
-        elif max:
-            max = float(max)
-        self._max = max  
-        
-        
-class SingleParamNode(ParamNode):
-    """Single parameter class."""
-    def __init__(self, parent=None, param=None):
-        ParamNode.__init__(self, parent, param)
-        if param is None: return
-        self.setType(str(param.get('type')))
-        self.setDefValue(str(param.get('default_value', '')))
-        if self.type() == "User":
-            self.setDefValue(str(USER_NAME))
-        self.setValue(self.defValue())
-        
-    def __len__(self):
-        return 0
-           
-    def value(self):
-        return self._value
-    
-    def setValue(self, value):
-        self._value = value
-        
-    def defValue(self):
-        return self._defValue
-    
-    def setDefValue(self, defValue):
-        self._defValue = defValue
-        
-    def type(self):
-        return self._type
-    
-    def setType(self, type):
-        self._type = type
-        
-    def toXml(self):
-        paramElement = etree.Element("param", name = self.name(), 
-                                              value = self.value())  
-        return paramElement    
-    
-    def fromXml(self, xmlElement):
-        self.setName(xmlElement.get("name"))
-        self.setValue(xmlElement.get("value"))
-        
-    def isMotorParam(self):
-        return self.type() == globals.PARAM_MOTOR
-    
-    def allMotors(self):
-        if self.isMotorParam() and self.value() != 'None':
-            return [self.value()]
-        else:
-            return[]
-            
-    def toRun(self):
-        val = self.value()
-        if val is None or val == "None" or val == "": 
-            alert = "Parameter <b>" + self.name() + "</b> is missing.<br>"
-            return ([val], alert)
-        return ([val], "")
-                        
-class RepeatParamNode(ParamNode, BranchNode):
-    """Repeat parameter class."""
-
-    def __init__(self, parent=None, param=None):
-        ParamNode.__init__(self, parent, param)
-        BranchNode.__init__(self, parent)
-        if param is None:
-            return
-        self.setParamsInfo(copy.deepcopy(param.get('type')))
-        
-    def arrangeIndexes(self):
-        for i, child in enumerate(self.children()):
-            child.setIndex(i+1)
-        
-    def paramsInfo(self):
-        return self._paramsInfo
-    
-    def setParamsInfo(self, paramsInfo):
-        self._paramsInfo = paramsInfo
-        
-    def newRepeat(self):
-        repeatNode = RepeatNode(self)
-        for repeatParam in self.paramsInfo():
-            repeatNode.addParam(repeatParam)
-        return repeatNode
-        
-    def addRepeat(self):
-        repeat = RepeatNode(self)
-        self.insertChild(repeat)
-        for repeatParam in self.paramsInfo():
-            repeat.addParam(repeatParam)
-        
-    def isReachedMin(self):
-        if self.min() is None: 
-            return False
-        return len(self) <= self.min()
-    
-    def isBelowMin(self):
-        if self.min() is None: 
-            return False
-        return len(self) < self.min()
-    
-    def isReachedMax(self):
-        if self.max() is None:
-            return False
-        return len(self) == self.max() 
-        
-    def isAboveMax(self):
-        if self.max() is None:
-            return False
-        return len(self) > self.max() 
-
-    def insertChild(self, child, row=-1):
-        #this line was removed on purpose
-        #in case of importing sequences from plain text, it is possible that user introduced more repetitions than allowed
-        #in this case later validation will inform him about exceeding a limit
-        #if self.isReachedMax(): return
-        return BranchNode.insertChild(self, child, row) 
-        
-    def removeChild(self, child):
-        if self.isReachedMin(): return
-        child.setParent(None)
-        begin = self.children().index(child) + 1
-        for i in range(begin,len(self)):
-            self.child(i).setIndex(self.child(i).index() - 1)
-        BranchNode.removeChild(self, child)
-        
-    def upChild(self, child):
-        i = self.children().index(child)
-        if i == 0: return
-        child.setIndex(child.index() - 1)
-        self.child(i - 1).setIndex(self.child(i - 1).index() + 1)
-        BranchNode.removeChild(self, child)
-        self.insertChild(child, i - 1) 
-        
-    def downChild(self, child):
-        i = self.children().index(child)
-        if i == len(self) - 1: return
-        child.setIndex(child.index() + 1)
-        self.child(i + 1).setIndex(self.child(i + 1).index() - 1)
-        BranchNode.removeChild(self, child)
-        self.insertChild(child, i + 1)
-    
-    def toRun(self):
-        values = []
-        alert = ""
-        if self.isBelowMin():
-            alert += "Parameter <b>" + self.name() + "</b> has not enough repeats<br>"
-        for child in self.children():
-            val,ale = child.toRun()
-            values += val
-            alert += ale
-        return (values, alert)
-    
-    def toXml(self):
-        paramElement =  etree.Element("paramrepeat", name = self.name())
-        for child in self.children():
-            paramElement.append(child.toXml())
-        return paramElement
-    
-    def fromXml(self, xmlElement):
-        self.setName(xmlElement.get("name"))
-        for repeatElement in xmlElement.getiterator("repeat"):
-            repeat = RepeatNode(self)
-            repeat.fromXml(repeatElement)
-            self.insertChild(repeat)
-    
-    def allMotors(self):
-        motors = []
-        for child in self.children():
-            motors += child.allMotors()
-        return motors
-    
-#    def isAllowedMoveUp(self):
-#        return self is not self.parent().child(0)
-#    
-#    def isAllowedMoveDown(self):
-#        return self is not self.parent().child(len(self.parent()) - 1)   
-        
-    
-class RepeatNode(BranchNode):
-    """Class for repetition elements (group of params which were repeated in macro)"""
-    
-    def __init__(self, parent=None):
-        BranchNode.__init__(self, parent)
-        if parent is None: return
-        self.setIndex(len(self.parent()) + 1)
-         
-    def index(self):
-        return self._index
-    
-    def setIndex(self, index):
-        self._index = index
-          
-    def name(self):
-        return "#%d" %self.index()
-    
-    def addParam(self, param):
-        type = param.get('type', None)
-        if isinstance(type, list):
-            paramRepeat = RepeatParamNode(self, param)
-            self.insertChild(paramRepeat)
-            paramRepeat.addRepeat()
-        else:
-            self.insertChild(SingleParamNode(self, param))
-    
-    def toXml(self):
-        repeatElement = etree.Element("repeat", nr = str(self.index()))
-        for child in self.children():
-            repeatElement.append(child.toXml())
-        return repeatElement
-
-    def fromXml(self, xmlElement):
-        self.setIndex(int(xmlElement.get("nr")))
-        for paramElement in xmlElement:
-            if paramElement.tag == "param":
-                param = SingleParamNode(self)
-            elif paramElement.tag == "paramrepeat":
-                param = RepeatParamNode(self)
-            param.fromXml(paramElement)
-            self.insertChild(param)
-            
-    def allMotors(self):
-        motors = []
-        for child in self.children():
-            motors += child.allMotors()
-        return motors
-    
-    def isAllowedDel(self):
-        pass
-    
-    def isAllowedMoveUp(self):
-        return self is not self.parent().child(0)
-    
-    def isAllowedMoveDown(self):
-        return self is not self.parent().child(len(self.parent()) - 1)   
-        
-class MacroNode(BranchNode):
-    """Class to represent macro element."""
-    count = 0
-    
-    def __init__(self, parent=None, name=None):
-        BranchNode.__init__(self, parent)
-        self.setId(None)
-        self.setName(name)
-        self.setPause(False)
-        self.setProgress(0)
-        self.setRange((0,100))
-        self.setParams([])
-        self.setHooks([])
-        self.setHookPlaces([])
-        self.setAllowedHookPlaces([])
-        
-    def id(self):
-        """
-        Getter of macro's id property
-        
-        :return: (int)
-        
-        .. seealso: :meth:`MacroNode.setId`, assignId
-        """
-        
-        return self._id
-    
-    def setId(self, id):
-        """
-        Setter of macro's id property
-        
-        :param id: (int) new macro's id
-        
-        See Also: id, assignId
-        """
-        
-        self._id = id
-        
-    def assignId(self):
-        """
-        If macro didn't have an assigned id it assigns it
-        and return macro's id.
-        
-        :return: (int)
-        
-        See Also: id, setId
-        """
-        id = self.id()
-        if id is not None: return id
-        MacroNode.count += 1
-        self.setId(MacroNode.count)
-        return MacroNode.count
-            
-    def name(self):
-        return self._name
-    
-    def setName(self, name):
-        self._name = name
-        
-    def isPause(self):
-        return self._pause
-    
-    def setPause(self, pause):
-        self._pause = pause
-        
-    def range(self):
-        return self._range
-    
-    def setRange(self, range):
-        self._range = range 
-        
-    def progress(self):
-        return self._progress
-
-    def setProgress(self, progress):
-        self._progress = progress
-        
-    def isAllowedHooks(self):
-        return bool(self._allowedHookPlaces)
-
-    def allowedHookPlaces(self):
-        return self._allowedHookPlaces
-        
-    def setAllowedHookPlaces(self, allowedHookPlaces):
-        self._allowedHookPlaces = allowedHookPlaces
-        
-    def hookPlaces(self):
-        return self._hookPlaces
-    
-    def setHookPlaces(self, hookPlaces):
-        self._hookPlaces = hookPlaces
-        
-    def addHookPlace(self, hookPlace):
-        self._hookPlaces.append(hookPlace)
-    
-    def removeHookPlace(self, hookPlace):
-        self._hookPlaces.remove(hookPlace)
-        
-    def hasParams(self):
-        return self._hasParams
-    
-    def setHasParams(self, hasParams):
-        self._hasParams = hasParams
-      
-#################################   
-    def params(self):
-        return self._params
-    
-    def setParams(self, params):
-        self._params = params
-        
-    def addParam(self, param):
-        param.setParent(self)
-        self._params.append(param)
-    
-    def popParam(self, index=None):
-        if index == None:
-            return self._params.pop()
-        else:
-            return self._params.pop(index)
-        
-    def hooks(self):
-        return self._hooks
-    
-    def setHooks(self, hooks):
-        self._hooks = hooks
-        
-    def addHook(self, hook):
-        hook.setParent(self)
-        self._hooks.append(hook)    
-        
-    def removeHook(self, hook):
-        self._hooks.remove(hook)
-        
-    def rowOfHook(self, hook):
-        try:
-            return self.hooks().index(hook)
-        except ValueError:
-            return -1
-  
-##################################  
-    def children(self):
-        return self.params() + self.hooks()
-    
-    def insertChild(self, child, row=-1):
-        child.setParent(self)
-        if isinstance(child, MacroNode):
-            if row == -1: row = len(self._hooks)
-            else: row = row - len(self._params) 
-            self._hooks.insert(row, child)
-        elif isinstance(child, ParamNode):
-            if row == -1: row = len(self._params)
-            self._params.insert(row, child)
-        return self.rowOfChild(child)
-            
-    def removeChild(self, child):
-        if isinstance(child, MacroNode):
-            self._hooks.remove(child)
-        elif isinstance(child, ParamNode):
-            self._params.insert(child)
-        
-    def toRun(self):
-        values = []
-        alert = ""
-        for child in self.children():
-            if isinstance(child, ParamNode):
-                val, ale = child.toRun()
-                values += val
-                alert += ale            
-        return values, alert
-    
-    def toSpockCommand(self):
-        values, alerts = self.toRun()
-        return "%s %s" % (self.name(), str.join(' ',values)) 
-
-
-    def value(self):
-        values, alerts = self.toRun()
-        if len(values) == 0:
-            return ''
-        elif len(values) == 1:
-            return '[%s]' %values[0]
-        else:
-            valueString = '' 
-            for value in values:
-                valueString += (value + ', ') 
-            return '[%s]' %valueString[:-2]
-    
-#    def allMotors(self):
-#        motors = []
-#        for macro in self.allMacros():
-#            motors += macro.ownMotors()
-#        return motors
-#    
-#    def ownMotors(self):
-#        motors = []
-#        for macro in self.hooks():
-#            motors += macro.allMotors()
-#        return motors
-    
-    def allMacros(self):
-        macros = self.allDescendants()
-        macros.append(self)
-        return macros
-    
-    def allDescendants(self):
-        descendantsMacros = []
-        ownMacros = []
-        for child in self.children():
-            if isinstance(child, MacroNode):
-                ownMacros.append(child)
-                descendantsMacros += child.allDescendants()
-        return descendantsMacros + ownMacros
-    
-#    def descendantFromId(self, id):
-#        descendant = None
-#        for child in self.children():
-#            if isinstance(child, MacroNode) and child.id() == id:
-#                descendant = child
-#                break
-#        else:
-#            for child in self.children():
-#                descendant = child.descendantById(id)
-#        return descendant
-            
-    def isAllowedMoveLeft(self):
-        """This method checks if is is allowed to move macro to grandparent's hook list.
-        It is enough to check that grandparent exist, cause all parents must allow hooks"""
-        return self.parent().parent() is not None 
-    
-    def moveLeft(self):
-        """This method moves macro to grandparent's hook list 
-        and place it right after its ex-parent,
-        it also returns newRow"""
-        oldParent = self.parent()
-        newParent = oldParent.parent()
-        newRow = newParent.hooks().index(oldParent) + 1
-        oldParent.removeHook(self)
-        self.setParent(newParent)
-        newParent.insertHook(newRow, self)
-        return newRow
-        
-    def isAllowedMoveRight(self):
-        """This method is used to check if it is allowed to move macro
-        to it's first following sibling's hook list."""
-        parent = self.parent()
-        try:     
-            return parent.child(parent.rowOfChild(self) + 1).isAllowedHooks()
-        except:
-            return False
-    
-    def moveRight(self):
-        """This method is used to move selected macro (pased via index)
-        to it's first following sibling's hook list. In tree representation it basically move macro to the right"""
-        parent = self.parent()
-        for idx, hook in enumerate(parent.hooks()):
-            if hook is self:
-                newParent = parent.hook(idx + 1)
-                parent.removeHook(self)
-                self.setParent(newParent)
-                newParent.insertHook(0,self)
-                return 0
-        
-    def isAllowedMoveUp(self):
-        parent = self.parent()
-        if isinstance(parent, SequenceNode):
-            return self is not self.parent().child(0)
-        elif isinstance(parent, MacroNode): 
-            return self is not self.parent()._hooks[0]
-        else: 
-            return False
-    
-    def moveUp(self):
-        """This method moves hook up and returns newRow"""
-        parent = self.parent()
-        myOldRow = parent.rowOfHook(self)
-        parent.removeHook(self)
-        parent.insertHook(myOldRow - 1, self)
-        return myOldRow - 1 
-    
-    def isAllowedMoveDown(self):
-        parent = self.parent()
-        return parent.rowOfChild(self) < len(parent) - 1
-    
-    def moveDown(self):
-        """This method moves hook up and returns newRow"""
-        parent = self.parent()
-        myOldRow = parent.rowOfHook(self)
-        parent.removeHook(self)
-        parent.insertHook(myOldRow + 1, self)
-        return myOldRow + 1
-    
-    def toXml(self, withId=True):
-        """
-        Converts MacroNode obj to etree.Element obj.
-        
-        :param withId: (bool) if we want to export also macro id (default: True)
-        
-        See Also: fromXml 
-        """
-        
-        macroElement = etree.Element("macro", name = self.name())
-        if withId: macroElement.set("id", str(self.id()))
-        for hookPlace in self.hookPlaces():
-            hookElement = etree.SubElement(macroElement, "hookPlace")
-            hookElement.text = hookPlace    
-        for child in self.children():
-            if isinstance(child, MacroNode):
-                xmlElement = child.toXml(withId)
-            else:
-                xmlElement = child.toXml()
-            macroElement.append(xmlElement)
-        return macroElement
-    
-    def fromXml(self, xmlElement):
-        """
-        Fills properties of MacroNode obj from etree.Element obj passed as a parameter
-        
-        :param xmlElement: (etree.Element)
-        
-        See Also: toXml
-        """
-        
-        self.setName(xmlElement.get("name"))
-        hookPlaces = []
-        for element in xmlElement:
-            if element.tag == "param":
-                param = SingleParamNode(self)
-                param.fromXml(element)
-                self.addParam(param)
-            elif element.tag == "paramrepeat":
-                param = RepeatParamNode(self)
-                param.fromXml(element)
-                self.addParam(param)
-            elif element.tag == "macro":
-                macro = MacroNode(self)
-                macro.fromXml(element)
-                self.addHook(macro)
-            elif element.tag == "hookPlace":
-                hookPlaces.append(element.text)
-        self.setHookPlaces(hookPlaces)
-    
-    def fromPlainText(self, plainText):
-        words = plainText.split()
-        length = len(words)
-        if length == 0:
-            return
-        self.setName(words[0])
-        for index in range(1,length):
-            param = SingleParamNode(self)
-            param.setValue(words[index])
-            self.addParam(param)
-        
-    
-class SequenceNode(BranchNode):
-    """Class to represent sequence element."""
-        
-    def __init__(self, parent=None):
-        BranchNode.__init__(self, parent)
-        
-    def allMacros(self):
-        macros = []
-        for macro in self.children():
-            macros += macro.allDescendants()
-        macros += self.children()
-        return macros
-    
-    def upMacro(self, macro):
-        BranchNode.upChild(self, macro)
-        
-    def downMacro(self, macro):
-        BranchNode.downChild(self, macro)
-            
-    def toXml(self, withId=True):
-        sequenceElement = etree.Element("sequence")
-        for child in self.children():
-            sequenceElement.append(child.toXml(withId))
-        return sequenceElement
-    
-    def fromXml(self, sequenceElement):
-        for childElement in sequenceElement.iterchildren("macro"):
-            macro = MacroNode(self)
-            macro.fromXml(childElement)
-            self.insertChild(macro)
-
-    def fromPlainText(self, plainText):
-        plainMacros = plainText.split('\n')
-        for plainMacro in plainMacros:
-            #ignoring empty lines
-            if len(plainMacro) == 0:
-                continue
-            macro = MacroNode(self)
-            macro.fromPlainText(plainMacro)
-            self.insertChild(macro)
-            
-#    def descendantFromId(self, id):
-#        descendant = None
-#        for child in self.children():
-#            if isinstance(child, MacroNode) and child.id() == id:
-#                descendant = child
-#                break
-#        else:
-#            for child in self.children():
-#                descendant = child.descendantById(id)
-#        return descendant
-                    
-        
-        
-            
-def ParamFactory(paramInfo):
-    """Factory method returning param element, depends of the paramInfo argument."""
-
-    if isinstance(paramInfo.get('type'),list):
-        param = RepeatParamNode(param=paramInfo)
-        if param.min() > 0:
-            param.addRepeat()
-    else:
-        param = SingleParamNode(param=paramInfo)
-    return param
-    
diff --git a/lib/taurus/core/tango/sardana/macroserver.py b/lib/taurus/core/tango/sardana/macroserver.py
deleted file mode 100644
index 4e09f2a..0000000
--- a/lib/taurus/core/tango/sardana/macroserver.py
+++ /dev/null
@@ -1,1159 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-##
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-##
-## Taurus 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.
-##
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""The macroserver submodule. It contains specific part of macroserver"""
-
-__all__ = [ 'BaseInputHandler', 'BaseDoor', 'BaseMacroServer',
-            'registerExtensions' ]
-
-__docformat__ = 'restructuredtext'
-
-import sys
-import weakref
-import threading
-import time
-import uuid
-import os.path as osp
-
-import PyTango
-
-from lxml import etree
-
-from taurus import Device, Factory
-from taurus.core.taurusmanager import TaurusManager
-from taurus.core.taurusbasetypes import TaurusEventType, TaurusSWDevState, \
-    TaurusSerializationMode
-
-from taurus.core.util.log import Logger
-from taurus.core.util.singleton import Singleton
-from taurus.core.util.containers import CaselessDict
-from taurus.core.util.codecs import CodecFactory
-from taurus.core.util.event import EventGenerator, AttributeEventWait
-from taurus.core.tango import TangoDevice
-
-from .macro import MacroInfo, Macro, MacroNode, ParamFactory, RepeatNode, \
-    RepeatParamNode, SingleParamNode, ParamNode
-from .sardana import BaseSardanaElementContainer, BaseSardanaElement
-from .pool import getChannelConfigs
-
-CHANGE_EVT_TYPES = TaurusEventType.Change, TaurusEventType.Periodic
-
-
-class Attr(Logger, EventGenerator):
-
-    def __init__(self, dev, name, obj_class, attr):
-        self._dev = weakref.ref(dev)
-        self._obj_class  = obj_class
-        self._attr = attr
-        self.call__init__(Logger, name)
-        event_name = '%s %s' % (dev.getNormalName(), name)
-        self.call__init__(EventGenerator, event_name)
-
-        self._attr.addListener(self)
-
-    def eventReceived(self, src, type, evt_value):
-        if type == TaurusEventType.Error:
-            self.fireEvent(None)
-        elif type != TaurusEventType.Config:
-            if evt_value:
-                self.fireEvent(evt_value.value)
-            else:
-                self.fireEvent(None)
-
-    def getTaurusAttribute(self):
-        return self._attr
-
-    def __getattr__(self, name):
-        return getattr(self._attr, name)
-
-
-class LogAttr(Attr):
-
-    def __init__(self, dev, name, obj_class, attr, max_buff_size=4096):
-        self._log_buffer = []
-        self._max_buff_size = max_buff_size
-        self.call__init__(Attr, dev, name, obj_class, attr)
-
-    def getLogBuffer(self):
-        return self._log_buffer
-
-    def clearLogBuffer(self):
-        self._log_buffer = []
-
-    def eventReceived(self, src, type, evt_value):
-        if type == TaurusEventType.Change:
-            if evt_value is None or evt_value.value is None:
-                self.fireEvent(None)
-            else:
-                self._log_buffer.extend(evt_value.value)
-                while len(self._log_buffer) > self._max_buff_size:
-                    self._log_buffer.pop(0)
-                if evt_value:
-                    self.fireEvent(evt_value.value)
-
-
-class BaseInputHandler(object):
-
-    def __init__(self):
-        try:
-            self._input = raw_input
-        except NameError:
-            self._input = input
-
-    def input(self, input_data=None):
-        if input_data is None:
-            input_data = {}
-        prompt = input_data.get('prompt')
-        ret = dict(input=None, cancel=False)
-        try:
-            if prompt is None:
-                ret['input'] = self._input()
-            else:
-                ret['input'] = self._input(prompt)
-        except:
-            ret['cancel'] = True
-        return ret
-
-    def input_timeout(self, input_data):
-        print "input timeout"
-        
-
-class MacroServerDevice(TangoDevice):
-    """A class encapsulating a generic macro server device (usually a
-    MacroServer or a Door"""
-
-    def _getEventWait(self):
-        if not hasattr(self, '_evt_wait'):
-            # create an object that waits for attribute events.
-            # each time we use it we have to connect and disconnect to an attribute
-            self._evt_wait = AttributeEventWait()
-        return self._evt_wait
-
-
-class ExperimentConfiguration(object):
-
-    def __init__(self, door):
-        self._door = door
-
-    def get(self, cache=False):
-        door = self._door
-        macro_server = door.macro_server
-        env = door.getEnvironment()
-
-        ret = dict(ScanDir=env.get('ScanDir'),
-                   DataCompressionRank=env.get('DataCompressionRank', 0),
-                   PreScanSnapshot=env.get('PreScanSnapshot', []))
-        scan_file = env.get('ScanFile')
-        if scan_file is None:
-            scan_file = []
-        elif isinstance(scan_file, (str, unicode)):
-            scan_file = [scan_file]
-        ret['ScanFile'] = scan_file
-        mnt_grps = macro_server.getElementNamesOfType("MeasurementGroup")
-
-        active_mnt_grp = env.get('ActiveMntGrp')
-        if active_mnt_grp is None and len(mnt_grps):
-            active_mnt_grp = mnt_grps[0]
-            door.putEnvironment('ActiveMntGrp',  active_mnt_grp)
-
-        ret['ActiveMntGrp'] = active_mnt_grp
-        ret['MntGrpConfigs'] = mnt_grp_configs = CaselessDict()
-
-        if len(mnt_grps) == 0:
-            return ret
-
-        mnt_grp_grps = PyTango.Group("grp")
-        mnt_grp_grps.add(mnt_grps)
-
-        codec = CodecFactory().getCodec('json')
-        replies = mnt_grp_grps.read_attribute("configuration")
-        for mnt_grp, reply in zip(mnt_grps, replies):
-            try:
-                mnt_grp_configs[mnt_grp] = \
-                        codec.decode(('json', reply.get_data().value),
-                                     ensure_ascii=True)[1]
-            except Exception,e:
-                from taurus.core.util.log import warning
-                warning('Cannot load Measurement group "%s": %s',repr(mnt_grp), repr(e))
-        return ret
-
-    def set(self, conf, mnt_grps=None):
-        """Sets the ExperimentConfiguration dictionary."""
-        env = dict(ScanDir=conf.get('ScanDir'),
-                   ScanFile=conf.get('ScanFile'),
-                   DataCompressionRank=conf.get('DataCompressionRank', -1),
-                   ActiveMntGrp=conf.get('ActiveMntGrp'),
-                   PreScanSnapshot=conf.get('PreScanSnapshot'))
-        if mnt_grps is None:
-            mnt_grps = conf['MntGrpConfigs'].keys()
-        self._door.putEnvironments(env)
-
-        codec = CodecFactory().getCodec('json')
-        for mnt_grp in mnt_grps:
-            try:
-                mnt_grp_cfg = conf['MntGrpConfigs'][mnt_grp]
-                if mnt_grp_cfg is None: #a mntGrp to be deleted
-                    pool = self._getPoolOfElement(mnt_grp)
-                    pool.DeleteElement(mnt_grp)
-                else:
-                    try:
-                        mnt_grp_dev = Device(mnt_grp)
-                    except: #if the mnt_grp did not already exist, create it now
-                        chconfigs = getChannelConfigs(mnt_grp_cfg)
-                        chnames,chinfos = zip(*chconfigs) #unzipping
-                        pool = self._getPoolOfElement(chnames[0]) #We assume that all the channels belong to the same pool!
-                        pool.createMeasurementGroup([mnt_grp]+list(chnames))
-                        mnt_grp_dev = Device(mnt_grp)
-
-                    # TODO when we start using measurement group extension change the
-                    # code below with the following:
-                    # mnt_grp.setConfiguration(mnt_grp_cfg)
-                    data = codec.encode(('', mnt_grp_cfg))[1]
-                    mnt_grp_dev.write_attribute('configuration', data)
-            except Exception,e:
-                from taurus.core.util.log import error
-                error('Could not create/delete/modify Measurement group "%s": %s',mnt_grp,repr(e))
-
-    def _getPoolOfElement(self, elementname):
-        ms = self._door.macro_server
-        einfo = ms.getElementInfo(elementname)
-        poolname = einfo.pool
-        return ms.getElementInfo(poolname)
-
-#    @property
-#    def _pool(self):
-#        pooldict = self._door.macro_server.getElementsOfType('Pool')
-#        if len(pooldict)==0:
-#            raise ValueError('Cannot access the Pool')
-#        elif len(pooldict)>1:
-#            raise ValueError('Multiple pools are not supported')
-#        poolinfo = pooldict.values()[0]
-#        return poolinfo
-
-
-class BaseDoor(MacroServerDevice):
-    """ Class encapsulating Door device functionality."""
-
-    On = PyTango.DevState.ON
-    Running = PyTango.DevState.RUNNING
-    Paused = PyTango.DevState.STANDBY
-
-    Critical = 'Critical'
-    Error = 'Error'
-    Warning = 'Warning'
-    Info = 'Info'
-    Output = 'Output'
-    Debug = 'Debug'
-    Result = 'Result'
-    RecordData = 'RecordData'
-
-    BlockStart  = '<BLOCK>'
-    BlockFinish = '</BLOCK>'
-
-    log_streams = (Error, Warning, Info, Output, Debug, Result)
-
-    # maximum execution time without user interruption
-    InteractiveTimeout = 0.1
-
-
-    def __init__(self, name, **kw):
-        self._log_attr = CaselessDict()
-        self._block_lines = 0
-        self._macro_server = None
-        self._running_macros = None
-        self._running_macro = None
-        self._last_running_macro = None
-        self._user_xml =None
-        self._ignore_logs = kw.get("ignore_logs", False)
-        self._silent = kw.get("silent", True)
-        self._debug = kw.get("debug", False)
-        self._output_stream = kw.get("output", sys.stdout)
-        self._writeLock = threading.Lock()
-        self._input_handler = self.create_input_handler()
-
-        self.call__init__(MacroServerDevice, name, **kw)
-
-        self._old_door_state = PyTango.DevState.UNKNOWN
-        self._old_sw_door_state = TaurusSWDevState.Uninitialized
-
-        self.getStateObj().addListener(self.stateChanged)
-
-        for log_name in self.log_streams:
-            tg_attr = self.getAttribute(log_name)
-            attr = LogAttr(self, log_name, None, tg_attr)
-            if log_name == 'Result':
-                attr.subscribeEvent(self.resultReceived, log_name)
-            else:
-                attr.subscribeEvent(self.logReceived, log_name)
-            self._log_attr[log_name] = attr
-
-        input_attr = self.getAttribute("Input")
-        input_attr.addListener(self.inputReceived)
-
-        record_data_attr = self.getAttribute('RecordData')
-        record_data_attr.addListener(self.recordDataReceived)
-
-        macro_status_attr = self.getAttribute('MacroStatus')
-        macro_status_attr.addListener(self.macroStatusReceived)
-
-        self._experiment_configuration = ExperimentConfiguration(self)
-
-    def create_input_handler(self):
-        return BaseInputHandler()
-
-    def get_input_handler(self):
-        return self._input_handler
-
-    def get_color_mode(self):
-        return "NoColor"
-
-    #def macrosChanged(self, s, v, t):
-    #    pass
-
-    @property
-    def log_start(self):
-        if not hasattr(self, "_log_start"):
-            import taurus.core.util.console
-            if self.get_color_mode() == "NoColor":
-                kls = taurus.core.util.console.NoColors
-            else:
-                kls = taurus.core.util.console.TermColors
-            self._log_start = { BaseDoor.Critical : kls.LightRed,
-                                BaseDoor.Error    : kls.Red,
-                                BaseDoor.Info     : kls.LightBlue,
-                                BaseDoor.Warning  : kls.Brown,
-                                BaseDoor.Output   : kls.Normal,
-                                BaseDoor.Debug    : kls.DarkGray,
-                                BaseDoor.Result   : kls.LightGreen }
-        return self._log_start
-
-    @property
-    def log_stop(self):
-        if not hasattr(self, "_log_stop"):
-            import taurus.core.util.console
-            if self.get_color_mode() == "NoColor":
-                kls = taurus.core.util.console.NoColors
-            else:
-                kls = taurus.core.util.console.TermColors
-            self._log_stop = {  BaseDoor.Critical : kls.Normal,
-                                BaseDoor.Error    : kls.Normal,
-                                BaseDoor.Info     : kls.Normal,
-                                BaseDoor.Warning  : kls.Normal,
-                                BaseDoor.Output   : kls.Normal,
-                                BaseDoor.Debug    : kls.Normal,
-                                BaseDoor.Result   : kls.Normal }
-        return self._log_stop
-
-    def getStateAttr(self):
-        return self._state_attr
-
-    @property
-    def macro_server(self):
-        if self._macro_server is None:
-            self._macro_server = self._get_macroserver_for_door()
-        return self._macro_server
-
-    def _get_macroserver_for_door(self):
-        """Returns the MacroServer device object in the same DeviceServer as this
-        door"""
-        db = self.factory().getDatabase()
-        door_name = self.dev_name()
-        server_list = list(db.get_server_list('MacroServer/*'))
-        server_list += list(db.get_server_list('Sardana/*'))
-        server_devs = None
-        for server in server_list:
-            server_devs = db.get_device_class_list(server)
-            devs, klasses = server_devs[0::2], server_devs[1::2]
-            for dev in devs:
-                if dev.lower() == door_name:
-                    for i, klass in enumerate(klasses):
-                        if klass == 'MacroServer':
-                            return self.factory().getDevice(devs[i])
-        else:
-            return None
-
-    def setDebugMode(self, state):
-        self._debug = state
-
-    def getDebugMode(self):
-        return self._debug
-
-    def setSilent(self, yesno):
-        self._silent = yesno
-
-    def isSilent(self):
-        return self._silent
-
-    def getLogObj(self, log_name='Debug'):
-        return self._log_attr.get(log_name, None)
-
-    def getRunningXML(self):
-        return self._user_xml
-
-    def getRunningMacro(self):
-        return self._running_macro
-
-    def getLastRunningMacro(self):
-        return self._last_running_macro
-
-    def abort(self, synch=True):
-        if not synch:
-            self.command_inout("AbortMacro")
-            return
-
-        evt_wait = AttributeEventWait(self.getAttribute("state"))
-        evt_wait.lock()
-        try:
-            time_stamp = time.time()
-            self.command_inout("AbortMacro")
-            evt_wait.waitEvent(self.Running, equal=False, after=time_stamp,
-                               timeout=self.InteractiveTimeout)
-        finally:
-            evt_wait.unlock()
-            evt_wait.disconnect()
-
-    def stop(self, synch=True):
-        if not synch:
-            self.command_inout("StopMacro")
-            return
-
-        evt_wait = AttributeEventWait(self.getAttribute("state"))
-        evt_wait.lock()
-        try:
-            time_stamp = time.time()
-            self.command_inout("StopMacro")
-            evt_wait.waitEvent(self.Running, equal=False, after=time_stamp,
-                               timeout=self.InteractiveTimeout)
-        finally:
-            evt_wait.unlock()
-            evt_wait.disconnect()
-
-    def _clearRunMacro(self):
-        # Clear the log buffer
-        map(LogAttr.clearLogBuffer, self._log_attr.values())
-        self._running_macros = None
-        self._running_macro = None
-        self._user_xml =None
-        self._block_lines = 0
-
-    def preRunMacro(self, obj, parameters):
-        self._clearRunMacro()
-
-        xml_root = None
-        if isinstance(obj ,(str, unicode)):
-            if obj.startswith('<') and not parameters:
-                xml_root = etree.fromstring(obj)
-            else:
-                macros = []
-                if len(parameters) == 0:
-                    macros_strs = obj.split('\n')
-                    for m in macros_strs:
-                        pars = m.split()
-                        macros.append((pars[0], pars[1:]))
-                else:
-                    parameters = map(str, parameters)
-                    macros.append((obj, parameters))
-                xml_root = xml_seq = etree.Element('sequence')
-                for m in macros:
-                    xml_macro = etree.SubElement(xml_seq, 'macro')
-                    xml_macro.set('name', m[0])
-                    xml_macro.set('id', str(uuid.uuid1()))
-                    for p in m[1]:
-                        etree.SubElement(xml_macro, 'param', value=p)
-        elif etree.iselement(obj):
-            xml_root = obj
-        else:
-            raise TypeError('obj must be a string or a etree.Element')
-
-        self._running_macros = {}
-        for macro_xml in xml_root.xpath('//macro'):
-            id, name = macro_xml.get('id'), macro_xml.get('name')
-            self._running_macros[id] = Macro(self, name, id, macro_xml)
-        return xml_root
-
-    def postRunMacro(self, result, synch):
-        pass
-
-    def runMacro(self, obj, parameters=[], synch=False):
-        self._user_xml = self.preRunMacro(obj, parameters)
-        result = self._runMacro(self._user_xml, synch=synch)
-        return self.postRunMacro(result, synch)
-
-    def _runMacro(self, xml, synch=False):
-        if not synch:
-            return self.command_inout("RunMacro", [etree.tostring(xml)])
-        timeout = self.InteractiveTimeout
-        evt_wait = self._getEventWait()
-        evt_wait.connect(self.getAttribute("state"))
-        evt_wait.lock()
-        try:
-            evt_wait.waitEvent(self.Running, equal=False, timeout=timeout)
-            ts = time.time()
-            result = self.command_inout("RunMacro", [etree.tostring(xml)])
-            evt_wait.waitEvent(self.Running, after=ts, timeout=timeout)
-            if synch:
-                evt_wait.waitEvent(self.Running, equal=False, after=ts,
-                                   timeout=timeout)
-        finally:
-            self._clearRunMacro()
-            evt_wait.unlock()
-            evt_wait.disconnect()
-        return result
-
-    def stateChanged(self, s, t, v):
-        self._old_door_state = self.getState()
-        self._old_sw_door_state = self.getSWState()
-
-    def resultReceived(self, log_name, result):
-        """Method invoked by the arrival of a change event on the Result attribute"""
-        if self._ignore_logs or self._running_macro is None:
-            return
-        self._running_macro.setResult(result)
-        return result
-
-    def putEnvironment(self, name, value):
-        self.macro_server.putEnvironment(name, value)
-
-    def putEnvironments(self, obj):
-        self.macro_server.putEnvironments(obj)
-
-    setEnvironment = putEnvironment
-    setEnvironments = putEnvironments
-
-    def getEnvironment(self, name=None):
-        return self.macro_server.getEnvironment(name=name)
-
-    def inputReceived(self, s, t, v):
-        if t not in CHANGE_EVT_TYPES:
-            return
-        if v is None or self._running_macros is None:
-            return
-        input_data = CodecFactory().decode(('json', v.value))
-        self.processInput(input_data)
-
-    def processInput(self, input_data):
-        TaurusManager().addJob(self._processInput, None, input_data)
-
-    def _processInput(self, input_data):
-        input_type = input_data['type']
-        if input_type == 'input':
-            result = self._input_handler.input(input_data)
-            if result is '' and 'default_value' in input_data:
-                result = input_data['default_value']
-            result = CodecFactory().encode('json', ('', result))[1]
-            self.write_attribute('Input', result)
-        elif input_type == 'timeout':
-            self._input_handler.input_timeout(input_data)
-            
-    def recordDataReceived(self, s, t, v):
-        if t not in CHANGE_EVT_TYPES: return
-        return self._processRecordData(v)
-
-    def _processRecordData(self, data):
-        if data is None: return
-        # make sure we get it as string since PyTango 7.1.4 returns a buffer
-        # object and json.loads doesn't support buffer objects (only str)
-        data = map(str, data.value)
-
-        size = len(data[1])
-        if size == 0: return
-        format = data[0]
-        codec = CodecFactory().getCodec(format)
-        data = codec.decode(data)
-        return data
-    
-    def processRecordData(self, data):
-        pass
-    
-    def macroStatusReceived(self, s, t, v):
-        if v is None or self._running_macros is None:
-            return
-        if t not in CHANGE_EVT_TYPES: return
-
-        # make sure we get it as string since PyTango 7.1.4 returns a buffer
-        # object and json.loads doesn't support buffer objects (only str)
-        v = map(str, v.value)
-        if not len(v[1]):
-            return
-        format = v[0]
-        codec = CodecFactory().getCodec(format)
-
-        # make sure we get it as string since PyTango 7.1.4 returns a buffer
-        # object and json.loads doesn't support buffer objects (only str)
-        v[1] = str(v[1])
-        fmt, data = codec.decode(v)
-        for macro_status in data:
-            id = macro_status.get('id')
-            macro = self._running_macros.get(id)
-            self._last_running_macro = self._running_macro = macro
-            # if we don't have the ID it's because the macro is running a submacro
-            # or another client is connected to the same door (shame on him!) and
-            # executing a macro we discard this event
-            if macro is not None:
-                macro.__dict__.update(macro_status)
-        return data
-
-    def logReceived(self, log_name, output):
-        if not output or self._silent or self._ignore_logs:
-            return
-
-        if log_name == self.Debug and not self._debug:
-            return
-
-        o = self.log_start[log_name]
-        for line in output:
-            if not self._debug:
-                if line == self.BlockStart:
-                    for i in xrange(self._block_lines):
-                        o += '\x1b[2K\x1b[1A\x1b[2K' #erase current line, up one line, erase current line
-                    self._block_lines = 0
-                    continue
-                elif line == self.BlockFinish:
-                    continue
-            o += "%s\n" % line
-            self._block_lines += 1
-        o += self.log_stop[log_name]
-        self.write(o)
-
-    def write(self, msg, stream=None):
-        if self.isSilent():
-            return
-        msg = msg.encode('utf-8')
-        self._output_stream = sys.stdout
-        out = self._output_stream
-        if not stream is None:
-            start,stop = self.log_start.get(stream), self.log_stop.get(stream)
-            if start is not None and stop is not None:
-                out.write(start)
-                out.write(msg)
-                out.write(stop)
-                out.flush()
-                return
-        out.write(msg)
-        out.flush()
-
-    def writeln(self, msg='', stream=None):
-        self.write("%s\n" % msg, stream=stream)
-
-    def getExperimentConfigurationObj(self):
-        return self._experiment_configuration
-
-    def getExperimentConfiguration(self):
-        return self._experiment_configuration.get()
-
-    def setExperimentConfiguration(self, config, mnt_grps=None):
-        self._experiment_configuration.set(config, mnt_grps=mnt_grps)
-
-
-class UnknownMacroServerElementFormat(Exception):
-    pass
-
-
-class MacroPath(object):
-
-    def __init__(self, ms):
-        self._ms = weakref.ref(ms)
-        self.refresh()
-
-    def refresh(self):
-        self.macro_path = mp = self._ms().get_property("MacroPath")["MacroPath"]
-        self.base_macro_path = osp.commonprefix(self.macro_path)
-        self.rel_macro_path = [ osp.relpath for p in mp, self.base_macro_path ]
-
-
-class Environment(dict):
-
-    def __init__(self, macro_server):
-        dict.__setattr__(self, "_macro_server_", weakref.ref(macro_server))
-
-    def __setattr__(self, key, value):
-        ms = self._macro_server_()
-        if ms is not None:
-            ms.putEnvironment(key, value)
-
-    def __getattr__(self, key):
-        return self[key]
-
-    def __delattr__(self, key):
-        ms = self._macro_server_()
-        if ms is not None:
-            ms.removeEnvironment(key)
-
-    def __dir__(self):
-        return [ key for key in self.keys() if not key.startswith("_") ]
-
-
-class BaseMacroServer(MacroServerDevice):
-    """Class encapsulating Macro Server device functionality."""
-
-    def __init__(self, name, **kw):
-        self._env = Environment(self)
-        self._elements = BaseSardanaElementContainer()
-        self.call__init__(MacroServerDevice, name, **kw)
-
-        attr = self.getAttribute("Elements")
-        attr.setSerializationMode(TaurusSerializationMode.Serial)
-        attr.addListener(self.on_elements_changed)
-        attr.setSerializationMode(TaurusSerializationMode.Concurrent)
-
-        attr = self.getAttribute('Environment')
-        attr.setSerializationMode(TaurusSerializationMode.Serial)
-        attr.addListener(self.on_environment_changed)
-        attr.setSerializationMode(TaurusSerializationMode.Concurrent)
-
-    NO_CLASS_TYPES = 'ControllerClass', 'ControllerLibrary', \
-                     'MacroLibrary', 'Instrument', 'Meta', 'ParameterType'
-
-    def on_environment_changed(self, evt_src, evt_type, evt_value):
-        try:
-            return self._on_environment_changed(evt_src, evt_type, evt_value)
-        except Exception:
-            self.error("Exception occurred processing environment")
-            self.error("Details:", exc_info=1)
-            return set(), set(), set()
-
-    def _on_environment_changed(self, evt_src, evt_type, evt_value):
-        ret = added, removed, changed = set(), set(), set()
-        if evt_type not in CHANGE_EVT_TYPES:
-            return ret
-
-        env = CodecFactory().decode(evt_value.value)
-
-        for key, value in env.get('new', {}).items():
-            self._addEnvironment(key, value)
-            added.add(key)
-        for key in env.get('del', []):
-            self._removeEnvironment(key)
-            removed.add(key)
-        for key, value in env.get('change', {}).items():
-            self._removeEnvironment(key)
-            self._addEnvironment(key, value)
-            changed.add(key)
-        return ret
-
-    def _addEnvironment(self, key, value):
-        self._env[key] = value
-
-    def _removeEnvironment(self, key):
-        try:
-            self._env.pop(key)
-        except KeyError:
-            pass
-
-    def putEnvironment(self, name, value):
-        self.putEnvironments({ name : value })
-
-    def putEnvironments(self, obj):
-        obj = dict(new=obj)
-        codec = CodecFactory().getCodec('pickle')
-        self.write_attribute('Environment', codec.encode(('', obj)))
-
-    setEnvironment = putEnvironment
-    setEnvironments = putEnvironments
-
-    def getEnvironment(self, name=None):
-        if name is None:
-            return self._env
-        else:
-            return self._env[name]
-
-    def removeEnvironment(self, key):
-        keys = key,
-        return self.removeEnvironments(keys)
-
-    def removeEnvironments(self, keys):
-        obj = { 'del' : keys }
-        codec = CodecFactory().getCodec('pickle')
-        self.write_attribute('Environment', codec.encode(('', obj)))
-
-    def getObject(self, element_info):
-        elem_type = element_info.getType()
-        data = element_info._data
-        if elem_type in self.NO_CLASS_TYPES:
-            obj = object()
-        elif "MacroCode" in element_info.interfaces:
-            obj = self._createMacroClassObject(element_info)
-        else:
-            obj = self._createDeviceObject(element_info)
-        return obj
-
-    def _createMacroClassObject(self, element_info):
-        return MacroInfo(from_json=element_info._data)
-
-    def _createDeviceObject(self, element_info):
-        return Factory().getDevice(element_info.full_name)
-
-    def on_elements_changed(self, evt_src, evt_type, evt_value):
-        try:
-            return self._on_elements_changed(evt_src, evt_type, evt_value)
-        except Exception:
-            self.error("Exception occurred processing elements")
-            self.error("Details:", exc_info=1)
-            return set(), set(), set()
-
-    def _on_elements_changed(self, evt_src, evt_type, evt_value):
-        ret = added, removed, changed = set(), set(), set()
-        if evt_type not in CHANGE_EVT_TYPES:
-            return ret
-        try:
-            elems = CodecFactory().decode(evt_value.value, ensure_ascii=True)
-        except:
-            self.error("Could not decode element info format=%s len=%s",
-                       evt_value.value[0], len(evt_value.value[1]))
-            return ret
-
-        for element_data in elems.get('new', ()):
-            element_data['manager'] = self
-            element = self._addElement(element_data)
-            added.add(element)
-        for element_data in elems.get('del', ()):
-            element = self._removeElement(element_data)
-            removed.add(element)
-        for element_data in elems.get('change', ()):
-            element = self._removeElement(element_data)
-            element_data['manager'] = self
-            element = self._addElement(element_data)
-            changed.add(element)
-        return ret
-
-    def _addElement(self, element_data):
-        element = BaseSardanaElement(**element_data)
-        self.getElementsInfo().addElement(element)
-        return element
-
-    def _removeElement(self, element_data):
-        name = element_data['name']
-        element = self.getElementInfo(name)
-        self.getElementsInfo().removeElement(element)
-        return element
-
-    def getElementsInfo(self):
-        return self._elements
-
-    def getElements(self):
-        return self.getElementsInfo().getElements()
-
-    def getElementInfo(self, name):
-        return self.getElementsInfo().getElement(name)
-
-    def getElementNamesOfType(self, elem_type):
-        return self.getElementsInfo().getElementNamesOfType(elem_type)
-
-    def getElementNamesWithInterface(self, interface):
-        return self.getElementsInfo().getElementNamesWithInterface(interface)
-
-    def getElementsWithInterface(self, interface):
-        return self.getElementsInfo().getElementsWithInterface(interface)
-
-    def getElementsWithInterfaces(self, interfaces):
-        return self.getElementsInfo().getElementsWithInterfaces(interfaces)
-
-    def getElementsOfType(self, elem_type):
-        return self.getElementsInfo().getElementsOfType(elem_type)
-
-    def getElementsOfTypes(self, elem_types):
-        elems = CaselessDict()
-        for elem_type in elem_types:
-            elems.update(self.getElementsOfType(elem_type))
-        return elems
-
-    def getInterfaces(self):
-        return self.getElementsInfo().getInterfaces()
-
-    def getExpChannelElements(self):
-        channel_types = "CTExpChannel", "ZeroDExpChannel", "OneDExpChannel", \
-            "PseudoCounter"
-        return self.getElementsOfTypes(channel_types)
-
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # Macro API
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-
-    def getMacros(self):
-        return dict(self.getElementsInfo().getElementsWithInterface('MacroCode'))
-
-    def getMacroInfoObj(self, macro_name):
-        return self.getElementsInfo().getElementWithInterface(macro_name,'MacroCode')
-
-    def getMacroStrList(self):
-        return self.getElementNamesWithInterface('MacroCode')
-
-    def getMacroNodeObj(self, macro_name):
-        """
-        This method retrieves information about macro from MacroServer
-        and creates MacroNode object, filled with all information about parameters.
-
-        :param macro_name: (str) macro name
-
-        :return: (MacroNode)
-
-        See Also: fillMacroNodeAddidtionalInfos
-        """
-
-        macroNode = MacroNode(name=macro_name)
-        macroInfoObj = self.getMacroInfoObj(macro_name)
-        if macroInfoObj is None: return
-        allowedHookPlaces = []
-        hints = macroInfoObj.hints
-        if hints is not None:
-            for hook in hints.get('allowsHooks', []):
-                allowedHookPlaces.append(str(hook))
-        macroNode.setAllowedHookPlaces(allowedHookPlaces)
-        hasParams = bool(len(macroInfoObj.parameters))
-        macroNode.setHasParams(hasParams)
-        paramsInfo = macroInfoObj.parameters
-        for paramInfo in paramsInfo:
-            param = ParamFactory(paramInfo)
-            macroNode.addParam(param)
-        return macroNode
-
-    def validateMacroName(self, macroName):
-        macroInfo = self.getElementInfo(macroName)
-        if macroInfo is None:
-            raise Exception("%s macro does not exist in this sardana system." % macroName)
-        elif macroInfo.type != 'MacroClass':
-            raise Exception("%s element is not a macro." % macroName)
-        return True
-
-    def validateMacroNode(self, macroNode):
-        paramNodes = macroNode.children()
-        for paramNode in paramNodes:
-            self.validateParamNode(paramNode)
-        return True
-
-    def validateParamNode(self, paramNode):
-        assert isinstance(paramNode, ParamNode)
-        if isinstance(paramNode, SingleParamNode):
-            self.validateSingleParam(paramNode)
-        else:
-            self.validateRepeatParam(paramNode)
-        return True
-
-    def validateSingleParam(self, singleParamNode):
-        name = singleParamNode.name()
-        type = singleParamNode.type()
-        value = singleParamNode.value()
-
-        if type == "Boolean":
-            pass
-        elif type == "Env":
-            pass
-        elif type == "File":
-            pass
-        elif type == "Filename":
-            pass
-        elif type == "MotorParam":
-            pass
-        elif type == "String":
-            pass
-        elif type == "User":
-            pass
-        elif type == "MotorParam":
-            pass
-        elif type == "Integer":
-            int(value)
-            min = singleParamNode.min()
-            max = singleParamNode.max()
-            if min != None and value < min:
-                raise  Exception("%s parameter value: %s is below minimum allowed value." % (name, value))
-            if max != None and value > max:
-                raise  Exception("%s parameter value: %s is above maximum allowed value." % (name, value))
-        elif type == "Float":
-            float(value)
-            min = singleParamNode.min()
-            max = singleParamNode.max()
-            if min != None and value < min:
-                raise  Exception("%s parameter value: %s is below minimum allowed value." % (name, value))
-            if max != None and value > max:
-                raise  Exception("%s parameter value: %s is above maximum allowed value." % (name, value))
-        else:
-            allowedInterfaces = self.getInterfaces().keys()
-            if not type in allowedInterfaces:
-                raise Exception("No element with %s interface exist in this sardana system." % type)
-            allowedValues = self.getElementNamesWithInterface(type)
-            if not value in allowedValues:
-                raise Exception("%s element with %s interface does not exist in this sardana system." % (value, type))
-        return True
-
-    def validateRepeatParam(self, repeatParamNode):
-        paramName = repeatParamNode.name()
-        if repeatParamNode.isBelowMin():
-            raise  Exception("%s param repeats has not enough repeats." % (paramName))
-        if repeatParamNode.isAboveMax():
-            raise  Exception("%s param repeat has too many repeats." % (paramName))
-        repetitions = repeatParamNode.children()
-        for repeat in repetitions:
-            params = repeat.children()
-            for param in params:
-                if isinstance(param, SingleParamNode):
-                    self.validateSingleParam(param)
-                else:
-                    self.validateRepeatParam(param)
-        return True
-
-
-    def fillMacroNodeAdditionalInfos(self, macroNode):
-        """
-        This method fills macroNode information which couldn't be stored
-        in XML file.
-
-        :param macroNode: (MacroNode) macro node obj populated from XML information
-
-        See Also: getMacroNodeObj
-        """
-        macroName = macroNode.name()
-        macroInfoObj = self.getMacroInfoObj(macroName)
-        if macroInfoObj is None:
-            raise Exception("It was not possible to get information about %s macro.\nCheck if MacroServer is alive and if this macro exist." % macroName)
-        allowedHookPlaces = []
-        hints = macroInfoObj.hints or {}
-        for hook in hints.get("allowsHooks", []):
-            allowedHookPlaces.append(str(hook))
-        macroNode.setAllowedHookPlaces(allowedHookPlaces)
-        hasParams = macroInfoObj.hasParams()
-        macroNode.setHasParams(hasParams)
-        if hasParams:
-            paramList = macroInfoObj.getParamList()
-            for paramNode, paramInfo in zip(macroNode.params(), paramList):
-                self.__fillParamNodeAdditionalInfos(paramNode, paramInfo)
-
-    def __fillParamNodeAdditionalInfos(self, paramNode, paramInfo):
-        """
-        This is a protected method foreseen to use only internally by
-        fillMacroNodeAdditionaInfos, to be called for every param node obj."""
-        type = paramInfo.get('type')
-        paramNode.setDescription(str(paramInfo.get("description")))
-        min = paramInfo.get("min")
-        paramNode.setMin(min)
-        max = paramInfo.get("max")
-        paramNode.setMax(max)
-        if isinstance(type,list):
-            paramNode.setParamsInfo(type)
-            for repeatNode in paramNode.children():
-                for internalParamNode, internalParamInfo in zip(repeatNode.children(), type):
-                    self.__fillParamNodeAdditionalInfos(internalParamNode, internalParamInfo)
-        else:
-            paramNode.setType(str(type))
-            paramNode.setDefValue(str(paramInfo.get("default_value")))
-
-    def recreateMacroNodeAndFillAdditionalInfos(self, macroNode):
-        """
-        This method filles macroNode information which couldn't be stored
-        in plain text file.
-
-        :param macroNode: (MacroNode) macro node obj populated from plain text information
-
-        See Also: getMacroNodeObj
-        """
-        macroName = macroNode.name()
-        self.validateMacroName(macroName)
-        macroInfoObj = self.getMacroInfoObj(macroName)
-        if macroInfoObj is None:
-            raise Exception("It was not possible to get information about %s macro.\nCheck if MacroServer is alive and if this macro exist." % macroName)
-        allowedHookPlaces = []
-        hints = macroInfoObj.hints or {}
-        for hook in hints.get("allowsHooks", []):
-            allowedHookPlaces.append(str(hook))
-        macroNode.setAllowedHookPlaces(allowedHookPlaces)
-        hasParams = macroInfoObj.hasParams()
-        macroNode.setHasParams(hasParams)
-        if not hasParams:
-            return
-        paramInfosList = macroInfoObj.getParamList()
-        paramNodes = macroNode.params()
-        paramIndex = 0
-        for paramNode, paramInfo in zip(paramNodes, paramInfosList):
-            paramType = paramInfo.get('type')
-            if isinstance(paramType,list):
-                paramNode = self.__recreateParamRepeatNodes(macroNode, paramIndex, paramInfo)
-            else:
-                paramNode.setName(paramInfo.get("name"))
-            self.__recreateParamNodeAdditionalInfos(paramNode, paramInfo)
-            paramIndex += 1
-        self.validateMacroNode(macroNode)
-
-    def __recreateParamRepeatNodes(self, macroNode, indexToStart, repeatParamInfo):
-        #extracting rest of the single params which have to be adopted to param repeats
-        paramNodes = []
-        while len(macroNode.params()) > indexToStart:
-            lastParam = macroNode.popParam()
-            paramNodes.append(lastParam)
-        paramNodes.reverse()
-
-        nrOfSingleParams = len(paramNodes)
-        paramName = repeatParamInfo.get("name")
-        min = repeatParamInfo.get("min")
-        max = repeatParamInfo.get("max")
-        repeatParamChildrenInfos = repeatParamInfo.get("type")
-
-        if nrOfSingleParams % len(repeatParamChildrenInfos):
-            raise Exception("Param repeat %s doesn't have correct number of repetitions" % paramName)
-        nrOfRepeats = nrOfSingleParams / len(repeatParamChildrenInfos)
-        repeatParamNode = RepeatParamNode(macroNode, repeatParamInfo)
-        for repeatIdx in range(nrOfRepeats):
-            repeatNode = RepeatNode(repeatParamNode)
-            for singleParamInfo in repeatParamChildrenInfos:
-                singleParamName = singleParamInfo.get('name')
-                singleParamNode = paramNodes.pop(0)
-                singleParamNode.setName(singleParamName)
-                repeatNode.insertChild(singleParamNode)
-            repeatParamNode.insertChild(repeatNode)
-        macroNode.addParam(repeatParamNode)
-        return repeatParamNode
-
-    def __recreateParamNodeAdditionalInfos(self, paramNode, paramInfo):
-        """
-        This is a protected method foreseen to use only internally by
-        fillMacroNodeAdditionaInfos, to be called for every param node obj."""
-        paramType = paramInfo.get('type')
-        min = paramInfo.get("min")
-        max = paramInfo.get("max")
-        paramNode.setMin(min)
-        paramNode.setMax(max)
-        paramNode.setDescription(str(paramInfo.get("description")))
-
-        if type(paramType) == list:
-            paramNode.setParamsInfo(paramType)
-            for repeatNode in paramNode.children():
-                for internalParamNode, internalParamInfo in zip(repeatNode.children(), paramType):
-                    self.__recreateParamNodeAdditionalInfos(internalParamNode, internalParamInfo)
-        else:
-            paramNode.setType(paramType)
-            paramNode.setDefValue(str(paramInfo.get("default_value")))
-
-
-    def getMacroPathObj(self, cache=False):
-        if not hasattr(self, "_macro_path"):
-            self._macro_path = MacroPath(self)
-        elif not cache:
-            self._macro_path.refresh()
-        return self._macro_path
-
-
-def registerExtensions():
-    """Registers the macroserver extensions in the :class:`taurus.core.tango.TangoFactory`"""
-    factory = Factory('tango')
-    factory.registerDeviceClass('MacroServer', BaseMacroServer)
-    factory.registerDeviceClass('Door', BaseDoor)
diff --git a/lib/taurus/core/tango/sardana/motion.py b/lib/taurus/core/tango/sardana/motion.py
deleted file mode 100644
index db8fb9c..0000000
--- a/lib/taurus/core/tango/sardana/motion.py
+++ /dev/null
@@ -1,567 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""The sardana motion submodule. It contains specific part of sardana motion"""
-
-__all__ = ["Moveable", "MoveableSource", "Motion", "MotionGroup"]
-
-__docformat__ = 'restructuredtext'
-
-import time
-
-from taurus.core.util.containers import CaselessDict
-
-class Moveable:
-    """ An item that can 'move'. In order to move it you need to provide a list
-    of values (normally interpreted as motor positions).
-    Therefore this Moveable can represent a single motor, a group of motors"""
-    
-    def __init__(self):
-        pass
-    
-    def startMove(self, new_pos, timeout=None):
-        """ startMove(sequence<float> new_pos, double timeout=None) -> sequence<id>
-        
-        Calling this method will trigger a movement off all components of
-        the movement."""
-        pass
-
-    def waitMove(self, timeout=None, id=None):
-        """ waitMove(float timeout=None, sequence<id> id=None) -> None
-        
-        Waits for the movement to end. If no movement is active the method
-        returns immediately."""
-        pass
-
-    def move(self, new_pos, timeout=None):
-        """ move(list<double> new_pos, timeout=None) -> None 
-        
-        Triggers a movement and waits for it to end.
-        
-        """
-        self.waitMove(id=self.startMove(new_pos, timeout=timeout))
-
-    def iterMove(self, new_pos, timeout=None):
-        """ generator for motor positions"""
-        pass
-
-    def getLastMotionTime(self):
-        raise NotImplementedError
-        
-    def getTotalLastMotionTime():
-        raise NotImplementedError
-
-    def abort(self, wait_ready=True, timeout=None):
-        pass
-    
-    def readPosition(self, force=False):
-        pass
-    
-    def getMoveableSource(self):
-        return None
-    
-    def getSize(self):
-        return 0
-    
-    def getIndex(self, name):
-        pass
-
-
-class MoveableSource:
-    """ A container of Moveable items. """
-    
-    def __init__(self):
-        pass
-    
-    def getMoveable(self, names):
-        """ getMoveable(list<string> names) -> Moveable 
-
-        Returns a Moveable object that handles all the moveable items given in 
-        names.
-        """
-        pass
-
-
-class BaseMotion(Moveable):
-    
-    def __init__(self, elements, moveable_srcs, allow_repeat=False,
-                 allow_unknown=False, read_only=False):
-        self.read_only = read_only
-        
-        if len(elements) == 0:
-            raise Exception("Motion with no elements")
-        
-        first_elem = elements[0]
-        
-        if isinstance(first_elem, (str, unicode)):
-            self.init_by_names(elements, moveable_srcs, allow_repeat,
-                               allow_unknown)
-        else:
-            self.init_by_movables(elements, moveable_srcs, allow_repeat,
-                                  allow_unknown)
-    
-    def getMoveable(self, sources, name):
-        for source in sources:
-            moveable = source.getMoveable(name)
-            if moveable is not None:
-                return moveable
-   
-
-class MotionGroup(BaseMotion):
-    """ A virtual motion group object """
-
-    def __init__(self, elements, moveable_srcs, allow_repeat=False,
-                 allow_unknown=False, read_only=False):
-        BaseMotion.__init__(self, elements, moveable_srcs,
-                            allow_repeat=allow_repeat,
-                            allow_unknown=allow_unknown, read_only=read_only)
-        self.__total_motion_time = 0
-        
-    def init_by_movables(self, elements, moveable_srcs, allow_repeat, allow_unknown):
-        self.moveable_list = elements
-    
-    def init_by_names(self, names, moveable_srcs, allow_repeat, allow_unknown):
-        moveables = [ self.getMoveable(moveable_srcs, name) for name in names ]
-        self.init_by_movables(moveables, moveable_srcs, allow_repeat,
-                              allow_unknown)
-
-    def getLastMotionTime(self):
-        times = [ moveable.getLastMotionTime() for moveable in self.moveable_list ]
-        return max(times)
-        
-    def getTotalLastMotionTime():
-        return self.__total_motion_time
-    
-    def startMove(self, pos_list, timeout=None):
-        if self.read_only:
-            raise Exception("Trying to move read only motion")
-        
-        if len(pos_list) != len(self.moveable_list):
-            raise Exception("Invalid number of position values")
-
-        ids = []
-        for i, moveable in enumerate(self.moveable_list):
-            ids.append( moveable.startMove(pos_list[i], timeout=timeout) )
-        return ids
-
-    def waitMove(self, timeout=None, id=None):
-        if id is None:
-            id = len(self.moveable_list)*[None]
-        for i, moveable in enumerate(self.moveable_list):
-            moveable.waitMove(timeout=timeout, id=id[i])
-
-    def move(self, new_pos, timeout=None):
-        start_time = time.time()
-        states, positions = [], []
-        for moveable, pos in zip(self.moveable_list, new_pos):
-            res = moveable.move(pos, timeout=timeout)
-            states.append(res[0])
-            positions.extend(res[1])
-        import PyTango
-        state = PyTango.DevState.ON
-        if PyTango.DevState.FAULT in states:
-            state = PyTango.DevState.FAULT
-        elif PyTango.DevState.ALARM in states:
-            state = PyTango.DevState.ALARM
-        elif PyTango.DevState.UNKNOWN in states:
-            state = PyTango.DevState.UNKNOWN
-        elif PyTango.DevState.MOVING in states:
-            state = PyTango.DevState.MOVING
-        self.__total_motion_time = time.time() - start_time
-        return state, positions
-
-    def iterMove(self, new_pos, timeout=None):
-        """ generator for motor positions"""
-        raise NotImplementedError
-    
-    def getStatus(self):
-#        res = []
-#        for moveable in self.moveable_list:
-#            status = moveable.status.split('\n')
-#            res.append(moveable.getName() + ":")
-#            for st in status:
-#                res.append("    " + st)
-#        return "\n".join(res)
-        return "\n".join([ m.status() for m in self.moveable_list ])
-
-    def readState(self, force=False):
-        if len(self.moveable_list) == 1:
-            return self.moveable_list[0].getState()
-        return [ m.getState() for m in self.moveable_list ]
-
-    def readPosition(self, force=False):
-        return [ m.readPosition(force=force) for m in self.moveable_list ]
-    
-    def abort(self, wait_ready=True, timeout=None):
-        for moveable in self.moveable_list:
-            try:
-                moveable.abort(wait_ready=wait_ready, timeout=timeout)
-            except:
-                pass
-
-    def stop(self, wait_ready=True, timeout=None):
-        for moveable in self.moveable_list:
-            try:
-                moveable.stop(wait_ready=wait_ready, timeout=timeout)
-            except:
-                pass
-    
-    def read(self):
-        pass
-
-
-class Motion(BaseMotion):
-    """ A motion object """
-
-    def __init__(self, elements, moveable_srcs, allow_repeat=False,
-                 allow_unknown=False, read_only=False):
-        BaseMotion.__init__(self, elements, moveable_srcs,
-                            allow_repeat=allow_repeat,
-                            allow_unknown=allow_unknown, read_only=read_only)
-        self.__total_motion_time = 0
-    
-    def init_by_movables(self, elements, moveable_srcs, allow_repeat, allow_unknown):
-        # TODO: Optimize this. Dont call init_by_names. It its possible to do it
-        # manually with some performance gain
-        names = [ elem.getName() for elem in elements]
-        self.init_by_names(names, moveable_srcs, allow_repeat, allow_unknown)
-        
-    def init_by_names(self, names, moveable_srcs, allow_repeat, allow_unknown):
-
-        ms_elem_names = self.getElemNamesByMoveableSource(names, moveable_srcs,
-            allow_repeat=allow_repeat, allow_unknown=allow_unknown)
-        
-        # map<MoveableSource, Moveable>
-        ms_moveables = {}
-        for moveable_source, ms_names in ms_elem_names.items():
-            moveable = moveable_source.getMoveable(ms_names)
-            ms_moveables[moveable_source] = moveable
-
-        # list<Moveable>
-        moveable_list = ms_moveables.values()
-        
-        # list<tuple(int moveable_index, int position_index)>
-        pos_to_moveable = len(names)*[None,]
-        
-        for i, name in enumerate(names):
-            moveable_index, position_index = -1, -1
-            for j, moveable in enumerate(moveable_list):
-                position_index = moveable.getIndex(name)
-                if position_index >= 0:
-                    pos_to_moveable[i] = (j, position_index)
-                    break
-        
-        # list<string> moveable item names
-        self.names = names
-        
-        # list<Moveable>
-        self.moveable_list = moveable_list
-        
-        # list<tuple(int moveable_index, int position_index)>
-        # the list index itself is the position index for this motion
-        # the tuple for a given index gives the corresponding moveable index and
-        # the position index inside the moveable object 
-        self.pos_to_moveable = pos_to_moveable
-        
-        # map<MoveableSource, Moveable>
-        self.ms_moveables = ms_moveables
-    
-        # a buffer for positions for performance reasons
-        #list<list<double>> index of outer list is the moveable index. The 
-        #contents of the list are the ordered positions for that moveable 
-        pos_buff = []
-        total_count = 0
-        for m in moveable_list:
-            count = m.getSize()
-            total_count += count
-            pos_buff.append(m.getSize()*[0.0,])
-        self.pos_buff = pos_buff
-        
-        assert(len(self.pos_to_moveable) == len(self.names))
-        assert(total_count == len(self.names))
-    
-    def getElemNamesByMoveableSource(self, names, moveable_sources, 
-                                    allow_repeat,
-                                    allow_unknown):
-        """ getElemNamesByMoveableSource(list<str>names, 
-                                        list<MoveableSource> moveable_sources, 
-                                        bool allow_repeat, bool allow_unknown)
-        
-        Organizes the elements by moveable source. The result is a dictionary
-        with key being the MoveableSource and data a list of the names that 
-        belong to the that motion source.
-        """ 
-
-        ms_elems = {}
-        
-        for name in names:
-            moveable = None
-            
-            for moveable_source in moveable_sources:
-                 moveable = moveable_source.getMoveable([name])
-                 if not moveable is None:
-                     if not ms_elems.has_key(moveable_source):
-                         ms_elems[moveable_source] = []
-                     moveable_source_moveables = ms_elems.get(moveable_source)
-                     present = name in moveable_source_moveables
-                     if not present or (present and allow_repeat):
-                         moveable_source_moveables.append(name)
-                         break
-                     elif present and not allow_repeat:
-                         raise Exception("Moveable item %s appears more "
-                                         "than once" % name)
-            if moveable is None and not allow_unknown:
-                 raise Exception("Moveable item %s not found" % name)
-        return ms_elems
-    
-    def getLastMotionTime(self):
-        times = [ moveable.getLastMotionTime() for moveable in self.moveable_list ]
-        return max(times)
-        
-    def getTotalLastMotionTime():
-        return self.__total_motion_time
-            
-    def startMove(self, pos_list, timeout=None):
-        if self.read_only:
-            raise Exception("Trying to move read only motion")
-        
-        if len(pos_list) != len(self.names):
-            raise Exception("Invalid number of position values")
-        
-        buff = self.pos_buff
-        for i, pair in enumerate(self.pos_to_moveable):
-            pos = pos_list[i]
-            buff[pair[0]][pair[1]] = pos 
-        
-        ids = []
-        for i, moveable in enumerate(self.moveable_list):
-            ids.append(moveable.startMove(buff[i], timeout=timeout))
-        return ids
-
-    def waitMove(self, timeout=None, id=None):
-        if id is None:
-            id = len(self.moveable_list)*[None]
-        for i, moveable in enumerate(self.moveable_list):
-            moveable.waitMove(timeout=timeout, id=id[i])
-
-    def move(self, new_pos, timeout=None):
-        start_time = time.time()
-        if len(self.moveable_list) == 1:
-            moveable = self.moveable_list[0]
-            ret = moveable.move(new_pos, timeout=timeout)
-        else:
-            start, ids = 0, []
-            for moveable in self.moveable_list:
-                end = start + moveable.getSize()
-                pos = new_pos[start:end]
-                id = moveable.startMove(pos, timeout=timeout)
-                ids.append(id)
-                start = end
-            for moveable, id in zip(self.moveable_list, ids):
-                moveable.waitMove(id=id, timeout=timeout)
-            states, positions = self.readState(), self.readPosition()
-            import PyTango
-            state = PyTango.DevState.ON
-            if PyTango.DevState.FAULT in states:
-                state = PyTango.DevState.FAULT
-            elif PyTango.DevState.ALARM in states:
-                state = PyTango.DevState.ALARM
-            elif PyTango.DevState.UNKNOWN in states:
-                state = PyTango.DevState.UNKNOWN
-            elif PyTango.DevState.MOVING in states:
-                state = PyTango.DevState.MOVING
-            ret = state, positions
-        self.__total_motion_time = time.time()
-        return ret
-        
-    def iterMove(self, new_pos, timeout=None):
-        """ generator for motor positions"""
-        assert len(self.moveable_list) == 1, "for now we support only 'simple' motions!!!!"
-        
-        moveable = self.moveable_list[0]
-        for p in moveable.iterMove(new_pos, timeout=timeout):
-            yield p
-        
-    def getStatus(self):
-        return "\n".join([ m.status() for m in self.moveable_list ])
-
-    def readState(self, force=False):
-        if len(self.moveable_list) == 1:
-            return self.moveable_list[0].getState()
-        return [ m.getState() for m in self.moveable_list ]
-
-    def readPosition(self, force=False):
-        moveable_pos_list = [ m.readPosition(force=force) for m in self.moveable_list ]
-        pos = [ moveable_pos_list[pair[0]][pair[1]] for pair in self.pos_to_moveable ]
-        return pos
-    
-    def abort(self, wait_ready=True, timeout=None):
-        for moveable in self.moveable_list:
-            moveable.abort(wait_ready=wait_ready, timeout=timeout)
-    
-    def stop(self, wait_ready=True, timeout=None):
-        for moveable in self.moveable_list:
-            moveable.stop(wait_ready=wait_ready, timeout=timeout)
-
-    def read(self):
-        pass
-
-#-------------------------------------------------------------------------------
-# Small test framework
-#-------------------------------------------------------------------------------
-
-class PoolMoveableTest(Moveable):
-    def __init__(self, name, elems, moveable_src, mov_items = None):
-        self.name = name
-        self.elem_names = elems
-        self.moveable_src = moveable_src
-        self.pos = len(elems)*[0.0,]
-        
-    def startMove(self, new_pos, timeout=None):
-        self.pos = new_pos 
-        # return the id as time_stamp
-        return len(self.elem_names)*[time.time()]
-
-    def waitMove(self, timeout=None, id=None):
-        pass
-
-    def abort(self, wait_ready=True, timeout=None):
-        pass
-    
-    def readPosition(self, force=False):
-        return self.pos
-    
-    def getMoveableSource(self):
-        return self.moveable_src
-    
-    def getSize(self):
-        return len(self.elem_names)
-    
-    def getIndex(self, name):
-        try:
-            return self.elem_names.index(name)
-        except:
-            return -1
-       
-class PoolMSTest(MoveableSource):
-
-    def __init__(self, initial_elems):
-        MoveableSource.__init__(self)
-        self.elem_names = initial_elems
-        self.moveable_inc = 0
-        
-        self.motors = CaselessDict()
-        for elem_name in initial_elems:
-            self.motors[elem_name] = PoolMoveableTest(elem_name, [elem_name], self)
-        self.motor_group = None
-        
-    def getMoveable(self,names):
-        if len(names) == 1:
-            return self.motors.get(names[0])
-        l = [name for name in self.elem_names if name in names]
-        self.motor_group = PoolMoveableTest("moveable %d" % self.moveable_inc, l, self)
-        self.moveable_inc += 1
-        return self.motor_group
-
-def test():
-    ms1 = PoolMSTest(["m1","m2","m3","m4"])
-    ms2 = PoolMSTest(["m5","m6","m7","m8"])
-    ms3 = PoolMSTest(["m9","m10","m11","m12"])
-    
-    motion1 = Motion(["m1"], [ms1, ms2, ms3])
-    
-    # some tests
-    for p in [[5.0], [20.0], [0.0], [-14.5], [0.0]]:
-        motion1.move(p)
-        assert(ms1.motors["m1"].pos[0] == p[0])
-        assert(motion1.readPosition() == p)
-
-    motion2 = Motion(["m1","m2","m3"], [ms1, ms2, ms3])
-    for p in [[5.0, 20.0, 0.0], [-14.5, 3.32, 232], [0.0, 0.0, 0.0]]:
-        motion2.move(p)
-        assert(ms1.motor_group.pos == p)
-        assert(motion2.readPosition() == p)
-    
-    motion3 = Motion(["m3","m1","m2"], [ms1, ms2, ms3])
-    for p in [[5.0, 20.0, 0.0], [-14.5, 3.32, 232], [0.0, 0.0, 0.0]]:
-        motion3.move(p)
-        assert(ms1.motor_group.pos[0] == p[1])
-        assert(ms1.motor_group.pos[1] == p[2])
-        assert(ms1.motor_group.pos[2] == p[0])
-        assert(motion3.readPosition() == p)
-
-    motion4 = Motion(["m2","m6"], [ms1, ms2, ms3])
-    for p in [[5.0, 20.0], [-14.5, 3.32], [0.0, 0.0]]:
-        motion4.move(p)
-        assert(ms1.motors["m2"].pos[0] == p[0])
-        assert(ms2.motors["m6"].pos[0] == p[1])
-        assert(motion4.readPosition() == p)
-
-    motion5 = Motion(["m3","m1","m7"], [ms1, ms2, ms3])
-    for p in [[5.0, 20.0, 0.0], [-14.5, 3.32, 232], [0.0, 0.0, 0.0]]:
-        motion5.move(p)
-        assert(ms1.motor_group.pos[1] == p[0])
-        assert(ms1.motor_group.pos[0] == p[1])
-        assert(ms2.motors["m7"].pos[0] == p[2])
-        assert(motion5.readPosition() == p)
-    
-    motion6 = Motion(["m4", "m9", "m10", "m2"], [ms1, ms2, ms3])
-    for p in [[5.0, 20.0, 0.0, 21.0], [-14.5, 3.32, 232, 45.4], [0.0, 0.0, 0.0, 0.0]]:
-        motion6.move(p)
-        assert(ms1.motor_group.pos[1] == p[0])
-        assert(ms1.motor_group.pos[0] == p[3])
-        assert(ms3.motor_group.pos[0] == p[1])
-        assert(ms3.motor_group.pos[1] == p[2])
-        assert(motion6.readPosition() == p)
-    
-    motion7 = Motion(["m4", "m9", "m7", "m2"], [ms1, ms2, ms3])
-    for p in [[5.0, 20.0, 0.0, 21.0], [-14.5, 3.32, 232, 45.4], [0.0, 0.0, 0.0, 0.0]]:
-        motion7.move(p)
-        assert(ms1.motor_group.pos[1] == p[0])
-        assert(ms1.motor_group.pos[0] == p[3])
-        assert(ms3.motors["m9"].pos[0] == p[1])
-        assert(ms2.motors["m7"].pos[0] == p[2])
-        assert(motion7.readPosition() == p)
-    
-    try:
-        m = Motion(["m1", "m2"], [ms1, ms2, ms3], read_only=True)
-        m.startMove([0.5, 20.4])
-    except Exception, e:
-        assert(e.message == "Trying to move read only motion")
-    
-    try:
-        m = Motion(["m1", "m1"], [ms1, ms2, ms3])
-    except Exception, e:
-        assert(e.message == "Moveable item m1 appears more than once")
-    
-    try:
-        m = Motion(["m1", "m999"], [ms1, ms2, ms3])
-    except Exception, e:
-        assert(e.message == "Moveable item m999 not found")
-    
-if __name__ == "__main__":
-    test()    
-    
-    
diff --git a/lib/taurus/core/tango/sardana/pool.py b/lib/taurus/core/tango/sardana/pool.py
deleted file mode 100644
index 7abd0a4..0000000
--- a/lib/taurus/core/tango/sardana/pool.py
+++ /dev/null
@@ -1,1780 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-##
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-##
-## Taurus 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.
-##
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""The device pool submodule. It contains specific part of sardana device pool"""
-
-__all__ = ["InterruptException", "StopException", "AbortException",
-           "BaseElement", "ControllerClass",
-           "PoolElement", "Controller", "ComChannel", "ExpChannel",
-           "CTExpChannel", "ZeroDExpChannel", "OneDExpChannel", "TwoDExpChannel",
-           "PseudoCounter", "Motor", "PseudoMotor", "MotorGroup",
-           "MeasurementGroup", "IORegister", "Instrument", "Pool",
-           "registerExtensions", "getChannelConfigs"]
-
-__docformat__ = 'restructuredtext'
-
-import sys
-import os
-import weakref
-import time
-import operator
-import traceback
-
-from PyTango import DevState, AttrDataFormat, AttrQuality, DevFailed, \
-    DeviceProxy
-
-from taurus import Factory, Device
-from taurus.core.taurusbasetypes import TaurusEventType, TaurusSWDevState, \
-    TaurusSerializationMode
-from taurus.core.taurusvalidator import AttributeNameValidator
-from taurus.core.util.log import Logger
-from taurus.core.util.singleton import Singleton
-from taurus.core.util.codecs import CodecFactory
-from taurus.core.util.containers import CaselessDict
-from taurus.core.util.event import EventGenerator, AttributeEventWait, \
-    AttributeEventIterator
-from taurus.core.tango import TangoDevice, FROM_TANGO_TO_STR_TYPE
-
-from .sardana import BaseSardanaElementContainer, BaseSardanaElement
-from .motion import Moveable, MoveableSource
-
-Ready = Standby = DevState.ON
-Counting = Acquiring = Moving = DevState.MOVING
-Alarm = DevState.ALARM
-Fault = DevState.FAULT
-
-CHANGE_EVT_TYPES = TaurusEventType.Change, TaurusEventType.Periodic
-
-MOVEABLE_TYPES = 'Motor', 'PseudoMotor', 'MotorGroup'
-
-QUALITY = {
-    AttrQuality.ATTR_VALID : 'VALID',
-    AttrQuality.ATTR_INVALID : 'INVALID',
-    AttrQuality.ATTR_CHANGING : 'CHANGING',
-    AttrQuality.ATTR_WARNING : 'WARNING',
-    AttrQuality.ATTR_ALARM : 'ALARM',
-    None : 'UNKNOWN'
-}
-
-class InterruptException(Exception):
-    pass
-
-class StopException(InterruptException):
-    pass
-
-class AbortException(InterruptException):
-    pass
-
-class BaseElement(object):
-    """ The base class for elements in the Pool (Pool itself, Motor,
-    ControllerClass, ExpChannel all should inherit from this class directly or
-    indirectly)
-    """
-
-    def __repr__(self):
-        pd = self.getPoolData()
-        return "{0}({1})".format(pd['type'], pd['full_name'])
-
-    def __str__(self):
-        return self.getName()
-
-    def serialize(self):
-        return self.getPoolData()
-
-    def str(self, n=0):
-        """Returns a sequence of strings representing the object in 'consistent'
-        way. Default is to return <name>, <controller name>, <axis>
-
-        :param n: the number of elements in the tuple."""
-        if n == 0:
-            return CodecFactory.encode(('json'), self.serialize())
-        return self._str_tuple[:n]
-
-    def __cmp__(self,o):
-        return cmp(self.getPoolData()['full_name'], o.getPoolData()['full_name'])
-
-    def getName(self):
-        return self.getPoolData()['name']
-
-    def getPoolObj(self):
-        return self._pool_obj
-
-    def getPoolData(self):
-        try:
-            return self._pool_data
-        except AttributeError:
-            self._pool_data = self._find_pool_data()
-            return self._pool_data
-
-
-class ControllerClass(BaseElement):
-
-    def __init__(self, **kw):
-        self.__dict__.update(kw)
-        self.path, self.f_name = os.path.split(self.file_name)
-        self.lib_name, self.ext = os.path.splitext(self.f_name)
-
-    def __repr__(self):
-        pd = self.getPoolData()
-        return "ControllerClass({0})".format(pd['full_name'])
-
-    def getSimpleFileName(self):
-        return self.f_name
-
-    def getFileName(self):
-        return self.file_name
-
-    def getClassName(self):
-        return self.getName()
-
-    def getType(self):
-        return self.getTypes()[0]
-
-    def getTypes(self):
-        return self.types
-
-    def getLib(self):
-        return self.f_name
-
-    def getGender(self):
-        return self.gender
-
-    def getModel(self):
-        return self.model
-
-    def getOrganization(self):
-        return self.organization
-
-    def __cmp__(self, o):
-        t = cmp(self.getType(), o.getType())
-        if t != 0: return t
-        t = cmp(self.getGender(), o.getGender())
-        if t != 0: return t
-        return cmp(self.getClassName(), o.getClassName())
-
-
-class ControllerLib(BaseElement):
-
-    def __init__(self, **kw):
-        self.__dict__.update(kw)
-
-    def getType(self):
-        return self.getTypes()[0]
-
-    def getTypes(self):
-        return self.type
-
-
-class TangoAttributeEG(Logger, EventGenerator):
-    """An event generator for a 'State' attribute"""
-
-    def __init__(self, attr):
-        self._attr = attr
-        self.call__init__(Logger, 'EG', attr)
-        event_name = '%s EG' % (attr.getParentObj().getNormalName())
-        self.call__init__(EventGenerator, event_name)
-
-        self._attr.addListener(self)
-
-    def getAttribute(self):
-        return self._attr
-
-    def eventReceived(self, evt_src, evt_type, evt_value):
-        """Event handler from Taurus"""
-        if evt_type not in CHANGE_EVT_TYPES:
-            return
-        if evt_value is None:
-            v = None
-        else:
-            v = evt_value.value
-        EventGenerator.fireEvent(self, v)
-
-    def read(self, force=False):
-        try:
-            self.last_val = self._attr.read(cache=not force).value
-        except:
-            self.error("Read error")
-            self.debug("Details:", exc_info=1)
-            self.last_val = None
-        return EventGenerator.read(self)
-
-    def readValue(self, force=False):
-        r = self.read(force=force)
-        if r is None:
-            # do a retry
-            r = self.read(force=force)
-        return r
-
-    def write(self, value):
-        self._attr.write(value, with_read=False)
-
-    def __getattr__(self, name):
-        return getattr(self._attr, name)
-
-
-def reservedOperation(fn):
-    def new_fn(*args, **kwargs):
-        self = args[0]
-        wr = self.getReservedWR()
-        if wr is not None:
-            if wr().isStopped():
-                raise StopException("stopped before calling %s" % fn.__name__)
-            elif wr().isAborted():
-                raise AbortException("aborted before calling %s" % fn.__name__)
-        try:
-            return fn(*args, **kwargs)
-        except:
-            print "Exception occured in reserved operation: clearing events..."
-            self._clearEventWait()
-            raise
-    return new_fn
-
-
-def get_pool_for_device(db, device):
-    server_devs = db.get_device_class_list(device.info().server_id)
-    for dev_name, klass_name in zip(server_devs[0::2], server_devs[1::2]):
-        if klass_name == "Pool":
-            return Device(dev_name)
-
-
-class PoolElement(BaseElement, TangoDevice):
-    """Base class for a Pool element device."""
-
-    def __init__(self, name, **kwargs):
-        """PoolElement initialization."""
-        self._reserved = None
-        self._evt_wait = None
-        self.__go_start_time = 0
-        self.__go_end_time = 0        
-        self.__go_time = 0
-        self._total_go_time = 0
-        self.call__init__(TangoDevice, name, **kwargs)
-
-        # dict<string, TangoAttributeEG>
-        # key : the attribute name
-        # value : the corresponding TangoAttributeEG
-        self._attrEG = CaselessDict()
-
-        # force the creation of a state attribute
-        self.getStateEG()
-
-    def _find_pool_data(self):
-        pool = get_pool_for_device(self.getParentObj(), self.getHWObj())
-        return pool.getElementInfo(self.getFullName())._data
-
-    def cleanUp(self):
-        TangoDevice.cleanUp(self)
-        self._reserved = None
-        f = self.factory()
-
-        attr_map = self._attrEG
-        for attr_name in attr_map.keys():
-            attrEG = attr_map.pop(attr_name)
-            attr = attrEG.getAttribute()
-            attrEG = None
-            f.removeExistingAttribute(attr)
-
-    def reserve(self, obj):
-        if obj is None:
-            self._reserved = None
-            return
-        self._reserved = weakref.ref(obj, self._unreserveCB)
-
-    def _unreserveCB(self, obj):
-        self.unreserve()
-
-    def unreserve(self):
-        self._reserved =None
-
-    def isReserved(self, obj=None):
-        if obj is None:
-            return self._reserved is not None
-        else:
-            o = self._reserved()
-            return o == obj
-
-    def getReservedWR(self):
-        return self._reserved
-
-    def getReserved(self):
-        if self._reserved is None: return None
-        return self._reserved()
-
-    def dump_attributes(self):
-        attr_names = self.get_attribute_list()
-        req_id = self.read_attributes_asynch(attr_names)
-        return self.read_attributes_reply(req_id, 2000)
-
-    def _getAttrValue(self, name, force=False):
-        attrEG = self._getAttrEG(name)
-        if attrEG is None: return None
-        return attrEG.readValue(force=force)
-
-    def _getAttrEG(self, name):
-        attrEG = self.getAttrEG(name)
-        if attrEG is None:
-            attrEG = self._createAttribute(name)
-        return attrEG
-
-    def _createAttribute(self, name):
-        attrObj = self.getAttribute(name)
-        if attrObj is None:
-            self.warning("Unable to create attribute %s" % name)
-            return None, None
-        attrEG = TangoAttributeEG(attrObj)
-        self._attrEG[name] = attrEG
-        return attrEG
-
-    def _getEventWait(self):
-        if self._evt_wait is None:
-            # create an object that waits for attribute events.
-            # each time we use it we have to connect and disconnect to an attribute
-            self._evt_wait = AttributeEventWait()
-        return self._evt_wait
-
-    def _clearEventWait(self):
-        self._evt_wait = None
-
-    def getStateEG(self):
-        return self._getAttrEG('state')
-
-    def getControllerName(self):
-        return self.getControllerObj().name
-
-    def getControllerObj(self):
-        full_ctrl_name = self.getPoolData()['controller']
-        return self.getPoolObj().getObj(full_ctrl_name, "Controller")
-
-    def getAxis(self):
-        return self.getPoolData()['axis']
-
-    def getType(self):
-        return self.getPoolData()['type']
-
-    def getPoolObj(self):
-        return self._pool_obj
-
-    def waitReady(self, timeout=None):
-        return self.getStateEG().waitEvent(Moving, equal=False, timeout=timeout)
-
-    def getAttrEG(self, name):
-        """Returns the TangoAttributeEG object"""
-        return self._attrEG.get(name)
-
-    def getAttrObj(self, name):
-        """Returns the taurus.core.tangoattribute.TangoAttribute object"""
-        attrEG = self._attrEG.get(name)
-        if attrEG is None:
-            return None
-        return attrEG.getAttribute()
-
-    def getInstrumentObj(self):
-        return self._getAttrEG('instrument')
-
-    def getInstrumentName(self, force=False):
-        instr_name = self._getAttrValue('instrument', force=force)
-        if not instr_name: return ''
-        #instr_name = instr_name[:instr_name.index('(')]
-        return instr_name
-
-    def getInstrument(self):
-        instr_name = self.getInstrumentName()
-        if not instr_name: return None
-        return self.getPoolObj().getObj("Instrument", instr_name)
-
-    @reservedOperation
-    def start(self, *args, **kwargs):
-        evt_wait = self._getEventWait()
-        evt_wait.connect(self.getAttribute("state"))
-        evt_wait.lock()
-        try:
-            evt_wait.waitEvent(DevState.MOVING, equal=False)
-            self.__go_time = 0
-            self.__go_start_time = ts1 = time.time()
-            self._start(*args, **kwargs)
-            ts2 = time.time()
-            evt_wait.waitEvent(DevState.MOVING, after=ts1)
-        except:
-            evt_wait.disconnect()
-            raise
-        finally:
-            evt_wait.unlock()
-        ts2 = evt_wait.getRecordedEvents().get(DevState.MOVING, ts2)
-        return (ts2,)
-
-    @reservedOperation
-    def waitFinish(self, timeout=None, id=None):
-        if id is not None:
-            id = id[0]
-        evt_wait = self._getEventWait()
-        evt_wait.lock()
-        try:
-            evt_wait.waitEvent(DevState.MOVING, after=id, equal=False,
-                               timeout=timeout)
-        finally:
-            self.__go_end_time = time.time()
-            self.__go_time = self.__go_end_time - self.__go_start_time
-            evt_wait.unlock()
-            evt_wait.disconnect()
-
-    @reservedOperation
-    def go(self, *args, **kwargs):
-        self._total_go_time = 0
-        start_time  = time.time()
-        eid = self.start(*args, **kwargs)
-        self.waitFinish(id=eid)
-        self._total_go_time = time.time() - start_time
-    
-    def getLastGoTime(self):
-        """Returns the time it took for last go operation"""
-        return self.__go_time
-    
-    def getTotalLastGoTime(self):
-        """Returns the time it took for last go operation, including dead time
-        to prepare, wait for events, etc"""
-        return self._total_go_time
-    
-    def abort(self, wait_ready=True, timeout=None):
-        state = self.getStateEG()
-        state.lock()
-        try:
-            self.command_inout("Abort")
-            if wait_ready:
-                self.waitReady(timeout=timeout)
-        finally:
-            state.unlock()
-
-    def stop(self, wait_ready=True, timeout=None):
-        state = self.getStateEG()
-        state.lock()
-        try:
-            self.command_inout("Stop")
-            if wait_ready:
-                self.waitReady(timeout=timeout)
-        finally:
-            state.unlock()
-
-    def information(self, tab='    '):
-        msg = self._information(tab=tab)
-        return "\n".join(msg)
-
-    def _information(self, tab='    '):
-        indent = "\n" + tab + 10*' '
-        msg = [ self.getName() + ":" ]
-        try:
-            state = str(self.state()).capitalize()
-        except DevFailed, df:
-            if len(df.args):
-                state =  df.args[0].desc
-            else:
-                e_info = sys.exc_info()[:2]
-                state = traceback.format_exception_only(*e_info)
-        except:
-            e_info = sys.exc_info()[:2]
-            state = traceback.format_exception_only(*e_info)
-        msg.append(tab + "   State: " + state)
-
-        try:
-            e_info = sys.exc_info()[:2]
-            status = self.status()
-            status = status.replace('\n', indent)
-        except DevFailed, df:
-            if len(df.args):
-                status =  df.args[0].desc
-            else:
-                e_info = sys.exc_info()[:2]
-                status = traceback.format_exception_only(*e_info)
-        except:
-            e_info = sys.exc_info()[:2]
-            status = traceback.format_exception_only(*e_info)
-        msg.append(tab + "  Status: " + status)
-
-        return msg
-
-
-class Controller(PoolElement):
-    """ Class encapsulating Controller functionality."""
-
-    def __init__(self, name, **kw):
-        """PoolElement initialization."""
-        self.call__init__(PoolElement, name, **kw)
-
-    def getModuleName(self):
-        return self.getPoolData()['module']
-
-    def getClassName(self):
-        return self.getPoolData()['klass']
-
-    def getTypes(self):
-        return self.getPoolData()['types']
-
-    def getMainType(self):
-        return self.getPoolData()['main_type']
-
-    def addElement(self, elem):
-        axis = elem.getAxis()
-        self._elems[axis] = elem
-        self._last_axis = max(self._last_axis, axis)
-
-    def removeElement(self, elem):
-        axis = elem.getAxis()
-        del self._elems[elem.getAxis()]
-        if axis == self._last_axis:
-            self._last_axis = max(self._elems)
-
-    def getElementByAxis(self, axis):
-        pool = self.getPoolObj()
-        for _, elem in pool.getElementsOfType(self.getMainType()).items():
-            if elem.controller != self.getName() or elem.getAxis() != axis:
-                continue
-            return elem
-
-    def getElementByName(self, name):
-        pool = self.getPoolObj()
-        for name, elem in pool.getElementsOfType(self.getMainType()).items():
-            if elem.controller != self.getName() or elem.getName() != name:
-                continue
-            return elem
-
-    def getUsedAxis(self):
-        pool = self.getPoolObj()
-        axis = []
-        for _, elem in pool.getElementsOfType(self.getMainType()).items():
-            if elem.controller != self.getName():
-                continue
-            axis.append(elem.getAxis())
-        return sorted(axis)
-
-    def getLastUsedAxis(self):
-        return max([1] + self.getUsedAxis())
-
-    def __cmp__(self, o):
-        return cmp(self.getName(), o.getName())
-
-
-class ComChannel(PoolElement):
-    """ Class encapsulating CommunicationChannel functionality."""
-    pass
-
-
-class ExpChannel(PoolElement):
-    """ Class encapsulating ExpChannel functionality."""
-    pass
-
-
-class CTExpChannel(ExpChannel):
-    """ Class encapsulating CTExpChannel functionality."""
-    pass
-
-
-class ZeroDExpChannel(ExpChannel):
-    """ Class encapsulating ZeroDExpChannel functionality."""
-    pass
-
-
-class OneDExpChannel(ExpChannel):
-    """ Class encapsulating OneDExpChannel functionality."""
-    pass
-
-
-class TwoDExpChannel(ExpChannel):
-    """ Class encapsulating TwoDExpChannel functionality."""
-    pass
-
-
-class PseudoCounter(ExpChannel):
-    """ Class encapsulating PseudoCounter functionality."""
-    pass
-
-
-class Motor(PoolElement, Moveable):
-    """ Class encapsulating Motor functionality."""
-
-    def __init__(self, name, **kw):
-        """PoolElement initialization."""
-        self.call__init__(PoolElement, name, **kw)
-        self.call__init__(Moveable)
-
-    def getPosition(self, force=False):
-        return self._getAttrValue('position', force=force)
-
-    def getDialPosition(self, force=False):
-        return self._getAttrValue('dialposition', force=force)
-
-    def getVelocity(self, force=False):
-        return self._getAttrValue('velocity', force=force)
-
-    def getAcceleration(self, force=False):
-        return self._getAttrValue('acceleration', force=force)
-
-    def getDeceleration(self, force=False):
-        return self._getAttrValue('deceleration', force=force)
-
-    def getBaseRate(self, force=False):
-        return self._getAttrValue('base_rate', force=force)
-
-    def getBacklash(self, force=False):
-        return self._getAttrValue('backlash', force=force)
-
-    def getLimitSwitches(self, force=False):
-        return self._getAttrValue('limit_switches', force=force)
-
-    def getOffset(self, force=False):
-        return self._getAttrValue('offset', force=force)
-
-    def getStepPerUnit(self, force=False):
-        return self._getAttrValue('step_per_unit', force=force)
-
-    def getSign(self, force=False):
-        return self._getAttrValue('Sign', force=force)
-
-    def getSimulationMode(self, force=False):
-        return self._getAttrValue('SimulationMode', force=force)
-
-    def getPositionObj(self):
-        return self._getAttrEG('position')
-
-    def getDialPositionObj(self):
-        return self._getAttrEG('dialposition')
-
-    def getVelocityObj(self):
-        return self._getAttrEG('velocity')
-
-    def getAccelerationObj(self):
-        return self._getAttrEG('acceleration')
-
-    def getDecelerationObj(self):
-        return self._getAttrEG('deceleration')
-
-    def getBaseRateObj(self):
-        return self._getAttrEG('base_rate')
-
-    def getBacklashObj(self):
-        return self._getAttrEG('backlash')
-
-    def getLimitSwitchesObj(self):
-        return self._getAttrEG('limit_switches')
-
-    def getOffsetObj(self):
-        return self._getAttrEG('offset')
-
-    def getStepPerUnitObj(self):
-        return self._getAttrEG('step_per_unit')
-
-    def getSimulationModeObj(self):
-        return self._getAttrEG('step_per_unit')
-
-    def setVelocity(self, value):
-        return self.getVelocityObj().write(value)
-
-    def setAcceleration(self, value):
-        return self.getAccelerationObj().write(value)
-
-    def setDeceleration(self, value):
-        return self.getDecelerationObj().write(value)
-
-    def setBaseRate(self, value):
-        return self.getBaseRateObj().write(value)
-
-    def setBacklash(self, value):
-        return self.getBacklashObj().write(value)
-
-    def setOffset(self, value):
-        return self.getOffsetObj().write(value)
-
-    def setStepPerUnit(self, value):
-        return self.getStepPerUnitObj().write(value)
-
-    def setSign(self, value):
-        return self.getSignObj().write(value)
-
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # Moveable interface
-    #
-        
-    def _start(self, *args, **kwargs):
-        new_pos = args[0]
-        if operator.isSequenceType(new_pos):
-           new_pos = new_pos[0]
-        try:
-            self.write_attribute('position', new_pos)
-        except DevFailed, df:
-            for err in df:
-                if err.reason == 'API_AttrNotAllowed':
-                    raise RuntimeError('%s is already moving' % self)
-                else:
-                    raise
-        self.final_pos = new_pos
-
-    def go(self, *args, **kwargs):
-        start_time  = time.time()
-        PoolElement.go(self, *args, **kwargs)
-        ret = self.getStateEG().readValue(), self.readPosition()
-        self._total_go_time = time.time() - start_time        
-        return ret
-
-    startMove = PoolElement.start
-    waitMove = PoolElement.waitFinish
-    move = go
-    getLastMotionTime = PoolElement.getLastGoTime
-    getTotalLastMotionTime = PoolElement.getTotalLastGoTime
-
-    @reservedOperation
-    def iterMove(self, new_pos, timeout=None):
-        if operator.isSequenceType(new_pos):
-            new_pos = new_pos[0]
-        state, pos = self.getAttribute("state"), self.getAttribute("position")
-
-        evt_wait = self._getEventWait()
-        evt_wait.connect(state)
-        evt_wait.lock()
-        try:
-            #evt_wait.waitEvent(DevState.MOVING, equal=False)
-            time_stamp = time.time()
-            try:
-                self.getPositionObj().write(new_pos)
-            except DevFailed, err_traceback:
-                for err in err_traceback:
-                    if err.reason == 'API_AttrNotAllowed':
-                        raise RuntimeError, '%s is already moving' % self
-                    else:
-                        raise
-            self.final_pos = new_pos
-            # putting timeout=0.1 and retries=1 is a patch for the case the when the initial
-            # moving event doesn't arrive do to an unknow tango/pytango error at the time
-            evt_wait.waitEvent(DevState.MOVING, time_stamp, timeout=0.1, retries=1)
-        finally:
-            evt_wait.unlock()
-            evt_wait.disconnect()
-
-        evt_iter_wait = AttributeEventIterator(state, pos)
-        evt_iter_wait.lock()
-        try:
-            for evt_data in evt_iter_wait.events():
-                src, value = evt_data
-                if src == state and value != DevState.MOVING:
-                    raise StopIteration
-                yield value
-        finally:
-            evt_iter_wait.unlock()
-            evt_iter_wait.disconnect()
-
-    def readPosition(self, force=False):
-        return [ self.getPosition(force=force) ]
-
-    def getMoveableSource(self):
-        return self.getPoolObj()
-
-    def getSize(self):
-        return 1
-
-    def getIndex(self, name):
-        if name.lower() == self.getName().lower():
-            return 0
-        return -1
-    #
-    # End of Moveable interface
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-
-    def _information(self, tab='    '):
-        msg = PoolElement._information(self, tab=tab)
-        try:
-            position = self.read_attribute("position")
-            pos = str(position.value)
-            if position.quality != AttrQuality.ATTR_VALID:
-                pos += " [" + QUALITY[position.quality] + "]"
-        except DevFailed, df:
-            if len(df.args):
-                pos =  df.args[0].desc
-            else:
-                e_info = sys.exc_info()[:2]
-                pos = traceback.format_exception_only(*e_info)
-        except:
-            e_info = sys.exc_info()[:2]
-            pos = traceback.format_exception_only(*e_info)
-
-        msg.append(tab + "Position: " + str(pos))
-        return msg
-
-
-class PseudoMotor(PoolElement, Moveable):
-    """ Class encapsulating PseudoMotor functionality."""
-
-    def __init__(self, name, **kw):
-        """PoolElement initialization."""
-        self.call__init__(PoolElement, name, **kw)
-        self.call__init__(Moveable)
-
-    def getPosition(self, force=False):
-        return self._getAttrValue('position', force=force)
-
-    def getDialPosition(self, force=False):
-        return self.getPosition(force=force)
-
-    def getPositionObj(self):
-        return self._getAttrEG('position')
-
-    def getDialPositionObj(self):
-        return self.getPositionObj()
-
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # Moveable interface
-    #
-
-    def _start(self, *args, **kwargs):
-        new_pos = args[0]
-        if operator.isSequenceType(new_pos):
-           new_pos = new_pos[0]
-        try:
-            self.write_attribute('position', new_pos)
-        except DevFailed, df:
-            for err in df:
-                if err.reason == 'API_AttrNotAllowed':
-                    raise RuntimeError('%s is already moving' % self)
-                else:
-                    raise
-        self.final_pos = new_pos
-
-    def go(self, *args, **kwargs):
-        start_time  = time.time()
-        PoolElement.go(self, *args, **kwargs)
-        ret = self.getStateEG().readValue(), self.readPosition()
-        self._total_go_time = time.time() - start_time        
-        return ret
-
-    startMove = PoolElement.start
-    waitMove = PoolElement.waitFinish
-    move = go
-    getLastMotionTime = PoolElement.getLastGoTime
-    getTotalLastMotionTime = PoolElement.getTotalLastGoTime
-    
-    def readPosition(self, force=False):
-        return [ self.getPosition(force=force) ]
-
-    def getMoveableSource(self):
-        return self.getPoolObj()
-
-    def getSize(self):
-        return 1
-
-    def getIndex(self, name):
-        if name.lower() == self.getName().lower():
-            return 0
-        return -1
-    #
-    # End of Moveable interface
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-
-    def _information(self, tab='    '):
-        msg = PoolElement._information(self, tab=tab)
-        try:
-            position = self.read_attribute("position")
-            pos = str(position.value)
-            if position.quality != AttrQuality.ATTR_VALID:
-                pos += " [" + QUALITY[position.quality] + "]"
-        except DevFailed, df:
-            if len(df.args):
-                pos =  df.args[0].desc
-            else:
-                e_info = sys.exc_info()[:2]
-                pos = traceback.format_exception_only(*e_info)
-        except:
-            e_info = sys.exc_info()[:2]
-            pos = traceback.format_exception_only(*e_info)
-
-        msg.append(tab + "Position: " + str(pos))
-        return msg
-
-
-class MotorGroup(PoolElement, Moveable):
-    """ Class encapsulating MotorGroup functionality."""
-
-    def __init__(self, name, **kw):
-        """PoolElement initialization."""
-        self.call__init__(PoolElement, name, **kw)
-        self.call__init__(Moveable)
-
-    def _create_str_tuple(self):
-        return 3*["TODO"]
-
-    def getMotorNames(self):
-        return self.getPoolData()['elements']
-
-    def hasMotor(self, name):
-        motor_names = map(str.lower, self.getMotorNames())
-        return name.lower() in motor_names
-
-    def getPosition(self, force=False):
-        return self._getAttrValue('position', force=force)
-
-    def getPositionObj(self):
-        return self._getAttrEG('position')
-
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # Moveable interface
-    #
-
-    def _start(self, *args, **kwargs):
-        new_pos = args[0]
-        try:
-            self.write_attribute('position', new_pos)
-        except DevFailed, df:
-            for err in df:
-                if err.reason == 'API_AttrNotAllowed':
-                    raise RuntimeError('%s is already moving' % self)
-                else:
-                    raise
-        self.final_pos = new_pos
-
-    def go(self, *args, **kwargs):
-        start_time  = time.time()
-        PoolElement.go(self, *args, **kwargs)
-        ret = self.getStateEG().readValue(), self.readPosition()
-        self._total_go_time = time.time() - start_time        
-        return ret
-
-    startMove = PoolElement.start
-    waitMove = PoolElement.waitFinish
-    move = go
-    getLastMotionTime = PoolElement.getLastGoTime
-    getTotalLastMotionTime = PoolElement.getTotalLastGoTime
-    
-    def readPosition(self, force=False):
-        return self.getPosition(force=force)
-
-    def getMoveableSource(self):
-        return self.getPoolObj()
-
-    def getSize(self):
-        return len(self.getMotorNames())
-
-    def getIndex(self, name):
-        try:
-            motor_names = map(str.lower, self.getMotorNames())
-            return motor_names.index(name.lower())
-        except:
-            return -1
-
-    #
-    # End of Moveable interface
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-
-    def _information(self, tab='    '):
-        msg = PoolElement._information(self, tab=tab)
-        try:
-            position = self.read_attribute("position")
-            pos = str(position.value)
-            if position.quality != AttrQuality.ATTR_VALID:
-                pos += " [" + QUALITY[position.quality] + "]"
-        except DevFailed, df:
-            if len(df.args):
-                pos =  df.args[0].desc
-            else:
-                e_info = sys.exc_info()[:2]
-                pos = traceback.format_exception_only(*e_info)
-        except:
-            e_info = sys.exc_info()[:2]
-            pos = traceback.format_exception_only(*e_info)
-
-        msg.append(tab + "Position: " + str(pos))
-        return msg
-
-
-class BaseChannelInfo(object):
-
-    def __init__(self, data):
-        # dict<str, obj>
-        # channel data
-        self.raw_data = data
-        self.__dict__.update(data)
-
-
-class TangoChannelInfo(BaseChannelInfo):
-
-    def __init__(self, data, info):
-        BaseChannelInfo.__init__(self, data)
-        # PyTango.AttributeInfoEx
-        self.set_info(info)    
-    
-    def has_info(self):
-        return self.raw_info is not None
-    
-    def set_info(self, info):
-        self.raw_info = info
-        
-        if info is None:
-            return
-        
-        data = self.raw_data
-        
-        if 'data_type' not in data:
-            self.data_type = FROM_TANGO_TO_STR_TYPE[info.data_type]
-
-        if 'shape' not in data:
-            shape = ()
-            if info.data_format == AttrDataFormat.SPECTRUM:
-                shape = (info.max_dim_x,)
-            elif info.data_format == AttrDataFormat.IMAGE:
-                shape = (info.max_dim_x, info.max_dim_y)
-            self.shape = shape
-        else:
-            shape = self.shape
-        self.shape = list(shape)
-        
-    def __getattr__(self, name):
-        if self.has_info():
-            return getattr(self.raw_info, name)
-        cls_name = self.__class__.__name__
-        raise AttributeError("'%s' has no attribute '%s'" % (cls_name, name))
-
-
-def getChannelConfigs(mgconfig, ctrls=None, units=None, sort=True):
-    '''
-    gets a list of channel configurations by flattening the controllers and
-    units levels of the given measurement group configuration. It optionally
-    filters to those channels matching given lists of controller and unit
-    names.
-
-    :param ctrls: (seq<str> or None) a sequence of strings to filter the
-                  controllers. If None given, all controllers will be used
-    :param units: (seq<str>) a sequence of strings to filter the units. If
-                  None given, all controllers will be used
-    :param sort: (bool) If True (default) the returned list will be sorted
-                 according to channel index (if given in channeldata) and
-                 then by channelname.
-
-    :return: (list<tuple>) A list of channelname,channeldata pairs.
-    '''
-    chconfigs = []
-    if not mgconfig: return []
-    for ctrl_name, ctrl_data in mgconfig['controllers'].items():
-        if ctrls is None or ctrl_name in ctrls:
-            for unit_id, unit_data in ctrl_data['units'].items():
-                if units is None or unit_id in units:
-                    for ch_name, ch_data in unit_data['channels'].items():
-                        ch_data.update({'_controller_name':ctrl_name, '_unit_id':unit_id}) #add controller and unit ids
-                        chconfigs.append((ch_name,ch_data))
-    if sort:
-        #sort the channel configs by index (primary sort) and then by channel name.
-        chconfigs = sorted(chconfigs, key=lambda c:c[0]) #sort by channel_name
-        chconfigs = sorted(chconfigs, key=lambda c:c[1].get('index',1e16)) #sort by index (give a very large index for those which don't have it)
-    return chconfigs
-
-
-class MGConfiguration(object):
-
-    def __init__(self, mg, data):
-        self._mg = weakref.ref(mg)
-        if isinstance(data, (str, unicode)):
-            data = CodecFactory().decode(('json', data), ensure_ascii=True)
-        self.raw_data = data
-        self.__dict__.update(data)
-
-        # dict<str, dict>
-        # where key is the channel name and value is the channel data in form
-        # of a dict as receveid by the MG configuration attribute
-        self.channels = channels = CaselessDict()
-
-        for _, ctrl_data in self.controllers.items():
-            for _, unit_data in ctrl_data['units'].items():
-                for channel_name, channel_data in unit_data['channels'].items():
-                    channels[channel_name] = channel_data
-
-        #####################
-        #@todo: the for-loops above could be replaced by something like:
-        #self.channels = channels = CaselessDict(getChannelConfigs(data,sort=False))
-        #####################
-
-        # seq<dict> each element is the channel data in form of a dict as
-        # receveid by the MG configuration attribute. This seq is just a cache
-        # ordered by channel index in the MG.
-        self.channel_list = len(channels)*[None]
-
-        for channel in channels.values():
-            self.channel_list[channel['index']] = channel
-
-        # dict<str, list[DeviceProxy, CaselessDict<str, dict>]>
-        # where key is a device name and value is a list with two elements:
-        #  - A device proxy or None if there was an error building it
-        #  - A dict where keys are attribute names and value is a reference to
-        #    a dict representing channel data as received in raw data
-        self.tango_dev_channels = None
-
-        # Number of elements in tango_dev_channels in error (could not build
-        # DeviceProxy, probably)
-        self.tango_dev_channels_in_error = 0
-
-        # dict<str, tuple<str, str, TangoChannelInfo>>
-        # where key is a channel name and value is a tuple of three elements:
-        #  - device name
-        #  - attribute name
-        #  - attribute information or None if there was an error trying to get
-        #    the information
-        self.tango_channels_info = None
-
-        # Number of elements in tango_channels_info_in_error in error
-        # (could not build attribute info, probably)
-        self.tango_channels_info_in_error = 0
-
-        # dict<str, dict>
-        # where key is a channel name and data is a reference to a dict
-        # representing channel data as received in raw data
-        self.non_tango_channels = None
-
-        self.initialized = False
-
-    def _build(self):
-        # internal channel structure that groups channels by tango device so
-        # they can be read as a group minimizing this way the network requests
-        self.tango_dev_channels = tg_dev_chs = CaselessDict()
-        self.tango_dev_channels_in_error = 0
-        self.tango_channels_info = tg_chs_info = CaselessDict()
-        self.tango_channels_info_in_error = 0
-        self.non_tango_channels = n_tg_chs = CaselessDict()
-        self.cache = cache = {}
-
-        tg_attr_validator = AttributeNameValidator()
-        for channel_name, channel_data in self.channels.items():
-            cache[channel_name] = None
-            data_source = channel_data['source']
-            #external = ctrl_name.startswith("__")
-            params = tg_attr_validator.getParams(data_source)
-            if params is None:
-                # Handle NON tango channel
-                n_tg_chs[channel_name] = channel_data
-            else:
-                # Handle tango channel
-                dev_name = params['devicename'].lower()
-                attr_name = params['attributename'].lower()
-                host, port = params.get('host'), params.get('port')
-                if host is not None and port is not None:
-                    dev_name = "{0}:{1}/{2}".format(host, port, dev_name)
-                dev_data = tg_dev_chs.get(dev_name)
-
-                if dev_data is None:
-                    # Build tango device
-                    dev = None
-                    try:
-                        dev = DeviceProxy(dev_name)
-                    except:
-                        self.tango_dev_channels_in_error += 1
-                    tg_dev_chs[dev_name] = dev_data = [ dev, CaselessDict() ]
-                dev, attr_data = dev_data
-                attr_data[attr_name] = channel_data
-
-                # get attribute configuration
-                attr_info = None
-                if dev is None:
-                    self.tango_channels_info_in_error += 1
-                else:
-                    try:
-                        tg_attr_info = dev.get_attribute_config_ex(attr_name)[0]
-                    except:
-                        tg_attr_info = \
-                            self._build_empty_tango_attr_info(channel_data)
-                        self.tango_channels_info_in_error += 1
-                    attr_info = TangoChannelInfo(channel_data, tg_attr_info)
-                        
-                tg_chs_info[channel_name] = dev_name, attr_name, attr_info
-    
-    def _build_empty_tango_attr_info(self, channel_data):
-        import PyTango
-        ret = PyTango.AttributeInfoEx()
-        ret.name = channel_data['name']
-        ret.label = channel_data['label']
-        return ret
-        
-    def prepare(self):
-        # first time? build everything
-        if self.tango_dev_channels is None:
-            return self._build()
-
-        # prepare missing tango devices
-        if self.tango_dev_channels_in_error > 0:
-            for dev_name, dev_data in self.tango_dev_channels.items():
-                if dev_data[0] is None:
-                    try:
-                        dev_data[0] = DeviceProxy(dev_name)
-                        self.tango_dev_channels_in_error -= 1
-                    except:
-                        pass
-
-        # prepare missing tango attribute configuration
-        if self.tango_channels_info_in_error > 0:
-            for _, attr_data in self.tango_channels_info.items():
-                dev_name, attr_name, attr_info = attr_data
-                if attr_info.has_info():
-                    continue
-                dev = self.tango_dev_channels[dev_name]
-                if dev is None:
-                    continue
-                try:
-                    tg_attr_info = dev.get_attribute_config_ex(attr_name)[0]
-                    attr_info.set_info(tg_attr_info)
-                    self.tango_channels_info_in_error -= 1
-                except:
-                    pass
-
-    def getChannelInfo(self, channel_name):
-        try:
-            return self.tango_channels_info[channel_name]
-        except:
-            channel_name = channel_name.lower()
-            for d_name, a_name, ch_info in self.tango_channels_info.values():
-                if ch_info.name.lower() == channel_name:
-                    return d_name, a_name, ch_info
-
-    def getChannelsInfo(self):
-        self.prepare()
-        ret = CaselessDict(self.tango_channels_info)
-        ret.update(self.non_tango_channels)
-        return ret
-
-    def getChannelsInfoList(self):
-        channels_info = self.getChannelsInfo()
-        ret = len(channels_info)*[None]
-        for _, (_,_,ch_info) in channels_info.items():
-            ret[ch_info.index] = ch_info
-        return ret
-
-    def getCountersInfoList(self):
-        channels_info = self.getChannelsInfoList()
-        timer_name, idx = self.timer, -1
-        for i, ch in enumerate(channels_info):
-            if ch['full_name'] == timer_name:
-                idx = i
-                break
-        if idx >= 0:
-            channels_info.pop(idx)
-        return channels_info
-    
-    def read(self, parallel=True):
-        if parallel:
-            return self._read_parallel()
-        return self._read()
-    
-    def _read_parallel(self):
-        self.prepare()
-        ret = CaselessDict(self.cache)
-        dev_replies = {}
-
-        # deposit read requests
-        for _, dev_data in self.tango_dev_channels.items():
-            dev, attrs = dev_data
-            if dev is None:
-                continue
-            try:
-                dev_replies[dev] = dev.read_attributes_asynch(attrs.keys()), attrs
-            except:
-                dev_replies[dev] = None, attrs
-                
-        # gather all replies
-        for dev, reply_data in dev_replies.items():
-            reply, attrs = reply_data
-            try:
-                data = dev.read_attributes_reply(reply, 0)
-                for data_item in data:
-                    channel_data = attrs[data_item.name]
-                    if data_item.has_failed:
-                        value = None
-                    else:
-                        value = data_item.value
-                    ret[channel_data['full_name']] = value
-            except:
-                for _, channel_data in attrs.items():
-                    ret[channel_data['full_name']] = None
-                
-        return ret
-
-    def _read(self):
-        self.prepare()
-        ret = CaselessDict(self.cache)
-        for _, dev_data in self.tango_dev_channels.items():
-            dev, attrs = dev_data
-            try:
-                data = dev.read_attributes(attrs.keys())
-                for data_item in data:
-                    channel_data = attrs[data_item.name]
-                    if data_item.has_failed:
-                        value = None
-                    else:
-                        value = data_item.value
-                    ret[channel_data['full_name']] = value
-            except:
-                for _, channel_data in attrs.items():
-                    ret[channel_data['full_name']] = None
-        return ret
-
-class MeasurementGroup(PoolElement):
-    """ Class encapsulating MeasurementGroup functionality."""
-
-    def __init__(self, name, **kw):
-        """PoolElement initialization."""
-        self._configuration = None
-        self._channels = None
-        self._last_integ_time = None
-        self.call__init__(PoolElement, name, **kw)
-
-        cfg_attr = self.getAttribute('configuration')
-        cfg_attr.addListener(self.on_configuration_changed)
-
-    def _create_str_tuple(self):
-        return self.getName(), self.getTimerName(), ", ".join(self.getChannelNames())
-
-    def getConfigurationAttrEG(self):
-        return self._getAttrEG('Configuration')
-
-    def setConfiguration(self, configuration):
-        data = CodecFactory().encode(('json', configuration))
-        self.write_attribute('configuration', data)
-
-    def _setConfiguration(self, data):
-        self._configuration = MGConfiguration(self, data)
-
-    def getConfiguration(self, force=False):
-        if force or self._configuration is None:
-            data = self.getConfigurationAttrEG().readValue(force=True)
-            self._setConfiguration(data)
-        return self._configuration
-
-    def on_configuration_changed(self, evt_src, evt_type, evt_value):
-        if evt_type not in CHANGE_EVT_TYPES:
-            return
-        self.info("Configuration changed")
-        self._setConfiguration(evt_value.value)
-
-    def getTimerName(self):
-        return self.getTimer()['name']
-
-    def getTimer(self):
-        cfg = self.getConfiguration()
-        return cfg.channels[cfg.timer]
-
-    def getTimerValue(self):
-        return self.getTimerName()
-
-    def getMonitorName(self):
-        return self.getMonitor()['name']
-
-    def getMonitor(self):
-        cfg = self.getConfiguration()
-        return cfg.channels[cfg.monitor]
-
-    def setTimer(self, timer_name):
-        try:
-            self.getChannel(timer_name)
-        except KeyError:
-            raise Exception("%s does not contain a channel named '%s'"
-                            % (str(self),timer_name))
-        cfg = self.getConfiguration().raw_data
-        cfg['timer'] = timer_name
-        import json
-        self.write_attribute("configuration", json.dumps(cfg))
-
-    def getChannels(self):
-        return self.getConfiguration().channel_list
-
-    def getCounters(self):
-        cfg = self.getConfiguration()
-        return [ ch for ch in self.getChannels() if ch['full_name'] != cfg.timer ]
-
-    def getChannelNames(self):
-        return [ ch['name'] for ch in self.getChannels() ]
-
-    def getCounterNames(self):
-        return [ ch['name'] for ch in self.getCounters() ]
-
-    def getChannelLabels(self):
-        return [ ch['label'] for ch in self.getChannels() ]
-
-    def getCounterLabels(self):
-        return [ ch['label'] for ch in self.getCounters() ]
-
-    def getChannel(self, name):
-        return self.getConfiguration().channels[name]
-
-    def getChannelInfo(self, name):
-        return self.getConfiguration().getChannelInfo(name)
-
-    def getChannelsInfo(self):
-        return self.getConfiguration().getChannelsInfoList()
-
-    def getCountersInfo(self):
-        return self.getConfiguration().getCountersInfoList()
-
-    def getValues(self, parallel=True):
-        return self.getConfiguration().read(parallel=parallel)
-
-    def getIntegrationTime(self):
-        return self._getAttrValue('IntegrationTime')
-
-    def getIntegrationTimeObj(self):
-        return self._getAttrEG('IntegrationTime')
-
-    def setIntegrationTime(self, ctime):
-        self.getIntegrationTimeObj().write(ctime)
-
-    def putIntegrationTime(self, ctime):
-        if self._last_integ_time == ctime:
-            return
-        self._last_integ_time = ctime
-        self.getIntegrationTimeObj().write(ctime)
-
-    def _start(self, *args, **kwargs):
-        self.Start()
-        
-    def go(self, *args, **kwargs):
-        start_time  = time.time()
-        cfg = self.getConfiguration()
-        cfg.prepare()
-        duration = args[0]
-        if duration is None or duration == 0:
-            return self.getStateEG().readValue(), self.getValues()
-        self.putIntegrationTime(duration)
-        PoolElement.go(self, *args, **kwargs)
-        ret = self.getStateEG().readValue(), self.getValues()
-        self._total_go_time = time.time() - start_time        
-        return ret
-
-    startCount = PoolElement.start
-    waitCount = PoolElement.waitFinish
-    count = go
-    stopCount = PoolElement.abort
-
-
-class IORegister(PoolElement):
-    """ Class encapsulating IORegister functionality."""
-
-    def __init__(self, name, **kw):
-        """IORegister initialization."""
-        self.call__init__(PoolElement, name, **kw)
-
-    def getValueObj(self):
-        return self._getAttrEG('value')
-
-    def readValue(self, force=False):
-        return self._getAttrValue('value', force=force)
-
-    def startWriteValue(self, new_value, timeout=None):
-        try:
-            self.getValueObj().write(new_value)
-            self.final_val = new_value
-        except DevFailed, err_traceback:
-            for err in err_traceback:
-                if err.reason == 'API_AttrNotAllowed':
-                    raise RuntimeError, '%s is already chaging' % self
-                else:
-                    raise
-
-    def waitWriteValue(self, timeout=None):
-        pass
-
-    def writeValue(self, new_value, timeout=None):
-        self.startWriteValue(new_value, timeout=timeout)
-        self.waitWriteValue(timeout=timeout)
-        return self.getStateEG().readValue(), self.readValue()
-
-    writeIORegister = writeIOR = writeValue
-    readIORegister = readIOR = getValue = readValue
-
-
-class Instrument(BaseElement):
-
-    def __init__(self, **kw):
-        self.__dict__.update(kw)
-
-    def getFullName(self):
-        return self.full_name
-
-    def getParentInstrument(self):
-        return self.getPoolObj().getObj(self.parent_instrument)
-
-    def getParentInstrumentName(self):
-        return self.parent_instrument
-
-    def getChildrenInstruments(self):
-        raise NotImplementedError
-        return self._children
-
-    def getElements(self):
-        raise NotImplementedError
-        return self._elements
-
-    def getType(self):
-        return self.klass
-
-    def getPoolObj(self):
-        return self._pool_obj
-
-
-class Pool(TangoDevice, MoveableSource):
-    """ Class encapsulating device Pool functionality."""
-
-    def __init__(self, name, **kw):
-        self.call__init__(TangoDevice, name, **kw)
-        self.call__init__(MoveableSource)
-
-        self._elements = BaseSardanaElementContainer()
-        self.getAttribute("Elements").addListener(self.on_elements_changed)
-
-    def getObject(self, element_info):
-        elem_type = element_info.getType()
-        data = element_info._data
-        if elem_type in ('ControllerClass', 'ControllerLibrary', 'Instrument'):
-            klass = globals()[elem_type]
-            kwargs = dict(data)
-            kwargs['_pool_data'] = data
-            kwargs['_pool_obj'] = self
-            return klass(**kwargs)
-        obj = Factory().getDevice(element_info.full_name, _pool_obj=self,
-                                  _pool_data=data)
-        return obj
-
-    def on_elements_changed(self, evt_src, evt_type, evt_value):
-        if evt_type == TaurusEventType.Error:
-            msg = evt_value
-            if isinstance(msg, DevFailed):
-                d = msg[0]
-                # skip configuration errors
-                if d.reason == "API_BadConfigurationProperty":
-                    return
-                if d.reason in ("API_DeviceNotExported", "API_CantConnectToDevice"):
-                    msg = "Pool was shutdown or is inacessible"
-                else:
-                    msg = "{0}: {1}".format(d.reason, d.desc)
-            self.warning("Received elements error event %s", msg)
-            self.debug(evt_value)
-            return
-        elif evt_type not in CHANGE_EVT_TYPES:
-            return
-        try:
-            elems = CodecFactory().decode(evt_value.value, ensure_ascii=True)
-        except:
-            self.error("Could not decode element info")
-            self.info("value: '%s'", evt_value.value)
-            self.debug("Details:", exc_info=1)
-            return
-        elements = self.getElementsInfo()
-        for element_data in elems.get('new', ()):
-            element_data['manager'] = self
-            element = BaseSardanaElement(**element_data)
-            elements.addElement(element)
-        for element_data in elems.get('del', ()):
-            element = self.getElementInfo(element_data['name'])
-            try:
-                elements.removeElement(element)
-            except:
-                self.warning("Failed to remove %s", element_data)
-
-        return elems
-
-    def getElementsInfo(self):
-        return self._elements
-
-    def getElements(self):
-        return self.getElementsInfo().getElements()
-
-    def getElementInfo(self, name):
-        return self.getElementsInfo().getElement(name)
-
-    def getElementNamesOfType(self, elem_type):
-        return self.getElementsInfo().getElementNamesOfType(elem_type)
-
-    def getElementsOfType(self, elem_type):
-        return self.getElementsInfo().getElementsOfType(elem_type)
-
-    def getElementsWithInterface(self, interface):
-        return self.getElementsInfo().getElementsWithInterface(interface)
-
-    def getElementWithInterface(self, elem_name, interface):
-        return self.getElementsInfo().getElementWithInterface(elem_name, interface)
-
-    def getObj(self, name, elem_type=None):
-        if elem_type is None:
-            return self.getElementInfo(name)
-        elif isinstance(elem_type, (str, unicode)):
-            elem_types = elem_type,
-        else:
-            elem_types = elem_type
-        name = name.lower()
-        for e_type in elem_types:
-            elems = self.getElementsOfType(e_type)
-            for elem in elems.values():
-                if elem.name.lower() == name:
-                    return elem
-            elem = elems.get(name)
-            if elem is not None:
-                return elem
-
-    def __repr__(self):
-        return self.getNormalName()
-
-    def __str__(self):
-        return repr(self)
-
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # MoveableSource interface
-    #
-
-    def getMoveable(self, names):
-        """getMoveable(seq<string> names) -> Moveable
-
-        Returns a moveable object that handles all the moveable items given in
-        names."""
-        # if simple motor just return it (if the pool has it)
-        if isinstance(names, (str, unicode)):
-            names = names,
-
-        if len(names) == 1:
-            name = names[0]
-            return self.getObj(name, elem_type=MOVEABLE_TYPES)
-
-        # find a motor group that contains elements
-        moveable = self.__findMotorGroupWithElems(names)
-
-        # if none exists create one
-        if moveable is None:
-            mgs = self.getElementsOfType('MotorGroup')
-            i = 1
-            pid = os.getpid()
-            while True:
-                name = "_mg_ms_{0}_{1}".format(pid, i)
-                exists = False
-                for mg in mgs.values():
-                    if mg.name == name:
-                        exists = True
-                        break
-                if not exists:
-                    break
-                i += 1
-            moveable = self.createMotorGroup(name, names)
-        return moveable
-
-    def __findMotorGroupWithElems(self, names):
-        names_lower = map(str.lower, names)
-        len_names = len(names)
-        mgs = self.getElementsOfType('MotorGroup')
-        for mg in mgs.values():
-            mg_elems = mg.elements
-            if len(mg_elems) != len_names:
-                continue
-            for mg_elem, name in zip(mg_elems, names_lower):
-                if mg_elem.lower() != name:
-                    break
-            else:
-                return mg
-
-    #
-    # End of MoveableSource interface
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-
-    def _wait_for_element_in_container(self, container, elem_name, timeout=0.5,
-                                       contains=True):
-        start = time.time()
-        cond = True
-        nap = 0.01
-        if timeout:
-            nap = timeout / 10.
-        while cond:
-            elem = container.getElement(elem_name)
-            if contains:
-                if elem is not None:
-                    return elem
-            else:
-                if elem is None:
-                    return True
-            if timeout:
-                dt = time.time() - start
-                if dt > timeout:
-                    self.info("Timed out waiting for '%s' in container",
-                              elem_name)
-                    return
-            time.sleep(nap)
-
-    def createMotorGroup(self, mg_name, elements):
-        params = [mg_name,] + map(str, elements)
-        self.debug('trying to create motor group for elements: %s', params)
-        self.command_inout('CreateMotorGroup', params)
-        elements_info = self.getElementsInfo()
-        return self._wait_for_element_in_container(elements_info, mg_name)
-
-    def createMeasurementGroup(self, mg_name, elements):
-        params = [mg_name,] + map(str,elements)
-        self.debug('trying to create measurement group: %s', params)
-        self.command_inout('CreateMeasurementGroup', params)
-        elements_info = self.getElementsInfo()
-        return self._wait_for_element_in_container(elements_info, mg_name)
-
-    def deleteMeasurementGroup(self, name):
-        return self.deleteElement(name)
-
-    def createElement(self, name, ctrl, axis=None):
-        ctrl_type = ctrl.types[0]
-        if axis is None:
-            axis = str(ctrl.getLastUsedAxis() + 1)
-        else:
-            axis = str(axis)
-        cmd = "CreateElement"
-        pars = ctrl_type, ctrl.name, axis, name
-        self.command_inout(cmd, pars)
-        elements_info = self.getElementsInfo()
-        return self._wait_for_element_in_container(elements_info, name)
-
-    def deleteElement(self, name):
-        self.debug('trying to delete element: %s', name)
-        self.command_inout('DeleteElement', name)
-        elements_info = self.getElementsInfo()
-        return self._wait_for_element_in_container(elements_info, name,
-                                                   contains=False)
-
-    def createController(self, class_name, name, *props):
-        ctrl_class = self.getObj(class_name, elem_type='ControllerClass')
-        if ctrl_class is None:
-            raise Exception("Controller class %s not found" % class_name)
-        cmd = "CreateController"
-        pars = [ctrl_class.types[0], ctrl_class.file_name, class_name, name]
-        pars.extend(map(str, props))
-        self.command_inout(cmd, pars)
-        elements_info = self.getElementsInfo()
-        return self._wait_for_element_in_container(elements_info, name)
-
-    def deleteController(self, name):
-        return self.deleteElement(name)
-
-
-def registerExtensions():
-    factory = Factory()
-    factory.registerDeviceClass("Pool", Pool)
-
-    hw_type_names = [
-        'Controller',
-        'ComChannel', 'Motor', 'PseudoMotor',
-        'CTExpChannel','ZeroDExpChannel','OneDExpChannel', 'TwoDExpChannel',
-        'PseudoCounter', 'IORegister', 'MotorGroup', 'MeasurementGroup']
-
-    hw_type_map = [ (name, globals()[name]) for name in hw_type_names ]
-
-    for klass_name, klass in hw_type_map:
-        factory.registerDeviceClass(klass_name, klass)
diff --git a/lib/taurus/core/tango/sardana/sardana.py b/lib/taurus/core/tango/sardana/sardana.py
deleted file mode 100644
index 86a644e..0000000
--- a/lib/taurus/core/tango/sardana/sardana.py
+++ /dev/null
@@ -1,713 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-##
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-##
-## Taurus 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.
-##
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""The sardana submodule. It contains specific part of sardana"""
-
-__all__ = ["BaseSardanaElement", "BaseSardanaElementContainer",
-           "Pool", "MacroServer", "Door", "Sardana", "SardanaManager",
-           "PoolElementType", "ControllerClassInfo", "ControllerInfo",
-           "ChannelView", "PlotType", "Normalization", "AcqTriggerType",
-           "AcqMode"]
-
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-# T E M P O R A R Y   I M P L E M E N T A T I O N
-#
-# THIS IS USED FOR TEST PURPOSES ONLY. DO NOT USE IT OUTSIDE SARDANA TESTS
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-
-__docformat__ = 'restructuredtext'
-
-import PyTango
-
-from taurus.core.util.enumeration import Enumeration
-from taurus.core.util.log import Logger
-from taurus.core.util.singleton import Singleton
-from taurus.core.util.containers import CaselessDict
-from taurus.core.util.codecs import CodecFactory
-
-PoolElementType = Enumeration("PoolElementType",
-    ("0D", "1D", "2D", "Communication", "CounterTimer", "IORegister",
-      "Motor","PseudoCounter", "PseudoMotor"))
-
-ChannelView = Enumeration("ChannelView",
-    ("Channel", "Enabled", "Output", "PlotType", "PlotAxes", "Timer",
-     "Monitor", "Trigger", "Conditioning", "Normalization","NXPath",
-     "Shape", "DataType",
-     "Unknown"))
-
-PlotType = Enumeration("PlotType", ("No", "Spectrum", "Image"))
-
-Normalization = Enumeration("Normalization", ("No", "Avg", "Integ"))
-
-#: an enumeration describing all possible acquisition trigger types
-AcqTriggerType = Enumeration("AcqTriggerType", ( \
-    "Software", # channel triggered by software - start and stop by software
-    "Gate",     # channel triggered by HW - start and stop by external
-    "Unknown") )
-
-#: an enumeration describing all possible acquisition mode types
-AcqMode = Enumeration("AcqMode", ( \
-    "Timer",
-    "Monitor",
-    "Unknown") )
-
-
-class BaseSardanaElement(object):
-    """Generic sardana element"""
-
-    def __init__(self, *args, **kwargs):
-        self._manager = kwargs.pop('manager')
-        self.__dict__.update(kwargs)
-        self._data = kwargs
-        self._object = None
-
-    def __repr__(self):
-        return "{0}({1})".format(self.type, self.full_name)
-
-    def __str__(self):
-        return self.name
-
-    def __getattr__(self, name):
-        return getattr(self.getObj(), name)
-
-    def __cmp__(self, elem):
-        return cmp(self.name, elem.name)
-
-    def getData(self):
-        return self._data
-
-    def getName(self):
-        return self.name
-
-    def getId(self):
-        return self.full_name
-
-    def getType(self):
-        return self.getTypes()[0]
-
-    def getTypes(self):
-        elem_types = self.type
-        if isinstance(elem_types, (str, unicode)):
-            return [elem_types]
-        return elem_types
-
-    def serialize(self, *args, **kwargs):
-        kwargs.update(self._data)
-        return kwargs
-
-    def str(self, *args, **kwargs):
-        #TODO change and check which is the active protocol to serialize
-        #acordingly
-        return CodecFactory().encode(('json', self.serialize(*args, **kwargs)))
-
-    def getObj(self):
-        obj = self._object
-        if obj is None:
-            self._object = obj = self._manager.getObject(self)
-        return obj
-
-
-
-class BaseSardanaElementContainer:
-
-    def __init__(self):
-        # dict<str, dict> where key is the type and value is:
-        #     dict<str, MacroServerElement> where key is the element full name
-        #                                   and value is the Element object
-        self._type_elems_dict = CaselessDict()
-
-        # dict<str, container> where key is the interface and value is the set
-        # of elements which implement that interface
-        self._interfaces_dict = {}
-
-    def addElement(self, elem):
-        elem_type = elem.getType()
-        elem_full_name = elem.full_name
-
-        #update type_elems
-        type_elems = self._type_elems_dict.get(elem_type)
-        if type_elems is None:
-            self._type_elems_dict[elem_type] = type_elems = CaselessDict()
-        type_elems[elem_full_name] = elem
-
-        # update interfaces
-        for interface in elem.interfaces:
-            interface_elems = self._interfaces_dict.get(interface)
-            if interface_elems is None:
-                self._interfaces_dict[interface] = interface_elems = CaselessDict()
-            interface_elems[elem_full_name] = elem
-
-    def removeElement(self, e):
-        elem_type = e.getType()
-
-        # update type_elems
-        type_elems = self._type_elems_dict.get(elem_type)
-        if type_elems:
-            del type_elems[e.full_name]
-
-        # update interfaces
-        for interface in e.interfaces:
-            interface_elems = self._interfaces_dict.get(interface)
-            del interface_elems[e.full_name]
-
-    def removeElementsOfType(self, t):
-        for elem in self.getElementsOfType(t):
-            self.removeElement(elem)
-
-    def getElementsOfType(self, t):
-        elems = self._type_elems_dict.get(t, {})
-        return elems
-
-    def getElementNamesOfType(self, t):
-        return [e.name for e in self.getElementsOfType(t).values()]
-
-    def getElementsWithInterface(self, interface):
-        elems = self._interfaces_dict.get(interface, {})
-        return elems
-
-    def getElementsWithInterfaces(self, interfaces):
-        ret = CaselessDict()
-        for interface in interfaces:
-            ret.update(self.getElementsWithInterface(interface))
-        return ret
-
-    def getElementNamesWithInterface(self, interface):
-        return [e.name for e in self.getElementsWithInterface(interface).values()]
-
-    def hasElementName(self, elem_name):
-        return self.getElement(elem_name) != None
-
-    def getElement(self, elem_name):
-        elem_name = elem_name.lower()
-        for elems in self._type_elems_dict.values():
-            elem = elems.get(elem_name) # full_name?
-            if elem is not None:
-                return elem
-            for elem in elems.values():
-                if elem.name.lower() == elem_name:
-                    return elem
-
-    def getElementWithInterface(self, elem_name, interface):
-        elem_name = elem_name.lower()
-        elems = self._interfaces_dict.get(interface, {})
-        if elem_name in elems:
-            return elems[elem_name]
-        for elem in elems.values():
-            if elem.name.lower() == elem_name:
-                return elem
-
-    def getElements(self):
-        ret = set()
-        for elems in self._type_elems_dict.values():
-            ret.update(elems.values())
-        return ret
-
-    def getInterfaces(self):
-        return self._interfaces_dict
-
-    def getTypes(self):
-        return self._type_elems_dict
-
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-# T E M P O R A R Y   I M P L E M E N T A T I O N
-#
-# THIS IS USED FOR TEST PURPOSES ONLY. DO NOT USE IT OUTSIDE SARDANA TESTS
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-class PropertyInfo():
-    def __init__(self, name, type, format, default_value=None):
-        self._name = name
-        self._type = type
-        self._format = format
-        self._default_value=default_value
-
-    def get_name(self):
-        return self._name
-
-    def get_type(self):
-        return self._type
-
-    def get_format(self):
-        return self._format
-
-    def get_default_value(self):
-        return self._default_value
-
-
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-# T E M P O R A R Y   I M P L E M E N T A T I O N
-#
-# THIS IS USED FOR TEST PURPOSES ONLY. DO NOT USE IT OUTSIDE SARDANA TESTS
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-class ControllerClassInfo(object):
-
-    def __init__(self, name, type, library):
-        self._name = name
-        self._type = type
-        self._library = library
-
-    def get_max_elements(self):
-        return 20
-
-    def get_name(self):
-        return self._name
-
-    def get_model(self):
-        # fake data ###############
-        return "Model of "+ self._name
-
-    def get_icon(self):
-        # fake data ###############
-        import taurus.qt.qtgui.resource
-
-        return taurus.qt.qtgui.resource.getIcon(":/designer/extra_motor.png")
-
-    def get_organization(self):
-        # fake data ###############
-        return "Organization of "+ self._name
-
-    def get_description(self):
-        #fake data############
-        descr="This is description of "
-        for i in range(20):
-            descr=descr + " and " +self._name
-        ####################
-        return descr
-
-    def get_family(self):
-        # fake data ###############
-        return "Family of "+ self._name
-
-    def get_properties(self):
-        properties = []
-        # fake data ######################
-        properties.append(PropertyInfo("my parameter", "string", "0D", "deviceName"))
-        properties.append(PropertyInfo("asdsadasd", "integer", "0D", 5))
-        properties.append(PropertyInfo("boollll0", "boolean", "0D", False))
-        properties.append(PropertyInfo("boollll0", "boolean", "0D", True))
-        properties.append(PropertyInfo("boollll0", "boolean", "0D", False))
-        properties.append(PropertyInfo("number1", "float", "0D", 3.5))
-        properties.append(PropertyInfo("string2", "string", "0D", "hehe"))
-        properties.append(PropertyInfo("tableIntegerD1", "integer", "1D", [1,2,3]))
-        properties.append(PropertyInfo("tablestringD1", "string", "1D", ["aaaa","bbb","ccc"]))
-        properties.append(PropertyInfo("tablefloatD1", "float", "1D", [1.0,2.5,3.6]))
-        properties.append(PropertyInfo("tablebooleanD1", "boolean", "1D", [True,False,True,False]))
-        properties.append(PropertyInfo("tablebleintegerD1", "integer", "1D", [1,2,3]))
-        properties.append(PropertyInfo("tablebooleanD2", "boolean", "2D",[ [True,False,True],[True,True,True],[False,False,False] ]))
-        properties.append(PropertyInfo("tableinteger2", "integer", "2D",[ [1,2,3],[11,22,33],[-10,-20,-30] ]))
-        properties.append(PropertyInfo("tablefloatD2", "float", "2D",[ [0.5,0.6,0.8],[0.4,0.0,0.333333],[-0.1111,1,123123.6] ]))
-        properties.append(PropertyInfo("tablestringD2", "string", "2D",[ ["aaaa","bbb","ccc"],["aaaa2","bbb2","ccc2"],["aaaa3","bbb3","ccc3"] ]))
-
-        return properties
-
-    def get_controller_type(self):
-        return self._type
-
-
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-# T E M P O R A R Y   I M P L E M E N T A T I O N
-#
-# THIS IS USED FOR TEST PURPOSES ONLY. DO NOT USE IT OUTSIDE SARDANA TESTS
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-class ControllerInfo(object):
-
-    def __init__(self, name, ctrl_class_info):
-        self._name = name
-        self._ctrl_class_info = ctrl_class_info
-
-    def get_controller_class_info(self):
-        return self._ctrl_class_info
-
-    def get_controller_type(self):
-        return self._ctrl_class_info.get_controller_type()
-
-    def get_name(self):
-        return self._name
-
-    def get_max_elements(self):
-        return self._ctrl_class_info.get_max_elements()
-
-    def is_axis_free(self, axis):
-        #fake data
-        if axis == 3:
-            return False
-        else:
-            return True
-
-    def is_name_free(self, name):
-        #fake data
-        if name == "asd":
-            return False
-        else:
-            return True
-
-    def get_icon(self):
-        return self._ctrl_class_info.get_icon()
-
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-# T E M P O R A R Y   I M P L E M E N T A T I O N
-#
-# THIS IS USED FOR TEST PURPOSES ONLY. DO NOT USE IT OUTSIDE SARDANA TESTS
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-class Pool(object):
-
-    def __init__(self, sardana, name, poolpath, version, alias=None, device_name=None):
-        self._sardana = sardana
-        self._name = name
-        self._poolpath = poolpath
-        self._version = version
-        self._alias = alias
-        self._device_name = device_name
-
-    def starter_run(self, host, level=1):
-        return True
-
-    def get_name(self):
-        return self._name
-
-    def local_run(self):
-        return True
-
-    def get_element_types(self):
-        return sorted(PoolElementType.keys())
-
-    def get_controller_class_infos(self):
-        #fake data ########################
-        data = []
-        for i in range(5):
-            data.append(ControllerClassInfo("motorController"+str(i), PoolElementType.Motor, None))
-        for i in range(5):
-            data.append(ControllerClassInfo("counterTimerController"+str(i), PoolElementType.CounterTimer, None))
-
-        return data
-
-    def get_controller_infos(self):
-        ctrl_classes = self.get_controller_class_infos()
-        data = []
-        for i in range(2):
-            data.append(ControllerInfo("My_motor_ctrl_"+str(i), ctrl_classes[i]))
-        for i in range(2):
-            data.append(ControllerInfo("My_ct_ctrl_"+str(i), ctrl_classes[i+5]))
-        return data
-
-    def create_controller(self,controller_class_info, name, properties ):
-        pass
-
-    def create_element(self, controller_name, name, axis):
-        pass
-
-
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-# T E M P O R A R Y   I M P L E M E N T A T I O N
-#
-# THIS IS USED FOR TEST PURPOSES ONLY. DO NOT USE IT OUTSIDE SARDANA TESTS
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-class MacroServer(object):
-
-    def __init__(self, sardana, name, macropath, pool_names, version, alias=None, device_name=None):
-        self._sardana = sardana
-        self._name = name
-        self._macropath = macropath
-        self._pool_names = pool_names
-        self._version = version
-        self._alias = alias
-        self._device_name = device_name
-        self._doors = []
-
-    def create_door(self, alias, device_name):
-        try:
-            return self._create_door(alias, device_name)
-        except:
-            db = self.get_database()
-            db.delete_device(device_name)
-            raise
-
-    def _create_door(self, alias, device_name):
-        db = self.get_database()
-        info = PyTango.DbDevInfo()
-        info.name = device_name
-        info._class = "Door"
-        info.server = "MacroServer/" + self._name
-        db.add_device(info)
-        if alias:
-            db.put_device_alias(device_name, alias)
-        door = Door(alias=alias, device_name=device_name)
-        self._doors.append(door)
-        return door
-
-    def remove_door(self, device_name):
-        pass
-
-    def starter_run(self, host, level=1):
-        return True
-
-    def local_run(self):
-        return True
-
-    def get_database(self):
-        return self._sardana.get_database()
-
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-# T E M P O R A R Y   I M P L E M E N T A T I O N
-#
-# THIS IS USED FOR TEST PURPOSES ONLY. DO NOT USE IT OUTSIDE SARDANA TESTS
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-class Door(object):
-
-    def __init__(self, alias=None, device_name=None):
-        self._name = alias
-        self._device_name = device_name
-
-
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-# T E M P O R A R Y   I M P L E M E N T A T I O N
-#
-# THIS IS USED FOR TEST PURPOSES ONLY. DO NOT USE IT OUTSIDE SARDANA TESTS
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-class Sardana(object):
-
-    def __init__(self, sardana_db , name, device_name=None):
-        self._sardana_db = sardana_db
-        self._name = name
-        self._device_name = device_name
-        self._pools = []
-        self._macroservers = []
-        self._init()
-
-    def _init(self):
-        if not self._device_name:
-            return
-        self._pools = []
-        self._macroservers = []
-        dev_name = self._device_name
-        db = self.get_database()
-        cache = db.cache()
-        dev_info = cache.devices()[dev_name]
-        dev_class_name = dev_info.klass().name()
-        if dev_class_name == "Pool":
-            pass
-        elif dev_class_name == "MacroServer":
-            ms_dev_name = dev_name
-            ms_prop_list = map(str.lower, db.get_device_property_list(ms_dev_name, "*"))
-            ms_props = db.get_device_property(ms_dev_name, ms_prop_list)
-            ms_name = dev_info.server().serverInstance()
-            ms_alias = dev_info.alias()
-            ms = MacroServer(self, ms_name, ms_props.get("macropath"), ms_props.get("poolnames"),
-                             ms_props.get("version"), ms_alias, ms_dev_name)
-            self._macroservers.append(ms)
-            for pool_dev_name in ms_props.get("poolnames",()):
-                pool_prop_list = map(str.lower, db.get_device_property_list(pool_dev_name, "*"))
-                pool_props = db.get_device_property(pool_dev_name, pool_prop_list)
-                pool_dev_info = cache.devices()[pool_dev_name]
-                pool_name = pool_dev_info.server().serverInstance()
-                pool_alias = pool_dev_info.alias()
-                pool = Pool(self, pool_name, pool_props.get("poolpath"), pool_props.get("version"), pool_alias, pool_dev_name)
-                self._pools.append(pool)
-
-    def get_name(self):
-        return self._name
-
-    def set_device_name(self, device_name):
-        self._device_name = device_name
-        self._init()
-
-    def get_device_name(self):
-        return self._device_name
-
-    def get_pools(self):
-        return self._pools
-
-    def get_macro_servers(self):
-        return self._macro_servers
-
-    def create_pool(self, name, poolpath, version, alias=None, device_name=None):
-        try:
-            return self._create_pool(name, poolpath, version, alias=alias, device_name=device_name)
-        except:
-            db = self.get_database()
-            db.delete_device(device_name)
-            raise
-
-    def _create_pool(self, name, poolpath, version, alias=None, device_name=None):
-        db = self.get_database()
-        info = PyTango.DbDevInfo()
-        info.name = device_name
-        info._class = "Pool"
-        info.server = "Pool/" + name
-        db.add_device(info)
-        if alias:
-            db.put_device_alias(device_name, alias)
-
-        db.put_device_property(device_name,{"PoolPath" : poolpath, "Version": version} )
-        pool = Pool(self, name, poolpath, version, alias=alias, device_name=device_name)
-        self._pools.append(pool)
-        db.cache().refresh()
-        return pool
-
-    def create_macroserver(self, name, macropath, pool_names, version, alias=None, device_name=None):
-        try:
-            return self._create_macroserver(name, macropath, pool_names, version, alias=alias, device_name=device_name)
-        except:
-            db = self.get_database()
-            db.delete_device(device_name)
-            raise
-
-    def _create_macroserver(self, name, macropath, pool_names, version, alias=None, device_name=None):
-        db = self.get_database()
-        info = PyTango.DbDevInfo()
-        info.name = device_name
-        info._class = "MacroServer"
-        info.server = "MacroServer/" + name
-        db.add_device(info)
-        if alias:
-            db.put_device_alias(device_name, alias)
-
-        db.put_device_property(device_name,{"MacroPath" : macropath, "Version": version, "PoolNames":pool_names} )
-        ms = MacroServer(self, name, macropath, pool_names, version, alias=alias, device_name=device_name)
-        self._macroservers.append(ms)
-        db.cache().refresh()
-        return ms
-
-    def remove_pool(self):
-        pass
-
-    def remove_macroserver(self):
-        pass
-
-    def get_database(self):
-        return self._sardana_db.get_database()
-
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-# T E M P O R A R Y   I M P L E M E N T A T I O N
-#
-# THIS IS USED FOR TEST PURPOSES ONLY. DO NOT USE IT OUTSIDE SARDANA TESTS
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-class DatabaseSardana(object):
-    """A class containning all sardanas for a single database"""
-
-    def __init__(self, db):
-        assert(db is not None)
-        self._db = db
-        self.refresh()
-
-    def refresh(self):
-        self._sardanas = sardanas = {}
-        services = self._db.get_service_list("Sardana/.*")
-        for service, dev in services.items():
-            service_type, service_instance = service.split("/", 1)
-            try:
-                sardanas[service_instance] = Sardana(self, service_instance, dev)
-            except:
-                pass
-
-    def create_sardana(self, name, device_name):
-        if self._sardanas.has_key(name):
-            raise Exception("Sardana '%s' already exists" % name)
-        self._db.register_service("Sardana", name, device_name)
-        sardana = Sardana(self, name)
-        self._sardanas[name] = sardana
-        return sardana
-
-    def remove_sardana(self, name):
-        try:
-            self._sardanas.pop(name)
-        except KeyError:
-            raise Exception("Sardana '%s' does NOT exist" % name)
-        self._db.unregister_service("Sardana", name)
-
-    def get_sardanas(self):
-        return self._sardanas
-
-    def get_sardana(self, name):
-        return self._sardanas[name]
-
-    def get_database(self):
-        return self._db
-
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-# T E M P O R A R Y   I M P L E M E N T A T I O N
-#
-# THIS IS USED FOR TEST PURPOSES ONLY. DO NOT USE IT OUTSIDE SARDANA TESTS
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-class SardanaManager(Singleton, Logger):
-
-    def __init__(self):
-        """ Initialization. Nothing to be done here for now."""
-        pass
-
-    def init(self, *args, **kwargs):
-        """Singleton instance initialization.
-           **For internal usage only**"""
-        name = self.__class__.__name__
-        self.call__init__(Logger, name)
-        self._db_sardanas = {}
-
-    def _get_db_sardana(self, db=None):
-        if db is None:
-            import taurus
-            db = taurus.Database()
-        db_sardana = self._db_sardanas.get(db)
-        if db_sardana is None:
-            db_sardana = DatabaseSardana(db)
-        return db_sardana
-
-    def create_sardana(self, name, device_name, db=None):
-        return self._get_db_sardana(db).create_sardana(name, device_name)
-
-    def remove_sardana(self, name, db=None):
-        self._get_db_sardana(db).remove_sardana(name)
-
-    def get_sardanas(self, db=None):
-        return self._get_db_sardana(db).get_sardanas()
-
-    def get_sardana(self, name, db=None):
-        return self._get_db_sardana(db).get_sardana(name)
-
-    def get_hosts(self):
-        return ["localhost"] + ["controls%02d" % i for i in range(5)]
-
-    def get_level_range(self):
-        return 1, 200
-
-    def has_localhost_starter(self):
-        import socket
-        return socket.gethostname() in self.get_hosts()
-
-    @classmethod
-    def get_default_pool_path(cls):
-        pathList = []
-        pathList.append("/homelocal/sicilia/lib/poolcontrollers")
-        pathList.append("/homelocal/sicilia/lib/python/site-packages/poolcontrollers")
-        return pathList
-
-    @classmethod
-    def get_default_ms_path(cls):
-        pathList = []
-        pathList.append("/homelocal/sicilia/lib/python/site-packages/macroserver/macros")
-        return pathList
-
-
-
-
-
diff --git a/lib/taurus/core/tango/starter.py b/lib/taurus/core/tango/starter.py
new file mode 100644
index 0000000..22e3f1b
--- /dev/null
+++ b/lib/taurus/core/tango/starter.py
@@ -0,0 +1,228 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+## 
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+## 
+## Taurus 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.
+## 
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+"""This module provides a very simple API for starting and killing device 
+servers
+
+It is not a replacement of the Tango Starter Device Server since this is much 
+more limited in scope.
+"""
+
+__docformat__ = 'restructuredtext'
+
+
+import os
+import time
+import subprocess
+import PyTango
+
+from taurus.core.util.log import Logger
+
+_log = Logger('Starter')
+
+class Starter(object):
+    '''Abstract class for managing (starting, stopping, registering and 
+    removing) a Tango Device Server.
+    
+    Derived classes should provide the methods for starting and stopping a 
+    device.
+    '''
+   
+    def __init__(self, ds_name):
+        '''
+        :param ds_name: (str) Device Server name in the form "server/instance"
+        '''
+        self.ds_name = ds_name
+        self.dserver_name = 'dserver/%s' % ds_name       
+        try:
+            self.dserver = PyTango.DeviceProxy(self.dserver_name)
+            self.serverExisted = True
+        except PyTango.DevFailed: #not registered?
+            self.dserver = None
+            self.serverExisted = False
+        self._addedDevices = []
+
+    def hardKill(self):
+        raise NotImplementedError('hardKill method is mandatory')
+
+    def terminate(self):
+        raise NotImplementedError('terminate method is mandatory')
+        
+    def start(self):
+        raise NotImplementedError('start method is mandatory')
+    
+    def stopDs(self, synch=True, hard_kill=False, wait_seconds=10):
+        if hard_kill:
+            _log.info('Hard killing server %s...' % self.ds_name)
+            self.hardKill()
+        else:
+            _log.info('Stopping server %s...' % self.ds_name)
+            self.terminate()
+        if not synch:
+            return
+        for i in range(wait_seconds):
+            _log.debug('Waiting for server %s to get stopped. Iteration: %d'% \
+                       (self.ds_name, i))
+            if self.isRunning():
+                time.sleep(1)
+            else:
+                time.sleep(3) #TODO: figure out why we have to wait here
+                _log.info('Server %s has been stopped' % self.ds_name)
+                return
+        _log.warning('Server %s did not stop within %d seconds'%
+                     (self.ds_name, wait_seconds))
+    
+    def startDs(self, synch=True, wait_seconds=10):
+        if self.isRunning():
+            _log.warning('Server already running')
+            return
+        _log.info('Starting server %s...' % self.ds_name)
+        self.start()
+        if not synch:
+            return
+        for i in range(wait_seconds):
+            _log.debug('Waiting for server %s to get started... %d'% \
+                      (self.ds_name, i))
+            if self.isRunning():
+                _log.info('Server %s has been started' % self.ds_name)
+                time.sleep(3) #TODO: figure out why we have to wait here
+                return
+            else:
+                time.sleep(1)
+        _log.warning('Server %s did not start within %d seconds'% \
+                     (self.ds_name, wait_seconds))
+        
+    def addNewDevice(self, device, klass=None):
+        """
+        Register a device of this server in the DB (register the server if 
+        not present)
+        e.g. to create Starter in an init script::
+            
+            add_new_device('sys/tg_test/foobar', klass='TangoTest')
+        
+        :param klass: class name. If None passed, it defaults to the server 
+                      name (without instance name)
+        """
+        if device in self._addedDevices:
+            _log.warning('%s already added. Skipping'%device)
+            return
+        if klass is None:
+            klass = self.ds_name.split('/')[0]
+        #register the server
+        dev_info = PyTango.DbDevInfo()
+        dev_info.name = device
+        dev_info.klass = klass
+        dev_info.server = self.ds_name
+        PyTango.Database().add_device(dev_info)
+        #create proxy to dserver
+        self.dserver = PyTango.DeviceProxy(self.dserver_name)
+        #keep track of added devices
+        self._addedDevices.append(device) 
+        
+    def cleanDb(self, force=False):
+        '''removes devices which have been added by :meth:`addNewDevice`
+        and then removes the server if it was registered by this starter 
+        (or, if force is True, it removes the server in any case)
+        
+        :param force: (bool) force removing of the Server even if it was 
+                      not registered within this starter 
+        '''
+        for device in self._addedDevices:
+            PyTango.Database().delete_device(device)
+            _log.info('Deleted device %s'%device)
+        
+        if (self.serverExisted or len(self._addedDevices)==0) and not force:
+            msg = ('%s was not registered by this starter. Not removing. '+
+                   'Use %s.removeDS(force=True) to force removal')% \
+                                 (self.ds_name, self.__class__.__name__)
+            _log.warning(msg)
+        else:
+            self.stopDs(hard_kill=True)
+            PyTango.Database().delete_server(self.ds_name)
+            _log.info('Deleted Server %s'%self.ds_name)
+
+
+    def isRunning(self):
+        if self.dserver is None:
+            return False
+        try:
+            self.dserver.ping()
+        except PyTango.DevFailed:
+            return False
+        return True
+
+class ProcessStarter(Starter):
+    '''A :class:`Starter` which uses subprocess to start and stop a device 
+    server.
+    '''
+
+    def __init__(self, execname, ds_name):
+        '''
+        :param execname: (str) path to the executable to launch the server
+        :param ds_name: (str) Device Server name in the form "server/instance"
+        '''
+        super(ProcessStarter, self).__init__(ds_name)
+        self.ds_instance = ds_name.split('/')[1]
+        self.exec_name = os.path.abspath(execname)
+        self.process = None
+
+    def start(self):
+        dev_null = open(os.devnull, 'wb')
+        args = [self.exec_name, self.ds_instance]
+        self.process = subprocess.Popen(args, stdout=dev_null, stderr=dev_null)
+            
+    def terminate(self):
+        if self.process:
+            self.process.terminate()
+        else:
+            _log.warning('Process not started, cannot terminate it.')
+
+    def hardKill(self):
+        if self.process:
+            self.process.kill()
+        else:
+            _log.warning('Process not started, cannot terminate it.')
+
+
+
+
+
+if __name__ == '__main__':
+    
+    from taurus.test.resource import getResourcePath
+    timeoutExec = getResourcePath('taurus.qt.qtgui.button.test.res', 'Timeout')
+    s = ProcessStarter(timeoutExec, 'Timeout/test_removeme')
+    devname = 'testing/timeout/temp-1'
+    s.addNewDevice(devname, klass='Timeout')
+    s.startDs()
+    try: 
+        print 'Is running:', s.isRunning()
+        print "ping:", PyTango.DeviceProxy(devname).ping()
+    except Exception, e:
+        print e
+    #s.stopDs()
+    s.cleanDb(force=False)
+    
+    
\ No newline at end of file
diff --git a/lib/taurus/core/tango/tangoattribute.py b/lib/taurus/core/tango/tangoattribute.py
index 20b7758..60a2f2c 100644
--- a/lib/taurus/core/tango/tangoattribute.py
+++ b/lib/taurus/core/tango/tangoattribute.py
@@ -3,21 +3,21 @@
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
@@ -33,6 +33,7 @@ __docformat__ = "restructuredtext"
 import time
 import threading
 import PyTango
+import numpy
 
 from taurus import Factory, Manager
 from taurus.core.taurusattribute import TaurusAttribute, TaurusStateAttribute
@@ -48,42 +49,42 @@ class TangoAttribute(TaurusAttribute):
 
     # helper class property that stores a reference to the corresponding factory
     _factory = None
-    
+
     def __init__(self, name, parent, **kwargs):
 
         # the last attribute value
         self.__attr_value = None
-        
+
         # the last attribute error
         self.__attr_err = None
-        
+
         # the last time the attribute was read
         self.__attr_timestamp = 0
-        
+
         # the change event identifier
         self.__chg_evt_id = None
 
         # reference to the configuration object
         self.__attr_config = None
-        
+
         # current event subscription state
         self.__subscription_state = SubscriptionState.Unsubscribed
         self.__subscription_event = threading.Event()
 
         self.call__init__(TaurusAttribute, name, parent, **kwargs)
 
-    def __getattr__(self,name):
+    def __getattr__(self, name):
         return getattr(self._getRealConfig(), name)
-    
+
     def _getRealConfig(self):
         """ Returns the current configuration of the attribute."""
 
         if self.__attr_config is None:
             cfg_name = "%s?configuration" % self.getFullName()
-            from taurus.core.tango import TangoConfiguration # @todo...
+            from taurus.core.tango import TangoConfiguration  # @todo...
             self.__attr_config = TangoConfiguration(cfg_name, self)
         return self.__attr_config
-        
+
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     # TaurusModel necessary overwrite
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
@@ -99,11 +100,11 @@ class TangoAttribute(TaurusAttribute):
         attr_value.value = self.encode(value)
         op = WriteAttrOperation(self, attr_value)
         return op
-    
+
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     # PyTango connection
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-    
-    
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+
     def isNumeric(self, inc_array=False):
         cfg = self._getRealConfig()
         if not cfg:
@@ -111,10 +112,10 @@ class TangoAttribute(TaurusAttribute):
             return False
         if inc_array and not self.isScalar():
             return False
-        
+
         type = cfg.getType()
         return PyTango.is_numerical_type(type, inc_array=inc_array)
-    
+
     def isInteger(self, inc_array=False):
         cfg = self._getRealConfig()
         if not cfg:
@@ -136,7 +137,7 @@ class TangoAttribute(TaurusAttribute):
 
         type = cfg.getType()
         return PyTango.is_float_type(type, inc_array=inc_array)
-    
+
     def isBoolean(self, inc_array=False):
         cfg = self._getRealConfig()
         if not cfg:
@@ -144,46 +145,50 @@ class TangoAttribute(TaurusAttribute):
             return False
         if inc_array and not self.isScalar():
             return False
-        
+
         type = cfg.getType()
         if inc_array:
             return type in (DataType.DevBoolean, DataType.DevVarBooleanArray)
         else:
             return type == DataType.DevBoolean
-    
+
     def isState(self):
         cfg = self._getRealConfig()
         if not cfg:
             self.warning("attribute does not contain information")
             return False
         return cfg.getType() == DataType.DevState
-        
-    def getDisplayValue(self,cache=True):
+
+    def getDisplayValue(self, cache=True):
         attrvalue = self.getValueObj(cache=cache)
         if not attrvalue:
             return None
         v = attrvalue.value
-            
+
         return self.displayValue(v)
-        
+
     def encode(self, value):
         """Translates the given value into a tango compatible value according to
         the attribute data type"""
-        
+
         attrvalue = None
-        
+
         if self._getRealConfig() is None:
             self.warning("attribute does not contain information")
             return value
-            
+
         fmt = self.getDataFormat()
         type = self.getType()
         if fmt == PyTango.SCALAR:
-            if PyTango.is_float_type(type):
+            if type == DataType.DevDouble:
                 attrvalue = float(value)
+            elif type == DataType.DevFloat:
+                # We encode to float, but rounding to Tango::DevFloat precision
+                # see: http://sf.net/p/sardana/tickets/162
+                attrvalue = float(numpy.float32(value))
             elif PyTango.is_int_type(type):
                 #attrvalue = int(value)
-                attrvalue = long(value) #changed as a partial workaround to a problem in PyTango writing to DevULong64 attributes (see ALBA RT#29793)
+                attrvalue = long(value)  #changed as a partial workaround to a problem in PyTango writing to DevULong64 attributes (see ALBA RT#29793)
             elif type == DataType.DevBoolean:
                 try:
                     attrvalue = bool(int(value))
@@ -200,12 +205,12 @@ class TangoAttribute(TaurusAttribute):
         else:
             attrvalue = str(value)
         return attrvalue
-    
+
     def decode(self, attr_value):
         """Decodes a value that was received from PyTango into the expected 
         representation"""
         return attr_value
-    
+
     def write(self, value, with_read=True):
         """ Write the value in the Tango Device Attribute """
         try:
@@ -244,7 +249,7 @@ class TangoAttribute(TaurusAttribute):
 
     def poll(self, **kwargs):
         """ Notify listeners when the attribute has been polled"""
-        single = kwargs.get('single',True)
+        single = kwargs.get('single', True)
         try:
             if single:
                 self.read(cache=False)
@@ -266,7 +271,7 @@ class TangoAttribute(TaurusAttribute):
         else:
             self.__subscription_event.set()
             self.fireEvent(TaurusEventType.Periodic, self.__attr_value)
-            
+
     def read(self, cache=True):
         """ Returns the current value of the attribute.
             if cache is set to True (default) or the attribute has events 
@@ -275,7 +280,7 @@ class TangoAttribute(TaurusAttribute):
         curr_time = time.time()
 
         if cache:
-            dt = (curr_time - self.__attr_timestamp)*1000
+            dt = (curr_time - self.__attr_timestamp) * 1000
             if dt < self.getPollingPeriod():
                 if self.__attr_value is not None:
                     return self.__attr_value
@@ -286,7 +291,7 @@ class TangoAttribute(TaurusAttribute):
             try:
                 dev = self.getParentObj()
                 v = dev.read_attribute(self.getSimpleName())
-                self.__attr_value, self.__attr_err, self.__attr_timestamp = self.decode(v), None, curr_time 
+                self.__attr_value, self.__attr_err, self.__attr_timestamp = self.decode(v), None, curr_time
                 return self.__attr_value
             except PyTango.DevFailed, df:
                 self.__attr_value, self.__attr_err, self.__attr_timestamp = None, df, curr_time
@@ -299,15 +304,15 @@ class TangoAttribute(TaurusAttribute):
                 raise e
         elif self.__subscription_state in (SubscriptionState.Subscribing, SubscriptionState.PendingSubscribe):
             self.__subscription_event.wait()
-            
-    
+
+
         if self.__attr_err is not None:
             raise self.__attr_err
         return self.__attr_value
 
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     # API for listeners
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-    
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
 
     def __fireRegisterEvent(self, listener):
         #fire a first configuration event
@@ -315,11 +320,11 @@ class TangoAttribute(TaurusAttribute):
         #if cfg:
         #    self.fireEvent(TaurusEventType.Config, cfg, listener)
         #else:
-        
+
         #fire a first change event
         try:
             v = self.read()
-            self.fireEvent(TaurusEventType.Change,v, listener)
+            self.fireEvent(TaurusEventType.Change, v, listener)
         except:
             self.fireEvent(TaurusEventType.Error, self.__attr_err, listener)
 
@@ -330,19 +335,19 @@ class TangoAttribute(TaurusAttribute):
             If the listener is already registered nothing happens."""
         cfg = self._getRealConfig()
         cfg.addListener(listener)
-        
+
         listeners = self._listeners
         initial_subscription_state = self.__subscription_state
 
         ret = TaurusAttribute.addListener(self, listener)
         if not ret:
             return ret
-        
+
         assert len(listeners) >= 1
-        
+
         if self.__subscription_state == SubscriptionState.Unsubscribed and len(listeners) == 1:
             self._subscribeEvents()
-        
+
         #if initial_subscription_state == SubscriptionState.Subscribed:
         if len(listeners) > 1 and (initial_subscription_state == SubscriptionState.Subscribed or self.isPollingActive()):
             sm = self.getSerializationMode()
@@ -351,7 +356,7 @@ class TangoAttribute(TaurusAttribute):
             else:
                 self.__fireRegisterEvent((listener,))
         return ret
-        
+
     def removeListener(self, listener):
         """ Remove a TaurusListener from the listeners list. If polling enabled 
             and it is the last element the stop the polling timer.
@@ -360,28 +365,28 @@ class TangoAttribute(TaurusAttribute):
 
         cfg = self._getRealConfig()
         cfg.removeListener(listener)
-        
+
         if not ret:
             return ret
-    
+
         if self.hasListeners():
             return ret
-        
+
         if self.__subscription_state != SubscriptionState.Unsubscribed:
             self._unsubscribeEvents()
-            
+
         return ret
-        
+
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     # API for attribute configuration
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-    
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
 
-    def setConfigEx(self,config):
+    def setConfigEx(self, config):
         self.getParentObj().set_attribute_config([config])
 
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # PyTango event handling (private) 
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-    
+    # PyTango event handling (private)
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
 
     def isUsingEvents(self):
         return self.__subscription_state == SubscriptionState.Subscribed
@@ -392,12 +397,12 @@ class TangoAttribute(TaurusAttribute):
     def _subscribeEvents(self):
         """ Enable subscription to the attribute events. If change events are 
             not supported polling is activated """
-        
-        # We have to register for configuration events before registering for 
-        # change events because when a change event occurs we need to have 
+
+        # We have to register for configuration events before registering for
+        # change events because when a change event occurs we need to have
         # configuration info in order to know how to decode the value
         self._getRealConfig().addListener(self)
-        
+
 
         self.trace("Subscribing to change events...")
 
@@ -417,17 +422,17 @@ class TangoAttribute(TaurusAttribute):
             self.__chg_evt_id = dev.subscribe_event(self.getSimpleName(),
                                                   PyTango.EventType.CHANGE_EVENT,
                                                   self, [])
-            
+
         except:
             self.__subscription_state = SubscriptionState.PendingSubscribe
             self._activatePolling()
             self.__chg_evt_id = dev.subscribe_event(self.getSimpleName(),
                                                   PyTango.EventType.CHANGE_EVENT,
                                                   self, [], True)
-    
+
     def _unsubscribeEvents(self):
         # Careful in this method: This is intended to be executed in the cleanUp
-        # so we should not access external objects from the factory, like the 
+        # so we should not access external objects from the factory, like the
         # parent object
         self._getRealConfig().removeListener(self)
         if not self.__chg_evt_id is None and not self._dev_hw_obj is None:
@@ -445,11 +450,11 @@ class TangoAttribute(TaurusAttribute):
                     self.trace(str(df))
         self._deactivatePolling()
         self.__subscription_state = SubscriptionState.Unsubscribed
-    
+
     def push_event(self, event):
         """Method invoked by the PyTango layer when a change event occurs.
            Default implementation propagates the event to all listeners."""
-        
+
         curr_time = time.time()
         manager = Manager()
         sm = self.getSerializationMode()
@@ -469,6 +474,7 @@ class TangoAttribute(TaurusAttribute):
         elif event.errors[0].reason in EVENT_TO_POLLING_EXCEPTIONS:
             if self.isPollingActive():
                 return
+            self.info("Activating polling. Reason: %s", event.errors[0].reason)
             self.__subscription_state = SubscriptionState.PendingSubscribe
             self._activatePolling()
         else:
@@ -500,12 +506,12 @@ class TangoAttributeEventListener(EventListener):
     Note: Since this class stores for each event value the last timestamp when
     it occured, it should only be used for events for which the event value
     domain (possible values) is limited and well known (ex: an enum)"""
-    
+
     def __init__(self, attr):
         EventListener.__init__(self)
         self.attr = attr
         attr.addListener(self)
-        
+
     def eventReceived(self, s, t, v):
         if t not in (TaurusEventType.Change, TaurusEventType.Periodic):
             return
@@ -517,9 +523,9 @@ def test1():
     import numpy
     from taurus import Attribute
     a = Attribute('sys/tg_test/1/ulong64_scalar')
-    
+
     a.write(numpy.uint64(88))
 
 if __name__ == "__main__":
     test1()
-    
+
diff --git a/lib/taurus/core/taurusconfiguration.py b/lib/taurus/core/taurusconfiguration.py
index e2a28c4..472506a 100644
--- a/lib/taurus/core/taurusconfiguration.py
+++ b/lib/taurus/core/taurusconfiguration.py
@@ -49,6 +49,9 @@ class TaurusConfigurationProxy(object):
 
     def __getattr__(self, name):
         return getattr(self.__parent._getRealConfig(), name)
+    
+    def getRealConfigClass(self):
+        return self.__parent._getRealConfig().__class__
 
 
 class TaurusConfiguration(TaurusModel):
diff --git a/lib/taurus/core/taurushelper.py b/lib/taurus/core/taurushelper.py
index baaa86a..9aa55a8 100644
--- a/lib/taurus/core/taurushelper.py
+++ b/lib/taurus/core/taurushelper.py
@@ -3,21 +3,21 @@
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
@@ -32,40 +32,41 @@ __all__ = ['check_dependencies', 'log_dependencies', 'getSchemeFromName',
            'setLogLevel', 'setLogFormat', 'getLogLevel', 'getLogFormat',
            'resetLogLevel', 'resetLogFormat',
            'enableLogOutput', 'disableLogOutput',
-           'log', 'trace', 'debug', 'info', 'warning', 'error', 'critical',
-           'changeDefaultPollingPeriod']
+           'log', 'trace', 'debug', 'info', 'warning', 'error', 'fatal',
+           'critical', 'changeDefaultPollingPeriod']
 
 __docformat__ = "restructuredtext"
 
 import sys
 
+
 def __translate_version_str2int(version_str):
     """Translates a version string in format x[.y[.z[...]]] into a 000000 number"""
     import math
     parts = version_str.split('.')
     i, v, l = 0, 0, len(parts)
     if not l: return v
-    while i<3:
+    while i < 3:
         try:
-            v += int(parts[i])*int(math.pow(10,(2-i)*2))
+            v += int(parts[i]) * int(math.pow(10, (2 - i) * 2))
             l -= 1
             i += 1
-        except ValueError,ve:
+        except ValueError, ve:
             return v
         if not l: return v
     return v
-    
+
     try:
-        v += 10000*int(parts[0])
+        v += 10000 * int(parts[0])
         l -= 1
-    except ValueError,ve:
+    except ValueError, ve:
         return v
     if not l: return v
-    
+
     try:
-        v += 100*int(parts[1])
+        v += 100 * int(parts[1])
         l -= 1
-    except ValueError,ve:
+    except ValueError, ve:
         return v
     if not l: return v
 
@@ -77,7 +78,7 @@ def __translate_version_str2int(version_str):
     if not l: return v
 
 def __get_python_version():
-    return '.'.join(map(str,sys.version_info[:3]))
+    return '.'.join(map(str, sys.version_info[:3]))
 
 def __get_python_version_number():
     pyver_str = __get_python_version()
@@ -162,13 +163,13 @@ def __get_spyderlib_version_number():
     spyderlibver_str = __get_spyderlib_version()
     if spyderlibver_str is None: return None
     return __translate_version_str2int(spyderlibver_str)
-    
+
 def __w(msg):
     sys.stdout.write(msg)
     sys.stdout.flush()
 
 def __wn(msg):
-    __w(msg+'\n')
+    __w(msg + '\n')
 
 def check_dependencies():
     for msg in _check_dependencies(forlog=False):
@@ -185,34 +186,34 @@ def log_dependencies():
 
 def _check_dependencies(forlog=False):
     """Checks for the required and optional packages of taurus"""
-    
+
     if forlog:
         MSG = { 'OK' : '[OK]', 'ERR' : '[ERROR]', 'WARN' : '[WARNING]' }
     else:
-        MSG = { 
+        MSG = {
             'OK'   : "[\033[0;32mOK\033[0m]",
             'ERR'  : "[\033[0;31mERROR\033[0m]",
             'WARN' : "[\033[0;33mWARNING\033[0m]" }
-        
+
     core_requirements = {
-    #    module       minimum  recommended 
+    #    module       minimum  recommended
         "Python"   : ("2.6.0", "2.6.0"),
         "PyTango"  : ("7.1.0", "7.1.0"),
     }
-    
+
     widget_requirements = {
-    #    module       minimum  recommended 
+    #    module       minimum  recommended
         "PyQt"     : ("4.4.0", "4.4.0"),
         "PyQwt"     : ("5.2.0", "5.2.0"),
     }
 
     widget_optional_requirements = {
-    #    module       minimum  recommended 
+    #    module       minimum  recommended
         "Qub"       : ("1.0.0", "1.0.0"),
         "qtcontrols": ("1.0.0", "1.0.0"),
         "spyderlib" : ("2.0.0", "2.0.0"),
     }
-    
+
     yield -1, "Checking required dependencies of taurus.core..."
     r = core_requirements
 
@@ -222,20 +223,20 @@ def _check_dependencies(forlog=False):
     if currPython is None:
         yield 2, "{msg} {ERR} (Not found])".format(msg=m, **MSG)
     elif currPython < minPython:
-        yield 1, "{msg} {WARN} (Found {fnd}. Recommended >={rec})".format(msg=m, fnd=currPythonStr, rec=r['Python'][1],**MSG)
+        yield 1, "{msg} {WARN} (Found {fnd}. Recommended >={rec})".format(msg=m, fnd=currPythonStr, rec=r['Python'][1], **MSG)
     else:
         yield 0, "{msg} {OK} (Found {fnd})".format(msg=m, fnd=currPythonStr, **MSG)
 
     m = "Checking for PyTango >=%s..." % r["PyTango"][0]
     minPyTango, recPyTango = map(__translate_version_str2int, r["PyTango"])
-    currPyTango, currPyTangoStr = __get_pytango_version_number(),__get_pytango_version()
+    currPyTango, currPyTangoStr = __get_pytango_version_number(), __get_pytango_version()
     if currPyTango is None:
         yield 2, "{msg} {ERR} (Not found])".format(msg=m, **MSG)
     elif currPyTango < minPyTango:
-        yield 1, "{msg} {WARN} (Found {fnd}. Recommended >={rec})".format(msg=m, fnd=currPyTangoStr, rec=r['PyTango'][1],**MSG)
+        yield 1, "{msg} {WARN} (Found {fnd}. Recommended >={rec})".format(msg=m, fnd=currPyTangoStr, rec=r['PyTango'][1], **MSG)
     else:
-        yield 0, "{msg} {OK} (Found {fnd})".format(msg=m, fnd=currPyTangoStr,**MSG)
-    
+        yield 0, "{msg} {OK} (Found {fnd})".format(msg=m, fnd=currPyTangoStr, **MSG)
+
     yield -1, "Checking required dependencies of taurus.qt..."
     r = widget_requirements
 
@@ -245,9 +246,9 @@ def _check_dependencies(forlog=False):
     if currPyQt is None:
         yield 2, "{msg} {ERR} (Not found])".format(msg=m, **MSG)
     elif currPyQt < minPyQt:
-        yield 1, "{msg} {WARN} (Found {fnd}. Recommended >={rec})".format(msg=m, fnd=currPyQtStr, rec=r['PyQt'][1],**MSG)
+        yield 1, "{msg} {WARN} (Found {fnd}. Recommended >={rec})".format(msg=m, fnd=currPyQtStr, rec=r['PyQt'][1], **MSG)
     else:
-        yield 0, "{msg} {OK} (Found {fnd})".format(msg=m, fnd=currPyQtStr,**MSG)
+        yield 0, "{msg} {OK} (Found {fnd})".format(msg=m, fnd=currPyQtStr, **MSG)
 
     m = "Checking for PyQwt >=%s..." % r["PyQwt"][0]
     minPyQwt, recPyQwt = map(__translate_version_str2int, r["PyQwt"])
@@ -255,22 +256,22 @@ def _check_dependencies(forlog=False):
     if currPyQwt is None:
         yield 1, "{msg} {ERR} (Not found])".format(msg=m, **MSG)
     elif currPyQwt < minPyQwt:
-        yield 1, "{msg} {WARN} (Found {fnd}. Recommended >={rec})".format(msg=m, fnd=currPyQwtStr, rec=r['PyQwt'][1],**MSG)
+        yield 1, "{msg} {WARN} (Found {fnd}. Recommended >={rec})".format(msg=m, fnd=currPyQwtStr, rec=r['PyQwt'][1], **MSG)
     else:
-        yield 0, "{msg} {OK} (Found {fnd})".format(msg=m, fnd=currPyQwtStr,**MSG)
+        yield 0, "{msg} {OK} (Found {fnd})".format(msg=m, fnd=currPyQwtStr, **MSG)
 
     yield -1, "Checking OPTIONAL dependencies of taurus.qt..."
     r = widget_optional_requirements
-    
+
     m = "Checking for Qub >=%s..." % r["Qub"][0]
     minQub, recQub = map(__translate_version_str2int, r["Qub"])
     currQub, currQubStr = __get_qub_version_number(), __get_qub_version()
     if currQub is None:
         yield 1, "{msg} {WARN} (Not found])".format(msg=m, **MSG)
     elif currQub < minQub:
-        yield 1, "{msg} {WARN} (Found {fnd}. Recommended >={rec})".format(msg=m, fnd=currQubStr, rec=r['Qub'][1],**MSG)
+        yield 1, "{msg} {WARN} (Found {fnd}. Recommended >={rec})".format(msg=m, fnd=currQubStr, rec=r['Qub'][1], **MSG)
     else:
-        yield 0, "{msg} {OK} (Found {fnd})".format(msg=m, fnd=currQubStr,**MSG)
+        yield 0, "{msg} {OK} (Found {fnd})".format(msg=m, fnd=currQubStr, **MSG)
 
     m = "Checking for spyderlib >=%s..." % r["spyderlib"][0]
     minspyderlib, recspyderlib = map(__translate_version_str2int, r["spyderlib"])
@@ -278,24 +279,24 @@ def _check_dependencies(forlog=False):
     if currspyderlib is None:
         yield 1, "{msg} {WARN} (Not found])".format(msg=m, **MSG)
     elif currspyderlib < minspyderlib:
-        yield 1, "{msg} {WARN} (Found {fnd}. Recommended >={rec})".format(msg=m, fnd=currspyderlibStr, rec=r['spyderlib'][1],**MSG)
+        yield 1, "{msg} {WARN} (Found {fnd}. Recommended >={rec})".format(msg=m, fnd=currspyderlibStr, rec=r['spyderlib'][1], **MSG)
     else:
-        yield 0, "{msg} {OK} (Found {fnd})".format(msg=m, fnd=currspyderlibStr,**MSG)
-    
+        yield 0, "{msg} {OK} (Found {fnd})".format(msg=m, fnd=currspyderlibStr, **MSG)
+
     m = "Checking for qtcontrols >=%s..." % r["qtcontrols"][0]
     minqtcontrols, recqtcontrols = map(__translate_version_str2int, r["qtcontrols"])
     currqtcontrols, currqtcontrolsStr = __get_qtcontrols_version_number(), __get_qtcontrols_version()
     if currqtcontrols is None:
         yield 1, "{msg} {WARN} (Not found])".format(msg=m, **MSG)
     elif currqtcontrols < minqtcontrols:
-        yield 1, "{msg} {WARN} (Found {fnd}. Recommended >={rec})".format(msg=m, fnd=currqtcontrolsStr, rec=r['qtcontrols'][1],**MSG)
+        yield 1, "{msg} {WARN} (Found {fnd}. Recommended >={rec})".format(msg=m, fnd=currqtcontrolsStr, rec=r['qtcontrols'][1], **MSG)
     else:
-        yield 0, "{msg} {OK} (Found {fnd})".format(msg=m, fnd=currqtcontrolsStr,**MSG)
+        yield 0, "{msg} {OK} (Found {fnd})".format(msg=m, fnd=currqtcontrolsStr, **MSG)
 
 
 def getSchemeFromName(name):
     if name is None: return None
-    i=name.find('://')
+    i = name.find('://')
     if i == -1: return None
     return name[:i]
 
@@ -383,7 +384,7 @@ def Attribute(dev_or_attr_name, attr_name=None):
     :return: a taurus attribute
     :rtype: :class:`taurus.core.taurusattribute.TaurusAttribute`"""
     import types
-    
+
     if attr_name is None:
         return Factory(scheme=getSchemeFromName(dev_or_attr_name)).getAttribute(dev_or_attr_name)
     else:
@@ -462,13 +463,14 @@ def Object(klass, name):
 
 from taurus.core.util import log as __log_mod
 
-Logger   = __log_mod.Logger
+Logger = __log_mod.Logger
 Critical = Logger.Critical
-Error    = Logger.Error
-Warning  = Logger.Warning
-Info     = Logger.Info
-Debug    = Logger.Debug
-Trace    = Logger.Trace
+Fatal = Logger.Fatal
+Error = Logger.Error
+Warning = Logger.Warning
+Info = Logger.Info
+Debug = Logger.Debug
+Trace = Logger.Trace
 
 setLogLevel = Logger.setLogLevel
 setLogFormat = Logger.setLogFormat
@@ -486,10 +488,11 @@ debug = __log_mod.debug
 info = __log_mod.info
 warning = __log_mod.warning
 error = __log_mod.error
+fatal = __log_mod.fatal
 critical = __log_mod.critical
 
 def changeDefaultPollingPeriod(period):
     Manager().changeDefaultPollingPeriod(period)
 
 #del __log_mod
-#del __translate_version_str2int
\ No newline at end of file
+#del __translate_version_str2int
diff --git a/lib/taurus/core/util/colors.py b/lib/taurus/core/util/colors.py
old mode 100755
new mode 100644
diff --git a/lib/taurus/core/util/containers.py b/lib/taurus/core/util/containers.py
index e1d1901..0fa00be 100644
--- a/lib/taurus/core/util/containers.py
+++ b/lib/taurus/core/util/containers.py
@@ -1215,4 +1215,7 @@ class ArrayBuffer(object):
         ''' 
         return self.maxSize() - self.contentsSize()
 
-    
+def chunks(l, n):
+    '''Generator which yields successive n-sized chunks from l'''
+    for i in xrange(0, len(l), n):
+        yield l[i:i+n]
diff --git a/lib/taurus/core/util/enumeration.py b/lib/taurus/core/util/enumeration.py
index 5a9ddf9..736c853 100644
--- a/lib/taurus/core/util/enumeration.py
+++ b/lib/taurus/core/util/enumeration.py
@@ -3,21 +3,21 @@
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
@@ -80,7 +80,7 @@ class Enumeration(object):
         >>>print Volkswagen.whatis(homer_car)
         'PASSAT'
     """
-    
+
     def __init__(self, name, enumList, flaggable=False, no_doc=False):
         self._name = name
         lookup = { }
@@ -121,71 +121,71 @@ class Enumeration(object):
         self.reverseLookup = reverseLookup
         if not no_doc:
             self.__doc_enum()
-   
+
     def _generateUniqueId(self):
         if self._flaggable:
-            n = 2**self._uniqueId
+            n = 2 ** self._uniqueId
         else:
             while self._uniqueId in self._uniqueValues:
                 self._uniqueId += 1
             n = self._uniqueId
         self._uniqueId += 1
         return n
-    
+
     def __getitem__(self, i):
         if isinstance(i, (int, long)):
             return self.whatis(i)
         elif isinstance(i, (str, unicode)):
             return self.lookup[i]
-    
+
     def __getattr__(self, attr):
         if not self.has_key(attr):
             raise AttributeError
         return self.lookup[attr]
-    
+
     def __doc_enum(self):
         rl = self.reverseLookup
         keys = rl.keys()
         keys.sort()
-        values = "\n".join([ "    - {0} ({1})".format(rl[k],k) for k in keys ])
+        values = "\n".join([ "    - {0} ({1})".format(rl[k], k) for k in keys ])
         self.__doc__ = self._name + " enumeration. " + \
                        "Possible values are:\n\n" + values
-    
+
     def __str__(self):
         rl = self.reverseLookup
         keys = rl.keys()
         keys.sort()
         values = ", ".join([ rl[k] for k in keys ])
         return self._name + "(" + values + ")"
-    
+
     def __repr__(self):
         rl = self.reverseLookup
         keys = rl.keys()
         keys.sort()
         values = [ rl[k] for k in keys ]
         return "Enumeration('" + self._name + "', " + str(values) + ")"
-    
+
     def has_key(self, key):
         """Determines if the enumeration contains the given key
         :param key: the key
         :type  key: str
         :return: True if the key is in the enumeration or False otherswise
         :rtype: bool"""
-        return self.lookup.has_key(key)
-    
+        return key in self.lookup
+
     def keys(self):
         """Returns an iterable containning the valid enumeration keys
         :return: an interable containning the valid enumeration keys
         :rtype: iter<str>"""
         return self.lookup.keys()
-    
+
     def whatis(self, value):
         """Returns a string representation of the value in the enumeration.
         :param value: a valid enumeration element
         :return: a string representation of the given enumeration element
         :rtype: str"""
         return self.reverseLookup[value]
-    
+
     def get(self, i):
         """Returns the element for the given key/value"""
         return self[i]
diff --git a/lib/taurus/core/util/log.py b/lib/taurus/core/util/log.py
index 1dbd2bd..56b3340 100644
--- a/lib/taurus/core/util/log.py
+++ b/lib/taurus/core/util/log.py
@@ -29,7 +29,8 @@
 __all__ = ["LogIt", "TraceIt", "DebugIt", "InfoIt", "WarnIt", "ErrorIt",
            "CriticalIt", "MemoryLogHandler", "LogExceptHook", "Logger",
            "LogFilter",
-           "_log", "trace", "debug", "info", "warning", "error", "critical"]
+           "_log", "trace", "debug", "info", "warning", "error", "fatal",
+           "critical"]
 
 __docformat__ = "restructuredtext"
 
@@ -360,6 +361,9 @@ class Logger(Object):
     #: Critical message level (constant)
     Critical = logging.CRITICAL
 
+    #: Fatal message level (constant)
+    Fatal = logging.FATAL
+
     #: Error message level (constant)
     Error    = logging.ERROR
 
@@ -765,6 +769,16 @@ class Logger(Object):
         """
         self.log_obj.error(msg, *args, **kw)
 
+    def fatal(self, msg, *args, **kw):
+        """Record a fatal message in this object's logger. Accepted *args* and
+           *kwargs* are the same as :meth:`logging.Logger.fatal`.
+
+           :param msg: (str) the message to be recorded
+           :param args: list of arguments
+           :param kw: list of keyword arguments
+        """
+        self.log_obj.fatal(msg, *args, **kw)
+
     def critical(self, msg, *args, **kw):
         """Record a critical message in this object's logger. Accepted *args* and
            *kwargs* are the same as :meth:`logging.Logger.critical`.
@@ -873,5 +887,8 @@ def warning(msg, *args, **kw):
 def error(msg, *args, **kw):
     return __getrootlogger().error(msg, *args, **kw)
 
+def fatal(msg, *args, **kw):
+    return __getrootlogger().fatal(msg, *args, **kw)
+
 def critical(msg, *args, **kw):
     return __getrootlogger().critical(msg, *args, **kw)
diff --git a/lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py b/lib/taurus/external/__init__.py
similarity index 93%
copy from lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py
copy to lib/taurus/external/__init__.py
index 810fb34..c050b0b 100644
--- a/lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py
+++ b/lib/taurus/external/__init__.py
@@ -1,24 +1,24 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
-#############################################################################
+##############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
-#############################################################################
+##############################################################################
diff --git a/lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh b/lib/taurus/external/argparse/__init__.py
old mode 100755
new mode 100644
similarity index 72%
copy from lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh
copy to lib/taurus/external/argparse/__init__.py
index 0180baf..e64d5f1
--- a/lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh
+++ b/lib/taurus/external/argparse/__init__.py
@@ -1,32 +1,36 @@
-#!/bin/bash
+# -*- coding: utf-8 -*-
 
 ##############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
 ##############################################################################
 
-taurusuic4 -x ui/TaurusMotorH.ui -o ui_taurusmotorh.py
-taurusuic4 -x ui/TaurusMotorH2.ui -o ui_taurusmotorh2.py
-taurusuic4 -x ui/TaurusMotorV.ui -o ui_taurusmotorv.py
-taurusuic4 -x ui/TaurusMotorV2.ui -o ui_taurusmotorv2.py
+from __future__ import absolute_import
 
-taurusuic4 -x ui/PoolMotorSlim.ui -o ui_poolmotorslim.py
-pyuic4 -x ui/poolioregisterbuttons.ui -o ui_poolioregisterbuttons.py
+try:
+    # argparse from python 2.7 or from argparse installed package?
+    from argparse import *
+except ImportError:
+    # argparse from local import
+    import warnings
+    warnings.warn("argparse not available. Using local argparse", ImportWarning)
+    from .argparse_local import *
+    del warnings
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh b/lib/taurus/external/enum/__init__.py
old mode 100755
new mode 100644
similarity index 69%
copy from lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh
copy to lib/taurus/external/enum/__init__.py
index 0180baf..911320c
--- a/lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh
+++ b/lib/taurus/external/enum/__init__.py
@@ -1,32 +1,41 @@
-#!/bin/bash
+# -*- coding: utf-8 -*-
 
 ##############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
 ##############################################################################
 
-taurusuic4 -x ui/TaurusMotorH.ui -o ui_taurusmotorh.py
-taurusuic4 -x ui/TaurusMotorH2.ui -o ui_taurusmotorh2.py
-taurusuic4 -x ui/TaurusMotorV.ui -o ui_taurusmotorv.py
-taurusuic4 -x ui/TaurusMotorV2.ui -o ui_taurusmotorv2.py
+from __future__ import absolute_import
 
-taurusuic4 -x ui/PoolMotorSlim.ui -o ui_poolmotorslim.py
-pyuic4 -x ui/poolioregisterbuttons.ui -o ui_poolioregisterbuttons.py
+try:
+    # enum from python 3.4 or from enum34 installed package?
+    from enum import *
+except ImportError:
+    # enum from local import
+    import os
+    import sys
+    import warnings
+    warnings.warn("enum not available. Using local enum", ImportWarning)
+    sys.path.append(os.path.dirname(__file__))
+    from enum import *
+    del warnings
+    del sys
+    del os
diff --git a/lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh b/lib/taurus/external/ordereddict/__init__.py
old mode 100755
new mode 100644
similarity index 66%
copy from lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh
copy to lib/taurus/external/ordereddict/__init__.py
index 0180baf..a2a399a
--- a/lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh
+++ b/lib/taurus/external/ordereddict/__init__.py
@@ -1,32 +1,42 @@
-#!/bin/bash
+# -*- coding: utf-8 -*-
 
 ##############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
 ##############################################################################
 
-taurusuic4 -x ui/TaurusMotorH.ui -o ui_taurusmotorh.py
-taurusuic4 -x ui/TaurusMotorH2.ui -o ui_taurusmotorh2.py
-taurusuic4 -x ui/TaurusMotorV.ui -o ui_taurusmotorv.py
-taurusuic4 -x ui/TaurusMotorV2.ui -o ui_taurusmotorv2.py
+from __future__ import absolute_import
 
-taurusuic4 -x ui/PoolMotorSlim.ui -o ui_poolmotorslim.py
-pyuic4 -x ui/poolioregisterbuttons.ui -o ui_poolioregisterbuttons.py
+try:
+    # ordereddict from python 2.7 or from ordereddict installed package?
+    from ordereddict import *
+except ImportError:
+    # ordereddict from local import
+    import os
+    import sys
+    import warnings
+    warnings.warn("ordereddict not available. Using local ordereddict",
+                  ImportWarning)
+    sys.path.append(os.path.dirname(__file__))
+    from ordereddict import *
+    del warnings
+    del sys
+    del os
diff --git a/lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh b/lib/taurus/external/pint/__init__.py
old mode 100755
new mode 100644
similarity index 69%
copy from lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh
copy to lib/taurus/external/pint/__init__.py
index 0180baf..fc86581
--- a/lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh
+++ b/lib/taurus/external/pint/__init__.py
@@ -1,32 +1,44 @@
-#!/bin/bash
+# -*- coding: utf-8 -*-
 
 ##############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
 ##############################################################################
 
-taurusuic4 -x ui/TaurusMotorH.ui -o ui_taurusmotorh.py
-taurusuic4 -x ui/TaurusMotorH2.ui -o ui_taurusmotorh2.py
-taurusuic4 -x ui/TaurusMotorV.ui -o ui_taurusmotorv.py
-taurusuic4 -x ui/TaurusMotorV2.ui -o ui_taurusmotorv2.py
+from __future__ import absolute_import
+
+try:
+    from pint import *
+except ImportError:
+    # pint from local import
+    import os
+    import sys
+    import warnings
+    warnings.warn("pint not available. Using local pint", ImportWarning)
+    sys.path.append(os.path.dirname(__file__))
+    from pint import *
+    del warnings
+    del sys
+    del os
 
-taurusuic4 -x ui/PoolMotorSlim.ui -o ui_poolmotorslim.py
-pyuic4 -x ui/poolioregisterbuttons.ui -o ui_poolioregisterbuttons.py
+UR = UnitRegistry()
+UR.default_format = '~P'
+Quantity = UR.Quantity
diff --git a/scripts/sequencer b/lib/taurus/external/qt/Qt.py
old mode 100755
new mode 100644
similarity index 86%
rename from scripts/sequencer
rename to lib/taurus/external/qt/Qt.py
index 73a4652..29311cb
--- a/scripts/sequencer
+++ b/lib/taurus/external/qt/Qt.py
@@ -1,27 +1,29 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
-#############################################################################
+##############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
-#############################################################################
+##############################################################################
+
+"""This module exposes the Qt module"""
 
-from taurus.qt.qtgui.extra_macroexecutor.sequenceeditor import main
-main()
\ No newline at end of file
+from .QtCore import *
+from .QtGui import *
diff --git a/lib/taurus/qt/Qt.py b/lib/taurus/external/qt/QtCore.py
similarity index 57%
copy from lib/taurus/qt/Qt.py
copy to lib/taurus/external/qt/QtCore.py
index 556173d..c4e7e5e 100644
--- a/lib/taurus/qt/Qt.py
+++ b/lib/taurus/external/qt/QtCore.py
@@ -1,36 +1,39 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
-#############################################################################
+##############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
-#############################################################################
+##############################################################################
+
+"""This module exposes QtCore module"""
 
-"""This module exposes PyQt4.Qt module"""
+from taurus.external.qt import getQtName
+
+__backend = getQtName()
 
-from taurusqtoptions import QT_API, QT_API_PYQT, QT_API_PYSIDE
 
 def __to_qvariant_1(pyobj=None):
     """Properly converts a python object into a proper QVariant according to
-    the PySide or PyQt4 API version in use
-    
+    the PySide or PyQt API version in use
+
     :param pyobj: object to be converted
     :return: A proper QVariant"""
     from PyQt4.QtCore import QVariant
@@ -38,10 +41,11 @@ def __to_qvariant_1(pyobj=None):
         return QVariant()  # PyQt 4.4 doesn't accept QVariant(None)
     return QVariant(pyobj)
 
+
 def __from_qvariant_1(qobj=None, convfunc=None):
     """Properly converts a QVariant/QVariant equivalent to a python object
-    according to the PySide or PyQt4 API version in use
-    
+    according to the PySide or PyQt API version in use
+
     :param qobj: object to be converted
     :param convfunc:
         conversion function. Not used if QVariant is not available.
@@ -63,22 +67,25 @@ def __from_qvariant_1(qobj=None, convfunc=None):
             return qobj.toDouble()[0]
     elif isinstance(convfunc, (str, unicode)):
         return getattr(qobj, convfunc)()
-    
+
+
 def __QVariant_2(pyobj=None):
     return pyobj
-    
+
+
 def __to_qvariant_2(pyobj=None):
     """Properly converts a python object into a proper QVariant according to
     the PySide or PyQt4 API version in use
-    
+
     :param pyobj: object to be converted
     :return: A proper QVariant"""
     return pyobj
 
+
 def __from_qvariant_2(qobj=None, convfunc=None):
     """Properly converts a QVariant/QVariant equivalent to a python object
     according to the PySide or PyQt4 API version in use
-    
+
     :param qobj: object to be converted
     :param convfunc:
         conversion function. Not used if QVariant is not available.
@@ -89,62 +96,104 @@ def __from_qvariant_2(qobj=None, convfunc=None):
     :return: A proper python object"""
     return qobj
 
-#def __QString_2(pyobj=""):
-#    return str(pyobj)
 
 __QString_2 = str
 
-#def __QStringList_2(pyobj=None):
-#    if pyobj is None:
-#        return list()
-#    if isinstance(pyobj, (str, unicode)):
-#        return [pyobj]
-#    return list(pyobj)
-
 __QStringList_2 = list
 
-# Now peform the imports.
-if QT_API == QT_API_PYQT:
-    import PyQt4.Qt
-    import PyQt4.QtCore
-    from QtCore import *  #required to import tweaks done in taurus.qt.QtCore
-    from PyQt4.Qt import *
-    from PyQt4.Qt import Qt
-    
-    import sip
+
+if __backend == 'PyQt4':
+    from PyQt4 import QtCore as __QtCore
+
+    # Alias PyQt-specific functions for PySide compatibility.
+    if hasattr(__QtCore, "pyqtSignal"):
+        Signal = __QtCore.pyqtSignal
+    if hasattr(__QtCore, "pyqtSlot"):
+        Slot = __QtCore.pyqtSlot
+    else: #implement dummy pyqtSlot decorator for PyQt<4.6
+        class DummyPyqtSlot(object):
+            def __init__(self, *a, **kw):
+                pass
+            def __call__(self, f):
+                return f
+        Slot = pyqtSlot = DummyPyqtSlot
+    if hasattr(__QtCore, "pyqtProperty"):
+        Property = __QtCore.pyqtProperty
+
     try:
-        PYQT_QVARIANT_API_1 = sip.getapi('QVariant') == 1
+        __api_version__ = __QtCore.QT_VERSION_STR
     except AttributeError:
-        # PyQt <v4.6
+        pass
+
+    try:
+        import sip
+        PYQT_QVARIANT_API_1 = sip.getapi('QVariant') < 2
+        PYQT_QSTRING_API_1 = sip.getapi('QString') < 2
+    except (ImportError, AttributeError):
         PYQT_QVARIANT_API_1 = True
-    
+        PYQT_QSTRING_API_1 = True
+
     if PYQT_QVARIANT_API_1:
         to_qvariant = __to_qvariant_1
         from_qvariant = __from_qvariant_1
     else:
-        PyQt4.QtCore.QVariant = PyQt4.Qt.QVariant = QVariant = __QVariant_2
+        __QtCore.QVariant = QVariant = __QVariant_2
         to_qvariant = __to_qvariant_2
         from_qvariant = __from_qvariant_2
-    
+
+    if not PYQT_QSTRING_API_1:
+        __QtCore.QString = QString = __QString_2
+        __QtCore.QStringList = QStringList = __QStringList_2
+
+    from PyQt4.QtCore import *
+
+elif __backend == 'PyQt5':
+    from PyQt5 import QtCore as __QtCore
+
+    # Alias PyQt-specific functions for PySide compatibility.
+    if hasattr(__QtCore, "pyqtSignal"):
+        Signal = __QtCore.pyqtSignal
+    if hasattr(__QtCore, "pyqtSlot"):
+        Slot = __QtCore.pyqtSlot
+    if hasattr(__QtCore, "pyqtProperty"):
+        Property = __QtCore.pyqtProperty
+
     try:
-        PYQT_QSTRING_API_1 = sip.getapi('QString') == 1
+        __api_version__ = __QtCore.QT_VERSION_STR
     except AttributeError:
-        # PyQt <v4.6
-        PYQT_QSTRING_API_1 = True
-    
-    if not PYQT_QSTRING_API_1:
-        PyQt4.QtCore.QString = PyQt4.Qt.QString = QString = __QString_2
-        PyQt4.QtCore.QStringList = PyQt4.Qt.QStringList = QStringList = __QStringList_2
-    
-elif QT_API == QT_API_PYSIDE:
-    #from PySide.Qt import *
-    from QtCore import *
-    from QtGui import *
+        pass
+
+    __QtCore.QVariant = QVariant = __QVariant_2
+    to_qvariant = __to_qvariant_2
+    from_qvariant = __from_qvariant_2
+    __QtCore.QString = QString = __QString_2
+    __QtCore.QStringList = QStringList = __QStringList_2
+
+    from PyQt5.QtCore import *
 
+elif __backend == 'PySide':
+    from PySide import QtCore as __QtCore
+    from PySide.QtCore import *
+    __api_version__ = __QtCore.QT_VERSION_STR
 
-    QVariant = __QVariant_2
+    __QtCore.QVariant = QVariant = __QVariant_2
     to_qvariant = __to_qvariant_2
     from_qvariant = __from_qvariant_2
-    QString = __QString_2
-    QStringList = __QStringList_2
+    __QtCore.QString = QString = __QString_2
+    __QtCore.QStringList = QStringList = __QStringList_2
+
+    #a dummy pyqtsignature decorator
+    # CAUTION this totally nulifies the pupose of decorating with pyqtSignature
+    # todo: do a proper implementation of pyqtsignature
+    def pyqtSignature(f):
+        return f
+
+    # Alias PySide functions for PyQt compatibility.
+    if hasattr(__QtCore, "Signal"):
+        pyqtSignal = Signal
+    if hasattr(__QtCore, "Slot"):
+        pyqtSlot = Slot
+    if hasattr(__QtCore, "Property"):
+        pyqtProperty = Property
 
+del getQtName
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py b/lib/taurus/external/qt/QtDesigner.py
similarity index 81%
copy from lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
copy to lib/taurus/external/qt/QtDesigner.py
index 17d48a1..a1f50c7 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
+++ b/lib/taurus/external/qt/QtDesigner.py
@@ -1,30 +1,32 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
-#############################################################################
+##############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
-#############################################################################
+##############################################################################
+
+"""This module exposes QtDesigner module"""
+
+from taurus.external.qt import _updateQtSubModule
 
-"""
-__init__.py: 
-"""
+_updateQtSubModule(globals(), "QtDesigner")
 
-from sequenceeditor import TaurusSequencer, TaurusSequencerWidget, main
\ No newline at end of file
+del _updateQtSubModule
diff --git a/lib/taurus/core/tango/sardana/__init__.py b/lib/taurus/external/qt/QtGui.py
similarity index 74%
rename from lib/taurus/core/tango/sardana/__init__.py
rename to lib/taurus/external/qt/QtGui.py
index 576200d..3a380b1 100644
--- a/lib/taurus/core/tango/sardana/__init__.py
+++ b/lib/taurus/external/qt/QtGui.py
@@ -1,37 +1,37 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
-#############################################################################
+##############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
-#############################################################################
+##############################################################################
+
+"""This module exposes QtGui module"""
+
+from taurus.external.qt import getQtName, _updateQtSubModule
 
-"""The sardana package. It contains specific part of sardana"""
+__backend = getQtName()
 
-__docformat__ = 'restructuredtext'
+_updateQtSubModule(globals(), "QtGui")
 
-from .sardana import *
+if __backend == 'PyQt5':
+    _updateQtSubModule(globals(), "QtWidgets")
 
-def registerExtensions():
-    import pool
-    import macroserver
-    
-    pool.registerExtensions()
-    macroserver.registerExtensions()
\ No newline at end of file
+del _updateQtSubModule, getQtName
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py b/lib/taurus/external/qt/QtNetwork.py
similarity index 81%
copy from lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
copy to lib/taurus/external/qt/QtNetwork.py
index 17d48a1..b272f85 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
+++ b/lib/taurus/external/qt/QtNetwork.py
@@ -1,30 +1,32 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
-#############################################################################
+##############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
-#############################################################################
+##############################################################################
+
+"""This module exposes QtNetwork module"""
+
+from taurus.external.qt import _updateQtSubModule
 
-"""
-__init__.py: 
-"""
+_updateQtSubModule(globals(), "QtNetwork")
 
-from sequenceeditor import TaurusSequencer, TaurusSequencerWidget, main
\ No newline at end of file
+del _updateQtSubModule
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py b/lib/taurus/external/qt/QtSvg.py
similarity index 81%
copy from lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
copy to lib/taurus/external/qt/QtSvg.py
index 17d48a1..917f621 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
+++ b/lib/taurus/external/qt/QtSvg.py
@@ -1,30 +1,32 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
-#############################################################################
+##############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
-#############################################################################
+##############################################################################
+
+"""This module exposes QtSvg module"""
+
+from taurus.external.qt import _updateQtSubModule
 
-"""
-__init__.py: 
-"""
+_updateQtSubModule(globals(), "QtSvg")
 
-from sequenceeditor import TaurusSequencer, TaurusSequencerWidget, main
\ No newline at end of file
+del _updateQtSubModule
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py b/lib/taurus/external/qt/QtUiTools.py
similarity index 81%
copy from lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
copy to lib/taurus/external/qt/QtUiTools.py
index 17d48a1..1f42605 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
+++ b/lib/taurus/external/qt/QtUiTools.py
@@ -1,30 +1,32 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
-#############################################################################
+##############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
-#############################################################################
+##############################################################################
+
+"""This module exposes QtUiTools module"""
+
+from taurus.external.qt import _updateQtSubModule
 
-"""
-__init__.py: 
-"""
+_updateQtSubModule(globals(), "QtUiTools")
 
-from sequenceeditor import TaurusSequencer, TaurusSequencerWidget, main
\ No newline at end of file
+del _updateQtSubModule
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py b/lib/taurus/external/qt/QtWebKit.py
similarity index 81%
copy from lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
copy to lib/taurus/external/qt/QtWebKit.py
index 17d48a1..3765429 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
+++ b/lib/taurus/external/qt/QtWebKit.py
@@ -1,30 +1,32 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
-#############################################################################
+##############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
-#############################################################################
+##############################################################################
+
+"""This module exposes QtWebKit module"""
+
+from taurus.external.qt import _updateQtSubModule
 
-"""
-__init__.py: 
-"""
+_updateQtSubModule(globals(), "QtWebKit")
 
-from sequenceeditor import TaurusSequencer, TaurusSequencerWidget, main
\ No newline at end of file
+del _updateQtSubModule
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/__init__.py b/lib/taurus/external/qt/Qwt5.py
similarity index 81%
rename from lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/__init__.py
rename to lib/taurus/external/qt/Qwt5.py
index efc9794..0c58e51 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/__init__.py
+++ b/lib/taurus/external/qt/Qwt5.py
@@ -1,27 +1,32 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
-#############################################################################
+##############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
-#############################################################################
+##############################################################################
+
+"""This module exposes Qwt5 module"""
+
+from taurus.external.qt import _updateQtSubModule
+
+_updateQtSubModule(globals(), "Qwt5")
 
-from favouriteseditor import FavouritesMacrosEditor
-from historyviewer import HistoryMacrosViewer
\ No newline at end of file
+del _updateQtSubModule
diff --git a/lib/taurus/external/qt/__init__.py b/lib/taurus/external/qt/__init__.py
new file mode 100644
index 0000000..721641b
--- /dev/null
+++ b/lib/taurus/external/qt/__init__.py
@@ -0,0 +1,412 @@
+# -*- coding: utf-8 -*-
+
+##############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+##
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+##
+## Taurus 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.
+##
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+##############################################################################
+
+"""This module exposes PyQt4/PyQt5/PySide module"""
+
+__all__ = ["initialize", "getQtName", "getQt", "_updateQtSubModule", "requires"]
+
+
+from taurus import tauruscustomsettings as __config
+from taurus.core.util import log as __log
+
+
+__QT = None
+__QT_NAME = None
+__QT_KNOWN_APIS = "PyQt4", "PyQt5", "PySide"
+__QT_PREFERED_APIS = None
+
+__QT_INIT = False
+__QT_LOG_INIT = False
+__QT_RES_INIT = False
+
+
+def __getPreferedAPIs():
+    return [__config.QT_AUTO_API] + \
+      [api for api in __QT_KNOWN_APIS if api != __config.QT_AUTO_API]
+
+
+def __assertQt(name, qt=None, strict=True):
+    qt = qt or __QT
+    if name is None or qt is None:
+        return
+    qt_name = qt.__name__
+    if qt_name != name:
+        msg = "Cannot use %s because %s already in use" % (name, qt_name)
+        if strict:
+            raise Exception(msg)
+        else:
+            __log.error(msg)
+
+
+def __hasBinding(qt_name):
+    """Safely check for known qt apis without importing submodules"""
+    import imp
+    try:
+        _, pth, _ = imp.find_module(qt_name)
+        imp.find_module('QtCore', pth)
+        imp.find_module('QtGui', pth)
+    except ImportError:
+        return False
+    return True
+
+
+def __import(name):
+    import sys
+    __import__(name)
+    return sys.modules[name]
+
+
+def __importQt(name):
+    return __import(getQtName() + "." + name)
+
+
+def __initializeQtLogging():
+    QtCore = __importQt("QtCore")
+
+    QT_LEVEL_MATCHER = {
+        QtCore.QtDebugMsg:     __log.debug,
+        QtCore.QtWarningMsg:   __log.warning,
+        QtCore.QtCriticalMsg:  __log.critical,
+        QtCore.QtFatalMsg:     __log.fatal,
+        QtCore.QtSystemMsg:    __log.critical,
+    }
+
+    if hasattr(QtCore, "qInstallMessageHandler"):
+        def taurusMessageHandler(msg_type, log_ctx, msg):
+            f = QT_LEVEL_MATCHER.get(msg_type)
+            return f("Qt%s %s.%s[%s]: %a", log_ctx.category, log_ctx.file,
+                     log_ctx.function, log_ctx.line, msg)
+        QtCore.qInstallMessageHandler(taurusMessageHandler)
+    elif hasattr(QtCore, "qInstallMsgHandler"):
+        def taurusMsgHandler(msg_type, msg):
+            f = QT_LEVEL_MATCHER.get(msg_type)
+            return f("Qt: " + msg)
+        QtCore.qInstallMsgHandler(taurusMsgHandler)
+
+
+def __getTheme():
+    QtGui = __importQt("QtGui")
+    return QtGui.QIcon.themeName()
+
+
+def __hasTheme():
+    return len(__getTheme()) > 0
+
+
+def __get_taurus_resource_path():
+    import os
+    this_dir = os.path.abspath(os.path.dirname(__file__))
+    taurus_dir = os.path.join(this_dir, os.path.pardir, os.path.pardir)
+    base_resource_dir = os.path.join(taurus_dir, "qt", "qtgui", "resource")
+    return os.path.realpath(base_resource_dir)
+
+
+def __get_taurus_tango_theme_path():
+    import os
+    return os.path.join(__get_taurus_resource_path(), "tango-icons")
+
+
+def __themeDirectories():
+    """Returns valid theme directories for the current theme
+    **Requires QApplication to be created**"""
+    import os
+    QtGui = __importQt("QtGui")
+    theme = __getTheme()
+    theme_paths = QtGui.QIcon.themeSearchPaths()
+    result = []
+    for theme_path in theme_paths:
+        theme_path = os.path.join(theme_path, theme)
+        if os.path.isdir(theme_path) and not theme_path in result:
+            result.append(theme_path)
+    return result
+
+
+def __initializeTheme():
+    """Currently not used"""
+    import os
+    QtGui = __importQt("QtGui")
+
+    # Can only resources if QApplication already exists
+    app = QtGui.QApplication.instance()
+    if app is None:
+        raise SystemError("QApplication object must exist before "
+                          "initializing Qt resources")
+
+    tango_theme_dir = __get_taurus_tango_theme_path()
+
+    # initialize theme if necessary
+    theme = __getTheme()
+    has_theme = len(theme) > 0
+    if not has_theme:
+        __log.info("No native theme support. Using local tango-theme-icons")
+        if os.path.isdir(tango_theme_dir):
+            # If themes are not supported (windows, for example), taurus
+            # initializes local Tango theme
+            theme_search_path = QtGui.QIcon.themeSearchPaths()
+            theme_search_path.append(tango_theme_dir)
+            QtGui.QIcon.setThemeSearchPaths(theme_search_path)
+            QtGui.QIcon.setThemeName("Tango")
+        else:
+            __log.warning("Local tango-theme-icons not found: Theme not initialized")
+
+
+def __initializeQtResources():
+    import os
+    QtCore = __importQt("QtCore")
+    base_resource_dir = __get_taurus_resource_path()
+
+    # add taurus resources
+    namespace = __config.NAMESPACE
+    search_paths = QtCore.QDir.searchPaths(namespace) or []
+    for elem in os.listdir(base_resource_dir):
+        abs_elem = os.path.join(base_resource_dir, elem)
+        if os.path.isdir(abs_elem) and not abs_elem in search_paths:
+            search_paths.append(abs_elem)
+    QtCore.QDir.setSearchPaths(namespace, search_paths)
+
+
+def __removePyQtInputHook():
+    try:
+        __importQt("QtCore").pyqtRemoveInputHook()
+    except AttributeError:
+        pass
+
+
+def _updateQtSubModule(glob_dict, qt_sub_module_name):
+    glob_dict.update(__importQt(qt_sub_module_name).__dict__)
+
+
+#------------------------------------------------------------------------------
+# PyQt4
+#------------------------------------------------------------------------------
+
+def __get_sip():
+    try:
+        import sip
+    except ImportError:
+        sip = None
+    return sip
+
+
+def __setPyQt4API(element, api_version=2):
+    sip = __get_sip()
+    try:
+        ver = sip.getapi(element)
+    except ValueError:
+        ver = -1
+
+    if ver < 0:
+        try:
+            sip.setapi(element, api_version)
+            __log.debug("%s API set to version %d",
+                      element, sip.getapi(element))
+        except ValueError:
+            __log.warning("Error setting %s API to version %s", element,
+                        api_version, exc_info=1)
+            return False
+    elif ver < api_version:
+        __log.info("%s API set to version %s (advised: version >= %s)",
+                 element, ver, api_version)
+    return True
+
+
+def __preparePyQt4():
+    import sys
+
+    # In python 3 APIs are set to level 2 so nothing to do
+    if sys.version_info[0] > 2:
+        return __import("PyQt4")
+
+    sip = __get_sip()
+
+    # For PySide compatibility, use the new-style string API that
+    # automatically converts QStrings to Unicode Python strings. Also,
+    # automatically unpack QVariants to their underlying objects.
+    if sip is None:
+        __log.warning("Could not find sip")
+    elif sip.SIP_VERSION < 0x040900:
+        sip_ver = sip.SIP_VERSION_STR
+        __log.warning("Using old sip %s (advised >= 4.9)", sip_ver)
+    else:
+        for obj in ("QDate", "QDateTime", "QString", "QTextStream", "QTime",
+          "QUrl", "QVariant"):
+            __setPyQt4API(obj, 2)
+
+    return __import("PyQt4")
+
+
+#------------------------------------------------------------------------------
+# PyQt5
+#------------------------------------------------------------------------------
+
+def __preparePyQt5():
+    return __import("PyQt5")
+
+
+#------------------------------------------------------------------------------
+# PySide
+#------------------------------------------------------------------------------
+
+def __preparePySide():
+    return __import("PySide")
+
+
+#------------------------------------------------------------------------------
+# Global
+#------------------------------------------------------------------------------
+
+def getQt(name=None, strict=True):
+    global __QT, __QT_NAME
+    if __QT:
+        __assertQt(name, qt=__QT, strict=strict)
+        return __QT
+
+    import sys
+
+    modules = sys.modules
+    for api_name in __QT_PREFERED_APIS:
+        api = modules.get(api_name)
+        if api:
+            __assertQt(name, qt=api, strict=strict)
+            __QT = api
+            __QT_NAME = name
+            return __QT
+
+    # no qt imported yet
+    if strict and name:
+        apis = [name]
+    else:
+        apis = list(__QT_PREFERED_APIS)
+        if name:
+            apis.remove(name)
+            apis.insert(0, name)
+    for api_name in apis:
+        f = globals()["__prepare" + api_name]
+        try:
+            __QT = f()
+            __QT_NAME = api_name
+            return __QT
+        except ImportError:
+            continue
+    raise ImportError("No suitable Qt found")
+
+
+def getQtName(name=None, strict=True):
+    # force initialization of Qt
+    getQt(name=name, strict=strict)
+    return __QT_NAME
+
+
+def initialize(name=None, strict=True, logging=True,
+               resources=True, remove_inputhook=True):
+    global __QT_INIT
+
+    if __QT_INIT:
+        return getQt()
+
+    if not __config.QT_AUTO_API in __QT_KNOWN_APIS:
+        raise ImportError("Invalid QT_AUTO_API '%s'. Valid APIs are %s" % \
+                          (__config.QT_AUTO_API,
+                          ", ".join(__QT_KNOWN_APIS)))
+
+    global __QT_PREFERED_APIS
+    __QT_PREFERED_APIS = __getPreferedAPIs()
+
+    qt = getQt(name=name, strict=strict)
+    if logging:
+        __initializeQtLogging()
+    if resources:
+        __initializeQtResources()
+    if remove_inputhook:
+        __removePyQtInputHook()
+
+    __QT_INIT = True
+    return qt
+
+
+def requires(origin=None, exc_class=ImportError, **kwargs):
+    """
+    Determines if the Qt component fulfills the minimum specified.
+    Can take one of the following keyword arguments: Qt, PyQt, PySide.
+    Any of these arguments maybe a string in the loose version format
+    (see :class:`distutils.version.LooseVersion`)
+
+    If present, *Qt* keyword stands for the minimum Qt C++ version.
+    If present, *PyQt* keyword stands for the minimum PyQt version.
+    If present, *PySide* keyword stands for the minimum PySide version.
+
+    If a keyword is not present, it means it accepts any version. So, if, for
+    example, you are running taurus with PySide and you call requires with
+    `requires(PyQt='4.10')` it will **not** fail.
+
+    :param Qt:
+    """
+    from distutils.version import LooseVersion as V
+    QtName = getQtName()
+    QtCore = __importQt("QtCore")
+
+    if origin is None:
+        msg_prefix = "Required"
+    else:
+        msg_prefix = origin + " requires"
+
+    # check C++ Qt minimum version
+    req_cpp_qt_v_str = kwargs.pop("Qt", None)
+    if req_cpp_qt_v_str is not None:
+        cpp_qt_v_str = QtCore.QT_VERSION_STR
+        if V(req_cpp_qt_v_str) > V(cpp_qt_v_str):
+            if exc_class:
+                msg = "{0} C++ Qt >= {1}. Installed C++ Qt is {2}".format(
+                    msg_prefix, req_cpp_qt_v_str, cpp_qt_v_str)
+                raise exc_class(msg)
+            else:
+                return False
+
+    if QtName.startswith('PyQt'):
+        req_v_str = kwargs.get('PyQt', "0")
+        qt_v_str = QtCore.PYQT_VERSION_STR
+    elif QtName == 'PySide':
+        req_v_str = kwargs.get('PySide', "0")
+        qt_v_str = QtCore.PYSIDE_VERSION_STR
+
+    if req_v_str:
+        if V(req_v_str) > V(qt_v_str):
+            if exc_class:
+                msg = "{0} {1} >= {2}. Installed {1} is {3}",format(
+                    msg_prefix, QtName, req_v_str, qt_v_str)
+                raise exc_class(msg)
+            else:
+                return False
+    return True
+
+
+if __config.QT_AUTO_INIT:
+    initialize(name=__config.QT_AUTO_API,
+               strict=__config.QT_AUTO_STRICT,
+               logging=__config.QT_AUTO_INIT_LOG,
+               resources=__config.QT_AUTO_INIT_RES,
+               remove_inputhook=__config.QT_AUTO_REMOVE_INPUTHOOK)
+
+    __log.info('Using "%s" for Qt', __QT_NAME)
diff --git a/lib/taurus/external/qt/uic.py b/lib/taurus/external/qt/uic.py
new file mode 100644
index 0000000..b4fb2e4
--- /dev/null
+++ b/lib/taurus/external/qt/uic.py
@@ -0,0 +1,136 @@
+# -*- coding: utf-8 -*-
+
+##############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+##
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+##
+## Taurus 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.
+##
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+##############################################################################
+
+"""This module exposes PyQt4/PSide uic module"""
+
+from taurus.core.util import log
+from taurus.external.qt import getQt
+
+__backend = getQt().__name__
+
+if __backend == 'PyQt4':
+    from PyQt4.uic import *
+    from PyQt4.uic import uiparser
+    from PyQt4.uic import properties
+
+    # prevent ui parser from logging debug messages
+    class __IgnoreCalls:
+        def __call__(self, *args, **kwargs):
+            pass
+
+    uiparser.DEBUG = __IgnoreCalls()
+    properties.DEBUG = __IgnoreCalls()
+
+    def loadUI(uiFilename, parent=None):
+        newWidget = loadUi(uiFilename)
+        newWidget.setParent(parent)
+        return newWidget
+
+elif __backend == 'PyQt5':
+    from PyQt5.uic import *
+    from PyQt5.uic import uiparser
+    from PyQt5.uic import properties
+
+    # prevent ui parser from logging debug messages
+    class __IgnoreCalls:
+        def __call__(self, *args, **kwargs):
+            pass
+
+    uiparser.DEBUG = __IgnoreCalls()
+    properties.DEBUG = __IgnoreCalls()
+
+    def loadUI(uiFilename, parent=None):
+        newWidget = loadUi(uiFilename)
+        newWidget.setParent(parent)
+        return newWidget
+
+elif __backend == 'PySide':
+    from . import QtCore as __QtCore
+    from . import QtUiTools as __QtUiTools
+
+    __uiLoader = None
+    class UiLoader(__QtUiTools.QUiLoader):
+        def __init__(self):
+            super(UiLoader, self).__init__()
+            self._rootWidget = None
+
+        def createWidget(self, className, parent=None, name=''):
+            widget = super(UiLoader, self).createWidget(
+                    className, parent, name)
+
+            if name:
+                if self._rootWidget is None:
+                    self._rootWidget = widget
+                elif not hasattr(self._rootWidget, name):
+                    setattr(self._rootWidget, name, widget)
+                else:
+                    log.error("Qt: Name collision! Ignoring second "
+                              "occurrance of %r.", name)
+
+                if parent is not None:
+                    setattr(parent, name, widget)
+                else:
+                    # Sadly, we can't reparent it to self, since QUiLoader
+                    # isn't a QWidget.
+                    log.error("Qt: No parent specified! This will probably "
+                              "crash due to C++ object deletion.")
+
+            return widget
+
+        def load(self, fileOrName, parentWidget=None):
+            if self._rootWidget is not None:
+                raise Exception("UiLoader is already started loading UI!")
+
+            widget = super(UiLoader, self).load(fileOrName, parentWidget)
+
+            if widget != self._rootWidget:
+                log.error("Qt: Returned widget isn't the root widget... ")
+
+            self._rootWidget = None
+            return widget
+
+    def loadUI(uiFilename, parent=None):
+        global __uiLoader
+        if __uiLoader is None:
+            __uiLoader = UiLoader()
+
+        uiFile = __QtCore.QFile(uiFilename, parent)
+        if not uiFile.open(__QtCore.QIODevice.ReadOnly):
+            log.error("Qt: Couldn't open file %r!", uiFilename)
+            return None
+
+        try:
+            return __uiLoader.load(uiFile, parent)
+
+        except:
+            log.exception("Exception loading UI from %r!", uiFilename)
+
+        finally:
+            uiFile.close()
+            uiFile.deleteLater()
+
+        return None
+
+del getQt
diff --git a/lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py b/lib/taurus/external/test/__init__.py
similarity index 93%
copy from lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py
copy to lib/taurus/external/test/__init__.py
index 810fb34..c050b0b 100644
--- a/lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py
+++ b/lib/taurus/external/test/__init__.py
@@ -1,24 +1,24 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
-#############################################################################
+##############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
-#############################################################################
+##############################################################################
diff --git a/lib/taurus/external/test/test_qt.py b/lib/taurus/external/test/test_qt.py
new file mode 100644
index 0000000..c7d2d1c
--- /dev/null
+++ b/lib/taurus/external/test/test_qt.py
@@ -0,0 +1,115 @@
+# -*- coding: utf-8 -*-
+
+##############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+##
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+##
+## Taurus 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.
+##
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+##############################################################################
+
+import sys
+
+import taurus
+from taurus import tauruscustomsettings
+from taurus.external import unittest
+
+_QtAPIs = ["PyQt4", "PySide", "PyQt5"]
+
+
+def _import(name):
+    __import__(name)
+    return sys.modules[name]
+
+
+class QtTestCase(unittest.TestCase):
+
+    QtAPI = None
+
+    def setUp(self):
+        taurus.setLogLevel(taurus.Critical)
+
+        for qt in _QtAPIs:
+            if qt in sys.modules:
+                self.QtAPI = qt
+                break
+        else:
+            self.QtAPI = "PyQt4"
+
+        self.opt_mods = ("QtDesigner", "QtNetwork", "Qt", "QtSvg",
+                         "QtUiTools", "QtWebKit", "Qwt5", "uic")
+
+        # auto initialize Qt by taurus using forcibly the self.QtAPI
+        tauruscustomsettings.QT_AUTO_INIT = True
+        tauruscustomsettings.QT_AUTO_API = self.QtAPI
+        tauruscustomsettings.QT_AUTO_STRICT = True
+
+        # this import initializes Qt in case it is not loaded
+        from taurus.external.qt import Qt
+        self.__qt = Qt
+
+    def test_qt_base_import(self):
+        mods = sys.modules
+
+        other_apis = set(_QtAPIs)
+        other_apis.remove(self.QtAPI)
+
+        from taurus.external.qt import getQtName
+
+        self.assertEquals(getQtName(), self.QtAPI)
+
+        for other_api in other_apis:
+            self.assertFalse(other_api in mods, other_api + " loaded in " + self.QtAPI + " test")
+
+        self.assertTrue(self.QtAPI in mods, self.QtAPI + " not loaded")
+        self.assertTrue(self.QtAPI + ".QtCore" in mods, "QtCore not loaded")
+
+        for opt_mod in self.opt_mods:
+            mod = "{0}.{1}".format(self.QtAPI, opt_mod)
+            self.assertFalse(mod in mods, mod + " is loaded")
+
+    def __test_qt_module(self, qt_mod_name):
+        taurus_qt_mod_name = "taurus.external.qt.{0}".format(qt_mod_name)
+        orig_qt_mod_name = "{0}.{1}".format(self.QtAPI, qt_mod_name)
+        TaurusQtMod = _import(taurus_qt_mod_name)
+        OrigQtMod = _import(orig_qt_mod_name)
+        taurus_qt_mod_members = [ m for m in dir(TaurusQtMod) if not m.startswith("_") ]
+        orig_qt_mod_members = [ m for m in dir(OrigQtMod) if not m.startswith("_") ]
+
+        for orig_member_name in orig_qt_mod_members:
+            self.assertTrue(orig_member_name in taurus_qt_mod_members,
+                            "Taurus {0} does not contain {1}".format(qt_mod_name, orig_member_name))
+
+    def test_qt_core(self):
+        return self.__test_qt_module("QtCore")
+
+    def test_qt_gui(self):
+        return self.__test_qt_module("QtGui")
+
+    def test_icons(self):
+        from taurus.external.qt.QtGui import QIcon
+        icon = QIcon.fromTheme("folder-open")
+        self.assertFalse(icon.isNull())
+
+
+def  main():
+    unittest.main(verbosity=2)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh b/lib/taurus/external/unittest/__init__.py
old mode 100755
new mode 100644
similarity index 72%
rename from lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh
rename to lib/taurus/external/unittest/__init__.py
index 0180baf..308b227
--- a/lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh
+++ b/lib/taurus/external/unittest/__init__.py
@@ -1,32 +1,37 @@
-#!/bin/bash
+# -*- coding: utf-8 -*-
 
 ##############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
 ##############################################################################
 
-taurusuic4 -x ui/TaurusMotorH.ui -o ui_taurusmotorh.py
-taurusuic4 -x ui/TaurusMotorH2.ui -o ui_taurusmotorh2.py
-taurusuic4 -x ui/TaurusMotorV.ui -o ui_taurusmotorv.py
-taurusuic4 -x ui/TaurusMotorV2.ui -o ui_taurusmotorv2.py
+from __future__ import absolute_import
+
+from sys import version_info as __vi
 
-taurusuic4 -x ui/PoolMotorSlim.ui -o ui_poolmotorslim.py
-pyuic4 -x ui/poolioregisterbuttons.ui -o ui_poolioregisterbuttons.py
+if __vi[:2] < (2,7):
+    try:
+        from unittest2 import *
+    except ImportError:
+        raise ImportError("With python <= 2.6 taurus requires unittest2 "
+                          "which is not available")
+else:
+    from unittest import *
diff --git a/lib/taurus/qt/Qt.py b/lib/taurus/qt/Qt.py
index 556173d..5b1c3c6 100644
--- a/lib/taurus/qt/Qt.py
+++ b/lib/taurus/qt/Qt.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
 #############################################################################
 ##
@@ -23,128 +23,11 @@
 ##
 #############################################################################
 
-"""This module exposes PyQt4.Qt module"""
+"""This module exposes Qt module"""
 
-from taurusqtoptions import QT_API, QT_API_PYQT, QT_API_PYSIDE
-
-def __to_qvariant_1(pyobj=None):
-    """Properly converts a python object into a proper QVariant according to
-    the PySide or PyQt4 API version in use
-    
-    :param pyobj: object to be converted
-    :return: A proper QVariant"""
-    from PyQt4.QtCore import QVariant
-    if pyobj is None:
-        return QVariant()  # PyQt 4.4 doesn't accept QVariant(None)
-    return QVariant(pyobj)
-
-def __from_qvariant_1(qobj=None, convfunc=None):
-    """Properly converts a QVariant/QVariant equivalent to a python object
-    according to the PySide or PyQt4 API version in use
-    
-    :param qobj: object to be converted
-    :param convfunc:
-        conversion function. Not used if QVariant is not available.
-        If QVariant is available:  [default: None, meaning use
-        qobj.toPyObject()]. Can be a function like str, int, bool, float or
-        a string containing the conversion method (ex.: 'toByteArray') will
-        call qobj.toByteArray()
-    :return: A proper python object"""
-    if convfunc is None:
-        return qobj.toPyObject()
-    elif callable(convfunc):
-        if convfunc in (unicode, str):
-            return convfunc(qobj.toString())
-        elif convfunc is bool:
-            return qobj.toBool()
-        elif convfunc is int:
-            return qobj.toInt()[0]
-        elif convfunc is float:
-            return qobj.toDouble()[0]
-    elif isinstance(convfunc, (str, unicode)):
-        return getattr(qobj, convfunc)()
-    
-def __QVariant_2(pyobj=None):
-    return pyobj
-    
-def __to_qvariant_2(pyobj=None):
-    """Properly converts a python object into a proper QVariant according to
-    the PySide or PyQt4 API version in use
-    
-    :param pyobj: object to be converted
-    :return: A proper QVariant"""
-    return pyobj
-
-def __from_qvariant_2(qobj=None, convfunc=None):
-    """Properly converts a QVariant/QVariant equivalent to a python object
-    according to the PySide or PyQt4 API version in use
-    
-    :param qobj: object to be converted
-    :param convfunc:
-        conversion function. Not used if QVariant is not available.
-        If QVariant is available:  [default: None, meaning use
-        qobj.toPyObject()]. Can be a function like str, int, bool, float or
-        a string containing the conversion method (ex.: 'toByteArray') will
-        call qobj.toByteArray()
-    :return: A proper python object"""
-    return qobj
-
-#def __QString_2(pyobj=""):
-#    return str(pyobj)
-
-__QString_2 = str
-
-#def __QStringList_2(pyobj=None):
-#    if pyobj is None:
-#        return list()
-#    if isinstance(pyobj, (str, unicode)):
-#        return [pyobj]
-#    return list(pyobj)
-
-__QStringList_2 = list
-
-# Now peform the imports.
-if QT_API == QT_API_PYQT:
-    import PyQt4.Qt
-    import PyQt4.QtCore
-    from QtCore import *  #required to import tweaks done in taurus.qt.QtCore
-    from PyQt4.Qt import *
-    from PyQt4.Qt import Qt
-    
-    import sip
-    try:
-        PYQT_QVARIANT_API_1 = sip.getapi('QVariant') == 1
-    except AttributeError:
-        # PyQt <v4.6
-        PYQT_QVARIANT_API_1 = True
-    
-    if PYQT_QVARIANT_API_1:
-        to_qvariant = __to_qvariant_1
-        from_qvariant = __from_qvariant_1
-    else:
-        PyQt4.QtCore.QVariant = PyQt4.Qt.QVariant = QVariant = __QVariant_2
-        to_qvariant = __to_qvariant_2
-        from_qvariant = __from_qvariant_2
-    
-    try:
-        PYQT_QSTRING_API_1 = sip.getapi('QString') == 1
-    except AttributeError:
-        # PyQt <v4.6
-        PYQT_QSTRING_API_1 = True
-    
-    if not PYQT_QSTRING_API_1:
-        PyQt4.QtCore.QString = PyQt4.Qt.QString = QString = __QString_2
-        PyQt4.QtCore.QStringList = PyQt4.Qt.QStringList = QStringList = __QStringList_2
-    
-elif QT_API == QT_API_PYSIDE:
-    #from PySide.Qt import *
-    from QtCore import *
-    from QtGui import *
-
-
-    QVariant = __QVariant_2
-    to_qvariant = __to_qvariant_2
-    from_qvariant = __from_qvariant_2
-    QString = __QString_2
-    QStringList = __QStringList_2
+from taurus.core.util.log import info
+info("import of Qt from taurus.qt is deprecated. "
+     "Use taurus.external.qt instead")
+del info
 
+from taurus.external.qt.Qt import *
diff --git a/lib/taurus/qt/QtCore.py b/lib/taurus/qt/QtCore.py
index 1040e33..5a8f747 100644
--- a/lib/taurus/qt/QtCore.py
+++ b/lib/taurus/qt/QtCore.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
 #############################################################################
 ##
@@ -23,45 +23,11 @@
 ##
 #############################################################################
 
-"""This module exposes PyQt4.QtCore module"""
+"""This module exposes QtCore module"""
 
-from taurusqtoptions import QT_API, QT_API_PYQT, QT_API_PYSIDE
+from taurus.core.util.log import info
+info("import of QtCore from taurus.qt is deprecated. "
+     "Use taurus.external.qt instead")
+del info
 
-# Now peform the imports.
-if QT_API == QT_API_PYQT:
-    from PyQt4 import QtCore as __QtCore
-    from PyQt4.QtCore import *
-
-    # Alias PyQt-specific functions for PySide compatibility.
-    if hasattr(__QtCore, "pyqtSignal"):
-        Signal = pyqtSignal
-    if hasattr(__QtCore, "pyqtSlot"):
-        Slot = pyqtSlot
-    else: #implement dummy pyqtSlot decorator for PyQt<4.6
-        class DummyPyqtSlot(object):
-            def __init__(self, *a, **kw):
-                pass
-            def __call__(self, f):
-                return f
-        Slot = pyqtSlot = DummyPyqtSlot
-    if hasattr(__QtCore, "pyqtProperty"):
-        Property = pyqtProperty
-    __version__ = QT_VERSION_STR
-
-elif QT_API == QT_API_PYSIDE:
-    from PySide import QtCore as __QtCore
-    from PySide.QtCore import *
-
-    #a dummy pyqtsignature decorator
-    # CAUTION this totally nulifies the pupose of decorating with pyqtSignature
-    # todo: do a proper implementation of pyqtsignature
-    def pyqtSignature(f):
-        return f
-
-    # Alias PySide functions for PyQt compatibility.
-    if hasattr(__QtCore, "Signal"):
-        pyqtSignal = Signal
-    if hasattr(__QtCore, "Slot"):
-        pyqtSlot = Slot
-    if hasattr(__QtCore, "Property"):
-        pyqtProperty = Property
+from taurus.external.qt.QtCore import *
diff --git a/lib/taurus/qt/QtDesigner.py b/lib/taurus/qt/QtDesigner.py
index 33a98b7..95f7d9f 100644
--- a/lib/taurus/qt/QtDesigner.py
+++ b/lib/taurus/qt/QtDesigner.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
 #############################################################################
 ##
@@ -23,12 +23,11 @@
 ##
 #############################################################################
 
-"""This module exposes PyQt4.QtSvg module"""
+"""This module exposes QtDesigner module"""
 
-from taurusqtoptions import QT_API, QT_API_PYQT, QT_API_PYSIDE
+from taurus.core.util.log import info
+info("import of QtDesigner from taurus.qt is deprecated. "
+     "Use taurus.external.qt instead")
+del info
 
-# Now peform the imports.
-if QT_API == QT_API_PYQT:
-    from PyQt4.QtDesigner import *
-elif QT_API == QT_API_PYSIDE:
-    from PySide.QtDesigner import *
+from taurus.external.qt.QtDesigner import *
diff --git a/lib/taurus/qt/QtGui.py b/lib/taurus/qt/QtGui.py
index 0e94f09..0c9dac5 100644
--- a/lib/taurus/qt/QtGui.py
+++ b/lib/taurus/qt/QtGui.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
 #############################################################################
 ##
@@ -23,12 +23,11 @@
 ##
 #############################################################################
 
-"""This module exposes PyQt4.QtGui module"""
+"""This module exposes QtGui module"""
 
-from taurusqtoptions import QT_API, QT_API_PYQT, QT_API_PYSIDE
+from taurus.core.util.log import info
+info("import of QtGui from taurus.qt is deprecated. "
+     "Use taurus.external.qt instead")
+del info
 
-# Now peform the imports.
-if QT_API == QT_API_PYQT:
-    from PyQt4.QtGui import *
-elif QT_API == QT_API_PYSIDE:
-    from PySide.QtGui import *
\ No newline at end of file
+from taurus.external.qt.QtGui import *
diff --git a/lib/taurus/qt/QtNetwork.py b/lib/taurus/qt/QtNetwork.py
index 29cc324..c956ddc 100644
--- a/lib/taurus/qt/QtNetwork.py
+++ b/lib/taurus/qt/QtNetwork.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
 #############################################################################
 ##
@@ -23,12 +23,11 @@
 ##
 #############################################################################
 
-"""This module exposes PyQt4.QtGui module"""
+"""This module exposes QtNetwork module"""
 
-from taurusqtoptions import QT_API, QT_API_PYQT, QT_API_PYSIDE
+from taurus.core.util.log import info
+info("import of QtNetwork from taurus.qt is deprecated. "
+     "Use taurus.external.qt instead")
+del info
 
-# Now peform the imports.
-if QT_API == QT_API_PYQT:
-    from PyQt4.QtNetwork import *
-elif QT_API == QT_API_PYSIDE:
-    from PySide.QtNetwork import *
+from taurus.external.qt.QtNetwork import *
diff --git a/lib/taurus/qt/QtSvg.py b/lib/taurus/qt/QtSvg.py
index c5e9274..b5d6bd1 100644
--- a/lib/taurus/qt/QtSvg.py
+++ b/lib/taurus/qt/QtSvg.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
 #############################################################################
 ##
@@ -23,12 +23,11 @@
 ##
 #############################################################################
 
-"""This module exposes PyQt4.QtSvg module"""
+"""This module exposes QtSvg module"""
 
-from taurusqtoptions import QT_API, QT_API_PYQT, QT_API_PYSIDE
+from taurus.core.util.log import info
+info("import of QtSvg from taurus.qt is deprecated. "
+     "Use taurus.external.qt instead")
+del info
 
-# Now peform the imports.
-if QT_API == QT_API_PYQT:
-    from PyQt4.QtSvg import *
-elif QT_API == QT_API_PYSIDE:
-    from PySide.QtSvg import *
+from taurus.external.qt.QtSvg import *
diff --git a/scripts/taurusdesigner b/lib/taurus/qt/QtUiTools.py
old mode 100755
new mode 100644
similarity index 79%
copy from scripts/taurusdesigner
copy to lib/taurus/qt/QtUiTools.py
index 01a9493..4e628c5
--- a/scripts/taurusdesigner
+++ b/lib/taurus/qt/QtUiTools.py
@@ -1,35 +1,33 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
 #############################################################################
 
-import sys
-import os.path
-import optparse 
+"""This module exposes QtUiTools module"""
 
-import taurus
-from taurus.qt import Qt
-from taurus.qt.qtdesigner.taurusdesigner import main
+from taurus.core.util.log import info
+info("import of QtUiTools from taurus.qt is deprecated. "
+     "Use taurus.external.qt instead")
+del info
 
-if __name__ == "__main__":
-    main()
+from taurus.external.qt.QtUiTools import *
diff --git a/lib/taurus/qt/QtWebKit.py b/lib/taurus/qt/QtWebKit.py
index 1cbe81c..ae03f74 100644
--- a/lib/taurus/qt/QtWebKit.py
+++ b/lib/taurus/qt/QtWebKit.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
 #############################################################################
 ##
@@ -23,12 +23,11 @@
 ##
 #############################################################################
 
-"""This module exposes PyQt4.QtGui module"""
+"""This module exposes QtWebKit module"""
 
-from taurusqtoptions import QT_API, QT_API_PYQT, QT_API_PYSIDE
+from taurus.core.util.log import info
+info("import of QtWebKit from taurus.qt is deprecated. "
+     "Use taurus.external.qt instead")
+del info
 
-# Now peform the imports.
-if QT_API == QT_API_PYQT:
-    from PyQt4.QtWebKit import *  # analysis:ignore
-elif QT_API == QT_API_PYSIDE:
-    from PySide.QtWebKit import *  # analysis:ignore
+from taurus.external.qt.QtWebKit import *
diff --git a/lib/taurus/qt/Qwt5.py b/lib/taurus/qt/Qwt5.py
index 60ec5ca..784ba34 100644
--- a/lib/taurus/qt/Qwt5.py
+++ b/lib/taurus/qt/Qwt5.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
 #############################################################################
 ##
@@ -23,12 +23,11 @@
 ##
 #############################################################################
 
-"""This module exposes PyQt4.QtSvg module"""
+"""This module exposes Qwt5 module"""
 
-from taurusqtoptions import QT_API, QT_API_PYQT, QT_API_PYSIDE
+from taurus.core.util.log import warning
+warning("importing Qwt5 from taurus.qt is deprecated. Use "
+        "taurus.external.qt instead")
+del warning
 
-# Now peform the imports.
-if QT_API == QT_API_PYQT:
-    from PyQt4.Qwt5 import *
-elif QT_API == QT_API_PYSIDE:
-    from PySide.Qwt5 import *
+from taurus.external.qt.Qwt5 import *
diff --git a/lib/taurus/qt/__init__.py b/lib/taurus/qt/__init__.py
index fb64884..103a25c 100644
--- a/lib/taurus/qt/__init__.py
+++ b/lib/taurus/qt/__init__.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+# -*- coding: utf-8 -*-
 
 #############################################################################
 ##
@@ -27,14 +27,4 @@
 
 __docformat__ = 'restructuredtext'
 
-""" A Qt API selector that can be used to switch between PyQt and PySide.
-
-This uses the ETS 4.0 selection pattern of:
-PySide first, PyQt with API v2. second.
-
-Do not use this if you need PyQt with the old QString/QVariant API.
-"""
-
-import os
-import taurusqtoptions
-
+from taurus.external import qt as __qt
diff --git a/lib/taurus/qt/qtcore/communication/communication.py b/lib/taurus/qt/qtcore/communication/communication.py
index 0b6394a..21c5973 100644
--- a/lib/taurus/qt/qtcore/communication/communication.py
+++ b/lib/taurus/qt/qtcore/communication/communication.py
@@ -27,7 +27,7 @@
 comunications.py: 
 """
 
-from taurus.qt import QtCore
+from taurus.external.qt import QtCore
 import weakref
 
 _DEBUG = False
diff --git a/lib/taurus/qt/qtcore/configuration/configuration.py b/lib/taurus/qt/qtcore/configuration/configuration.py
index 0b83a3f..cb8a2c8 100644
--- a/lib/taurus/qt/qtcore/configuration/configuration.py
+++ b/lib/taurus/qt/qtcore/configuration/configuration.py
@@ -369,7 +369,7 @@ class BaseConfigurableClass:
             msg = 'Unsupported Config Version %s. (Supported: %s)'%(version, repr(supportedVersions))
             self.warning(msg)
             if showDialog: 
-                from taurus.qt import Qt
+                from taurus.external.qt import Qt
                 Qt.QMessageBox.warning(self, "Wrong Configuration Version", msg, Qt.QMessageBox.Ok)
             return False
         return True
@@ -384,7 +384,7 @@ class BaseConfigurableClass:
         
         .. seealso:: :meth:`restoreQConfig`
         '''
-        from taurus.qt import Qt
+        from taurus.external.qt import Qt
         import cPickle as pickle
         configdict = self.createConfig(allowUnpickable=False)
         return Qt.QByteArray(pickle.dumps(configdict))
@@ -411,7 +411,7 @@ class BaseConfigurableClass:
         """
         import cPickle as pickle
         if ofile is None:
-            from taurus.qt import Qt
+            from taurus.external.qt import Qt
             ofile = unicode(Qt.QFileDialog.getSaveFileName( self, 'Save Configuration', '%s.pck'%self.__class__.__name__, 'Configuration File (*.pck)'))
             if not ofile: return
         if not isinstance(ofile,file): ofile=open(ofile,'w')
@@ -429,7 +429,7 @@ class BaseConfigurableClass:
         """
         import cPickle as pickle
         if ifile is None:
-            from taurus.qt import Qt
+            from taurus.external.qt import Qt
             ifile = unicode(Qt.QFileDialog.getOpenFileName( self, 'Load Configuration', '', 'Configuration File (*.pck)'))
             if not ifile: return
         if not isinstance(ifile,file): ifile=open(ifile,'r')
diff --git a/lib/taurus/qt/qtcore/model/taurusdatabasemodel.py b/lib/taurus/qt/qtcore/model/taurusdatabasemodel.py
index 7cfbf0e..8e7022a 100644
--- a/lib/taurus/qt/qtcore/model/taurusdatabasemodel.py
+++ b/lib/taurus/qt/qtcore/model/taurusdatabasemodel.py
@@ -38,7 +38,7 @@ __all__ = ["TaurusTreeDevicePartItem", "TaurusTreeDeviceDomainItem",
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.core.taurusbasetypes import TaurusElementType, TaurusSWDevHealth
 from taurus.core.taurusdatabase import TaurusInfo, TaurusDatabase
 import taurus.qt.qtcore.mimetypes
@@ -527,13 +527,13 @@ class TaurusDbDeviceModel(TaurusDbBaseModel):
             data = data.deviceTree()
 
         rootItem = self._rootItem
-        for domain in sorted(data.keys()):
+        for domain in data.keys():
             families = data[domain]
             domainItem = TaurusTreeDeviceDomainItem(self, domain.upper(), rootItem)
-            for family in sorted(families.keys()):
+            for family in families.keys():
                 members = families[family]
                 familyItem = TaurusTreeDeviceFamilyItem(self, family.upper(), domainItem)
-                for member in sorted(members.keys()):
+                for member in members.keys():
                     dev = members[member]
                     memberItem = TaurusTreeDeviceItem(self, dev, parent=familyItem)
                     familyItem.appendChild(memberItem)
diff --git a/lib/taurus/qt/qtcore/model/taurusmodel.py b/lib/taurus/qt/qtcore/model/taurusmodel.py
index b4bcf79..644ee24 100644
--- a/lib/taurus/qt/qtcore/model/taurusmodel.py
+++ b/lib/taurus/qt/qtcore/model/taurusmodel.py
@@ -29,7 +29,7 @@ __all__ = ["TaurusBaseTreeItem", "TaurusBaseModel", "TaurusBaseProxyModel"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.core.taurusbasetypes import TaurusElementType
 from taurus.core.util.log import Logger
 
@@ -390,7 +390,7 @@ class TaurusBaseProxyModel(Qt.QSortFilterProxyModel):
         self.setSortRole(QtQt.DisplayRole)
         
         # general configuration
-        self.sort(0, QtQt.AscendingOrder)
+        self.setDynamicSortFilter(True)
         
     def __getattr__(self, name):
         return getattr(self.sourceModel(), name)
diff --git a/lib/taurus/qt/qtcore/tango/sardana/macroserver.py b/lib/taurus/qt/qtcore/tango/sardana/macroserver.py
deleted file mode 100644
index 83c7a00..0000000
--- a/lib/taurus/qt/qtcore/tango/sardana/macroserver.py
+++ /dev/null
@@ -1,174 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""MacroServer extension for taurus Qt"""
-
-__all__ = ["QDoor", "QMacroServer", "MacroServerMessageErrorHandler", "registerExtensions"]
-
-from taurus.core.taurusbasetypes import TaurusEventType
-from taurus.core.tango.sardana.macroserver import BaseMacroServer, BaseDoor
-from taurus.qt import Qt
-
-CHANGE_EVTS = TaurusEventType.Change, TaurusEventType.Periodic
-
-
-class QDoor(BaseDoor, Qt.QObject):
-    
-    __pyqtSignals__ = ["resultUpdated","recordDataUpdated", "macroStatusUpdated"]
-    __pyqtSignals__ += [ "%sUpdated" % l.lower() for l in BaseDoor.log_streams ]
-    
-    def __init__(self, name, qt_parent=None, **kw):
-        self.call__init__wo_kw(Qt.QObject, qt_parent)
-        self.call__init__(BaseDoor, name, **kw)
-    
-    def resultReceived(self, log_name, result):
-        res = BaseDoor.resultReceived(self, log_name, result)
-        self.emit(Qt.SIGNAL("resultUpdated"), res)
-        return res
-    
-    def recordDataReceived(self, s, t, v):
-        if t not in CHANGE_EVTS: return
-        res = BaseDoor.recordDataReceived(self, s, t, v)
-        self.emit(Qt.SIGNAL("recordDataUpdated"), res)
-        return res
-        
-    def macroStatusReceived(self, s, t, v):
-        res = BaseDoor.macroStatusReceived(self, s, t, v)
-        if t == TaurusEventType.Error:
-            macro = None
-        else:
-            macro = self.getRunningMacro()
-        if macro is None: return
-        self.emit(Qt.SIGNAL("macroStatusUpdated"), (macro, res))
-        return res
-    
-    def logReceived(self, log_name, output):
-        res = BaseDoor.logReceived(self, log_name, output)
-        self.emit(Qt.SIGNAL("%sUpdated" % log_name.lower()), output)
-        return res
-
-
-class QMacroServer(BaseMacroServer, Qt.QObject):
-    
-    def __init__(self, name, qt_parent=None, **kw):
-        self.call__init__wo_kw(Qt.QObject, qt_parent)
-        self.call__init__(BaseMacroServer, name, **kw)
-        
-    def typesChanged(self, s, t, v):
-        res = BaseMacroServer.typesChanged(self, s, t, v)
-        self.emit(Qt.SIGNAL("typesUpdated"))
-        return res
-    
-    def elementsChanged(self, s, t, v):
-        res = BaseMacroServer.elementsChanged(self, s, t, v)
-        self.emit(Qt.SIGNAL("elementsUpdated"))
-        return res
-    
-    def macrosChanged(self, s, t, v):
-        res = BaseMacroServer.macrosChanged(self, s, t, v)
-        self.emit(Qt.SIGNAL("macrosUpdated"))
-        return res
-       
-    def on_elements_changed(self, s, t, v):
-        ret = added, removed, changed = \
-            BaseMacroServer.on_elements_changed(self, s, t, v)
-        
-        macros, elements = 0, 0
-        for element in set.union(added, removed, changed):
-            if "MacroCode" in element.interfaces:
-                macros += 1
-            elements += 1
-            if elements and macros:
-                break
-        if elements:
-            self.emit(Qt.SIGNAL("elementsChanged"))
-        if macros:
-            self.emit(Qt.SIGNAL("macrosUpdated"))
-        return ret
-    
-    def on_environment_changed(self, s, t, v):
-        ret = added, removed, changed = \
-            BaseMacroServer.on_environment_changed(self, s, t, v)
-        
-        if added or removed or changed:
-            self.emit(Qt.SIGNAL("environmentChanged"), ret)
-        return ret
-
-
-# ugly access to qtgui level: in future find a better way to register error
-# handlers, maybe in TangoFactory & TaurusManager
-
-from taurus.qt.qtgui.panel import TaurusMessageErrorHandler
-
-class MacroServerMessageErrorHandler(TaurusMessageErrorHandler):
-
-    def setError(self, err_type=None, err_value=None, err_traceback=None):
-        """Translates the given error object into an HTML string and places it
-        in the message panel
-        
-        :param error: an error object (typically an exception object)
-        :type error: object"""
-        
-        msgbox = self._msgbox
-        msgbox.setText(err_value)
-        msg = "<html><body><pre>%s</pre></body></html>" % err_value
-        msgbox.setDetailedHtml(msg)
-
-        html_orig = """<html><head><style type="text/css">{style}</style></head><body>"""
-        exc_info = "".join(err_traceback)
-        style = ""
-        try:
-            import pygments.formatters
-            import pygments.lexers
-        except:
-            pygments = None
-        if pygments is not None:
-            formatter = pygments.formatters.HtmlFormatter()
-            style = formatter.get_style_defs()
-        html = html_orig.format(style=style)
-        if pygments is None:
-            html += "<pre>%s</pre>" % exc_info
-        else:
-            formatter = pygments.formatters.HtmlFormatter()
-            html += pygments.highlight(exc_info, pygments.lexers.PythonTracebackLexer(), formatter)
-        html += "</body></html>"
-        msgbox.setOriginHtml(html)
-
-
-def registerExtensions():
-    """Registers the macroserver extensions in the :class:`taurus.core.tango.TangoFactory`"""
-    import taurus
-    factory = taurus.Factory()
-    factory.registerDeviceClass('MacroServer', QMacroServer)
-    factory.registerDeviceClass('Door', QDoor)
-    
-    # ugly access to qtgui level: in future find a better way to register error
-    # handlers, maybe in TangoFactory & TaurusManager
-    import taurus.core.tango.sardana.macro
-    import taurus.qt.qtgui.panel
-    MacroRunException = taurus.core.tango.sardana.macro.MacroRunException
-    TaurusMessagePanel = taurus.qt.qtgui.panel.TaurusMessagePanel
-    
-    TaurusMessagePanel.registerErrorHandler(MacroRunException, MacroServerMessageErrorHandler)
diff --git a/lib/taurus/qt/qtcore/tango/sardana/model.py b/lib/taurus/qt/qtcore/tango/sardana/model.py
deleted file mode 100644
index a4812d3..0000000
--- a/lib/taurus/qt/qtcore/tango/sardana/model.py
+++ /dev/null
@@ -1,461 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""This module contains a taurus text editor widget."""
-
-__all__ = ["SardanaBaseElementModel", "SardanaElementTypeModel",
-           "SardanaElementPlainModel", "SardanaBaseProxyModel",
-           "SardanaTypeProxyModel",
-           "SardanaBaseTreeItem", "SardanaRootTreeItem",
-           "SardanaElementTreeItem", "SardanaTypeTreeItem",
-           "SardanaEnvironmentModel"]
-
-__docformat__ = 'restructuredtext'
-
-try:
-    import pygments
-    from pygments import highlight
-    from pygments.formatters import HtmlFormatter
-    from pygments.lexers import PythonLexer, PythonTracebackLexer
-except:
-    pygments = None
-
-from taurus.core.taurusdevice import TaurusDevice
-from taurus.qt import Qt
-from taurus.core.util.enumeration import Enumeration
-from taurus.qt.qtcore.model import TaurusBaseTreeItem, TaurusBaseModel, \
-    TaurusBaseProxyModel
-from taurus.qt.qtcore.mimetypes import TAURUS_MODEL_LIST_MIME_TYPE, \
-    TAURUS_MODEL_MIME_TYPE
-
-_MOD, _CLS, _FNC, _TNG = ":/python-module.png", ":/class.png", ":/function.png", ":/tango.png"
-
-TYPE_MAP = {
-    "ControllerLibrary"    : ("Controller libraries", _MOD, "Controller library",),
-    "ControllerClass"      : ("Controller classes", _CLS, "Controller class",),
-    "Controller"           : ("Controllers", _TNG, "Controller",),
-    "Motor"                : ("Motors", _TNG, "Motor",),
-    "PseudoMotor"          : ("Pseudo motors", _TNG, "Pseudo Motor",),
-    "CTExpChannel"         : ("Counter/Timers", _TNG, "Counter/Timer experiment channel",),
-    "CounterTimer"         : ("Counter/Timers", _TNG, "Counter/Timer experiment channel",),
-    "ZeroDExpChannel"      : ("0D channels", _TNG, "0D experiment channel",),
-    "OneDExpChannel"       : ("1D channels", _TNG, "1D experiment channel",),
-    "TwoDExpChannel"       : ("2D channels", _TNG, "2D experiment channel",),
-    "MotorGroup"           : ("Motor groups", _TNG, "Motor group",),
-    "MeasurementGroup"     : ("Measurement groups", _TNG, "Measurement group",),
-    "CommunicationChannel" : ("Communication channels", _TNG, "Communication channel",),
-    "MacroLibrary"         : ("Macro libraries", _MOD, "Macro library",),
-    "MacroClass"           : ("Macro classes", _CLS, "Macro class",),
-    "Instrument"           : ("Instruments", _TNG, "Instrument",),
-    "MacroFunction"        : ("Macro functions", _FNC, "Macro function",),
-}
-
-def getElementTypeLabel(t):
-    return TYPE_MAP.get(t, (t,))[0]
-
-def getElementTypeIcon(t):
-    import taurus.qt.qtgui.resource
-    try:
-        return taurus.qt.qtgui.resource.getIcon(TYPE_MAP.get(t, (None,_TNG))[1])
-    except:
-        return None
-    
-def getElementTypeSize(t):
-    return Qt.QSize(200,24)
-
-def getElementTypeToolTip(t):
-    return TYPE_MAP.get(t, (None,None,'no information'))[2]
-
-
-class SardanaBaseTreeItem(TaurusBaseTreeItem):
-    """A generic node"""
-
-    def data(self, index):
-        """Returns the data of this node for the given index
-        
-        :return: (object) the data for the given index
-        """
-        if index.column() > 0:
-            return None
-        return getElementTypeLabel(self._itemData)
-    
-    def role(self):
-        """Returns the prefered role for the item.
-        This implementation returns taurus.core.taurusbasetypes.TaurusElementType.Unknown
-        
-        This method should be able to return any kind of python object as long
-        as the model that is used is compatible.
-        
-        :return: the role in form of element type"""
-        return 'type'
-
-
-class SardanaRootTreeItem(SardanaBaseTreeItem):
-    pass
-
-
-class SardanaTypeTreeItem(SardanaBaseTreeItem):
-    pass
-
-
-class SardanaElementTreeItem(SardanaBaseTreeItem):
-    
-    def role(self):
-        return self.itemData().type
-    
-    def data(self, index):
-        column, model = index.column(), index.model()
-        role = model.role(column, self.depth())
-        obj = self.itemData()
-        if role == "parent":
-            if hasattr(obj, "klass"):
-                return obj.klass
-            if hasattr(obj, "module"):
-                return obj.module
-            if hasattr(obj, "controller"):
-                return obj.controller
-            if hasattr(obj, "parent"):
-                return obj.parent
-            return None
-        return getattr(obj, role)
-    
-    def toolTip(self, index):
-        if index.column() > 0:
-            return self.data(index)
-        obj = self.itemData()
-        if hasattr(obj, "exc_info") and obj.exc_info is not None:
-            html_orig = '<html><head><style type="text/css">{style}' \
-                        '</style></head><body>'
-            formatter, style = None, ""
-            if pygments is not None:
-                formatter = HtmlFormatter()
-                style = formatter.get_style_defs()
-            txt = html_orig.format(style=style)
-            if formatter is None:
-                txt += "<pre>%s</pre>" % obj.exc_info
-            else:
-                txt += highlight(obj.exc_info, PythonTracebackLexer(),
-                                 formatter)
-            txt += "</body></html>"
-        else:
-            txt = "{0} {1}".format(getElementTypeToolTip(obj.type), obj.name)
-        return txt
-    
-    def icon(self, index):
-        if index.column() > 0:
-            return None
-        return getElementTypeIcon(self.itemData().type)
-
-
-class SardanaBaseElementModel(TaurusBaseModel):
-    
-    ColumnNames = ["Elements", "Controller/Module/Parent"]
-    ColumnRoles = ('Root', 'type', 'name', 'name'), "parent"
-    
-    def __init__(self, parent=None, data=None):
-        TaurusBaseModel.__init__(self, parent=parent, data=data)
-        self.setSelectables(self.ColumnRoles[0])
-    
-    def setDataSource(self, data_source):
-        old_ds = self.dataSource()
-        if old_ds is not None:
-            Qt.QObject.disconnect(old_ds, Qt.SIGNAL('elementsChanged'),
-                                  self.on_elements_changed)
-        if data_source is not None:
-            Qt.QObject.connect(data_source, Qt.SIGNAL('elementsChanged'),
-                               self.on_elements_changed)
-        TaurusBaseModel.setDataSource(self, data_source)
-    
-    def on_elements_changed(self):
-        self.refresh()
-
-    def createNewRootItem(self):
-        return SardanaRootTreeItem(self, self.ColumnNames)
-    
-    def roleIcon(self, role):
-        return getElementTypeIcon(role)
-    
-    def columnIcon(self, column):
-        return self.roleIcon(self.role(column))
-    
-    def roleToolTip(self, role):
-        return getElementTypeToolTip(role)
-
-    def columnToolTip(self, column):
-        return self.roleToolTip(self.role(column))
-    
-    def roleSize(self, role):
-        return getElementTypeSize(role)
-    
-    def columnSize(self, column):
-        role = self.role(column)
-        s = self.roleSize(role)
-        return s
-    
-    def mimeTypes(self):
-        return "text/plain", TAURUS_MODEL_LIST_MIME_TYPE, TAURUS_MODEL_MIME_TYPE
-    
-    def mimeData(self, indexes):
-        ret = Qt.QMimeData()
-        data = []
-        for index in indexes:
-            if not index.isValid(): continue
-            tree_item = index.internalPointer()
-            mime_data_item = tree_item.mimeData(index)
-            if mime_data_item is None:
-                continue
-            data.append(mime_data_item)
-        ret.setData(TAURUS_MODEL_LIST_MIME_TYPE, "\r\n".join(data))
-        ret.setText(", ".join(data))
-        if len(data)==1:
-            ret.setData(TAURUS_MODEL_MIME_TYPE, str(data[0]))
-        return ret
-    
-    def accept(self, element):
-        return True
-    
-    def setupModelData(self, data):
-        dev = self.dataSource()
-        if dev is None:
-            return
-        self.ColumnNames[0] = dev.getSimpleName()
-        info = dev.getElementsInfo()
-        elements = info.getElements()
-        root = self._rootItem
-        type_nodes = {}
-        parent_elements = {}
-        child_elements = set()
-        parent_types = "ControllerLibrary", "MacroLibrary", "Controller"
-        child_types = "ControllerClass", "MacroClass", "MacroFunction", \
-            "Motor", "CounterTimer", "PseudoMotor", "PseudoCounter", \
-            "ZeroDExpChannel", "OneDExpChannel", "TwoDExpChannel"
-        
-        for element in elements:
-            if not self.accept(element):
-                continue
-            element_type = element.type
-            type_item = type_nodes.get(element_type)
-            if type_item is None:
-                type_item = SardanaTypeTreeItem(self, element_type, root)
-                type_nodes[element_type] = type_item
-                root.appendChild(type_item)
-            element_item = SardanaElementTreeItem(self, element, type_item)
-            type_item.appendChild(element_item)
-            if element_type in parent_types:
-                parent_elements[element.name] = element_item
-            elif element_type in child_types:
-                child_elements.add(element)
-        
-        for element in child_elements:
-            try:
-                parent_item = parent_elements[element.parent]
-            except KeyError:
-                self.warning("Error adding %s to parent %s (parent unknown)",
-                             element.name, element.parent)
-            element_item = SardanaElementTreeItem(self, element, parent_item)
-            parent_item.appendChild(element_item)
-            
-
-class SardanaElementTypeModel(SardanaBaseElementModel):
-    pass
-
-
-class SardanaElementPlainModel(SardanaBaseElementModel):
-
-    ColumnNames = "Elements",
-    ColumnRoles = ('Root', 'name',),
-    
-    def setupModelData(self, data):
-        dev = self.dataSource()
-        if dev is None:
-            return
-        info = dev.getElementsInfo()
-        elements = info.getElements()
-        root = self._rootItem
-        skip_types = "ControllerLibrary", "MacroLibrary"
-        
-        for element in elements:
-            element_type = element.type
-            if element_type in skip_types:
-                continue
-            element_item = SardanaElementTreeItem(self, element, root)
-            root.appendChild(element_item)
-
-    
-class SardanaBaseProxyModel(TaurusBaseProxyModel):
-    
-    def filterAcceptsRow(self, sourceRow, sourceParent):
-        sourceModel = self.sourceModel()
-        idx = sourceModel.index(sourceRow, 0, sourceParent)
-        treeItem = idx.internalPointer()
-        
-        if isinstance(treeItem, SardanaElementTreeItem):
-            expr = self.filterRegExp()
-            element = treeItem.itemData()
-            return self.elementMatches(element, expr)
-        return True
-    
-    def elementMatches(self, element, expr):
-        name = element.name
-        if Qt.QString(name).contains(expr):
-            return True
-        name = element.full_name
-        if name is None:
-            return False
-        return Qt.QString(name).contains(expr)
-
-
-class SardanaTypeProxyModel(TaurusBaseProxyModel):
-    """Sardana filter by element type"""
-    
-    def __init__(self, types=None, parent=None):
-        TaurusBaseProxyModel.__init__(self, parent=parent)
-        if types is None:
-            types = ()
-        self._types = types
-    
-    def filterAcceptsRow(self, sourceRow, sourceParent):
-        sourceModel = self.sourceModel()
-        idx = sourceModel.index(sourceRow, 0, sourceParent)
-        treeItem = idx.internalPointer()
-        
-        if isinstance(treeItem, SardanaElementTreeItem):
-            return treeItem.itemData().type in self._types
-        return False
-
-
-class EnvironmentTreeItem(TaurusBaseTreeItem):
-    """An environment node"""
-
-    def role(self):
-        return self.itemData().type
-    
-    def data(self, index):
-        column, model = index.column(), index.model()
-        role = model.role(column, self.depth())
-        obj = self.itemData()
-        if role == "key":
-            return obj[0]
-        elif role == "value":
-            return obj[1]
-        elif role == "datatype":
-            return type(obj[1]).__name__
-    
-    def toolTip(self, index):
-        return "environment '%s'" % self.itemData()[0]
-    
-    def icon(self, index):
-        if index.column() > 0:
-            return None
-        return ":/class.png"
-
-
-class SardanaEnvironmentModel(TaurusBaseModel):
-    
-    ColumnNames = ["Environment", "Value", "Data Type"]
-    ColumnRoles = ('Root', 'key'), 'value', 'datatype'
-    
-    def __init__(self, parent=None, data=None):
-        TaurusBaseModel.__init__(self, parent=parent, data=data)
-        self.setSelectables(self.ColumnRoles[0])
-    
-    def setDataSource(self, data_source):
-        old_ds = self.dataSource()
-        if old_ds is not None:
-            Qt.QObject.disconnect(old_ds, Qt.SIGNAL('environmentChanged'),
-                                  self.on_environment_changed)
-        if data_source is not None:
-            Qt.QObject.connect(data_source, Qt.SIGNAL('environmentChanged'),
-                               self.on_environment_changed)
-        TaurusBaseModel.setDataSource(self, data_source)
-    
-    def on_environment_changed(self):
-        self.refresh()
-
-    def createNewRootItem(self):
-        return SardanaRootTreeItem(self, self.ColumnNames)
-    
-    def roleIcon(self, role):
-        return ":/tango.png"
-    #    return getElementTypeIcon(role)
-    
-    #def columnIcon(self, column):
-    #    return self.roleIcon(self.role(column))
-    
-    def roleToolTip(self, role):
-        cr = self.ColumnRoles
-        if role == cr[0][1]:
-            return "Environment name"
-        elif role == cr[1]:
-            return "Environment value"
-        elif role == cr[2]:
-            return "Environment value data type"
-
-    #def columnToolTip(self, column):
-    #    return self.roleToolTip(self.role(column))
-    
-    def roleSize(self, role):
-        return Qt.QSize(200,24)
-    
-    def columnSize(self, column):
-        role = self.role(column)
-        s = self.roleSize(role)
-        return s
-    
-    def mimeTypes(self):
-        return "text/plain", TAURUS_MODEL_LIST_MIME_TYPE, TAURUS_MODEL_MIME_TYPE
-    
-    def mimeData(self, indexes):
-        ret = Qt.QMimeData()
-        data = []
-        for index in indexes:
-            if not index.isValid(): continue
-            tree_item = index.internalPointer()
-            mime_data_item = tree_item.mimeData(index)
-            if mime_data_item is None:
-                continue
-            data.append(mime_data_item)
-        ret.setData(TAURUS_MODEL_LIST_MIME_TYPE, "\r\n".join(data))
-        ret.setText(", ".join(data))
-        if len(data)==1:
-            ret.setData(TAURUS_MODEL_MIME_TYPE, str(data[0]))
-        return ret
-    
-    def accept(self, environment):
-        return True
-    
-    def setupModelData(self, data):
-        dev = self.dataSource()
-        if dev is None:
-            return
-        
-        env = dev.getEnvironment()
-        root = self._rootItem
-        
-        for key, value in env.items():
-            if not self.accept(key):
-                continue
-            env_item = EnvironmentTreeItem(self, (key, value), root)
-            root.appendChild(env_item)
diff --git a/lib/taurus/qt/qtcore/tango/sardana/pool.py b/lib/taurus/qt/qtcore/tango/sardana/pool.py
deleted file mode 100644
index b492169..0000000
--- a/lib/taurus/qt/qtcore/tango/sardana/pool.py
+++ /dev/null
@@ -1,93 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""Device pool extension for taurus Qt"""
-
-__all__ = ["QPool", "QMeasurementGroup",
-           "registerExtensions"]
-
-import json
-
-from taurus.qt import Qt
-
-from taurus.core.taurusbasetypes import TaurusEventType
-from taurus.core.tango import TangoDevice
-
-CHANGE_EVTS = TaurusEventType.Change, TaurusEventType.Periodic
-
-
-class QPool(Qt.QObject, TangoDevice):
-    
-    def __init__(self, name, qt_parent=None, **kw):
-        self.call__init__wo_kw(Qt.QObject, qt_parent)
-        self.call__init__(TangoDevice, name, **kw)
-
-
-class QMeasurementGroup(Qt.QObject, TangoDevice):
-    
-    def __init__(self, name, qt_parent=None, **kw):
-        self.call__init__wo_kw(Qt.QObject, qt_parent)
-        self.call__init__(TangoDevice, name, **kw)
-
-        self._config = None
-        configuration = self.getAttribute("Configuration")
-        configuration.addListener(self._configurationChanged)
-
-    def __getattr__(self, name):
-        try:
-            return Qt.QObject.__getattr__(self, name)
-        except AttributeError:
-            return TangoDevice.__getattr__(self, name)
-
-    def _configurationChanged(self, s, t, v):
-        if t == TaurusEventType.Config:
-            return
-        if TaurusEventType.Error:
-            self._config = None
-        else:
-            self._config = json.loads(v.value)
-        self.emit(Qt.SIGNAL("configurationChanged"))
-    
-    def getConfiguration(self, cache=True):
-        if self._config is None or not cache:
-            try:
-                v = self.read_attribute("configuration")
-                self._config = json.loads(v.value)
-            except:
-                self._config = None
-        return self._config
-    
-    def setConfiguration(self, config):
-        self.write_attribute("configuration", json.dumps(config))
-
-
-def registerExtensions():
-    """Registers the pool extensions in the :class:`taurus.core.tango.TangoFactory`"""
-    import taurus
-    #import taurus.core.tango.sardana.pool
-    #taurus.core.tango.sardana.pool.registerExtensions()
-    factory = taurus.Factory()
-    #factory.registerDeviceClass('Pool', QPool)
-    factory.registerDeviceClass('MeasurementGroup', QMeasurementGroup)
diff --git a/lib/taurus/qt/qtcore/taurusqlistener.py b/lib/taurus/qt/qtcore/taurusqlistener.py
index d412871..e37de4c 100644
--- a/lib/taurus/qt/qtcore/taurusqlistener.py
+++ b/lib/taurus/qt/qtcore/taurusqlistener.py
@@ -32,7 +32,7 @@ __all__ = ["QTaurusBaseListener", "QObjectTaurusListener"]
 __docformat__ = 'restructuredtext'
 
 from taurus.core.tauruslistener import TaurusListener
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 
 class QTaurusBaseListener(TaurusListener):
diff --git a/lib/taurus/qt/qtcore/util/emitter.py b/lib/taurus/qt/qtcore/util/emitter.py
index 8f66fa4..2dcec97 100644
--- a/lib/taurus/qt/qtcore/util/emitter.py
+++ b/lib/taurus/qt/qtcore/util/emitter.py
@@ -28,7 +28,7 @@ emitter.py: This module provides a task scheduler used by TaurusGrid and TaurusD
 
 from functools import partial
 import taurus
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.core.util.log import Logger
 from taurus.core.util.singleton import Singleton
 import Queue,traceback
diff --git a/lib/taurus/qt/qtcore/util/properties.py b/lib/taurus/qt/qtcore/util/properties.py
index 8a98f35..2a6a497 100644
--- a/lib/taurus/qt/qtcore/util/properties.py
+++ b/lib/taurus/qt/qtcore/util/properties.py
@@ -56,7 +56,7 @@ Not tested yet with the classical declaration:
 """
 
 from functools import partial
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.core.tango.search import *
 
 def join(*seqs):
diff --git a/lib/taurus/qt/qtcore/util/tauruslog.py b/lib/taurus/qt/qtcore/util/tauruslog.py
index a4c9537..b320249 100644
--- a/lib/taurus/qt/qtcore/util/tauruslog.py
+++ b/lib/taurus/qt/qtcore/util/tauruslog.py
@@ -29,7 +29,7 @@ __all__ = ['getQtLogger', 'initTaurusQtLogger']
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus import Logger
 
 qtLogger = None
diff --git a/lib/taurus/qt/qtdesigner/containerplugin.py b/lib/taurus/qt/qtdesigner/containerplugin.py
index ef9c2f7..a679c50 100644
--- a/lib/taurus/qt/qtdesigner/containerplugin.py
+++ b/lib/taurus/qt/qtdesigner/containerplugin.py
@@ -35,14 +35,14 @@
     properties customized:
     - 'model' - will have a '...' button that will open a customized dialog for
       editing the widget model (same has 'Edit model...' task menu item
-"""
-
-from taurus.core.util.log import Logger
-from taurus.qt import Qt
-from taurus.qt import QtDesigner
-
-from taurus.qt.qtgui.container.qcontainer import QGroupWidget
-
+"""
+
+from taurus.core.util.log import Logger
+from taurus.external.qt import Qt
+from taurus.external.qt import QtDesigner
+
+from taurus.qt.qtgui.container.qcontainer import QGroupWidget
+
 #import sip
 
 Q_TYPEID = {'QPyDesignerContainerExtension':     'com.trolltech.Qt.Designer.Container',
diff --git a/lib/taurus/qt/qtdesigner/taurusdesigner.py b/lib/taurus/qt/qtdesigner/taurusdesigner.py
index e373ea1..f0003cf 100644
--- a/lib/taurus/qt/qtdesigner/taurusdesigner.py
+++ b/lib/taurus/qt/qtdesigner/taurusdesigner.py
@@ -28,7 +28,7 @@ import os.path
 import optparse 
 
 import taurus
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 def env_index(env, env_name):
     env_name = str(env_name)
diff --git a/lib/taurus/qt/qtdesigner/taurusplugin/taurusplugin.py b/lib/taurus/qt/qtdesigner/taurusplugin/taurusplugin.py
index dbd05a0..e550e4c 100644
--- a/lib/taurus/qt/qtdesigner/taurusplugin/taurusplugin.py
+++ b/lib/taurus/qt/qtdesigner/taurusplugin/taurusplugin.py
@@ -37,8 +37,8 @@
       editing the widget model (same has 'Edit model...' task menu item
 """
 
-from taurus.qt import Qt
-from taurus.qt import QtDesigner
+from taurus.external.qt import Qt
+from taurus.external.qt import QtDesigner
 
 from taurus.core.util.log import Logger
 
diff --git a/lib/taurus/qt/qtdesigner/tauruspluginplugin.py b/lib/taurus/qt/qtdesigner/tauruspluginplugin.py
index 61adff6..086763b 100644
--- a/lib/taurus/qt/qtdesigner/tauruspluginplugin.py
+++ b/lib/taurus/qt/qtdesigner/tauruspluginplugin.py
@@ -27,7 +27,7 @@
 tauruspluginplugin.py: 
 """
 
-from taurus.qt import QtDesigner
+from taurus.external.qt import QtDesigner
 
 
 def build_qtdesigner_widget_plugin(klass):
diff --git a/lib/taurus/qt/qtgui/application/taurusapplication.py b/lib/taurus/qt/qtgui/application/taurusapplication.py
index 274954f..2b6220f 100644
--- a/lib/taurus/qt/qtgui/application/taurusapplication.py
+++ b/lib/taurus/qt/qtgui/application/taurusapplication.py
@@ -38,7 +38,7 @@ import logging
 import optparse
 import threading
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 from taurus.core.util.log import LogExceptHook, Logger
 import taurus.core.util.argparse
@@ -179,11 +179,11 @@ class TaurusApplication(Qt.QApplication, Logger):
         # lock to safely get singleton elements (like IPython taurus
         # console app)
         self._lock = threading.Lock()
-        
+
         if len(args) == 0:
             args = getattr(sys, 'argv', []),
 
-        parser=None
+        parser = None
         app_name, app_version, org_name, org_domain = None, None, None, None
         if 'app_name' in kwargs:
             app_name = kwargs.pop('app_name')
@@ -245,15 +245,15 @@ class TaurusApplication(Qt.QApplication, Logger):
     def __registerExtensions(self):
         """Registers taurus Qt extensions"""
         try:
-            import taurus.qt.qtcore.tango.sardana
-            taurus.qt.qtcore.tango.sardana.registerExtensions()
+            import sardana.taurus.qt.qtcore.tango.sardana
+            sardana.taurus.qt.qtcore.tango.sardana.registerExtensions()
         except:
-            self.info("Failed to load sardana extensions", exc_info=1)
+            self.debug("Failed to load sardana extensions", exc_info=1)
         try:
             import taurus.core.tango.img
             taurus.core.tango.img.registerExtensions()
         except:
-            self.info("Failed to load image extensions", exc_info=1)
+            self.debug("Failed to load image extensions", exc_info=1)
 
     def __redirect_std(self):
         """Internal method to redirect stdout and stderr to log messages"""
diff --git a/lib/taurus/qt/qtgui/base/taurusbase.py b/lib/taurus/qt/qtgui/base/taurusbase.py
index b014a03..a2a122f 100644
--- a/lib/taurus/qt/qtgui/base/taurusbase.py
+++ b/lib/taurus/qt/qtgui/base/taurusbase.py
@@ -35,14 +35,15 @@ import sys
 
 import PyTango
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 import taurus
 from taurus.core.util import eventfilters
 from taurus.core.taurusbasetypes import TaurusElementType, TaurusEventType
 from taurus.core.taurusattribute import TaurusAttribute
 from taurus.core.taurusdevice import TaurusDevice
-from taurus.core.taurusconfiguration import TaurusConfiguration
+from taurus.core.taurusconfiguration import (TaurusConfiguration,
+                                             TaurusConfigurationProxy)
 from taurus.core.tauruslistener import TaurusListener, TaurusExceptionListener
 from taurus.core.taurusoperation import WriteAttrOperation
 from taurus.qt.qtcore.configuration import BaseConfigurableClass
@@ -398,6 +399,8 @@ class TaurusBaseComponent(TaurusListener, BaseConfigurableClass):
         obj = parent_obj.getChildObj(relative_name)
         if obj is None:
             return None
+        if isinstance(obj, TaurusConfigurationProxy):
+            return obj.getRealConfigClass()
         else:
             return obj.__class__
 
@@ -1470,6 +1473,8 @@ class TaurusBaseWidget(TaurusBaseComponent):
         
         :param ops: (sequence<taurus.core.taurusoperation.TaurusOperation> or None) list of operations to apply. 
                     If None is given (default) the component fetches the pending operations
+                    
+        :return: (bool) False if the apply was aborted by the user. True otherwise.
         """
         
         if ops is None: ops = self.getPendingOperations()
@@ -1484,7 +1489,7 @@ class TaurusBaseWidget(TaurusBaseComponent):
                                                 Qt.QMessageBox.Ok|Qt.QMessageBox.Cancel,
                                                 Qt.QMessageBox.Ok)
             if result != Qt.QMessageBox.Ok:
-                return
+                return False
                 
         elif len(dangerMsgs)>1:
             warningDlg = Qt.QMessageBox(Qt.QMessageBox.Warning, " %d potentially dangerous actions"%len(dangerMsgs),
@@ -1495,8 +1500,9 @@ class TaurusBaseWidget(TaurusBaseComponent):
             warningDlg.setDetailedText(details)
             result = warningDlg.exec_()
             if result != Qt.QMessageBox.Ok:
-                return
+                return False
         self.applyPendingOperations(ops)
+        return True
 
     def setAutoTooltip(self, yesno):
         """Determines if the widget should automatically generate a tooltip
@@ -1539,7 +1545,12 @@ class TaurusBaseWidget(TaurusBaseComponent):
 
 
 class TaurusBaseWritableWidget(TaurusBaseWidget):
-    """The base class for all taurus input widgets"""
+    """The base class for all taurus input widgets
+    
+    it emits the applied signal when the value has been applied.
+    """
+    
+    appliedSignalSignature = 'applied'
     
     def __init__(self, name, taurus_parent=None, designMode = False):
         self.call__init__(TaurusBaseWidget, name, parent=taurus_parent, designMode=designMode)
@@ -1632,13 +1643,17 @@ class TaurusBaseWritableWidget(TaurusBaseWidget):
         operations or (if the ForcedApply flag is True), it writes directly when
         no operations are pending
         
+        It emits the applied signal if apply is not aborted.
+
         :param forceApply: (bool) If True, it behaves as in forceApply mode 
                            (even if the forceApply mode is disabled by 
                            :meth:`setForceApply`)
         '''
         
         if self.hasPendingOperations():
-            self.safeApplyOperations()
+            applied = self.safeApplyOperations()
+            if applied: 
+                self.emit(Qt.SIGNAL(self.appliedSignalSignature))
             return
         
         #maybe we want to force an apply even if there are no pending ops...
@@ -1652,14 +1667,19 @@ class TaurusBaseWritableWidget(TaurusBaseWidget):
         WARNING: USE WITH CARE. In most cases what you need is to make sure
         that pending operations are properly created, not calling this method
         
-        .. seealso: :meth:`forceApply` and :meth:`writeValue`
+        It emits the applied signal if apply is not aborted.
+
+        .. seealso: :meth:`setForceApply` and :meth:`writeValue`
+        
         '''
         try:
             v = self.getValue()
             op = WriteAttrOperation(self.getModelObj(), v, 
                                     self.getOperationCallbacks())
             op.setDangerMessage(self.getDangerMessage())
-            self.safeApplyOperations([op])
+            applied = self.safeApplyOperations([op])
+            if applied:
+                self.emit(Qt.SIGNAL(self.appliedSignalSignature))
             self.info('Force-Applied value = %s'%str(v))
         except:
             self.error('Unexpected exception in forceApply')
diff --git a/lib/taurus/qt/qtgui/base/tauruscontroller.py b/lib/taurus/qt/qtgui/base/tauruscontroller.py
index 7d5316d..440f72f 100644
--- a/lib/taurus/qt/qtgui/base/tauruscontroller.py
+++ b/lib/taurus/qt/qtgui/base/tauruscontroller.py
@@ -35,7 +35,7 @@ __docformat__ = 'restructuredtext'
 
 import weakref
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 from taurus.core.taurusbasetypes import DataFormat, TaurusEventType
 
@@ -168,7 +168,8 @@ class TaurusBaseController(object):
         pass
         
     def _updateToolTip(self, widget):
-        widget.setToolTip(widget.getFormatedToolTip())
+        if widget.getAutoTooltip():
+            widget.setToolTip(widget.getFormatedToolTip())
 
 
 class TaurusAttributeControllerHelper(object):
@@ -259,7 +260,7 @@ class TaurusConfigurationControllerHelper(object):
             try:
                 #@todo: This works for tango, eval and epics configuration names but is not general.
                 #@todo: This should be done calling to the ConfigurationNameValidator
-                self._configParam = model[model.rfind('?configuration=')+15:].lower() 
+                self._configParam = model[model.rfind('?configuration=')+15:]
             except:
                 self._configParam = ''
         return self._configParam
diff --git a/lib/taurus/qt/qtgui/base/taurusqattribute.py b/lib/taurus/qt/qtgui/base/taurusqattribute.py
index 6b839a2..0ed4cbc 100644
--- a/lib/taurus/qt/qtgui/base/taurusqattribute.py
+++ b/lib/taurus/qt/qtgui/base/taurusqattribute.py
@@ -31,7 +31,7 @@ import re
 import PyTango
 
 from taurus.core.taurusvalidator import AttributeNameValidator
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.base import TaurusBaseComponent
 from taurus.core.util.safeeval import SafeEvaluator
 
diff --git a/lib/taurus/qt/qtgui/button/qbuttonbox.py b/lib/taurus/qt/qtgui/button/qbuttonbox.py
index b171f3b..19cf7ab 100644
--- a/lib/taurus/qt/qtgui/button/qbuttonbox.py
+++ b/lib/taurus/qt/qtgui/button/qbuttonbox.py
@@ -31,7 +31,7 @@ __all__ = ["QButtonBox"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 class QButtonBox(Qt.QDialogButtonBox):
     __pyqtSignals__ = ("okClicked()","openClicked()", "saveClicked()", "cancelClicked()",
diff --git a/lib/taurus/qt/qtgui/button/taurusbutton.py b/lib/taurus/qt/qtgui/button/taurusbutton.py
index 9516fd6..6f94986 100644
--- a/lib/taurus/qt/qtgui/button/taurusbutton.py
+++ b/lib/taurus/qt/qtgui/button/taurusbutton.py
@@ -32,7 +32,7 @@ __docformat__ = 'restructuredtext'
 
 import PyTango
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.core.taurusbasetypes import LockStatus, TaurusLockInfo
 from taurus.core.taurusdevice import TaurusDevice
 from taurus.qt.qtgui.base import TaurusBaseWidget
@@ -275,10 +275,10 @@ class TaurusCommandButton(Qt.QPushButton, TaurusBaseWidget):
         name = self.__class__.__name__
         if command is None: command = ""
         if parameters is None: parameters = []
-        if text is None: text = ""
         self._command = command
         self._parameters = parameters
         self._timeout = timeout
+        self._customText = text
         self.call__init__wo_kw(Qt.QPushButton, parent)
         self.call__init__(TaurusBaseWidget, name, designMode=designMode)
         if icon is not None: self.setIcon(Qt.QIcon(icon))
@@ -289,7 +289,7 @@ class TaurusCommandButton(Qt.QPushButton, TaurusBaseWidget):
         
     def getDisplayValue(self):
         '''see :meth:`TaurusBaseComponent.displayValue`'''
-        if len(self._customText) > 0:
+        if self._customText is not None:
             return self._customText
         if len(self._command) == 0:
             return '---'
@@ -443,8 +443,6 @@ class TaurusCommandButton(Qt.QPushButton, TaurusBaseWidget):
         :param customText: (str or None) the custom text. If None passed, it
                            will use the command name
         '''
-        if customText is None:
-            customText = ""
         self._customText = customText
         self._setText(self.getDisplayValue())
     
diff --git a/lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py b/lib/taurus/qt/qtgui/button/test/__init__.py
similarity index 96%
copy from lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py
copy to lib/taurus/qt/qtgui/button/test/__init__.py
index 810fb34..538a327 100644
--- a/lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py
+++ b/lib/taurus/qt/qtgui/button/test/__init__.py
@@ -1,23 +1,21 @@
-#!/usr/bin/env python
-
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
diff --git a/lib/taurus/qt/qtgui/button/test/res/Timeout b/lib/taurus/qt/qtgui/button/test/res/Timeout
new file mode 100644
index 0000000..1b81906
--- /dev/null
+++ b/lib/taurus/qt/qtgui/button/test/res/Timeout
@@ -0,0 +1,124 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+##
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2014 CELLS / ALBA Synchrotron, Bellaterra, Spain
+##
+## Taurus 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.
+##
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+"""
+This module contains classes necessary by a simple python Tango Device Server.
+
+TimeoutDs is used to provoke timeout exceptions on requests.
+It comprises one device class: Timeout. 
+This class implements one attribute: Timeout_attr and one command: TimoutCmd.
+
+Timeout_attr is read/write of type float and its dimension is scalar.
+The attibute value is the time that will take the read/write the attribute.
+
+TimeoutCmd expects as an argument a float scalar.
+The argument value is the time that will take to execute the command.
+
+#@TODO: create .bat file to allow starting on windows
+    
+"""
+
+import PyTango
+import sys
+import time
+
+class TimeoutClass(PyTango.DeviceClass):
+
+    cmd_list = { 'TimeoutCmd' : 
+         [[ PyTango.ArgType.DevFloat, "Time the command execution will take" ],
+          [ PyTango.ArgType.DevVoid, "" ]]                               
+    }
+
+    attr_list = { 'Timeout_attr' : [[PyTango.ArgType.DevFloat ,
+                                     PyTango.AttrDataFormat.SCALAR ,
+                                     PyTango.AttrWriteType.READ_WRITE]]
+    }
+    
+    def __init__(self, name):
+        PyTango.DeviceClass.__init__(self, name)
+        self.set_type("TestDevice")
+        
+class Timeout(PyTango.Device_4Impl):
+
+    def __init__(self,cl,name):
+        PyTango.Device_4Impl.__init__(self, cl, name)
+        self.info_stream('In Timeout.__init__')
+        Timeout.init_device(self)
+
+    @PyTango.DebugIt()
+    def init_device(self):
+        self.info_stream('In Python init_device method')
+        self.set_state(PyTango.DevState.ON)
+        self.attr_duration = 4.
+        self.cmd_duration = 4.
+
+    #------------------------------------------------------------------
+
+    @PyTango.DebugIt()
+    def delete_device(self):
+        self.info_stream('Timeout.delete_device')
+
+    #------------------------------------------------------------------
+    # COMMANDS
+    #------------------------------------------------------------------
+
+    @PyTango.DebugIt()
+    def is_TimeoutCmd_allowed(self):
+        return self.get_state() == PyTango.DevState.ON
+
+    @PyTango.DebugIt()
+    def TimeoutCmd(self, in_data):
+        self.info_stream('TimeoutCmd', in_data)
+        self.cmd_duration = in_data
+        time.sleep(self.cmd_duration)
+    
+    #------------------------------------------------------------------
+    # ATTRIBUTES
+    #------------------------------------------------------------------
+
+    @PyTango.DebugIt()
+    def read_attr_hardware(self, data):
+        self.info_stream('In read_attr_hardware')
+
+    @PyTango.DebugIt()
+    def read_Timeout_attr(self, the_att):
+        self.info_stream("read_Long_attr")
+        time.sleep(self.attr_duration)
+        the_att.set_value(self.attr_duration)
+    
+    @PyTango.DebugIt()
+    def write_Timeout_attr(self, the_att):
+        self.info_stream("write_Short_attr_rw")
+        self.attr_duration = the_att.get_write_value()
+        time.sleep(self.attr_duration)
+
+
+if __name__ == '__main__':
+    util = PyTango.Util(sys.argv)
+    util.add_class(TimeoutClass, Timeout)
+
+    U = PyTango.Util.instance()
+    U.server_init()
+    U.server_run()
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors/__init__.py b/lib/taurus/qt/qtgui/button/test/res/__init__.py
similarity index 95%
rename from lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors/__init__.py
rename to lib/taurus/qt/qtgui/button/test/res/__init__.py
index 1fce60a..d36d30e 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors/__init__.py
+++ b/lib/taurus/qt/qtgui/button/test/res/__init__.py
@@ -3,24 +3,22 @@
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
 #############################################################################
-
-from senv import SenvEditor
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/button/test/test_taurusbutton.py b/lib/taurus/qt/qtgui/button/test/test_taurusbutton.py
new file mode 100644
index 0000000..3dbb82b
--- /dev/null
+++ b/lib/taurus/qt/qtgui/button/test/test_taurusbutton.py
@@ -0,0 +1,97 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+##
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+##
+## Taurus 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.
+##
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+
+"""Unit tests for taurus.button"""
+
+
+from taurus.external import unittest
+
+from taurus.test import getResourcePath
+from taurus.qt.qtgui.test import BaseWidgetTestCase, GenericWidgetTestCase
+from taurus.qt.qtgui.button import TaurusCommandButton
+
+# The following are Tango-centric imports.
+# TODO: change them if/when TaurusCommandbuttongets generalized
+from PyTango import CommunicationFailed
+from taurus.core.tango.starter import ProcessStarter
+
+
+class TaurusCommandButtonTest(GenericWidgetTestCase, unittest.TestCase):
+    _klass = TaurusCommandButton
+    _modelnames = ['sys/tg_test/1', None, 'sys/database/2', '']
+
+
+class TaurusCommandButtonTest2(BaseWidgetTestCase, unittest.TestCase):
+
+    _klass = TaurusCommandButton
+    initkwargs = dict(command='TimeoutCmd')
+
+    def setUp(self):
+        '''
+        Requisites:
+         - instantiate the widget
+         - make sure that the the timeout server is ready
+        '''
+        #Call base class setup (instantiate the widget,...)
+        BaseWidgetTestCase.setUp(self)
+        #get path to DS and executable
+        timeoutExec = getResourcePath('taurus.qt.qtgui.button.test.res',
+                                      'Timeout')
+        #create starter for the Timeout server
+        self._starter = ProcessStarter(timeoutExec, 'Timeout/unittest')
+        #register timeoutserver  #TODO: guarantee that devname is not in use
+        devname = 'unittests/timeout/temp-1'
+        self._starter.addNewDevice(devname, klass='Timeout')
+        #start Timeout server
+        self._starter.startDs()
+
+        #Configure the widget
+        self._widget.setModel(devname)
+
+    def tearDown(self):
+        '''Stop the timeout server and undo changes to the database'''
+
+        self._widget.setModel(None)
+        #remove timeoutserver
+        self._starter.cleanDb(force=True)
+
+    def testTimeOutError(self):
+        '''Check that the timeout property works'''
+        #lets use commands that take at least 200ms in returning
+        self._widget.setParameters([.2])
+        #With a long timeout it should work...
+        self._widget.setTimeout(10)
+        ret = self._widget._onClicked()
+        msg = 'expected return None when timeout >> command response time'
+        self.assertIsNone(ret, msg)
+        #...but with a shorter timeout we expect a timeout exception
+        self._widget.setTimeout(.1)
+        self.assertRaises(CommunicationFailed, self._widget._onClicked)
+
+
+if __name__ == "__main__":
+    #import sys;sys.argv = ['', 'Test.testName']
+    unittest.main()
diff --git a/lib/taurus/qt/qtcore/tango/sardana/__init__.py b/lib/taurus/qt/qtgui/compact/__init__.py
similarity index 79%
rename from lib/taurus/qt/qtcore/tango/sardana/__init__.py
rename to lib/taurus/qt/qtgui/compact/__init__.py
index ac993e9..6729529 100644
--- a/lib/taurus/qt/qtcore/tango/sardana/__init__.py
+++ b/lib/taurus/qt/qtgui/compact/__init__.py
@@ -6,7 +6,7 @@
 ## 
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+## Copyright 2013 CELLS / ALBA Synchrotron, Bellaterra, Spain
 ## 
 ## Taurus is free software: you can redistribute it and/or modify
 ## it under the terms of the GNU Lesser General Public License as published by
@@ -23,16 +23,10 @@
 ##
 #############################################################################
 
-"""
-Sardana extension for taurus Qt
-"""
+"""This package contains a collection of taurus Qt widgets that combine other widgets
+to provide several functionalities in a reduced space"""
 
 __docformat__ = 'restructuredtext'
 
-def registerExtensions():
-    import pool
-    import macroserver
-    
-    pool.registerExtensions()
-    macroserver.registerExtensions()
-    
\ No newline at end of file
+from .abstractswitcher import *
+from .basicswitcher import *
diff --git a/lib/taurus/qt/qtgui/compact/abstractswitcher.py b/lib/taurus/qt/qtgui/compact/abstractswitcher.py
new file mode 100644
index 0000000..8e49e18
--- /dev/null
+++ b/lib/taurus/qt/qtgui/compact/abstractswitcher.py
@@ -0,0 +1,380 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+## 
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2013 CELLS / ALBA Synchrotron, Bellaterra, Spain
+## 
+## Taurus 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.
+## 
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+"""This module provides base classes from which the compact widgets should inherit 
+"""
+
+__all__ = ["TaurusReadWriteSwitcher"]
+
+__docformat__ = 'restructuredtext'
+
+from taurus.external.qt import Qt
+from taurus.qt.qtgui.container import TaurusWidget
+from taurus.qt.qtgui.base import TaurusBaseWritableWidget
+
+class TaurusReadWriteSwitcher(TaurusWidget):
+    '''
+    This is a base class for creating widgets that can switch 
+    beetween read and write mode by combining a Taurus widget for reading
+    and a Taurus Widget for writing.
+    
+    For example, if you want to combine a TaurusLabel with a 
+    TaurusValueLineEdit, you can implement it as follows::
+    
+        class MyRWSwitcher(TaurusReadWriteSwitcher):
+            readWClass = TaurusLabel
+            writeWClass = TaurusValueLineEdit 
+            
+    Alternatively, you can instantiate the TaurusReadWriteSwitcher class 
+    directly and pass the read and write classes to the constructor::
+    
+        w = TaurusReadWriteSwitcher(readWClass=TaurusLabel, 
+                                    writeWClass=TaurusValueLineEdit)
+    
+    Or you can even set the read and write widgets (instead of classes) 
+    after instantiation::
+    
+        w = TaurusReadWriteSwitcher()
+        a = TaurusLabel()
+        b = TaurusValueLineEdit()
+        w.setReadWidget(a)
+        w.setWriteWidget(b)
+    
+    TaurusReadWriteSwitcher will normally show the read widget by default,
+    but it will allow to switch to "edit mode" (where the write widget 
+    is shown instead). Enetering and exiting the edit mode is controlled
+    by "triggers". Triggers can be key presses, QEvents or signals.
+    
+    The default implementation sets pressing F2 or doubleclicking the read 
+    widget as the triggers for entering edit mode, and pressing Escape,
+    losing the focus or applying the value on the write widget as the 
+    triggers for leaving the edit mode. This can be customized by changing 
+    `enterEditTriggers` and `exitEditTriggers` class members or by passing 
+    `enterEditTriggers` and `exitEditTriggers` keyword parameters to the
+    constructor of TaurusReadWriteSwitcher:
+    
+        - `enterEditTriggers` is a tuple containing one or more of the following:
+        
+            - key shortcut (either a Qt.Qt.Key or a QKeySequence)
+            - event type on the read widget (a Qt.QEvent.Type)
+            - signal from the read widget (a str representing a Signal signature)
+        
+        - `exitEditTriggers` is a tuple containing one or more of the following:
+        
+            - key shortcut (either a Qt.Qt.Key or a QKeySequence)
+            - event type on the write widget (a Qt.QEvent.Type)
+            - signal from the write widget (a str representing a Signal signature)
+
+    #@todo: check integration with designer
+    
+    '''    
+    readWClass = None
+    writeWClass = None
+    
+    enterEditTriggers = (Qt.Qt.Key_F2, Qt.QEvent.MouseButtonDblClick)
+    exitEditTriggers = (Qt.Qt.Key_Escape, Qt.QEvent.FocusOut, TaurusBaseWritableWidget.appliedSignalSignature)
+
+    def __init__(self, parent=None, designMode = False, 
+                 readWClass=None, writeWClass=None, 
+                 enterEditTriggers=None, exitEditTriggers=None):
+        
+        TaurusWidget.__init__(self, parent=parent, designMode=designMode)
+        
+        self.setFocusPolicy(Qt.Qt.StrongFocus)
+        self.setLayout(Qt.QStackedLayout())
+        self.readWidget = None
+        self.writeWidget = None
+        
+        #Use parameters from constructor args or defaults from class
+        self.readWClass = readWClass or self.readWClass
+        self.writeWClass = writeWClass or self.writeWClass
+        self.enterEditTriggers = enterEditTriggers or self.enterEditTriggers
+        self.exitEditTriggers = exitEditTriggers or self.exitEditTriggers
+                
+        #classify the triggers
+        sc, et, sig = self._classifyTriggers(self.enterEditTriggers)
+        self.enterEditShortCuts = sc
+        self.enterEditEventTypes = et
+        self.enterEditSignals = sig
+        sc, et, sig = self._classifyTriggers(self.exitEditTriggers)
+        self.exitEditShortCuts = sc
+        self.exitEditEventTypes = et
+        self.exitEditSignals = sig
+                
+        #Actions for entering and exiting the edit
+        self.enterEditAction = Qt.QAction("Start Editing", self)
+        self.enterEditAction.setShortcuts(self.enterEditShortCuts)
+        self.enterEditAction.setShortcutContext(Qt.Qt.WidgetWithChildrenShortcut)
+        self.addAction(self.enterEditAction)
+        self.exitEditAction = Qt.QAction("Abort Editing", self)
+        self.exitEditAction.setShortcuts(self.exitEditShortCuts)
+        self.exitEditAction.setShortcutContext(Qt.Qt.WidgetWithChildrenShortcut)
+        self.addAction(self.exitEditAction)
+        self.connect(self.enterEditAction, Qt.SIGNAL("triggered()"), self._onEnterEditActionTriggered)
+        self.connect(self.exitEditAction, Qt.SIGNAL("triggered()"), self._onExitEditActionTriggered)
+        
+        #add read and write widgets        
+        if self.readWClass is not None:
+            self.setReadWidget(self.readWClass())
+        if self.writeWClass is not None:
+            self.setWriteWidget(self.writeWClass())
+    
+    def _classifyTriggers(self, triggers):
+        '''classifies the diferent types of triggers
+        
+        :return: (tuple) a tuple of 3 lists: shortcuts,enventypes,signals
+        '''
+        shortcuts = []
+        eventTypes = []
+        signals = []
+        for e in triggers:
+            if isinstance(e, (Qt.Qt.Key, Qt.QKeySequence)):
+                shortcuts.append(Qt.QKeySequence(e))
+            elif isinstance(e, Qt.QEvent.Type):
+                eventTypes.append(e)
+            elif isinstance(e, (basestring, Qt.QString)):
+                signals.append(Qt.SIGNAL(e))
+            else:
+                raise TypeError('Unsupported trigger type: %s'%repr(type(e)))
+        return shortcuts, eventTypes, signals
+            
+    def eventFilter(self, obj, event):
+        '''reimplemented to intercept events from the read and write widgets''' 
+        if obj is self.readWidget and event.type() in self.enterEditEventTypes:
+            self.enterEdit()
+            return True # Note that we do not let it propagate further!
+        if obj is self.writeWidget and event.type() in self.exitEditEventTypes:
+            self.exitEdit()
+            return True # Note that we do not let it propagate further!
+        #default fallback
+        return obj.eventFilter(obj, event)
+        
+    def setReadWidget(self, widget):
+        '''set the read Widget to be used. You can reimplement this 
+        method to tweak the read widget. 
+        
+        :param widget: (QWidget) This should be Taurus widget
+        '''
+        if self.readWidget is not None:
+            raise RuntimeError('ReadWidget already set') #@todo: relax this limitation
+        self.readWidget = widget
+        self.layout().insertWidget(0, self.readWidget)
+        self.readWidget.setCursor(Qt.Qt.IBeamCursor)
+        self.readWidget.setModel(self.getModelName())
+        #setup EnterEdit triggers
+        if self.enterEditEventTypes:
+            self.readWidget.installEventFilter(self)
+        for sig in self.enterEditSignals:
+            self.connect(self.readWidget, sig, self.enterEdit)
+        #update size policy
+        self._updateSizePolicy()
+        #register configuration (we use the class name to avoid mixing configs in the future)
+        self.registerConfigDelegate(self.readWidget, name='_R_'+self.readWidget.__class__.__name__)
+    
+    def setWriteWidget(self, widget):
+        '''set the write Widget to be used You can reimplement this 
+        method to tweak the write widget.
+        
+        :param widget: (Qt.QWidget) This should be Taurus widget
+                       (typically a TaurusBaseWritableWidget)
+        '''
+        if self.writeWidget is not None:
+            raise RuntimeError('WriteWidget already set') #@todo: relax this limitation
+        self.writeWidget = widget
+        self.layout().insertWidget(1, self.writeWidget)
+        self.writeWidget.setModel(self.getModelName())
+        if self.exitEditEventTypes:
+            self.writeWidget.installEventFilter(self)
+        for sig in self.exitEditSignals:
+            self.connect(self.writeWidget, sig, self.exitEdit)
+        #update size policy
+        self._updateSizePolicy()
+        #register configuration (we use the class name to avoid mixing configs in the future)
+        self.registerConfigDelegate(self.readWidget, name='_W_'+self.writeWidget.__class__.__name__)
+        
+    def enterEdit(self, *args, **kwargs):
+        '''Slot for entering Edit mode
+        
+        .. note:: args and kwargs are ignored
+        ''' 
+        self.enterEditAction.trigger()
+    
+    def exitEdit(self, *args, **kwargs):
+        '''Slot for entering Edit mode
+        
+        .. note:: args and kwargs are ignored
+        '''
+        self.exitEditAction.trigger()
+    
+    def _onEnterEditActionTriggered(self):
+        self.layout().setCurrentIndex(1)
+    
+    def _onExitEditActionTriggered(self):
+        self.layout().setCurrentIndex(0)
+        
+    def _updateSizePolicy(self):
+        '''Update the size policy of the switcher widget to the most restrictive
+        combination of the policies of the read and write widgets'''
+        policy = None
+        for w in self.readWidget, self.writeWidget:
+            if w is not None:
+                p = w.sizePolicy()
+                if policy is None:
+                    policy = p
+                else:
+                    h = policy.horizontalPolicy() & p.horizontalPolicy()
+                    v = policy.verticalPolicy() & p.verticalPolicy()
+                    policy = Qt.QSizePolicy(h, v)
+        if policy is not None:
+            self.setSizePolicy(policy)
+
+    def setModel(self, model):
+        '''This implementation propagates the model to the read and write widgets.
+        You may reimplement it to do things like passing different models to each.
+        '''
+        if self.readWidget is not None:
+            self.readWidget.setModel(model)
+        if self.writeWidget is not None:
+            self.writeWidget.setModel(model)
+        TaurusWidget.setModel(self, model)
+    
+    @classmethod
+    def getQtDesignerPluginInfo(cls):
+        print cls
+        ret = TaurusWidget.getQtDesignerPluginInfo()
+        ret['module'] = 'taurus.qt.qtgui.compact'
+        ret['group'] = 'Taurus R+W'
+        ret['icon'] = ":/designer/frame.png"
+        if (cls.readWClass or cls.readWClass) is None:
+            ret['container'] = True #for base classes
+        else:
+            ret['container'] = False #for classes which already define the subwidgets
+        return ret
+
+    model = Qt.pyqtProperty("QString", TaurusWidget.getModel,
+                            setModel,
+                            TaurusWidget.resetModel)
+
+######################################
+## This block (and something more would be needed if we decide  
+## to implement TaurusReadWriteSwitcher as a TaurusBaseWritableWidget
+######################################
+#        
+#    def setDangerMessage(self, dangerMessage=None):
+#        '''propagate to writeWidget'''
+#        TaurusWidget.setDangerMessage(self, dangerMessage)
+#        try:
+#            return self.writeWidget.setDangerMessage(dangerMessage)
+#        except AttributeError:
+#            pass
+#    
+#    def setForceDangerousOperations(self, yesno):
+#        '''propagate to writeWidget'''
+#        TaurusWidget.setForceDangerousOperations(self, yesno)
+#        try:
+#            return self.writeWidget.setForceDangerousOperations(yesno)
+#        except AttributeError:
+#            pass
+#  
+#                
+#######################################
+    
+
+        
+def demo1():
+    '''Simple demo'''
+    import sys
+    from taurus.qt.qtgui.application import TaurusApplication
+    from taurus.qt.qtgui.display import TaurusLabel
+    from taurus.qt.qtgui.input import TaurusValueLineEdit
+    
+    app = TaurusApplication()
+        
+    w = TaurusReadWriteSwitcher(readWClass=TaurusLabel, 
+                                writeWClass=TaurusValueLineEdit)
+    w.model = "sys/tg_test/1/long_scalar"
+    
+    w.show()
+    sys.exit(app.exec_()) 
+
+def demo2():
+    '''demo of integrability in a form'''
+    import sys
+    from taurus.qt.qtgui.panel import TaurusForm
+    from taurus.qt.qtgui.application import TaurusApplication
+    from taurus.qt.qtgui.display import TaurusLabel
+    from taurus.qt.qtgui.input import TaurusValueLineEdit
+    
+    class DemoSwitcher(TaurusReadWriteSwitcher):
+            readWClass = TaurusLabel
+            writeWClass = TaurusValueLineEdit 
+            exitEditTriggers = ('editingFinished()',Qt.Qt.Key_Escape)
+
+    
+    app = TaurusApplication()
+    
+    f = TaurusForm()
+    f.model = ['sys/tg_test/1/long_scalar', 'sys/tg_test/1/long_scalar']
+    
+    f[0].setReadWidgetClass(DemoSwitcher)
+    f[0].setWriteWidgetClass(None)
+    
+    f.show()
+    sys.exit(app.exec_())
+    
+def demo3():
+    '''simple demo including more than one widget'''
+    
+    import sys
+    from taurus.qt.qtgui.application import TaurusApplication
+    from taurus.qt.qtgui.display import TaurusLabel, TaurusBoolLed
+    from taurus.qt.qtgui.input import TaurusValueLineEdit, TaurusValueCheckBox
+    
+    app = TaurusApplication()
+        
+    w1 = TaurusReadWriteSwitcher(readWClass=TaurusLabel, 
+                                writeWClass=TaurusValueLineEdit)
+    w1.model = "sys/tg_test/1/long_scalar"
+    
+    w2 = TaurusReadWriteSwitcher(readWClass=TaurusBoolLed, 
+                                writeWClass=TaurusValueCheckBox)
+    w2.model = "sys/tg_test/1/boolean_scalar"
+    
+    
+    f = Qt.QWidget()
+    f.setLayout(Qt.QVBoxLayout())
+    f.layout().addWidget(w1)
+    f.layout().addWidget(w2)
+    f.layout().addWidget(TaurusReadWriteSwitcher()) #add non-initialized switcher
+    f.show()
+    
+    sys.exit(app.exec_()) 
+
+
+if __name__ == "__main__":
+    #demo1()
+    #demo2()
+    demo3()
+    
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/compact/basicswitcher.py b/lib/taurus/qt/qtgui/compact/basicswitcher.py
new file mode 100644
index 0000000..567a153
--- /dev/null
+++ b/lib/taurus/qt/qtgui/compact/basicswitcher.py
@@ -0,0 +1,76 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+## 
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2013 CELLS / ALBA Synchrotron, Bellaterra, Spain
+## 
+## Taurus 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.
+## 
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+"""This module provides some basic usable widgets based on TaurusReadWriteSwitcher
+"""
+
+__all__ = ["TaurusLabelEditRW", "TaurusLabelEditRW"]
+
+__docformat__ = 'restructuredtext'
+
+from taurus.external.qt import Qt
+from taurus.qt.qtgui.display import TaurusLabel, TaurusBoolLed
+from taurus.qt.qtgui.input import TaurusValueLineEdit, TaurusValueCheckBox
+from abstractswitcher import TaurusReadWriteSwitcher
+
+class TaurusLabelEditRW(TaurusReadWriteSwitcher):
+    '''A Switcher combining a TaurusLabel and a TaurusValueLineEdit''' 
+    readWClass = TaurusLabel
+    writeWClass = TaurusValueLineEdit 
+        
+class TaurusBoolRW(TaurusReadWriteSwitcher):
+    '''A Switcher combining a TaurusBoolLed and a TaurusValueCheckBox'''
+    readWClass = TaurusBoolLed
+    writeWClass = TaurusValueCheckBox
+    
+    def setWriteWidget(self, widget):
+        widget.setShowText(False)
+        TaurusReadWriteSwitcher.setWriteWidget(self, widget)
+        
+def demo():
+    '''demo of integrability in a form'''
+    import sys
+    from taurus.qt.qtgui.panel import TaurusForm
+    from taurus.qt.qtgui.application import TaurusApplication
+    
+    app = TaurusApplication()
+    
+    f = TaurusForm()
+    f.model = ['sys/tg_test/1/long_scalar', 'sys/tg_test/1/long_scalar',
+               'sys/tg_test/1/boolean_scalar', 'sys/tg_test/1/boolean_scalar']
+    
+    f[0].setReadWidgetClass(TaurusLabelEditRW)
+    f[0].setWriteWidgetClass(None)
+    f[2].setReadWidgetClass(TaurusBoolRW)
+    f[2].setWriteWidgetClass(None)
+    
+    
+    f.show()
+    sys.exit(app.exec_())
+
+
+if __name__ == "__main__":
+    demo()
+    
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/console/taurusconsole.py b/lib/taurus/qt/qtgui/console/taurusconsole.py
index 8ee7355..97fe691 100644
--- a/lib/taurus/qt/qtgui/console/taurusconsole.py
+++ b/lib/taurus/qt/qtgui/console/taurusconsole.py
@@ -33,7 +33,7 @@ __all__ = ["TaurusConsole"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurusconsolefactory import TaurusConsoleFactory
 
 
diff --git a/lib/taurus/qt/qtgui/console/taurusconsoleapplication.py b/lib/taurus/qt/qtgui/console/taurusconsoleapplication.py
index 0b088f8..9f749a5 100644
--- a/lib/taurus/qt/qtgui/console/taurusconsoleapplication.py
+++ b/lib/taurus/qt/qtgui/console/taurusconsoleapplication.py
@@ -34,7 +34,7 @@ __all__ = ["TaurusConsoleApplication"]
 __docformat__ = 'restructuredtext'
 
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 try:
     from IPython.qt.console.qtconsoleapp import IPythonQtConsoleApp
diff --git a/lib/taurus/qt/qtgui/console/taurusconsoleextensions.py b/lib/taurus/qt/qtgui/console/taurusconsoleextensions.py
index f10edbd..325c2bf 100644
--- a/lib/taurus/qt/qtgui/console/taurusconsoleextensions.py
+++ b/lib/taurus/qt/qtgui/console/taurusconsoleextensions.py
@@ -31,7 +31,7 @@ import weakref
 
 from taurus import Device
 from taurus.core.util.enumeration import Enumeration 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 from IPython.config.loader import Config
 
@@ -109,14 +109,13 @@ class TangoConsoleExtension(BaseConsoleExtension):
 from IPython.core.profiledir import ProfileDir, ProfileDirError
 from IPython.utils.path import get_ipython_dir
 
-from sardana.spock.genutils import create_spock_profile, get_macroserver_for_door
-
 def create_sardana_profile(profile, door_name):
 
     ipython_dir = get_ipython_dir()
     try:
         ProfileDir.find_profile_dir_by_name(ipython_dir, profile)
     except ProfileDirError:
+        from sardana.spock.genutils import create_spock_profile
         create_spock_profile(ipython_dir, "spock", profile, door_name)
 
 def get_profile_from_args(args):
diff --git a/lib/taurus/qt/qtgui/console/taurusconsolefactory.py b/lib/taurus/qt/qtgui/console/taurusconsolefactory.py
index 65cebbb..ff7f4f6 100644
--- a/lib/taurus/qt/qtgui/console/taurusconsolefactory.py
+++ b/lib/taurus/qt/qtgui/console/taurusconsolefactory.py
@@ -34,7 +34,7 @@ __all__ = ["TaurusConsoleFactory"]
 __docformat__ = 'restructuredtext'
 
 from taurus.core.util.singleton import Singleton
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 from taurusconsolewidget import TaurusConsoleWidget
 from taurusconsolewindow import TaurusConsoleWindow
diff --git a/lib/taurus/qt/qtgui/console/taurusconsolewindow.py b/lib/taurus/qt/qtgui/console/taurusconsolewindow.py
index 68d5f47..13fdad0 100644
--- a/lib/taurus/qt/qtgui/console/taurusconsolewindow.py
+++ b/lib/taurus/qt/qtgui/console/taurusconsolewindow.py
@@ -35,7 +35,7 @@ __docformat__ = 'restructuredtext'
 
 import functools
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 try:
     from IPython.qt.console.mainwindow import MainWindow
 except ImportError:
diff --git a/lib/taurus/qt/qtgui/container/qcontainer.py b/lib/taurus/qt/qtgui/container/qcontainer.py
index daee76d..c85d5e4 100644
--- a/lib/taurus/qt/qtgui/container/qcontainer.py
+++ b/lib/taurus/qt/qtgui/container/qcontainer.py
@@ -32,7 +32,7 @@ __docformat__ = 'restructuredtext'
 import sys
 import json
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.resource import getThemePixmap, getThemeIcon, getStandardIcon
 
 _TitleBarStyleExpanded = """.QFrame {{
diff --git a/lib/taurus/qt/qtgui/container/taurusbasecontainer.py b/lib/taurus/qt/qtgui/container/taurusbasecontainer.py
index dd053f4..5ab285b 100644
--- a/lib/taurus/qt/qtgui/container/taurusbasecontainer.py
+++ b/lib/taurus/qt/qtgui/container/taurusbasecontainer.py
@@ -29,7 +29,7 @@ __all__ = ["TaurusBaseContainer"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 from taurus.qt.qtgui.base import TaurusBaseComponent, TaurusBaseWidget
 
diff --git a/lib/taurus/qt/qtgui/container/taurusframe.py b/lib/taurus/qt/qtgui/container/taurusframe.py
index 140ec4f..9edffcb 100644
--- a/lib/taurus/qt/qtgui/container/taurusframe.py
+++ b/lib/taurus/qt/qtgui/container/taurusframe.py
@@ -29,7 +29,7 @@ __all__ = ["TaurusFrame"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.base import TaurusBaseComponent
 from taurusbasecontainer import TaurusBaseContainer
 
diff --git a/lib/taurus/qt/qtgui/container/taurusgroupbox.py b/lib/taurus/qt/qtgui/container/taurusgroupbox.py
index 02f5558..5d8fa6d 100644
--- a/lib/taurus/qt/qtgui/container/taurusgroupbox.py
+++ b/lib/taurus/qt/qtgui/container/taurusgroupbox.py
@@ -29,7 +29,7 @@ __all__ = ["TaurusGroupBox"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurusbasecontainer import TaurusBaseContainer
 
 
diff --git a/lib/taurus/qt/qtgui/container/taurusgroupwidget.py b/lib/taurus/qt/qtgui/container/taurusgroupwidget.py
index 09b9281..45e01fb 100644
--- a/lib/taurus/qt/qtgui/container/taurusgroupwidget.py
+++ b/lib/taurus/qt/qtgui/container/taurusgroupwidget.py
@@ -29,7 +29,7 @@ __all__ = ["TaurusGroupWidget"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from qcontainer import QGroupWidget
 from taurusbasecontainer import TaurusBaseContainer
 
diff --git a/lib/taurus/qt/qtgui/container/taurusmainwindow.py b/lib/taurus/qt/qtgui/container/taurusmainwindow.py
index 69bf285..dad3bb7 100644
--- a/lib/taurus/qt/qtgui/container/taurusmainwindow.py
+++ b/lib/taurus/qt/qtgui/container/taurusmainwindow.py
@@ -34,7 +34,7 @@ __docformat__ = 'restructuredtext'
 import os
 import sys
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurusbasecontainer import TaurusBaseContainer
 
 from taurus.qt.qtcore.configuration import BaseConfigurableClass
@@ -798,7 +798,7 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
         self.__helpManualURI = uri
         if self.helpManualBrowser is None:
             try:
-                from taurus.qt.QtWebKit import QWebView
+                from taurus.external.qt.QtWebKit import QWebView
                 self.helpManualBrowser = QWebView()
             except:
                 self.helpManualBrowser = Qt.QLabel('QWebkit is not available')
@@ -845,7 +845,7 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
             username = getSystemUserName()
             appname = unicode(Qt.QApplication.applicationName())
             key = "__socket_%s-%s__"%(username,appname)
-        from taurus.qt import QtNetwork       
+        from taurus.external.qt import QtNetwork
         socket = QtNetwork.QLocalSocket(self) 
         socket.connectToServer(key)
         alive = socket.waitForConnected(3000)
@@ -857,11 +857,7 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
             self.connect(self.socketServer, Qt.SIGNAL("newConnection()"), self.onIncommingSocketConnection)
             ok = self.socketServer.listen(key)
             if not ok:
-                try:
-                    AddressInUseError = Qt.QAbstractSocket.AddressInUseError #This fails in some PyQt4 versions...
-                except:
-                    from PyQt4.QtNetwork import QAbstractSocket #...so we try this other way of accessing
-                    AddressInUseError = QAbstractSocket.AddressInUseError 
+                AddressInUseError = QtNetwork.QAbstractSocket.AddressInUseError
                 if self.socketServer.serverError() == AddressInUseError:
                     self.info('Resetting unresponsive socket with key "%s"',key)
                     if hasattr(self.socketServer, 'removeServer'): #removeServer() was added in Qt4.5. (In Qt4.4 a call to listen() removes a previous server)  
diff --git a/lib/taurus/qt/qtgui/container/taurusscrollarea.py b/lib/taurus/qt/qtgui/container/taurusscrollarea.py
index f9b1799..d91eb7f 100644
--- a/lib/taurus/qt/qtgui/container/taurusscrollarea.py
+++ b/lib/taurus/qt/qtgui/container/taurusscrollarea.py
@@ -29,7 +29,7 @@ __all__ = ["TaurusScrollArea"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.base import TaurusBaseComponent
 
 from taurusbasecontainer import TaurusBaseContainer
diff --git a/lib/taurus/qt/qtgui/container/tauruswidget.py b/lib/taurus/qt/qtgui/container/tauruswidget.py
index f838237..bccbe1d 100644
--- a/lib/taurus/qt/qtgui/container/tauruswidget.py
+++ b/lib/taurus/qt/qtgui/container/tauruswidget.py
@@ -29,7 +29,7 @@ __all__ = ["TaurusWidget"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurusbasecontainer import TaurusBaseContainer
 
 
diff --git a/lib/taurus/qt/qtgui/dialog/taurusconfigurationdialog.py b/lib/taurus/qt/qtgui/dialog/taurusconfigurationdialog.py
index 2dabc57..5384e94 100644
--- a/lib/taurus/qt/qtgui/dialog/taurusconfigurationdialog.py
+++ b/lib/taurus/qt/qtgui/dialog/taurusconfigurationdialog.py
@@ -29,7 +29,7 @@ __all__ = ["TaurusConfigurationDialog"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.panel.taurusconfigurationpanel import TaurusConfigurationPanel
 
 
diff --git a/lib/taurus/qt/qtgui/dialog/taurusinputdialog.py b/lib/taurus/qt/qtgui/dialog/taurusinputdialog.py
index f6eace6..786aa12 100644
--- a/lib/taurus/qt/qtgui/dialog/taurusinputdialog.py
+++ b/lib/taurus/qt/qtgui/dialog/taurusinputdialog.py
@@ -29,7 +29,7 @@ __all__ = ["TaurusInputDialog", "get_input"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 def get_input(input_data, parent=None, input_panel_klass=None):
     """Static convenience function to get an input from the user using a
diff --git a/lib/taurus/qt/qtgui/dialog/taurusmessagebox.py b/lib/taurus/qt/qtgui/dialog/taurusmessagebox.py
index b90c37f..59bed83 100644
--- a/lib/taurus/qt/qtgui/dialog/taurusmessagebox.py
+++ b/lib/taurus/qt/qtgui/dialog/taurusmessagebox.py
@@ -32,7 +32,7 @@ __docformat__ = 'restructuredtext'
 
 import sys
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 from taurus.core.util.excepthook import BaseExceptHook
 from taurus.core.util.log import LogExceptHook
diff --git a/lib/taurus/qt/qtgui/display/demo/qpixmapwidgetdemo.py b/lib/taurus/qt/qtgui/display/demo/qpixmapwidgetdemo.py
index e362640..1e78ff4 100644
--- a/lib/taurus/qt/qtgui/display/demo/qpixmapwidgetdemo.py
+++ b/lib/taurus/qt/qtgui/display/demo/qpixmapwidgetdemo.py
@@ -30,7 +30,7 @@ __all__ = ["demo", "main"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 
 def demo():
diff --git a/lib/taurus/qt/qtgui/display/demo/tauruslabeldemo.py b/lib/taurus/qt/qtgui/display/demo/tauruslabeldemo.py
index 53dfe16..92ede2e 100644
--- a/lib/taurus/qt/qtgui/display/demo/tauruslabeldemo.py
+++ b/lib/taurus/qt/qtgui/display/demo/tauruslabeldemo.py
@@ -30,7 +30,7 @@ __all__ = ["demo", "main"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 def demo():
     import sys
diff --git a/lib/taurus/qt/qtgui/display/demo/tauruslcddemo.py b/lib/taurus/qt/qtgui/display/demo/tauruslcddemo.py
index 778b1ba..00e991c 100644
--- a/lib/taurus/qt/qtgui/display/demo/tauruslcddemo.py
+++ b/lib/taurus/qt/qtgui/display/demo/tauruslcddemo.py
@@ -30,7 +30,7 @@ __all__ = ["demo", "main"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 def demo():
     import sys
diff --git a/lib/taurus/qt/qtgui/display/demo/taurusleddemo.py b/lib/taurus/qt/qtgui/display/demo/taurusleddemo.py
index 60cac40..930be90 100644
--- a/lib/taurus/qt/qtgui/display/demo/taurusleddemo.py
+++ b/lib/taurus/qt/qtgui/display/demo/taurusleddemo.py
@@ -30,7 +30,7 @@ __all__ = ["demo", "main"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 def demo():
     import sys
diff --git a/lib/taurus/qt/qtgui/display/qfallback.py b/lib/taurus/qt/qtgui/display/qfallback.py
index 2899692..9f98326 100644
--- a/lib/taurus/qt/qtgui/display/qfallback.py
+++ b/lib/taurus/qt/qtgui/display/qfallback.py
@@ -33,7 +33,7 @@ __docformat__ = 'restructuredtext'
 
 import sys
 import functools
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.base import TaurusBaseWidget
 
 def create_fallback(widget_klass_name):
diff --git a/lib/taurus/qt/qtgui/display/qled.py b/lib/taurus/qt/qtgui/display/qled.py
index 0190b30..576df22 100644
--- a/lib/taurus/qt/qtgui/display/qled.py
+++ b/lib/taurus/qt/qtgui/display/qled.py
@@ -31,7 +31,7 @@ __docformat__ = 'restructuredtext'
 
 import sys
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.core.util.enumeration import Enumeration
 from taurus.qt.qtgui.resource import getPixmap
 from .qpixmapwidget import QPixmapWidget
diff --git a/lib/taurus/qt/qtgui/display/qlogo.py b/lib/taurus/qt/qtgui/display/qlogo.py
index 7896093..d213f8b 100644
--- a/lib/taurus/qt/qtgui/display/qlogo.py
+++ b/lib/taurus/qt/qtgui/display/qlogo.py
@@ -31,7 +31,7 @@ __all__ = ["QLogo"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.resource import getPixmap
 
 class QLogo(Qt.QLabel):
diff --git a/lib/taurus/qt/qtgui/display/qpixmapwidget.py b/lib/taurus/qt/qtgui/display/qpixmapwidget.py
index dd51a2d..3016ded 100644
--- a/lib/taurus/qt/qtgui/display/qpixmapwidget.py
+++ b/lib/taurus/qt/qtgui/display/qpixmapwidget.py
@@ -29,7 +29,7 @@ __all__ = ["QPixmapWidget"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 import taurus.qt.qtgui.resource
 
 getPixmap = taurus.qt.qtgui.resource.getPixmap
diff --git a/lib/taurus/qt/qtgui/display/qsevensegment.py b/lib/taurus/qt/qtgui/display/qsevensegment.py
index d1508e9..6cfd230 100644
--- a/lib/taurus/qt/qtgui/display/qsevensegment.py
+++ b/lib/taurus/qt/qtgui/display/qsevensegment.py
@@ -31,7 +31,7 @@ __all__ = ['Q7SegDigit']
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 POLY = Qt.QPolygonF
 P = Qt.QPointF
diff --git a/lib/taurus/qt/qtgui/display/taurusboolled.py b/lib/taurus/qt/qtgui/display/taurusboolled.py
index 944109d..30c9bc2 100644
--- a/lib/taurus/qt/qtgui/display/taurusboolled.py
+++ b/lib/taurus/qt/qtgui/display/taurusboolled.py
@@ -30,7 +30,7 @@ __all__ = ["TaurusBoolLed"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 # ugly
 import PyTango
diff --git a/lib/taurus/qt/qtgui/display/taurusconfiglabel.py b/lib/taurus/qt/qtgui/display/taurusconfiglabel.py
index 0fcfc5b..b08405c 100644
--- a/lib/taurus/qt/qtgui/display/taurusconfiglabel.py
+++ b/lib/taurus/qt/qtgui/display/taurusconfiglabel.py
@@ -29,7 +29,7 @@ __all__ = ["TaurusConfigLabel"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 import taurus.core
 from taurus.qt.qtgui.util import QT_DEVICE_STATE_PALETTE
diff --git a/lib/taurus/qt/qtgui/display/tauruslabel.py b/lib/taurus/qt/qtgui/display/tauruslabel.py
index d5e27fb..e36f8f3 100644
--- a/lib/taurus/qt/qtgui/display/tauruslabel.py
+++ b/lib/taurus/qt/qtgui/display/tauruslabel.py
@@ -30,12 +30,13 @@ __all__ = ["TaurusLabel"]
 __docformat__ = 'restructuredtext'
 
 import operator
+import re
 
 # shame of me for importing PyTango!
 import PyTango
 
 from taurus.core.taurusbasetypes import TaurusElementType, TaurusEventType
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.base import TaurusBaseWidget
 from taurus.qt.qtgui.base import TaurusBaseController
 from taurus.qt.qtgui.base import TaurusScalarAttributeControllerHelper
@@ -54,11 +55,12 @@ EventType = TaurusEventType
 
 class TaurusLabelController(TaurusBaseController):
     
-    StyleSheetTemplate = """border-style: outset; border-width: 2px; border-color: {0}; {1}"""
+    StyleSheetTemplate = "border-style: outset; border-width: 2px; border-color: {0}; {1}"
 
     def __init__(self, label):
         self._text = ''
         self._trimmedText = False
+        self._trimPattern = re.compile('<[^<]*>')
         TaurusBaseController.__init__(self, label)
 
     def _setStyle(self):
@@ -116,11 +118,14 @@ class TaurusLabelController(TaurusBaseController):
     def _shouldTrim(self, label, text):
         if not label.autoTrim:
             return False
+        text = re.sub(self._trimPattern,'',text)
         font_metrics = Qt.QFontMetrics(label.font())
         size, textSize = label.size().width(), font_metrics.width(text)
         return textSize > size
 
     def _updateToolTip(self, label):
+        if not label.getAutoTooltip():
+            return
         toolTip = label.getFormatedToolTip()
         if self._trimmedText:
             toolTip = u"<p><b>Value:</b> %s</p><hr>%s" % (unicode(self._text,errors='replace'), unicode(toolTip,errors='replace'))
@@ -518,7 +523,7 @@ class TaurusLabel(Qt.QLabel, TaurusBaseWidget):
     #:
     #:     * :meth:`TaurusLabel.getAutoTrim`
     #:     * :meth:`TaurusLabel.setAutoTrim`
-    #:     * :meth:`TaurusLabel.resetAutoTrim
+    #:     * :meth:`TaurusLabel.resetAutoTrim`
     autoTrim = Qt.pyqtProperty("bool", getAutoTrim, setAutoTrim,
                                resetAutoTrim, doc="auto trim text")
     
diff --git a/lib/taurus/qt/qtgui/display/tauruslcd.py b/lib/taurus/qt/qtgui/display/tauruslcd.py
index 3f6e90d..00b955e 100644
--- a/lib/taurus/qt/qtgui/display/tauruslcd.py
+++ b/lib/taurus/qt/qtgui/display/tauruslcd.py
@@ -35,7 +35,7 @@ import operator
 import PyTango
 
 from taurus.core.taurusbasetypes import TaurusElementType, TaurusEventType
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.base import TaurusBaseWidget
 from taurus.qt.qtgui.base import TaurusBaseController
 from taurus.qt.qtgui.base import TaurusScalarAttributeControllerHelper
diff --git a/lib/taurus/qt/qtgui/display/tauruslcdvalue.py b/lib/taurus/qt/qtgui/display/tauruslcdvalue.py
index 44caa62..850e483 100644
--- a/lib/taurus/qt/qtgui/display/tauruslcdvalue.py
+++ b/lib/taurus/qt/qtgui/display/tauruslcdvalue.py
@@ -29,7 +29,7 @@ __all__ = ["TaurusLCDValue"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.util import QT_ATTRIBUTE_QUALITY_PALETTE
 from taurus.qt.qtgui.base import TaurusBaseWidget
 
diff --git a/lib/taurus/qt/qtgui/display/taurusled.py b/lib/taurus/qt/qtgui/display/taurusled.py
index d82f89c..70f6de9 100644
--- a/lib/taurus/qt/qtgui/display/taurusled.py
+++ b/lib/taurus/qt/qtgui/display/taurusled.py
@@ -33,7 +33,7 @@ __docformat__ = 'restructuredtext'
 import weakref
 import operator
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 # Shame on me!!!!
 import PyTango
diff --git a/lib/taurus/qt/qtgui/display/taurusstateled.py b/lib/taurus/qt/qtgui/display/taurusstateled.py
index 7d46f25..3e0b995 100644
--- a/lib/taurus/qt/qtgui/display/taurusstateled.py
+++ b/lib/taurus/qt/qtgui/display/taurusstateled.py
@@ -34,7 +34,7 @@ __docformat__ = 'restructuredtext'
 import PyTango
 
 from taurus.core.taurusbasetypes import TaurusEventType
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.base import TaurusBaseWidget
 from qled import LedStatus, LedColor
 from qled import QLedOld as QLed
diff --git a/lib/taurus/qt/qtgui/display/taurusvaluelabel.py b/lib/taurus/qt/qtgui/display/taurusvaluelabel.py
index 5bf8ef2..7247bb5 100644
--- a/lib/taurus/qt/qtgui/display/taurusvaluelabel.py
+++ b/lib/taurus/qt/qtgui/display/taurusvaluelabel.py
@@ -29,7 +29,7 @@ __all__ = ["TaurusStateLabel", "TaurusValueLabel"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 import taurus.core
 from taurus.qt.qtgui.util import QT_ATTRIBUTE_QUALITY_PALETTE, QT_DEVICE_STATE_PALETTE
@@ -63,7 +63,7 @@ class TaurusValueLabel(Qt.QLabel, TaurusBaseWidget):
     Example::
     
         import sys
-        from taurus.qt import Qt
+        from taurus.external.qt import Qt
         from taurus.qt.qtgui.display import TaurusValueLabel
 
         app = Qt.QApplication(sys.argv)
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/ui/compile_UIs.sh b/lib/taurus/qt/qtgui/display/test/__init__.py
old mode 100755
new mode 100644
similarity index 93%
rename from lib/taurus/qt/qtgui/extra_macroexecutor/ui/compile_UIs.sh
rename to lib/taurus/qt/qtgui/display/test/__init__.py
index e5e83bb..d36d30e
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/ui/compile_UIs.sh
+++ b/lib/taurus/qt/qtgui/display/test/__init__.py
@@ -1,25 +1,24 @@
-#!/bin/bash
+#!/usr/bin/env python
+
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
 #############################################################################
-
-pyuic4 macrobutton.ui -o ../ui_macrobutton.py
diff --git a/lib/taurus/qt/qtgui/display/test/test_tauruslabel.py b/lib/taurus/qt/qtgui/display/test/test_tauruslabel.py
new file mode 100644
index 0000000..db2ae70
--- /dev/null
+++ b/lib/taurus/qt/qtgui/display/test/test_tauruslabel.py
@@ -0,0 +1,86 @@
+#!/usr/bin/env python
+#############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+##
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+##
+## Taurus 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.
+##
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+
+"""Unit tests for Taurus Label"""
+
+from taurus.external import unittest
+from taurus.qt.qtgui.test import GenericWidgetTestCase, BaseWidgetTestCase
+from taurus.qt.qtgui.display import TaurusLabel
+from taurus.qt.qtgui.container import TaurusWidget
+
+
+class TaurusLabelTest(GenericWidgetTestCase, unittest.TestCase):
+
+    '''
+    Generic tests for TaurusLabel.
+
+    .. seealso: :class:`taurus.qt.qtgui.test.base.GenericWidgetTestCase`
+    '''
+    _klass = TaurusLabel
+    modelnames = ['sys/tg_test/1/wave', '', 'eval://1', None]
+    
+class Bug169_Test(BaseWidgetTestCase, unittest.TestCase):
+
+    '''
+    Test bug169: 
+    
+        AttributeError: type object 'TaurusConfigurationProxy' has no attribute
+        'buildModelName'.
+        
+        See: http://sf.net/p/sardana/tickets/169/
+    
+
+    .. seealso: :class:`taurus.qt.qtgui.test.base.BaseWidgetTestCase`
+    '''
+    _klass = TaurusLabel
+    
+    def setUp(self):
+        BaseWidgetTestCase.setUp(self)
+        self._widget.setModel('sys/tg_test/1/double_scalar?configuration=label')
+        self._expectedModelClass = self._widget.getModelClass()
+        self._parent = TaurusWidget()
+        self._parent.setModel('sys/tg_test/1')
+        self._widget.setUseParentModel(True)
+        self._widget.setParent(self._parent)
+        
+    def test_bug169(self):
+        '''Check if setModel works when using parent model''' 
+        self._widget.setModel('/double_scalar?configuration=label')
+        
+    def test_relativemodelclass(self):
+        '''Check consistency in modelClass when using parent model (re: bug169)
+        ''' 
+        try:
+            self._widget.setModel('/double_scalar?configuration=label')
+        finally:
+            mc = self._widget.getModelClass()
+            msg = ('getModelClass() inconsistency:\n expected: %s\n got: %s' % 
+                   (self._expectedModelClass, mc))
+            self.assertEqual(self._expectedModelClass, mc, msg)
+
+
+#
+# if __name__ == "__main__":
+#     unittest.main()
diff --git a/lib/taurus/qt/qtgui/editor/tauruseditor.py b/lib/taurus/qt/qtgui/editor/tauruseditor.py
index 6caf464..0d4f0be 100644
--- a/lib/taurus/qt/qtgui/editor/tauruseditor.py
+++ b/lib/taurus/qt/qtgui/editor/tauruseditor.py
@@ -32,7 +32,7 @@ __docformat__ = 'restructuredtext'
 import sys
 import os
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 try:
     import spyderlib
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/curve.py b/lib/taurus/qt/qtgui/extra_guiqwt/curve.py
index 8389ca2..76a6605 100644
--- a/lib/taurus/qt/qtgui/extra_guiqwt/curve.py
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/curve.py
@@ -27,7 +27,7 @@
 
 __all__=["TaurusCurveItem"]
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.base import TaurusBaseComponent
 import taurus
 from guiqwt.curve import CurveItem
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/curvesmodel.py b/lib/taurus/qt/qtgui/extra_guiqwt/curvesmodel.py
index 44d3b2f..005150f 100644
--- a/lib/taurus/qt/qtgui/extra_guiqwt/curvesmodel.py
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/curvesmodel.py
@@ -3,21 +3,21 @@
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
@@ -26,20 +26,20 @@
 """
 curvesmodel Model and view for new CurveItem configuration 
 """
-__all__=['TaurusCurveItemTableModel','CurveItemConf', 'CurveItemConfDlg']
+__all__ = ['TaurusCurveItemTableModel', 'CurveItemConf', 'CurveItemConfDlg']
 #raise UnimplementedError('Under Construction!')
 
 import copy
 
-from taurus.qt import Qt, Qwt5
+from taurus.external.qt import Qt, Qwt5
 from guiqwt.styles import CurveParam, AxesParam, update_style_attr
 from guiqwt.builder import make
 
 import taurus
-from taurus.core import TaurusException
+from taurus.core.taurusexception import TaurusException
 from taurus.qt.qtcore.mimetypes import TAURUS_MODEL_LIST_MIME_TYPE, TAURUS_ATTR_MIME_TYPE
 from taurus.qt.qtgui.resource import getThemeIcon, getIcon
-from .ui.ui_CurveItemConfDlg import Ui_CurveItemConfDlg    
+from taurus.qt.qtgui.util.ui import UILoadable
 from taurus.qt.qtgui.extra_guiqwt.styles import TaurusCurveParam
 
 AXIS_ID2NAME = {Qwt5.QwtPlot.yLeft:'left', Qwt5.QwtPlot.yRight:'right',
@@ -49,7 +49,7 @@ AXIS_ID2NAME = {Qwt5.QwtPlot.yLeft:'left', Qwt5.QwtPlot.yRight:'right',
 #columns:
 NUMCOLS = 3
 X, Y, TITLE = range(NUMCOLS)
-SRC_ROLE =  Qt.Qt.UserRole + 1
+SRC_ROLE = Qt.Qt.UserRole + 1
 
 
 class Component(object):
@@ -58,35 +58,35 @@ class Component(object):
         self.icon = Qt.QIcon()
         self.ok = True
         self.processSrc(src)
-        
+
     def processSrc(self, src):
         '''processes the src and sets the values of display, icon and ok attributes'''
         if src is None:
-            self.display, self.icon, self.ok = '(Use indices)', Qt.QIcon(),True
+            self.display, self.icon, self.ok = '(Use indices)', Qt.QIcon(), True
             return
         src = str(src).strip()
         #empty
         if src == '':
-            self.display, self.icon, self.ok = '(Use indices)', Qt.QIcon(),True
+            self.display, self.icon, self.ok = '(Use indices)', Qt.QIcon(), True
             return
         #for formulas
         if src.startswith('='):
             #@todo: evaluate/validate the expression
-            self.display, self.icon, self.ok = src[1:].strip(), getThemeIcon('accessories-calculator'),True
+            self.display, self.icon, self.ok = src[1:].strip(), getThemeIcon('accessories-calculator'), True
             return
         #for tango attributes
         try:
-            attr = taurus.Attribute(src) 
+            attr = taurus.Attribute(src)
             dev = attr.getParentObj()
         except TaurusException:
             self.display, self.icon, self.ok = src, getThemeIcon('dialog-warning'), False
             return
         if not dev.isValidDev():
-            self.display, self.icon, self.ok = src, getThemeIcon('network-error'),False
+            self.display, self.icon, self.ok = src, getThemeIcon('network-error'), False
             return
-        self.display, self.icon, self.ok = attr.getSimpleName(), getIcon(':/taurus.png'),True
-        
-        
+        self.display, self.icon, self.ok = attr.getSimpleName(), getIcon(':/taurus.png'), True
+
+
 
 class CurveItemConf(object):
     def __init__(self, taurusparam=None, curveparam=None, axesparam=None):
@@ -95,7 +95,7 @@ class CurveItemConf(object):
         self.taurusparam = taurusparam
         if curveparam is None:
             curveparam = CurveParam()
-            style = make.style.next() #cycle through colors and linestyles
+            style = make.style.next()  #cycle through colors and linestyles
             update_style_attr(style, curveparam)
             curveparam.line.width = 2
         self.curveparam = curveparam
@@ -104,11 +104,11 @@ class CurveItemConf(object):
         self.y = Component(taurusparam.yModel)
         if not self.curveparam.label:
             self.curveparam.label = taurusparam.xModel
-        
+
     def __repr__(self):
-        ret = "CurveItemConf(xModel='%s', yModel='%s')"%(self.taurusparam.xModel, self.taurusparam.yModel)
+        ret = "CurveItemConf(xModel='%s', yModel='%s')" % (self.taurusparam.xModel, self.taurusparam.yModel)
         return ret
-    
+
     @staticmethod
     def fromTaurusCurveItem(item):
         plot = item.plot()
@@ -116,7 +116,7 @@ class CurveItemConf(object):
             axesparam = AxesParam()
             axesparam.update_param(item)
         return CurveItemConf(taurusparam=item.taurusparam, curveparam=item.curveparam, axesparam=axesparam)
-    
+
     @staticmethod
     def fromAny(obj):
         '''return a CurveItemConf from whatever given in input (if possible). 
@@ -127,29 +127,29 @@ class CurveItemConf(object):
         except: raise
         try: return CurveItemConf(*obj)
         except: pass
-        raise ValueError('Cannot convert %s into a CurveItemConf'%repr(obj))
+        raise ValueError('Cannot convert %s into a CurveItemConf' % repr(obj))
 
 
 class TaurusCurveItemTableModel(Qt.QAbstractTableModel):
     ''' A Qt data model for describing curves
     '''
 
-    def __init__(self,curves=None):
-        if curves is None: curves=[]
-        curves = [CurveItemConf.fromAny(c) for c in curves] #convert curves
-        super(TaurusCurveItemTableModel,self).__init__()
+    def __init__(self, curves=None):
+        if curves is None: curves = []
+        curves = [CurveItemConf.fromAny(c) for c in curves]  #convert curves
+        super(TaurusCurveItemTableModel, self).__init__()
         self.ncolumns = NUMCOLS
         self.curves = curves
-        
+
     def dumpData(self):
         return copy.deepcopy(self.curves)
-    
-    def rowCount(self,index=Qt.QModelIndex()):
+
+    def rowCount(self, index=Qt.QModelIndex()):
         return len(self.curves)
-    
-    def columnCount(self,index=Qt.QModelIndex()):
+
+    def columnCount(self, index=Qt.QModelIndex()):
         return self.ncolumns
-        
+
     def data(self, index, role=Qt.Qt.DisplayRole):
         if not index.isValid() or not (0 <= index.row() < self.rowCount()):
             return Qt.QVariant()
@@ -159,7 +159,7 @@ class TaurusCurveItemTableModel(Qt.QAbstractTableModel):
         if role == Qt.Qt.DisplayRole:
             if column == X: return Qt.QVariant(str(self.curves[row].x.display))
             elif column == Y: return Qt.QVariant(str(self.curves[row].y.display))
-            elif column == TITLE: 
+            elif column == TITLE:
                 return Qt.QVariant(str(self.curves[row].curveparam.label))
             else: return Qt.QVariant()
         elif role == Qt.Qt.DecorationRole:
@@ -184,12 +184,12 @@ class TaurusCurveItemTableModel(Qt.QAbstractTableModel):
             elif column == TITLE: return Qt.QVariant(str(self.curves[row].curveparam.label))
             else: return Qt.QVariant()
         return Qt.QVariant()
-    
+
     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))
+                return Qt.QVariant(int(Qt.Qt.AlignLeft | Qt.Qt.AlignVCenter))
+            return Qt.QVariant(int(Qt.Qt.AlignRight | Qt.Qt.AlignVCenter))
         if role != Qt.Qt.DisplayRole:
             return Qt.QVariant()
         #So this is DisplayRole...
@@ -199,60 +199,60 @@ class TaurusCurveItemTableModel(Qt.QAbstractTableModel):
             elif section == TITLE: return Qt.QVariant("Title")
             return Qt.QVariant()
         else:
-            return Qt.QVariant(str(section+1))
-        
-    def flags(self, index): #use this to set the editable flag when fix is selected
+            return Qt.QVariant(str(section + 1))
+
+    def flags(self, index):  #use this to set the editable flag when fix is selected
         if not index.isValid():
             return Qt.Qt.ItemIsEnabled
         column = index.column()
-        if column in (X,Y):
-            return Qt.Qt.ItemFlags(Qt.Qt.ItemIsEnabled |Qt.Qt.ItemIsEditable | Qt.Qt.ItemIsDragEnabled | Qt.Qt.ItemIsDropEnabled | Qt.Qt.ItemIsSelectable)
+        if column in (X, Y):
+            return Qt.Qt.ItemFlags(Qt.Qt.ItemIsEnabled | Qt.Qt.ItemIsEditable | Qt.Qt.ItemIsDragEnabled | Qt.Qt.ItemIsDropEnabled | Qt.Qt.ItemIsSelectable)
         elif column == TITLE:
-            return Qt.Qt.ItemFlags(Qt.Qt.ItemIsEnabled| Qt.Qt.ItemIsEditable | Qt.Qt.ItemIsDragEnabled)
-        return Qt.Qt.ItemFlags(Qt.Qt.ItemIsEnabled |Qt.Qt.ItemIsEditable | Qt.Qt.ItemIsDragEnabled)
-                     
+            return Qt.Qt.ItemFlags(Qt.Qt.ItemIsEnabled | Qt.Qt.ItemIsEditable | Qt.Qt.ItemIsDragEnabled)
+        return Qt.Qt.ItemFlags(Qt.Qt.ItemIsEnabled | Qt.Qt.ItemIsEditable | Qt.Qt.ItemIsDragEnabled)
+
     def setData(self, index, value=None, role=Qt.Qt.EditRole):
         if index.isValid() and (0 <= index.row() < self.rowCount()):
             row = index.row()
             curve = self.curves[row]
             column = index.column()
             value = Qt.from_qvariant(value, str)
-            if column == X: 
+            if column == X:
                 curve.taurusparam.xModel = value
                 curve.x.processSrc(value)
-            elif column == Y: 
+            elif column == Y:
                 curve.taurusparam.yModel = value
                 curve.y.processSrc(value)
             elif column == TITLE: curve.curveparam.label = value
-            self.emit(Qt.SIGNAL("dataChanged(QModelIndex,QModelIndex)"),index, index)
+            self.emit(Qt.SIGNAL("dataChanged(QModelIndex,QModelIndex)"), index, index)
             return True
         return False
-    
-    def insertRows(self, position=None,rows=1,parentindex=None):
+
+    def insertRows(self, position=None, rows=1, parentindex=None):
         if position is None: position = self.rowCount()
         if parentindex is None: parentindex = Qt.QModelIndex()
-        self.beginInsertRows(parentindex, position, position + rows -1)
+        self.beginInsertRows(parentindex, position, position + rows - 1)
         slice = [CurveItemConf() for i in range(rows)]
-        self.curves = self.curves[:position]+slice+self.curves[position:]
+        self.curves = self.curves[:position] + slice + self.curves[position:]
         self.endInsertRows()
         return True
-        
-    def removeRows(self, position,rows=1,parentindex=None):
+
+    def removeRows(self, position, rows=1, parentindex=None):
         if parentindex is None: parentindex = Qt.QModelIndex()
         self.beginRemoveRows(parentindex, position, position + rows - 1)
-        self.curves = self.curves[:position]+self.curves[position+rows:]
+        self.curves = self.curves[:position] + self.curves[position + rows:]
         self.endRemoveRows()
         self.reset()
         return True
-    
+
     def clearAll(self):
         self.removeRows(0, self.rowCount())
-    
+
     def mimeTypes(self):
         result = list(Qt.QAbstractTableModel.mimeTypes(self))
         result += [TAURUS_ATTR_MIME_TYPE, 'text/plain']
         return result
-    
+
     def dropMimeData(self, data, action, row, column, parent):
         if row == -1:
             if parent.isValid(): row = parent.row()
@@ -261,75 +261,73 @@ class TaurusCurveItemTableModel(Qt.QAbstractTableModel):
             if parent.isValid(): column = parent.column()
             else: column = parent.columnCount()
         if data.hasFormat(TAURUS_ATTR_MIME_TYPE):
-            self.setData(self.index(row,column), 
+            self.setData(self.index(row, column),
                          value=Qt.QVariant(str(data.data(TAURUS_ATTR_MIME_TYPE))))
             return True
         elif data.hasFormat(TAURUS_MODEL_LIST_MIME_TYPE):
             models = str(data.data(TAURUS_MODEL_LIST_MIME_TYPE)).split()
             if len(models) == 1:
-                self.setData(self.index(row,column), 
+                self.setData(self.index(row, column),
                              value=Qt.QVariant(models[0]))
                 return True
             else:
-                self.insertRows(row,len(models))
-                for i,m in enumerate(models):
-                    self.setData(self.index(row+i,column), 
+                self.insertRows(row, len(models))
+                for i, m in enumerate(models):
+                    self.setData(self.index(row + i, column),
                                  value=Qt.QVariant(m))
                 return True
         elif data.hasText():
-            self.setData(self.index(row,column), Qt.QVariant(data.text()))
+            self.setData(self.index(row, column), Qt.QVariant(data.text()))
             return True
         return False
-    
+
     def mimeData(self, indexes):
         mimedata = Qt.QAbstractTableModel.mimeData(self, indexes)
-        if len(indexes)==1:
+        if len(indexes) == 1:
 #            data = Qt.from_qvariant(self.data(indexes[0], str)
 #            mimedata.setData(TAURUS_ATTR_MIME_TYPE, data)
             data = Qt.from_qvariant(self.data(indexes[0], role=SRC_ROLE), str)
             mimedata.setText(data)
         return mimedata
         #mimedata.setData()
-    
 
+
+ at UILoadable(with_ui='ui')
 class CurveItemConfDlg(Qt.QWidget):
     ''' A configuration dialog for creating new CurveItems.
     
     Provides a browser for Taurus models and an editable table for the sources
     and title of data
     '''
-    
+
     def __init__(self, parent=None, curves=None, showXcol=True):
-        super(CurveItemConfDlg,self).__init__(parent)
-        
+        super(CurveItemConfDlg, self).__init__(parent)
+        self.loadUi()
         self._showXcol = showXcol
-        
+
         if curves is None:
             curves = [CurveItemConf()]
-        self.ui = Ui_CurveItemConfDlg()
-        self.ui.setupUi(self)
-        
         #add the NeXusWidget if extra_nexus is available
         try:
             from taurus.qt.qtgui.extra_nexus import TaurusNeXusBrowser
             nexusWidget = TaurusNeXusBrowser()
-            self.ui.tabWidget.addTab(nexusWidget,'NeXus')
+            self.ui.tabWidget.addTab(nexusWidget, 'NeXus')
         except:
             import taurus.core.util.log
             _logger = taurus.core.util.log.Logger('CurveItemConfDlg')
             _logger.warning('TaurusNeXusBrowser not available')
             self.traceback()
-        
+
         self.ui.tangoTree.setButtonsPos(Qt.Qt.RightToolBarArea)
-        
-        self.ui.reloadBT.setEnabled(False)#@todo: The action for this button is not yet implemented 
-        
+
+        self.ui.reloadBT.setEnabled(False)  #@todo: The action for this button is not yet implemented
+
         self.model = TaurusCurveItemTableModel(curves)
-        
+
         table = self.ui.curvesTable
         table.setModel(self.model)
         table.setColumnHidden(X, not self._showXcol)
-        
+
 #        #adjust the column widths
 #        table.resizeColumnsToContents()
 #        availableSpace = table.viewport().width()
@@ -338,22 +336,22 @@ class CurveItemConfDlg(Qt.QWidget):
 #        if availableSpace > 0:
 #            extraSpace = availableSpace / self.model.columnCount()
 #            for col in xrange(self.model.columnCount()):
-#                table.setColumnWidth(col, table.columnWidth(col)+extraSpace)       
-        
+#                table.setColumnWidth(col, table.columnWidth(col)+extraSpace)
+
         #host
-        
-        import taurus #@todo: I get "UnboundLocalError: local variable 'taurus' referenced before assignment" if I don't import taurus again here ????
+
+        import taurus  #@todo: I get "UnboundLocalError: local variable 'taurus' referenced before assignment" if I don't import taurus again here ????
         host = taurus.Database().getNormalName()
         self.ui.tangoTree.setModel(host)
-        
-        #Connections        
-        self.connect(self.ui.applyBT,Qt.SIGNAL("clicked()"),self.onApply)
-        self.connect(self.ui.reloadBT,Qt.SIGNAL("clicked()"),self.onReload)
-        self.connect(self.ui.cancelBT,Qt.SIGNAL("clicked()"),self.close)
-        self.connect(self.ui.tangoTree,Qt.SIGNAL("addModels"),self.onModelsAdded)
-        self.connect(self.ui.curvesTable,Qt.SIGNAL("customContextMenuRequested(QPoint)"),self.onTableContextMenu)
-        
-        
+
+        #Connections
+        self.connect(self.ui.applyBT, Qt.SIGNAL("clicked()"), self.onApply)
+        self.connect(self.ui.reloadBT, Qt.SIGNAL("clicked()"), self.onReload)
+        self.connect(self.ui.cancelBT, Qt.SIGNAL("clicked()"), self.close)
+        self.connect(self.ui.tangoTree, Qt.SIGNAL("addModels"), self.onModelsAdded)
+        self.connect(self.ui.curvesTable, Qt.SIGNAL("customContextMenuRequested(QPoint)"), self.onTableContextMenu)
+
+
     def onTableContextMenu(self, pos):
         index = self.ui.curvesTable.indexAt(pos)
         row = index.row()
@@ -364,13 +362,13 @@ class CurveItemConfDlg(Qt.QWidget):
         addRowAction = menu.addAction(getThemeIcon('list-add'), 'Add new row', self.model.insertRows)
         if row >= 0:
             editParsAction = menu.addAction(getThemeIcon('preferences-system'), 'Edit parameters of this curve...', self._onEditParsAction)
-    
+
         menu.exec_(Qt.QCursor.pos())
-    
+
     def _onRemoveThisAction(self):
         row = self.ui.curvesTable.currentIndex().row()
         self.model.removeRows(row)
-        
+
     def _onEditParsAction(self):
         row = self.ui.curvesTable.currentIndex().row()
         if row >= 0:
@@ -378,27 +376,27 @@ class CurveItemConfDlg(Qt.QWidget):
             params = [p for p in (c.curveparam, c.axesparam, c.taurusparam) if p is not None ]
             if params:
                 from guidata.dataset.datatypes import DataSetGroup
-                group = DataSetGroup(params, "Parameters for curve %s"%c.curveparam.label )
+                group = DataSetGroup(params, "Parameters for curve %s" % c.curveparam.label)
                 group.edit()
                 c.x.processSrc(c.taurusparam.xModel)
                 c.y.processSrc(c.taurusparam.yModel)
-                self.emit(Qt.SIGNAL("dataChanged(QModelIndex,QModelIndex)"),self.model.index(row,0), self.model.index(row,self.model.rowCount()))
-        
-        
+                self.emit(Qt.SIGNAL("dataChanged(QModelIndex,QModelIndex)"), self.model.index(row, 0), self.model.index(row, self.model.rowCount()))
+
+
     def onModelsAdded(self, models):
         nmodels = len(models)
         rowcount = self.model.rowCount()
-        self.model.insertRows(rowcount,nmodels)
-        for i,m in enumerate(models):
-            self.model.setData(self.model.index(rowcount+i, Y), value=Qt.QVariant(m))
-            title = self.model.data(self.model.index(rowcount+i, Y)) # the display data
-            self.model.setData(self.model.index(rowcount+i, TITLE), value=title)
-    
+        self.model.insertRows(rowcount, nmodels)
+        for i, m in enumerate(models):
+            self.model.setData(self.model.index(rowcount + i, Y), value=Qt.QVariant(m))
+            title = self.model.data(self.model.index(rowcount + i, Y))  # the display data
+            self.model.setData(self.model.index(rowcount + i, TITLE), value=title)
+
     def getCurveItemConfs(self):
         return self.model.dumpData()
-    
+
     @staticmethod
-    def showDlg(parent = None, curves=None):
+    def showDlg(parent=None, curves=None):
         '''Static method that launches a modal dialog containing a CurveItemConfDlg
         
         :param parent: (QObject) parent for the dialog 
@@ -411,32 +409,32 @@ class CurveItemConfDlg(Qt.QWidget):
         dlg = Qt.QDialog(parent)
         dlg.setWindowTitle('Curves Selection')
         layout = Qt.QVBoxLayout()
-        w = CurveItemConfDlg(parent = parent, curves=curves)
+        w = CurveItemConfDlg(parent=parent, curves=curves)
         layout.addWidget(w)
         dlg.setLayout(layout)
-        dlg.connect(w,Qt.SIGNAL('applied'), dlg.accept)
-        dlg.connect(w.ui.cancelBT,Qt.SIGNAL("clicked()"),dlg.close)
+        dlg.connect(w, Qt.SIGNAL('applied'), dlg.accept)
+        dlg.connect(w.ui.cancelBT, Qt.SIGNAL("clicked()"), dlg.close)
         dlg.exec_()
         return w.getCurveItemConfs(), (dlg.result() == dlg.Accepted)
-    
-    def onApply(self):            
+
+    def onApply(self):
         self.emit(Qt.SIGNAL('applied'))
-        
+
     def onReload(self):
         print "RELOAD!!! (todo)"
-        
-    
+
+
 #
 #
 #def test2():
 #    from taurus.qt.qtgui.application import TaurusApplication
 #    app = TaurusApplication(app_name="CurvesSelection", app_version=taurus.Release.version)
-#    
+#
 #    print CurveItemConfDlg.showDlg(curves= curves)
-#    
+#
 #    sys.exit()
-#    
+#
 #
 #if __name__ == "__main__":
 #    import sys
-#    test2()    
+#    test2()
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/image.py b/lib/taurus/qt/qtgui/extra_guiqwt/image.py
index 9b47d75..0b31263 100644
--- a/lib/taurus/qt/qtgui/extra_guiqwt/image.py
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/image.py
@@ -29,7 +29,7 @@ Extension of :mod:`guiqwt.image`
 __all__=["TaurusImageItem","TaurusRGBImageItem","TaurusTrend2DItem",
          "TaurusTrend2DScanItem","TaurusEncodedImageItem"]
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.base import TaurusBaseComponent
 import taurus.core
 from taurus.core.util.containers import ArrayBuffer
@@ -75,6 +75,7 @@ class TaurusBaseImageItem(TaurusBaseComponent):
         self.set_data(v, lut_range=lut_range)
         self.getSignaller().emit(Qt.SIGNAL('dataChanged'))
         p = self.plot()
+
         if p is not None:
             p.update_colormap_axis(self)
             p.replot()
@@ -100,15 +101,16 @@ class TaurusBaseImageItem(TaurusBaseComponent):
         except:
             v = numpy.array(data) #note that this is potentially expensive
             dtype = v.dtype
-        
+
         if dtype not in (float, numpy.double, numpy.int32, numpy.uint16,
                           numpy.int16, numpy.uint8, numpy.int8, bool): 
             #note: numpy.uint32 was not included because of https://sourceforge.net/p/sardana/tickets/70/    
-            try:
+            try: 
                 self.debug('casting to numpy.int32')
-                v = numpy.int32(v)
+                v = numpy.int32(v)  
             except OverflowError:
                 raise OverflowError("type %s not supported by guiqwt and cannot be casted to int32"%repr(v.dtype))
+            
         return v
         
 class TaurusImageItem(ImageItem, TaurusBaseImageItem):
@@ -138,8 +140,29 @@ class TaurusEncodedImageItem(TaurusImageItem):
         if type(data) == tuple:
             from taurus.core.util.codecs import CodecFactory
             codec = CodecFactory().getCodec(data[0])
-            fmt,decoded_data = codec.decode(data)[1]
-            return decoded_data
+
+            try:
+                fmt,decoded_data = codec.decode(data)[1]
+            except:
+                decoded_data = codec.decode(data)[1]
+
+            try:
+                dtype = decoded_data.dtype
+                v = decoded_data
+            except:
+                v = numpy.array(decoded_data) #note that this is potentially expensive
+                dtype = v.dtype
+
+            if dtype not in (float, numpy.double, numpy.int32, numpy.uint16,
+                             numpy.int16, numpy.uint8, numpy.int8, bool): 
+            #note: numpy.uint32 was not included because of https://sourceforge.net/p/sardana/tickets/70/    
+                try:
+                    self.debug('casting to numpy.int32')
+                    v = numpy.int32(v)  
+                except OverflowError:
+                    raise OverflowError("type %s not supported by guiqwt and cannot be casted to int32"%repr(v.dtype))
+
+            return v
         else:
             raise ValueError('Unexpected data type (%s) for DevEncoded attribute (tuple expected)'%type(data))
 
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/plot.py b/lib/taurus/qt/qtgui/extra_guiqwt/plot.py
index 518a6ea..72ea88a 100644
--- a/lib/taurus/qt/qtgui/extra_guiqwt/plot.py
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/plot.py
@@ -33,7 +33,7 @@ import copy
 from guiqwt.plot import ImageDialog, CurveDialog
 
 import taurus.core
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 from taurus.core.util.containers import CaselessList
 from taurus.qt.qtgui.base import TaurusBaseWidget
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/taurustrend2d.py b/lib/taurus/qt/qtgui/extra_guiqwt/taurustrend2d.py
index 1be1808..73f39e8 100644
--- a/lib/taurus/qt/qtgui/extra_guiqwt/taurustrend2d.py
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/taurustrend2d.py
@@ -29,7 +29,7 @@ taurustrend.py: Generic trend widget for Taurus
 __all__=["TaurusTrend2DDialog"]
 
 from guiqwt.plot import ImageDialog
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 import taurus.core
 from taurus.qt.qtgui.base import TaurusBaseWidget
 from taurus.qt.qtgui.extra_guiqwt.image import TaurusTrend2DItem
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/tools.py b/lib/taurus/qt/qtgui/extra_guiqwt/tools.py
index 1e6088b..bae8d11 100644
--- a/lib/taurus/qt/qtgui/extra_guiqwt/tools.py
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/tools.py
@@ -30,7 +30,7 @@
 __docformat__ = 'restructuredtext'
 
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from guiqwt.tools import CommandTool, ToggleTool, DefaultToolbarID, QActionGroup, add_actions
 from guiqwt.signals import SIG_ITEMS_CHANGED
 
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/ui/ui_CurveItemConfDlg.py b/lib/taurus/qt/qtgui/extra_guiqwt/ui/ui_CurveItemConfDlg.py
deleted file mode 100644
index a74dde4..0000000
--- a/lib/taurus/qt/qtgui/extra_guiqwt/ui/ui_CurveItemConfDlg.py
+++ /dev/null
@@ -1,100 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file '/tmp/tmpjOVn8C.ui'
-#
-# Created: Thu Jul 14 17:28:55 2011
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_CurveItemConfDlg(object):
-    def setupUi(self, CurveItemConfDlg):
-        CurveItemConfDlg.setObjectName("CurveItemConfDlg")
-        CurveItemConfDlg.resize(812, 495)
-        self.gridLayout = QtGui.QGridLayout(CurveItemConfDlg)
-        self.gridLayout.setObjectName("gridLayout")
-        self.splitter = QtGui.QSplitter(CurveItemConfDlg)
-        self.splitter.setOrientation(QtCore.Qt.Horizontal)
-        self.splitter.setObjectName("splitter")
-        self.groupBox_2 = QtGui.QGroupBox(self.splitter)
-        self.groupBox_2.setObjectName("groupBox_2")
-        self.verticalLayout_5 = QtGui.QVBoxLayout(self.groupBox_2)
-        self.verticalLayout_5.setObjectName("verticalLayout_5")
-        self.tabWidget = QtGui.QTabWidget(self.groupBox_2)
-        self.tabWidget.setObjectName("tabWidget")
-        self.tangoTab = QtGui.QWidget()
-        self.tangoTab.setObjectName("tangoTab")
-        self.horizontalLayout_4 = QtGui.QHBoxLayout(self.tangoTab)
-        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
-        self.tangoTree = TaurusModelSelectorTree(self.tangoTab)
-        self.tangoTree.setObjectName("tangoTree")
-        self.horizontalLayout_4.addWidget(self.tangoTree)
-        self.tabWidget.addTab(self.tangoTab, "")
-        self.verticalLayout_5.addWidget(self.tabWidget)
-        self.groupBox_3 = QtGui.QGroupBox(self.splitter)
-        self.groupBox_3.setObjectName("groupBox_3")
-        self.verticalLayout_7 = QtGui.QVBoxLayout(self.groupBox_3)
-        self.verticalLayout_7.setObjectName("verticalLayout_7")
-        self.verticalLayout_4 = QtGui.QVBoxLayout()
-        self.verticalLayout_4.setObjectName("verticalLayout_4")
-        self.curvesTable = QtGui.QTableView(self.groupBox_3)
-        self.curvesTable.setMinimumSize(QtCore.QSize(400, 0))
-        self.curvesTable.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
-        self.curvesTable.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
-        self.curvesTable.setObjectName("curvesTable")
-        self.verticalLayout_4.addWidget(self.curvesTable)
-        self.horizontalLayout_2 = QtGui.QHBoxLayout()
-        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
-        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.horizontalLayout_2.addItem(spacerItem)
-        self.removeCurvesBT = QtGui.QToolButton(self.groupBox_3)
-        self.removeCurvesBT.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
-        self.removeCurvesBT.setPopupMode(QtGui.QToolButton.MenuButtonPopup)
-        self.removeCurvesBT.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
-        self.removeCurvesBT.setObjectName("removeCurvesBT")
-        self.horizontalLayout_2.addWidget(self.removeCurvesBT)
-        self.verticalLayout_4.addLayout(self.horizontalLayout_2)
-        self.verticalLayout_7.addLayout(self.verticalLayout_4)
-        self.gridLayout.addWidget(self.splitter, 0, 0, 1, 1)
-        self.horizontalLayout_3 = QtGui.QHBoxLayout()
-        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
-        spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.horizontalLayout_3.addItem(spacerItem1)
-        self.reloadBT = QtGui.QPushButton(CurveItemConfDlg)
-        self.reloadBT.setObjectName("reloadBT")
-        self.horizontalLayout_3.addWidget(self.reloadBT)
-        self.cancelBT = QtGui.QPushButton(CurveItemConfDlg)
-        self.cancelBT.setObjectName("cancelBT")
-        self.horizontalLayout_3.addWidget(self.cancelBT)
-        self.applyBT = QtGui.QPushButton(CurveItemConfDlg)
-        self.applyBT.setObjectName("applyBT")
-        self.horizontalLayout_3.addWidget(self.applyBT)
-        self.gridLayout.addLayout(self.horizontalLayout_3, 1, 0, 1, 1)
-
-        self.retranslateUi(CurveItemConfDlg)
-        self.tabWidget.setCurrentIndex(0)
-        QtCore.QMetaObject.connectSlotsByName(CurveItemConfDlg)
-
-    def retranslateUi(self, CurveItemConfDlg):
-        CurveItemConfDlg.setWindowTitle(QtGui.QApplication.translate("CurveItemConfDlg", "Form", None, QtGui.QApplication.UnicodeUTF8))
-        self.groupBox_2.setTitle(QtGui.QApplication.translate("CurveItemConfDlg", "Sources of data", None, QtGui.QApplication.UnicodeUTF8))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tangoTab), QtGui.QApplication.translate("CurveItemConfDlg", "Tango", None, QtGui.QApplication.UnicodeUTF8))
-        self.groupBox_3.setTitle(QtGui.QApplication.translate("CurveItemConfDlg", "Contents & appearance", None, QtGui.QApplication.UnicodeUTF8))
-        self.removeCurvesBT.setText(QtGui.QApplication.translate("CurveItemConfDlg", " Remove", None, QtGui.QApplication.UnicodeUTF8))
-        self.reloadBT.setText(QtGui.QApplication.translate("CurveItemConfDlg", "Reload", None, QtGui.QApplication.UnicodeUTF8))
-        self.cancelBT.setText(QtGui.QApplication.translate("CurveItemConfDlg", "Cancel", None, QtGui.QApplication.UnicodeUTF8))
-        self.applyBT.setText(QtGui.QApplication.translate("CurveItemConfDlg", "Apply", None, QtGui.QApplication.UnicodeUTF8))
-
-from taurus.qt.qtgui.panel import TaurusModelSelectorTree
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    CurveItemConfDlg = QtGui.QWidget()
-    ui = Ui_CurveItemConfDlg()
-    ui.setupUi(CurveItemConfDlg)
-    CurveItemConfDlg.show()
-    sys.exit(app.exec_())
-
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/__init__.py b/lib/taurus/qt/qtgui/extra_macroexecutor/__init__.py
index 4d30941..e87a243 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/__init__.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/__init__.py
@@ -1,34 +1,24 @@
-#!/usr/bin/env python
-
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
 #############################################################################
 
-"""
-__init__.py: 
-"""
-from macroexecutor import TaurusMacroExecutorWidget, TaurusMacroExecutor
-from sequenceeditor import TaurusSequencerWidget, TaurusSequencer
-from common import TaurusMacroConfigurationDialog
-from macrodescriptionviewer import TaurusMacroDescriptionViewer
-from dooroutput import DoorOutput, DoorDebug, DoorResult
-from macrobutton import MacroButton, MacroButtonAbortDoor
+from sardana.taurus.qt.qtgui.extra_macroexecutor import *
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/common.py b/lib/taurus/qt/qtgui/extra_macroexecutor/common.py
deleted file mode 100644
index 18aac7c..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/common.py
+++ /dev/null
@@ -1,340 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-import PyTango
-import taurus
-
-from taurus.qt.qtgui.base import TaurusBaseWidget
-from taurus.core.taurusbasetypes import TaurusEventType
-from taurus.qt import Qt
-from taurus.qt.qtgui.input import TaurusAttrListComboBox
-from taurus.qt.qtgui.container import TaurusMainWindow
-
-from taurus.qt.qtgui.resource import getThemeIcon
-
-def str2bool(text):
-    return text in ("True", "1")
-
-def standardPlotablesFilter(column_desc_dict):
-    """This is a standard plotables filter emitted with "plotablesFilter" signal.
-       Its purpose is to filterout point_nr columnf from scanline"""
-    if column_desc_dict.get("label", None) == "point_nb": 
-        return False
-    return True
-       
-
-class MSAttrListComboBox(TaurusAttrListComboBox):
-    _elementType = ''
-    
-    def handleEvent(self, evt_src, evt_type, evt_value):
-        if evt_type in (TaurusEventType.Config, TaurusEventType.Error):
-            return
-        text = str(self.currentText())
-        self.clear()
-        parentModelObj = self.getParentModelObj()
-        if parentModelObj == None:
-            return
-        items = parentModelObj.getElementNamesWithInterface(self._elementType)
-        items.sort()
-        self.addItems(items)
-        if text in items:
-            self.setCurrentText(text)
-    
-    def setCurrentText(self, text):
-        idx = self.findText(text)
-        self.setCurrentIndex(idx)
-
-    def setElementType(self, elementType):
-        self._elementType = elementType
-        
-    def getElementType(self):
-        return self._elementType
-        
-    def resetElementType(self):
-        self._elementType = MSAttrListComboBox._elementType
-        
-    elementType = Qt.pyqtProperty("QString", getElementType, setElementType, resetElementType)
-    
-
-class MacroComboBox(Qt.QComboBox, TaurusBaseWidget):
-    """ComboBox representing list of macros"""
-       
-    
-    def __init__(self, parent=None):
-        name = self.__class__.__name__
-        self.call__init__wo_kw(Qt.QComboBox, parent)
-        self.call__init__(TaurusBaseWidget, name)
-        self.setSizeAdjustPolicy(Qt.QComboBox.AdjustToContentsOnFirstShow)
-        self.setToolTip("Choose a macro name...")
-        
-    def setModel(self, model):
-        if isinstance(model, Qt.QAbstractItemModel):
-            Qt.QAbstractItemView.setModel(self, model)
-        else:
-            TaurusBaseWidget.setModel(self, model)
-            self.__loadMacroNames()
-            
-    def parentModelChanged(self, parentmodel_name):
-        TaurusBaseWidget.parentModelChanged(self, parentmodel_name)
-        self.__loadMacroNames()   
-        
-    def onMacrosUpdated(self):
-        self.__loadMacroNames()
-    
-    def __loadMacroNames(self):
-        self.clear()
-        ms = self.getModelObj()
-        if ms == None: return
-        macros = ms.getElementsWithInterface('MacroCode')
-        macroNames = [macro.name for macro in macros.values()]
-        macroNames.sort()
-        macroNames.insert(0, '') #adding blank item
-        self.addItems(macroNames)
-        self.updateStyle()
-        
-    def selectMacro(self, macroName):
-        currentIdx = self.currentIndex()
-        index = self.findText(macroName)
-        self.setCurrentIndex(index)
-        if currentIdx == index:
-            self.emit(Qt.SIGNAL("currentIndexChanged(QString)"), macroName)
-        
-
-class TaurusMacroConfigurationDialog(Qt.QDialog):
-    
-    def __init__(self, parent=None, initMacroServer=None, initDoor=None):
-        Qt.QDialog.__init__(self,parent)
-        self.initMacroServer = initMacroServer
-        self.initDoor = initDoor
-        configureAction = Qt.QAction(getThemeIcon("folder-open"), "Change custom macro editors paths", self)
-        self.connect(configureAction, Qt.SIGNAL("triggered()"), self.onReloadMacroServers)
-        configureAction.setToolTip("Change custom macro editors paths")
-        configureAction.setShortcut("F11")
-        self.refreshMacroServersAction = Qt.QAction(getThemeIcon("view-refresh"), "Reload macroservers", self)
-        self.connect(self.refreshMacroServersAction, Qt.SIGNAL("triggered()"), self.onReloadMacroServers)
-        self.refreshMacroServersAction.setToolTip("This will reload list of all macroservers from Tango DB")
-        self.refreshMacroServersAction.setShortcut("F5")
-        self.initComponents()
-        
-    def initComponents(self):
-        self.setModal(True)
-        macroServerLabel = Qt.QLabel("MacroServer:", self)
-        self.macroServerComboBox = Qt.QComboBox()
-        ms_stateIcons = self.__retriveMacroServersFromDB()
-        self.__fillMacroServerComboBox(ms_stateIcons, self.macroServerComboBox)
-        refreshMacroServersButton = Qt.QToolButton()
-        refreshMacroServersButton.setDefaultAction(self.refreshMacroServersAction)
-        doorLabel = Qt.QLabel("Door:", self)
-        self.doorComboBox = TaurusAttrListComboBox(self) 
-        self.doorComboBox.setModel(self.macroServerComboBox.currentText() + "/doorList")
-        
-        self.buttonBox = Qt.QDialogButtonBox(Qt.QDialogButtonBox.Ok|
-                                                Qt.QDialogButtonBox.Cancel)
-        gridLayout = Qt.QGridLayout()
-        gridLayout.addWidget(macroServerLabel,0,0)
-        gridLayout.addWidget(self.macroServerComboBox,0,1)
-        gridLayout.addWidget(refreshMacroServersButton,0,2)
-        gridLayout.addWidget(doorLabel,1,0)
-        gridLayout.addWidget(self.doorComboBox,1,1)
-        
-        self.setLayout(Qt.QVBoxLayout())
-        self.layout().addLayout(gridLayout)
-        self.layout().addWidget(self.buttonBox)
-        self.adjustSize()
-        
-        self.connect(self.buttonBox, Qt.SIGNAL("accepted()"), self, Qt.SLOT("accept()"))
-        self.connect(self.buttonBox, Qt.SIGNAL("rejected()"), self, Qt.SLOT("reject()"))
-        self.connect(self.macroServerComboBox, Qt.SIGNAL("currentIndexChanged(const QString&)"),self.onMacroServerComboBoxChanged)
-        self.selectMacroServer(self.initMacroServer)
-        self.selectDoor(self.initDoor)
-        
-    def accept(self):
-        self.emit(Qt.SIGNAL("macroserverNameChanged"), str(self.macroServerComboBox.currentText()))
-        self.emit(Qt.SIGNAL("doorNameChanged"), str(self.doorComboBox.currentText()))
-        Qt.QDialog.accept(self)
-    
-    def __retriveMacroServersFromDB(self):
-        ms_stateIcons = []
-        db = taurus.Database()
-        macroServerList = db.getValueObj().get_device_name('*','MacroServer')
-        for macroServer in macroServerList:
-            #state = Device(macroServer).getState()
-            state = None
-            try:
-                state = PyTango.DeviceProxy(macroServer).state()
-            except:
-                pass
-            icon = None
-            if state == PyTango.DevState.ON:
-                icon = Qt.QIcon(":/leds/images24/ledgreen.png")
-            elif state == PyTango.DevState.FAULT:
-                icon = Qt.QIcon(":/leds/images24/ledred.png")
-            elif state == None:
-                icon = Qt.QIcon(":/leds/images24/ledredoff.png")
-            ms_stateIcons.append((macroServer,icon))
-        return ms_stateIcons
-    
-    def onReloadMacroServers(self):
-        ms_stateIcons = self.__retriveMacroServersFromDB()
-        self.__fillMacroServerComboBox(ms_stateIcons, self.macroServerComboBox)
-    
-    def onMacroServerComboBoxChanged(self, macroServerName):
-        self.doorComboBox.setModel(macroServerName + "/doorList")
-        self.doorComboBox.fireEvent(self.doorComboBox, taurus.core.taurusbasetypes.TaurusEventType.Change, self.doorComboBox.getModelValueObj())#fake event
-        
-    def onMacroServerNameChanged(self, macroServerName):
-        self.__selectMacroServer(macroServerName)
-        
-    def onDoorNameChanged(self, doorName):
-        self.__selectDoor(doorName)
-        
-    def __fillMacroServerComboBox(self, ms_stateIcons, comboBox):
-        comboBox.clear()
-        for ms_stateIcon in ms_stateIcons:
-            macroServer = ms_stateIcon[0]
-            icon = ms_stateIcon[1]
-            comboBox.addItem(icon, macroServer)
-            
-    def selectDoor(self, doorName):
-        if doorName is None:
-            return
-        #@todo: Change that it will be able to handle also full device names
-        "/".join(doorName.split("/")[-3:])    
-        index = self.doorComboBox.findText(doorName) 
-        if index != -1:
-            self.doorComboBox.setCurrentIndex(index)
-        
-    def selectMacroServer(self, macroServerName):
-        if macroServerName is None:
-            return
-        #@todo: Change that it will be able to handle also full device names
-        "/".join(macroServerName.split("/")[-3:])
-        index = self.macroServerComboBox.findText(macroServerName) 
-        if index != -1:
-            self.macroServerComboBox.setCurrentIndex(index)
-    
-class MacroExecutionWindow(TaurusMainWindow):
-    
-    def __init__(self, parent=None, designMode=False):
-        TaurusMainWindow.__init__(self, parent, designMode)
-        self.statusBar().showMessage("")
-        self.setModelInConfig(True)
-        self._doorName = ""
-        self.registerConfigProperty("doorName", "setDoorName", "doorName")
-        self._customMacroEditorPaths = ""
-        self.registerConfigProperty("customMacroEditorPaths", "setCustomMacroEditorPaths", "customMacroEditorPaths")
-        self._qDoor = None
-        self.setWindowIcon(Qt.QIcon(":/apps/preferences-system-session.svg"))
-        toolBar = self.basicTaurusToolbar()
-        toolBar.setIconSize(Qt.QSize(24,24))
-        self.configureAction = self.createConfigureAction()
-        toolBar.addAction(self.configureAction)
-        self.taurusMenu.addAction(self.configureAction)
-        self.customMacroEditorsPathsAction = self.createCustomMacroEditorPathsAction()
-        self.taurusMenu.addAction(self.customMacroEditorsPathsAction)
-        self.addToolBar(toolBar)
-        self.initComponents()
-        self.splashScreen().finish(self)
-        self.connect(self, Qt.SIGNAL("doorChanged"), self.onDoorChanged)
-    
-    def doorName(self):
-        return self._doorName
-    
-    def setDoorName(self, doorName):
-        self._doorName = doorName
-        
-    def onDoorChanged(self, doorName):
-        self.setDoorName(doorName)
-        
-    def customMacroEditorPaths(self):
-        return self._customMacroEditorPaths
-    
-    def setCustomMacroEditorPaths(self, customMacroEditorPaths):
-        self._customMacroEditorPaths = customMacroEditorPaths
-#        ParamEditorManager().parsePaths(customMacroEditorPaths)
-#        ParamEditorManager().browsePaths()
-        
-    def onCustomMacroEditorPaths(self):
-        paths = str(Qt.QInputDialog.getText(self, 
-                                "Edition of custom macro editors paths", 
-                                "Paths:", Qt.QLineEdit.Normal, 
-                                str(self.customMacroEditorPaths()))[0])
-        self.setCustomMacroEditorPaths(paths)
-        
-    def initComponents(self):
-        pass
-        
-    def setModel(self, model):
-        """Sets new model for application, and change window title witn new macroserver name."""
-        TaurusMainWindow.setModel(self, model)
-        self.setWindowTitle(Qt.QApplication.applicationName() + ": " + model)
-        
-    def createConfigureAction(self):
-        configureAction = Qt.QAction(getThemeIcon("preferences-system-session"), "Change configuration", self)
-        self.connect(configureAction, Qt.SIGNAL("triggered()"), self.changeConfiguration)
-        configureAction.setToolTip("Configuring MacroServer and Door")
-        configureAction.setShortcut("F10")
-        return configureAction
-    
-    def createCustomMacroEditorPathsAction(self):
-        configureAction = Qt.QAction(getThemeIcon("folder-open"), "Change custom macro editors paths", self)
-        self.connect(configureAction, Qt.SIGNAL("triggered()"), self.onCustomMacroEditorPaths)
-        configureAction.setToolTip("Change custom macro editors paths")
-        configureAction.setShortcut("F11")
-        return configureAction
-
-    def changeConfiguration(self):
-        """This method is used to change macroserver as a model of application.
-           It shows dialog with list of all macroservers on tango host, if the user
-           Cancel dialog it doesn't do anything."""
-        dialog = TaurusMacroConfigurationDialog(self, self.modelName, self.doorName())
-        if dialog.exec_():
-            self.setModel(str(dialog.macroServerComboBox.currentText()))
-            self.emit(Qt.SIGNAL("doorChanged"), str(dialog.doorComboBox.currentText()))
-        else:
-            return
-        
-    def onShortMessage(self, msg):
-        ''' Slot to be called when there is a new short message. Currently, the only action 
-        taken when there is a new message is to display it in the main window status bar.
-        
-        :param msg: (str) the short descriptive message to be handled 
-        '''
-        self.statusBar().showMessage(msg)
-
-def test_macrocombobox(ms_name):
-    mcb = MacroComboBox()
-    mcb.setModel(ms_name)
-    mcb.show()
-                    
-if __name__ == "__main__": 
-    import sys
-    from taurus.qt.qtgui.application import TaurusApplication
-    app = TaurusApplication()
-    args = app.get_command_line_args() 
-    ms_name = args[0]
-    test_macrocombobox(ms_name)
-    sys.exit(app.exec_())
-        
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/dooroutput.py b/lib/taurus/qt/qtgui/extra_macroexecutor/dooroutput.py
deleted file mode 100644
index a3b0aca..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/dooroutput.py
+++ /dev/null
@@ -1,212 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-dooroutput.py: 
-"""
-
-from taurus.qt import Qt
-import taurus.core
-
-  
-class DoorOutput(Qt.QPlainTextEdit):
-    """Widget used for displaying changes of door's attributes: Output, Info, Warning and Error."""
-    
-    def __init__(self, parent = None):
-        Qt.QTextEdit.__init__(self, parent)        
-        self.setReadOnly(True)
-        self.setFont(Qt.QFont("Courier",9))
-        self.stopAction = Qt.QAction("Stop scrolling",self)
-        self.stopAction.setCheckable(True)
-        self.stopAction.setChecked(False)
-        self._isStopped = False
-                
-    def onDoorOutputChanged(self, output):
-        """call on output attribute changed"""
-        txt ="<font color=\"Black\">"
-        if output is None:
-            return
-        for line in output:
-            txt+="OUTPUT  " + line.replace(' ', ' ')+"\n"
-        txt += "</font>"
-        self.appendHtmlText(txt)
-        
-    def onDoorInfoChanged(self, info):        
-        """call on info attribute changed"""
-        txt ="<font color=\"Black\">"
-        if info is None:
-            return
-        
-        for line in info:
-            txt+="INFO  " + line.replace(' ', ' ')+"\n"
-        txt += "</font>"
-        self.appendHtmlText(txt)
-        
-    def onDoorWarningChanged(self, warning):
-        """call on warning attribute changed"""        
-        txt ="<font color=\"Black\">"
-        if warning is None:
-            return
-        for line in warning:
-            txt+="WARNING  " + line.replace(' ', ' ')+"\n"
-        txt += "</font>"
-        self.appendHtmlText(txt)
-    
-    def onDoorErrorChanged(self, error):
-        """call on error attribute changed"""
-        txt ="<font color=\"Red\">"
-        if error is None:
-            return
-        for line in error:
-            txt+="ERROR  " + line.replace(' ', ' ')+"\n"
-        txt += "</font>"
-        self.appendHtmlText(txt)
-    
-    def appendHtmlText(self, text):
-        self.appendHtml(text)
-        if not self._isStopped:
-            self.moveCursor(Qt.QTextCursor.End)
-    
-    def contextMenuEvent(self,event):
-        menu = self.createStandardContextMenu() 
-        clearAction = Qt.QAction("Clear", menu)
-        menu.addAction(clearAction)
-        menu.addAction(self.stopAction)
-        if not len(self.toPlainText()):
-            clearAction.setEnabled(False) 
-
-        Qt.QObject.connect(clearAction, Qt.SIGNAL("triggered()"), self.clear)
-        Qt.QObject.connect(self.stopAction, Qt.SIGNAL("toggled(bool)"), self.stopScrolling)    
-        menu.exec_(event.globalPos())
-    
-    def stopScrolling(self, stop):
-        self._isStopped = stop
-        
-class DoorDebug(Qt.QPlainTextEdit):
-    """Widget used for displaying changes of door's Debug attribute."""
-    
-    def __init__(self, parent = None):
-        Qt.QTextEdit.__init__(self, parent)        
-        self.setReadOnly(True)
-        self.setFont(Qt.QFont("Courier",9))
-        self.stopAction = Qt.QAction("Stop scrolling",self)
-        self.stopAction.setCheckable(True)
-        self.stopAction.setChecked(False)
-        self._isStopped = False
-        
-    def onDoorDebugChanged(self, debug):
-        """call on debug attribute changed"""
-        if debug is None:
-            return
-        for line in debug: 
-            self.appendPlainText("DEBUG  " + line)
-        
-        if not self._isStopped:
-            self.moveCursor(Qt.QTextCursor.End)
-        
-    def contextMenuEvent(self,event):
-        menu = self.createStandardContextMenu() 
-        clearAction = Qt.QAction("Clear", menu)
-        menu.addAction(clearAction)
-        menu.addAction(self.stopAction)
-        if not len(self.toPlainText()):
-            clearAction.setEnabled(False) 
-        
-        Qt.QObject.connect(clearAction, Qt.SIGNAL("triggered()"), self.clear)
-        Qt.QObject.connect(self.stopAction, Qt.SIGNAL("toggled(bool)"), self.stopScrolling)               
-        menu.exec_(event.globalPos())
-    
-    def stopScrolling(self, stop):
-        self._isStopped = stop
-    
-class DoorResult(Qt.QPlainTextEdit):
-    """Widget used for displaying changes of door's Result attribute."""
-    
-    def __init__(self, parent = None):
-        Qt.QTextEdit.__init__(self, parent)    
-        self.setReadOnly(True)
-        self.setFont(Qt.QFont("Courier",9))
-        
-    def onDoorResultChanged(self, result):
-        """call on result attribute changed"""   
-        if result is None:
-            return
-        for line in result:
-            self.appendPlainText("RESULT  " + line)
-        self.moveCursor(Qt.QTextCursor.End)
-        
-    def contextMenuEvent(self,event):
-        menu = self.createStandardContextMenu() 
-        clearAction = Qt.QAction("Clear", menu)
-        menu.addAction(clearAction)
-        if not len(self.toPlainText()):
-            clearAction.setEnabled(False) 
-        
-        Qt.QObject.connect(clearAction, Qt.SIGNAL("triggered()"), self.clear)               
-        menu.exec_(event.globalPos())
-
-
-        
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-# Door attributes listeners
-#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-
-class DoorAttrListener(Qt.QObject):
-        
-    def __init__(self, attrName):
-        Qt.QObject.__init__(self)
-        self.attrName = attrName
-        self.attrObj = None
-        
-    def setDoorName(self, doorName):
-        if not self.attrObj is None:
-            self.attrObj.removeListener(self)
-        self.attrObj = taurus.Attribute(doorName, self.attrName)
-        self.attrObj.addListener(self)
-
-    def eventReceived(self, src, type, value):
-        if (type == taurus.core.taurusbasetypes.TaurusEventType.Error or
-            type == taurus.core.taurusbasetypes.TaurusEventType.Config):
-            return
-        self.emit(Qt.SIGNAL('door%sChanged' % self.attrName), value.value)
-        
-if __name__=="__main__":
-    import sys
-    import taurus
-    from taurus.qt.qtgui.application import TaurusApplication
-    
-    app = TaurusApplication(sys.argv)
-    args = app.get_command_line_args()
-
-    doorOutput = DoorOutput()
-    if len(args) == 1:
-        door = taurus.Device(args[0])
-        Qt.QObject.connect(door, Qt.SIGNAL("outputUpdated"), doorOutput.onDoorOutputChanged)            
-        Qt.QObject.connect(door, Qt.SIGNAL("infoUpdated"), doorOutput.onDoorInfoChanged)
-        Qt.QObject.connect(door, Qt.SIGNAL("warningUpdated"), doorOutput.onDoorWarningChanged)
-        Qt.QObject.connect(door, Qt.SIGNAL("errorUpdated"), doorOutput.onDoorErrorChanged)
-    doorOutput.show()
-    sys.exit(app.exec_())  
-    
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/favouriteseditor.py b/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/favouriteseditor.py
deleted file mode 100644
index 5791ebf..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/favouriteseditor.py
+++ /dev/null
@@ -1,217 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-favouriteseditor.py: 
-"""
-import copy
-
-from taurus.qt import Qt
-from taurus.qt.qtgui.container import TaurusWidget
-from taurus.qt.qtcore.configuration import BaseConfigurableClass
-from model import MacrosListModel
-
-class FavouritesMacrosEditor(TaurusWidget):
-    __pyqtSignals__ = ("modelChanged(const QString &)",)
-    
-    def __init__(self, parent=None, designMode = False):
-        TaurusWidget.__init__(self, parent, designMode)
-        self.setObjectName(self.__class__.__name__)
-        self.registerConfigProperty("toXmlString", "fromXmlString", "favourites")
-        self.initComponents()
-        
-    def initComponents(self):
-        self.setLayout(Qt.QHBoxLayout())
-        self.layout().setContentsMargins(0,0,0,0)
-        
-        self.list = FavouritesMacrosList(self)
-        self._model = MacrosListModel()
-        self.list.setModel(self._model)
-        
-#        self.registerConfigDelegate(self.list)
-        self.layout().addWidget(self.list)
-                
-        actionBar = self.createActionBar()
-        self.layout().addLayout(actionBar)    
-                
-    def createActionBar(self):
-        layout = Qt.QVBoxLayout()    
-        layout.setContentsMargins(0,0,0,0)
-        deleteButton = Qt.QToolButton()
-        deleteButton.setDefaultAction(self.list.removeAction)
-        layout.addWidget(deleteButton)
-        deleteAllButton = Qt.QToolButton()
-        deleteAllButton.setDefaultAction(self.list.removeAllAction)
-        layout.addWidget(deleteAllButton)
-        moveUpButton = Qt.QToolButton()
-        moveUpButton.setDefaultAction(self.list.moveUpAction)
-        layout.addWidget(moveUpButton)
-        moveDownButton = Qt.QToolButton()
-        moveDownButton.setDefaultAction(self.list.moveDownAction)
-        layout.addWidget(moveDownButton)
-        spacerItem = Qt.QSpacerItem(0,0,Qt.QSizePolicy.Fixed,Qt.QSizePolicy.Expanding)
-        layout.addItem(spacerItem)
-        return layout
-    
-    def addMacro(self, macroNode):
-        self.list.insertMacro(macroNode)
-        
-    def toXmlString(self):
-        return self.list.toXmlString()
-
-    def fromXmlString(self, xmlString):
-        self.list.fromXmlString(xmlString)
-        favouritesList = self.list.model().list
-        macroServerObj = self.getModelObj() 
-        if macroServerObj is None:
-            self.debug("MS IS NONE")
-            return
-        
-        for macroNode in favouritesList:
-            macroServerObj.fillMacroNodeAdditionalInfos(macroNode)
-    
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        return None
-
-    
-class FavouritesMacrosList(Qt.QListView, BaseConfigurableClass):
-    
-    def __init__(self, parent):
-        Qt.QListView.__init__(self, parent)
-        
-        self.setSelectionMode(Qt.QListView.ExtendedSelection)
-        
-        self.removeAction = Qt.QAction(Qt.QIcon(":/actions/list-remove.svg"), "Remove from favourites", self)
-        self.connect(self.removeAction, Qt.SIGNAL("triggered()"), self.removeMacros)
-        self.removeAction.setToolTip("Clicking this button will remov selected macros from favourites.")
-        
-        self.removeAllAction = Qt.QAction(Qt.QIcon(":/places/user-trash.svg"), "Remove all from favourites", self)
-        self.connect(self.removeAllAction, Qt.SIGNAL("triggered()"), self.removeAllMacros)
-        self.removeAllAction.setToolTip("Clicking this button will remove all macros from favourites.")
-        
-        self.moveUpAction = Qt.QAction(Qt.QIcon(":/actions/go-up.svg"), "Move up", self)
-        self.connect(self.moveUpAction, Qt.SIGNAL("triggered()"), self.upMacro)
-        self.moveUpAction.setToolTip("Clicking this button will move the macro up in the favourites hierarchy.")
-        
-        self.moveDownAction = Qt.QAction(Qt.QIcon(":/actions/go-down.svg"), "Move up", self)
-        self.connect(self.moveDownAction, Qt.SIGNAL("triggered()"), self.downMacro)
-        self.moveDownAction.setToolTip("Clicking this button will move the macro down in the favourites hierarchy.")
-        
-        self.disableActions()
-        
-    def currentChanged(self, current, previous):
-        macro = copy.deepcopy(self.currentIndex().internalPointer())
-        self.emit(Qt.SIGNAL("favouriteSelected"), macro)
-        Qt.QListView.currentChanged(self, current, previous)
-
-    def selectionChanged(self,old,new):
-        macro = None
-        if self.currentIndex().isValid():            
-            self.removeAllAction.setEnabled(True)  
-            self.isIndexSelected()
-        else: 
-            self.disableActions()
-        Qt.QListView.selectionChanged(self, old, new)
-        if len(self.selectedIndexes()) > 1:
-            self.moveUpAction.setEnabled(False)
-            self.moveDownAction.setEnabled(False)
-    
-    def isIndexSelected(self):
-        if len(self.selectedIndexes()) > 0:
-            self.removeAction.setEnabled(True)
-            self.moveUpAction.setEnabled(self.model().isUpRowAllowed(self.currentIndex()))
-            self.moveDownAction.setEnabled(self.model().isDownRowAllowed(self.currentIndex()))
-        else:
-            self.removeAction.setEnabled(False)
-            self.moveUpAction.setEnabled(False)
-            self.moveDownAction.setEnabled(False)
-    
-    def mousePressEvent(self, e):
-        clickedIndex = self.indexAt(e.pos())
-        if clickedIndex.isValid():
-            macro = copy.deepcopy(self.currentIndex().internalPointer())
-            self.emit(Qt.SIGNAL("favouriteSelected"), macro)
-        Qt.QListView.mousePressEvent(self, e)
-        
-    def disableActions(self):
-        self.removeAction.setEnabled(False)
-        self.removeAllAction.setEnabled(False)
-        self.moveUpAction.setEnabled(False)
-        self.moveDownAction.setEnabled(False)
-        
-    def insertMacro(self, macroNode):
-        idx = self.model().insertRow(macroNode)
-        self.setCurrentIndex(idx)
-            
-    def removeMacros(self):
-        slist = sorted(self.selectedIndexes(), key=lambda index: index.row(), reverse = True)
-        for index in slist:
-            row = index.row()
-            idx = self.model().removeRow(row)
-        self.setCurrentIndex(idx)
-    
-    def removeAllMacros(self):
-        self.selectAll()
-        slist = sorted(self.selectedIndexes(), key=lambda index: index.row(), reverse = True)
-        for index in slist:
-            self.model().removeRow(index.row()) 
-    
-    def upMacro(self):
-        row = self.currentIndex().row()
-        idx = self.model().upRow(row)
-        self.setCurrentIndex(idx)
-        
-    def downMacro(self):
-        row = self.currentIndex().row()
-        idx = self.model().downRow(row)
-        self.setCurrentIndex(idx)
-    
-    def toXmlString(self):
-        return self.model().toXmlString()
-            
-    def fromXmlString(self, xmlString):
-        self.model().fromXmlString(xmlString)
-        
-    
-def test():
-    import sys, taurus, time
-    from  taurus.qt.qtgui.application import TaurusApplication
-    
-    app = TaurusApplication(sys.argv)
-        
-    favouritesEditor = FavouritesMacrosEditor()
-    
-    args = app.get_command_line_args()
-    favouritesEditor.setModel(args[0])
-    time.sleep(1)
-    macroNode = favouritesEditor.getModelObj().getMacroNodeObj(str(args[1]))
-    favouritesEditor.addMacro(macroNode)
-    favouritesEditor.show()
-
-    sys.exit(app.exec_())
-
-if __name__ == "__main__":
-    test()
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/historyviewer.py b/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/historyviewer.py
deleted file mode 100644
index 66c5907..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/historyviewer.py
+++ /dev/null
@@ -1,177 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-historyviewer.py: 
-"""
-import copy
-
-from taurus.qt import Qt
-from taurus.qt.qtgui.container import TaurusWidget
-from taurus.qt.qtcore.configuration import BaseConfigurableClass
-from model import MacrosListModel
-
-class HistoryMacrosViewer(TaurusWidget):
-    __pyqtSignals__ = ("modelChanged(const QString &)",)
-    
-    def __init__(self, parent=None, designMode = False):
-        TaurusWidget.__init__(self, parent, designMode)
-        self.setObjectName(self.__class__.__name__)
-        self.registerConfigProperty("toXmlString", "fromXmlString", "history")
-        self.initComponents()
-        
-    def initComponents(self):
-        self.setLayout(Qt.QHBoxLayout())
-        self.layout().setContentsMargins(0,0,0,0)
-        
-        self.list = HistoryMacrosList(self)
-        self._model = MacrosListModel()
-        self.list.setModel(self._model)
-        
-#####        self.registerConfigDelegate(self.list)
-        self.layout().addWidget(self.list)
-                
-        actionBar = self.createActionBar()
-        self.layout().addLayout(actionBar)    
-                
-    def createActionBar(self):
-        layout = Qt.QVBoxLayout()    
-        layout.setContentsMargins(0,0,0,0)
-        deleteAllButton = Qt.QToolButton()
-        deleteAllButton.setDefaultAction(self.list.removeAllAction)
-        layout.addWidget(deleteAllButton)
-        spacerItem = Qt.QSpacerItem(0,0,Qt.QSizePolicy.Fixed,Qt.QSizePolicy.Expanding)
-        layout.addItem(spacerItem)
-        return layout
-    
-    def listElementUp(self):
-        indexPos = self.list.currentIndex()
-        if indexPos.isValid() and indexPos.row() >= 1:
-            self.list.setCurrentIndex(indexPos.sibling(indexPos.row()-1,indexPos.column()))
-        else:
-            self.selectFirstElement()
-            
-    def listElementDown(self):
-        indexPos = self.list.currentIndex()
-        if indexPos.isValid() and indexPos.row() < self._model.rowCount() - 1:
-            self.list.setCurrentIndex(indexPos.sibling(indexPos.row()+1,indexPos.column()))
-        elif indexPos.row() == self._model.rowCount() - 1:
-            return
-        else:
-            self.selectFirstElement()
-            
-    def addMacro(self, macroNode):
-        self.list.insertMacro(macroNode)
-        
-    def toXmlString(self):
-        return self.list.toXmlString()
-
-    def fromXmlString(self, xmlString):
-        self.list.fromXmlString(xmlString)
-        historyList = self.list.model().list
-        macroServerObj = self.getModelObj() 
-        if macroServerObj is None: 
-            return
-        
-        for macroNode in historyList:
-            macroServerObj.fillMacroNodeAdditionalInfos(macroNode)
-    
-    def selectFirstElement(self):
-        self.list.removeAllAction.setEnabled(True)
-        self.list.setCurrentIndex(self._model.index(0))
-
-
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        return None
-
-    
-class HistoryMacrosList(Qt.QListView, BaseConfigurableClass):
-    
-    def __init__(self, parent):
-        Qt.QListView.__init__(self, parent)
-        self.setSelectionMode(Qt.QListView.SingleSelection)
-        self.removeAllAction = Qt.QAction(Qt.QIcon(":/places/user-trash.svg"), "Remove all from history", self)
-        self.connect(self.removeAllAction, Qt.SIGNAL("triggered()"), self.removeAllMacros)
-        self.removeAllAction.setToolTip("Clicking this button will remove all macros from history.")
-        self.removeAllAction.setEnabled(False)
-        
-    def currentChanged(self, current, previous):
-        macro = copy.deepcopy(self.currentIndex().internalPointer())
-        self.emit(Qt.SIGNAL("historySelected"), macro)
-        Qt.QListView.currentChanged(self, current, previous)
-        
-    def mousePressEvent(self, e):
-        clickedIndex = self.indexAt(e.pos())
-        if clickedIndex.isValid():
-            macro = copy.deepcopy(self.currentIndex().internalPointer())
-            self.emit(Qt.SIGNAL("historySelected"), macro)
-            self.removeAllAction.setEnabled(True)
-        Qt.QListView.mousePressEvent(self, e)
-    
-    def focusInEvent(self, e):
-        if self.model().rowCount()>0:
-            self.removeAllAction.setEnabled(True)
-        else:
-            self.removeAllAction.setEnabled(False)
-
-    def insertMacro(self, macroNode):
-        idx = self.model().insertRow(macroNode)
-        self.setCurrentIndex(idx)
-        self.removeAllAction.setEnabled(True)
-            
-    def removeAllMacros(self):
-        self.selectAll()
-        slist = sorted(self.selectedIndexes(), key=lambda index: index.row(), reverse = True)
-        for index in slist:
-            self.model().removeRow(index.row()) 
-        self.removeAllAction.setEnabled(False) 
-                
-    def toXmlString(self):
-        return self.model().toXmlString()
-            
-    def fromXmlString(self, xmlString):
-        self.model().fromXmlString(xmlString)
-        
-    
-def test():
-    import sys, taurus, time
-    from  taurus.qt.qtgui.application import TaurusApplication
-    
-    app = TaurusApplication(sys.argv)
-        
-    historyViewer = HistoryMacrosViewer()
-    
-    args = app.get_command_line_args()
-    historyViewer.setModel(args[0])
-    time.sleep(1)
-    macroNode = historyViewer.getModelObj().getMacroNodeObj(str(args[1]))
-    historyViewer.addMacro(macroNode)
-    historyViewer.show()
-
-    sys.exit(app.exec_())
-
-if __name__ == "__main__":
-    test()
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/model.py b/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/model.py
deleted file mode 100644
index fc45642..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/model.py
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-model.py: 
-"""
-
-from taurus.qt import Qt
-from lxml import etree
-
-from taurus.core.tango.sardana import macro
-        
-class MacrosListModel(Qt.QAbstractListModel):
-        
-    def __init__(self, parent=None):    
-        Qt.QAbstractListModel.__init__(self, parent)
-        self.list = []
-        
-    def rowCount(self, parent=Qt.QModelIndex()): 
-        return len(self.list) 
-    
-    def data(self, index, role): 
-        if index.isValid() and role == Qt.Qt.DisplayRole:
-            macroNode = self.list[index.row()]
-            return Qt.QVariant(self.list[index.row()].toSpockCommand())
-        else: 
-            return Qt.QVariant()
-        
-    def index(self, row, column=0, parent=Qt.QModelIndex()):
-        if self.rowCount():
-            return self.createIndex(row, column, self.list[row])
-        else:
-            return Qt.QModelIndex()
-    
-    def insertRow(self, macroNode, row=0):
-        self.beginInsertRows(Qt.QModelIndex(), row, row)
-        self.list.insert(row, macroNode)
-        self.endInsertRows()
-        return self.index(row)
-        
-    def removeRow(self, row):
-        self.beginRemoveRows(Qt.QModelIndex(), row, row)
-        self.list.pop(row)
-        self.endRemoveRows()
-        if row == self.rowCount():
-            row = row - 1
-        return self.index(row)
-        
-    def isUpRowAllowed(self, index):
-        return index.row() > 0
-         
-    def upRow(self, row):
-        """This method move macro up and returns index with its new position"""
-        macroNode = self.list[row]
-        self.removeRow(row)
-        return self.insertRow(macroNode, row - 1)
-    
-    def isDownRowAllowed(self, index):
-        return index.row() < self.rowCount() - 1    
-    
-    def downRow(self, row):
-        """This method move macro down and returns index with its new position"""
-        macroNode = self.list[row]
-        self.removeRow(row)
-        return self.insertRow(macroNode, row + 1)
-
-    def toXmlString(self, pretty=False):
-        listElement = etree.Element("list")
-        for macroNode in self.list:
-            listElement.append(macroNode.toXml(withId=False))
-        xmlTree = etree.ElementTree(listElement)
-        xmlString = etree.tostring(xmlTree, pretty_print=pretty) 
-        return xmlString
-    
-    def fromXmlString(self, xmlString):
-        listElement = etree.fromstring(xmlString)
-        for childElement in listElement.iterchildren("macro"):
-            macroNode = macro.MacroNode()
-            macroNode.fromXml(childElement)
-            self.list.append(macroNode)
-        self.reset()
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/globals.py b/lib/taurus/qt/qtgui/extra_macroexecutor/globals.py
deleted file mode 100644
index 5d8e76f..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/globals.py
+++ /dev/null
@@ -1,186 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-globals.py: 
-"""
-
-ORGANIZATION_NAME = "Taurus"
-
-MACROEXECUTOR_APPLICATION_NAME = "macroexecutor"
-SEQUENCER_APPLICATION_NAME = "sequencer"
-
-SEQUENCES_DIRNAME = "Sequences"
-SEQUENCE_DEFAULT_FILENAME = "Untitled.xml"
-
-FAVOURITES_FILENAME = "favourite_macros.xml"
-
-MACROS_HISTORY_FILENAME = ".macros_history"
-MACROS_HISTORY_LENGHT = 5
-
-TITLE_MACROSERVER_DIALOG            = "Choose MacroServer"
-TITLE_OUTPUT_DOCK_WIDGET            = "Output"
-TITLE_SPOCK_DOCK_WIDGET             = "Spock"
-TITLE_DEBUG_DOCK_WIDGET             = "Debug"
-TITLE_RESULT_DOCK_WIDGET            = "Result"
-TITLE_DESCRIPTION_DOCK_WIDGET       = "Macro description"
-TITLE_SEQUENCE_EDITOR_DOCK_WIDGET   = "Sequence editor"
-TITLE_MACRO_EXECUTOR_DOCK_WIDGET    = "Macro executor"
-
-MENU_FILE                       = "File"
-MENU_FILE_CONFIGURATION         = "Configuration"
-MENU_FILE_NEW                   = "New"
-MENU_FILE_OPEN                  = "Open..."
-MENU_FILE_SAVE                  = "Save"
-MENU_FILE_SAVEAS                = "Save as..."
-MENU_FILE_QUIT                  = "Quit"
-
-MENU_CONTROL                    = "Control"
-MENU_CONTROL_PLAY_SEQUENCE      = "Play sequence"
-MENU_CONTROL_PLAY_MACRO         = "Play macro"
-MENU_CONTROL_PAUSE              = "Pause"
-MENU_CONTROL_STOP               = "Stop"
-
-MENU_FAVOURITES                  = "Add to favourites"
-
-MENU_VIEW                       = "View"
-
-MENU_SETTINGS                   = "Settings"
-MENU_SETTINGS_ONLYSCANS    = "Only scan macros"
-
-TIP_MENU_FILE_CONFIGURATION    = "Configuration"
-TIP_MENU_FILE_QUIT                  = "Quit application"
-TIP_MENU_FILE_NEW                   = "New sequence"
-TIP_MENU_FILE_OPEN                  = "Open sequence..."
-TIP_MENU_FILE_SAVE                  = "Save sequence"
-TIP_MENU_FILE_SAVEAS                = "Save sequence as..."
-
-TIP_MENU_CONTROL_PLAY_SEQUENCE      = "Play sequence"
-TIP_MENU_CONTROL_PLAY_MACRO         = "Play macro"
-TIP_MENU_CONTROL_PAUSE              = "Pause"
-TIP_MENU_CONTROL_STOP               = "Stop"
-
-TIP_MENU_FAVOURITES                  = "Add to favourites"
-
-
-SHORTCUT_MENU_FILE_CONFIGURATION        = "F2"
-SHORTCUT_MENU_FILE_NEW                  = "Ctrl+N"
-SHORTCUT_MENU_FILE_OPEN                 = "Ctrl+O"
-SHORTCUT_MENU_FILE_SAVE                 = "Ctrl+S"
-SHORTCUT_MENU_FILE_SAVEAS               = "Ctrl+Shift+S"
-SHORTCUT_MENU_FILE_QUIT                 = "Ctrl+Q"
-
-SCAN_MACROS_FILTER = "scan"
-ALLOWS_HOOKS_FILTER = 'allowsHooks'
-
-
-PARAM_REPEAT           = "ParamRepeat"
-
-PARAM_OBJECT                = "Object"
-PARAM_MOTOR                 = "Motor"
-PARAM_PSEUDOMOTOR           = "PseudoMotor"
-PARAM_MOVEABLE              = "Moveable"
-PARAM_CONTROLLER_CLASS      = "ControllerClass"
-PARAM_CONTROLLER            = "Controller"
-PARAM_MOTOR_PARAM           = "MotorParam"
-PARAM_MEASUREMENT_GROUP     = "MeasurementGroup"
-PARAM_IO_REGISTER           = "IORegister"
-PARAM_COMMUNICATION_CHANNEL = "ComChannel"
-PARAM_EXPERIMENTAL_CHANNEL  = "ExpChannel"
-PARAM_MACRO_CODE            = "MacroCode"
-PARAM_MACRO_CLASS           = "MacroClass"
-PARAM_MACRO_FUNCTION        = "MacroFunction"
-PARAM_MACRO_LIBRARY         = "MacroLibrary"
-
-
-PARAM_STRING                = "String"
-
-PARAM_FILENAME              = "FileName"
-
-PARAM_FILENAME_2            = "Filename" 
-
-PARAM_INTEGER               = "Integer"
-
-PARAM_FLOAT                 = "Float"
-        
-PARAM_FILEDIALOG            = "File"
-        
-PARAM_USERNAME              = "User"
-
-PARAM_BOOLEAN               = "Boolean"
-
-MAX_REPEATS =   "max"
-MIN_REPEATS =   "min"   
-
-EDITOR_COMBOBOX_PARAMS = [PARAM_OBJECT,
-                          PARAM_MOTOR,
-                          PARAM_PSEUDOMOTOR,
-                          PARAM_MOVEABLE,
-                          PARAM_CONTROLLER_CLASS,
-                          PARAM_CONTROLLER,
-                          PARAM_MOTOR_PARAM, 
-                          PARAM_MEASUREMENT_GROUP, 
-                          PARAM_IO_REGISTER, 
-                          PARAM_COMMUNICATION_CHANNEL, 
-                          PARAM_EXPERIMENTAL_CHANNEL, 
-                          PARAM_MACRO_CODE,
-                          PARAM_MACRO_CLASS,
-                          PARAM_MACRO_FUNCTION,
-                          PARAM_MACRO_LIBRARY]
-
-EDITOR_LINEEDIT_PARAMS = [PARAM_STRING, 
-                          PARAM_FILENAME, 
-                          PARAM_FILENAME_2,
-                          "Env"]
-
-EDITOR_SPINBOX_PARAMS = [PARAM_INTEGER]
-
-EDITOR_DOUBLESPINBOX_PARAMS = [PARAM_FLOAT]
-
-EDITOR_FILEDIALOG_PARAMS = [PARAM_FILEDIALOG]
-
-EDITOR_BOOLEAN_PARAMS = [PARAM_BOOLEAN]
-
-EDITOR_NONEDITABLE_PARAMS = [PARAM_USERNAME] 
-
-TAG_MACRO           = 'macro'
-TAG_PARAM           = 'param' 
-TAG_PARAMREPEAT     = 'paramrepeat'
-TAG_REPEAT          = 'repeat'
-TAG_PARAMS          = 'params'
-TAG_SEQUENCE        = 'sequence'
-TAG_ALLOWED_HOOK    = 'allowedHook'
-TAG_HOOK            = 'hookPlaces'
-
-ATTRIBUTE_NAME          = 'name'
-ATTRIBUTE_VALUE         = 'value'
-ATTRIBUTE_INDEX         = 'nr'
-ATTRIBUTE_DESCRIPTION   = 'description'
-ATTRIBUTE_DEFVALUE      = 'defvalue'
-ATTRIBUTE_TYPE          = 'type'
-ATTRIBUTE_ALLOWEDHOOKS  = 'allowedHooks'
-ATTRIBUTE_HASPARAMS     = 'hasParams'
-ATTRIBUTE_MIN           = 'min'
-ATTRIBUTE_MAX           = 'max'
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macrobutton.py b/lib/taurus/qt/qtgui/extra_macroexecutor/macrobutton.py
deleted file mode 100644
index 3ca8e8c..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macrobutton.py
+++ /dev/null
@@ -1,366 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-macrobutton.py: 
-"""
-__all__=['MacroButton']
-
-import PyTango
-
-from taurus.qt import Qt
-
-import taurus
-from taurus.qt.qtgui.container import TaurusWidget
-from taurus.qt.qtgui.dialog import ProtectTaurusMessageBox
-from taurus.core.util.colors import DEVICE_STATE_PALETTE
-
-import functools
-
-from ui_macrobutton import Ui_MacroButton
-
-class DoorStateListener(Qt.QObject):
-
-    __pyqtSignals__ = ["doorStateChanged"]
-
-    def eventReceived(self, evt_src, evt_type, evt_value):
-        if evt_type not in (taurus.core.taurusbasetypes.TaurusEventType.Change, taurus.core.taurusbasetypes.TaurusEventType.Periodic):
-            return
-        door_state = evt_value.value
-        self.emit(Qt.SIGNAL('doorStateChanged'), door_state)
-        
-
-class MacroButton(TaurusWidget):
-    ''' This class is intended to be used as a button to execute macros.
-    The model must be a valid door.
-    
-    ..note:: Not implemented but will be needed: set an icon
-
-    ..note::
-        
-        It may be useful to have a slot update_macro_param that any qwidget signal may be
-        connected to. The only condition might be that the sender widget should have an
-        attribute 'widget.macro_param_index' in order to determine where the value has
-        to be added.
- 
-    ..note::
-        
-        It may be useful to have all the streams from qdoor available somehow
-        (right-click?)
-    '''
-
-    __pyqtSignals__ = ['statusUpdated', 'resultUpdated']
-    
-    def __init__(self, parent=None, designMode=False):
-        TaurusWidget.__init__(self, parent, designMode)
-        self.door = None
-        self.door_state_listener = None
-        self.macro_name = ''
-        self.macro_args = []
-        self.running_macro = None
-
-        self.ui = Ui_MacroButton()
-        self.ui.setupUi(self)
-        self.ui.progress.setValue(0)
-
-        self.ui.button.setCheckable(True)
-        self.connect(self.ui.button, Qt.SIGNAL('clicked()'), self.button_clicked)
-
-    def toggleProgress(self, visible):
-        self.ui.progress.setVisible(visible)
-
-    def setModel(self, model):
-        TaurusWidget.setModel(self, model)
-        if self.door is not None:
-            self.disconnect(self.door, Qt.SIGNAL('macroStatusUpdated'), self.statusUpdated)
-            self.disconnect(self.door, Qt.SIGNAL('resultUpdated'), self.resultUpdated)
-            self.door.getAttribute('State').removeListener(self.door_state_listener)
-
-        try: self.door = taurus.Device(model)
-        except: return
-
-        self.connect(self.door, Qt.SIGNAL('macroStatusUpdated'), self.statusUpdated)
-        self.connect(self.door, Qt.SIGNAL('resultUpdated'), self.resultUpdated)
-
-        # Manage Door Tango States
-        self.door_state_listener = DoorStateListener()
-        self.connect(self.door_state_listener, Qt.SIGNAL('doorStateChanged'), self.doorStateChanged)
-        self.door.getAttribute('State').addListener(self.door_state_listener)
-
-    def doorStateChanged(self, state):
-        color = '#'+DEVICE_STATE_PALETTE.hex(state)
-        stylesheet = 'QFrame{border: 4px solid %s;}' % color
-        self.ui.frame.setStyleSheet(stylesheet)
-
-        # In case state is not ON, and macro not triggered by the button, disable it
-        door_available = True
-        if state not in [PyTango.DevState.ON, PyTango.DevState.ALARM] and not self.ui.button.isChecked():
-            door_available = False
-            self.ui.progress.setValue(0)
-            
-        self.ui.button.setEnabled(door_available)
-        self.ui.progress.setEnabled(door_available)
-            
-
-    def statusUpdated(self, *args):
-        # SHOULD SEE THE DOCUMENTATION ABOUT THE ARGS AND ALSO THE STATUS STATE MACHINE
-        # ARGS FORMAT IS (GUESSING WITH PRINT STATEMENTS)
-        # e.g. ((<taurus.core.tango.sardana.macro.Macro object at 0x7f29300bc210>, [{u'step': 100.0, u'state': u'stop', u'range': [0.0, 100.0], u'id': u'b226f5e8-c807-11e0-8abe-001d0969db5b'}]),)
-        # ( (MacroObj, [status_dict, .?.]), .?.)
-
-        # QUESTIONS: THIS MACRO OBJECT HAS ALOS STEP, RANGE, ...
-        # AND ALSO THE STATUS DICT... WHICH SHOULD I USE?
-
-        first_tuple = args[0]
-        self.running_macro = first_tuple[0]
-
-        status_dict = first_tuple[1][0]
-        # KEYS RECEIVED FROM A 'SCAN' MACRO AND A 'TWICE' MACRO: IS IT GENERAL ?!?!?!
-        state = status_dict['state']
-        step = status_dict['step']
-        step_range = status_dict['range']
-        macro_id = status_dict['id']
-
-        # Update progress bar
-        self.ui.progress.setMinimum(step_range[0])
-        self.ui.progress.setMaximum(step_range[1])
-        self.ui.progress.setValue(step)
-
-        if state in ['stop', 'abort', 'finish', 'alarm']:
-            self.ui.button.setChecked(False)
-        
-        self.emit(Qt.SIGNAL('statusUpdated'), status_dict)
-
-    def resultUpdated(self, *args):
-        # ARGS APPEAR TO BE EMPTY... SHOULD THEY CONTAIN THE RESULT ?!?!?!
-        # I have to rely on the 'macro object' received in the last status update
-        if self.running_macro is None:
-            return
-        result = self.running_macro.getResult()
-        self.emit(Qt.SIGNAL('resultUpdated'), result)
-
-    def setText(self, text):
-        self.setButtonText(text)
-
-    def setButtonText(self, text):
-        # SHOULD ALSO BE POSSIBLE TO SET AN ICON
-        self.ui.button.setText(text)
-
-    def setMacroName(self, macro_name):
-        self.macro_name = str(macro_name)
-
-    def updateMacroArgument(self, index, value):
-        while len(self.macro_args) < index + 1:
-            self.macro_args.append('')
-            
-        self.macro_args[index] = str(value)
-
-    def updateMacroArgumentFromSignal(self, index, obj, signal):
-        self.connect(obj, signal, functools.partial(self.updateMacroArgument,index))
-
-    def button_clicked(self):
-        if self.ui.button.isChecked():
-            self.runMacro()
-        else:
-            self.abort()
-
-    @ProtectTaurusMessageBox(msg='An error occurred trying to execute the macro.')
-    def runMacro(self):
-        if self.door is None:
-            return
-
-        # Thanks to gjover for the hint... :-D
-        #macro_cmd = self.macro_name + ' ' + ' '.join(self.macro_args)
-        macro_cmd_xml = '<macro name="%s">\n' % self.macro_name
-        for arg in self.macro_args:
-            macro_cmd_xml += '<param value="%s"/>\n' % arg
-        macro_cmd_xml += '</macro>'
-        try:
-            #self.door.runMacro(macro_cmd)
-            self.door.runMacro(macro_cmd_xml)
-        except Exception,e:
-            self.ui.button.setChecked(False)
-            raise e
-
-    def abort(self):
-        if self.door is None:
-            return
-        self.door.PauseMacro()
-        # Since this could be done by error (impatient users clicking more than once)
-        # we provide a warning message that does not make the process too slow
-        # It may also be useful and 'ABORT' at TaurusApplication level (macros+motions+acquisitions)
-        title = 'Aborting macro'
-        message = 'The following macro is still running:\n\n'
-        message += '%s %s\n\n' % (self.macro_name, ' '.join(self.macro_args))
-        message += 'Are you sure you want to abort?\n'
-        buttons = Qt.QMessageBox.Ok | Qt.QMessageBox.Cancel
-        ans = Qt.QMessageBox.warning(self, title, message, buttons, Qt.QMessageBox.Ok)
-        if ans == Qt.QMessageBox.Ok:
-            self.door.abort(synch=True)
-        else:
-            self.ui.button.setChecked(True)
-            self.door.ResumeMacro()
-            
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        return {'container': False, 
-                'group': 'Taurus Sardana', 
-                'module': 'taurus.qt.qtgui.extra_macroexecutor', 
-                'icon': ':/designer/pushbutton.png'}
-
-
-
-class MacroButtonAbortDoor(TaurusWidget):
-    def __init__(self, parent=None, designMode=False):
-        TaurusWidget.__init__(self, parent, designMode)
-        self.setLayout(Qt.QGridLayout())
-        self.layout().setMargin(0)
-        self.layout().setSpacing(0)
-
-        self.btn_abort = Qt.QPushButton('Abort')
-        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Expanding)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        self.btn_abort.setSizePolicy(sizePolicy)
-        
-        self.door = None
-        self.btn_abort.setToolTip('Abort Macro')
-
-        self.layout().addWidget(self.btn_abort, 0, 0)
-        self.connect(self.btn_abort, Qt.SIGNAL('clicked()'), self.abort)
-
-    def setModel(self, model):
-        TaurusWidget.setModel(self, model)
-        try: self.door = taurus.Device(model)
-        except: self.door = None
-
-    @ProtectTaurusMessageBox(msg='An error occurred trying to abort the macro.')
-    def abort(self):
-        if self.door is not None:
-            self.door.stopMacro()
-
-
-
-if __name__ == '__main__':
-    import sys
-    app = Qt.QApplication(sys.argv)
-
-    w = Qt.QWidget()
-    w.setLayout(Qt.QGridLayout())
-
-    col = 0
-    clear_button = Qt.QPushButton('clear')
-    w.layout().addWidget(clear_button, 0, col, 2, 1)
-    
-    col += 1
-    w.layout().addWidget(Qt.QLabel('macro name'), 0, col)
-    macro_name = Qt.QLineEdit()
-    w.layout().addWidget(macro_name, 1, col)
-
-    col += 1
-    w.layout().addWidget(Qt.QLabel('arg0'), 0, col)
-    arg0 = Qt.QLineEdit()
-    w.layout().addWidget(arg0, 1, col)
-
-    col += 1
-    w.layout().addWidget(Qt.QLabel('arg1'), 0, col)
-    arg1 = Qt.QLineEdit()
-    w.layout().addWidget(arg1, 1, col)
-
-    col += 1
-    w.layout().addWidget(Qt.QLabel('arg2'), 0, col)
-    arg2 = Qt.QLineEdit()
-    w.layout().addWidget(arg2, 1, col)
-
-    col += 1
-    w.layout().addWidget(Qt.QLabel('arg3'), 0, col)
-    arg3 = Qt.QLineEdit()
-    w.layout().addWidget(arg3, 1, col)
-
-    col += 1
-    w.layout().addWidget(Qt.QLabel('arg4'), 0, col)
-    arg4 = Qt.QLineEdit()
-    w.layout().addWidget(arg4, 1, col)
-
-    from taurus.qt.qtcore.tango.sardana.macroserver import registerExtensions
-    registerExtensions()
-    mb = MacroButton()
-    mb.setModel('door/gc/1')
-
-    w.layout().addWidget(mb, 2, 0, 2, 7)
-
-    w.layout().addWidget(Qt.QLabel('Result:'), 4, 0)
-
-    result_label = Qt.QLabel()
-    w.layout().addWidget(result_label, 4, 1, 1, 5)
-
-    show_progress = Qt.QCheckBox('Progress')
-    show_progress.setChecked(True)
-    w.layout().addWidget(show_progress, 5, 0)
-
-    mb_abort = MacroButtonAbortDoor()
-    mb_abort.setModel('door/gc/1')
-    w.layout().addWidget(mb_abort, 5, 1)
-
-    # Change macro name
-    Qt.QObject.connect(macro_name, Qt.SIGNAL('textChanged(QString)'), mb.setMacroName)
-    Qt.QObject.connect(macro_name, Qt.SIGNAL('textChanged(QString)'), mb.setButtonText)
-
-    # Change Nth macro argument
-    mb.updateMacroArgumentFromSignal(0, arg0, Qt.SIGNAL('textChanged(QString)'))
-    mb.updateMacroArgumentFromSignal(1, arg1, Qt.SIGNAL('textChanged(QString)'))
-    mb.updateMacroArgumentFromSignal(2, arg2, Qt.SIGNAL('textChanged(QString)'))
-    mb.updateMacroArgumentFromSignal(3, arg3, Qt.SIGNAL('textChanged(QString)'))
-    mb.updateMacroArgumentFromSignal(4, arg4, Qt.SIGNAL('textChanged(QString)'))
-
-
-    def update_result(result):
-        result_label.setText(str(result))
-    
-    def toggle_progress(showProgress):
-        visible = show_progress.isChecked()
-        mb.toggleProgress(visible)
-
-    def clear_params():
-        for line_edit in [macro_name, arg0, arg1, arg2, arg3, arg4]:
-            line_edit.setText('')
-
-    # Toggle progressbar
-    Qt.QObject.connect(show_progress, Qt.SIGNAL('stateChanged(int)'), toggle_progress)
-    # Update possible macro result
-    Qt.QObject.connect(mb, Qt.SIGNAL('resultUpdated'), update_result)
-    # Clear parameters
-    Qt.QObject.connect(clear_button, Qt.SIGNAL('clicked()'), clear_params)
-    
-    # Since everything is now connected, the parameters will be updated
-    macro_name.setText('ascan')
-    arg0.setText('gcdmot1')
-    arg1.setText('1')
-    arg2.setText('10')
-    arg3.setText('5')
-    arg4.setText('0.1')
-
-    w.show()
-    sys.exit(app.exec_())
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macrodescriptionviewer.py b/lib/taurus/qt/qtgui/extra_macroexecutor/macrodescriptionviewer.py
deleted file mode 100644
index c03bcf5..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macrodescriptionviewer.py
+++ /dev/null
@@ -1,100 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-macrodescriptionviewer.py: 
-"""
-
-from taurus.qt import Qt
-
-from taurus.qt.qtgui.base import TaurusBaseWidget
-import taurus.core
-
-class TaurusMacroDescriptionViewer(Qt.QTextEdit, TaurusBaseWidget):
-    __pyqtSignals__ = ("modelChanged(const QString &)",)
-    
-    def __init__(self, parent = None, designMode = False):
-        name = "TaurusMacroDescriptionView"
-        self.call__init__wo_kw(Qt.QTextEdit, parent)
-        self.call__init__(TaurusBaseWidget, name)
-        self.setReadOnly(True)
-        self.setFont(Qt.QFont("Courier",9))
-        
-    def defineStyle(self):
-        """ Defines the initial style for the widget """
-        self.updateStyle()
-
-    def getModelClass(self):
-        return taurus.core.taurusdevice.TaurusDevice
-
-    def updateStyle(self):
-        self.update()
-        
-    def onMacroNameChanged(self, macroName):
-        """Can be connected to an event emitted after macro name was changed.
-           As an argument receives macroName and ask BaseMacroServer object 
-           about already prepared and stored in MacroInfoObj object macro description"""
-        macroServer = self.getModelObj()
-        
-        if macroServer is None or macroName is None or macroName == "":
-            self.setText("")
-            return
-        
-        self.setText(str(macroServer.getMacroInfoObj(macroName).doc))
-
-    def getFormatedToolTip(self,cache=True):
-        """This method was overridden to get rid of the default tooltip of TaurusWidget"""
-        return ""
-        
-        
-    model = Qt.pyqtProperty("QString", 
-                                TaurusBaseWidget.getModel, 
-                                TaurusBaseWidget.setModel, 
-                                TaurusBaseWidget.resetModel)
-    
-    useParentModel = Qt.pyqtProperty("bool", 
-                                         TaurusBaseWidget.getUseParentModel, 
-                                         TaurusBaseWidget.setUseParentModel,
-                                         TaurusBaseWidget.resetUseParentModel)
-    
-def test():
-    from taurus.core.tango.sardana.macroserver import registerExtensions
-    import sys    
-    registerExtensions()
-    app = Qt.QApplication(sys.argv)
-    taurusMacroDescriptionView = TaurusMacroDescriptionViewer(designMode=1)
-    if len(sys.argv) != 2:
-        taurusMacroDescriptionView.setModel("macroserver/zreszela/1")
-    else:
-        taurusMacroDescriptionView.setModel(sys.argv[1])
-    taurusMacroDescriptionView.onMacroChanged("mv")
-    taurusMacroDescriptionView.show()
-    sys.exit(app.exec_())
-    
-       
-if __name__ == "__main__":
-    test()
-
-
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macroeditor.py b/lib/taurus/qt/qtgui/extra_macroexecutor/macroeditor.py
deleted file mode 100644
index 3aec5fb..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macroeditor.py
+++ /dev/null
@@ -1,238 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-from taurus.qt import Qt
-from PyQt4 import Qsci
-
-from taurus.qt.qtgui.resource import getThemeIcon
-
-class MacroEditor(Qsci.QsciScintilla):
-    __pyqtSignals__ = ("modelChanged(const QString &)",)
-    
-    def __init__(self, parent = None, designMode = False):
-        Qsci.QsciScintilla.__init__(self, parent)
-
-        self.textEdit = Qsci.QsciScintilla()
-        self.textEdit.setAutoCompletionThreshold(1)
-        self.textEdit.setAutoCompletionSource(Qsci.QsciScintilla.AcsAll)
-        self.textEdit.setAutoIndent(True)
-        self.textEdit.setCallTipsStyle(Qsci.QsciScintilla.CallTipsContext)
-        self.textEdit.setCallTipsVisible(0)
-        self.pythonLexer = Qsci.QsciLexerPython(self.textEdit)
-        self.api = Qsci.QsciAPIs(self.pythonLexer)
-        self.api.add(Qt.QString("dupa(a,b)this is function dupa"))
-        self.api.prepare()
-        self.pythonLexer.setAPIs(self.api)
-        self.textEdit.setLexer(self.pythonLexer)
-
-        self.newAction = Qt.QAction(getThemeIcon("document-new"), "New", self)
-        self.connect(self.newAction, Qt.SIGNAL("triggered()"), self.newFile)
-        self.newAction.setToolTip("Create new file")
-        self.newAction.setShortcut("Ctrl+N") 
-                                   
-        self.openAction = Qt.QAction(getThemeIcon("document-open"), "Open", self)
-        self.connect(self.openAction, Qt.SIGNAL("triggered()"), self.openFile)
-        self.openAction.setToolTip("Open existing file")
-        self.openAction.setShortcut("Ctrl+O")
-        
-        self.saveAction = Qt.QAction(getThemeIcon("document-save"), "Save", self)
-        self.connect(self.saveAction, Qt.SIGNAL("triggered()"), self.saveFile)
-        self.saveAction.setToolTip("Save document to disk")
-        self.saveAction.setShortcut("Ctrl+S")
-        
-        self.saveAsAction = Qt.QAction(getThemeIcon("document-save-as"), "Save as...", self)
-        self.connect(self.saveAsAction, Qt.SIGNAL("triggered()"), self.saveFile)
-        self.saveAsAction.setToolTip("Save document under a new name")
-    
-        self.cutAction = Qt.QAction(getThemeIcon("edit-cut"), "Cut", self)
-        self.connect(self.cutAction, Qt.SIGNAL("triggered()"), self.cut)
-        self.cutAction.setToolTip("Cut current selection's contents to the clipboard")
-        self.cutAction.setShortcut("Ctrl+X")
-        self.cutAction.setEnabled(False)
-    
-        self.copyAction = Qt.QAction(getThemeIcon("edit-copy"), "Copy", self)
-        self.connect(self.copyAction, Qt.SIGNAL("triggered()"), self.copy)
-        self.copyAction.setToolTip("Copy current selection's contents to the clipboard")
-        self.copyAction.setShortcut("Ctrl+C")
-        self.copyAction.setEnabled(False)
-
-        self.pasteAction = Qt.QAction(getThemeIcon("edit-paste"), "Paste", self)
-        self.connect(self.pasteAction, Qt.SIGNAL("triggered()"), self.paste)
-        self.pasteAction.setToolTip("Paste the clipboard's contents into the current selection")
-        self.pasteAction.setShortcut("Ctrl+V")
-
-        self.aboutAction = Qt.QAction("About", self)
-        self.connect(self.aboutAction, Qt.SIGNAL("triggered()"), self.about)
-        self.aboutAction.setToolTip("Show the application's About box")
-                
-        self.connect(self.textEdit, Qt.SIGNAL("copyAvailable(bool)"), self.cutAction.setEnabled)
-        self.connect(self.textEdit, Qt.SIGNAL("copyAvailable(bool)"), self.copyAction.setEnabled)
-
-        self.setCurrentFile("")
-        
-    def closeEvent(self, event):
-        if self.maybeSave():
-#            self.writeSettings()
-            event.accept()
-        else: 
-            event.ignore()
-            
-    def newFile(self):
-        if self.maybeSave():
-            self.textEdit.clear()
-            self.setCurrentFile("")
-                
-    def openFile(self):
-        if self.maybeSave():
-            fileName = Qt.QFileDialog.getOpenFileName(self)
-        if not fileName is None and file != "":
-            self.loadFile(fileName)
-            
-    def saveFile(self):
-        if self.curFile == "":
-            return self.__saveAs()
-        else:
-            return self.__saveFile(self.curFile)
-        
-    def __saveAs(self):
-        self.fileName = Qt.QFileDialog.getSaveFileName(self)
-        if self.fileName == "":
-            return False
-        return self.__saveFile(self.fileName)
-
-    def about(self):
-        Qt.QMessageBox.about(self, "About MacroEditor", "The MacroEditor by Zbigniew Reszela")
-
-    def documentWasModified(self):
-        self.setWindowModified(self.textEdit.isModified())
-        
-    def createMenus(self):
-        fileMenu = self.menuBar().addMenu("File")
-        fileMenu.addAction(self.newAction)
-        fileMenu.addAction(self.openAction)
-        fileMenu.addAction(self.saveAction)
-        fileMenu.addAction(self.saveAsAction)
-        
-        editMenu = self.menuBar().addMenu("Edit")
-        editMenu.addAction(self.cutAction)
-        editMenu.addAction(self.copyAction)
-        editMenu.addAction(self.pasteAction)
-
-        self.menuBar().addSeparator()
-
-        helpMenu = self.menuBar().addMenu("&Help")
-        helpMenu.addAction(self.aboutAction)
-        
-#    def createToolBars(self):
-#        fileToolBar = self.addToolBar("File")
-#        fileToolBar.setIconSize(Qt.QSize(36,36))
-#        fileToolBar.addAction(self.newAction)
-#        fileToolBar.addAction(self.openAction)
-#        fileToolBar.addAction(self.saveAction)
-#        fileToolBar.addAction(self.saveAsAction)
-#    
-#        editToolBar = self.addToolBar("Edit")
-#        editToolBar.setIconSize(Qt.QSize(36,36))
-#        editToolBar.addAction(self.cutAction)
-#        editToolBar.addAction(self.copyAction)
-#        editToolBar.addAction(self.pasteAction)
-
-    def createStatusBar(self):
-        self.statusBar().showMessage("Ready")
-            
-    def maybeSave(self):
-        if self.textEdit.isModified():
-            ret = Qt.QMessageBox.warning(self, "MacroEditor",
-                     "The document has been modified\nDo you want to save your changes?",
-                     Qt.QMessageBox.Yes | Qt.QMessageBox.Default,
-                     Qt.QMessageBox.No,
-                     Qt.QMessageBox.Cancel | Qt.QMessageBox.Escape)
-            if ret == Qt.QMessageBox.Yes:
-                return self.save()
-            elif ret == Qt.QMessageBox.Cancel:
-                return False
-        return True
-        
-    def loadFile(self, fileName):
-        try:
-            fileHandle = open(fileName, 'r')
-        except IOError, e:
-            Qt.QMessageBox.warning(self, "MacroEditor", "Cannot read file %s:\n%s."%(fileName, e))
-            return False
-        fileContents = fileHandle.read()    
-        Qt.QApplication.setOverrideCursor(Qt.Qt.WaitCursor)
-        self.textEdit.setText(fileContents)
-        Qt.QApplication.restoreOverrideCursor()
-    
-        self.setCurrentFile(fileName)
-        self.statusBar().showMessage("File loaded", 2000)
-
-    def __saveFile(self, fileName):
-        try:
-            file = open(fileName, 'w')
-        except IOError, e:
-            Qt.QMessageBox.warning(self, "MacroEditor", "Cannot write file %s:\n%s."%(fileName, e))               
-            return False
-        Qt.QApplication.setOverrideCursor(Qt.Qt.WaitCursor)
-        file.write(self.textEdit.text())
-        Qt.QApplication.restoreOverrideCursor()
-        self.setCurrentFile(fileName)
-        self.statusBar().showMessage(("File saved"), 2000)
-        return True
-    
-    def setCurrentFile(self, fileName):
-        self.curFile = fileName
-        self.textEdit.setModified(False)
-        self.setWindowModified(False)
-
-        if self.curFile == "":
-            shownName = "untitled.txt"
-        else:
-            shownName = self.strippedName(self.curFile)
-        self.setWindowTitle("%s[*] - %s"%(shownName,"MacroExecutor"))
-
-    def strippedName(self, fullFileName):
-        return Qt.QFileInfo(fullFileName).fileName()
-    
-    def cut(self):
-        pass
-    
-    def copy(self):
-        pass
-    
-    def paste(self):
-        pass
-    
-
-def test():
-    import sys    
-    app = Qt.QApplication(sys.argv)
-    macroEditor = MacroEditor()
-    macroEditor.show()
-    sys.exit(app.exec_())
-    
-       
-if __name__ == "__main__":
-    test()
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macroexecutor.py b/lib/taurus/qt/qtgui/extra_macroexecutor/macroexecutor.py
deleted file mode 100644
index 9a821e4..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macroexecutor.py
+++ /dev/null
@@ -1,998 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-sequenceeditor.py: 
-"""
-
-import sys
-from copy import deepcopy
-
-import PyTango
-
-from taurus.qt import Qt
-from taurus import Device
-from taurus.qt.qtgui.container import TaurusWidget, TaurusMainWindow, TaurusBaseContainer
-from taurus.qt.qtgui.display import TaurusLed
-from taurus.qt.qtgui.dialog import TaurusMessageBox
-
-from favouriteseditor import FavouritesMacrosEditor, HistoryMacrosViewer
-from common import MacroComboBox, MacroExecutionWindow, standardPlotablesFilter
-from taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor import ParamEditorManager, ParamEditorModel, StandardMacroParametersEditor
-from taurus.core.tango.sardana.macro import MacroRunException
-from taurus.core.tango.sardana import macro
-
-
-from taurus.qt.qtgui.resource import getIcon, getThemeIcon
-
-        
-class MacroProgressBar(Qt.QProgressBar):
-    
-    def __init__(self, parent=None):
-        Qt.QProgressBar.__init__(self, parent)
-        
-class SpockCommandWidget(Qt.QLineEdit, TaurusBaseContainer):
-    def __init__(self, name, parent=None, designMode = False):
-        #self.newValue - is used as a flag to indicate whether a controlUp controlDown actions are used to iterate existing element or put new one
-        #self.disableEditMode - flag, used to disable edition, when user enters name of the macro which is not valid (not allowed to edit in the yellow line)
-        #                   switches off validation
-        #disableSpockCommandUpdate - flag, it disables updates of the model when macro is edited by macroEditor
-        
-        Qt.QLineEdit.__init__(self, parent)
-        TaurusBaseContainer.__init__(self, name, parent, designMode)
-
-        self._model = None 
-        self.setFont(Qt.QFont("Courier",9))
-        palette = Qt.QPalette()
-        palette.setColor(Qt.QPalette.Base, Qt.QColor('yellow'))
-        self.setPalette(palette)
-        self.currentIndex = Qt.QModelIndex()
-        self.newValue = False
-        self.disableSpockCommandUpdate = False
-        self.disableEditMode = True
-        self.setEnabled(False)
-        
-        self.setActions()
-        self.connect(self,Qt.SIGNAL("textChanged(const QString &)"), self.textChanged)
-        self.connect(self,Qt.SIGNAL("returnPressed()"), self.returnPressed)
-        
-    def setActions(self):
-        self._downAction = Qt.QAction("downAction", self)
-        self._upAction = Qt.QAction("upAction", self)
-        self._ctrlDownAction = Qt.QAction("controlDownAction", self)
-        self._ctrlUpAction = Qt.QAction("controlUpAction", self)
-        
-        self._ctrlDownAction.setShortcut(Qt.QKeySequence(Qt.Qt.CTRL + Qt.Qt.Key_Down))
-        self._ctrlUpAction.setShortcut(Qt.QKeySequence(Qt.Qt.CTRL + Qt.Qt.Key_Up))
-        self._downAction.setShortcuts([Qt.Qt.Key_Down])
-        self._upAction.setShortcuts([Qt.Qt.Key_Up])
-        
-        self._ctrlDownAction.setShortcutContext (Qt.Qt.WidgetShortcut)
-        self._ctrlUpAction.setShortcutContext (Qt.Qt.WidgetShortcut)
-        self._downAction.setShortcutContext (Qt.Qt.WidgetShortcut)
-        self._upAction.setShortcutContext (Qt.Qt.WidgetShortcut)
-        
-        self.addAction(self._ctrlDownAction)
-        self.addAction(self._ctrlUpAction)
-        self.addAction(self._downAction)
-        self.addAction(self._upAction)
-        self.connect(self._downAction, Qt.SIGNAL("triggered()"), self.downAction)
-        self.connect(self._upAction, Qt.SIGNAL("triggered()"), self.upAction)
-        self.connect(self._ctrlDownAction, Qt.SIGNAL("triggered()"), self.controlDownAction)
-        self.connect(self._ctrlUpAction, Qt.SIGNAL("triggered()"), self.controlUpAction)
-        
-    def setCommand(self):
-        command = self._model.toSpockCommand()
-        command = command.replace("None", "").strip()
-        if not self.disableSpockCommandUpdate:
-            self.setText(command)
-        
-    def setModel(self, model):
-        enable = bool(model)
-        self.disableEditMode = not enable
-        self.setEnabled(enable)
-        self._model = model
-        self.connect(self._model, Qt.SIGNAL("dataChanged(QModelIndex,QModelIndex)"), self.setCommand)
-        self.connect(self._model, Qt.SIGNAL("modelReset()"), self.setCommand)
-        
-    def model(self):
-        return self._model
-
-    def getIndex(self, elementNumber = -1):
-        #Returns QModelIndex of the required element (number of single parameter). If the elementNumber == -1 next single parameter index is returned.
-        if elementNumber == -1:
-            ix = self.currentIndex
-            elementNumber = 1
-        elif elementNumber == 0:
-            return Qt.QModelIndex()
-        else:
-            ix=Qt.QModelIndex()
-        
-        (col, row, parentIdx)=(ix.column(), ix.row(), ix.parent())
-        #to start from second column
-        if col == -1 and row == -1:
-            ix = self.forwardIdx(0, 1, ix)
-        for i in range (0, elementNumber):
-            #This condition in case we start tabbing with cursor on first column
-            if col == 0:
-                currentNode = self.model().nodeFromIndex(ix)
-                if isinstance(currentNode, macro.SingleParamNode):
-                    nextIdx = self.forwardIdx(row, 1, parentIdx)
-                else:
-                    nextIdx = self.forwardIdx(0, 1, ix)
-            else:
-                nextIdx = self.forwardIdx(row + 1, 1, parentIdx)
-            #this condition in case there is no next index and we want to pass focus 
-            #to next widget in parent obj
-            if nextIdx == "term":
-                return Qt.QModelIndex()
-            ix = nextIdx
-            (col, row, parentIdx)=(ix.column(), ix.row(), ix.parent())
-        return ix
-    
-    def forwardIdx(self, row, col, parentIdx):
-        #This method is moving down the tree to get next SingleParamNode index.
-        try:
-            proposalIdx = self.model().index(row, col, parentIdx)
-        except AssertionError:
-
-            if parentIdx.row() == -1:
-                return Qt.QModelIndex() 
-            grandParentIdx = parentIdx.parent()
-            return self.forwardIdx(parentIdx.row() + 1, col, grandParentIdx)
-
-        proposalNode = self.model().nodeFromIndex(proposalIdx)
-
-        if isinstance(proposalNode, macro.SingleParamNode):
-            return proposalIdx
-        elif isinstance(proposalNode, macro.RepeatNode):
-            return self.forwardIdx(0, 1, proposalIdx)
-        elif isinstance(proposalNode, macro.RepeatParamNode):
-            if len(proposalNode) > 0:
-                return self.forwardIdx(0, 1, proposalIdx)
-            else:
-                return self.forwardIdx(row + 1, col, proposalIdx)
-
-        elif not proposalIdx.isValid():
-            proposalIdx = parentIdx.sibling(parentIdx.row()+1, 0)
-            
-            if proposalIdx.isValid():
-                proposalIdx = proposalIdx.child(0,1)
-            else:
-                while not proposalIdx.isValid():
-                    parentIdx = parentIdx.parent()
-                    if not parentIdx.isValid():
-
-                        return Qt.QModelIndex()
-                    proposalIdx = parentIdx.sibling(parentIdx.row()+1, 1)
-
-            return proposalIdx
-   
-    def validateAllExpresion(self, secValidation = False):
-        #This method is responsible for full validation of the macro. It is executed whenever the text is changed (when user edits values).
-        #Validation starts with checking if the macro (name) is valid.
-        #Next steps:
-        #1. Validates every SingleParamNode and counts how many there are in the macro.
-        #2. If there are more SingleParamNodes than entered values it will check if there is RepeatParamNode.
-        #   If there is RepeatParamNode it will check if its RepeatNodes can be deleted.
-        #3. If there are more values entered than SingleParamNodes in macro it will check if there is RepeatParamNode.
-        #   If there is it will try to add new RepeatNode.
-        
-        if self.model() is None:
-            raise RuntimeError('Door must be set in order to use the macroexecutor.')
-            
-        self.currentIndex = Qt.QModelIndex()
-        mlist = str(self.text()).split()
-        problems = []
-        try:
-            if str(mlist[0]) != str(self.model().root().name()):
-                try:
-                    self.getModelObj().validateMacroName(str(mlist[0]))
-                    self.validateMacro(mlist[0])
-                    self.updateMacroEditor(mlist[0])
-                    if not secValidation:
-                        self.validateAllExpresion(True)
-                    
-                except Exception as e:
-                    if self.disableEditMode:
-                        self.updateMacroEditor(mlist[0])
-                        raise Exception(e)
-                    message = e[0]
-                    #raise Exception(e)
-                    problems.append(message)
-                
-        except IndexError:
-                problems.append("<b>Macro<\b> is missing!")
-                self.setStyleSheet("")
-                self.setToolTip('<br>'.join(problems))
-                return
-            
-        self.currentIndex = Qt.QModelIndex()
-        ix = self.getIndex()
-        self.currentIndex = ix
-        counter = 1
-        while not ix == Qt.QModelIndex():
-            try:
-                propValue = mlist[counter]
-                try:
-                    self.validateOneValue(propValue)     
-                    self.model().setData(self.currentIndex, Qt.QVariant(propValue))
-                except Exception as e:
-                    self.model().setData(self.currentIndex, Qt.QVariant('None'))
-                    txt = str(Qt.from_qvariant(ix.sibling(ix.row(),0).data(), str))
-                    message = "<b>" + txt + "</b> " + e[0]
-                    problems.append(message)
-            except IndexError:
-                txt = str(Qt.from_qvariant(ix.sibling(ix.row(),0).data(), str))
-                problems.append("<b>" + txt + "</b> is missing!")
-                
-                data = str(Qt.from_qvariant(ix.data(), str))
-                if data != 'None':
-                    self.model().setData(self.currentIndex, Qt.QVariant('None'))
-            counter+=1
-            ix = self.getIndex()
-            self.currentIndex = ix
-
-        if len(mlist) > counter: #if there are more values than parameters 
-            repeatNode = None
-            for i in self.model().root().params():
-                repeatNode = i
-                if isinstance(repeatNode, macro.RepeatParamNode):
-                    index = self.findParamRepeat(i)
-                    self.currentIndex = self.model()._insertRow(index)
-                    nn = self.model().nodeFromIndex(self.currentIndex)
-                    self.emit(Qt.SIGNAL("expandTree"))
-                    ix = self.getIndex()
-                    if not secValidation:
-                        self.validateAllExpresion(True)
-                        return 
-
-                repeatNode = None
-            if repeatNode == None:
-                problems.append("Too many values.")
-        
-        elif counter - len(mlist) >= 1:
-            repeatNode = None
-            node = None
-            for i in self.model().root().params():
-                repeatNode = i
-                if isinstance(repeatNode, macro.RepeatParamNode):
-                    index = self.findParamRepeat(i)
-                    node = self.model().nodeFromIndex(index)
-                    sub = len(node.child(0))
-                    break
-                repeatNode = None
-                
-            if repeatNode is not None:
-                while counter - len(mlist) > sub-1:
-                    if len(node.children()) == 1 and node.isReachedMin():
-                        break
-                    self.model()._removeRow(index.child(len(node.children())-1,0))
-                    counter -= sub
-                    
-                if not secValidation:
-                    self.validateAllExpresion(True)
-                    return
-            
-        if len(problems) == 0:
-            self.setStyleSheet('SpockCommandWidget {background-color: %s; color: %s; border: %s; border-radius: %s}'%('yellow', 'black','3px solid green','5px'))
-            self.setToolTip("")
-        else:
-            self.setStyleSheet("")
-            self.setToolTip('<br>'.join(problems))   
-        return 
-
-    def findParamRepeat(self, repeatNode):
-        #Method which finds index of given ParamRepeatNode in the macro.
-        children = self.model().root().children()
-        occ = children.count(repeatNode)
-        idx = 0
-        for i in range(0,occ):
-            idx = children.index(repeatNode, idx)
-        index = self.model().index(idx ,0, Qt.QModelIndex())
-        return index
-
-    def validateOneValue(self, value):
-        #Validates value of a SingleParamNode of a currentIndex
-        paramNode = deepcopy(self.model().nodeFromIndex(self.currentIndex))
-        paramNode.setValue(value)
-        return self.getModelObj().validateSingleParam(paramNode)
-    
-    def returnPressed(self):
-        #SLOT called when return is pressed
-        if self.toolTip() == "":
-            self.emit(Qt.SIGNAL("pressedReturn"))
-        else:
-            raise Exception("Cannot start macro. Please correct following mistakes: <br>"+self.toolTip())
-            
-    def textChanged(self, strs):
-        #SLOT called when QLineEdit text is changed
-        if strs == "":
-            self.updateMacroEditor("")
-        
-        if not self.disableEditMode and self.disableSpockCommandUpdate:
-            self.validateAllExpresion()
-        else:
-            txt_parts = str(self.text()).split()
-            if len(txt_parts) == 0:
-                return
-            try:
-                if self.validateMacro(txt_parts[0]):
-                    self.validateAllExpresion()
-            except:
-                self.setToolTip("Read Mode")
-        
-    def validateMacro(self, value):
-        #Method which ivestigates if the macro can be edited using yellow line.
-        #It cannot be executed when: 1. there are more than 1 ParamRepeatNodes,
-        #2. There is a ParamRepeatNode inside ParamRepeatNodem
-        #3. After ParamRepeatNode there are other nodes
-        
-        macroNode = self.getModelObj().getMacroNodeObj(str(value))
-        if macroNode is None: return False
-        t = [child for child in macroNode.children() if isinstance(child, macro.RepeatParamNode)]
-        if len(t) > 1:
-            self.disableEditMode = True
-            raise Exception('Macro <b> %s </b> cannot be edited using yellow line.<br>It contains more than 1 paramRepeat node. <br>Please use Macro Editor Widget to edit and execute this macro.' %str(value))
-        elif len(t) == 1:
-            if len([child for child in t[0].children() if isinstance(child, macro.RepeatParamNode)]) > 0:
-                self.disableEditMode = True
-                raise Exception('Macro <b> %s </b> cannot be edited using yellow line.<br>It contains paramRepeat node inside paramRepeat node. <br>Please use Macro Editor Widget to edit and execute this macro.' %str(value))
-            else:
-                if macroNode.children().index(t[0]) != len(macroNode.children()) -1 :
-                    self.disableEditMode = True
-                    raise Exception('Macro <b> %s </b> cannot be edited using yellow line.<br>It contains paramRepeat node but not as a last parameter. <br>Please use Macro Editor Widget to edit and execute this macro.' %str(value))
-        self.disableEditMode = False
-        return True
-    
-    def downAction(self):
-        #Goes down in the history list of executed macros.
-        #self.disableSpockCommandUpdate flag is used to allow updating yellow line when model is changed. (when new row in history is chosen)
-        
-        self.disableSpockCommandUpdate = False
-        self.emit(Qt.SIGNAL("elementDown"))
-        text = str(self.text()).split()
-        if len(text) > 0:
-            self.validateMacro(text[0])
-        self.disableSpockCommandUpdate = True
-        
-    def upAction(self):
-        self.disableSpockCommandUpdate = False
-        self.emit(Qt.SIGNAL("elementUp"))
-        text = str(self.text()).split()
-        if len(text) > 0:
-            self.validateMacro(text[0])
-        self.disableSpockCommandUpdate = True
-        
-    def controlDownAction(self):
-        c = self.cursorPosition()
-        newValue = False
-        try:
-            if self.text()[c] ==" " and self.text()[c-1] == " ":
-                newValue = True
-        except IndexError:
-            if c == 0:
-                newValue = True
-            elif len(self.text()) == self.cursorPosition() and self.text()[c-1] == " ":
-                newValue = True
-        try:
-            txt = str(self.text())
-            txt = txt[:txt.find(" ",c)]
-        except IndexError:
-            txt = str(self.text())[:c]
-        elementsNum = txt.split()
-        
-        if newValue:
-            self.insert("0")
-            self.currentIndex = self.getIndex(len(elementsNum))
-            if not self.currentIndex.isValid():
-                if len(elementsNum) > 0:
-                    self.backspace()
-                    return
-            value = self.prevValue("")
-            self.backspace()
-            self.insert(value)
-            self.model().setData(self.currentIndex, Qt.QVariant(value))
-        else:
-            self.currentIndex = self.getIndex(len(elementsNum)-1)
-            if not self.currentIndex.isValid():
-                if len(elementsNum) > 1:
-                    return
-            value = self.prevValue(elementsNum[len(elementsNum)-1])
-            sel = self.measureSelection(self.cursorPosition())
-            self.setSelection(sel[0], sel[1])
-            c = c - (sel[1] - len(str(value)))
-            self.insert(value)
-            self.setCursorPosition(c)
-            self.model().setData(self.currentIndex, Qt.QVariant(value))
-            
-    def controlUpAction(self):
-        c = self.cursorPosition()
-        newValue = False
-        try:
-            if self.text()[c] ==" " and self.text()[c-1] == " ":
-                newValue = True
-        except IndexError:
-            if c == 0:
-                newValue = True
-            elif len(self.text()) == self.cursorPosition() and self.text()[c-1] == " ":
-                newValue = True       
-        try:
-            txt = str(self.text())
-            txt = txt[:txt.find(" ",c)]
-        except IndexError:
-            txt = str(self.text())[:c]
-        elementsNum = txt.split()
-        
-        if newValue:
-            self.insert("0")
-            self.currentIndex = self.getIndex(len(elementsNum))
-            if not self.currentIndex.isValid():
-                if len(elementsNum) > 0:
-                    self.backspace()
-                    return
-            value = self.nextValue("")
-            self.backspace()
-            self.insert(value)
-            self.model().setData(self.currentIndex, Qt.QVariant(value))
-        else:
-            self.currentIndex = self.getIndex(len(elementsNum)-1)
-            if not self.currentIndex.isValid():
-                if len(elementsNum) > 1:
-                    return
-            value = self.nextValue(elementsNum[len(elementsNum)-1])
-            sel = self.measureSelection(self.cursorPosition())
-            self.setSelection(sel[0], sel[1])
-            c = c - (sel[1] - len(str(value)))
-            self.insert(value)
-            self.setCursorPosition(c)
-            self.model().setData(self.currentIndex, Qt.QVariant(value))
-
-    def getParamItems(self, index):
-        #Returns list of items that can be chosen for the node corresponding to the given index. Used by {next,prev}Value methods
-        
-        node = self.model().nodeFromIndex(index)
-        if isinstance(node, macro.MacroNode):
-            return None
-        type = node.type()
-        ms = self.getParentModelObj()
-        items = ms.getElementsWithInterface(type).keys()
-        return items, type
-    
-    def nextValue(self, current):
-        current = str(current)
-        if self.currentIndex.isValid():
-            items, type = self.getParamItems(self.currentIndex)
-            items = sorted(items)
-        else:
-            items = self.getParentModelObj().getMacroStrList()
-            items = sorted(items)
-            type = "Macro"
-        
-        if type == "Float":
-            value = float(current) + 0.1
-        elif type == "Integer":
-            value = int(current) + 1
-        elif type == "Boolean":
-            value = True
-        else:
-            try:
-                textindex = items.index(current)
-                value = items[textindex-1]
-            except:
-                tmpitems = [s for s in items if s.startswith(current)]
-                if len(tmpitems) > 0:
-                    value = tmpitems[0]
-                else:
-                    value = items[0]
-        return str(value)
-    
-    def prevValue(self, current):
-        current = str(current)
-        if self.currentIndex.isValid():
-            items, type = self.getParamItems(self.currentIndex)
-            items = sorted(items)
-        else:
-            items = self.getParentModelObj().getMacroStrList()
-            items = sorted(items)
-            type = "Macro"
-        
-        if type == "Float":
-            value = float(current) - 0.1
-        elif type == "Integer":
-            value = int(current) - 1
-        elif type == "Boolean":
-            value = True
-        else:
-            try:
-                textindex = items.index(current)
-                value = items[textindex+1]
-            except:
-                tmpitems = [s for s in items if s.startswith(current)]
-                if len(tmpitems)>0:
-                    value = tmpitems[0]
-                else:
-                    value = items[0]
-        return str(value)
-    
-    def updateMacroEditor(self, macroName):
-        #I had to make the macroname lowered as macros in comboBox (with macros), has names with all letter low.
-        #Because of that sometimes it was not loading macros in MacroEditor
-        #TO FIX
-        self.emit(Qt.SIGNAL("spockComboBox"), str(macroName).lower())
-    
-    def measureSelection(self, position):
-        s = str(self.text())+" "
-        try:
-            if s[position] == " ":
-                position-=1
-        except IndexError:
-            position -=1
-        end = s.find(' ', position)
-        beg = s.rfind(' ',0, position+1)
-        if end == -1:
-            end = s.length()-1
-        return beg+1, end-beg-1 #returns the start and length of the value
-
-    def focusInEvent(self, event):
-        self.disableSpockCommandUpdate = True
-        Qt.QLineEdit.focusInEvent(self,event)
-    
-    def focusOutEvent(self, event):
-        self.disableSpockCommandUpdate = False
-        Qt.QLineEdit.focusOutEvent(self, event)
-        
-class TaurusMacroExecutorWidget(TaurusWidget):
-    
-    def __init__(self, parent = None, designMode = False):
-        TaurusWidget.__init__(self, parent, designMode)
-        self.setObjectName(self.__class__.__name__)
-        
-        self._doorName = ""
-        self._macroId = None
-        self.setLayout(Qt.QVBoxLayout())
-        self.layout().setContentsMargins(0,0,0,0)
-        
-        self.addToFavouritesAction = Qt.QAction(getThemeIcon("software-update-available"), "Add to favourites", self)
-        self.connect(self.addToFavouritesAction, Qt.SIGNAL("triggered()"), self.onAddToFavourites)
-        self.addToFavouritesAction.setToolTip("Add to favourites")
-        self.stopMacroAction = Qt.QAction(getIcon(":/actions/media_playback_stop.svg"), "Stop macro", self)
-        self.connect(self.stopMacroAction, Qt.SIGNAL("triggered()"), self.onStopMacro)
-        self.stopMacroAction.setToolTip("Stop macro")
-        self.pauseMacroAction = Qt.QAction(getIcon(":/actions/media_playback_pause.svg"), "Pause macro", self)
-        self.connect(self.pauseMacroAction, Qt.SIGNAL("triggered()"), self.onPauseMacro)
-        self.pauseMacroAction.setToolTip("Pause macro")
-        self.playMacroAction = Qt.QAction(getIcon(":/actions/media_playback_start.svg"), "Start macro", self)
-        self.connect(self.playMacroAction, Qt.SIGNAL("triggered()"), self.onPlayMacro)
-        self.playMacroAction.setToolTip("Start macro")
-        actionsLayout = Qt.QHBoxLayout()
-        actionsLayout.setContentsMargins(0,0,0,0)
-        addToFavouritsButton = Qt.QToolButton()
-        addToFavouritsButton.setDefaultAction(self.addToFavouritesAction)
-        self.addToFavouritesAction.setEnabled(False)
-        actionsLayout.addWidget(addToFavouritsButton)
-        
-        self.macroComboBox = MacroComboBox(self)
-        self.macroComboBox.setUseParentModel(True)
-        self.macroComboBox.setModelColumn(0)        
-        actionsLayout.addWidget(self.macroComboBox)
-        stopMacroButton = Qt.QToolButton()
-        stopMacroButton.setDefaultAction(self.stopMacroAction)
-        actionsLayout.addWidget(stopMacroButton)
-        pauseMacroButton = Qt.QToolButton()
-        pauseMacroButton.setDefaultAction(self.pauseMacroAction)
-        actionsLayout.addWidget(pauseMacroButton)
-        self.playMacroButton = Qt.QToolButton()
-        self.playMacroButton.setDefaultAction(self.playMacroAction)
-        actionsLayout.addWidget(self.playMacroButton)
-        self.disableControlActions()
-        self.doorStateLed = TaurusLed(self)
-        actionsLayout.addWidget(self.doorStateLed)
-        self.layout().addLayout(actionsLayout)
-        
-        splitter = Qt.QSplitter(self)
-        self.layout().addWidget(splitter)
-        splitter.setOrientation(Qt.Qt.Vertical)
-        
-        self._paramEditorModel = ParamEditorModel()
-        self.stackedWidget = Qt.QStackedWidget()
-        self.standardMacroParametersEditor = StandardMacroParametersEditor(self.stackedWidget)
-        self.stackedWidget.addWidget(self.standardMacroParametersEditor)
-        self.customMacroParametersEditor = None
-        splitter.addWidget(self.stackedWidget)
-        
-        self._favouritesBuffer = None
-        self.favouritesMacrosEditor = FavouritesMacrosEditor(self)
-        self.registerConfigDelegate(self.favouritesMacrosEditor)
-        self.favouritesMacrosEditor.setUseParentModel(True)
-        self.favouritesMacrosEditor.setFocusPolicy(Qt.Qt.NoFocus)
-        
-        self._historyBuffer = None
-        self.historyMacrosViewer = HistoryMacrosViewer(self)
-        self.registerConfigDelegate(self.historyMacrosViewer)
-        self.historyMacrosViewer.setUseParentModel(True)
-        self.historyMacrosViewer.setFocusPolicy(Qt.Qt.NoFocus)
-        
-        self.tabMacroListsWidget = Qt.QTabWidget(self)
-        self.tabMacroListsWidget.addTab(self.favouritesMacrosEditor, "Favourite list")
-        self.tabMacroListsWidget.addTab(self.historyMacrosViewer, "History Viewer")
-        splitter.addWidget(self.tabMacroListsWidget)
-    
-        self._isHistoryMacro = False
-        self.macroProgressBar = MacroProgressBar(self)
-        self.layout().addWidget(self.macroProgressBar)
-        
-        #spockCommandLabel = Qt.QLabel("Spock command:", self)
-        #spockCommandLabel.setFont(Qt.QFont("Courier",9))
-        self.spockCommand = SpockCommandWidget("Spock", self)
-        self.spockCommand.setSizePolicy(Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Minimum)
-        self.spockCommand.setUseParentModel(True)
-        spockCommandLayout = Qt.QHBoxLayout()
-        spockCommandLayout.setContentsMargins(0,0,0,0)
-        #spockCommandLayout.addWidget(spockCommandLabel)
-        spockCommandLayout.addWidget(self.spockCommand)
-        self.layout().addLayout(spockCommandLayout)
-        self.connect(self.macroComboBox,Qt.SIGNAL("currentIndexChanged(QString)"), self.onMacroComboBoxChanged)
-        self.connect(self.favouritesMacrosEditor.list, Qt.SIGNAL("favouriteSelected"), self.onFavouriteSelected)
-        self.connect(self.historyMacrosViewer.list, Qt.SIGNAL("historySelected"), self.onHistorySelected)
-        
-        self.connect(self.spockCommand, Qt.SIGNAL("pressedReturn"), self.onPlayMacro)
-        self.connect(self.spockCommand, Qt.SIGNAL("spockComboBox"), self.setComboBoxItem)
-        self.connect(self.spockCommand, Qt.SIGNAL("elementUp"), self.setHistoryUp)
-        self.connect(self.spockCommand, Qt.SIGNAL("elementDown"), self.setHistoryDown)
-        self.connect(self.spockCommand, Qt.SIGNAL("setHistoryFocus"), self.setHistoryFocus)
-        self.connect(self.spockCommand, Qt.SIGNAL("expandTree"), self.standardMacroParametersEditor.tree.expandAll)
-
-    def macroId(self):
-        return self._macroId
-    
-    def contextMenuEvent(self,event):
-        menu = Qt.QMenu()
-        action = menu.addAction(getThemeIcon("view-refresh"), "Check door state", self.checkDoorState)
-        menu.exec_(event.globalPos())
-    
-    def checkDoorState(self):
-        door = Device(self.doorName())
-        doorState = door.state()
-        if doorState == PyTango.DevState.RUNNING:
-            self.playMacroAction.setEnabled(False)
-            self.pauseMacroAction.setEnabled(True)
-            self.stopMacroAction.setEnabled(True)
-        elif doorState == PyTango.DevState.ON or doorState == PyTango.DevState.ALARM:
-            self.playMacroAction.setEnabled(True)
-            self.pauseMacroAction.setEnabled(False)
-            self.stopMacroAction.setEnabled(False)
-        elif doorState == PyTango.DevState.STANDBY:
-            self.playMacroAction.setEnabled(True)
-            self.pauseMacroAction.setEnabled(False)
-            self.stopMacroAction.setEnabled(True)
-        
-    def setMacroId(self, macroId):
-        self._macroId = macroId
-        
-    def doorName(self):
-        return self._doorName
-    
-    def setDoorName(self, doorName):
-        self._doorName = doorName
-        
-    def setFavouritesBuffer(self, favouritesMacro):
-        self._favouritesBuffer = favouritesMacro
-        
-    #History Widget
-    def setHistoryUp(self):
-        self.setHistoryFocus()
-        self.historyMacrosViewer.listElementUp()
-        
-    def setHistoryDown(self):
-        self.setHistoryFocus()
-        self.historyMacrosViewer.listElementDown()
-        
-    def setHistoryFocus(self):
-        self.tabMacroListsWidget.setCurrentWidget(self.historyMacrosViewer)
-        #self.historyMacrosViewer.setFocus()
-    
-    def historyBuffer(self):
-        return self._historyBuffer
-    
-    def setHistoryBuffer(self, favouritesMacro):
-        self._historyBuffer = favouritesMacro
-        
-    def favouritesBuffer(self):
-        return self._favouritesBuffer
-        
-    def paramEditorModel(self):
-        return self._paramEditorModel
-    
-    def setParamEditorModel(self, paramEditorModel):
-        self._paramEditorModel = paramEditorModel
-
-    def setComboBoxItem(self, macroName):
-        self.macroComboBox.selectMacro(macroName)
-
-    def onMacroComboBoxChanged(self, macroName):
-        macroName = str(macroName)
-        if macroName == "":
-            macroName, macroNode = None, None
-#            macroNode = macro.MacroNode(name="")
-            self.playMacroAction.setEnabled(False)
-            self.addToFavouritesAction.setEnabled(False)
-        else:
-            if self._isHistoryMacro:
-                macroNode = self.historyBuffer()
-                self.setHistoryBuffer(None)
-                self.favouritesMacrosEditor.list.clearSelection()
-            else:
-                macroNode = self.favouritesBuffer()
-                self.setFavouritesBuffer(None)
-                self.historyMacrosViewer.list.clearSelection()
-            self._isHistoryMacro = False
-    
-            if macroNode is None:
-                macroNode = self.getModelObj().getMacroNodeObj(macroName)
-            
-            self.playMacroAction.setEnabled(True)
-            self.addToFavouritesAction.setEnabled(True)
-                
-        self.paramEditorModel().setRoot(macroNode)
-        self.spockCommand.setModel(self.paramEditorModel())        
-        if self.stackedWidget.count() == 2:
-            self.stackedWidget.removeWidget(self.customMacroParametersEditor) 
-            self.customMacroParametersEditor.setParent(None)
-        self.customMacroParametersEditor = ParamEditorManager().getMacroEditor(macroName, self.stackedWidget)
-        if self.customMacroParametersEditor:
-            self.customMacroParametersEditor.setModel(self.paramEditorModel())
-            self.stackedWidget.addWidget(self.customMacroParametersEditor)
-            self.stackedWidget.setCurrentWidget(self.customMacroParametersEditor)
-        else:    
-            self.standardMacroParametersEditor.setModel(self.paramEditorModel())
-        
-        self.emit(Qt.SIGNAL("macroNameChanged"), macroName)
-        
-    def onFavouriteSelected(self, macroNode):
-        self.setFavouritesBuffer(macroNode)
-        name = ""
-        if not macroNode is None: 
-            name = macroNode.name()
-        self._isHistoryMacro = False
-        self.macroComboBox.selectMacro(name)
-        
-    def onHistorySelected(self, macroNode):
-        self.setHistoryBuffer(macroNode)
-        name = ""
-        if not macroNode is None: 
-            name = macroNode.name()
-        self._isHistoryMacro = True
-        self.macroComboBox.selectMacro(name)
-    
-    def onAddToFavourites(self):
-        self.favouritesMacrosEditor.addMacro(deepcopy(self.paramEditorModel().root()))
-    
-    def addToHistory(self):
-        self.historyMacrosViewer.addMacro(deepcopy(self.paramEditorModel().root()))
-        
-    def onDoorChanged(self, doorName):
-        self.setDoorName(doorName)
-        if self.doorName() == "":
-            self.doorStateLed.setModel(None)
-            return
-        self.doorStateLed.setModel(self.doorName() + "/State")
-        doorState = Device(doorName).state()
-        if doorState == PyTango.DevState.ON:
-            self.playMacroAction.setText("Start macro")
-            self.playMacroAction.setToolTip("Start macro")
-        elif doorState == PyTango.DevState.STANDBY:
-            self.playMacroAction.setText("Resume macro")
-            self.playMacroAction.setToolTip("Resume macro")
-        
-    def onPlayMacro(self):
-        door = Device(self.doorName())
-        doorState = door.state()
-        if doorState == PyTango.DevState.ON or doorState == PyTango.DevState.ALARM:
-            paramEditorModel = self.paramEditorModel() 
-            macroNode = paramEditorModel.root()         
-            id = macroNode.assignId()
-            self.setMacroId(id)
-            params, alerts = macroNode.toRun()
-            xmlString = paramEditorModel.toXmlString()
-            if len(alerts) > 0:
-                Qt.QMessageBox.warning(self,"Macro parameters warning", alerts)
-                return
-            door.runMacro(xmlString)
-            self.addToHistory()
-#            door.runMacro(str(macroNode.name()), params)
-        elif doorState == PyTango.DevState.STANDBY:
-            door.command_inout("ResumeMacro")
-        else:
-            Qt.QMessageBox.warning(self,"Error while starting/resuming macro", 
-                                   "It was not possible to start/resume macro, because state of the door was different than ON/STANDBY") 
-            
-    def onStopMacro(self):
-        door = Device(self.doorName())
-        doorState = door.state()
-        
-        if doorState in (PyTango.DevState.RUNNING, PyTango.DevState.STANDBY):
-            door.command_inout("StopMacro")
-        else:
-            Qt.QMessageBox.warning(self,"Error while stopping macro", 
-                                   "It was not possible to stop macro, because state of the door was different than RUNNING or STANDBY")
-    
-    def onPauseMacro(self):
-        door = Device(self.doorName())
-        doorState = door.state()
-        
-        if doorState == PyTango.DevState.RUNNING:
-            door.command_inout("PauseMacro")
-        else:
-            Qt.QMessageBox.warning(self,"Error while pausing macro", 
-                                   "It was not possible to pause macro, because state of the door was different than RUNNING")
-            
-    def onMacroStatusUpdated(self, data):
-        macro = data[0]
-        if macro is None: return        
-        data = data[1][0]
-        state, range, step, id = data["state"], data["range"], data["step"], data["id"]
-        if id is None: return
-        id = int(id)
-        if id != self.macroId(): return
-        macroName = macro.name
-        shortMessage = ""
-        if state == "start":
-            self.emit(Qt.SIGNAL("macroStarted"), "DoorOutput")
-            self.macroProgressBar.setRange(range[0], range[1])
-            self.playMacroAction.setEnabled(False)
-            self.pauseMacroAction.setEnabled(True)
-            self.stopMacroAction.setEnabled(True)
-            self.emit(Qt.SIGNAL("plotablesFilterChanged"), None)
-            self.emit(Qt.SIGNAL("plotablesFilterChanged"), standardPlotablesFilter)
-            shortMessage = "Macro %s started." % macroName
-        elif state == "pause":
-            self.playMacroAction.setText("Resume macro")
-            self.playMacroAction.setToolTip("Resume macro")
-            self.playMacroAction.setEnabled(True)
-            self.pauseMacroAction.setEnabled(False)
-            shortMessage = "Macro %s paused." % macroName
-        elif state == "resume":
-            self.playMacroAction.setText("Start macro")
-            self.playMacroAction.setToolTip("Start macro")
-            self.playMacroAction.setEnabled(False)
-            self.pauseMacroAction.setEnabled(True)
-            shortMessage = "Macro %s resumed." % macroName
-        elif state == "stop" or state == "finish":
-            self.playMacroAction.setEnabled(True)
-            self.pauseMacroAction.setEnabled(False)
-            self.stopMacroAction.setEnabled(False)
-            shortMessage = "Macro %s finished." % macroName
-        elif state == "exception":
-            self.playMacroAction.setEnabled(True)
-            self.pauseMacroAction.setEnabled(False)
-            self.stopMacroAction.setEnabled(False)
-            shortMessage = "Macro %s error." % macroName
-            exc_value, exc_stack = data['exc_value'], data['exc_stack']
-            exceptionDialog = TaurusMessageBox(MacroRunException, exc_value, exc_stack)
-            exceptionDialog.exec_()
-        elif state == "abort":
-            self.playMacroAction.setText("Start macro")
-            self.playMacroAction.setToolTip("Start macro")
-            self.playMacroAction.setEnabled(True)
-            self.pauseMacroAction.setEnabled(False)
-            self.stopMacroAction.setEnabled(False)
-            shortMessage = "Macro %s stopped." % macroName
-        elif state == "step":
-            shortMessage = "Macro %s at %d %% of progress." % (macroName, step) 
-        self.emit(Qt.SIGNAL("shortMessageEmitted"), shortMessage)    
-        self.macroProgressBar.setValue(step)
-
-    def disableControlActions(self):
-        self.pauseMacroAction.setEnabled(False)
-        self.stopMacroAction.setEnabled(False)
-        self.playMacroAction.setEnabled(False)
-
-    def setModel(self, model):
-        oldModelObj = self.getModelObj()
-        if oldModelObj is not None:
-            self.disconnect(oldModelObj,Qt.SIGNAL("macrosUpdated"), self.macroComboBox.onMacrosUpdated)
-        TaurusWidget.setModel(self, model)
-        newModelObj = self.getModelObj()
-        self.connect(newModelObj, Qt.SIGNAL("macrosUpdated"), self.macroComboBox.onMacrosUpdated)
-    
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        return {'container': False, 
-                'group': 'Taurus Sardana', 
-                'module': 'taurus.qt.qtgui.extra_macroexecutor', 
-                'icon': ':/designer/frame.png'}
-    
-    
-class TaurusMacroExecutor(MacroExecutionWindow):
-    
-    def __init__(self, parent=None, designMode=False):
-        MacroExecutionWindow.__init__(self, parent, designMode)
-        
-    def initComponents(self):
-        self.taurusMacroExecutorWidget = TaurusMacroExecutorWidget(self)
-        self.registerConfigDelegate(self.taurusMacroExecutorWidget)
-        self.taurusMacroExecutorWidget.setUseParentModel(True)
-        self.setCentralWidget(self.taurusMacroExecutorWidget)
-        self.connect(self.taurusMacroExecutorWidget, Qt.SIGNAL('shortMessageEmitted'), self.onShortMessage)
-        self.statusBar().showMessage("MacroExecutor ready")
-                
-    def setCustomMacroEditorPaths(self, customMacroEditorPaths):
-        MacroExecutionWindow.setCustomMacroEditorPaths(self, customMacroEditorPaths)
-        ParamEditorManager().parsePaths(customMacroEditorPaths)
-        ParamEditorManager().browsePaths()
-            
-    def loadSettings(self):
-        TaurusMainWindow.loadSettings(self)
-        self.emit(Qt.SIGNAL("doorChanged"), self.doorName())
-        
-    def onDoorChanged(self, doorName):
-        MacroExecutionWindow.onDoorChanged(self, doorName)
-        if self._qDoor:
-            Qt.QObject.disconnect(self._qDoor, Qt.SIGNAL("macroStatusUpdated"), self.taurusMacroExecutorWidget.onMacroStatusUpdated)
-        if doorName == "": return
-        self._qDoor = Device(doorName)
-        Qt.QObject.connect(self._qDoor, Qt.SIGNAL("macroStatusUpdated"), self.taurusMacroExecutorWidget.onMacroStatusUpdated)
-        self.taurusMacroExecutorWidget.onDoorChanged(doorName)
-        
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        return None
-            
-    
-def createMacroExecutorWidget(args):
-    macroExecutor = TaurusMacroExecutorWidget()
-    macroExecutor.setModelInConfig(True)
-    Qt.QObject.connect(macroExecutor, Qt.SIGNAL("doorChanged"), macroExecutor.onDoorChanged)
-    if len(args) == 2:
-        macroExecutor.setModel(args[0])
-        macroExecutor.emit(Qt.SIGNAL('doorChanged'),args[1])
-    return macroExecutor
-
-def createMacroExecutor(args):
-    macroExecutor = TaurusMacroExecutor()
-    macroExecutor.setModelInConfig(True)
-    Qt.QObject.connect(macroExecutor, Qt.SIGNAL("doorChanged"), macroExecutor.onDoorChanged)
-    if len(args) == 2:
-        macroExecutor.setModel(args[0])
-        macroExecutor.emit(Qt.SIGNAL('doorChanged'),args[1])
-    macroExecutor.loadSettings()
-    return macroExecutor
-    
-def main():
-    from taurus.qt.qtgui.application import TaurusApplication
-    import taurus
-    
-    app = TaurusApplication(sys.argv, app_version=taurus.Release.version)
-    args = app.get_command_line_args()    
-    
-    app.setOrganizationName("Taurus")
-    app.setApplicationName("macroexecutor")
-    macroExecutor = createMacroExecutor(args)
-    macroExecutor.show()
-    sys.exit(app.exec_())
-        
-if __name__ == "__main__": 
-    main()
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors/senv.py b/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors/senv.py
deleted file mode 100644
index d2fed9e..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors/senv.py
+++ /dev/null
@@ -1,374 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-from taurus.qt import Qt
-from taurus import Database
-from taurus.core.taurusbasetypes import TaurusElementType
-from taurus.core.taurusdatabase import TaurusAttrInfo
-from taurus.qt.qtgui.input import TaurusAttrListComboBox
-from taurus.qt.qtgui.tree import TaurusDbTreeWidget
-from taurus.qt.qtgui.resource import getThemeIcon
-from taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.macroparameterseditor import MacroParametersEditor
-from taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.parameditors import LineEditParam, ParamBase, ComboBoxParam, CheckBoxParam, DirPathParam, MSAttrListComboBoxParam
-from taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.model import ParamEditorModel
-from taurus.qt.qtgui.extra_macroexecutor.common import MSAttrListComboBox
-
-
-class SenvEditor(Qt.QWidget, MacroParametersEditor):
-    
-    def __init__(self, parent=None):
-        Qt.QWidget.__init__(self, parent)
-        MacroParametersEditor.__init__(self)
-        self.valueWidget = None
-        
-    def initComponents(self):
-        self.setLayout(Qt.QFormLayout())
-        
-        self.layout().addRow(Qt.QLabel("Setting environment variable:", self))
-        
-        self.nameComboBox = ComboBoxParam(self)
-        self.nameComboBox.addItems(["ActiveMntGrp", "ExtraColumns", "JsonRecorder", "ScanFile", "ScanDir"])
-        self.nameComboBox.setEditable(True)
-        self.connect(self.nameComboBox, Qt.SIGNAL("currentIndexChanged(int)"), self.onNameComboBoxChanged)
-        self.layout().addRow("name:", self.nameComboBox)
-        
-        nameIndex = self.model().index(0, 1, self.rootIndex())
-        self.nameComboBox.setIndex(nameIndex)
-        
-    def setRootIndex(self, rootIndex):
-        self._rootIndex = rootIndex
-        self.initComponents()
-        
-    def rootIndex(self):
-        return self._rootIndex
-         
-    def model(self):
-        return self._model
-    
-    def setModel(self, model):
-        self._model = model
-        if isinstance(model, ParamEditorModel): 
-            self.setRootIndex(Qt.QModelIndex())
-            
-    def onNameComboBoxChanged(self, index):
-        text = str(self.nameComboBox.currentText())
-        if self.valueWidget is not None:
-            label = self.layout().labelForField(self.valueWidget)
-            if label is not None:
-                self.layout().removeWidget(label)
-                label.setParent(None)
-                label = None
-            
-            self.layout().removeWidget(self.valueWidget)
-            self.valueWidget.resetValue()
-            self.valueWidget.setParent(None)
-            self.valueWidget = None
-                
-        self.valueWidget, label = getSenvValueEditor(text, self)
-        
-        paramRepeatIndex = self.model().index(1, 0, self.rootIndex())
-        repeatIndex = paramRepeatIndex.child(0, 0)
-        valueIndex = repeatIndex.child(0, 1)
-        self.valueWidget.setIndex(valueIndex)
-        
-        if label:
-            self.layout().addRow(label, self.valueWidget)
-        else:
-            self.layout().addRow(self.valueWidget)
-            
-def getSenvValueEditor(envName, parent):
-    """Factory method, requires: string, and QWidget as a parent for returned editor.
-    Factory returns a tuple of widget and a label for it.
-    
-    :return: (Qt.QWidget, str) """
-    label = "value:" 
-    if envName == "ActiveMntGrp":
-        editor = MSAttrListComboBoxParam(parent)
-        editor.setUseParentModel(True)
-        editor.setModel("/MeasurementGroupList")
-    elif envName == "ExtraColumns":
-        editor = ExtraColumnsEditor(parent)
-        label = None
-    elif envName == "JsonRecorder":
-        editor = CheckBoxParam(parent)
-    elif envName == "ScanDir":
-        editor = DirPathParam(parent)
-    elif envName == "ScanFile":
-        editor = LineEditParam(parent)
-    else: 
-        editor = LineEditParam(parent)
-    return editor,label 
-         
-class ExtraColumnsEditor(ParamBase, Qt.QWidget):
-    
-    def __init__(self, parent=None, paramModel=None):
-        ParamBase.__init__(self, paramModel)
-        Qt.QWidget.__init__(self, parent)
-        self.setLayout(Qt.QVBoxLayout())
-        self.layout().setContentsMargins(0,0,0,0)
-        
-        addNewColumnButton = Qt.QPushButton(getThemeIcon("list-add") ,"Add new column...", self)
-        removeSelectedColumnsButton = Qt.QPushButton(getThemeIcon("list-remove") ,"Remove selected...", self)
-        buttonsLayout = Qt.QHBoxLayout()
-        buttonsLayout.addWidget(addNewColumnButton)
-        buttonsLayout.addWidget(removeSelectedColumnsButton)
-        self.layout().addLayout(buttonsLayout)
-        
-        self.extraColumnsTable = ExtraColumnsTable(self)
-        self.extraColumnsModel = ExtraColumnsModel()
-        self.extraColumnsTable.setModel(self.extraColumnsModel)
-        self.extraColumnsTable.setItemDelegate(ExtraColumnsDelegate(self.extraColumnsTable))
-        
-        self.layout().addWidget(self.extraColumnsTable)
-        
-        self.connect(addNewColumnButton, Qt.SIGNAL("clicked()"), self.onAddNewColumn)
-        self.connect(removeSelectedColumnsButton, Qt.SIGNAL("clicked()"), self.onRemoveSelectedColumns)
-        self.connect(self.extraColumnsModel, Qt.SIGNAL("dataChanged (const QModelIndex&,const QModelIndex&)"), self.onExtraColumnsChanged)
-        self.connect(self.extraColumnsModel, Qt.SIGNAL("modelReset()"), self.onExtraColumnsChanged)
-        
-    def getValue(self):
-        return repr(self.extraColumnsTable.model().columns())
-    
-    def setValue(self, value):
-        try:
-            columns = eval(value) 
-        except:
-            columns = []
-        self.extraColumnsTable.setColumns(columns)
-            
-    def onAddNewColumn(self):
-        self.extraColumnsTable.insertRows()
-        self.emit(Qt.SIGNAL("modelChanged()"))
-        
-    def onRemoveSelectedColumns(self):
-        self.extraColumnsTable.removeRows()
-        self.emit(Qt.SIGNAL("modelChanged()"))
-        
-    def onExtraColumnsChanged(self):
-        self.emit(Qt.SIGNAL("modelChanged()"))
-        
-        
-class ExtraColumnsTable(Qt.QTableView):
-    
-    def __init__(self, parent):
-        Qt.QTableView.__init__(self, parent)
-        self.setSelectionBehavior(Qt.QAbstractItemView.SelectRows)
-        self.setSelectionMode(Qt.QAbstractItemView.ExtendedSelection)
-        
-    def setColumns(self, columns):
-        if columns == None: columns=[]
-        self.model().setColumns(columns)
-        self.resizeColumnsToContents()
-    
-    def insertRows(self):
-        self.model().insertRows(self.model().rowCount())
-        
-    def removeRows(self):
-        rows = [index.row() for index in self.selectedIndexes()]
-        rows = list(set(rows))
-        rows.sort(reverse=True) 
-        for row in rows:
-            self.model().removeRows(row)
-        
-        
-class ExtraColumnsDelegate(Qt.QItemDelegate):
-        
-    def __init__(self, parent=None):
-        Qt.QItemDelegate.__init__(self, parent)
-        db = Database()
-        self.host = db.getNormalName()
-    
-    def createEditor(self, parent, option, index):
-        if index.column() == 1:
-            self.combo_attr_tree_widget = TaurusDbTreeWidget(perspective=TaurusElementType.Device)
-            self.combo_attr_tree_widget.setModel(self.host)
-            treeView = self.combo_attr_tree_widget.treeView()
-            qmodel = self.combo_attr_tree_widget.getQModel()
-            editor = Qt.QComboBox(parent)
-            editor.setModel(qmodel)
-            editor.setMaxVisibleItems(20)
-            editor.setView(treeView)
-        elif index.column() == 2:
-            editor = MSAttrListComboBox(parent)
-            editor.setUseParentModel(True)
-            editor.setModel("/InstrumentList")
-        else:
-            editor = Qt.QItemDelegate.createEditor(self, parent, option, index)     
-        return editor
-    
-    def setEditorData(self, editor, index):
-        if index.column() == 2:
-            text = Qt.from_qvariant(index.model().data(index, Qt.Qt.DisplayRole), str)
-            editor.setCurrentText(text)
-        else:
-            Qt.QItemDelegate.setEditorData(self, editor, index)
-            
-    def setModelData(self, editor, model, index):
-        column = index.column()
-        if column == 1:
-            selectedItems = self.combo_attr_tree_widget.selectedItems()
-            if not len(selectedItems) == 1: return
-            taurusTreeAttributeItem = selectedItems[0]
-            itemData = taurusTreeAttributeItem.itemData()
-            if isinstance(itemData, TaurusAttrInfo):                
-                model.setData(index, Qt.QVariant(itemData.fullName()))
-        elif column == 2:
-            model.setData(index, Qt.QVariant(editor.currentText()))
-        else:
-            Qt.QItemDelegate.setModelData(self, editor, model, index)
-            
-    def sizeHint(self, option, index):
-        if index.column() == 0:
-            fm = option.fontMetrics
-            text = Qt.from_qvariant(index.model().data(index,Qt.Qt.DisplayRole), str)
-            document = Qt.QTextDocument()
-            document.setDefaultFont(option.font)
-            document.setHtml(text)
-            size = Qt.QSize(document.idealWidth() + 5, fm.height())
-        elif index.column() == 1:
-            editor = self.createEditor(self.parent(), option, index)
-            if editor is None:
-                size = Qt.QItemDelegate.sizeHint(self, option, index)
-            else:
-                size = editor.sizeHint()
-                editor.hide()
-                editor.setParent(None)
-#                editor.destroy()
-        else: 
-            size = Qt.QItemDelegate.sizeHint(self, option, index)
-        return size
-
-class ExtraColumnsModel(Qt.QAbstractTableModel):
-
-
-    def __init__(self, columns=None):
-        if columns is None: columns=[]
-        Qt.QAbstractItemModel.__init__(self)
-        self.__columns = columns
-        
-    def setColumns(self, columns):
-        self.__columns = columns
-        self.reset()
-        
-    def columns(self):
-        return self.__columns
-    
-    def rowCount(self, index=Qt.QModelIndex()):
-        return len(self.__columns)
-    
-    def columnCount(self,index=Qt.QModelIndex()):
-        return 3
-        
-    def data(self, index, role=Qt.Qt.DisplayRole):
-        if not index.isValid() or not (0 <= index.row() < self.rowCount()):
-            return Qt.QVariant()
-        row=index.row()
-        column = index.column()
-        #Display Role
-        if role == Qt.Qt.DisplayRole:
-            if column == 0: return Qt.QVariant(Qt.QString(self.__columns[row]['label']))
-            elif column == 1: return Qt.QVariant(Qt.QString(self.__columns[row]['model']))
-            elif column == 2: return Qt.QVariant(Qt.QString(self.__columns[row]['instrument']))
-        return Qt.QVariant()
-    
-    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))
-        if role != Qt.Qt.DisplayRole:
-            return Qt.QVariant()
-        #So this is DisplayRole...
-        if orientation == Qt.Qt.Horizontal:
-            if section == 0: return Qt.QVariant("Label")
-            elif section == 1: return Qt.QVariant("Attribute")
-            elif section == 2: return Qt.QVariant("Instrument")
-            return Qt.QVariant()
-        else:
-            return Qt.QVariant(Qt.QString.number(section+1))
-        
-    def flags(self, index):
-        flags = Qt.Qt.ItemIsEnabled | Qt.Qt.ItemIsSelectable
-        if index.isValid():
-            column = index.column()
-            if column in (0,1,2):
-                flags |= Qt.Qt.ItemIsEditable
-        return flags
-                     
-    def setData(self, index, value=None, role=Qt.Qt.EditRole):
-        if index.isValid() and (0 <= index.row() < self.rowCount()):
-            row = index.row()
-            column = index.column()
-            value = Qt.from_qvariant(value, str)
-            if column == 0: self.__columns[row]['label'] = value
-            elif column == 1: self.__columns[row]['model'] = value
-            elif column == 2: self.__columns[row]['instrument'] = value         
-            self.emit(Qt.SIGNAL("dataChanged(QModelIndex,QModelIndex)"),index, index)
-            return True
-        return False
-    
-    def insertRows(self, row, rows=1, parentindex=None):
-        if parentindex is None: parentindex = Qt.QModelIndex()
-        first = row
-        last = row + rows -1
-        self.beginInsertRows(parentindex, first, last)
-        for row in range(first, last + 1):
-            self.insertRow(row)
-        self.endInsertRows()
-        return True
-    
-    def insertRow(self, row, parentIndex=None):
-        self.__columns.insert(row, {'label':'', 'model':'', 'instrument':''})
-    
-    def removeRows(self, row, rows=1, parentindex=None):
-        if parentindex is None: parentindex = Qt.QModelIndex()
-        first = row
-        last = row + rows - 1
-        self.beginRemoveRows(parentindex, first, last)
-        for row in range(first, last + 1):
-            self.removeRow(row)
-        self.endRemoveRows()
-        return True
-    
-    def removeRow(self, row, parentIndex=None):
-        self.__columns.pop(row)
-        
-CUSTOM_EDITOR = SenvEditor
-
-if __name__=="__main__":
-    import sys
-    import taurus
-    from taurus.qt.qtgui.application import TaurusApplication  
-    
-    app = TaurusApplication(sys.argv)
-    args = app.get_command_line_args()    
-    editor = SenvEditor()
-    macroServer = taurus.Device(args[0])
-    macroInfoObj = macroServer.getMacroInfoObj("senv")
-    macroNode = MacroNode()
-    editor.setMacroNode(macroNode)
-    editor.show()
-
-    sys.exit(app.exec_())
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/delegate.py b/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/delegate.py
deleted file mode 100644
index 3f68085..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/delegate.py
+++ /dev/null
@@ -1,125 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-delegate.py: 
-"""
-
-from taurus.qt import Qt
-
-from parameditors import MSAttrListComboBoxParam, SpinBoxParam, \
-    DoubleSpinBoxParam, LineEditParam, FileDialogParam, ComboBoxParam, ComboBoxBoolean
-from taurus.qt.qtgui.extra_macroexecutor import globals
-from taurus.core.tango.sardana import macro
-
-class ParamEditorDelegate(Qt.QStyledItemDelegate):
-        
-    def __init__(self, parent=None):
-        Qt.QStyledItemDelegate.__init__(self, parent)
-    
-    def createEditor(self, parent, option, index):
-        if index.column() == 1:
-            node = index.model().nodeFromIndex(index)
-            if isinstance(node, macro.SingleParamNode):
-                paramType = node.type()
-                if paramType in globals.EDITOR_COMBOBOX_PARAMS:
-                    comboBox = MSAttrListComboBoxParam(parent, node)
-                    comboBox.setElementType(paramType)
-                    
-                    ##################
-                    # The setUseParentModel mechanism is not working
-                    # we do it manually here as a hack 
-                    #comboBox.setUseParentModel(True)
-                    #comboBox.setModel('/elements')
-                    w=parent
-                    while w is not None:
-                        if hasattr(w, 'getModelName'):
-                            model = w.getModelName()+'/elements'
-                            break
-                        w=w.parent()
-                    comboBox.setModel(model)
-                    ###################
-                        
-                    return comboBox
-                elif paramType in globals.EDITOR_SPINBOX_PARAMS:
-                    return SpinBoxParam(parent, node)
-                elif paramType in globals.EDITOR_DOUBLESPINBOX_PARAMS:
-                    return DoubleSpinBoxParam(parent, node)
-                elif paramType in globals.EDITOR_LINEEDIT_PARAMS:
-                    return LineEditParam(parent, node)
-                elif paramType in globals.EDITOR_FILEDIALOG_PARAMS:
-                    return FileDialogParam(parent, node)
-                elif paramType in globals.EDITOR_BOOLEAN_PARAMS:
-                    return ComboBoxBoolean(parent, node)
-        return Qt.QStyledItemDelegate.createEditor(self, parent, option, index)
-    
-    def setEditorData(self, editor, index):
-        if index.column() == 1:
-            text = Qt.from_qvariant(index.model().data(index, Qt.Qt.DisplayRole), str)
-            if text == "None" or text == "":
-                Qt.QStyledItemDelegate.setEditorData(self, editor, index)
-            else:
-                editor.setValue(text)
-#                node = index.model().nodeFromIndex(index)
-#                paramType = node.type()
-#                if paramType in globals.EDITOR_COMBOBOX_PARAMS :
-#                    editor.setValue(text)  
-#                elif paramType in globals.EDITOR_SPINBOX_PARAMS:
-#                    editor.setValue(int(text))
-#                elif paramType in globals.EDITOR_DOUBLESPINBOX_PARAMS:
-#                    editor.setValue(float(text))
-#                elif paramType in globals.EDITOR_LINEEDIT_PARAMS:
-#                    editor.setText(text)
-#                elif paramType in globals.EDITOR_FILEDIALOG_PARAMS:
-#                    editor.filePath.setText(text)
-        else:
-            Qt.QStyledItemDelegate.setEditorData(self, editor, index)
-            
-    def setModelData(self, editor, model, index):
-        if index.column() == 1:
-            model.setData(index, Qt.QVariant(editor.getValue()))
-        else: 
-            Qt.QStyledItemDelegate.setModelData(self, editor, model, index)
-            
-    def sizeHint(self, option, index):
-        if index.column() == 0:
-            fm = option.fontMetrics
-            text = Qt.from_qvariant(index.model().data(index,Qt.Qt.DisplayRole), str)
-            document = Qt.QTextDocument()
-            document.setDefaultFont(option.font)
-            document.setHtml(text)
-            size = Qt.QSize(document.idealWidth() + 5, fm.height())
-        elif index.column() == 1:
-            editor = self.createEditor(self.parent(), option, index)
-            if editor is None:
-                size = Qt.QStyledItemDelegate.sizeHint(self, option, index)
-            else:
-                size = editor.sizeHint()
-                editor.hide()
-                editor.setParent(None)
-#                editor.destroy()
-        else:
-            size = Qt.QStyledItemDelegate.sizeHint(self, option, index)
-        return size
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/macroparameterseditor.py b/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/macroparameterseditor.py
deleted file mode 100644
index 527afba..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/macroparameterseditor.py
+++ /dev/null
@@ -1,379 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-macroparameterseditor.py: 
-"""
-import sys, inspect, glob
-
-from taurus.qt import Qt
-from taurus.core.util.singleton import Singleton
-from taurus.core.tango.sardana import macro
-from taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.delegate import ParamEditorDelegate
-
-
-from taurus.qt.qtgui.resource import getThemeIcon
-
-class MacroParametersEditor(object):
-    
-    def __init__(self):
-        pass
-#        self._macroModel = None
-    
-#    def setMacroModel(self, model):
-#        self._macroModel = model
-#        self.connect(self._macroModel, Qt.SIGNAL("dataChanged(QModelIndex,QModelIndex)"), self.onDataChanged)
-#        self.connect(self._macroModel, Qt.SIGNAL("modelReset()"), self.onModelReset)
-#    
-#    def onDataChanged(self):
-#        pass
-#    
-#    def onModelReset(self):
-#        self.onDataChanged()
-
-class StandardMacroParametersEditor(Qt.QWidget, MacroParametersEditor):
-    
-    def __init__(self, parent=None, macroNode=None):
-        Qt.QWidget.__init__(self, parent)
-        self.initComponents()
-        
-    def initComponents(self):
-        self.setLayout(Qt.QHBoxLayout())
-        self.layout().setContentsMargins(0,0,0,0)
-        
-        self.tree = MacroParametersTree(self)
-        self.delegate = ParamEditorDelegate(self.tree)
-        self.tree.setItemDelegate(self.delegate)
-        self.tree.setSizePolicy(Qt.QSizePolicy.Expanding,Qt.QSizePolicy.Expanding)
-        self.layout().addWidget(self.tree)
-        
-        actionLayout = Qt.QVBoxLayout()    
-        actionLayout.setContentsMargins(0,0,0,0)
-        addButton = Qt.QToolButton()
-        addButton.setDefaultAction(self.tree.addAction)
-        actionLayout.addWidget(addButton)
-        deleteButton = Qt.QToolButton()
-        deleteButton.setDefaultAction(self.tree.deleteAction)
-        actionLayout.addWidget(deleteButton)
-        moveUpButton = Qt.QToolButton()
-        moveUpButton.setDefaultAction(self.tree.moveUpAction)
-        actionLayout.addWidget(moveUpButton)
-        moveDownButton = Qt.QToolButton()
-        moveDownButton.setDefaultAction(self.tree.moveDownAction)
-        actionLayout.addWidget(moveDownButton)
-        spacerItem = Qt.QSpacerItem(0,0,Qt.QSizePolicy.Fixed,Qt.QSizePolicy.Expanding)
-        actionLayout.addItem(spacerItem)
-        
-        self.layout().addLayout(actionLayout)
-        
-    def setModel(self, model):
-        self.tree.setModel(model)
-        self.tree.expandAll()
-        
-    def macroNode(self):
-        return self.tree.macroNode()
-    
-    def setMacroNode(self, macroNode):
-        self.tree.setMacroNode(macroNode)
-            
-class MacroParametersTree(Qt.QTreeView):
-    
-    def __init__(self, parent=None, designMode=False):
-        Qt.QTreeView.__init__(self, parent)
-        self.setSelectionBehavior(Qt.QTreeView.SelectItems)
-        self.setRootIsDecorated(False)
-#        self.setTabKeyNavigation(True)
-        self.setEditTriggers(Qt.QAbstractItemView.AllEditTriggers)
-                    
-        self.addAction = Qt.QAction(getThemeIcon("list-add"), "Add new repetition", self)
-        self.connect(self.addAction, Qt.SIGNAL("triggered()"), self.onAddRepeat)
-        self.addAction.setToolTip("Clicking this button will add new repetition to current parameter.")
-                                  
-        self.deleteAction = Qt.QAction(getThemeIcon("list-remove"), "Remove repetition", self)
-        self.connect(self.deleteAction, Qt.SIGNAL("triggered()"), self.onDelRepeat)
-        self.deleteAction.setToolTip("Clicking this button will remove current repetition.")
-                
-        self.moveUpAction = Qt.QAction(getThemeIcon("go-up"), "Move up", self)
-        self.connect(self.moveUpAction, Qt.SIGNAL("triggered()"), self.onUpRepeat)
-        self.moveUpAction.setToolTip("Clicking this button will move current repetition up.")
-        
-        self.moveDownAction = Qt.QAction(getThemeIcon("go-down"), "Move down", self)
-        self.connect(self.moveDownAction, Qt.SIGNAL("triggered()"), self.onDownRepeat) 
-        self.moveDownAction.setToolTip("Clicking this button will move current repetition down.")
-        
-        self.disableActions()
-        
-        
-    def disableActions(self):
-        self.addAction.setEnabled(False)
-        self.deleteAction.setEnabled(False)
-        self.moveUpAction.setEnabled(False)
-        self.moveDownAction.setEnabled(False)
-        
-    def manageActions(self, currentIndex):
-        self.disableActions()
-        if currentIndex is None:
-            return
-        node = self.model().nodeFromIndex(currentIndex)
-        if isinstance(node, macro.RepeatNode):    
-            self.deleteAction.setEnabled(not node.parent().isReachedMin())
-            self.addAction.setEnabled(False)
-            self.moveUpAction.setEnabled(node.isAllowedMoveUp())
-            self.moveDownAction.setEnabled(node.isAllowedMoveDown())
-        elif isinstance(node, macro.RepeatParamNode):
-            self.addAction.setEnabled(not node.isReachedMax())
-            self.deleteAction.setEnabled(False)
-
-            
-    def currentChanged(self, current, previous):
-        self.manageActions(current)
-        Qt.QTreeView.currentChanged(self, current, previous)
-        
-    #def focusInEvent(self, event):
-    #    reason = event.reason()
-    #    if (reason == Qt.Qt.TabFocusReason) | (reason == Qt.Qt.BacktabFocusReason):  
-    #        if reason == Qt.Qt.TabFocusReason:
-    #            idx = self.forwardIdx(0, 1, Qt.QModelIndex())
-    #        elif reason == Qt.Qt.BacktabFocusReason:
-    #            idx = self.backwardIdx(len(self.root()) - 1, 1, Qt.QModelIndex())
-    #        self.setCurrentIndex(idx)
-    #        self.edit(idx)
-    #    else:
-    #        Qt.QTreeView.focusInEvent(self, event)
-    #        
-    #def forwardIdx(self, row, col, parentIdx):
-    #    try:
-    #        proposalIdx = self.model().index(row, col, parentIdx)
-    #    except AssertionError:
-    #        if parentIdx.row() == -1:
-    #            return Qt.QModelIndex() 
-    #        grandParentIdx = parentIdx.parent()
-    #        return self.forwardIdx(parentIdx.row() + 1, col, grandParentIdx)
-    #    
-    #    proposalNode = self.model().nodeFromIndex(proposalIdx)
-    #
-    #    if isinstance(proposalNode, macro.SingleParamNode):
-    #        return proposalIdx
-    #    elif isinstance(proposalNode, macro.RepeatNode):
-    #        return self.forwardIdx(0, 1, proposalIdx)
-    #    elif isinstance(proposalNode, macro.RepeatParamNode):
-    #        if len(proposalNode) > 0:
-    #            return self.forwardIdx(0, 1, proposalIdx)
-    #        else:
-    #            return self.forwardIdx(row + 1, col, proposalIdx)
-    #    elif not proposalIdx.isValid():
-    #        proposalIdx = parentIdx.sibling(parentIdx.row()+1, 0)
-    #        if proposalIdx.isValid():
-    #            proposalIdx = proposalIdx.child(0,1)
-    #        else:
-    #            while not proposalIdx.isValid():
-    #                parentIdx = parentIdx.parent()
-    #                if not parentIdx.isValid():
-    #                    return Qt.QModelIndex()
-    #                proposalIdx = parentIdx.sibling(parentIdx.row()+1, 1)
-    # 
-    #        return proposalIdx
-    #            
-    #    elif isinstance(proposalNode, macro.MacroNode):
-    #        ##self.model().setRoot(proposalNode)
-    #        return self.forwardIdx(0,1,proposalIdx)
-    #    
-    #def backwardIdx(self, row, col, parentIdx):
-    #    try:            
-    #        proposalIdx = self.model().index(row, col, parentIdx)
-    #    except AssertionError:
-    #        if parentIdx.row() == -1:
-    #            return Qt.QModelIndex()
-    #        grandParentIdx = parentIdx.parent()
-    #        return self.backwardIdx(parentIdx.row() - 1, col, grandParentIdx)
-    #    proposalNode = self.model().nodeFromIndex(proposalIdx)
-    #    if isinstance(proposalNode, macro.SingleParamNode):
-    #        return proposalIdx
-    #    elif isinstance(proposalNode, macro.RepeatNode):
-    #        return self.backwardIdx(self.model().rowCount(proposalIdx) - 1, 1, proposalIdx)
-    #    elif isinstance(proposalNode, macro.RepeatParamNode):
-    #        return self.backwardIdx(self.model().rowCount(proposalIdx) - 1, 1, proposalIdx)    
-    #    
-    #    elif not proposalIdx.isValid():
-    #        proposalIdx = parentIdx.sibling(parentIdx.row()-1, 0)
-    #        if proposalIdx.isValid():
-    #            tempRow = 0
-    #            proposalIdx = proposalIdx.child(tempRow,1)
-    #            while proposalIdx.sibling(tempRow+1, 1).isValid():
-    #                proposalIdx = proposalIdx.sibling(tempRow+1, 1)
-    #                tempRow +=1
-    #        else:
-    #            while not proposalIdx.isValid():
-    #                parentIdx = parentIdx.parent()
-    #                if not parentIdx.isValid():
-    #                    return Qt.QModelIndex()
-    #                proposalIdx = parentIdx.sibling(parentIdx.row()-1, 1)
-    #                
-    #        return proposalIdx
-    #    
-    #def moveCursor (self, cursorAction, modifiers):
-    #    ix=self.currentIndex()
-    #    self.manageActions(ix)
-    #    (col, row, parentIdx)=(ix.column(), ix.row(), ix.parent())
-    #    #to start from second column
-    #    if col == -1 and row == -1:
-    #        if cursorAction == Qt.QAbstractItemView.MoveNext:
-    #            return self.forwardIdx(0, 1, parentIdx)
-    #        elif cursorAction == Qt.QAbstractItemView.MovePrevious:
-    #            return self.backwardIdx(self.model().rowCount(parentIdx) - 1, 1, parentIdx)
-    #    if (cursorAction == Qt.QAbstractItemView.MoveNext and
-    #        modifiers == Qt.Qt.NoModifier):
-    #        #This condition in case we start tabbing with cursor on first column
-    #        if col == 0:
-    #            currentNode = self.model().nodeFromIndex(ix)
-    #            if isinstance(currentNode, macro.SingleParamNode):
-    #                nextIdx = self.forwardIdx(row, 1, parentIdx)
-    #            else:
-    #                nextIdx = self.forwardIdx(0, 1, ix)
-    #        else:
-    #            nextIdx = self.forwardIdx(row + 1, 1, parentIdx)
-    #        #this condition in case there is no next index and we want to pass focus 
-    #        #to next widget in parent obj
-    #        
-    #        if nextIdx == "term":
-    #            self.focusNextPrevChild(True)
-    #            return Qt.QModelIndex()
-    #        
-    #        if not nextIdx.isValid():
-    #            self.parent().focusNextChild()
-    #        #this condition in case the next index is valid and we want to 
-    #        #refresh state of buttons 
-    #        else:
-    #            self.manageActions(nextIdx)
-    #        return nextIdx
-    #                    
-    #    elif (cursorAction == Qt.QAbstractItemView.MovePrevious and
-    #        modifiers == Qt.Qt.NoModifier):
-    #        backwardIdx = self.backwardIdx(row - 1, 1, parentIdx)
-    #        #this contion in case there is no previous index and we want to pass focus 
-    #        #to previous widget in parent obj
-    #        if backwardIdx == "term":
-    #            self.focusNextPrevChild(False)
-    #            return Qt.QModelIndex()
-    #            
-    #        if not backwardIdx.isValid():
-    #            self.parent().focusPreviousChild()
-    #        else:                
-    #            self.manageActions(backwardIdx)
-    #        return backwardIdx 
-    #      
-    #def expanded(self):
-    #    for column in range(self.model().columnCount(Qt.QModelIndex())):
-    #        self.resizeColumnToContents(column)
-    
-    def onAddRepeat(self):
-        index = self.currentIndex()
-        if isinstance(self.model(), Qt.QSortFilterProxyModel): 
-            sourceIndex = self.model().mapToSource(index)
-            newSourceIndex = self.model()._insertRow(sourceIndex)
-            newIndex = self.model().mapFromSource(newSourceIndex)
-        else:
-            newIndex = self.model()._insertRow(index)
-        self.setCurrentIndex(newIndex)
-        self.expandAll()
-        
-    def onDelRepeat(self):
-        index = self.currentIndex()
-        if isinstance(self.model(), Qt.QSortFilterProxyModel): 
-            index = self.model().mapToSource(index)
-        self.model()._removeRow(index)
-        self.expandAll()
-        
-    def onUpRepeat(self):
-        index = self.currentIndex()
-        if isinstance(self.model(), Qt.QSortFilterProxyModel): 
-            sourceIndex = self.model().mapToSource(index)
-            newSourceIndex = self.model()._upRow(sourceIndex)
-            newIndex = self.model().mapFromSource(newSourceIndex)
-        else:
-            newIndex = self.model()._upRow(index)
-        self.setCurrentIndex(newIndex)
-        self.expandAll()
-        
-    def onDownRepeat(self):
-        index = self.currentIndex()
-        if isinstance(self.model(), Qt.QSortFilterProxyModel): 
-            sourceIndex = self.model().mapToSource(index)
-            newSourceIndex = self.model()._downRow(sourceIndex)
-            newIndex = self.model().mapFromSource(newSourceIndex)
-        else:
-            newIndex = self.model()._downRow(index)
-        self.setCurrentIndex(newIndex)
-        self.expandAll()
-           
-class ParamEditorManager(Singleton):
-    
-    def init(self):
-        self._paths = []
-        self._macroEditorsDict = {}
-        
-    def paths(self):
-        return self._paths
-    
-    def setPaths(self, paths):
-        self._paths = paths    
-        
-    def appendPath(self, path):
-        self._paths.append()
-    
-    def parsePaths(self, pathsString):
-        self.setPaths(pathsString.split(":"))
-
-    def browsePaths(self):
-        for path in self.paths():
-            modulePaths = glob.glob("%s/*.py" % path)
-            if not modulePaths:
-                continue
-            
-            sys.path.insert(0,path)
-            for modulePath in modulePaths:
-                if modulePath.endswith("__init__.py"):
-                    continue
-                modulePathAsArray = modulePath.split("/")
-                moduleFileName = modulePathAsArray[-1]
-                moduleName = moduleFileName[:-3] 
-                
-                try:
-                    module = __import__(moduleName)
-                except ImportError:
-                    continue
-                klass = getattr(module,"CUSTOM_EDITOR", None)
-#                for name, klass in inspect.getmembers(module, inspect.isclass):
-#                    if issubclass(klass, MacroParametersEditor):
-                self._macroEditorsDict[moduleName] = klass
-    
-    def getMacroEditor(self, macroName=None, parent=None):
-        editorClass = self._macroEditorsDict.get(macroName, None)
-        try:
-            return editorClass(parent=parent) 
-        except:
-            return None
-
-
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/model.py b/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/model.py
deleted file mode 100644
index 2728334..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/model.py
+++ /dev/null
@@ -1,222 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-##
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-##
-## Taurus 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.
-##
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-model.py:
-"""
-from taurus.qt import Qt
-from lxml import etree
-from taurus.core.tango.sardana import macro
-from taurus.qt.qtgui.extra_macroexecutor import globals
-
-
-class ParamEditorModel(Qt.QAbstractItemModel):
-
-    def __init__(self, parent=None):
-        Qt.QAbstractItemModel.__init__(self, parent)
-        self.columns = 2
-        self.setRoot()
-        self.headers = ["Parameter","Value"]
-
-    def root(self):
-        return self._root
-
-    def setRoot(self, node=None):
-        if node == None: node = macro.MacroNode()
-        self._root = node
-        self.reset()
-
-    def flags(self, index):
-        if index.column() == 0:
-            return Qt.Qt.ItemIsEnabled | Qt.Qt.ItemIsSelectable
-
-        node = self.nodeFromIndex(index)
-
-        if (index.column() == 1 and
-            isinstance(node, macro.SingleParamNode) and
-            not node.type() in globals.EDITOR_NONEDITABLE_PARAMS):
-            return Qt.Qt.ItemIsEnabled | Qt.Qt.ItemIsEditable
-        return Qt.Qt.ItemIsEnabled
-
-    def _insertRow(self, parentIndex, node=None, row=-1):
-        parentNode = self.nodeFromIndex(parentIndex)
-
-        if row == -1: row = len(parentNode)
-
-        if node == None: node = parentNode.newRepeat()
-
-        self.beginInsertRows(parentIndex, row, row)
-        row = parentNode.insertChild(node, row)
-        self.endInsertRows()
-
-        return self.index(row, 0, parentIndex)
-
-    def _removeRow(self, index):
-        """This method is used remove macro (pased via index)"""
-        node = self.nodeFromIndex(index)
-        parentIndex = index.parent()
-        parentNode = self.nodeFromIndex(parentIndex)
-        row = parentNode.rowOfChild(node)
-        self.beginRemoveRows(parentIndex, row, row)
-        parentNode.removeChild(node)
-        self.endRemoveRows()
-
-    def _upRow(self, index):
-        node = self.nodeFromIndex(index)
-        parentIndex = index.parent()
-        parentNode = self.nodeFromIndex(parentIndex)
-        row = parentNode.rowOfChild(node)
-        self._removeRow(index)
-        newIndex = self._insertRow(parentIndex, node, row - 1)
-        parentNode.arrangeIndexes()
-        return newIndex
-
-    def _downRow(self, index):
-        node = self.nodeFromIndex(index)
-        parentIndex = index.parent()
-        parentNode = self.nodeFromIndex(parentIndex)
-        row = parentNode.rowOfChild(node)
-        self._removeRow(index)
-        newIndex = self._insertRow(parentIndex, node, row + 1)
-        parentNode.arrangeIndexes()
-        return newIndex
-
-
-    def addRepeat(self, index, callReset=True):
-        paramRepeatNode = self.nodeFromIndex(index)
-        paramRepeatNode.addRepeat()
-        if callReset:
-            self.reset()
-
-    def delRepeat(self, index, callReset=True):
-        branchIndex = self.parent(index)
-        branch = self.nodeFromIndex(branchIndex)
-        child = self.nodeFromIndex(index)
-        branch.removeChild(child)
-        if callReset:
-            self.reset()
-
-    def upRepeat(self, index, callReset=True):
-        branchIndex = self.parent(index)
-        branch = self.nodeFromIndex(branchIndex)
-        child = self.nodeFromIndex(index)
-        branch.upChild(child)
-        if callReset:
-            self.reset()
-
-    def downRepeat(self, index, callReset=True):
-        branchIndex = self.parent(index)
-        branch = self.nodeFromIndex(branchIndex)
-        child = self.nodeFromIndex(index)
-        branch.downChild(child)
-        if callReset:
-            self.reset()
-
-    def rowCount(self, index):
-        node = self.nodeFromIndex(index)
-        if node is None or isinstance(node, macro.SingleParamNode):
-            return 0
-        return len(node)
-
-    def columnCount(self, parent):
-        return self.columns
-
-    def data(self, index, role):
-        if not index.isValid() or not (0 <= index.row() < self.rowCount(index.parent())):
-            return Qt.QVariant()
-
-        if role == Qt.Qt.DisplayRole:
-            node = self.nodeFromIndex(index)
-            if index.column() == 0:
-                return Qt.QVariant(node.name())
-            elif index.column() == 1:
-                return Qt.QVariant(node.value())
-
-        return Qt.QVariant()
-
-
-    def setData (self, index, value, role=Qt.Qt.EditRole):
-        node = self.nodeFromIndex(index)
-#        if index.isValid() and 0 <= index.row() < len(node.parent()):
-        if index.column() == 1:
-            node.setValue(Qt.from_qvariant(value, str))
-            self.emit(Qt.SIGNAL("dataChanged(QModelIndex,QModelIndex)"), index, index)
-            return True
-        return False
-
-    def headerData(self, section, orientation, role):
-        if orientation == Qt.Qt.Horizontal and role == Qt.Qt.DisplayRole:
-            return Qt.QVariant(self.headers[section])
-        return Qt.QVariant()
-
-    def index(self, row, column, parent):
-        if not parent.isValid():
-            parentNode = self.root();
-        else:
-            parentNode = parent.internalPointer()
-        childNode = parentNode.child(row)
-        if childNode is None:
-            return Qt.QModelIndex();
-        else:
-            return self.createIndex(row, column, childNode);
-
-
-    def parent(self, child):
-        node = self.nodeFromIndex(child)
-        if node is None:
-            return Qt.QModelIndex()
-        parent = node.parent()
-        if parent is None or isinstance(parent, macro.SequenceNode):
-            return Qt.QModelIndex()
-        grandparent = parent.parent()
-        if grandparent is None:
-            return Qt.QModelIndex()
-        row = grandparent.rowOfChild(parent)
-        return self.createIndex(row, 0, parent)
-
-    def nodeFromIndex(self, index):
-        if index.isValid():
-            return index.internalPointer()
-        else:
-            return self.root()
-
-    def toSpockCommand(self):
-        """
-        Converts root obj (MacroNode) to string representing spock command and returns it.
-
-        :return: (etree.Element)
-        """
-
-        return self.root().toSpockCommand()
-
-    def toXmlString(self):
-        """
-        Converts root obj (MacroNode) to xml string and returns it.
-
-        :return: (etree.Element)
-        """
-
-        xmlElement = self.root().toXml()
-        return etree.tostring(xmlElement)
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/parameditors.py b/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/parameditors.py
deleted file mode 100644
index 30cd17a..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/parameditors.py
+++ /dev/null
@@ -1,327 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-parameditors.py: 
-"""
-
-import os
-
-from taurus.qt import Qt
-from taurus.qt.qtgui.input import TaurusAttrListComboBox
-
-from taurus.qt.qtgui.extra_macroexecutor import globals
-from taurus.qt.qtgui.extra_macroexecutor.common import MSAttrListComboBox
-#@todo: replace by method from common module
-def str2bool(text):
-    return text in ("True", "1")
-
-class ParamBase:
-    
-    def __init__(self, paramModel=None):
-        self.setParamModel(paramModel)
-            
-    def paramModel(self):
-        return self._paramModel
-
-    def setParamModel(self, paramModel):
-        self._paramModel = paramModel      
-        
-    def resetValue(self):
-        if self.paramModel() is not None:
-            defValue = self.paramModel().defValue()
-            self.setValue(defValue)
-    
-    def index(self):
-        return self._index
-    
-    def setIndex(self, index):
-        self._index = index
-        paramModel = index.model().nodeFromIndex(index)
-        self.setParamModel(paramModel)
-        self.connect(self, Qt.SIGNAL("modelChanged()"), self.onModelChanged)
-        self.setValue(paramModel.value())
-        
-    def onModelChanged(self):
-        model = self.index().model()
-        model.setData(self.index(),Qt.QVariant(self.getValue()))
-        
-class ComboBoxBoolean(ParamBase, Qt.QComboBox):
-    def __init__(self, parent=None, paramModel=None):
-        ParamBase.__init__(self, paramModel)
-        Qt.QComboBox.__init__(self, parent)
-        
-        self.addItems(['True', 'False'])
-        self.connect(self, Qt.SIGNAL("currentIndexChanged(int)"), self.onCurrentIndexChanged)
-        
-    def getValue(self):
-        return str(self.currentText())
-    
-    def setValue(self, value):
-        currentIdx = self.currentIndex()
-        idx = self.findText(value)
-        if currentIdx == idx:
-            self.emit(Qt.SIGNAL("currentIndexChanged(int)"), self.currentIndex())
-        else:
-            self.setCurrentIndex(idx)
-        
-    def onCurrentIndexChanged(self):
-        self.emit(Qt.SIGNAL("modelChanged()"))
-        
-class ComboBoxParam(ParamBase, Qt.QComboBox):
-    
-    def __init__(self, parent=None, paramModel=None):
-        ParamBase.__init__(self, paramModel)
-        Qt.QComboBox.__init__(self, parent)
-        self.connect(self, Qt.SIGNAL("currentIndexChanged(int)"), self.onCurrentIndexChanged)
-        
-    def getValue(self):
-        return str(self.currentText())
-    
-    def setValue(self, value):
-        currentIdx = self.currentIndex()
-        idx = self.findText(value)
-        if currentIdx == idx:
-            self.emit(Qt.SIGNAL("currentIndexChanged(int)"), self.currentIndex())
-        else:
-            self.setCurrentIndex(idx)
-        
-    def onCurrentIndexChanged(self):
-        self.emit(Qt.SIGNAL("modelChanged()"))
-        
-class MSAttrListComboBoxParam(ParamBase, MSAttrListComboBox):
-    
-    def __init__(self, parent=None, paramModel=None):
-        ParamBase.__init__(self, paramModel)
-        MSAttrListComboBox.__init__(self, parent)
-#        self.setUseParentModel(True)
-#        self.setModel("/" + self.paramModel().type() + "List")
-        self.connect(self, Qt.SIGNAL("currentIndexChanged(int)"), self.onCurrentIndexChanged)
-    
-    def getValue(self):
-        return str(self.currentText())
-    
-    def setValue(self, value):
-        self.setCurrentText(value)
-        
-    def onCurrentIndexChanged(self):
-        self.emit(Qt.SIGNAL("modelChanged()"))
-        
-            
-class AttrListComboBoxParam(ParamBase, TaurusAttrListComboBox):
-    
-    def __init__(self, parent=None, paramModel=None):
-        ParamBase.__init__(self, paramModel)
-        TaurusAttrListComboBox.__init__(self,parent)
-        self.setModel("/" + self.paramModel().type() + "List")
-#        self.setToolTip(self.paramModel().description())
-
-    
-    def handleEvent(self, src, type, value):
-        self.clear()
-        if src and value:
-            lines = list(value.value)
-            items = []
-            if self.paramModel().type() == globals.PARAM_CONTROLLER_CLASS:
-                for line in lines:
-                    items.append(line.split()[4])
-            else:
-                for line in lines:
-                    items.append(line.split()[0])
-            items.sort()       
-            self.addItems(items)
-    #        self.updateStyle()
-        
-    def getValue(self):
-        return str(self.currentText())
-    
-#    def resetValue(self):
-#        self.setCurrentIndex(0)
-
-                
-class LineEditParam(ParamBase, Qt.QLineEdit):
-    def __init__(self, parent=None, paramModel=None):
-        ParamBase.__init__(self, paramModel)
-        Qt.QLineEdit.__init__(self,parent)
-        self.connect(self, Qt.SIGNAL("textChanged(const QString&)"), self.onTextChanged)
-#        self.setToolTip(self.paramModel().description())
-
-    def onTextChanged(self):
-        self.emit(Qt.SIGNAL("modelChanged()"))
-        
-#    def setDefaultValue(self):
-#        defVal = self.paramModel().defValue()
-#        if not (defVal == "None" or defVal == ""):
-#            self.setText(defVal)
-            
-    def setValue(self, value):
-        self.setText(value)
-    
-    def getValue(self):
-        return str(self.text())
-    
-#    def resetValue(self):
-#        self.setText("")
-#        self.setDefaultValue()
-        
-class CheckBoxParam(ParamBase, Qt.QCheckBox):
-    
-    def __init__(self, parent=None, paramModel=None):
-        ParamBase.__init__(self, paramModel)
-        Qt.QCheckBox.__init__(self, parent)
-        self.connect(self, Qt.SIGNAL("stateChanged(int)"), self.onStateChanged)
-        
-    def getValue(self):
-        return str(self.isChecked())
-    
-    def setValue(self, value):
-        self.setChecked(str2bool(value))
-    
-    def onStateChanged(self):
-        self.emit(Qt.SIGNAL("modelChanged()"))
-    
-
-class SpinBoxParam(ParamBase, Qt.QSpinBox):
-    def __init__(self, parent=None, paramModel=None):
-        ParamBase.__init__(self, paramModel)
-        Qt.QSpinBox.__init__(self,parent)
-        self.setRange(-999999999,999999999)
-        self.setAccelerated(True)
-#        self.setToolTip(self.paramModel().description())
-    
-    def getValue(self):
-        return str(self.value())
-    
-    def setValue(self, value):
-        Qt.QSpinBox.setValue(self, int(value))
-            
-#    def resetValue(self):
-#        self.setValue(0)
-#        self.setDefaultValue()
-                                  
-class DoubleSpinBoxParam(ParamBase, Qt.QDoubleSpinBox):
-    def __init__(self, parent=None, paramModel=None):
-        ParamBase.__init__(self, paramModel)
-        Qt.QDoubleSpinBox.__init__(self,parent)
-        self.setRange(-999999999.999999,999999999.999999)
-        self.setAccelerated(True)
-        self.setDecimals(6)
-        self.setSingleStep(0.000001)
-#        self.setToolTip(self.paramModel().description())
-        
-    def getValue(self):
-        return str(self.value()) 
-    
-    def setValue(self, value):
-        Qt.QDoubleSpinBox.setValue(self, float(value))
-    
-#    def setDefaultValue(self):
-#        defVal = self.paramModel().defValue()
-#        if not (defVal == "None" or defVal == ""):
-#            defVal = defVal.lower()
-#            try:
-#                val = float(defVal)
-#                self.setValue(val)
-#            except Error, e:
-#                pass
-#                        
-#    def resetValue(self):
-#        self.setValue(0.0)
-#        self.setDefaultValue()
-                
-class FileDialogParam(ParamBase, Qt.QWidget):
-    def __init__(self, parent=None, paramModel=None):
-        ParamBase.__init__(self, paramModel)
-        Qt.QWidget.__init__(self,parent)
-        self.setToolTip(self.paramModel().description())
-        self.layout = Qt.QHBoxLayout(self)
-        self.layout.setContentsMargins(0,0,0,0)
-        self.filePath = Qt.QLineEdit(self)
-        self.layout.addWidget(self.filePath)
-        self.button = Qt.QPushButton(self)
-        self.button.setText("...")
-        self.layout.addWidget(self.button)
-        
-        self.text = ""
-
-        Qt.QObject.connect(self.button,Qt.SIGNAL("clicked()"),self._chooseAFile)
-    
-    def _chooseAFile(self):
-        path = Qt.QFileDialog().getOpenFileName()
-        self.filePath.setText(path)
-                
-    def _readFileContent(self, path):
-        content = ""
-        if not os.access(path, os.R_OK):
-            return (False,content)
-        file = open(path,"r")
-        line = "nonempty"
-        while(line != ""):
-            line = file.readline()
-            content = content + line
-        file.close()
-        return (True,content)
-    
-    def getValue(self):
-        state,self.text = self._readFileContent(self.filePath.text())
-        if state is False:
-            self.filePath.setText("Error: couldn't read a file")
-        return str(self.text)
-    
-    def setValue(self, value):
-        self.filePath.setText(value)
-    
-class DirPathParam(ParamBase, Qt.QWidget):
-    
-    def __init__(self, parent=None, paramModel=None):
-        ParamBase.__init__(self, paramModel)
-        Qt.QWidget.__init__(self,parent)
-    
-        self.layout = Qt.QHBoxLayout(self)
-        self.layout.setContentsMargins(0,0,0,0)
-        self.dirPath = Qt.QLineEdit(self)
-        self.layout.addWidget(self.dirPath)
-        self.button = Qt.QPushButton(self)
-        self.button.setText("...")
-        self.layout.addWidget(self.button)
-        
-        self.connect(self.button,Qt.SIGNAL("clicked()"),self.__chooseDirPath)
-        self.connect(self.dirPath, Qt.SIGNAL("textChanged(const QString&)"), self.onDirPathChanged)
-
-    def onDirPathChanged(self):
-        self.emit(Qt.SIGNAL("modelChanged()"))
-        
-    def __chooseDirPath(self):
-        path = Qt.QFileDialog().getExistingDirectory()
-        self.setValue(path)
-        
-    def getValue(self):
-        return str(self.dirPath.text())
-    
-    def setValue(self, value):
-        self.dirPath.setText(value)
-        
-        
-    
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/scanplotter.py b/lib/taurus/qt/qtgui/extra_macroexecutor/scanplotter.py
deleted file mode 100644
index c958b5b..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/scanplotter.py
+++ /dev/null
@@ -1,161 +0,0 @@
-#!/usr/bin/env python
-# -*- coding: utf-8 -*-
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-scanplotter.py: 
-    module containing the widget: scanplotter,
-    to be used in the Taurus app "scanner.py"
-"""
-
-
-
-import taurus
-import taurus.core
-
-from taurus.qt import QtGui, Qwt5
-from taurus.qt.Qt import *
-
-from taurus.core.util import dictFromSequence
-from taurus.core.util.containers import CaselessDict
-from taurus.core.util.event import eventfilters
-from taurus.qt.qtgui.plot import TaurusTrend
-
-class ScanPlotter(TaurusTrend):
-            
-    def __init__(self, parent = None, designMode = False):
-            
-        TaurusTrend.__init__(self,parent,designMode)
-        self.setUseParentModel(False)
-        self._plotables=CaselessDict()
-        self._movingMotors=[]
-        self._macroNames=[]
-        self._doorName=None
-        
-        self.setMinimumSize(300, 200)
-        self.setXIsTime(True)
-        self.setAxisScale(Qwt5.QwtPlot.xBottom, 0, 60)
-        self.setXDynScale(True)
-
-    def onSequenceCleared(self):
-        self._movingMotors = []
-        self._macroNames = []
-        self.populatePlotables()
-    
-    def onMacrosAdded(self, macroNames, motors):
-        for macro in macroNames:
-            self._macroNames.append(macro)
-        self._movingMotors += motors
-        self.populatePlotables()
-        
-    def onMacroEdited(self, oldMotors, newMotors):
-        for motor in oldMotors:
-            self._movingMotors.remove(motor)
-        self._movingMotors += newMotors
-        self.populatePlotables()
-    
-    def onMacrosDeleted(self, macroNames, motors):
-        for macro in macroNames:
-            self._macroNames.remove(macro)
-        for motor in motors:
-            self._movingMotors.remove(motor)
-        self.populatePlotables()
-        
-    def onMacroStarted(self, macroName, motors):
-        self._macroNames = [macroName]
-        self._movingMotors = motors
-        self.populatePlotables()
-        
-    def onMotorChanged(self, oldMotor, newMotor):
-        if oldMotor in self._movingMotors:
-            self._movingMotors.remove(oldMotor)
-        self._movingMotors.append(newMotor)
-        self.populatePlotables()
-    
-    def onMacroChanged(self, macroNode):
-        if macroNode is None:
-            self._macroNames = []
-            self._movingMotors = []
-#            return
-        else:
-            self._macroNames = [macroNode.name()]
-            self._movingMotors = macroNode.allMotors()
-        self.populatePlotables()
-        
-    def onDoorChanged(self,doorName):
-        self._doorName=doorName
-        self._movingMotors=[]
-        self.populatePlotables()
-       
-    def getPlotables(self, macronames=None, doorname=None, movingmotors=None):
-        """returns a list of plotables for this scan given macro (channels and moving motors)"""
-        plotables = []
-        if macronames is None: macronames = list(set(self._macroNames))
-        if doorname is None: doorname = self._doorName
-        if movingmotors is None: movingmotors = list(set(self._movingMotors))
-        if doorname is None or not len(macronames):
-            return plotables
-        door = taurus.Device(doorname)
-        
-        
-        for macroname in macronames:
-            env=dictFromSequence(door.getMacroEnv([macroname]))
-            mntgrp_name=env.get("ActiveMntGrp")
-            if mntgrp_name is None:
-                continue
-            mntgrp = taurus.Device(mntgrp_name)
-            channels = mntgrp.getAttribute('Channels').read()
-            channelsList=channels.value
-            timer_name=mntgrp.getAttribute('Timer').read().value.lower()
-            plotables+=[('%s/%s_value'%(mntgrp_name,ch)).lower() for ch in channelsList if ch.lower()!=timer_name]
-        
-        for m in movingmotors:
-            if not (m is None or m == "" or m == "None"): 
-                plotables+=["%s/position"%m]
-        return plotables
-        
-    def populatePlotables(self,plotables=None):
-        ##@TODO: The name in the legend should be more descriptive: i.e. "dev/attr" instead of "attr" (this probably has to be changed for taurusplot in general  )
-        if plotables is None: plotables=self.getPlotables()
-        self.setModel(plotables)
-        self.curves_lock.acquire()
-        try:
-            for name in self.getTrendSetNames():
-                ts = self.getTrendSet(name)
-                ts.fireEvent(None, taurus.core.taurusbasetypes.TaurusEventType.Change, None)
-        finally:
-            self.curves_lock.release()
-        self.setEventFilters([eventfilters.ONLY_VALID], plotables)
-    
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    form = ScanPlotter()
-    if len(sys.argv)<4: raise ValueError('Syntax: '+sys.argv[0]+' macroname doorname plotable [anotherplotable...]')
-    form._macroName= sys.argv[1]
-    form._doorName= sys.argv[2] 
-    form.populatePlotables(sys.argv[3:])
-    form.show()
-    sys.exit(app.exec_())
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/delegate.py b/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/delegate.py
deleted file mode 100644
index 16d3378..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/delegate.py
+++ /dev/null
@@ -1,153 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-delegate.py: 
-"""
-
-from taurus.qt import Qt
-from taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.parameditors import AttrListComboBoxParam, SpinBoxParam, \
-    DoubleSpinBoxParam, LineEditParam, FileDialogParam
-
-from taurus.qt.qtgui.extra_macroexecutor import globals
-from taurus.core.tango.sardana import macro  
-
-class SequenceEditorDelegate(Qt.QItemDelegate):
-    
-    def __init__(self, parent=None):
-        Qt.QItemDelegate.__init__(self, parent)
-        
-    def paint(self, painter, option, index):
-        if index.column() == 2:
-            macroNode = index.model().nodeFromIndex(index)
-            opts = Qt.QStyleOptionProgressBarV2()
-            opts.rect = option.rect
-            range = macroNode.range()
-            opts.minimum = range[0]
-            opts.maximum = range[1]
-            opts.textVisible = True
-            percent = macroNode.progress()
-            opts.progress = percent
-#            opts.text = Qt.QString('Unavailable' if percent == 0 else '%d%%'%percent)
-            opts.text = Qt.QString('%d%%'%percent)
-#            opts.text = Qt.QString(percent)
-            Qt.QApplication.style().drawControl(Qt.QStyle.CE_ProgressBar, opts, painter)
-        else:
-            Qt.QItemDelegate.paint(self, painter, option, index)
-
-    
-    def createEditor(self, parent, option, index):
-        if index.column() == 3:
-            return Qt.QCheckBox(parent)
-        else:
-            return Qt.QItemDelegate.createEditor(self, parent, option, index)
-    
-    def setEditorData(self, editor, index):
-        node = index.model().mapToSource(index).internalPointer()
-        if index.column() == 3: #and isinstance(node, MacroNode):
-            editor.setChecked(node.isPause())
-        else:
-            Qt.QItemDelegate.setEditorData(self, editor, index)
-            
-    def setModelData(self, editor, model, index):
-        if index.column() == 3:
-            model.setData(index, Qt.QVariant(editor.isChecked()))
-            
-class MacroParametersProxyDelegate(Qt.QItemDelegate):
-        
-    def __init__(self, parent=None):
-        Qt.QItemDelegate.__init__(self, parent)
-    
-    def createEditor(self, parent, option, index):
-        if index.column() == 1: 
-            node = index.model().nodeFromIndex(index)
-            if isinstance(node, macro.SingleParamNode):
-                paramType = node.type()
-                if paramType in globals.EDITOR_COMBOBOX_PARAMS:
-                    comboBox = AttrListComboBoxParam(parent, node)
-                    comboBox.setUseParentModel(True)
-                    return comboBox
-                elif paramType in globals.EDITOR_SPINBOX_PARAMS:
-                    return SpinBoxParam(parent, node)
-                elif paramType in globals.EDITOR_DOUBLESPINBOX_PARAMS:
-                    return DoubleSpinBoxParam(parent, node)
-                elif paramType in globals.EDITOR_LINEEDIT_PARAMS:
-                    return LineEditParam(parent, node)
-                elif paramType in globals.EDITOR_FILEDIALOG_PARAMS:
-                    return FileDialogParam(parent, node)
-        return Qt.QItemDelegate.createEditor(self, parent, option, index)
-    
-    def setEditorData(self, editor, index):
-        if index.column() == 1:
-            text = Qt.from_qvariant(index.model().data(index, Qt.Qt.DisplayRole), str)
-            if text == "None" or text == "":
-                pass
-            else:
-                node = index.model().mapToSource(index).internalPointer()
-                paramType = node.type()
-                if paramType in globals.EDITOR_COMBOBOX_PARAMS :
-                    i = editor.findText(text)
-                    if i == -1: 
-                        i = 0
-                    else: 
-                        editor.previous = text
-                    editor.setCurrentIndex(i)  
-                elif paramType in globals.EDITOR_SPINBOX_PARAMS:
-                    editor.setValue(int(text))
-                elif paramType in globals.EDITOR_DOUBLESPINBOX_PARAMS:
-                    editor.setValue(float(text))
-                elif paramType in globals.EDITOR_LINEEDIT_PARAMS:
-                    editor.setText(text)
-                elif paramType in globals.EDITOR_FILEDIALOG_PARAMS:
-                    editor.filePath.setText(text)
-        else:
-            Qt.QItemDelegate.setEditorData(self, editor, index)
-            
-    def setModelData(self, editor, model, index):
-        if index.column() == 1:
-            model.setData(index, Qt.QVariant(editor.getValue()))
-            
-    def sizeHint(self, option, index):
-        if index.column() == 0:
-            fm = option.fontMetrics
-            text = Qt.from_qvariant(index.model().data(index,Qt.Qt.DisplayRole), str)
-            document = Qt.QTextDocument()
-            document.setDefaultFont(option.font)
-            document.setHtml(text)
-            size = Qt.QSize(document.idealWidth() + 5, fm.height())
-        elif index.column() == 1:
-            editor = self.createEditor(self.parent(), option, index)
-            if editor is None:
-                size = Qt.QItemDelegate.sizeHint(self, option, index)
-            else:
-                size = editor.sizeHint()
-                editor.hide()
-                editor.setParent(None)
-#                editor.destroy()
-        else: 
-            size = Qt.QItemDelegate.sizeHint(self, option, index)
-        return size
-
-                
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/model.py b/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/model.py
deleted file mode 100644
index dcb0d85..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/model.py
+++ /dev/null
@@ -1,406 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-model.py: 
-"""
-
-from taurus.qt import Qt
-from lxml import etree
-from taurus.core.tango.sardana import macro
-
-class MacroSequenceTreeModel(Qt.QAbstractItemModel):
-    
-    def __init__(self, parent=None):
-        Qt.QAbstractItemModel.__init__(self, parent)
-        self.columns = 4
-        self.setRoot(macro.SequenceNode())
-        self.headers = ["Macro","Parameters", "Progress", "Pause"]
-        
-    def root(self):
-        return self._root
-    
-    def setRoot(self, root):
-        self._root = root
-        self.reset()
-        
-    def clearSequence(self):
-        self.setRoot(macro.SequenceNode())
-        
-    def isEmpty(self):
-        return len(self.root()) == 0  
-        
-    def flags(self, index):
-        column = index.column()
-        node = self.nodeFromIndex(index)
-        flags = Qt.Qt.ItemIsEnabled
-        
-        if column == 0:
-            flags |= Qt.Qt.ItemIsSelectable
-            
-        elif column == 1:
-            if isinstance(node, macro.SingleParamNode) and \
-                not node.type() == "User":
-                flags |= Qt.Qt.ItemIsEditable
-            else:
-                flags |= Qt.Qt.ItemIsSelectable  
-                
-        elif column == 2:
-            flags |= Qt.Qt.ItemIsSelectable
-            
-        elif index.column() == 3:
-            flags |= (Qt.Qt.ItemIsSelectable | Qt.Qt.ItemIsEditable)
-            
-        if isinstance(node, macro.MacroNode):
-            flags |= Qt.Qt.ItemIsDragEnabled
-            if node.isAllowedHooks():
-                flags |= Qt.Qt.ItemIsDropEnabled 
-        return flags
-    
-    def _insertRow(self, parentIndex, node=None, row=-1):
-        parentNode = self.nodeFromIndex(parentIndex)
-        
-        if row == -1: row = len(parentNode)
-        
-        if isinstance(parentNode, macro.RepeatParamNode):
-            if node == None: node = parentNode.newRepeat()
-        
-        self.beginInsertRows(parentIndex, row, row)
-        row = parentNode.insertChild(node, row)
-        self.endInsertRows()
-        
-        return self.index(row, 0, parentIndex)
-        
-    def _removeRow(self, index):
-        """This method is used remove macro (pased via index)"""
-        node = self.nodeFromIndex(index)
-        parentIndex = index.parent()
-        parentNode = self.nodeFromIndex(parentIndex)
-        row = parentNode.rowOfChild(node)
-        self.beginRemoveRows(parentIndex, row, row)
-        parentNode.removeChild(node)
-        self.endRemoveRows()
-
-    def _upRow(self, index):
-        node = self.nodeFromIndex(index)
-        parentIndex = index.parent()
-        parentNode = self.nodeFromIndex(parentIndex)
-        row = parentNode.rowOfChild(node)
-        self._removeRow(index)
-        newIndex = self._insertRow(parentIndex, node, row - 1)
-        if isinstance(parentNode, macro.RepeatParamNode): 
-            parentNode.arrangeIndexes()
-        return newIndex
-    
-    def _downRow(self, index):
-        node = self.nodeFromIndex(index)
-        parentIndex = index.parent()
-        parentNode = self.nodeFromIndex(parentIndex)
-        row = parentNode.rowOfChild(node)
-        self._removeRow(index)
-        newIndex = self._insertRow(parentIndex, node, row + 1)
-        if isinstance(parentNode, macro.RepeatParamNode): 
-            parentNode.arrangeIndexes()
-        return newIndex
-    
-    def _leftRow(self, index):
-        """This method is used to move selected macro (pased via index)
-        to it's grandparent's hook list. In tree representation it basically move macro to the left"""
-        node = self.nodeFromIndex(index)
-        parentIndex = index.parent()
-        grandParentIndex = parentIndex.parent()
-        self._removeRow(index)
-        return self._insertRow(grandParentIndex, node)
-    
-    def _rightRow(self, index):
-        """This method is used to move selected macro (pased via index)
-        to it's grandparent's hook list. In tree representation it basically move macro to the left"""
-        node = self.nodeFromIndex(index)
-        parentIndex = index.parent()
-        row = index.row()
-        self._removeRow(index)
-        newParentIndex = self.index(row, 0, parentIndex) 
-        return self._insertRow(newParentIndex, node)
-    
-    def rowCount(self, parent):
-        branchNode = self.nodeFromIndex(parent)
-        return len(branchNode)
-    
-    def columnCount(self, parent):
-        return self.columns
-    
-    def data(self, index, role):
-        if role == Qt.Qt.DisplayRole:
-            node = self.nodeFromIndex(index)  
-            if index.column() == 0: 
-                return Qt.QVariant(node.name())
-            elif index.column() == 1: 
-                return Qt.QVariant(node.value())
-            elif index.column() == 2:
-                if isinstance(node, macro.MacroNode):
-                    return Qt.QVariant(node.progress())
-        elif role == Qt.Qt.DecorationRole:
-            node = self.nodeFromIndex(index)
-            if index.column() == 3:
-                if isinstance(node, macro.MacroNode):
-                    if node.isPause():
-                        return Qt.QVariant(Qt.QIcon(":/actions/media-playback-pause.svg"))
-        return Qt.QVariant()    
-            
-    def setData (self, index, value, role=Qt.Qt.EditRole):
-        node = self.nodeFromIndex(index)
-        if index.column() == 1:
-            if isinstance(node, macro.SingleParamNode):
-                node.setValue(Qt.from_qvariant(value, str))
-                self.emit(Qt.SIGNAL("dataChanged(QModelIndex,QModelIndex)"), index, index)
-                while True:
-                    index = index.parent()
-                    node = self.nodeFromIndex(index)
-                    if isinstance(node, macro.MacroNode):
-                        self.emit(Qt.SIGNAL("dataChanged(QModelIndex,QModelIndex)"), index, index.sibling(index.row(), self.columnCount(index)))
-                        break
-        elif index.column() == 2:
-            progress = Qt.from_qvariant(value, float)
-            node.setProgress(progress)
-            self.emit(Qt.SIGNAL("dataChanged(QModelIndex,QModelIndex)"), index, index)
-        elif index.column() == 3:  
-            node.setPause(Qt.from_qvariant(value, bool))
-            self.emit(Qt.SIGNAL("dataChanged(QModelIndex,QModelIndex)"), index, index)
-        return True
-
-    
-    def headerData(self, section, orientation, role):
-        if orientation == Qt.Qt.Horizontal and role == Qt.Qt.DisplayRole:
-            return Qt.QVariant(self.headers[section])
-        return Qt.QVariant()
-    
-    def index(self, row, column, parent):
-        assert self.root() is not None
-        branchNode = self.nodeFromIndex(parent)
-        assert branchNode is not None
-        return self.createIndex(row, column, branchNode.child(row))
-    
-    def parent(self, child):
-        node = self.nodeFromIndex(child)
-        if node is None:
-            return Qt.QModelIndex()
-        parent = node.parent()
-        if parent is None:
-            return Qt.QModelIndex()
-        grandparent = parent.parent()
-        if grandparent is None:
-            return Qt.QModelIndex()
-        row = grandparent.rowOfChild(parent)
-        assert row != -1
-        return self.createIndex(row, 0, parent)
-    
-    def nodeFromIndex(self, index):
-        if index.isValid():
-            return index.internalPointer()
-        else:
-            return self.root()        
-        
-    def toXmlString(self, pretty=False, withId=True):
-        xmlSequence = self.root().toXml(withId=withId)
-        xmlTree = etree.ElementTree(xmlSequence)
-        xmlString = etree.tostring(xmlTree, pretty_print=pretty) 
-        return xmlString
-    
-    def fromXmlString(self, xmlString):
-        xmlElement = etree.fromstring(xmlString)
-        newRoot = macro.SequenceNode(None)
-        newRoot.fromXml(xmlElement)
-        self.setRoot(newRoot)
-        self.reset()
-        return newRoot
-    
-    def fromPlainText(self, text):
-        newRoot = macro.SequenceNode(None)
-        newRoot.fromPlainText(text)
-        self.setRoot(newRoot)
-        self.reset()
-        return newRoot
-    
-    def assignIds(self):
-        """
-        Assigns ids for all macros present in the sequence. If certain macro
-        already had an id, it stays without change. A list of all ids is returned
-        
-        :return: (list)
-        """
-        parentNode = self.root()
-        return self.__assignIds(parentNode)
-    
-    def __assignIds(self, parentNode):
-        ids = []
-        for childNode in parentNode.children():
-            if isinstance(childNode, macro.MacroNode): 
-                id = childNode.assignId()
-                ids.append(id)
-                ids.extend(self.__assignIds(childNode))
-        return ids
-    
-    def firstMacroId(self):
-        return self.root().child(0).id()
-    
-    def lastMacroId(self):
-        root = self.root()
-        return root.child(len(root.children())-1).id()
-        
-    def createIdIndexDictionary(self):
-        parentIndex = Qt.QModelIndex()
-        parentNode = self.root()
-        return self.__createIdIndexDictionary(parentIndex, parentNode)
-        
-    def __createIdIndexDictionary(self, parentIndex, parentNode):
-        d = {}
-        for row, child in enumerate(parentNode.children()):
-            if isinstance(child, macro.MacroNode):
-                index = self.index(row, 0, parentIndex)
-                d[child.id()] = index
-                d.update(self.__createIdIndexDictionary(index, child))
-        return d
-        
-#    def supportedDropActions(self):
-#        return Qt.Qt.CopyAction | Qt.Qt.MoveAction
-        
-#    def mimeTypes(self):
-#        types = Qt.QStringList()
-#        types.append("text/xml")
-#        return types
-    
-#    def mimeData(self, indexes):
-#        mimeData = Qt.QMimeData()
-#        encodedData = Qt.QByteArray()
-#        stream = Qt.QDataStream(encodedData, Qt.QIODevice.WriteOnly)
-#        doc = xml.dom.minidom.Document()
-#        for i,index in enumerate(indexes):
-#            if i % 2:
-#                continue
-#            text = self.nodeFromIndex(index).toXml(doc).toxml()
-#            stream.writeString(text)
-#            
-#        mimeData.setData("text/xml", encodedData)
-#        return mimeData
-#    
-#    def dropMimeData(self, data, action, row, column, parent):
-#        if action == Qt.Qt.IgnoreAction:
-#            return True
-#        if not data.hasFormat("text/xml"):
-#            return False
-#        
-#        encodedData = data.data("text/xml")
-#        stream = Qt.QDataStream(encodedData, Qt.QIODevice.ReadOnly)
-#        newItems = Qt.QStringList()
-#        rows = 0
-#        
-#        while(not stream.atEnd()):
-#            text = stream.readString()
-#            newItems.append(text)
-#            rows += 1
-#            
-#        sequence = self.nodeFromIndex(parent)
-#        
-#        for text in newItems:
-#            macroNode = macro.MacroNode()
-#            macroNode.fromDoc(xml.dom.minidom.parseString(text))
-#            self.insertMacro(sequence, macroNode, row, False)
-#            macros = [macro.name() for macro in macroNode.allMacros()]
-#            if action == Qt.Qt.CopyAction:
-#                self.emit(Qt.SIGNAL("macrosAdded"), macros, macroNode.allMotors())
-#            self.emit(Qt.SIGNAL("dataChanged"))
-#        return True
-    
-    
-class MacroSequenceProxyModel(Qt.QSortFilterProxyModel):
-    
-    def __init__(self, parent=None):
-        Qt.QSortFilterProxyModel.__init__(self, parent)
-        self.setDynamicSortFilter(True)
-        self.headers = ["Macro","Parameters", "Progress", "Pause"]
-        self.columns = 4
-                    
-    def __getattr__(self, name):
-        return getattr(self.sourceModel(), name)
-    
-    def nodeFromIndex(self, index):
-        sourceIndex = self.mapToSource(index)
-        node = self.sourceModel().nodeFromIndex(sourceIndex)
-        return node
-    
-    def createIdIndexDictionary(self):
-        d = self.sourceModel().createIdIndexDictionary()
-        for id, sourceIndex in d.iteritems():
-            proxyIndex = self.mapFromSource(sourceIndex)
-            d[id] = Qt.QPersistentModelIndex(proxyIndex)
-        return d
-        
-    def filterAcceptsRow(self, row, parentIndex):
-        child = self.sourceModel().index(row, 0, parentIndex)
-        node = self.sourceModel().nodeFromIndex(child)
-        return isinstance(node, macro.MacroNode)
-     
-class MacroParametersProxyModel(Qt.QSortFilterProxyModel):
-    
-    def __init__(self, parent=None):
-        Qt.QSortFilterProxyModel.__init__(self, parent)
-        self.columns = 2
-        self.headers = ["Parameter", "Value", "", "", "", ""]
-        self._macroIndex = None
-        
-    def __getattr__(self, name):
-        return getattr(self.sourceModel(), name)
-    
-    def headerData(self, section, orientation, role):
-        if orientation == Qt.Qt.Horizontal and role == Qt.Qt.DisplayRole:
-            return Qt.QVariant(self.headers[section])
-        return Qt.QVariant()
-    
-    def nodeFromIndex(self, index):
-        sourceIndex = self.mapToSource(index)
-        node = self.sourceModel().nodeFromIndex(sourceIndex)
-        return node
-        
-    def setMacroIndex(self, macroIndex):
-        self._macroIndex = macroIndex
-        
-    def macroIndex(self):
-        return self._macroIndex
-    
-    def columnCount(self, parent):
-        return self.columns
-        
-    def filterAcceptsRow(self, row, parentIndex):
-        if self.macroIndex() == None:
-            return False
-        if self.macroIndex() == parentIndex:
-            child = self.sourceModel().index(row, 0, parentIndex)
-            node = self.sourceModel().nodeFromIndex(child) 
-            if not isinstance(node, macro.ParamNode):
-                return False 
-        return True
-    
-            
-    
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/sequenceeditor.py b/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/sequenceeditor.py
deleted file mode 100644
index 46649d0..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/sequenceeditor.py
+++ /dev/null
@@ -1,875 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-sequenceeditor.py: 
-"""
-import os, sys
-
-from taurus.qt import Qt
-import PyTango
-
-from lxml import etree
-from taurus.qt.qtgui.extra_macroexecutor.common import MacroExecutionWindow, MacroComboBox, standardPlotablesFilter
-from taurus import Device
-
-from taurus.qt.qtgui.container import TaurusMainWindow, TaurusWidget
-from taurus.qt.qtcore.configuration import BaseConfigurableClass
-from taurus.qt.qtgui.display import TaurusLed
-from taurus.qt.qtgui.dialog import TaurusMessageBox
-
-from taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor import ParamEditorManager, StandardMacroParametersEditor
-from taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.delegate import ParamEditorDelegate
-from taurus.core.tango.sardana.macro import MacroRunException, MacroNode
-from model import MacroSequenceTreeModel, MacroSequenceProxyModel, MacroParametersProxyModel
-from delegate import SequenceEditorDelegate
-from taurus.qt.qtgui.extra_macroexecutor import globals
-
-from taurus.qt.qtgui.resource import getIcon, getThemeIcon
-
-
-class HookAction(Qt.QAction):
-    
-    def __init__(self, text, parent, macroNode):
-        Qt.QAction.__init__(self, text, parent)
-        self.setCheckable(True)
-        self.setMacroNode(macroNode)
-        if text in self.macroNode().hookPlaces():
-            self.setChecked(True)
-        self.setToolTip("This macro will be executed as a %s" % text)
-        self.connect(self, Qt.SIGNAL('toggled(bool)'), self.onToggle)
-    
-    def macroNode(self):
-        return self._macroNode
-    
-    def setMacroNode(self, macroNode):
-        self._macroNode = macroNode
-        
-    def onToggle(self, trueFalse):
-        if trueFalse:
-            self.macroNode().addHookPlace(str(self.text()))
-        else:
-            self.macroNode().removeHookPlace(str(self.text()))
-
-class MacroSequenceTree(Qt.QTreeView, BaseConfigurableClass):
-    
-    def __init__(self, parent=None):
-        Qt.QTreeView.__init__(self, parent)
-        BaseConfigurableClass.__init__(self)
-        self._idIndexDict = {}
-        
-        self.setSelectionBehavior(Qt.QTreeView.SelectRows)
-        self.setSelectionMode(Qt.QTreeView.SingleSelection)
-        self.setRootIsDecorated(False)
-#        self.setItemsExpandable(False)
-        self.setDragEnabled(True)
-        self.setAcceptDrops(True)
-        self.setTabKeyNavigation(True)
-        self.setEditTriggers(Qt.QAbstractItemView.EditKeyPressed | Qt.QAbstractItemView.CurrentChanged)
-        self.setDropIndicatorShown(True)
-
-        self.deleteAction = Qt.QAction(getThemeIcon("list-remove"), "Remove macro", self)
-        self.connect(self.deleteAction, Qt.SIGNAL("triggered()"), self.deleteMacro)
-        self.deleteAction.setToolTip("Clicking this button will remove current macro.")
-           
-        self.moveUpAction = Qt.QAction(getThemeIcon("go-up"), "Move up", self)
-        self.connect(self.moveUpAction, Qt.SIGNAL("triggered()"), self.upMacro)
-        self.moveUpAction.setToolTip("Clicking this button will move current macro up.")
-        
-        self.moveDownAction = Qt.QAction(getThemeIcon("go-down"), "Move down", self)
-        self.connect(self.moveDownAction, Qt.SIGNAL("triggered()"), self.downMacro)
-        self.moveDownAction.setToolTip("Clicking this button will move current macro down.")
-        
-        self.moveLeftAction = Qt.QAction(getThemeIcon("go-previous"), "Move left", self)
-        self.connect(self.moveLeftAction, Qt.SIGNAL("triggered()"), self.leftMacro)
-        self.moveLeftAction.setToolTip("Clicking this button will move current macro to the left.")
-        
-        self.moveRightAction = Qt.QAction(getThemeIcon("go-next"), "Move right", self)
-        self.connect(self.moveRightAction, Qt.SIGNAL("triggered()"), self.rightMacro)
-        self.moveRightAction.setToolTip("Clicking this button will move current macro to the right.")
-                
-    def disableActions(self):
-        self.deleteAction.setEnabled(False)
-        self.moveUpAction.setEnabled(False)
-        self.moveDownAction.setEnabled(False)
-        self.moveLeftAction.setEnabled(False)
-        self.moveRightAction.setEnabled(False)
-   
-    def contextMenuEvent(self, event):
-        contextMenu = Qt.QMenu()
-        proxyIndex = self.indexAt(event.pos())
-        node = self.model().nodeFromIndex(proxyIndex)
-        #this is in case if we right click on an empty field of tree
-        if not isinstance(node, MacroNode): return
-        parentNode = node.parent()
-        #this is in case if we right click on a top level macro
-        if not isinstance(parentNode, MacroNode): return
-        allowedHooks = parentNode.allowedHookPlaces()
-        if allowedHooks:
-            hookPlacesSubmenu = contextMenu.addMenu("Hook places")
-            for allowedHook in allowedHooks:
-                action = HookAction(allowedHook, self, node)
-                hookPlacesSubmenu.addAction(action)
-        contextMenu.exec_(event.globalPos())
-
-#    def setHint(self, add):
-#        action = self.sender()
-#        hookText = action.text()
-#        macroNode = action.macroNode()
-#        if add:
-#            macroNode.addHook(hookText)
-#        else:
-#            macroNode.removeHook(hookText)
-#        pass
-            
-    def selectionChanged(self, selected, deselected):       
-        self.disableActions()
-        macroName = None
-        node, proxyIndex = self.selectedNodeAndIndex()
-        if node is not None:
-            macroName = node.name()
-            self.deleteAction.setEnabled(True)
-            self.moveUpAction.setEnabled(node.isAllowedMoveUp())
-            self.moveDownAction.setEnabled(node.isAllowedMoveDown())
-            self.moveLeftAction.setEnabled(node.isAllowedMoveLeft())
-            self.moveRightAction.setEnabled(node.isAllowedMoveRight()) 
-            sourceIndex = self.model().mapToSource(proxyIndex)
-            self.emit(Qt.SIGNAL("macroChanged"), sourceIndex)
-        self.emit(Qt.SIGNAL("macroNameChanged"), macroName)
-        
-    def expanded(self):
-        for column in range(self.model().columnCount(Qt.QModelIndex())):
-            self.resizeColumnToContents(column)
-    
-    def clearTree(self):
-        self.model().clearSequence()
-        
-    def toXmlString(self, pretty=False, withId=True):
-        return self.model().toXmlString(pretty=pretty, withId=withId)
-            
-    def fromXmlString(self, xmlString):
-        newRoot = self.model().fromXmlString(xmlString)
-        self.expandAll()
-        self.expanded()
-        return newRoot
-    
-    def fromPlainText(self, plainText):
-        newRoot = self.model().fromPlainText(plainText)
-        self.expandAll()
-        self.expanded()
-        return newRoot
-    
-    def root(self):
-        return self.model().root()
-    
-    def setRoot(self, root):
-        self.model().setRoot(root)
-        self.model().reset()
-
-    def addMacro(self, macroNode):
-        node, proxyIndex = self.selectedNodeAndIndex()
-        if node == None or not node.isAllowedHooks():
-            proxyIndex = self.rootIndex()
-        sourceIndex = self.model().mapToSource(proxyIndex)
-        newSourceIndex = self.model()._insertRow(sourceIndex, macroNode)
-        newProxyIndex = self.model().mapFromSource(newSourceIndex)
-#        persistentProxyIndex = Qt.QPersistentModelIndex(newProxyIndex)
-#        self._idIndexDict[macroNode.id()] = persistentProxyIndex
-        self.setCurrentIndex(newProxyIndex)
-        self.expandAll()
-        self.expanded()
-
-    def deleteMacro(self):
-        node, proxyIndex = self.selectedNodeAndIndex()
-        sourceIndex = self.model().mapToSource(proxyIndex)
-        self.model()._removeRow(sourceIndex)
-#        self._idIndexDict.pop(node.id())
-        self.expandAll()
-        self.expanded()
-    
-    def upMacro(self):
-        node, proxyIndex = self.selectedNodeAndIndex()
-        sourceIndex = self.model().mapToSource(proxyIndex)
-        newSourceIndex = self.model()._upRow(sourceIndex)
-        newProxyIndex = self.model().mapFromSource(newSourceIndex)
-#        persistentProxyIndex = Qt.QPersistentModelIndex(newProxyIndex)
-#        self._idIndexDict[node.id()] = persistentProxyIndex 
-        self.setCurrentIndex(newProxyIndex)
-        self.expandAll()
-#        self.expanded()
-        
-    def downMacro(self):
-        node, proxyIndex = self.selectedNodeAndIndex()
-        sourceIndex = self.model().mapToSource(proxyIndex)
-        newSourceIndex = self.model()._downRow(sourceIndex)
-        newProxyIndex = self.model().mapFromSource(newSourceIndex)
-#        persistentProxyIndex = Qt.QPersistentModelIndex(newProxyIndex)
-#        self._idIndexDict[node.id()] = persistentProxyIndex 
-        self.setCurrentIndex(newProxyIndex)
-        self.expandAll()
-#        self.expanded()
-        
-    def leftMacro(self):
-        node, proxyIndex = self.selectedNodeAndIndex()
-        sourceIndex = self.model().mapToSource(proxyIndex)
-        newSourceIndex = self.model()._leftRow(sourceIndex)
-        newProxyIndex = self.model().mapFromSource(newSourceIndex)
-#        persistentProxyIndex = Qt.QPersistentModelIndex(newProxyIndex)
-#        self._idIndexDict[node.id()] = persistentProxyIndex 
-        self.setCurrentIndex(newProxyIndex)
-        self.expandAll()
-        self.expanded()
-    
-    def rightMacro(self):
-        node, proxyIndex = self.selectedNodeAndIndex()
-        sourceIndex = self.model().mapToSource(proxyIndex)
-        newSourceIndex = self.model()._rightRow(sourceIndex)
-        newProxyIndex = self.model().mapFromSource(newSourceIndex)
-#        persistentProxyIndex = Qt.QPersistentModelIndex(newProxyIndex)
-#        self._idIndexDict[node.id()] = persistentProxyIndex
-        self.setCurrentIndex(newProxyIndex)
-        self.expandAll()
-        self.expanded()
-        
-    def prepareMacroIds(self):
-        model = self.model()
-        ids = model.assignIds()
-        firstId = model.firstMacroId()
-        lastId = model.lastMacroId()
-        return firstId, lastId, ids
-        
-    def prepareMacroProgresses(self):
-        self._idIndexDict = self.model().createIdIndexDictionary()
-        for macroId in self._idIndexDict.iterkeys():
-            self.setProgressForMacro(macroId, 0) 
-        
-    def setProgressForMacro(self, macroId, progress):
-        persistentIndex = self._idIndexDict.get(macroId, None)
-        if persistentIndex == None: return 
-        progressIndex = persistentIndex.sibling(persistentIndex.row(),2)
-        index = Qt.QModelIndex(progressIndex)
-        self.model().setData(index, Qt.QVariant(progress))
-        
-    def setRangeForMacro(self, macroId, range):
-        persistentIndex = self._idIndexDict.get(macroId, None)
-        if persistentIndex == None: return
-        index = Qt.QModelIndex(persistentIndex)
-        node = self.model().nodeFromIndex(index)
-        node.setRange(range)
-        
-    def selectedNodeAndIndex(self):
-        """Returns a tuple with selected internal model node object and QModelIndex 
-        from current model."""
-        for idx in self.selectedIndexes():
-            if idx.column() == 0:
-                node = self.model().nodeFromIndex(idx)
-                break
-        else:
-            node, idx = None, None
-        return node, idx
-    
-    def dropEvent(self, event):
-        Qt.QTreeView.dropEvent(self, event)
-        self.expandAll()
-                   
-
-class TaurusSequencerWidget(TaurusWidget):
-    
-    def __init__(self, parent = None, designMode = False):
-        TaurusWidget.__init__(self, parent, designMode)
-        self._macroIds = [] #list representing all macros ids (all from sequence) currently executed  
-        self._sequencesPath = str(Qt.QDir.homePath())
-        self._sequenceModel = MacroSequenceTreeModel()
-        
-        self.registerConfigProperty("sequencesPath", "setSequencesPath", "sequencesPath")
-        
-        self.setLayout(Qt.QVBoxLayout())
-        self.layout().setContentsMargins(0,0,0,0)
-        splitter = Qt.QSplitter()
-        self.layout().addWidget(splitter)
-        splitter.setOrientation(Qt.Qt.Vertical)
-
-        sequenceEditor = TaurusWidget()
-        splitter.addWidget(sequenceEditor)
-        sequenceEditor.setUseParentModel(True)
-        sequenceEditor.setLayout(Qt.QVBoxLayout())
-        sequenceEditor.layout().setContentsMargins(0,0,0,0)
-        
-        self.tree = MacroSequenceTree(sequenceEditor)        
-        self.sequenceProxyModel = MacroSequenceProxyModel()
-        self.sequenceProxyModel.setSourceModel(self._sequenceModel)
-        self.tree.setModel(self.sequenceProxyModel)
-        self.tree.setItemDelegate(SequenceEditorDelegate(self.tree))
-        
-        actionsLayout = Qt.QHBoxLayout()
-        actionsLayout.setContentsMargins(0,0,0,0)
-        self.newSequenceAction = Qt.QAction(getThemeIcon("document-new"), "New", self)
-        self.connect(self.newSequenceAction, Qt.SIGNAL("triggered()"), self.onNewSequence)
-        self.newSequenceAction.setToolTip("New sequence")
-        self.newSequenceAction.setEnabled(False)
-        newSequenceButton = Qt.QToolButton()
-        newSequenceButton.setDefaultAction(self.newSequenceAction)
-        actionsLayout.addWidget(newSequenceButton)
-        
-        self.openSequenceAction = Qt.QAction(getThemeIcon("document-open"), "Open...", self)
-        self.connect(self.openSequenceAction, Qt.SIGNAL("triggered()"), self.onOpenSequence)
-        self.openSequenceAction.setToolTip("Open sequence...")
-        openSequenceButton = Qt.QToolButton()
-        openSequenceButton.setDefaultAction(self.openSequenceAction)
-        actionsLayout.addWidget(openSequenceButton)
-        
-        self.saveSequenceAction = Qt.QAction(getThemeIcon("document-save"), "Save...", self)
-        self.connect(self.saveSequenceAction, Qt.SIGNAL("triggered()"), self.onSaveSequence)
-        self.saveSequenceAction.setToolTip("Save sequence...")
-        self.saveSequenceAction.setEnabled(False)        
-        saveSequenceButton = Qt.QToolButton()
-        saveSequenceButton.setDefaultAction(self.saveSequenceAction)
-        actionsLayout.addWidget(saveSequenceButton)
-        
-        self.stopSequenceAction = Qt.QAction(getIcon(":/actions/media_playback_stop.svg"), "Stop", self)
-        self.connect(self.stopSequenceAction, Qt.SIGNAL("triggered()"), self.onStopSequence)
-        self.stopSequenceAction.setToolTip("Stop sequence")
-        stopSequenceButton = Qt.QToolButton()
-        stopSequenceButton.setDefaultAction(self.stopSequenceAction)
-        actionsLayout.addWidget(stopSequenceButton)
-        
-        self.pauseSequenceAction = Qt.QAction(getIcon(":/actions/media_playback_pause.svg"), "Pause", self)
-        self.connect(self.pauseSequenceAction, Qt.SIGNAL("triggered()"), self.onPauseSequence)
-        self.pauseSequenceAction.setToolTip("Pause sequence")
-        pauseSequenceButton = Qt.QToolButton()
-        pauseSequenceButton.setDefaultAction(self.pauseSequenceAction)
-        actionsLayout.addWidget(pauseSequenceButton)
-        
-        self.playSequenceAction = Qt.QAction(getIcon(":/actions/media_playback_start.svg"), "Play", self)
-        self.connect(self.playSequenceAction, Qt.SIGNAL("triggered()"), self.onPlaySequence)
-        self.playSequenceAction.setToolTip("Play sequence")
-        playSequenceButton = Qt.QToolButton()
-        playSequenceButton.setDefaultAction(self.playSequenceAction)
-        actionsLayout.addWidget(playSequenceButton)
-        
-        self.doorStateLed = TaurusLed(self)
-        actionsLayout.addWidget(self.doorStateLed)
-        
-        #@todo this feature will be replaced by checkboxes in the sequence tree view 
-        #indicating clearing of the plot after execution 
-        self.fullSequencePlotCheckBox = Qt.QCheckBox("Full sequence plot", self)
-        self.connect(self.fullSequencePlotCheckBox, Qt.SIGNAL("toggled(bool)"), self.setFullSequencePlot)
-        self.fullSequencePlotCheckBox.setChecked(True)
-        actionsLayout.addWidget(self.fullSequencePlotCheckBox)
-        
-        spacerItem = Qt.QSpacerItem(0,0,Qt.QSizePolicy.Expanding,Qt.QSizePolicy.Fixed)
-        actionsLayout.addItem(spacerItem)
-        
-        sequenceEditor.layout().addLayout(actionsLayout)
-
-        macroLayout = Qt.QHBoxLayout()
-        macroLayout.setContentsMargins(0,0,0,0)
-        macroLabel = Qt.QLabel("Macro:")
-        macroLayout.addWidget(macroLabel)
-        self.macroComboBox = MacroComboBox(self)
-        self.macroComboBox.setUseParentModel(True)
-        self.macroComboBox.setModelColumn(0)
-        self.macroComboBox.setSizePolicy(Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Minimum)
-        macroLayout.addWidget(self.macroComboBox)
-        
-        self.addMacroAction = Qt.QAction(getThemeIcon("list-add"), "Add macro...", self)
-        self.connect(self.addMacroAction, Qt.SIGNAL("triggered()"), self.onAdd)
-        self.addMacroAction.setToolTip("Clicking this button will add selected macro")
-        self.addMacroAction.setEnabled(False)
-        addButton = Qt.QToolButton()
-        addButton.setDefaultAction(self.addMacroAction)
-        macroLayout.addWidget(addButton)
-        
-        sequenceEditor.layout().addLayout(macroLayout)
-        
-        sequenceLayout = Qt.QHBoxLayout()
-        sequenceLayout.addWidget(self.tree)
-        
-        layout = Qt.QVBoxLayout()
-        delButton = Qt.QToolButton()
-        delButton.setDefaultAction(self.tree.deleteAction)
-        delButton.setEnabled(False)
-        layout.addWidget(delButton)
-        upButton = Qt.QToolButton()
-        upButton.setDefaultAction(self.tree.moveUpAction)
-        upButton.setEnabled(False)
-        layout.addWidget(upButton)
-        downButton = Qt.QToolButton()
-        downButton.setDefaultAction(self.tree.moveDownAction)
-        downButton.setEnabled(False)
-        layout.addWidget(downButton)
-        leftButton = Qt.QToolButton()
-        leftButton.setDefaultAction(self.tree.moveLeftAction)
-        leftButton.setEnabled(False)
-        layout.addWidget(leftButton)
-        rightButton = Qt.QToolButton()
-        rightButton.setDefaultAction(self.tree.moveRightAction)
-        rightButton.setEnabled(False)
-        layout.addWidget(rightButton)
-        spacerItem = Qt.QSpacerItem(0,40,Qt.QSizePolicy.Fixed,Qt.QSizePolicy.Expanding)
-        layout.addItem(spacerItem)
-        sequenceLayout.addLayout(layout)
-        sequenceEditor.layout().addLayout(sequenceLayout)
-        
-        self.parametersProxyModel = MacroParametersProxyModel()
-        self.parametersProxyModel.setSourceModel(self._sequenceModel)
-        
-        self.stackedWidget = Qt.QStackedWidget()
-        splitter.addWidget(self.stackedWidget)
-        self.standardMacroParametersEditor = StandardMacroParametersEditor(self.stackedWidget)
-        self.standardMacroParametersEditor.setModel(self.parametersProxyModel)
-        self.standardMacroParametersEditor.tree.setItemDelegate(ParamEditorDelegate(self.standardMacroParametersEditor.tree))
-        self.stackedWidget.addWidget(self.standardMacroParametersEditor)
-        self.customMacroParametersEditor = None
-        
-        self.connect(self.macroComboBox, Qt.SIGNAL("currentIndexChanged(QString)"), self.onMacroComboBoxChanged)
-        self.connect(self.tree, Qt.SIGNAL("macroChanged"), self.setMacroParametersRootIndex)
-
-
-    def contextMenuEvent(self,event):
-        menu = Qt.QMenu()
-        action = menu.addAction(getThemeIcon("view-refresh"), "Check door state", self.checkDoorState)
-        menu.exec_(event.globalPos())
-    
-    def checkDoorState(self):
-        '''Method used by "Check door state" action (available in the context
-        menu). It is a workaround for situations when the event notification
-        about the macro status does not reach the sequencer widget.'''
-
-        door = Device(self.doorName())
-        doorState = door.state()
-        if doorState == PyTango.DevState.RUNNING:
-            self.playSequenceAction.setEnabled(False)
-            self.pauseSequenceAction.setEnabled(True)
-            self.stopSequenceAction.setEnabled(True)
-        elif doorState in (PyTango.DevState.ON, PyTango.DevState.ALARM):
-            self.playSequenceAction.setEnabled(True)
-            self.pauseSequenceAction.setEnabled(False)
-            self.stopSequenceAction.setEnabled(False)
-        elif doorState == PyTango.DevState.STANDBY:
-            self.playSequenceAction.setEnabled(True)
-            self.pauseSequenceAction.setEnabled(False)
-            self.stopSequenceAction.setEnabled(True)
-    
-    
-    def doorName(self):
-        return self._doorName
-        
-    def setDoorName(self, doorName):
-        self._doorName = doorName
-        
-    def firstMacroId(self):
-        return self._firstMacroId
-    
-    def setFirstMacroId(self, firstMacroId):
-        self._firstMacroId = firstMacroId
-        
-    def lastMacroId(self):
-        return self._lastMacroId
-    
-    def setLastMacroId(self, lastMacroId):
-        self._lastMacroId = lastMacroId
-        
-    def macroIds(self):
-        return self._macroIds
-    
-    def setMacroIds(self, macroIds):
-        self._macroIds = macroIds
-        
-    def emitExecutionStarted(self):
-        return self._emitExecutionStarted
-    
-    def setEmitExecutionStarted(self, yesNo):
-        self._emitExecutionStarted = yesNo
-        
-    def sequencesPath(self):
-        return self._sequencesPath
-    
-    def setSequencesPath(self, sequencesPath):
-        self._sequencesPath = sequencesPath
-        
-    def isFullSequencePlot(self):
-        return self._fullSequencePlot
-    
-    def setFullSequencePlot(self, fullSequencePlot):
-        self._fullSequencePlot = fullSequencePlot
-                
-    def onNewSequence(self):
-        if Qt.QMessageBox.question(self,
-                                   "New sequence", 
-                                   "Do you want to save existing sequence?",
-                                   Qt.QMessageBox.Yes,
-                                   Qt.QMessageBox.No) == Qt.QMessageBox.Yes:
-            self.onSaveSequence()
-        self.tree.clearTree()
-        self.newSequenceAction.setEnabled(False)
-        self.saveSequenceAction.setEnabled(False)
-        self.emit(Qt.SIGNAL("currentMacroChanged"), None)
-    
-    def onOpenSequence(self):
-        if not self._sequenceModel.isEmpty():
-            if Qt.QMessageBox.question(self,
-                                       "Open sequence", 
-                                       "Do you want to save existing sequence?",
-                                       Qt.QMessageBox.Yes,
-                                       Qt.QMessageBox.No) == Qt.QMessageBox.Yes:
-                self.onSaveSequence()
-                self.tree.clearTree()
-                
-        sequencesPath = self.sequencesPath()
-        fileName = str(Qt.QFileDialog.getOpenFileName(self,
-                                                     "Choose a sequence to open...",
-                                                     sequencesPath,
-                                                     "*"))
-        if fileName == "": return
-        #@todo: reset macroComboBox to index 0
-        try: 
-            file = open(fileName,'r')
-            string = file.read()
-            if fileName.endswith('.xml'):
-                root = self.fromXmlString(string)
-            else:
-                root = self.fromPlainText(string)
-            self._sequenceModel.setRoot(root)
-            self.sequenceProxyModel.invalidateFilter()
-            self.tree.expandAll()
-            self.tree.expanded()
-            self.parametersProxyModel.setMacroIndex(None)
-            self.parametersProxyModel.invalidateFilter()
-            
-            if not self._sequenceModel.isEmpty():
-                self.newSequenceAction.setEnabled(True)
-                self.saveSequenceAction.setEnabled(True)
-                self.playSequenceAction.setEnabled(True)
-        except IOError:
-            Qt.QMessageBox.warning(self,"Error while loading macros sequence", "There was a problem while reading from file: %s" % fileName)
-            self.tree.clearTree()
-            self.newSequenceAction.setEnabled(False)
-            self.saveSequenceAction.setEnabled(False)
-        except:
-            self.tree.clearTree()
-            self.playSequenceAction.setEnabled(False)
-            self.newSequenceAction.setEnabled(False)
-            self.saveSequenceAction.setEnabled(False)
-            raise
-        finally:
-            if not file is None: file.close()
-            self.setSequencesPath(str.join("/", fileName.rsplit("/")[:-1]))
-        
-        self.emit(Qt.SIGNAL("currentMacroChanged"), None)
-
-    def onSaveSequence(self):
-        sequencesPath = self.sequencesPath() 
-        if sequencesPath == "":
-            sequencesPath = str(Qt.QDir.homePath())
-            
-        sequencesPath = os.path.join(sequencesPath, "Untitled.xml")
-        fileName = str(Qt.QFileDialog.getSaveFileName(self,
-                                                     "Choose a sequence file name...",
-                                                     sequencesPath,
-                                                     "*.xml"))
-        if fileName == "": return
-        try:
-            file = open(fileName, "w")
-            file.write(self.tree.toXmlString(pretty=True, withId=False))
-            self.setSequencesPath(str.join("/", fileName.rsplit("/")[:-1]))
-        except Exception, e:
-            Qt.QMessageBox.warning(self,"Error while saving macros sequence", "There was a problem while writing to the file: %s" % fileName)
-            print e
-        finally:
-            if not file is None: file.close()
-            
-    def onPlaySequence(self):
-        door = Device(self.doorName())
-        doorState = door.state()
-        if doorState == PyTango.DevState.ON or doorState == PyTango.DevState.ALARM:
-            first, last, ids = self.tree.prepareMacroIds()
-            self.setFirstMacroId(first)
-            self.setLastMacroId(last)
-            self.setMacroIds(ids)
-            self.tree.prepareMacroProgresses()
-            self.setEmitExecutionStarted(True)
-            door.runMacro(self.tree.toXmlString())
-        elif doorState == PyTango.DevState.STANDBY:
-            door.command_inout("ResumeMacro")
-        else:
-            Qt.QMessageBox.warning(self,"Error while starting/resuming sequence", 
-                                   "It was not possible to start/resume sequence, because state of the door was different than ON/STANDBY")
-    
-    def onStopSequence(self):
-        door = Device(self.doorName())
-        doorState = door.state() 
-        if doorState in (PyTango.DevState.RUNNING,PyTango.DevState.STANDBY):
-            door.command_inout("StopMacro")
-        else:
-            Qt.QMessageBox.warning(self,"Error while stopping sequence", 
-                                   "It was not possible to stop sequence, because state of the door was different than RUNNING or STANDBY")
-    
-    def onPauseSequence(self):
-        door = Device(self.doorName())
-        doorState = door.state()
-        if doorState == PyTango.DevState.RUNNING:
-            door.command_inout("PauseMacro")
-        else:
-            Qt.QMessageBox.warning(self,"Error while pausing sequence", 
-                                   "It was not possible to pause sequence, because state of the door was different than RUNNING") 
-        
-    def onMacroStatusUpdated(self, data):
-        macro = data[0]
-        if macro is None: return
-        data = data[1][0]
-        state, range, step, id = str(data["state"]), data["range"], data["step"], data["id"]
-        if id is None: return
-        id = int(id)
-        if not id in self.macroIds(): return
-        macroName = macro.name
-        shortMessage = ""
-        if state == "start":
-            #@todo: Check this signal because it doesn't work, emitExecutionStarted is not set!!!
-            if self.emitExecutionStarted(): 
-                self.emit(Qt.SIGNAL("macroStarted"), "DoorOutput")
-            self.tree.setRangeForMacro(id, range)
-            self.playSequenceAction.setEnabled(False)
-            self.pauseSequenceAction.setEnabled(True)
-            self.stopSequenceAction.setEnabled(True)
-            if id == self.firstMacroId():            
-                self.emit(Qt.SIGNAL("plotablesFilterChanged"), None)
-                self.emit(Qt.SIGNAL("plotablesFilterChanged"), standardPlotablesFilter)
-                shortMessage = "Sequence started."
-            elif not self.isFullSequencePlot():
-                self.emit(Qt.SIGNAL("plotablesFilterChanged"), None)
-            shortMessage += " Macro %s started." % macroName
-        elif state == "pause":
-            self.playSequenceAction.setText("Resume sequence")
-            self.playSequenceAction.setToolTip("Resume sequence")
-            self.playSequenceAction.setEnabled(True)
-            self.pauseSequenceAction.setEnabled(False)
-            shortMessage = "Macro %s paused." % macroName
-        elif state == "resume":
-            self.playSequenceAction.setText("Start sequence")
-            self.playSequenceAction.setToolTip("Start sequence")
-            self.playSequenceAction.setEnabled(False)
-            self.pauseSequenceAction.setEnabled(True)
-            shortMessage = "Macro %s resumed." % macroName
-        elif state == "stop" or state == "finish":
-            shortMessage = "Macro %s finished." % macroName
-            if id == self.lastMacroId():
-                self.playSequenceAction.setEnabled(True)
-                self.pauseSequenceAction.setEnabled(False)
-                self.stopSequenceAction.setEnabled(False)
-                shortMessage += " Sequence finished."
-        elif state == 'exception':
-            self.playSequenceAction.setEnabled(True)
-            self.pauseSequenceAction.setEnabled(False)
-            self.stopSequenceAction.setEnabled(False)
-            shortMessage = "Macro %s error." % macroName
-            exc_value, exc_stack = data['exc_value'], data['exc_stack']
-            exceptionDialog = TaurusMessageBox(MacroRunException, exc_value, exc_stack)
-            exceptionDialog.exec_()
-        elif state == 'abort':
-            self.playSequenceAction.setText("Start sequence")
-            self.playSequenceAction.setToolTip("Start sequence")
-            self.playSequenceAction.setEnabled(True)
-            self.pauseSequenceAction.setEnabled(False)
-            self.stopSequenceAction.setEnabled(False)
-            shortMessage = "Macro %s stopped." % macroName 
-        elif state == "step":
-            shortMessage = "Macro %s at %d %% of progress." % (macroName, step) 
-        self.emit(Qt.SIGNAL("shortMessageEmitted"), shortMessage)    
-        self.tree.setProgressForMacro(id, step)
-
-    def onDoorChanged(self, doorName):
-        self.setDoorName(doorName)
-        if self.doorName() == "":
-            self.doorStateLed.setModel(None)
-            return
-        self.doorStateLed.setModel(self.doorName() + "/State")
-        doorState = Device(doorName).state()
-        if doorState == PyTango.DevState.ON:
-            self.playSequenceAction.setText("Start sequence")
-            self.playSequenceAction.setToolTip("Start sequence")
-            self.playSequenceAction.setEnabled(False)
-            self.pauseSequenceAction.setEnabled(False)
-            self.stopSequenceAction.setEnabled(False)
-        elif doorState == PyTango.DevState.STANDBY:
-            self.playSequenceAction.setText("Resume sequence")
-            self.playSequenceAction.setToolTip("Resume sequence")
-            self.playSequenceAction.setEnabled(True)
-            self.pauseSequenceAction.setEnabled(False)
-            self.stopSequenceAction.setEnabled(True)
-        
-    def setMacroParametersRootIndex(self, sourceIndex):
-        parametersModel = self.standardMacroParametersEditor.tree.model()
-        parametersModel.setMacroIndex(sourceIndex)
-        parametersModel.invalidateFilter()
-        proxyIndex = parametersModel.mapFromSource(sourceIndex)
-        
-        macroNode = sourceIndex.internalPointer()
-        macroName = macroNode.name()
-        
-        if self.stackedWidget.count() == 2:
-            self.stackedWidget.removeWidget(self.customMacroParametersEditor) 
-            self.customMacroParametersEditor.setParent(None)
-        self.customMacroParametersEditor = ParamEditorManager().getMacroEditor(macroName)        
-        if self.customMacroParametersEditor:
-            self.customMacroParametersEditor.setModel(parametersModel)
-            self.customMacroParametersEditor.setRootIndex(proxyIndex)
-            self.stackedWidget.addWidget(self.customMacroParametersEditor)
-            self.stackedWidget.setCurrentWidget(self.customMacroParametersEditor)
-        else:        
-            self.standardMacroParametersEditor.tree.setRootIndex(proxyIndex)
-            self.standardMacroParametersEditor.tree.expandAll()    
-        
-    def onMacroComboBoxChanged(self):
-        macroName = str(self.macroComboBox.currentText())
-        if macroName == "":
-            self.addMacroAction.setEnabled(False)
-        else:
-            self.addMacroAction.setEnabled(True)
-        self.emit(Qt.SIGNAL("macroNameChanged"), macroName)
-        
-    def onAdd(self):
-        macroName = str(self.macroComboBox.currentText())
-        macroNode = self.getModelObj().getMacroNodeObj(macroName)
-        self.tree.addMacro(macroNode)
-        self.saveSequenceAction.setEnabled(True)
-        self.playSequenceAction.setEnabled(True)
-        
-    def isEmptySequence(self):
-        return len(self.tree.root()) == 0
-    
-    def isMacroSelected(self):
-        return len(self.tree.selectedIndexes()) == 2
-    
-    def emptySequence(self):
-        self.tree.clearTree()
-        self.disableButtons()
-        self.emit(Qt.SIGNAL("currentMacroChanged"), None)
-        self.emit(Qt.SIGNAL("sequenceEmpty"))
-      
-    def fromXmlString(self, xmlString):
-        newRoot = self.tree.fromXmlString(xmlString)
-        macroServerObj = self.getModelObj()
-        for macroNode in newRoot.allMacros():
-            macroServerObj.fillMacroNodeAdditionalInfos(macroNode)
-        return newRoot
-    
-    def fromPlainText(self, plainText):
-        newRoot = self.tree.fromPlainText(plainText)
-        macroServerObj = self.getModelObj()
-        for macroNode in newRoot.allMacros():
-            macroServerObj.recreateMacroNodeAndFillAdditionalInfos(macroNode)
-        return newRoot
-    
-    def setModel(self, model):
-        oldModelObj = self.getModelObj()
-        if oldModelObj is not None:
-            self.disconnect(oldModelObj,Qt.SIGNAL("macrosUpdated"), self.macroComboBox.onMacrosUpdated)
-        TaurusWidget.setModel(self, model)
-        newModelObj = self.getModelObj()
-        self.connect(newModelObj, Qt.SIGNAL("macrosUpdated"), self.macroComboBox.onMacrosUpdated)
-
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        return {'container': False, 
-                'group': 'Taurus Sardana', 
-                'module': 'taurus.qt.qtgui.extra_macroexecutor', 
-                'icon': ':/designer/frame.png'}
-
-
-class TaurusSequencer(MacroExecutionWindow):
-    
-    def __init__(self, parent = None, designMode = False):
-        MacroExecutionWindow.__init__(self)
-        
-    def initComponents(self):
-        #@todo: take care about storing model 
-        self.setModelInConfig(True)
-        self.taurusSequencerWidget = TaurusSequencerWidget(self)
-        self.taurusSequencerWidget.setUseParentModel(True)
-        self.registerConfigDelegate(self.taurusSequencerWidget)
-        self.setCentralWidget(self.taurusSequencerWidget)
-        self.connect(self.taurusSequencerWidget, Qt.SIGNAL('shortMessageEmitted'), self.onShortMessage)
-        self.statusBar().showMessage("Sequencer ready")
-        
-    def setCustomMacroEditorPaths(self, customMacroEditorPaths):
-        MacroExecutionWindow.setCustomMacroEditorPaths(self, customMacroEditorPaths)
-        ParamEditorManager().parsePaths(customMacroEditorPaths)
-        ParamEditorManager().browsePaths()        
-
-    def loadSettings(self):
-        TaurusMainWindow.loadSettings(self)
-        self.emit(Qt.SIGNAL("doorChanged"), self.doorName())
-        
-    def onDoorChanged(self, doorName):
-        MacroExecutionWindow.onDoorChanged(self, doorName)
-        if self._qDoor:
-            Qt.QObject.disconnect(self._qDoor, Qt.SIGNAL("macroStatusUpdated"), self.taurusSequencerWidget.onMacroStatusUpdated)
-        if doorName == "": return
-        self._qDoor = Device(doorName)
-        Qt.QObject.connect(self._qDoor, Qt.SIGNAL("macroStatusUpdated"), self.taurusSequencerWidget.onMacroStatusUpdated)
-        self.taurusSequencerWidget.onDoorChanged(doorName)
-    
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        return None
-
-        
-def createSequencerWidget(args):
-    sequencer = TaurusSequencerWidget()
-    sequencer.setModelInConfig(True)
-    Qt.QObject.connect(sequencer, Qt.SIGNAL("doorChanged"), sequencer.onDoorChanged)
-    if len(args) == 2:
-        sequencer.setModel(args[0])
-        sequencer.emit(Qt.SIGNAL('doorChanged'), args[1])
-    return sequencer
-
-def createSequencer(args):
-    sequencer = TaurusSequencer()
-    sequencer.setModelInConfig(True)
-    Qt.QObject.connect(sequencer, Qt.SIGNAL("doorChanged"), sequencer.onDoorChanged)
-    if len(args) == 2:
-        sequencer.setModel(args[0])
-        sequencer.emit(Qt.SIGNAL('doorChanged'), args[1])
-    sequencer.loadSettings()
-    return sequencer
-      
-def main():      
-    from taurus.qt.qtgui.application import TaurusApplication
-    import taurus
-#    from rfoo.utils import rconsole
-#    rconsole.spawn_server()
-    
-    app = TaurusApplication(sys.argv, app_version=taurus.Release.version)
-    args = app.get_command_line_args()
-
-    app.setOrganizationName(globals.ORGANIZATION_NAME)
-    app.setApplicationName(globals.SEQUENCER_APPLICATION_NAME)
-    sequencer = createSequencer(args)
-    sequencer.show()
-    sys.exit(app.exec_())  
-    
-if __name__ == "__main__":
-    main()
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/ui/macrobutton.ui b/lib/taurus/qt/qtgui/extra_macroexecutor/ui/macrobutton.ui
deleted file mode 100644
index 6d79c0e..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/ui/macrobutton.ui
+++ /dev/null
@@ -1,93 +0,0 @@
-<ui version="4.0" >
- <class>MacroButton</class>
- <widget class="QWidget" name="MacroButton" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>106</width>
-    <height>79</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string>Form</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout_2" >
-   <property name="margin" >
-    <number>0</number>
-   </property>
-   <property name="spacing" >
-    <number>0</number>
-   </property>
-   <item row="0" column="0" >
-    <widget class="QFrame" name="frame" >
-     <property name="frameShape" >
-      <enum>QFrame::Box</enum>
-     </property>
-     <property name="frameShadow" >
-      <enum>QFrame::Plain</enum>
-     </property>
-     <property name="lineWidth" >
-      <number>3</number>
-     </property>
-     <property name="midLineWidth" >
-      <number>3</number>
-     </property>
-     <layout class="QGridLayout" name="gridLayout" >
-      <property name="margin" >
-       <number>0</number>
-      </property>
-      <property name="spacing" >
-       <number>0</number>
-      </property>
-      <item row="0" column="0" >
-       <widget class="QPushButton" name="button" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="text" >
-         <string>PushButton</string>
-        </property>
-        <property name="checkable" >
-         <bool>true</bool>
-        </property>
-        <property name="autoDefault" >
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="0" >
-       <widget class="QProgressBar" name="progress" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Minimum" hsizetype="Expanding" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="maximumSize" >
-         <size>
-          <width>16777215</width>
-          <height>10</height>
-         </size>
-        </property>
-        <property name="font" >
-         <font>
-          <pointsize>6</pointsize>
-         </font>
-        </property>
-        <property name="value" >
-         <number>24</number>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/ui_macrobutton.py b/lib/taurus/qt/qtgui/extra_macroexecutor/ui_macrobutton.py
deleted file mode 100644
index 9e6e45e..0000000
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/ui_macrobutton.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'macrobutton.ui'
-#
-# Created: Tue Aug 16 15:59:17 2011
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_MacroButton(object):
-    def setupUi(self, MacroButton):
-        MacroButton.setObjectName("MacroButton")
-        MacroButton.resize(106, 79)
-        self.gridLayout_2 = QtGui.QGridLayout(MacroButton)
-        self.gridLayout_2.setMargin(0)
-        self.gridLayout_2.setSpacing(0)
-        self.gridLayout_2.setObjectName("gridLayout_2")
-        self.frame = QtGui.QFrame(MacroButton)
-        self.frame.setFrameShape(QtGui.QFrame.Box)
-        self.frame.setFrameShadow(QtGui.QFrame.Plain)
-        self.frame.setLineWidth(3)
-        self.frame.setMidLineWidth(3)
-        self.frame.setObjectName("frame")
-        self.gridLayout = QtGui.QGridLayout(self.frame)
-        self.gridLayout.setMargin(0)
-        self.gridLayout.setSpacing(0)
-        self.gridLayout.setObjectName("gridLayout")
-        self.button = QtGui.QPushButton(self.frame)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.button.sizePolicy().hasHeightForWidth())
-        self.button.setSizePolicy(sizePolicy)
-        self.button.setCheckable(True)
-        self.button.setAutoDefault(False)
-        self.button.setObjectName("button")
-        self.gridLayout.addWidget(self.button, 0, 0, 1, 1)
-        self.progress = QtGui.QProgressBar(self.frame)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.progress.sizePolicy().hasHeightForWidth())
-        self.progress.setSizePolicy(sizePolicy)
-        self.progress.setMaximumSize(QtCore.QSize(16777215, 10))
-        font = QtGui.QFont()
-        font.setPointSize(6)
-        self.progress.setFont(font)
-        self.progress.setProperty("value", QtCore.QVariant(24))
-        self.progress.setObjectName("progress")
-        self.gridLayout.addWidget(self.progress, 1, 0, 1, 1)
-        self.gridLayout_2.addWidget(self.frame, 0, 0, 1, 1)
-
-        self.retranslateUi(MacroButton)
-        QtCore.QMetaObject.connectSlotsByName(MacroButton)
-
-    def retranslateUi(self, MacroButton):
-        MacroButton.setWindowTitle(QtGui.QApplication.translate("MacroButton", "Form", None, QtGui.QApplication.UnicodeUTF8))
-        self.button.setText(QtGui.QApplication.translate("MacroButton", "PushButton", None, QtGui.QApplication.UnicodeUTF8))
-
diff --git a/lib/taurus/qt/qtgui/extra_nexus/taurusnexuswidget.py b/lib/taurus/qt/qtgui/extra_nexus/taurusnexuswidget.py
index 3125fcf..1a75bda 100644
--- a/lib/taurus/qt/qtgui/extra_nexus/taurusnexuswidget.py
+++ b/lib/taurus/qt/qtgui/extra_nexus/taurusnexuswidget.py
@@ -33,7 +33,7 @@ import numpy
 import posixpath
 
 from PyMca import HDF5Widget, HDF5Info, HDF5DatasetTable
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 from taurus.qt.qtgui.container import TaurusWidget
 from taurus.qt.qtgui.plot import TaurusPlot
diff --git a/lib/taurus/qt/qtgui/extra_pool/__init__.py b/lib/taurus/qt/qtgui/extra_pool/__init__.py
index 74b8e08..728e07b 100644
--- a/lib/taurus/qt/qtgui/extra_pool/__init__.py
+++ b/lib/taurus/qt/qtgui/extra_pool/__init__.py
@@ -1,35 +1,24 @@
-#!/usr/bin/env python
-
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
 #############################################################################
 
-"""
-__init__.py: 
-"""
-
-from motor import TaurusMotorH, TaurusMotorH2, TaurusMotorV, TaurusMotorV2
-from poolmotor import PoolMotorSlim, LabelWidgetDragsDeviceAndAttribute
-from poolmotor import PoolMotorTV, PoolMotorTVLabelWidget, PoolMotorTVReadWidget, PoolMotorTVWriteWidget, PoolMotorTVUnitsWidget
-from poolmotor import PoolMotor
-from poolchannel import PoolChannel, PoolChannelTV
-from poolioregister import PoolIORegisterTV, PoolIORegisterReadWidget, PoolIORegisterWriteWidget, PoolIORegister, PoolIORegisterButtons
+from sardana.taurus.qt.qtgui.extra_pool import *
diff --git a/lib/taurus/qt/qtgui/extra_pool/motor.py b/lib/taurus/qt/qtgui/extra_pool/motor.py
deleted file mode 100644
index 2c3c74a..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/motor.py
+++ /dev/null
@@ -1,1140 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-motor.py: 
-"""
-
-
-from taurus.qt import Qt
-from taurus.qt.qtgui.base import TaurusBaseWidget
-from ui_taurusmotorh import Ui_TaurusMotorH
-from ui_taurusmotorh2 import Ui_TaurusMotorH2
-from ui_taurusmotorv import Ui_TaurusMotorV
-from ui_taurusmotorv2 import Ui_TaurusMotorV2
-
-
-def showDialogConfigureMotor(parent):
-    Dialog = Qt.QDialog(parent)
-    Dialog.resize((Qt.QSize(Qt.QRect(0,0,310,309).size()).expandedTo(Dialog.minimumSizeHint())))
-    motorV2 = TaurusMotorV2(Dialog)
-    motorV2.setModel(parent.model)
-    motorV2.setGeometry(Qt.QRect(10,10,291,291))
-    Dialog.show()
-
-
-class TaurusMotorH(Qt.QWidget, TaurusBaseWidget):
-
-    __pyqtSignals__ = ("modelChanged(const QString &)",)
-
-    def __init__(self, parent = None, designMode = False):
-        self.call__init__wo_kw(Qt.QWidget, parent)
-        self.call__init__(TaurusBaseWidget, str(self.objectName()), designMode=designMode)
-        self.ui = Ui_TaurusMotorH()
-        self.ui.setupUi(self)
-        Qt.QObject.connect(self.ui.config, Qt.SIGNAL("clicked()"), self.configureMotor)
-
-    def sizeHint(self):
-        return Qt.QSize(330,50)
-
-    def configureMotor(self):
-        showDialogConfigureMotor(self.ui.TaurusGroupBox)
-
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        return None
-#        ret = TaurusBaseWidget.getQtDesignerPluginInfo()
-#        ret['module'] = 'taurus.qt.qtgui.extra_pool'
-#        ret['group'] = 'Taurus Sardana'
-#        ret['icon'] = ':/designer/extra_pool.png'
-#        return ret
-        
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # QT properties 
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    @Qt.pyqtSignature("getModel()")
-    def getModel(self):
-        return self.ui.TaurusGroupBox.getModel()
-
-    @Qt.pyqtSignature("setModel(QString)")
-    def setModel(self, model):
-        self.ui.TaurusGroupBox.setModel(model)
-
-    @Qt.pyqtSignature("resetModel()")
-    def resetModel(self):
-        self.ui.TaurusGroupBox.resetModel()
-
-
-    @Qt.pyqtSignature("getShowText()")
-    def getShowText(self):
-        return self.ui.TaurusGroupBox.getShowText()
-
-    @Qt.pyqtSignature("setShowText(bool)")
-    def setShowText(self, showText):
-        self.ui.TaurusGroupBox.setShowText(showText)
-
-    @Qt.pyqtSignature("resetShowText()")
-    def resetShowText(self):
-        self.ui.TaurusGroupBox.resetShowText()
-
-    model = Qt.pyqtProperty("QString", getModel,setModel,resetModel)
-    showText = Qt.pyqtProperty("bool", getShowText,setShowText,resetShowText)
-
-   
-
-class TaurusMotorH2(Qt.QWidget, TaurusBaseWidget):
-    
-    __pyqtSignals__ = ("modelChanged(const QString &)",)
-
-    def __init__(self, parent = None, designMode = False):
-        self.call__init__wo_kw(Qt.QWidget, parent)
-        self.call__init__(TaurusBaseWidget, str(self.objectName()), designMode=designMode)
-        self.ui = Ui_TaurusMotorH2()
-        self.ui.setupUi(self)
-        Qt.QObject.connect(self.ui.config, Qt.SIGNAL("clicked()"), self.configureMotor)
-
-    def sizeHint(self):
-        return Qt.QSize(215,85)
-
-    def configureMotor(self):
-        showDialogConfigureMotor(self.ui.TaurusGroupBox)
-
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        return None
-#        ret = TaurusBaseWidget.getQtDesignerPluginInfo()
-#        ret['module'] = 'taurus.qt.qtgui.extra_pool'
-#        ret['group'] = 'Taurus Sardana'
-#        ret['icon'] = ':/designer/extra_pool.png'
-#        return ret
-        
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # QT properties 
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    @Qt.pyqtSignature("getModel()")
-    def getModel(self):
-        return self.ui.TaurusGroupBox.getModel()
-
-    @Qt.pyqtSignature("setModel(QString)")
-    def setModel(self, model):
-        self.ui.TaurusGroupBox.setModel(model)
-
-    @Qt.pyqtSignature("resetModel()")
-    def resetModel(self):
-        self.ui.TaurusGroupBox.resetModel()
-
-
-    @Qt.pyqtSignature("getShowText()")
-    def getShowText(self):
-        return self.ui.TaurusGroupBox.getShowText()
-
-    @Qt.pyqtSignature("setShowText(bool)")
-    def setShowText(self, showText):
-        self.ui.TaurusGroupBox.setShowText(showText)
-
-    @Qt.pyqtSignature("resetShowText()")
-    def resetShowText(self):
-        self.ui.TaurusGroupBox.resetShowText()
-
-
-    model = Qt.pyqtProperty("QString", getModel,setModel,resetModel)
-    showText = Qt.pyqtProperty("bool", getShowText,setShowText,resetShowText)
-
-
-class TaurusMotorV(Qt.QWidget, TaurusBaseWidget):
-    
-    __pyqtSignals__ = ("modelChanged(const QString &)",)
-
-    def __init__(self, parent = None, designMode = False):
-        self.call__init__wo_kw(Qt.QWidget, parent)
-        self.call__init__(TaurusBaseWidget, str(self.objectName()), designMode=designMode)
-        self.ui = Ui_TaurusMotorV()
-        self.ui.setupUi(self)
-        Qt.QObject.connect(self.ui.config, Qt.SIGNAL("clicked()"), self.configureMotor)
-
-    def sizeHint(self):
-        return Qt.QSize(120,145)
-
-    def configureMotor(self):
-        showDialogConfigureMotor(self.ui.TaurusGroupBox)
-
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        return None
-#        ret = TaurusBaseWidget.getQtDesignerPluginInfo()
-#        ret['module'] = 'taurus.qt.qtgui.extra_pool'
-#        ret['group'] = 'Taurus Sardana'
-#        ret['icon'] = ':/designer/extra_pool.png'
-#        return ret
-        
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # QT properties 
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    @Qt.pyqtSignature("getModel()")
-    def getModel(self):
-        return self.ui.TaurusGroupBox.getModel()
-
-    @Qt.pyqtSignature("setModel(QString)")
-    def setModel(self, model):
-        self.ui.TaurusGroupBox.setModel(model)
-
-    @Qt.pyqtSignature("resetModel()")
-    def resetModel(self):
-        self.ui.TaurusGroupBox.resetModel()
-
-
-    @Qt.pyqtSignature("getShowText()")
-    def getShowText(self):
-        return self.ui.TaurusGroupBox.getShowText()
-
-    @Qt.pyqtSignature("setShowText(bool)")
-    def setShowText(self, showText):
-        self.ui.TaurusGroupBox.setShowText(showText)
-
-    @Qt.pyqtSignature("resetShowText()")
-    def resetShowText(self):
-        self.ui.TaurusGroupBox.resetShowText()
-
-
-    model = Qt.pyqtProperty("QString", getModel,setModel,resetModel)
-    showText = Qt.pyqtProperty("bool", getShowText,setShowText,resetShowText)
-
-
-class TaurusMotorV2(Qt.QWidget, TaurusBaseWidget):
-    
-    __pyqtSignals__ = ("modelChanged(const QString &)",)
-
-    def __init__(self, parent = None, designMode = False):
-        self.call__init__wo_kw(Qt.QWidget, parent)
-        self.call__init__(TaurusBaseWidget, str(self.objectName()), designMode=designMode)
-        self.ui = Ui_TaurusMotorV2()
-        self.ui.setupUi(self)
-
-    def sizeHint(self):
-        return Qt.QSize(300,275)
-
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        return None
-#        ret = TaurusBaseWidget.getQtDesignerPluginInfo()
-#        ret['module'] = 'taurus.qt.qtgui.extra_pool'
-#        ret['group'] = 'Taurus Sardana'
-#        ret['icon'] = ':/designer/extra_pool.png'
-#        return ret
-        
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # QT properties 
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    @Qt.pyqtSignature("getModel()")
-    def getModel(self):
-        return self.ui.TaurusGroupBox.getModel()
-
-    @Qt.pyqtSignature("setModel(QString)")
-    def setModel(self, model):
-        self.ui.TaurusGroupBox.setModel(model)
-
-    @Qt.pyqtSignature("resetModel()")
-    def resetModel(self):
-        self.ui.TaurusGroupBox.resetModel()
-
-
-    @Qt.pyqtSignature("getShowText()")
-    def getShowText(self):
-        return self.ui.TaurusGroupBox.getShowText()
-
-    @Qt.pyqtSignature("setShowText(bool)")
-    def setShowText(self, showText):
-        self.ui.TaurusGroupBox.setShowText(showText)
-
-    @Qt.pyqtSignature("resetShowText()")
-    def resetShowText(self):
-        self.ui.TaurusGroupBox.resetShowText()
-
-
-    model = Qt.pyqtProperty("QString", getModel,setModel,resetModel)
-    showText = Qt.pyqtProperty("bool", getShowText,setShowText,resetShowText)
-   
-
-###class TaurusMotorH2(Qt.QGroupBox, TaurusBaseWidget):
-###    
-###    def __init__(self, parent = None, designMode = False):
-###        name = "TaurusMotorH2"
-###        self._prefix = ''
-###        self._suffix = ''
-###        
-###        self.call__init__wo_kw(Qt.QGroupBox, parent)
-###        self.call__init__(TaurusBaseWidget, name, designMode = designMode)
-###        
-###        self.setObjectName(name)
-###        self.defineStyle()
-###        
-###
-###        ## I CAN NOT INHERIT FROM TAUGROUPBOX !
-###        ## SO ALL THE STUFFABOVE IS NECESSARY
-###        ##
-###        ## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-###        ##############################################################################
-###        ##
-###        #class TaurusMotorH2(TaurusGroupBox):
-###        #def __init__(self, parent = None):
-###        #self.call__init__wo_kw(TaurusGroupBox,parent)
-###        #self.call__init__(TaurusGroupBox,str(self.objectName()))
-###        self.setupUi()
-###        self.retranslateUi()
-###        self.connect(self.config,Qt.SIGNAL('clicked()'),self.configureMotor)
-###
-###
-###    def configureMotor(self):
-###        Dialog = Qt.QDialog(self)
-###        Dialog.resize((Qt.QSize(Qt.QRect(0,0,310,309).size()).expandedTo(Dialog.minimumSizeHint())))
-###        motorV2 = TaurusMotorV2(Dialog)
-###        motorV2.setModel(self.model)
-###        motorV2.setGeometry(Qt.QRect(10,10,291,291))
-###        Dialog.show()
-###
-###
-###
-###    def minimumSizeHint(self):
-###        return Qt.QSize(211,80)
-###    
-###    def sizeHint(self):
-###        return Qt.QSize(211,80)
-###    
-###
-###    def setupUi(self):
-###
-###        self.gridlayout = Qt.QGridLayout(self)
-###        self.gridlayout.setObjectName("gridlayout")
-###
-###        self.vboxlayout = Qt.QVBoxLayout()
-###        self.vboxlayout.setObjectName("vboxlayout")
-###
-###        self.hboxlayout = Qt.QHBoxLayout()
-###        self.hboxlayout.setObjectName("hboxlayout")
-###
-###        self.taurusValueLabel_2 = TaurusValueLabel(self)
-###        self.taurusValueLabel_2.setFrameShape(Qt.QFrame.NoFrame)
-###        self.taurusValueLabel_2.setFrameShadow(Qt.QFrame.Plain)
-###        self.taurusValueLabel_2.setShowQuality(False)
-###        self.taurusValueLabel_2.setUseParentModel(True)
-###        self.taurusValueLabel_2.setObjectName("taurusValueLabel_2")
-###        self.hboxlayout.addWidget(self.taurusValueLabel_2)
-###
-###        self.TaurusStateLed_17 = TaurusStateLed(self)
-###        self.TaurusStateLed_17.setUseParentModel(True)
-###        self.TaurusStateLed_17.setObjectName("TaurusStateLed_17")
-###        self.hboxlayout.addWidget(self.TaurusStateLed_17)
-###
-###        spacerItem = Qt.QSpacerItem(40,20,Qt.QSizePolicy.Expanding,Qt.QSizePolicy.Minimum)
-###        self.hboxlayout.addItem(spacerItem)
-###
-###        self.TaurusLimitSwitch = TaurusLimitSwitch(self)
-###        self.TaurusLimitSwitch.setUseParentModel(True)
-###        self.TaurusLimitSwitch.setBoolIndex(2)
-###        self.TaurusLimitSwitch.setObjectName("TaurusLimitSwitch")
-###        self.hboxlayout.addWidget(self.TaurusLimitSwitch)
-###
-###        self.label_3 = Qt.QLabel(self)
-###        self.label_3.setAlignment(Qt.Qt.AlignCenter)
-###        self.label_3.setObjectName("label_3")
-###        self.hboxlayout.addWidget(self.label_3)
-###
-###        self.TaurusLimitSwitch_2 = TaurusLimitSwitch(self)
-###        self.TaurusLimitSwitch_2.setUseParentModel(True)
-###        self.TaurusLimitSwitch_2.setBoolIndex(1)
-###        self.TaurusLimitSwitch_2.setObjectName("TaurusLimitSwitch_2")
-###        self.hboxlayout.addWidget(self.TaurusLimitSwitch_2)
-###        self.vboxlayout.addLayout(self.hboxlayout)
-###
-###        self.hboxlayout1 = Qt.QHBoxLayout()
-###        self.hboxlayout1.setObjectName("hboxlayout1")
-###
-###        self.TaurusValueLineEdit_21 = TaurusValueLineEdit(self)
-###        self.TaurusValueLineEdit_21.setUseParentModel(True)
-###        self.TaurusValueLineEdit_21.setObjectName("TaurusValueLineEdit_21")
-###        self.hboxlayout1.addWidget(self.TaurusValueLineEdit_21)
-###
-###        self.taurusValueLabel_21 = TaurusValueLabel(self)
-###
-###        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Expanding,Qt.QSizePolicy.Preferred)
-###        sizePolicy.setHorizontalStretch(0)
-###        sizePolicy.setVerticalStretch(0)
-###        sizePolicy.setHeightForWidth(self.taurusValueLabel_21.sizePolicy().hasHeightForWidth())
-###        self.taurusValueLabel_21.setSizePolicy(sizePolicy)
-###        self.taurusValueLabel_21.setUseParentModel(True)
-###        self.taurusValueLabel_21.setObjectName("taurusValueLabel_21")
-###        self.hboxlayout1.addWidget(self.taurusValueLabel_21)
-###
-###        self.taurusConfigLabel_18 = TaurusConfigLabel(self)
-###        self.taurusConfigLabel_18.setMaximumSize(Qt.QSize(27,22))
-###        self.taurusConfigLabel_18.setUseParentModel(True)
-###        self.taurusConfigLabel_18.setObjectName("taurusConfigLabel_18")
-###        self.hboxlayout1.addWidget(self.taurusConfigLabel_18)
-###
-###        self.config = Qt.QToolButton(self)
-###        self.config.setObjectName("config")
-###        self.hboxlayout1.addWidget(self.config)
-###        self.vboxlayout.addLayout(self.hboxlayout1)
-###        self.gridlayout.addLayout(self.vboxlayout,0,0,1,1)
-###
-###
-###    def retranslateUi(self):
-###        self.taurusValueLabel_2.setModel(Qt.QApplication.translate("Form", "/State", None, Qt.QApplication.UnicodeUTF8))
-###        self.TaurusStateLed_17.setModel(Qt.QApplication.translate("Form", "/State", None, Qt.QApplication.UnicodeUTF8))
-###        self.TaurusLimitSwitch.setModel(Qt.QApplication.translate("Form", "/Limit_switches", None, Qt.QApplication.UnicodeUTF8))
-###        self.label_3.setText(Qt.QApplication.translate("Form", "- lim +", None, Qt.QApplication.UnicodeUTF8))
-###        self.TaurusLimitSwitch_2.setModel(Qt.QApplication.translate("Form", "/Limit_switches", None, Qt.QApplication.UnicodeUTF8))
-###        self.TaurusValueLineEdit_21.setModel(Qt.QApplication.translate("Form", "/Position", None, Qt.QApplication.UnicodeUTF8))
-###        self.taurusValueLabel_21.setModel(Qt.QApplication.translate("Form", "/Position", None, Qt.QApplication.UnicodeUTF8))
-###        self.taurusConfigLabel_18.setModel(Qt.QApplication.translate("Form", "/Position?configuration=unit", None, Qt.QApplication.UnicodeUTF8))
-###        self.config.setText(Qt.QApplication.translate("Form", "cfg", None, Qt.QApplication.UnicodeUTF8))
-###
-###
-###    ##############################################################################
-###    ## VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
-###    ##
-###    ## I CAN NOT INHERIT FROM TAUGROUPBOX !
-###    ## SO ALL THE STUFF BELOW IS NECESSARY
-###
-###
-###        
-###    def defineStyle(self):
-###        palette = Qt.QPalette()
-###        self.setPalette(palette)
-###        self.updateStyle()
-###        
-###    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-###    # TaurusBaseWidget over writing
-###    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-###                    
-###    def getDisplayValue(self):
-###        return (self._prefix or '') + TaurusBaseWidget.getDisplayValue(self) + (self._suffix or '')
-###    
-###    def isReadOnly(self):
-###        return True
-###    
-###    def updateStyle(self):
-###        if self.getShowQuality():
-###            self.setAutoFillBackground(True)
-###            #TODO: get quality/state from model and update accordingly
-###        else:
-###            self.setAutoFillBackground(False)
-###            #TODO: restore colors
-###        self.update()
-###        
-###    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-###    # QT properties 
-###    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-###   
-###    def getPrefixText(self):
-###        return self._prefix
-###    
-###    @Qt.pyqtSignature("setPrefixText(QString)")
-###    def setPrefixText(self,prefix):
-###        self._prefix = prefix
-###        self.fireValueChanged()
-###
-###    def getSuffixText(self):
-###        return self._suffix
-###    
-###    @Qt.pyqtSignature("setSuffixText(QString)")
-###    def setSuffixText(self,suffix):
-###        self._suffix = suffix
-###        self.fireValueChanged()
-###
-###    model = Qt.pyqtProperty("QString", TaurusBaseWidget.getModel, 
-###                                TaurusBaseWidget.setModel, TaurusBaseWidget.resetModel)
-###    useParentModel = Qt.pyqtProperty("bool", TaurusBaseWidget.getUseParentModel, 
-###                                         TaurusBaseWidget.setUseParentModel, 
-###                                         TaurusBaseWidget.resetUseParentModel)
-###    showQuality = Qt.pyqtProperty("bool", TaurusBaseWidget.getShowQuality, 
-###                                      TaurusBaseWidget.setShowQuality, 
-###                                      TaurusBaseWidget.resetShowQuality)
-###    showText = Qt.pyqtProperty("bool", TaurusBaseWidget.getShowText, 
-###                                   TaurusBaseWidget.setShowText, 
-###                                   TaurusBaseWidget.resetShowText)
-###    prefixText = Qt.pyqtProperty("QString", getPrefixText, setPrefixText, 
-###                                     doc="prefix text (optional)")
-###    suffixText = Qt.pyqtProperty("QString", getSuffixText, setSuffixText, 
-###                                    doc="suffix text (optional)")
-###
-###        
-###
-###
-###class TaurusMotorV(Qt.QGroupBox, TaurusBaseWidget):
-###    
-###    def __init__(self, parent = None):
-###        name = "TaurusMotorV"
-###        self._prefix = ''
-###        self._suffix = ''
-###        
-###        self.call__init__wo_kw(Qt.QGroupBox, parent)
-###        self.call__init__(TaurusBaseWidget, name)
-###        
-###        self.setObjectName(name)
-###        self.defineStyle()
-###        
-###
-###        ## I CAN NOT INHERIT FROM TAUGROUPBOX !
-###        ## SO ALL THE STUFFABOVE IS NECESSARY
-###        ##
-###        ## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-###        ##############################################################################
-###        ##
-###        #class TaurusMotorV(TaurusGroupBox):
-###        #def __init__(self, parent = None):
-###        #self.call__init__wo_kw(TaurusGroupBox,parent)
-###        #self.call__init__(TaurusGroupBox,str(self.objectName()))
-###        self.setupUi()
-###        self.retranslateUi()
-###        self.connect(self.config,Qt.SIGNAL('clicked()'),self.configureMotor)
-###
-###
-###    def configureMotor(self):
-###        Dialog = Qt.QDialog(self)
-###        Dialog.resize((Qt.QSize(Qt.QRect(0,0,310,309).size()).expandedTo(Dialog.minimumSizeHint())))
-###        motorV2 = TaurusMotorV2(Dialog)
-###        motorV2.setModel(self.model)
-###        motorV2.setGeometry(Qt.QRect(10,10,291,291))
-###        Dialog.show()
-###
-###
-###
-###
-###    def minimumSizeHint(self):
-###        return Qt.QSize(150,128)
-###    
-###    def sizeHint(self):
-###        return Qt.QSize(150,128)
-###    
-###    def setupUi(self):
-###
-###        self.gridlayout = Qt.QGridLayout(self)
-###        self.gridlayout.setObjectName("gridlayout")
-###
-###        self.vboxlayout = Qt.QVBoxLayout()
-###        self.vboxlayout.setObjectName("vboxlayout")
-###
-###        self.hboxlayout = Qt.QHBoxLayout()
-###        self.hboxlayout.setObjectName("hboxlayout")
-###
-###        self.taurusValueLabel_2 = TaurusValueLabel(self)
-###        self.taurusValueLabel_2.setFrameShape(Qt.QFrame.NoFrame)
-###        self.taurusValueLabel_2.setFrameShadow(Qt.QFrame.Plain)
-###        self.taurusValueLabel_2.setShowQuality(False)
-###        self.taurusValueLabel_2.setUseParentModel(True)
-###        self.taurusValueLabel_2.setObjectName("taurusValueLabel_2")
-###        self.hboxlayout.addWidget(self.taurusValueLabel_2)
-###
-###        self.TaurusStateLed_17 = TaurusStateLed(self)
-###        self.TaurusStateLed_17.setUseParentModel(True)
-###        self.TaurusStateLed_17.setObjectName("TaurusStateLed_17")
-###        self.hboxlayout.addWidget(self.TaurusStateLed_17)
-###        self.vboxlayout.addLayout(self.hboxlayout)
-###
-###        self.hboxlayout1 = Qt.QHBoxLayout()
-###        self.hboxlayout1.setObjectName("hboxlayout1")
-###
-###        self.TaurusValueLineEdit_21 = TaurusValueLineEdit(self)
-###        self.TaurusValueLineEdit_21.setUseParentModel(True)
-###        self.TaurusValueLineEdit_21.setObjectName("TaurusValueLineEdit_21")
-###        self.hboxlayout1.addWidget(self.TaurusValueLineEdit_21)
-###
-###        self.config = Qt.QToolButton(self)
-###        self.config.setObjectName("config")
-###        self.hboxlayout1.addWidget(self.config)
-###        self.vboxlayout.addLayout(self.hboxlayout1)
-###
-###        self.hboxlayout2 = Qt.QHBoxLayout()
-###        self.hboxlayout2.setObjectName("hboxlayout2")
-###
-###        self.taurusValueLabel_21 = TaurusValueLabel(self)
-###        self.taurusValueLabel_21.setUseParentModel(True)
-###        self.taurusValueLabel_21.setObjectName("taurusValueLabel_21")
-###        self.hboxlayout2.addWidget(self.taurusValueLabel_21)
-###
-###        self.taurusConfigLabel_18 = TaurusConfigLabel(self)
-###        self.taurusConfigLabel_18.setMaximumSize(Qt.QSize(27,22))
-###        self.taurusConfigLabel_18.setUseParentModel(True)
-###        self.taurusConfigLabel_18.setObjectName("taurusConfigLabel_18")
-###        self.hboxlayout2.addWidget(self.taurusConfigLabel_18)
-###        self.vboxlayout.addLayout(self.hboxlayout2)
-###
-###        self.hboxlayout3 = Qt.QHBoxLayout()
-###        self.hboxlayout3.setObjectName("hboxlayout3")
-###
-###        self.TaurusLimitSwitch = TaurusLimitSwitch(self)
-###        self.TaurusLimitSwitch.setUseParentModel(True)
-###        self.TaurusLimitSwitch.setBoolIndex(2)
-###        self.TaurusLimitSwitch.setObjectName("TaurusLimitSwitch")
-###        self.hboxlayout3.addWidget(self.TaurusLimitSwitch)
-###
-###        self.label_3 = Qt.QLabel(self)
-###        self.label_3.setAlignment(Qt.Qt.AlignCenter)
-###        self.label_3.setObjectName("label_3")
-###        self.hboxlayout3.addWidget(self.label_3)
-###
-###        self.TaurusLimitSwitch_2 = TaurusLimitSwitch(self)
-###        self.TaurusLimitSwitch_2.setUseParentModel(True)
-###        self.TaurusLimitSwitch_2.setBoolIndex(1)
-###        self.TaurusLimitSwitch_2.setObjectName("TaurusLimitSwitch_2")
-###        self.hboxlayout3.addWidget(self.TaurusLimitSwitch_2)
-###        self.vboxlayout.addLayout(self.hboxlayout3)
-###        self.gridlayout.addLayout(self.vboxlayout,0,0,1,1)
-###
-###
-###    def retranslateUi(self):
-###        self.taurusValueLabel_2.setModel(Qt.QApplication.translate("Form", "/State", None, Qt.QApplication.UnicodeUTF8))
-###        self.TaurusStateLed_17.setModel(Qt.QApplication.translate("Form", "/State", None, Qt.QApplication.UnicodeUTF8))
-###        self.TaurusValueLineEdit_21.setModel(Qt.QApplication.translate("Form", "/Position", None, Qt.QApplication.UnicodeUTF8))
-###        self.config.setText(Qt.QApplication.translate("Form", "cfg", None, Qt.QApplication.UnicodeUTF8))
-###        self.taurusValueLabel_21.setModel(Qt.QApplication.translate("Form", "/Position", None, Qt.QApplication.UnicodeUTF8))
-###        self.taurusConfigLabel_18.setModel(Qt.QApplication.translate("Form", "/Position?configuration=unit", None, Qt.QApplication.UnicodeUTF8))
-###        self.TaurusLimitSwitch.setModel(Qt.QApplication.translate("Form", "/Limit_switches", None, Qt.QApplication.UnicodeUTF8))
-###        self.label_3.setText(Qt.QApplication.translate("Form", "- lim +", None, Qt.QApplication.UnicodeUTF8))
-###        self.TaurusLimitSwitch_2.setModel(Qt.QApplication.translate("Form", "/Limit_switches", None, Qt.QApplication.UnicodeUTF8))
-###
-###    ##############################################################################
-###    ## VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
-###    ##
-###    ## I CAN NOT INHERIT FROM TAUGROUPBOX !
-###    ## SO ALL THE STUFF BELOW IS NECESSARY
-###
-###
-###        
-###    def defineStyle(self):
-###        palette = Qt.QPalette()
-###        self.setPalette(palette)
-###        self.updateStyle()
-###        
-###    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-###    # TaurusBaseWidget over writing
-###    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-###                    
-###    def getDisplayValue(self):
-###        return (self._prefix or '') + TaurusBaseWidget.getDisplayValue(self) + (self._suffix or '')
-###    
-###    def isReadOnly(self):
-###        return True
-###    
-###    def updateStyle(self):
-###        if self.getShowQuality():
-###            self.setAutoFillBackground(True)
-###            #TODO: get quality/state from model and update accordingly
-###        else:
-###            self.setAutoFillBackground(False)
-###            #TODO: restore colors
-###        self.update()
-###        
-###    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-###    # QT properties 
-###    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-###   
-###    def getPrefixText(self):
-###        return self._prefix
-###    
-###    @Qt.pyqtSignature("setPrefixText(QString)")
-###    def setPrefixText(self,prefix):
-###        self._prefix = prefix
-###        self.fireValueChanged()
-###
-###    def getSuffixText(self):
-###        return self._suffix
-###    
-###    @Qt.pyqtSignature("setSuffixText(QString)")
-###    def setSuffixText(self,suffix):
-###        self._suffix = suffix
-###        self.fireValueChanged()
-###
-###    model = Qt.pyqtProperty("QString", TaurusBaseWidget.getModel, 
-###                                TaurusBaseWidget.setModel, TaurusBaseWidget.resetModel)
-###    useParentModel = Qt.pyqtProperty("bool", TaurusBaseWidget.getUseParentModel, 
-###                                         TaurusBaseWidget.setUseParentModel, 
-###                                         TaurusBaseWidget.resetUseParentModel)
-###    showQuality = Qt.pyqtProperty("bool", TaurusBaseWidget.getShowQuality, 
-###                                      TaurusBaseWidget.setShowQuality, 
-###                                      TaurusBaseWidget.resetShowQuality)
-###    showText = Qt.pyqtProperty("bool", TaurusBaseWidget.getShowText, 
-###                                   TaurusBaseWidget.setShowText, 
-###                                   TaurusBaseWidget.resetShowText)
-###    prefixText = Qt.pyqtProperty("QString", getPrefixText, setPrefixText, 
-###                                     doc="prefix text (optional)")
-###    suffixText = Qt.pyqtProperty("QString", getSuffixText, setSuffixText, 
-###                                    doc="suffix text (optional)")
-###
-###        
-###
-###class TaurusMotorV2(Qt.QGroupBox, TaurusBaseWidget):
-###    
-###    def __init__(self, parent = None):
-###        name = "TaurusMotorV2"
-###        self._prefix = ''
-###        self._suffix = ''
-###        
-###        self.call__init__wo_kw(Qt.QGroupBox, parent)
-###        self.call__init__(TaurusBaseWidget, name)
-###        
-###        self.setObjectName(name)
-###        self.defineStyle()
-###        
-###
-###        ## I CAN NOT INHERIT FROM TAUGROUPBOX !
-###        ## SO ALL THE STUFFABOVE IS NECESSARY
-###        ##
-###        ## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-###        ##############################################################################
-###        ##
-###        #class TaurusMotorV2(TaurusGroupBox):
-###        #def __init__(self, parent = None):
-###        #self.call__init__wo_kw(TaurusGroupBox,parent)
-###        #self.call__init__(TaurusGroupBox,str(self.objectName()))
-###        self.setupUi()
-###        self.retranslateUi()
-###
-###
-###    def minimumSizeHint(self):
-###        return Qt.QSize(260,270)
-###    
-###    def sizeHint(self):
-###        return Qt.QSize(260,270)
-###    
-###
-###    def setupUi(self):
-###
-###        self.gridlayout = Qt.QGridLayout(self)
-###        self.gridlayout.setObjectName("gridlayout")
-###
-###        self.m1StateLed_2 = TaurusStateLed(self)
-###        self.m1StateLed_2.setLedSize(24)
-###        self.m1StateLed_2.setUseParentModel(True)
-###        self.m1StateLed_2.setObjectName("m1StateLed_2")
-###        self.gridlayout.addWidget(self.m1StateLed_2,0,0,1,1)
-###
-###        self.taurusValueLabel = TaurusValueLabel(self)
-###        self.taurusValueLabel.setFrameShape(Qt.QFrame.NoFrame)
-###        self.taurusValueLabel.setFrameShadow(Qt.QFrame.Plain)
-###        self.taurusValueLabel.setShowQuality(False)
-###        self.taurusValueLabel.setUseParentModel(True)
-###        self.taurusValueLabel.setObjectName("taurusValueLabel")
-###        self.gridlayout.addWidget(self.taurusValueLabel,0,1,1,1)
-###
-###        self.TaurusLimitSwitch = TaurusLimitSwitch(self)
-###        self.TaurusLimitSwitch.setUseParentModel(True)
-###        self.TaurusLimitSwitch.setBoolIndex(2)
-###        self.TaurusLimitSwitch.setObjectName("TaurusLimitSwitch")
-###        self.gridlayout.addWidget(self.TaurusLimitSwitch,0,3,1,1)
-###
-###        self.TaurusLimitSwitch_2 = TaurusLimitSwitch(self)
-###        self.TaurusLimitSwitch_2.setUseParentModel(True)
-###        self.TaurusLimitSwitch_2.setBoolIndex(1)
-###        self.TaurusLimitSwitch_2.setObjectName("TaurusLimitSwitch_2")
-###        self.gridlayout.addWidget(self.TaurusLimitSwitch_2,0,4,1,1)
-###
-###        self.m1PositionLabel_2 = TaurusConfigLabel(self)
-###        self.m1PositionLabel_2.setUseParentModel(True)
-###        self.m1PositionLabel_2.setObjectName("m1PositionLabel_2")
-###        self.gridlayout.addWidget(self.m1PositionLabel_2,1,0,1,2)
-###
-###        self.m1PositionEdit_2 = TaurusValueLineEdit(self)
-###
-###        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Fixed,Qt.QSizePolicy.Fixed)
-###        sizePolicy.setHorizontalStretch(0)
-###        sizePolicy.setVerticalStretch(0)
-###        sizePolicy.setHeightForWidth(self.m1PositionEdit_2.sizePolicy().hasHeightForWidth())
-###        self.m1PositionEdit_2.setSizePolicy(sizePolicy)
-###        self.m1PositionEdit_2.setUseParentModel(True)
-###        self.m1PositionEdit_2.setObjectName("m1PositionEdit_2")
-###        self.gridlayout.addWidget(self.m1PositionEdit_2,1,2,1,1)
-###
-###        self.m1Position_2 = TaurusValueLabel(self)
-###        self.m1Position_2.setUseParentModel(True)
-###        self.m1Position_2.setObjectName("m1Position_2")
-###        self.gridlayout.addWidget(self.m1Position_2,1,3,1,2)
-###
-###        self.m1PositionUnitLabel_2 = TaurusConfigLabel(self)
-###
-###        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Expanding,Qt.QSizePolicy.Preferred)
-###        sizePolicy.setHorizontalStretch(0)
-###        sizePolicy.setVerticalStretch(0)
-###        sizePolicy.setHeightForWidth(self.m1PositionUnitLabel_2.sizePolicy().hasHeightForWidth())
-###        self.m1PositionUnitLabel_2.setSizePolicy(sizePolicy)
-###        self.m1PositionUnitLabel_2.setUseParentModel(True)
-###        self.m1PositionUnitLabel_2.setObjectName("m1PositionUnitLabel_2")
-###        self.gridlayout.addWidget(self.m1PositionUnitLabel_2,1,5,1,1)
-###
-###        self.m1VelocityLabel_2 = TaurusConfigLabel(self)
-###        self.m1VelocityLabel_2.setUseParentModel(True)
-###        self.m1VelocityLabel_2.setObjectName("m1VelocityLabel_2")
-###        self.gridlayout.addWidget(self.m1VelocityLabel_2,2,0,1,2)
-###
-###        self.m1VelocityEdit_2 = TaurusValueLineEdit(self)
-###
-###        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Fixed,Qt.QSizePolicy.Fixed)
-###        sizePolicy.setHorizontalStretch(0)
-###        sizePolicy.setVerticalStretch(0)
-###        sizePolicy.setHeightForWidth(self.m1VelocityEdit_2.sizePolicy().hasHeightForWidth())
-###        self.m1VelocityEdit_2.setSizePolicy(sizePolicy)
-###        self.m1VelocityEdit_2.setUseParentModel(True)
-###        self.m1VelocityEdit_2.setObjectName("m1VelocityEdit_2")
-###        self.gridlayout.addWidget(self.m1VelocityEdit_2,2,2,1,1)
-###
-###        self.m1Velocity_2 = TaurusValueLabel(self)
-###        self.m1Velocity_2.setUseParentModel(True)
-###        self.m1Velocity_2.setObjectName("m1Velocity_2")
-###        self.gridlayout.addWidget(self.m1Velocity_2,2,3,1,2)
-###
-###        self.m1VelocityUnitLabel_2 = TaurusConfigLabel(self)
-###
-###        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Expanding,Qt.QSizePolicy.Preferred)
-###        sizePolicy.setHorizontalStretch(0)
-###        sizePolicy.setVerticalStretch(0)
-###        sizePolicy.setHeightForWidth(self.m1VelocityUnitLabel_2.sizePolicy().hasHeightForWidth())
-###        self.m1VelocityUnitLabel_2.setSizePolicy(sizePolicy)
-###        self.m1VelocityUnitLabel_2.setUseParentModel(True)
-###        self.m1VelocityUnitLabel_2.setObjectName("m1VelocityUnitLabel_2")
-###        self.gridlayout.addWidget(self.m1VelocityUnitLabel_2,2,5,1,1)
-###
-###        self.m1PositionLabel_4 = TaurusConfigLabel(self)
-###        self.m1PositionLabel_4.setUseParentModel(True)
-###        self.m1PositionLabel_4.setObjectName("m1PositionLabel_4")
-###        self.gridlayout.addWidget(self.m1PositionLabel_4,3,0,1,2)
-###
-###        self.m1PositionEdit_4 = TaurusValueLineEdit(self)
-###
-###        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Fixed,Qt.QSizePolicy.Fixed)
-###        sizePolicy.setHorizontalStretch(0)
-###        sizePolicy.setVerticalStretch(0)
-###        sizePolicy.setHeightForWidth(self.m1PositionEdit_4.sizePolicy().hasHeightForWidth())
-###        self.m1PositionEdit_4.setSizePolicy(sizePolicy)
-###        self.m1PositionEdit_4.setUseParentModel(True)
-###        self.m1PositionEdit_4.setObjectName("m1PositionEdit_4")
-###        self.gridlayout.addWidget(self.m1PositionEdit_4,3,2,1,1)
-###
-###        self.m1Position_4 = TaurusValueLabel(self)
-###        self.m1Position_4.setUseParentModel(True)
-###        self.m1Position_4.setObjectName("m1Position_4")
-###        self.gridlayout.addWidget(self.m1Position_4,3,3,1,2)
-###
-###        self.m1PositionUnitLabel_4 = TaurusConfigLabel(self)
-###
-###        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Expanding,Qt.QSizePolicy.Preferred)
-###        sizePolicy.setHorizontalStretch(0)
-###        sizePolicy.setVerticalStretch(0)
-###        sizePolicy.setHeightForWidth(self.m1PositionUnitLabel_4.sizePolicy().hasHeightForWidth())
-###        self.m1PositionUnitLabel_4.setSizePolicy(sizePolicy)
-###        self.m1PositionUnitLabel_4.setUseParentModel(True)
-###        self.m1PositionUnitLabel_4.setObjectName("m1PositionUnitLabel_4")
-###        self.gridlayout.addWidget(self.m1PositionUnitLabel_4,3,5,1,1)
-###
-###        self.m1AccelerationLabel_2 = TaurusConfigLabel(self)
-###        self.m1AccelerationLabel_2.setUseParentModel(True)
-###        self.m1AccelerationLabel_2.setObjectName("m1AccelerationLabel_2")
-###        self.gridlayout.addWidget(self.m1AccelerationLabel_2,4,0,1,2)
-###
-###        self.m1AccelerationEdit_2 = TaurusValueLineEdit(self)
-###
-###        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Fixed,Qt.QSizePolicy.Fixed)
-###        sizePolicy.setHorizontalStretch(0)
-###        sizePolicy.setVerticalStretch(0)
-###        sizePolicy.setHeightForWidth(self.m1AccelerationEdit_2.sizePolicy().hasHeightForWidth())
-###        self.m1AccelerationEdit_2.setSizePolicy(sizePolicy)
-###        self.m1AccelerationEdit_2.setUseParentModel(True)
-###        self.m1AccelerationEdit_2.setObjectName("m1AccelerationEdit_2")
-###        self.gridlayout.addWidget(self.m1AccelerationEdit_2,4,2,1,1)
-###
-###        self.m1Acceleration_2 = TaurusValueLabel(self)
-###        self.m1Acceleration_2.setUseParentModel(True)
-###        self.m1Acceleration_2.setObjectName("m1Acceleration_2")
-###        self.gridlayout.addWidget(self.m1Acceleration_2,4,3,1,2)
-###
-###        self.m1AccelerationUnitLabel_2 = TaurusConfigLabel(self)
-###
-###        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Expanding,Qt.QSizePolicy.Preferred)
-###        sizePolicy.setHorizontalStretch(0)
-###        sizePolicy.setVerticalStretch(0)
-###        sizePolicy.setHeightForWidth(self.m1AccelerationUnitLabel_2.sizePolicy().hasHeightForWidth())
-###        self.m1AccelerationUnitLabel_2.setSizePolicy(sizePolicy)
-###        self.m1AccelerationUnitLabel_2.setUseParentModel(True)
-###        self.m1AccelerationUnitLabel_2.setObjectName("m1AccelerationUnitLabel_2")
-###        self.gridlayout.addWidget(self.m1AccelerationUnitLabel_2,4,5,1,1)
-###
-###        self.m1PositionLabel_5 = TaurusConfigLabel(self)
-###        self.m1PositionLabel_5.setUseParentModel(True)
-###        self.m1PositionLabel_5.setObjectName("m1PositionLabel_5")
-###        self.gridlayout.addWidget(self.m1PositionLabel_5,5,0,1,2)
-###
-###        self.m1PositionEdit_5 = TaurusValueLineEdit(self)
-###
-###        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Fixed,Qt.QSizePolicy.Fixed)
-###        sizePolicy.setHorizontalStretch(0)
-###        sizePolicy.setVerticalStretch(0)
-###        sizePolicy.setHeightForWidth(self.m1PositionEdit_5.sizePolicy().hasHeightForWidth())
-###        self.m1PositionEdit_5.setSizePolicy(sizePolicy)
-###        self.m1PositionEdit_5.setUseParentModel(True)
-###        self.m1PositionEdit_5.setObjectName("m1PositionEdit_5")
-###        self.gridlayout.addWidget(self.m1PositionEdit_5,5,2,1,1)
-###
-###        self.m1Position_5 = TaurusValueLabel(self)
-###        self.m1Position_5.setUseParentModel(True)
-###        self.m1Position_5.setObjectName("m1Position_5")
-###        self.gridlayout.addWidget(self.m1Position_5,5,3,1,2)
-###
-###        self.m1PositionUnitLabel_5 = TaurusConfigLabel(self)
-###
-###        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Expanding,Qt.QSizePolicy.Preferred)
-###        sizePolicy.setHorizontalStretch(0)
-###        sizePolicy.setVerticalStretch(0)
-###        sizePolicy.setHeightForWidth(self.m1PositionUnitLabel_5.sizePolicy().hasHeightForWidth())
-###        self.m1PositionUnitLabel_5.setSizePolicy(sizePolicy)
-###        self.m1PositionUnitLabel_5.setUseParentModel(True)
-###        self.m1PositionUnitLabel_5.setObjectName("m1PositionUnitLabel_5")
-###        self.gridlayout.addWidget(self.m1PositionUnitLabel_5,5,5,1,1)
-###
-###        self.m1DecelerationLabel_2 = TaurusConfigLabel(self)
-###        self.m1DecelerationLabel_2.setUseParentModel(True)
-###        self.m1DecelerationLabel_2.setObjectName("m1DecelerationLabel_2")
-###        self.gridlayout.addWidget(self.m1DecelerationLabel_2,6,0,1,2)
-###
-###        self.m1DecelerationEdit_2 = TaurusValueLineEdit(self)
-###
-###        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Fixed,Qt.QSizePolicy.Fixed)
-###        sizePolicy.setHorizontalStretch(0)
-###        sizePolicy.setVerticalStretch(0)
-###        sizePolicy.setHeightForWidth(self.m1DecelerationEdit_2.sizePolicy().hasHeightForWidth())
-###        self.m1DecelerationEdit_2.setSizePolicy(sizePolicy)
-###        self.m1DecelerationEdit_2.setUseParentModel(True)
-###        self.m1DecelerationEdit_2.setObjectName("m1DecelerationEdit_2")
-###        self.gridlayout.addWidget(self.m1DecelerationEdit_2,6,2,1,1)
-###
-###        self.m1Deceleration_2 = TaurusValueLabel(self)
-###        self.m1Deceleration_2.setUseParentModel(True)
-###        self.m1Deceleration_2.setObjectName("m1Deceleration_2")
-###        self.gridlayout.addWidget(self.m1Deceleration_2,6,3,1,2)
-###
-###        self.m1DecelerationUnitLabel_2 = TaurusConfigLabel(self)
-###
-###        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Expanding,Qt.QSizePolicy.Preferred)
-###        sizePolicy.setHorizontalStretch(0)
-###        sizePolicy.setVerticalStretch(0)
-###        sizePolicy.setHeightForWidth(self.m1DecelerationUnitLabel_2.sizePolicy().hasHeightForWidth())
-###        self.m1DecelerationUnitLabel_2.setSizePolicy(sizePolicy)
-###        self.m1DecelerationUnitLabel_2.setUseParentModel(True)
-###        self.m1DecelerationUnitLabel_2.setObjectName("m1DecelerationUnitLabel_2")
-###        self.gridlayout.addWidget(self.m1DecelerationUnitLabel_2,6,5,1,1)
-###
-###        self.m1PositionLabel_6 = TaurusConfigLabel(self)
-###        self.m1PositionLabel_6.setUseParentModel(True)
-###        self.m1PositionLabel_6.setObjectName("m1PositionLabel_6")
-###        self.gridlayout.addWidget(self.m1PositionLabel_6,7,0,1,2)
-###
-###        self.m1PositionEdit_6 = TaurusValueLineEdit(self)
-###
-###        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Fixed,Qt.QSizePolicy.Fixed)
-###        sizePolicy.setHorizontalStretch(0)
-###        sizePolicy.setVerticalStretch(0)
-###        sizePolicy.setHeightForWidth(self.m1PositionEdit_6.sizePolicy().hasHeightForWidth())
-###        self.m1PositionEdit_6.setSizePolicy(sizePolicy)
-###        self.m1PositionEdit_6.setUseParentModel(True)
-###        self.m1PositionEdit_6.setObjectName("m1PositionEdit_6")
-###        self.gridlayout.addWidget(self.m1PositionEdit_6,7,2,1,1)
-###
-###        self.m1Position_6 = TaurusValueLabel(self)
-###        self.m1Position_6.setUseParentModel(True)
-###        self.m1Position_6.setObjectName("m1Position_6")
-###        self.gridlayout.addWidget(self.m1Position_6,7,3,1,2)
-###
-###        self.m1PositionUnitLabel_6 = TaurusConfigLabel(self)
-###
-###        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Expanding,Qt.QSizePolicy.Preferred)
-###        sizePolicy.setHorizontalStretch(0)
-###        sizePolicy.setVerticalStretch(0)
-###        sizePolicy.setHeightForWidth(self.m1PositionUnitLabel_6.sizePolicy().hasHeightForWidth())
-###        self.m1PositionUnitLabel_6.setSizePolicy(sizePolicy)
-###        self.m1PositionUnitLabel_6.setUseParentModel(True)
-###        self.m1PositionUnitLabel_6.setObjectName("m1PositionUnitLabel_6")
-###        self.gridlayout.addWidget(self.m1PositionUnitLabel_6,7,5,1,1)
-###
-###        self.m1StepPerUnitLabel_2 = TaurusConfigLabel(self)
-###        self.m1StepPerUnitLabel_2.setUseParentModel(True)
-###        self.m1StepPerUnitLabel_2.setObjectName("m1StepPerUnitLabel_2")
-###        self.gridlayout.addWidget(self.m1StepPerUnitLabel_2,8,0,1,2)
-###
-###        self.m1StepPerUnitEdit_2 = TaurusValueLineEdit(self)
-###
-###        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Fixed,Qt.QSizePolicy.Fixed)
-###        sizePolicy.setHorizontalStretch(0)
-###        sizePolicy.setVerticalStretch(0)
-###        sizePolicy.setHeightForWidth(self.m1StepPerUnitEdit_2.sizePolicy().hasHeightForWidth())
-###        self.m1StepPerUnitEdit_2.setSizePolicy(sizePolicy)
-###        self.m1StepPerUnitEdit_2.setUseParentModel(True)
-###        self.m1StepPerUnitEdit_2.setObjectName("m1StepPerUnitEdit_2")
-###        self.gridlayout.addWidget(self.m1StepPerUnitEdit_2,8,2,1,1)
-###
-###        self.m1StepPerUnit_2 = TaurusValueLabel(self)
-###        self.m1StepPerUnit_2.setUseParentModel(True)
-###        self.m1StepPerUnit_2.setObjectName("m1StepPerUnit_2")
-###        self.gridlayout.addWidget(self.m1StepPerUnit_2,8,3,1,2)
-###
-###        self.m1StepPerUnitUnitLabel_2 = TaurusConfigLabel(self)
-###
-###        sizePolicy = Qt.QSizePolicy(Qt.QSizePolicy.Expanding,Qt.QSizePolicy.Preferred)
-###        sizePolicy.setHorizontalStretch(0)
-###        sizePolicy.setVerticalStretch(0)
-###        sizePolicy.setHeightForWidth(self.m1StepPerUnitUnitLabel_2.sizePolicy().hasHeightForWidth())
-###        self.m1StepPerUnitUnitLabel_2.setSizePolicy(sizePolicy)
-###        self.m1StepPerUnitUnitLabel_2.setUseParentModel(True)
-###        self.m1StepPerUnitUnitLabel_2.setObjectName("m1StepPerUnitUnitLabel_2")
-###        self.gridlayout.addWidget(self.m1StepPerUnitUnitLabel_2,8,5,1,1)
-###
-###
-###    def retranslateUi(self):
-###        self.m1StateLed_2.setModel(Qt.QApplication.translate("Dialog", "/State", None, Qt.QApplication.UnicodeUTF8))
-###        self.taurusValueLabel.setModel(Qt.QApplication.translate("Dialog", "/State", None, Qt.QApplication.UnicodeUTF8))
-###        self.TaurusLimitSwitch.setLedColor(Qt.QApplication.translate("Dialog", "ORANGE", None, Qt.QApplication.UnicodeUTF8))
-###        self.TaurusLimitSwitch.setModel(Qt.QApplication.translate("Dialog", "/Limit_switches", None, Qt.QApplication.UnicodeUTF8))
-###        self.TaurusLimitSwitch_2.setLedColor(Qt.QApplication.translate("Dialog", "ORANGE", None, Qt.QApplication.UnicodeUTF8))
-###        self.TaurusLimitSwitch_2.setModel(Qt.QApplication.translate("Dialog", "/Limit_switches", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1PositionLabel_2.setSuffixText(Qt.QApplication.translate("Dialog", ":", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1PositionLabel_2.setModel(Qt.QApplication.translate("Dialog", "/Position?configuration=label", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1PositionEdit_2.setModel(Qt.QApplication.translate("Dialog", "/Position", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1Position_2.setModel(Qt.QApplication.translate("Dialog", "/Position", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1PositionUnitLabel_2.setModel(Qt.QApplication.translate("Dialog", "/Position?configuration=unit", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1VelocityLabel_2.setSuffixText(Qt.QApplication.translate("Dialog", ":", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1VelocityLabel_2.setModel(Qt.QApplication.translate("Dialog", "/Velocity?configuration=label", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1VelocityEdit_2.setModel(Qt.QApplication.translate("Dialog", "/Velocity", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1Velocity_2.setModel(Qt.QApplication.translate("Dialog", "/Velocity", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1VelocityUnitLabel_2.setModel(Qt.QApplication.translate("Dialog", "/Velocity?configuration=unit", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1PositionLabel_4.setSuffixText(Qt.QApplication.translate("Dialog", ":", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1PositionLabel_4.setModel(Qt.QApplication.translate("Dialog", "/Acceleration?configuration=label", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1PositionEdit_4.setModel(Qt.QApplication.translate("Dialog", "/Acceleration", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1Position_4.setModel(Qt.QApplication.translate("Dialog", "/Acceleration", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1PositionUnitLabel_4.setModel(Qt.QApplication.translate("Dialog", "/Acceleration?configuration=unit", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1AccelerationLabel_2.setSuffixText(Qt.QApplication.translate("Dialog", ":", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1AccelerationLabel_2.setModel(Qt.QApplication.translate("Dialog", "/Deceleration?configuration=label", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1AccelerationEdit_2.setModel(Qt.QApplication.translate("Dialog", "/Deceleration", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1Acceleration_2.setModel(Qt.QApplication.translate("Dialog", "/Deceleration", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1AccelerationUnitLabel_2.setModel(Qt.QApplication.translate("Dialog", "/Deceleration?configuration=unit", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1PositionLabel_5.setSuffixText(Qt.QApplication.translate("Dialog", ":", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1PositionLabel_5.setModel(Qt.QApplication.translate("Dialog", "/Offset?configuration=label", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1PositionEdit_5.setModel(Qt.QApplication.translate("Dialog", "/Offset", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1Position_5.setModel(Qt.QApplication.translate("Dialog", "/Offset", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1PositionUnitLabel_5.setModel(Qt.QApplication.translate("Dialog", "/Offset?configuration=unit", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1DecelerationLabel_2.setSuffixText(Qt.QApplication.translate("Dialog", ":", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1DecelerationLabel_2.setModel(Qt.QApplication.translate("Dialog", "/Base_rate?configuration=label", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1DecelerationEdit_2.setModel(Qt.QApplication.translate("Dialog", "/Base_rate", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1Deceleration_2.setModel(Qt.QApplication.translate("Dialog", "/Base_rate", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1DecelerationUnitLabel_2.setModel(Qt.QApplication.translate("Dialog", "/Base_rate?configuration=unit", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1PositionLabel_6.setSuffixText(Qt.QApplication.translate("Dialog", ":", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1PositionLabel_6.setModel(Qt.QApplication.translate("Dialog", "/Step_per_unit?configuration=label", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1PositionEdit_6.setModel(Qt.QApplication.translate("Dialog", "/Step_per_unit", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1Position_6.setModel(Qt.QApplication.translate("Dialog", "/Step_per_unit", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1PositionUnitLabel_6.setModel(Qt.QApplication.translate("Dialog", "/Step_per_unit?configuration=unit", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1StepPerUnitLabel_2.setSuffixText(Qt.QApplication.translate("Dialog", ":", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1StepPerUnitLabel_2.setModel(Qt.QApplication.translate("Dialog", "/Backlash?configuration=label", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1StepPerUnitEdit_2.setModel(Qt.QApplication.translate("Dialog", "/Backlash", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1StepPerUnit_2.setModel(Qt.QApplication.translate("Dialog", "/Backlash", None, Qt.QApplication.UnicodeUTF8))
-###        self.m1StepPerUnitUnitLabel_2.setModel(Qt.QApplication.translate("Dialog", "/Backlash?configuration=unit", None, Qt.QApplication.UnicodeUTF8))
-###
-###    ##############################################################################
-###    ## VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
-###    ##
-###    ## I CAN NOT INHERIT FROM TAUGROUPBOX !
-###    ## SO ALL THE STUFF BELOW IS NECESSARY
-###
-###
-###        
-###    def defineStyle(self):
-###        palette = Qt.QPalette()
-###        self.setPalette(palette)
-###        self.updateStyle()
-###        
-###    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-###    # TaurusBaseWidget over writing
-###    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-###                    
-###    def getDisplayValue(self):
-###        return (self._prefix or '') + TaurusBaseWidget.getDisplayValue(self) + (self._suffix or '')
-###    
-###    def isReadOnly(self):
-###        return True
-###    
-###    def updateStyle(self):
-###        if self.getShowQuality():
-###            self.setAutoFillBackground(True)
-###            #TODO: get quality/state from model and update accordingly
-###        else:
-###            self.setAutoFillBackground(False)
-###            #TODO: restore colors
-###        self.update()
-###        
-###    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-###    # QT properties 
-###    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-###   
-###    def getPrefixText(self):
-###        return self._prefix
-###    
-###    @Qt.pyqtSignature("setPrefixText(QString)")
-###    def setPrefixText(self,prefix):
-###        self._prefix = prefix
-###        self.fireValueChanged()
-###
-###    def getSuffixText(self):
-###        return self._suffix
-###    
-###    @Qt.pyqtSignature("setSuffixText(QString)")
-###    def setSuffixText(self,suffix):
-###        self._suffix = suffix
-###        self.fireValueChanged()
-###
-###    model = Qt.pyqtProperty("QString", TaurusBaseWidget.getModel, 
-###                                TaurusBaseWidget.setModel, TaurusBaseWidget.resetModel)
-###    useParentModel = Qt.pyqtProperty("bool", TaurusBaseWidget.getUseParentModel, 
-###                                         TaurusBaseWidget.setUseParentModel, 
-###                                         TaurusBaseWidget.resetUseParentModel)
-###    showQuality = Qt.pyqtProperty("bool", TaurusBaseWidget.getShowQuality, 
-###                                      TaurusBaseWidget.setShowQuality, 
-###                                      TaurusBaseWidget.resetShowQuality)
-###    showText = Qt.pyqtProperty("bool", TaurusBaseWidget.getShowText, 
-###                                   TaurusBaseWidget.setShowText, 
-###                                   TaurusBaseWidget.resetShowText)
-###    prefixText = Qt.pyqtProperty("QString", getPrefixText, setPrefixText, 
-###                                     doc="prefix text (optional)")
-###    suffixText = Qt.pyqtProperty("QString", getSuffixText, setSuffixText, 
-###                                    doc="suffix text (optional)")
-###
-###        
-###
-
-if __name__ == "__main__":
-    
-    import sys
-    app = Qt.QApplication(sys.argv)
-    
-    form = TaurusMotorH()
-    form.setModel(sys.argv[1])
-        
-    form.show()
-    sys.exit(app.exec_())
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_pool/poolchannel.py b/lib/taurus/qt/qtgui/extra_pool/poolchannel.py
deleted file mode 100644
index b745865..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/poolchannel.py
+++ /dev/null
@@ -1,129 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-channelWidgets.py: 
-"""
-__all__=["PoolChannel","PoolChannelTV"]
-from taurus.qt import Qt
-
-from taurus.qt.qtgui.panel import TaurusValue, TaurusDevButton
-from taurus.qt.qtgui.container import TaurusWidget
-from poolmotor import LabelWidgetDragsDeviceAndAttribute
-import taurus
-
-       
-class _ParentDevButton(TaurusDevButton):
-    '''A TaurusDevButton that receives an attribute name but sets 
-    the corresponding device as model. **For internal use only** '''
-    def __init__(self, **kwargs):
-        TaurusDevButton.__init__(self, **kwargs)
-        self.setText('')
-        self.setSizePolicy(Qt.QSizePolicy.Preferred, Qt.QSizePolicy.Maximum)
-        
-    def setModel(self, model):
-        try: attr = taurus.Attribute(model)
-        except: return
-        dev = attr.getParentObj()
-        devname = dev.getFullName()
-        TaurusDevButton.setModel(self, devname)
-        
-        
-class PoolChannelTV(TaurusValue):
-    ''' A widget that displays and controls a pool channel device.
-    It differs from :class:`PoolChannel` in that it behaves as a TaurusValue 
-    (i.e., it allows its subwidgets to be aligned in columns in a TaurusForm)`
-    '''
-    def __init__(self, parent = None, designMode = False):
-        TaurusValue.__init__(self, parent = parent, designMode = designMode)
-        self.setLabelWidgetClass("LabelWidgetDragsDeviceAndAttribute")
-        self.setLabelConfig('dev_alias')
-    
-    def getDefaultExtraWidgetClass(self):
-        return _ParentDevButton
-        
-    def setModel(self,model):
-        if model is not None:
-            model = "%s/value"%model #@todo: change this (it assumes tango naming!)
-        TaurusValue.setModel(self, model)
-
-    def showEvent(self, event):
-        TaurusValue.showEvent(self, event)
-        try: self.getModelObj().getParentObj().getAttribute('Value').enablePolling(force=True)
-        except: pass
-
-    def hideEvent(self, event):
-        TaurusValue.hideEvent(self, event)
-        try: self.getModelObj().getParentObj().getAttribute('Value').disablePolling()
-        except: pass
-
-
-
-class PoolChannel(TaurusWidget):
-    ''' A widget that displays and controls a pool channel device
-    
-    .. seealso:: :class:`PoolChannelTV`
-    '''
-    def __init__(self, parent = None, designMode = False):
-        TaurusWidget.__init__(self, parent)
-        
-        self.setLayout(Qt.QHBoxLayout())
-        
-        #put a widget with a TaurusValue
-        w = Qt.QWidget()
-        w.setLayout(Qt.QGridLayout())
-        self._TaurusValue = TaurusValue(parent = w, designMode = designMode)
-        self._TaurusValue.setLabelWidgetClass(LabelWidgetDragsDeviceAndAttribute)
-        self._TaurusValue.setLabelConfig('dev_alias')
-        self.layout().addWidget(w)
-        
-        #...and a dev button next to the widget
-        self._devButton = TaurusDevButton(parent = self, designMode = designMode)
-        self._devButton.setText('')
-        self.layout().addWidget(self._devButton)
-        
-        self.connect(self, Qt.SIGNAL('modelChanged(const QString &)'),self._updateTaurusValue )
-        
-    def _updateTaurusValue(self):
-        m=self.getModelName()
-        self._TaurusValue.setModel("%s/value"%m)
-        self._devButton.setModel(m)
-        
-
-#if __name__ == '__main__':
-#    import sys
-#    app = Qt.QApplication(sys.argv)
-#    
-#    form = PoolChannel()
-#
-#    #model = 'tango://controls02:10000/expchan/bl97_simucotictrl_1/1'
-#    model = 'ct_cp1_1'
-#    if len(sys.argv)>1:
-#        model = sys.argv[1]
-#    form.setModel(model)
-#    
-#     
-#    form.show()
-#    sys.exit(app.exec_())
diff --git a/lib/taurus/qt/qtgui/extra_pool/poolioregister.py b/lib/taurus/qt/qtgui/extra_pool/poolioregister.py
deleted file mode 100644
index 13f89a3..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/poolioregister.py
+++ /dev/null
@@ -1,302 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""
-poolioregister.py: 
-"""
-__all__=["PoolIORegisterTV", "PoolIORegister", 'PoolIORegisterButtons']
-from taurus.qt import Qt
-
-from taurus.qt.qtgui.display import TaurusLabel
-from taurus.core.util.eventfilters import EventValueMap
-from taurus.qt.qtgui.input import TaurusValueComboBox
-
-from taurus.qt.qtgui.panel import TaurusValue
-from taurus.qt.qtgui.container import TaurusWidget
-from poolmotor import LabelWidgetDragsDeviceAndAttribute
-
-from ui_poolioregisterbuttons import Ui_PoolIORegisterButtons
-import taurus
-
-class PoolIORegisterReadWidget(TaurusLabel):
-    ''' This class is intended to be used as a read widget of a TaurusValue with IORegister devices.
-    After setting the model, it gets the Labels and creates a filter to show them instead of the values.
-    '''
-    def __init__(self, parent=None, designMode=False):
-        TaurusLabel.__init__(self, parent, designMode)
-
-    def setModel(self, model):
-        TaurusLabel.setModel(self, '%s/value' % model) #@todo: change this (it assumes tango naming!)
-
-        try: ior_dev = taurus.Device(model)
-        except: return
-        labels = ior_dev.getAttribute('Labels').read().value
-        labels_list = labels.split(' ')
-
-        # Update the mapping
-        self.readEventValueMap = EventValueMap()
-        for label_and_value in labels_list:
-            label, value = label_and_value.split(':')
-            self.readEventValueMap[int(value)] = label
-        # @TODO: Some day filters will work again...
-        # until then, it is better to NOT have the filter
-        # so at least we see a value and not '------'
-        #self.setEventFilters([self.readEventValueMap])
-
-    ##########################################################
-    # FILTERS ARE NOT WORKING AS OF SVN:17541
-    # SO I RE-IMPLEMENT getFormatedToolTip for this purpose
-    ##########################################################
-    def getFormatedToolTip(self, cache=True):
-        taurus_label_tooltip = TaurusLabel.getFormatedToolTip(self, cache)
-        try:
-            display_value = int(self.getDisplayValue())
-            extended_tooltip = ''
-            value_keys = self.readEventValueMap.keys()
-            value_keys.sort()
-            for value in value_keys:
-                label = self.readEventValueMap[value]
-                value_label_info = '%d: %s' % (value, label)
-                if value == display_value:
-                    value_label_info = '<B>* '+value_label_info+' *</B>'
-                extended_tooltip += value_label_info+'<BR>'
-            return taurus_label_tooltip + '<HR>' + extended_tooltip
-        except:
-            pass
-        return taurus_label_tooltip
-    ##########################################################
-    
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        return None
-
-class PoolIORegisterWriteWidget(TaurusValueComboBox):
-    ''' This class is intended to be used as a write widget of a TaurusValue with IORegister devices.
-    After setting the model, it gets the Labels and populates the combobox. It has AutoApply set to True.
-    '''
-    def __init__(self, parent=None, designMode=False):
-        TaurusValueComboBox.__init__(self, parent, designMode)
-        TaurusValueComboBox.setForcedApply(self, True)
-
-    def setModel(self, model):
-        TaurusValueComboBox.setModel(self, '%s/value' % model) #@todo: change this (it assumes tango naming!)
-
-        try: ior_dev = taurus.Device(model)
-        except: return
-
-        labels = ior_dev.getAttribute('Labels').read().value
-        labels_list = labels.split(' ')
-            
-        # Update the mapping
-        self.writeValueNames = []
-        for label_and_value in labels_list:
-            label, value = label_and_value.split(':')
-            self.writeValueNames.append((label, value))
-
-        self.setValueNames(self.writeValueNames)
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        return None
-
-class PoolIORegisterTV(TaurusValue):
-    ''' A widget that displays and controls a pool IORegister device.  It
-    behaves as a TaurusValue.
-    '''
-    def __init__(self, parent = None, designMode = False):
-        TaurusValue.__init__(self, parent = parent, designMode = designMode)
-        self.setLabelWidgetClass("LabelWidgetDragsDeviceAndAttribute")
-        self.setLabelConfig('dev_alias')
-        self.setReadWidgetClass('PoolIORegisterReadWidget')
-        self.setWriteWidgetClass('PoolIORegisterWriteWidget')
-        self.ioreg_dev = None
-
-    def setModel(self, model):
-        TaurusValue.setModel(self, model)
-        try: self.ioreg_dev = taurus.Device(model)
-        except: return
-        
-    def showEvent(self, event):
-        TaurusValue.showEvent(self, event)
-        if self.ioreg_dev is not None:
-            self.ioreg_dev.getAttribute('Value').enablePolling(force=True)
-
-    def hideEvent(self, event):
-        TaurusValue.hideEvent(self, event)
-        if self.ioreg_dev is not None:
-            self.ioreg_dev.getAttribute('Value').disablePolling()
-
-
-class PoolIORegister(TaurusWidget):
-    ''' A widget that displays and controls a pool IORegister device.
-    It reads the value and provides a combobox to write it.
-    NOTE: It would be nice to provide 'ABORT' button if the device allows it.
-    NOTE: It would be nice to set icons for each possible value label.
-    '''
-    def __init__(self, parent = None, designMode = False):
-        TaurusWidget.__init__(self, parent, designMode)
-
-        self.ioreg_dev = None
-        
-        self.setLayout(Qt.QHBoxLayout())
-        self.layout().setContentsMargins(0,0,0,0)
-        self.layout().setSpacing(0)
-        
-        self.alias_label = TaurusLabel()
-        self.alias_label.setBgRole('state')
-        self.layout().addWidget(self.alias_label)
-        
-        self.read_widget = PoolIORegisterReadWidget()
-        self.layout().addWidget(self.read_widget)
-        
-        self.write_widget = PoolIORegisterWriteWidget()
-        self.layout().addWidget(self.write_widget)
-
-    def setModel(self, model):
-        try: self.ioreg_dev = taurus.Device(model)
-        except: return
-
-        self.alias_label.setModel('%s/State?configuration=dev_alias' % model)
-        self.read_widget.setModel(model)
-        self.write_widget.setModel(model)
-
-    def showEvent(self, event):
-        TaurusWidget.showEvent(self, event)
-        if self.ioreg_dev is not None:
-            self.ioreg_dev.getAttribute('Value').enablePolling(force=True)
-
-    def hideEvent(self, event):
-        TaurusWidget.hideEvent(self, event)
-        if self.ioreg_dev is not None:
-            self.ioreg_dev.getAttribute('Value').disablePolling()
-
-
-class PoolIORegisterButtons(TaurusWidget):
-    ''' A widget that displays and controls a pool IORegister device.
-    It reads the value and provides buttons to switch between values.
-    NOTE: It would be nice to provide 'ABORT' button if the device allows it.
-    NOTE: It would be nice to set icons for each possible value label.
-    '''
-    def __init__(self, parent = None, designMode = False):
-        TaurusWidget.__init__(self, parent, designMode)
-
-        self.ioreg_dev = None
-
-        self.ui = Ui_PoolIORegisterButtons()
-        self.ui.setupUi(self)
-
-        self.alias_label = TaurusLabel()
-        self.alias_label.setBgRole('state')
-        self.value_label = PoolIORegisterReadWidget()
-        self.button_value_dict = {}
-
-        policy = self.value_label.sizePolicy()
-        policy.setHorizontalPolicy(Qt.QSizePolicy.Expanding)
-        self.value_label.setSizePolicy(policy)
-
-        self.ui.lo_state_read.addWidget(self.alias_label)
-        self.ui.lo_state_read.addWidget(self.value_label)
-
-    def setModel(self, model):
-        try: self.ioreg_dev = taurus.Device(model)
-        except: return
-
-        self.alias_label.setModel('%s/State?configuration=dev_alias' % model)
-        self.value_label.setModel(model)
-
-        # Empty previous buttons
-        #self.ui.lo_buttons_write.
-        for button in self.button_value_dict.keys():
-            self.disconnect(button, Qt.SIGNAL('clicked'), self.writeValue)
-            button.deleteLater()
-        self.button_value_dict = {}
-
-        labels = self.ioreg_dev.getAttribute('Labels').read().value
-        labels_list = labels.split(' ')
-        # Update the mapping
-        for label_and_value in labels_list:
-            label, value = label_and_value.split(':')
-            button = Qt.QPushButton(label)
-            self.button_value_dict[button] = value
-            self.ui.lo_buttons_write.addWidget(button)
-            self.connect(button, Qt.SIGNAL('clicked()'), self.writeValue)
-
-    def writeValue(self):
-        if self.ioreg_dev is None:
-            return
-        button = self.sender()
-        value = self.button_value_dict[button]
-        self.ioreg_dev.getAttribute('Value').write(value)
-
-    def showEvent(self, event):
-        TaurusWidget.showEvent(self, event)
-        if self.ioreg_dev is not None:
-            self.ioreg_dev.getAttribute('Value').enablePolling(force=True)
-
-    def hideEvent(self, event):
-        TaurusWidget.hideEvent(self, event)
-        if self.ioreg_dev is not None:
-            self.ioreg_dev.getAttribute('Value').disablePolling()
-
-
-
-def test_form():
-    from taurus.qt.qtgui.panel import TaurusForm
-    tgclass_map = {'IORegister':PoolIORegisterTV}
-    form = TaurusForm()
-    form.setCustomWidgetMap(tgclass_map)
-    model = 'tango://controls02:10000/ioregister/gc_tgiorctrl/1'
-    if len(sys.argv)>1:
-        model = sys.argv[1]
-
-    form.setModel([model])
-    form.show()
-
-def test_widget():
-    w = PoolIORegister()
-    model = 'tango://controls02:10000/ioregister/gc_tgiorctrl/1'
-    if len(sys.argv)>1:
-        model = sys.argv[1]
-
-    w.setModel(model)
-    w.show()
-    
-def test_buttons():
-    w = PoolIORegisterButtons()
-    model = 'tango://controls02:10000/ioregister/gc_tgiorctrl/1'
-    if len(sys.argv)>1:
-        model = sys.argv[1]
-
-    w.setModel(model)
-    w.show()
-
-if __name__ == '__main__':
-    import sys
-    app = Qt.QApplication(sys.argv)
-
-    #test_form()
-    #test_widget()
-    test_buttons()
-
-    sys.exit(app.exec_())
diff --git a/lib/taurus/qt/qtgui/extra_pool/poolmotor.py b/lib/taurus/qt/qtgui/extra_pool/poolmotor.py
deleted file mode 100644
index 6263376..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/poolmotor.py
+++ /dev/null
@@ -1,1458 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-import sys
-import copy
-import PyTango
-import numpy
-
-from taurus.qt import Qt
-
-import taurus
-from taurus.core.util.colors import DEVICE_STATE_PALETTE
-from taurus.core.taurusbasetypes import TaurusEventType
-from taurus.core.taurusvalidator import DeviceNameValidator
-import taurus.qt.qtcore.mimetypes
-from taurus.qt.qtgui.dialog import ProtectTaurusMessageBox
-from taurus.qt.qtgui.base import TaurusBaseWidget
-from taurus.qt.qtgui.container import TaurusWidget
-from taurus.qt.qtgui.container import TaurusFrame
-from taurus.qt.qtgui.display import TaurusLabel
-from taurus.qt.qtgui.input import TaurusValueLineEdit
-from taurus.qt.qtgui.input import TaurusValueSpinBox
-from taurus.qt.qtgui.panel import DefaultLabelWidget
-from taurus.qt.qtgui.panel import DefaultUnitsWidget
-from taurus.qt.qtgui.panel import TaurusValue, TaurusAttrForm
-from taurus.qt.qtcore.mimetypes import TAURUS_DEV_MIME_TYPE, TAURUS_ATTR_MIME_TYPE
-from taurus.qt.qtgui.resource import getIcon
-from ui_poolmotorslim import Ui_PoolMotorSlim
-
-
-class LimitsListener(Qt.QObject):
-    """
-    A class that listens to changes on motor limits.
-    If that is the case it emits a signal so the application
-    can do whatever with it.
-    """
-    def __init__(self):
-        Qt.QObject.__init__(self)
-
-    def eventReceived(self, evt_src, evt_type, evt_value):
-        if evt_type not in [TaurusEventType.Change, TaurusEventType.Periodic]:
-            return
-        limits = evt_value.value
-        self.emit(Qt.SIGNAL('updateLimits(PyQt_PyObject)'), limits.tolist())
-
-class PoolMotorClient():
-
-    maxint_in_32_bits = 2147483647
-    def __init__(self):
-        self.motor_dev = None
-        self.has_limits = False
-        self.has_encoder = False
-
-    def setMotor(self, pool_motor_dev_name):
-        # AT SOME POINT THIS WILL BE USING THE 'POOL' TAURUS EXTENSION
-        # TO OPERATE THE MOTOR INSTEAD OF A 'TANGO' TAURUSDEVICE
-        try:
-            self.motor_dev = taurus.Device(pool_motor_dev_name)
-            # IT IS IMPORTANT TO KNOW IF IT IS AN ICEPAP MOTOR, SO EXTRA FEATURES CAN BE PROVIDED
-            # PENDING.
-            self.has_limits = hasattr(self.motor_dev, 'Limit_Switches')
-            self.has_encoder = hasattr(self.motor_dev, 'Encoder')
-        except Exception,e:
-            taurus.warning('Exception Creating Motor Device %s', str(e))
-
-    def moveMotor(self, pos):
-        #self.motor_dev['position'] = pos
-        # Make use of Taurus operations (being logged)
-        self.motor_dev.getAttribute('Position').write(pos)
-
-    def moveInc(self, inc):
-        self.moveMotor(self.motor_dev['position'].value + inc)
-
-    def jogNeg(self):
-        neg_limit = - ( (self.maxint_in_32_bits / 2) - 1)
-        # THERE IS A BUG IN THE ICEPAP THAT DOES NOT ALLOW MOVE ABSOLUTE FURTHER THAN 32 BIT
-        # SO IF THERE ARE STEPS PER UNIT, max_int HAS TO BE REDUCED
-        if hasattr(self.motor_dev, 'step_per_unit'):
-            neg_limit = neg_limit / self.motor_dev['step_per_unit'].value
-        try:
-            min_value = self.motor_dev.getAttribute('Position').getConfig().getValueObj().min_value
-            neg_limit = float(min_value)
-        except Exception:
-            pass
-        self.moveMotor(neg_limit)
-
-    def jogPos(self):
-        pos_limit = (self.maxint_in_32_bits / 2) - 1
-        # THERE IS A BUG IN THE ICEPAP THAT DOES NOT ALLOW MOVE ABSOLUTE FURTHER THAN 32 BIT
-        # SO IF THERE ARE STEPS PER UNIT, max_int HAS TO BE REDUCED
-        if hasattr(self.motor_dev, 'step_per_unit'):
-            pos_limit = pos_limit / self.motor_dev['step_per_unit'].value
-        try:
-            max_value = self.motor_dev.getAttribute('Position').getConfig().getValueObj().max_value
-            pos_limit = float(max_value)
-        except Exception:
-            pass
-        self.moveMotor(pos_limit)
-
-    def goHome(self):
-        pass
-
-    def abort(self):
-        self.motor_dev.abort()
-
-class LabelWidgetDragsDeviceAndAttribute(DefaultLabelWidget):
-    """ Offer richer mime data with taurus-device, taurus-attribute, and plain-text. """
-    def mouseMoveEvent(self, event):
-        model = self.taurusValueBuddy().getModelName()
-        mimeData = Qt.QMimeData()
-        mimeData.setText(self.text())
-        attr_name = model
-        dev_name = model.rpartition('/')[0]
-        mimeData.setData(TAURUS_DEV_MIME_TYPE, dev_name)
-        mimeData.setData(TAURUS_ATTR_MIME_TYPE, attr_name)
-
-        drag = Qt.QDrag(self)
-        drag.setMimeData(mimeData)
-        drag.setHotSpot(event.pos() - self.rect().topLeft())
-        drag.start(Qt.Qt.CopyAction)
-
-class PoolMotorConfigurationForm(TaurusAttrForm):
-
-    def __init__(self, parent=None, designMode=False):
-        TaurusAttrForm.__init__(self, parent, designMode)
-        self._form.setWithButtons(False)
-
-    def getMotorControllerType(self):
-        modelObj = self.getModelObj()
-        modelNormalName = modelObj.getNormalName()
-        poolDsId = modelObj.getHWObj().info().server_id
-        db = taurus.Database()
-        pool_devices = tuple(db.get_device_class_list(poolDsId).value_string)
-        pool_dev_name = pool_devices[pool_devices.index('Pool') - 1]
-        pool = taurus.Device(pool_dev_name)
-        poolMotorInfos = pool["MotorList"].value
-        for motorInfo in poolMotorInfos:
-            # BE CAREFUL, THIS ONLY WORKS IF NOBODY CHANGES THE DEVICE NAME OF A MOTOR!!!
-            # ALSO THERE COULD BE A CASE PROBLEM, BETTER DO COMPARISONS WITH .lower()
-            #to better understand following actions
-            #this is an example of one motor info record
-            #'dummymotor10 (motor/dummymotorctrl/10) (dummymotorctrl/10) Motor',
-            motorInfos = motorInfo.split()
-            if modelNormalName.lower() == motorInfos[1][1:-1].lower():
-                controllerName = motorInfos[2][1:-1].split("/")[0]
-
-        poolControllerInfos = pool["ControllerList"].value
-        for controllerInfo in poolControllerInfos:
-            #to better understand following actions
-            #this is an example of one controller info record
-            #'dummymotorctrl (DummyMotorController.DummyMotorController/dummymotorctrl) - Motor Python ctrl (DummyMotorController.py)'
-            controllerInfos = controllerInfo.split()
-            if controllerName.lower() == controllerInfos[0].lower():
-                controllerType = controllerInfos[1][1:-1].split("/")[0]
-        return controllerType
-
-    def getDisplayAttributes(self, controllerType):
-        attributes = ['position',
-                      'state', 
-                      'status', 
-                      'velocity', 
-                      'acceleration', 
-                      'base_rate', 
-                      'step_per_unit',
-                      'dialposition',
-                      'sign', 
-                      'offset',  
-                      'backlash'] 
-
-        if controllerType == "IcePAPCtrl.IcepapController":
-            attributes.insert(1,"encoder")
-            attributes.extend(['frequency', 
-                               'poweron', 
-                               'closedloop', 
-                               'useencodersource', 
-                               'encodersource', 
-                               'encodersourceformula', 
-                               'statusstopcode', 
-                               'statusdisable', 
-                               'statusready', 
-                               'statuslim-', 
-                               'statuslim+', 
-                               'statushome'])
-
-        elif controllerType == "PmacCtrl.PmacController":
-            attributes.extend(["motoractivated", 
-                               "negativeendlimitset", 
-                               "positiveendlimitset", 
-                               "handwheelenabled",
-                               "phasedmotor", 
-                               "openloopmode", 
-                               "runningdefine-timemove", 
-                               "integrationmode",
-                               "dwellinprogress", 
-                               "datablockerror", 
-                               "desiredvelocityzero", 
-                               "abortdeceleration", 
-                               "blockrequest", 
-                               "homesearchinprogress", 
-                               "assignedtocoordinatesystem",
-                               "coordinatesystem", 
-                               "amplifierenabled",
-                               "stoppedonpositionlimit", 
-                               "homecomplete", 
-                               "phasingsearcherror", 
-                               "triggermove",
-                               "integratedfatalfollowingerror", 
-                               "i2t_amplifierfaulterror", 
-                               "backlashdirectionflag",
-                               "amplifierfaulterror", 
-                               "fatalfollowingerror", 
-                               "warningfollowingerror", 
-                               "inposition",
-                               "motionprogramrunning"])
-
-        elif controllerType == "TurboPmacCtrl.TurboPmacController":
-            attributes.extend(["motoractivated", 
-                               "negativeendlimitset", 
-                               "positiveendlimitset", 
-			       "extendedservoalgorithmenabled"
-                               "amplifierenabled",
-                               "openloopmode", 
-                               "movetimeractive", 
-                               "integrationmode",
-                               "dwellinprogress", 
-                               "datablockerror", 
-                               "desiredvelocityzero", 
-                               "abortdeceleration", 
-                               "blockrequest", 
-                               "homesearchinprogress", 
-                               "user-writtenphaseenable",
-                               "user-writtenservoenable", 
-                               "alternatesource/destination",
-                               "phasedmotor",
-                               "followingoffsetmode",
-                               "followingenabled",
-                               "errortriger",
-                               "softwarepositioncapture",
-                               "integratorinvelocityloop",
-                               "alternatecommand-outputmode",
-                               "coordinatesystem",
-                               "coordinatedefinition",
-                               "assignedtocoordinatesystem",
-                               "foregroundinposition",
-                               "stoppedondesiredpositionlimit",
-                               "stoppedonpositionlimit", 
-                               "homecomplete", 
-                               "phasing_search/read_active", 
-                               "triggermove",
-                               "integratedfatalfollowingerror", 
-                               "i2t_amplifierfaulterror", 
-                               "backlashdirectionflag",
-                               "amplifierfaulterror", 
-                               "fatalfollowingerror", 
-                               "warningfollowingerror", 
-                               "inposition"])            
-        return attributes
-
-    def setModel(self, modelName):
-        TaurusAttrForm.setModel(self, modelName)
-        controllerType = self.getMotorControllerType()
-        attributes = self.getDisplayAttributes(controllerType)
-        #self.setViewFilters([lambda a: a.name.lower() in attributes])
-        self.setSortKey(lambda att: attributes.index(att.name.lower()) if att.name.lower() in attributes else 1)
-
-class PoolMotorSlim(TaurusWidget, PoolMotorClient):
-
-    __pyqtSignals__ = ("modelChanged(const QString &)",)
-
-    def __init__(self, parent = None, designMode = False):
-        TaurusWidget.__init__(self, parent)
-
-        #self.call__init__wo_kw(Qt.QWidget, parent)
-        #self.call__init__(TaurusBaseWidget, str(self.objectName()), designMode=designMode)
-        PoolMotorClient.__init__(self)
-        self.show_context_menu = True
-
-        self.setAcceptDrops(True)
-
-        self.ui = Ui_PoolMotorSlim()
-        self.ui.setupUi(self)
-        
-        if designMode:
-            self.__setTaurusIcons()
-            return
-
-        # CREATE THE TaurusValue that can not be configured in the Designer
-        self.taurus_value = TaurusValue(self.ui.taurusValueContainer)
-
-        # Use a DragDevAndAttributeLabelWidget to provide a richer QMimeData content
-        self.taurus_value.setLabelWidgetClass(LabelWidgetDragsDeviceAndAttribute)
-
-        # Make the label to be the device alias
-        self.taurus_value.setLabelConfig('dev_alias')
-
-        self.taurus_value_enc = TaurusValue(self.ui.taurusValueContainer)
-
-        # THIS WILL BE DONE IN THE DESIGNER
-        # Config Button will launch a PoolMotorConfigurationForm
-#        19.08.2011 after discussion between cpascual, gcui and zreszela, Configuration Panel was rolled back to 
-#        standard TaurusAttrForm - list of all attributes alphabetically ordered 
-#        taurus_attr_form = PoolMotorConfigurationForm()        
-        taurus_attr_form = TaurusAttrForm()
-
-        taurus_attr_form.setMinimumSize(Qt.QSize(470,800))
-        self.ui.btnCfg.setWidget(taurus_attr_form)
-        self.ui.btnCfg.setUseParentModel(True)
-
-        # ADD AN EVENT FILTER FOR THE STATUS LABEL IN ORDER TO PROVIDE JUST THE STRING FROM THE CONTROLLER (LAST LINE)
-        def just_ctrl_status_line(evt_src, evt_type, evt_value):
-            if evt_type not in [TaurusEventType.Change, TaurusEventType.Periodic]:
-                return evt_src, evt_type, evt_value
-            try:
-                status = evt_value.value
-                last_line = status.split('\n')[-1]
-                new_evt_value = PyTango.DeviceAttribute(evt_value)
-                new_evt_value.value = last_line
-                return evt_src, evt_type, new_evt_value
-            except:
-                return evt_src, evt_type, evt_value
-        self.ui.lblStatus.insertEventFilter(just_ctrl_status_line)
-
-        # These buttons are just for showing if the limit is active or not
-        self.ui.btnMin.setEnabled(False)
-        self.ui.btnMax.setEnabled(False)
-
-        # HOMING NOT IMPLMENTED YET
-        self.ui.btnHome.setEnabled(False)
-
-        # DEFAULT VISIBLE COMPONENTS
-        self.toggleHideAll()
-        self.toggleMoveAbsolute(True)
-        self.toggleStopMove(True)
-
-        # SET TAURUS ICONS 
-        self.__setTaurusIcons()
-        
-        self.ui.motorGroupBox.setContextMenuPolicy(Qt.Qt.CustomContextMenu)
-        self.connect(self.ui.motorGroupBox, Qt.SIGNAL('customContextMenuRequested(QPoint)'), self.buildContextMenu)
-
-        self.connect(self.ui.btnGoToNeg, Qt.SIGNAL('clicked()'), self.jogNeg)
-        self.connect(self.ui.btnGoToNegPress, Qt.SIGNAL('pressed()'), self.jogNeg)
-        self.connect(self.ui.btnGoToNegPress, Qt.SIGNAL('released()'), self.abort)
-        self.connect(self.ui.btnGoToNegInc, Qt.SIGNAL('clicked()'), self.goToNegInc)
-        self.connect(self.ui.btnGoToPos, Qt.SIGNAL('clicked()'), self.jogPos)
-        self.connect(self.ui.btnGoToPosPress, Qt.SIGNAL('pressed()'), self.jogPos)
-        self.connect(self.ui.btnGoToPosPress, Qt.SIGNAL('released()'), self.abort)
-        self.connect(self.ui.btnGoToPosInc, Qt.SIGNAL('clicked()'), self.goToPosInc)
-
-        self.connect(self.ui.btnHome, Qt.SIGNAL('clicked()'), self.goHome)
-        self.connect(self.ui.btnStop, Qt.SIGNAL('clicked()'), self.abort)
-
-        # ALSO UPDATE THE WIDGETS EVERYTIME THE FORM HAS TO BE SHOWN
-        self.connect(self.ui.btnCfg, Qt.SIGNAL('clicked()'), taurus_attr_form._updateAttrWidgets)
-        self.connect(self.ui.btnCfg, Qt.SIGNAL('clicked()'), self.buildBetterCfgDialogTitle)
-
-        #################################################################################################################
-        ########################################
-        # LET TAURUS CONFIGURATION MECANISM SHINE!
-        ########################################
-        self.registerConfigProperty(self.ui.inc.isVisible, self.toggleMoveRelative, 'MoveRelative')
-        self.registerConfigProperty(self.ui.btnGoToNegPress.isVisible, self.toggleMoveContinuous, 'MoveContinuous')
-        self.registerConfigProperty(self.ui.btnGoToNeg.isVisible, self.toggleMoveToLimits, 'MoveToLimits')
-        self.registerConfigProperty(self.ui.btnStop.isVisible, self.toggleStopMove, 'StopMove')
-        self.registerConfigProperty(self.ui.btnHome.isVisible, self.toggleHoming, 'Homing')
-        self.registerConfigProperty(self.ui.btnCfg.isVisible, self.toggleConfig, 'Config')
-        self.registerConfigProperty(self.ui.lblStatus.isVisible, self.toggleStatus, 'Status')
-        #################################################################################################################
-
-    def __setTaurusIcons(self):
-        self.ui.btnMin.setText('')
-        self.ui.btnMin.setIcon(getIcon(':/actions/list-remove.svg'))
-        self.ui.btnMax.setText('')
-        self.ui.btnMax.setIcon(getIcon(':/actions/list-add.svg'))
-
-        self.ui.btnGoToNeg.setText('')
-        self.ui.btnGoToNeg.setIcon(getIcon(':/actions/media_skip_backward.svg'))
-        self.ui.btnGoToNegPress.setText('')
-        self.ui.btnGoToNegPress.setIcon(getIcon(':/actions/media_seek_backward.svg'))
-        self.ui.btnGoToNegInc.setText('')
-        self.ui.btnGoToNegInc.setIcon(getIcon(':/actions/media_playback_backward.svg'))
-        self.ui.btnGoToPos.setText('')
-        self.ui.btnGoToPos.setIcon(getIcon(':/actions/media_skip_forward.svg'))
-        self.ui.btnGoToPosPress.setText('')
-        self.ui.btnGoToPosPress.setIcon(getIcon(':/actions/media_seek_forward.svg'))
-        self.ui.btnGoToPosInc.setText('')
-        self.ui.btnGoToPosInc.setIcon(getIcon(':/actions/media_playback_start.svg'))
-        self.ui.btnStop.setText('')
-        self.ui.btnStop.setIcon(getIcon(':/actions/media_playback_stop.svg'))
-        self.ui.btnHome.setText('')
-        self.ui.btnHome.setIcon(getIcon(':/actions/go-home.svg'))
-        self.ui.btnCfg.setText('')
-        self.ui.btnCfg.setIcon(getIcon(':/categories/preferences-system.svg'))
-        #################################################################################################################
-
-
-
-    #@Qt.pyqtSlot(list)
-    def updateLimits(self, limits):
-        if isinstance(limits, dict): limits = limits["limits"]
-        pos_lim = limits[1]
-        pos_btnstylesheet = ''
-        enabled = True
-        if pos_lim:
-            pos_btnstylesheet = 'QPushButton{%s}'%DEVICE_STATE_PALETTE.qtStyleSheet(PyTango.DevState.ALARM)
-            enabled = False
-        self.ui.btnMax.setStyleSheet(pos_btnstylesheet)
-        self.ui.btnGoToPos.setEnabled(enabled)
-        self.ui.btnGoToPosPress.setEnabled(enabled)
-        self.ui.btnGoToPosInc.setEnabled(enabled)
-
-
-        neg_lim = limits[2]
-        neg_btnstylesheet = ''
-        enabled = True
-        if neg_lim:
-            neg_btnstylesheet = 'QPushButton{%s}'%DEVICE_STATE_PALETTE.qtStyleSheet(PyTango.DevState.ALARM)
-            enabled = False
-        self.ui.btnMin.setStyleSheet(neg_btnstylesheet)
-        self.ui.btnGoToNeg.setEnabled(enabled)
-        self.ui.btnGoToNegPress.setEnabled(enabled)
-        self.ui.btnGoToNegInc.setEnabled(enabled)
-
-    #def sizeHint(self):
-    #    return Qt.QSize(300,30)
-
-    def goToNegInc(self):
-        self.moveInc(-1 * self.ui.inc.value())
-
-    def goToPosInc(self):
-        self.moveInc(self.ui.inc.value())
-
-    def buildContextMenu(self, point):
-        if not self.show_context_menu:
-            return
-        menu = Qt.QMenu(self)
-
-        action_hide_all = Qt.QAction(self)
-        action_hide_all.setText('Hide All')
-        menu.addAction(action_hide_all)
-
-        action_show_all = Qt.QAction(self)
-        action_show_all.setText('Show All')
-        menu.addAction(action_show_all)
-
-        action_move_absolute = Qt.QAction(self)
-        action_move_absolute.setText('Move Absolute')
-        action_move_absolute.setCheckable(True)
-        action_move_absolute.setChecked(self.taurus_value.writeWidget().isVisible())
-        menu.addAction(action_move_absolute)
-
-        action_move_relative = Qt.QAction(self)
-        action_move_relative.setText('Move Relative')
-        action_move_relative.setCheckable(True)
-        action_move_relative.setChecked(self.ui.inc.isVisible())
-        menu.addAction(action_move_relative)
-
-        action_move_continuous = Qt.QAction(self)
-        action_move_continuous.setText('Move Continuous')
-        action_move_continuous.setCheckable(True)
-        action_move_continuous.setChecked(self.ui.btnGoToNegPress.isVisible())
-        menu.addAction(action_move_continuous)
-
-        action_move_to_limits = Qt.QAction(self)
-        action_move_to_limits.setText('Move to Limits')
-        action_move_to_limits.setCheckable(True)
-        action_move_to_limits.setChecked(self.ui.btnGoToNeg.isVisible())
-        menu.addAction(action_move_to_limits)
-
-        action_encoder = Qt.QAction(self)
-        action_encoder.setText('Encoder Read')
-        action_encoder.setCheckable(True)
-        action_encoder.setChecked(self.taurus_value_enc.isVisible())
-        if self.has_encoder:
-            menu.addAction(action_encoder)
-
-        action_stop_move = Qt.QAction(self)
-        action_stop_move.setText('Stop Movement')
-        action_stop_move.setCheckable(True)
-        action_stop_move.setChecked(self.ui.btnStop.isVisible())
-        menu.addAction(action_stop_move)
-
-        action_homing = Qt.QAction(self)
-        action_homing.setText('Homing')
-        action_homing.setCheckable(True)
-        action_homing.setChecked(self.ui.btnHome.isVisible())
-        menu.addAction(action_homing)
-
-        action_config = Qt.QAction(self)
-        action_config.setText('Config')
-        action_config.setCheckable(True)
-        action_config.setChecked(self.ui.btnCfg.isVisible())
-        menu.addAction(action_config)
-
-        action_status = Qt.QAction(self)
-        action_status.setText('Status')
-        action_status.setCheckable(True)
-        action_status.setChecked(self.ui.lblStatus.isVisible())
-        menu.addAction(action_status)
-
-        self.connect(action_hide_all, Qt.SIGNAL('triggered()'), self.toggleHideAll)
-        self.connect(action_show_all, Qt.SIGNAL('triggered()'), self.toggleShowAll)
-        self.connect(action_move_absolute, Qt.SIGNAL('toggled(bool)'), self.toggleMoveAbsolute)
-        self.connect(action_move_relative, Qt.SIGNAL('toggled(bool)'), self.toggleMoveRelative)
-        self.connect(action_move_continuous, Qt.SIGNAL('toggled(bool)'), self.toggleMoveContinuous)
-        self.connect(action_move_to_limits, Qt.SIGNAL('toggled(bool)'), self.toggleMoveToLimits)
-        self.connect(action_encoder, Qt.SIGNAL('toggled(bool)'), self.toggleEncoder)
-        self.connect(action_stop_move, Qt.SIGNAL('toggled(bool)'), self.toggleStopMove)
-        self.connect(action_homing, Qt.SIGNAL('toggled(bool)'), self.toggleHoming)
-        self.connect(action_config, Qt.SIGNAL('toggled(bool)'), self.toggleConfig)
-        self.connect(action_status, Qt.SIGNAL('toggled(bool)'), self.toggleStatus)
-
-        menu.popup(self.cursor().pos())
-
-    def toggleHideAll(self):
-        self.toggleAll(False)
-
-    def toggleShowAll(self):
-        self.toggleAll(True)
-
-    def toggleAll(self, visible):
-        self.toggleMoveAbsolute(visible)
-        self.toggleMoveRelative(visible)
-        self.toggleMoveContinuous(visible)
-        self.toggleMoveToLimits(visible)
-        self.toggleEncoder(visible)
-        self.toggleStopMove(visible)
-        self.toggleHoming(visible)
-        self.toggleConfig(visible)
-        self.toggleStatus(visible)
-
-    def toggleMoveAbsolute(self, visible):
-        if self.taurus_value.writeWidget() is not None:
-            self.taurus_value.writeWidget().setVisible(visible)
-
-    def toggleMoveRelative(self, visible):
-        self.ui.btnGoToNegInc.setVisible(visible)
-        self.ui.inc.setVisible(visible)
-        self.ui.btnGoToPosInc.setVisible(visible)
-
-    def toggleMoveContinuous(self, visible):
-        self.ui.btnGoToNegPress.setVisible(visible)
-        self.ui.btnGoToPosPress.setVisible(visible)
-
-    def toggleMoveToLimits(self, visible):
-        self.ui.btnGoToNeg.setVisible(visible)
-        self.ui.btnGoToPos.setVisible(visible)
-
-    def toggleEncoder(self, visible):
-        self.taurus_value_enc.setVisible(visible)
-
-    def toggleStopMove(self, visible):
-        self.ui.btnStop.setVisible(visible)
-
-    def toggleHoming(self, visible):
-        self.ui.btnHome.setVisible(visible)
-
-    def toggleConfig(self, visible):
-        self.ui.btnCfg.setVisible(visible)
-
-    def toggleStatus(self, visible):
-        self.ui.lblStatus.setVisible(visible)
-
-    def dragEnterEvent(self, event):
-        event.accept()
-
-    def dropEvent(self, event):
-        mimeData = event.mimeData()
-        if mimeData.hasFormat(TAURUS_DEV_MIME_TYPE):
-            model = str(mimeData.data(TAURUS_DEV_MIME_TYPE))
-        elif mimeData.hasFormat(TAURUS_ATTR_MIME_TYPE):
-            model = str(mimeData.data(TAURUS_ATTR_MIME_TYPE))
-        else:
-            model = str(mimeData.text())
-        self.setModel(model)
-
-    def keyPressEvent(self, key_event):
-        if key_event.key() == Qt.Qt.Key_Escape:
-            self.abort()
-            key_event.accept()
-        TaurusWidget.keyPressEvent(self, key_event)
-
-    def buildBetterCfgDialogTitle(self):
-        while self.ui.btnCfg._dialog is None:
-            pass
-        model = self.getModel()
-        self.ui.btnCfg._dialog.setWindowTitle('%s config'%taurus.Factory().getDevice(model).getSimpleName())
-
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        ret = TaurusWidget.getQtDesignerPluginInfo()
-        ret['module'] = 'taurus.qt.qtgui.extra_pool'
-        ret['group'] = 'Taurus Sardana'
-        ret['icon'] = ':/designer/extra_motor.png'
-        ret['container'] = False
-        return ret
-
-    def showEvent(self, event):
-        TaurusWidget.showEvent(self, event)
-        try:
-            self.motor_dev.getAttribute('Position').enablePolling(force=True)
-        except AttributeError, e:
-            self.debug('Error in showEvent: %s', repr(e))
-            
-
-    def hideEvent(self, event):
-        TaurusWidget.hideEvent(self, event)
-        try:
-            self.motor_dev.getAttribute('Position').disablePolling()
-        except AttributeError, e:
-            self.debug('Error in hideEvent: %s', repr(e))
-
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # QT properties 
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    @Qt.pyqtSignature("getModel()")
-    def getModel(self):
-        return self.ui.motorGroupBox.getModel()
-
-    @Qt.pyqtSignature("setModel(QString)")
-    def setModel(self, model):
-        # DUE TO A BUG IN TAUGROUPBOX, WE NEED THE FULL MODEL NAME
-        try:
-            # In case the model is an attribute of a motor, get the device name
-            if not DeviceNameValidator().isValid(model):
-                model = model.rpartition('/')[0]
-            model = taurus.Factory().getDevice(model).getFullName()
-            self.setMotor(model)
-            self.ui.motorGroupBox.setModel(model)
-            self.ui.motorGroupBox.setEnabled(True)
-
-            self.taurus_value.setModel(model+'/Position')
-
-            # DUE TO A BUG IN TAURUSVALUE, THAT DO NOT USE PARENT MODEL WE NEED TO ALWAYS SET THE MODEL
-            self.taurus_value.setUseParentModel(False)
-
-            # THE FORCED APPLY HAS TO BE DONE AFTER THE MODEL IS SET, SO THE WRITEWIDGET IS AVAILABLE
-            if self.taurus_value.writeWidget() is not None:
-                self.taurus_value.writeWidget().setForcedApply(True)
-
-            show_enc = self.taurus_value_enc.isVisible()
-            if self.has_encoder:
-                self.taurus_value_enc.setModel(model+'/Encoder')
-                self.taurus_value_enc.setUseParentModel(False)
-                self.taurus_value_enc.readWidget().setBgRole('none')
-            else:
-                self.taurus_value_enc.setModel(None)
-                show_enc = False
-            if not show_enc:
-                self.toggleEncoder(False)
-
-            try:
-                self.unregisterConfigurableItem('MoveAbsolute')
-                self.unregisterConfigurableItem('Encoder')
-            except:
-                pass
-            self.registerConfigProperty(self.taurus_value.writeWidget().isVisible, self.toggleMoveAbsolute, 'MoveAbsolute')
-            self.registerConfigProperty(self.taurus_value_enc.isVisible, self.toggleEncoder, 'Encoder')
-
-
-            # SINCE TAURUSLAUNCHERBUTTON HAS NOT THIS PROPERTY IN THE
-            # DESIGNER, WE MUST SET IT HERE
-            self.ui.btnCfg.setUseParentModel(True)
-
-            # CONFIGURE A LISTENER IN ORDER TO UPDATE LIMIT SWITCHES STATES
-            self.limits_listener = LimitsListener()
-            self.connect(self.limits_listener, Qt.SIGNAL('updateLimits(PyQt_PyObject)'), self.updateLimits)
-            limits_visible = False
-            if self.has_limits:
-                limits_attribute = self.motor_dev.getAttribute('Limit_switches')
-                limits_attribute.addListener(self.limits_listener)
-                #self.updateLimits(limits_attribute.read().value)
-                limits_visible = True
-            self.ui.btnMin.setVisible(limits_visible)
-            self.ui.btnMax.setVisible(limits_visible)
-        except Exception,e:
-            self.ui.motorGroupBox.setEnabled(False)
-            self.info('Error setting model "%s". Reason: %s'%(model, repr(e)))
-            self.traceback()
-
-    @Qt.pyqtSignature("resetModel()")
-    def resetModel(self):
-        self.ui.motorGroupBox.resetModel()
-
-    @Qt.pyqtSignature("getShowContextMenu()")
-    def getShowContextMenu(self):
-        return self.show_context_menu
-
-    @Qt.pyqtSignature("setShowContextMenu(bool)")
-    def setShowContextMenu(self, showContextMenu):
-        self.show_context_menu = showContextMenu
-
-    @Qt.pyqtSignature("resetShowContextMenu()")
-    def resetShowContextMenu(self):
-        self.show_context_menu = True
-
-    @Qt.pyqtSignature("getStepSize()")
-    def getStepSize(self):
-        return self.ui.inc.value()
-
-    @Qt.pyqtSignature("setStepSize(double)")
-    def setStepSize(self, stepSize):
-        self.ui.inc.setValue(stepSize)
-
-    @Qt.pyqtSignature("resetStepSize()")
-    def resetStepSize(self):
-        self.setStepSize(1)
-
-    @Qt.pyqtSignature("getStepSizeIncrement()")
-    def getStepSizeIncrement(self):
-        return self.ui.inc.singleStep()
-
-    @Qt.pyqtSignature("setStepSizeIncrement(double)")
-    def setStepSizeIncrement(self, stepSizeIncrement):
-        self.ui.inc.setSingleStep(stepSizeIncrement)
-
-    @Qt.pyqtSignature("resetStepSizeIncrement()")
-    def resetStepSizeIncrement(self):
-        self.setStepSizeIncrement(1)
-
-    model = Qt.pyqtProperty("QString", getModel,setModel,resetModel)
-    stepSize = Qt.pyqtProperty("double", getStepSize,setStepSize,resetStepSize)
-    stepSizeIncrement = Qt.pyqtProperty("double", getStepSizeIncrement,setStepSizeIncrement,resetStepSizeIncrement)
-
-
-
-################################################################################################
-# NEW APPROACH TO OPERATE POOL MOTORS FROM A TAURUS FORM INHERITTING DIRECTLY FROM TaurusVALUE #
-# AND USING PARTICULAR CLASSES THAT KNOW THEY ARE PART OF A TAURUSVALUE AND CAN INTERACT       #
-################################################################################################
-
-class TaurusAttributeListener(Qt.QObject):
-    """
-    A class that recieves events on tango attribute changes.
-    If that is the case it emits a signal with the event's value.
-    """
-    def __init__(self):
-        Qt.QObject.__init__(self)
-
-    def eventReceived(self, evt_src, evt_type, evt_value):
-        if evt_type not in [TaurusEventType.Change, TaurusEventType.Periodic]:
-            return
-        value = evt_value.value
-        self.emit(Qt.SIGNAL('eventReceived'), value)
-
-
-##################################################
-#                  LABEL WIDGET                  #
-##################################################
-class PoolMotorTVLabelWidget(TaurusWidget):
-    '''
-    @TODO tooltip should be extended with status info
-    @TODO context menu should be the lbl_alias extended
-    @TODO default tooltip extended with the complete (multiline) status
-    @TODO rightclick popup menu with actions: (1) switch user/expert view, (2) Config -all attributes-, (3) change motor
-    For the (3), a drop event should accept if it is a device, and add it to the 'change-motor' list and select
-    @TODO on the 'expert' row, it could be an ENABLE section with a button to set PowerOn to True/False
-    '''
-    def __init__(self, parent=None, designMode=False):
-        TaurusWidget.__init__(self, parent, designMode)
-        self.setLayout(Qt.QGridLayout())
-        self.layout().setMargin(0)
-        self.layout().setSpacing(0)
-
-        self.lbl_alias = DefaultLabelWidget(parent, designMode)
-        self.lbl_alias.setBgRole('none')
-        self.layout().addWidget(self.lbl_alias)
-
-        self.btn_poweron = Qt.QPushButton()
-        self.btn_poweron.setText('Set ON')
-        self.layout().addWidget(self.btn_poweron)
-
-        # Align everything on top
-        self.layout().addItem(Qt.QSpacerItem(1, 1, Qt.QSizePolicy.Minimum, Qt.QSizePolicy.Expanding))
-
-        # I don't like this approach, there should be something like
-        # self.lbl_alias.addAction(...)
-        self.lbl_alias.contextMenuEvent = lambda(event): self.contextMenuEvent(event)
-
-        # I' don't like this approach, there should be something like
-        # self.lbl_alias.addToolTipCallback(self.calculate_extra_tooltip)
-        self.lbl_alias.getFormatedToolTip = self.calculateExtendedTooltip
-
-        # I' don't like this approach, there should be something like
-        # self.lbl_alias.disableDrag() or self.lbl_alias.setDragEnabled(False)
-        # or better, define if Attribute or Device or Both have to be included in the mimeData
-        self.lbl_alias.mouseMoveEvent = self.mouseMoveEvent
-
-    def setExpertView(self, expertView):
-        btn_poweron_visible = expertView and self.taurusValueBuddy().hasPowerOn()
-        self.btn_poweron.setVisible(btn_poweron_visible)
-
-    @ProtectTaurusMessageBox(msg='An error occurred trying to write PowerOn Attribute.')
-    def setPowerOn(self):
-        motor_dev = self.taurusValueBuddy().motor_dev
-        if motor_dev is not None:
-            poweron = (self.btn_poweron.text() == 'Set ON')
-            motor_dev.getAttribute('PowerOn').write(poweron)
-
-    def setModel(self, model):
-        TaurusWidget.setModel(self, model+'/Status')
-        self.lbl_alias.taurusValueBuddy = self.taurusValueBuddy
-        self.lbl_alias.setModel(model)
-
-        # Handle User/Expert view
-        self.disconnect(self.taurusValueBuddy(), Qt.SIGNAL('expertViewChanged(bool)'), self.setExpertView)
-        self.connect(self.taurusValueBuddy(), Qt.SIGNAL('expertViewChanged(bool)'), self.setExpertView)
-        # Handle Power ON/OFF
-        self.disconnect(self.btn_poweron, Qt.SIGNAL('clicked()'), self.setPowerOn)
-        self.connect(self.btn_poweron, Qt.SIGNAL('clicked()'), self.setPowerOn)
-
-    def calculateExtendedTooltip(self, cache=False):
-        default_label_widget_tooltip = DefaultLabelWidget.getFormatedToolTip(self.lbl_alias, cache)
-        status_info = ''
-        motor_dev = self.taurusValueBuddy().motor_dev
-        if motor_dev is not None:
-            status = motor_dev.getAttribute('Status').read().value
-            # MAKE IT LOOK LIKE THE STANDARD TABLE FOR TAURUS TOOLTIPS
-            status_lines = status.split('\n')
-            status_info = '<TABLE width="500" border="0" cellpadding="1" cellspacing="0"><TR><TD WIDTH="80" ALIGN="RIGHT" VALIGN="MIDDLE"><B>Status:</B></TD><TD>'+status_lines[0]+'</TD></TR>'
-            for status_extra_line in status_lines[1:]:
-                status_info += '<TR><TD></TD><TD>'+status_extra_line+'</TD></TR>'
-            status_info += '</TABLE>'
-        return default_label_widget_tooltip + status_info
-
-    def contextMenuEvent(self, event):
-        # Overwrite the default taurus label behaviour
-        menu = Qt.QMenu(self)
-        action_expert_view = Qt.QAction(self)
-        action_expert_view.setText('Expert View')
-        action_expert_view.setCheckable(True)
-        action_expert_view.setChecked(self.taurusValueBuddy()._expertView)
-        menu.addAction(action_expert_view)
-        self.connect(action_expert_view, Qt.SIGNAL('toggled(bool)'), self.taurusValueBuddy().setExpertView)
-
-        action_tango_attributes = Qt.QAction(self)
-        action_tango_attributes.setIcon(getIcon(':/categories/preferences-system.svg'))
-        action_tango_attributes.setText('Tango Attributes')
-        menu.addAction(action_tango_attributes)
-        self.connect(action_tango_attributes, Qt.SIGNAL('triggered()'), self.taurusValueBuddy().showTangoAttributes)
-
-        menu.exec_(event.globalPos())
-        event.accept()
-
-    def mouseMoveEvent(self, event):
-        model = self.lbl_alias.getModelName()
-        mimeData = Qt.QMimeData()
-        mimeData.setText(self.lbl_alias.text())
-        dev_name = model.rpartition('/')[0]
-        attr_name = dev_name+'/Position'
-        mimeData.setData(TAURUS_DEV_MIME_TYPE, dev_name)
-        mimeData.setData(TAURUS_ATTR_MIME_TYPE, attr_name)
-    
-        drag = Qt.QDrag(self)
-        drag.setMimeData(mimeData)
-        drag.setHotSpot(event.pos() - self.rect().topLeft())
-        drag.start(Qt.Qt.CopyAction)
-
-##################################################
-#                   READ WIDGET                  #
-##################################################
-class PoolMotorTVReadWidget(TaurusWidget):
-    '''
-    @TODO on the 'expert' row, there should be an Indexer/Encoder radiobuttongroup to show units from raw dial/indx/enc
-    @TODO TaurusLCD may be used but, now it does not display the sign, and color is WHITE... 
-    '''
-    def __init__(self, parent = None, designMode = False):
-        TaurusWidget.__init__(self, parent, designMode)
-        self.setLayout(Qt.QGridLayout())
-        self.layout().setMargin(0)
-        self.layout().setSpacing(0)
-
-        limits_layout = Qt.QHBoxLayout()
-        limits_layout.setMargin(0)
-        limits_layout.setSpacing(0)
-
-        self.btn_lim_neg = Qt.QPushButton()
-        self.btn_lim_neg.setToolTip('Negative Limit')
-        #self.btn_lim_neg.setEnabled(False)
-        self.prepare_button(self.btn_lim_neg)
-        self.btn_lim_neg.setIcon(getIcon(':/actions/list-remove.svg'))
-        limits_layout.addWidget(self.btn_lim_neg)
-
-        self.btn_lim_pos = Qt.QPushButton()
-        self.btn_lim_pos.setToolTip('Positive Limit')
-        #self.btn_lim_pos.setEnabled(False)
-        self.prepare_button(self.btn_lim_pos)
-        self.btn_lim_pos.setIcon(getIcon(':/actions/list-add.svg'))
-        limits_layout.addWidget(self.btn_lim_pos)
-
-        self.layout().addLayout(limits_layout,0, 0)
-
-        self.lbl_read = TaurusLabel()
-        self.lbl_read.setBgRole('quality')
-        self.lbl_read.setSizePolicy(Qt.QSizePolicy(Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Fixed))
-        self.layout().addWidget(self.lbl_read, 0, 1)
-
-        ## @TODO right now, no options here...
-        #self.cb_expertRead = Qt.QComboBox()
-        #self.cb_expertRead.addItems(['Enc'])
-        #self.layout().addWidget(self.cb_expertRead, 1, 0)
-
-        self.lbl_enc = Qt.QLabel('Encoder')
-        self.layout().addWidget(self.lbl_enc, 1, 0)
-        
-        self.lbl_enc_read = TaurusLabel()
-        self.lbl_enc_read.setBgRole('none')
-        self.lbl_enc_read.setSizePolicy(Qt.QSizePolicy(Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Fixed))
-        self.layout().addWidget(self.lbl_enc_read, 1, 1)
-        
-        # Align everything on top
-        self.layout().addItem(Qt.QSpacerItem(1, 1, Qt.QSizePolicy.Minimum, Qt.QSizePolicy.Expanding), 2, 0, 1, 2)
-
-    def setExpertView(self, expertView):
-        self.lbl_enc.setVisible(False)
-        self.lbl_enc_read.setVisible(False)
-        if self.taurusValueBuddy().motor_dev is not None:
-            hw_limits = self.taurusValueBuddy().hasHwLimits()
-            self.btn_lim_neg.setEnabled(hw_limits)
-            self.btn_lim_pos.setEnabled(hw_limits)
-
-        if expertView and self.taurusValueBuddy().motor_dev is not None:
-            encoder = self.taurusValueBuddy().hasEncoder()
-            self.lbl_enc.setVisible(encoder)
-            self.lbl_enc_read.setVisible(encoder)
-
-    def prepare_button(self, btn):
-        btn_policy = Qt.QSizePolicy(Qt.QSizePolicy.Fixed, Qt.QSizePolicy.Fixed)
-        btn_policy.setHorizontalStretch(0)
-        btn_policy.setVerticalStretch(0)
-        btn.setSizePolicy(btn_policy)
-        btn.setMinimumSize(25, 25)
-        btn.setMaximumSize(25, 25)
-        btn.setText('')
-
-    def setModel(self, model):
-        TaurusWidget.setModel(self, model+'/Position')
-        self.lbl_read.setModel(model+'/Position')
-        self.lbl_enc_read.setModel(model+'/Encoder')
-
-        # Handle User/Expert view
-        self.connect(self.taurusValueBuddy(), Qt.SIGNAL('expertViewChanged(bool)'), self.setExpertView)
-
-##################################################
-#                  WRITE WIDGET                  #
-##################################################
-class PoolMotorTVWriteWidget(TaurusWidget):
-    def __init__(self, parent = None, designMode = False):
-        TaurusWidget.__init__(self, parent, designMode)
-        self.setLayout(Qt.QGridLayout())
-        self.layout().setMargin(0)
-        self.layout().setSpacing(0)
-
-        self.le_write_absolute = TaurusValueLineEdit()
-        self.layout().addWidget(self.le_write_absolute, 0, 0)
-
-        self.qw_write_relative = Qt.QWidget()
-        self.qw_write_relative.setLayout(Qt.QHBoxLayout())
-        self.qw_write_relative.layout().setMargin(0)
-        self.qw_write_relative.layout().setSpacing(0)
-
-        self.cb_step = Qt.QComboBox()
-        self.cb_step.setSizePolicy(Qt.QSizePolicy(Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Fixed))
-        self.cb_step.setEditable(True)
-        self.cb_step.lineEdit().setValidator(Qt.QDoubleValidator(self))
-        self.cb_step.lineEdit().setAlignment(Qt.Qt.AlignRight)
-        self.cb_step.addItem('1')
-        self.qw_write_relative.layout().addWidget(self.cb_step)
-
-        self.btn_step_down = Qt.QPushButton()
-        self.btn_step_down.setToolTip('Decrements motor position')
-        self.prepare_button(self.btn_step_down)
-        self.btn_step_down.setIcon(getIcon(':/actions/media_playback_backward.svg'))
-        self.qw_write_relative.layout().addWidget(self.btn_step_down)
-
-        self.btn_step_up = Qt.QPushButton()
-        self.btn_step_up.setToolTip('Increments motor position')
-        self.prepare_button(self.btn_step_up)
-        self.btn_step_up.setIcon(getIcon(':/actions/media_playback_start.svg'))
-        self.qw_write_relative.layout().addWidget(self.btn_step_up)
-
-        self.layout().addWidget(self.qw_write_relative, 0, 0)
-
-        self.cbAbsoluteReltaive = Qt.QComboBox()
-        self.connect(self.cbAbsoluteReltaive, Qt.SIGNAL('currentIndexChanged(QString)'), self.cbAbsoluteReltaiveChanged)
-        self.cbAbsoluteReltaive.addItems(['Abs','Rel'])
-        self.layout().addWidget(self.cbAbsoluteReltaive, 0, 1)
-        
-        self.btn_stop = Qt.QPushButton()
-        self.btn_stop.setToolTip('Stops the motor')
-        self.prepare_button(self.btn_stop)
-        self.btn_stop.setIcon(getIcon(':/actions/media_playback_stop.svg'))
-        self.layout().addWidget(self.btn_stop, 0, 2)
-
-        btns_layout = Qt.QHBoxLayout()
-        btns_layout.setMargin(0)
-        btns_layout.setSpacing(0)
-
-        btns_layout.addItem(Qt.QSpacerItem(1, 1, Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Minimum))
-
-        self.btn_to_neg = Qt.QPushButton()
-        self.btn_to_neg.setToolTip('Moves the motor towards the Negative Software Limit')
-        self.prepare_button(self.btn_to_neg)
-        self.btn_to_neg.setIcon(getIcon(':/actions/media_skip_backward.svg'))
-        btns_layout.addWidget(self.btn_to_neg)
-
-        self.btn_to_neg_press = Qt.QPushButton()
-        self.btn_to_neg_press.setToolTip('Moves the motor (while pressed) towards the Negative Software Limit')
-        self.prepare_button(self.btn_to_neg_press)
-        self.btn_to_neg_press.setIcon(getIcon(':/actions/media_seek_backward.svg'))
-        btns_layout.addWidget(self.btn_to_neg_press)
-
-        self.btn_to_pos_press = Qt.QPushButton()
-        self.prepare_button(self.btn_to_pos_press)
-        self.btn_to_pos_press.setToolTip('Moves the motor (while pressed) towards the Positive Software Limit')
-        self.btn_to_pos_press.setIcon(getIcon(':/actions/media_seek_forward.svg'))
-        btns_layout.addWidget(self.btn_to_pos_press)
-
-        self.btn_to_pos = Qt.QPushButton()
-        self.btn_to_pos.setToolTip('Moves the motor towards the Positive Software Limit')
-        self.prepare_button(self.btn_to_pos)
-        self.btn_to_pos.setIcon(getIcon(':/actions/media_skip_forward.svg'))
-        btns_layout.addWidget(self.btn_to_pos)
-
-        btns_layout.addItem(Qt.QSpacerItem(1, 1, Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Minimum))
-        
-        self.layout().addLayout(btns_layout, 1, 0, 1, 3)
-
-        self.connect(self.btn_step_down, Qt.SIGNAL('clicked()'), self.stepDown)
-        self.connect(self.btn_step_up, Qt.SIGNAL('clicked()'), self.stepUp)
-        self.connect(self.btn_stop, Qt.SIGNAL('clicked()'), self.abort)
-        self.connect(self.btn_to_neg, Qt.SIGNAL('clicked()'), self.goNegative)
-        self.connect(self.btn_to_neg_press, Qt.SIGNAL('pressed()'), self.goNegative)
-        self.connect(self.btn_to_neg_press, Qt.SIGNAL('released()'), self.abort)
-        self.connect(self.btn_to_pos, Qt.SIGNAL('clicked()'), self.goPositive)
-        self.connect(self.btn_to_pos_press, Qt.SIGNAL('pressed()'), self.goPositive)
-        self.connect(self.btn_to_pos_press, Qt.SIGNAL('released()'), self.abort)
-
-        # Align everything on top
-        self.layout().addItem(Qt.QSpacerItem(1, 1, Qt.QSizePolicy.Minimum, Qt.QSizePolicy.Expanding), 2, 0, 1, 3)
-
-    def cbAbsoluteReltaiveChanged(self, abs_rel_option):
-        abs_visible = abs_rel_option == 'Abs'
-        rel_visible = abs_rel_option == 'Rel'
-        self.le_write_absolute.setVisible(abs_visible)
-        self.qw_write_relative.setVisible(rel_visible)
-
-    def stepDown(self):
-        self.goRelative(-1)
-
-    def stepUp(self):
-        self.goRelative(+1)
-
-    @ProtectTaurusMessageBox(msg='An error occurred trying to move the motor.')
-    def goRelative(self, direction):
-        motor_dev = self.taurusValueBuddy().motor_dev
-        if motor_dev is not None:
-            increment = direction * float(self.cb_step.currentText())
-            position = float(motor_dev.getAttribute('Position').read().value)
-            target_position = position + increment
-            motor_dev.getAttribute('Position').write(target_position)
-
-    @ProtectTaurusMessageBox(msg='An error occurred trying to move the motor.')
-    def goNegative(self):
-        motor_dev = self.taurusValueBuddy().motor_dev
-        if motor_dev is not None:
-            min_value = float(motor_dev.getAttribute('Position').min_value)
-            motor_dev.getAttribute('Position').write(min_value)
-
-    @ProtectTaurusMessageBox(msg='An error occurred trying to move the motor.')
-    def goPositive(self):
-        motor_dev = self.taurusValueBuddy().motor_dev
-        if motor_dev is not None:
-            max_value = float(motor_dev.getAttribute('Position').max_value)
-            motor_dev.getAttribute('Position').write(max_value)
-
-    @ProtectTaurusMessageBox(msg='An error occurred trying to abort the motion.')
-    def abort(self):
-        motor_dev = self.taurusValueBuddy().motor_dev
-        if motor_dev is not None:
-            motor_dev.abort()
-
-    def prepare_button(self, btn):
-        btn_policy = Qt.QSizePolicy(Qt.QSizePolicy.Fixed, Qt.QSizePolicy.Fixed)
-        btn_policy.setHorizontalStretch(0)
-        btn_policy.setVerticalStretch(0)
-        btn.setSizePolicy(btn_policy)
-        btn.setMinimumSize(25, 25)
-        btn.setMaximumSize(25, 25)
-        btn.setText('')
-
-    def setExpertView(self, expertView):
-        self.btn_to_neg.setVisible(expertView)
-        self.btn_to_neg_press.setVisible(expertView)
-
-        self.btn_to_pos.setVisible(expertView)
-        self.btn_to_pos_press.setVisible(expertView)
-
-        if expertView and self.taurusValueBuddy().motor_dev is not None:
-            neg_sw_limit_enabled = self.taurusValueBuddy().motor_dev.getAttribute('Position').min_value.lower() != 'not specified'
-            self.btn_to_neg.setEnabled(neg_sw_limit_enabled)
-            self.btn_to_neg_press.setEnabled(neg_sw_limit_enabled)
-
-            pos_sw_limit_enabled = self.taurusValueBuddy().motor_dev.getAttribute('Position').max_value.lower() != 'not specified'
-            self.btn_to_pos.setEnabled(pos_sw_limit_enabled)
-            self.btn_to_pos_press.setEnabled(pos_sw_limit_enabled)
-
-    def setModel(self, model):
-        TaurusWidget.setModel(self, model+'/Position')
-        self.le_write_absolute.setModel(model+'/Position')
-
-        # Handle User/Expert View
-        self.connect(self.taurusValueBuddy(), Qt.SIGNAL('expertViewChanged(bool)'), self.setExpertView)
-
-
-    def keyPressEvent(self, key_event):
-        if key_event.key() == Qt.Qt.Key_Escape:
-            self.abort()
-            key_event.accept()
-        TaurusWidget.keyPressEvent(self, key_event)
-
-##################################################
-#                  UNITS WIDGET                  #
-##################################################
-class PoolMotorTVUnitsWidget(TaurusWidget):
-    def __init__(self, parent=None, designMode=False):
-        TaurusWidget.__init__(self, parent, designMode)
-        self.setLayout(Qt.QGridLayout())
-        self.layout().setMargin(0)
-        self.layout().setSpacing(0)
-
-        self.lbl_unit = DefaultUnitsWidget(parent, designMode)
-        self.layout().addWidget(self.lbl_unit)
-
-        # Align everything on top
-        self.layout().addItem(Qt.QSpacerItem(1, 1, Qt.QSizePolicy.Minimum, Qt.QSizePolicy.Expanding))
-
-    def setExpertView(self, expertView):
-        pass
-
-    def setModel(self, model):
-        TaurusWidget.setModel(self, model+'/Position')
-        self.lbl_unit.taurusValueBuddy = self.taurusValueBuddy
-        self.lbl_unit.setModel(model+'/Position')
-        # Handle User/Expert view
-        self.connect(self.taurusValueBuddy(), Qt.SIGNAL('expertViewChanged(bool)'), self.setExpertView)
-
-##################################################
-#                TV MOTOR WIDGET                 #
-##################################################
-class PoolMotorTV(TaurusValue):
-    ''' A widget that displays and controls a pool Motor device.  It
-    behaves as a TaurusValue.
-    @TODO the view mode should be stored in the configuration
-    @TODO the motor list should be stored in the configuration
-    @TODO the selected radiobuttons (dial/indx/enc) and (abs/rel) should be stored in configuration
-    @TODO it would be nice if the neg/pos limits could react also when software limits are 'active'
-    @TODO expert view for read widget should include signals (indexer/encoder/inpos)...
-    '''
-    def __init__(self, parent = None, designMode = False):
-        TaurusValue.__init__(self, parent = parent, designMode = designMode)
-        self.setLabelWidgetClass('PoolMotorTVLabelWidget')
-        self.setReadWidgetClass('PoolMotorTVReadWidget')
-        self.setWriteWidgetClass('PoolMotorTVWriteWidget')
-        self.setUnitsWidgetClass('PoolMotorTVUnitsWidget')
-
-        self.setLabelConfig('dev_alias')
-
-        self.motor_dev = None
-        self._expertView = False
-        self.limits_listener = None
-        self.poweron_listener = None
-        self.status_listener = None
-        self.position_listener = None
-        self.setExpertView(False)
-
-    def setExpertView(self, expertView):
-        self._expertView = expertView
-        self.emit(Qt.SIGNAL('expertViewChanged(bool)'), expertView)
-    
-    def minimumHeight(self):
-        return None #@todo: UGLY HACK to avoid subwidgets being forced to minimumheight=20
-            
-    def setModel(self, model):
-        TaurusValue.setModel(self, model)
-        try:
-            # disconnect signals
-            if self.limits_listener is not None:
-                self.disconnect(self.limits_listener, Qt.SIGNAL('eventReceived'), self.updateLimits)
-            if self.poweron_listener is not None:
-                self.disconnect(self.poweron_listener, Qt.SIGNAL('eventReceived'), self.updatePowerOn)
-            if self.status_listener is not None:
-                self.disconnect(self.status_listener, Qt.SIGNAL('eventReceived'), self.updateStatus)
-            if self.position_listener is not None:
-                self.disconnect(self.position_listener, Qt.SIGNAL('eventReceived'), self.updatePosition)
-            
-            #remove listeners
-            if self.motor_dev is not None:
-                if self.hasHwLimits():
-                    self.motor_dev.getAttribute('Limit_Switches').removeListener(self.limits_listener)
-                if self.hasPowerOn():
-                    self.motor_dev.getAttribute('PowerOn').removeListener(self.poweron_listener)
-                self.motor_dev.getAttribute('Status').removeListener(self.status_listener)
-                self.motor_dev.getAttribute('Position').removeListener(self.position_listener)
-            
-            if model == '' or model is None:
-                self.motor_dev = None
-                return
-            
-            self.motor_dev = taurus.Device(model)
-            
-            # CONFIGURE A LISTENER IN ORDER TO UPDATE LIMIT SWITCHES STATES
-            self.limits_listener = TaurusAttributeListener()
-            if self.hasHwLimits():
-                self.connect(self.limits_listener, Qt.SIGNAL('eventReceived'), self.updateLimits)
-                self.motor_dev.getAttribute('Limit_Switches').addListener(self.limits_listener)
-
-            # CONFIGURE AN EVENT RECEIVER IN ORDER TO PROVIDE POWERON <- True/False EXPERT OPERATION
-            self.poweron_listener = TaurusAttributeListener()
-            if self.hasPowerOn():
-                self.connect(self.poweron_listener, Qt.SIGNAL('eventReceived'), self.updatePowerOn)
-                self.motor_dev.getAttribute('PowerOn').addListener(self.poweron_listener)
-
-            # CONFIGURE AN EVENT RECEIVER IN ORDER TO UPDATED STATUS TOOLTIP
-            self.status_listener = TaurusAttributeListener()
-            self.connect(self.status_listener, Qt.SIGNAL('eventReceived'), self.updateStatus)
-            self.motor_dev.getAttribute('Status').addListener(self.status_listener)
-            
-            # CONFIGURE AN EVENT RECEIVER IN ORDER TO ACTIVATE LIMIT BUTTONS ON SOFTWARE LIMITS
-            self.position_listener = TaurusAttributeListener()
-            self.connect(self.position_listener, Qt.SIGNAL('eventReceived'), self.updatePosition)
-            self.motor_dev.getAttribute('Position').addListener(self.position_listener)
-            
-            self.motor_dev.getAttribute('Position').enablePolling(force=True)
-
-            self.setExpertView(self._expertView)
-        except Exception,e:
-            self.warning("Exception caught while setting model: %s",repr(e))
-            self.motor_dev = None
-            return
-
-    def hasPowerOn(self):
-        try: return hasattr(self.motor_dev, 'PowerOn')
-        except: return False
-
-    def hasHwLimits(self):
-        try: return hasattr(self.motor_dev, 'Limit_Switches')
-        except: return False
-
-    def updateLimits(self, limits, position=None):
-        if isinstance(limits, dict): limits = limits["limits"]
-        limits = list(limits)
-        HOME = 0
-        POS = 1
-        NEG = 2
-
-        # Check also if the software limit is 'active'
-        if self.motor_dev is not None:
-            position_attribute = self.motor_dev.getAttribute('Position')
-            if position is None:
-                position = position_attribute.read().value
-            max_value_str = position_attribute.max_value
-            min_value_str = position_attribute.min_value
-            try:
-                max_value = float(max_value_str)
-                limits[POS] = limits[POS] or (position >= max_value)
-            except:
-                pass
-            try:
-                min_value = float(min_value_str)
-                limits[NEG] = limits[NEG] or (position <= min_value)
-            except:
-                pass
-            
-        pos_lim = limits[POS]
-        
-        pos_btnstylesheet = ''
-        enabled = True
-        if pos_lim:
-            pos_btnstylesheet = 'QPushButton{%s}'%DEVICE_STATE_PALETTE.qtStyleSheet(PyTango.DevState.ALARM)
-            enabled = False
-        self.readWidget().btn_lim_pos.setStyleSheet(pos_btnstylesheet)
-
-        self.writeWidget().btn_step_up.setEnabled(enabled)
-        self.writeWidget().btn_step_up.setStyleSheet(pos_btnstylesheet)
-        self.writeWidget().btn_to_pos.setEnabled(enabled)
-        self.writeWidget().btn_to_pos_press.setEnabled(enabled)
-
-        neg_lim = limits[NEG]
-        neg_btnstylesheet = ''
-        enabled = True
-        if neg_lim:
-            neg_btnstylesheet = 'QPushButton{%s}'%DEVICE_STATE_PALETTE.qtStyleSheet(PyTango.DevState.ALARM)
-            enabled = False
-        self.readWidget().btn_lim_neg.setStyleSheet(neg_btnstylesheet)
-
-        self.writeWidget().btn_step_down.setEnabled(enabled)
-        self.writeWidget().btn_step_down.setStyleSheet(neg_btnstylesheet)
-        self.writeWidget().btn_to_neg.setEnabled(enabled)
-        self.writeWidget().btn_to_neg_press.setEnabled(enabled)
-
-    def updatePowerOn(self, poweron):
-        btn_text = 'Set ON'
-        if poweron:
-            btn_text = 'Set OFF'
-        self.labelWidget().btn_poweron.setText(btn_text)
-        
-
-    def updateStatus(self, status):
-        # SHOULD THERE BE A BETTER METHOD FOR THIS UPDATE?
-        # IF THIS IS NOT DONE, THE TOOLTIP IS NOT CALCULATED EVERY TIME
-        # TaurusLabel.updateStyle DIDN'T WORK, SO I HAD TO GO DEEPER TO THE CONTROLLER...
-        #self.labelWidget().lbl_alias.updateStyle()
-        self.labelWidget().lbl_alias.controllerUpdate()
-        
-    def updatePosition(self, position):
-        # we do not need the position for nothing...
-        # we just want to check if any software limit is 'active'
-        # and updateLimits takes care of it
-        if self.motor_dev is not None:
-            limit_switches = [False, False, False]
-            if self.hasHwLimits():
-                limit_switches = self.motor_dev.getAttribute('Limit_switches').read().value
-                #print "update limits", limit_switches
-            self.updateLimits(limit_switches, position=position)
-        
-    def hasEncoder(self):
-        try: return hasattr(self.motor_dev, 'Encoder')
-        except: return False
-
-    def showTangoAttributes(self):
-        model = self.getModel()
-        taurus_attr_form = TaurusAttrForm()
-        taurus_attr_form.setMinimumSize(Qt.QSize(555,800))
-        taurus_attr_form.setModel(model)
-        taurus_attr_form.setWindowTitle('%s Tango Attributes'%taurus.Factory().getDevice(model).getSimpleName())
-        taurus_attr_form.show()
-        
-    ### def showEvent(self, event):
-    ###     TaurusValue.showEvent(self, event)
-    ###     if self.motor_dev is not None:
-    ###         self.motor_dev.getAttribute('Position').enablePolling(force=True)
-    ### 
-    ### def hideEvent(self, event):
-    ###     TaurusValue.hideEvent(self, event)
-    ###     if self.motor_dev is not None:
-    ###         self.motor_dev.getAttribute('Position').disablePolling()
-
-###################################################
-# A SIMPLER WIDGET THAT MAY BE USED OUTSIDE FORMS #
-###################################################
-
-class PoolMotor(TaurusFrame):
-    ''' A widget that displays and controls a pool Motor device.
-    '''
-    def __init__(self, parent = None, designMode = False):
-        TaurusFrame.__init__(self, parent, designMode)
-        
-        self.setLayout(Qt.QGridLayout())
-        self.layout().setContentsMargins(0,0,0,0)
-        self.layout().setSpacing(0)
-
-        self.setFrameShape(Qt.QFrame.Box)
-
-        self.pool_motor_tv = PoolMotorTV(self)
-
-    def setModel(self, model):
-        self.pool_motor_tv.setModel(model)
-        try: self.motor_dev = taurus.Device(model)
-        except: return
-
-def main():
-
-    import sys
-    import taurus.qt.qtgui.application
-    import taurus.core.util.argparse
-    from taurus.qt.qtgui.panel import TaurusForm
-
-    parser = taurus.core.util.argparse.get_taurus_parser()
-    parser.usage = "%prog [options] [<motor1> [<motor2>] ...]"
-
-    app = taurus.qt.qtgui.application.TaurusApplication(cmd_line_parser=parser)
-    args = app.get_command_line_args()
-
-    #models = ['tango://controls02:10000/motor/gcipap10ctrl/8']
-    models = ['motor/motctrl06/3']
-    
-    if len(args)>0:
-        models = args
-
-    w = Qt.QWidget()
-    w.setLayout(Qt.QVBoxLayout())
-
-    tests = []
-    tests.append(1)
-    tests.append(2)
-    tests.append(3)
-
-    # 1) Test PoolMotorSlim motor widget
-    form_pms = TaurusForm()
-    pms_widget_class = 'taurus.qt.qtgui.extra_pool.PoolMotorSlim'
-    pms_tgclass_map = {'SimuMotor':(pms_widget_class,(),{}),
-                       'Motor':(pms_widget_class,(),{}),
-                       'PseudoMotor':(pms_widget_class,(),{})}
-    form_pms.setCustomWidgetMap(pms_tgclass_map)
-    if 1 in tests:
-        form_pms.setModel(models)
-        w.layout().addWidget(form_pms)
-
-    # 2) Test PoolMotorTV motor widget
-    form_tv = TaurusForm()
-    tv_widget_class = 'taurus.qt.qtgui.extra_pool.PoolMotorTV'
-    tv_tgclass_map = {'SimuMotor':(tv_widget_class,(),{}),
-                      'Motor':(tv_widget_class,(),{}),
-                      'PseudoMotor':(tv_widget_class,(),{})}
-    form_tv.setCustomWidgetMap(tv_tgclass_map)
-
-    if 2 in tests:
-        form_tv.setModel(models)
-        w.layout().addWidget(form_tv)
-
-
-    # 3) Test Stand-Alone PoolMotor widget
-    # New approach would be to let PoolMotorTV live outside a TaurusForm.... but inside a GridLayout
-    # Carlos already said this is not a good approach but... 
-        for motor in models:
-            motor_widget = PoolMotor()
-            motor_widget.setModel(motor)
-            w.layout().addWidget(motor_widget)
-
-    w.show()
-
-    sys.exit(app.exec_())
-
-if __name__ == '__main__':
-    main()
diff --git a/lib/taurus/qt/qtgui/extra_pool/poolmotor.py.tests b/lib/taurus/qt/qtgui/extra_pool/poolmotor.py.tests
deleted file mode 100644
index 809ff43..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/poolmotor.py.tests
+++ /dev/null
@@ -1,460 +0,0 @@
-
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Tau, a Tango User Interface Library
-##
-## http://www.tango-controls.org/static/tau/latest/doc/html/index.html
-##
-## (copyleft) CELLS / ALBA Synchrotron, Bellaterra, Spain
-##
-## This is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 3 of the License, or
-## (at your option) any later version.
-##
-## This software is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, see <http://www.gnu.org/licenses/>.
-###########################################################################
-
-from taurus.qt import QtCore, QtGui, Qt
-import PyTango
-import tau
-from tau.widget import TauBaseWidget
-from ui_poolmotorslim import Ui_PoolMotorSlim
-
-import sys
-import copy
-
-class LimitsListener(QtCore.QObject):
-    def __init__(self):
-        QtCore.QObject.__init__(self)
-        
-    def eventReceived(self, evt_src, evt_type, evt_value):
-        if evt_type not in [tau.core.TauEventType.Change, tau.core.TauEventType.Periodic]:
-            return
-        limits = evt_value.value
-        self.emit(Qt.SIGNAL('updateLimits'), limits)
-
-class PoolMotorClient():
-
-    maxint_in_32_bits = 2147483647
-    def __init__(self):
-        self.motor_dev = None
-
-    def setMotor(self, pool_motor_dev_name):
-        # AT SOME POINT THIS WILL BE USING THE 'POOL' TAU EXTENSION
-        # TO OPERATE THE MOTOR INSTEAD OF A 'TANGO' TAUDEVICE
-        try:
-            self.motor_dev = tau.Device(pool_motor_dev_name)
-            pool_ds_id = self.motor_dev.getHWObj().info().server_id
-            tau_db = tau.Database()
-            pool_devices = tuple(tau_db.get_device_class_list(pool_ds_id).value_string)
-            pool_dev_name = pool_devices[pool_devices.index('Pool') - 1]
-            self.pool_dev = tau.Factory().getDevice(pool_dev_name)
-            # IT IS IMPORTANT TO KNOW IF IT IS AN ICEPAP MOTOR, SO EXTRA FEATURES CAN BE PROVIDED
-            # PENDING.
-        except Exception,e:
-            print 'NOT A POOL MOTOR, BUT LET\'S CHECK IT HAS POSITION ATTRIBUTE AND ABORT COMMAND...\n'+str(e)
-        
-    def moveMotor(self, pos):
-        self.motor_dev['position'] = pos
-        
-    def moveInc(self, inc):
-        self.moveMotor(self.motor_dev['position'].value + inc)
-        
-    def jogNeg(self):
-        neg_limit = - ( (self.maxint_in_32_bits / 2) - 1)
-        try:
-            min_value = self.motor_dev.getAttribute('Position').getConfig().getValueObj().min_value
-            neg_limit = float(min_value)
-        except Exception,e:
-            pass
-        self.moveMotor(neg_limit)
-        
-    def jogPos(self):
-        pos_limit = (self.maxint_in_32_bits / 2) - 1
-        try:
-            max_value = self.motor_dev.getAttribute('Position').getConfig().getValueObj().max_value
-            pos_limit = float(max_value)
-        except Exception,e:
-            pass
-        self.moveMotor(pos_limit)
-
-    def goHome(self):
-        pass
-
-    def abort(self):
-        self.motor_dev.abort()
-
-    def getPoolMotors(self):
-        pool_motors = []
-        try:
-            pool_motors = [ motor_info.split(' ')[0] for motor_info in self.pool_dev['MotorList'].value]
-            pool_motors.sort()
-        except:
-            print 'Can not find pool motors...'
-        return pool_motors
-        
-
-class PoolMotorSlim(QtGui.QWidget, PoolMotorClient):
-
-    __pyqtSignals__ = ("modelChanged(const QString &)",)
-
-    def __init__(self, parent = None, designMode = False):
-        QtGui.QWidget.__init__(self, parent)
-        #self.call__init__wo_kw(QtGui.QWidget, parent)
-        #self.call__init__(TauBaseWidget, str(self.objectName()), designMode=designMode)
-        PoolMotorClient.__init__(self)
-        self.show_context_menu = True
-        self.show_pool_motors = True
-        
-        self.setAcceptDrops(True)
-
-        self.ui = Ui_PoolMotorSlim()
-        self.ui.setupUi(self)
-
-        # CREATE THE TauValue that can not be configured in the Designer
-        self.tau_value = tau.widget.TauValue(self.ui.tauValueContainer)
-        self.tau_value.setModel('/Position')
-        self.tau_value.setUseParentModel(True)
-        self.tau_value.setLabelWidgetClass(None)
-
-        # THIS WILL BE DONE IN THE DESIGNER
-        # Config Button will launch a TauAttrForm
-        tau_attr_form = tau.widget.TauAttrForm()
-        tau_attr_form.setViewFilters([lambda x: x.name.lower() in ['state', 'status', 'position', 'velocity', 'acceleration', 'dialposition', 'offset', 'step_per_unit', 'backlash', 'poweron', 'position_register', 'posencin', 'posinpos', 'posabsenc', 'encencin', 'encinpos', 'encabsenc', 'pulses_per_unit', 'powerinfo', 'positionsource', 'positionsourceformula', 'statusdriverboard', 'statusdisable', 'statushome', 'statuslim+', 'statuslim-', 'statusmoving', 'statusoutofwin', 'statusready', ' [...]
-        tau_attr_form.setMinimumSize(Qt.QSize(300,550))
-        self.ui.btnCfg.setWidget(tau_attr_form)
-        self.ui.btnCfg.setUseParentModel(True)
-
-        # ADD AN EVENT FILTER FOR THE STATUS LABEL IN ORDER TO PROVIDE JUST THE STRING FROM THE CONTROLLER (LAST LINE)
-        def just_ctrl_status_line(evt_src, evt_type, evt_value):
-            if evt_type not in [tau.core.TauEventType.Change, tau.core.TauEventType.Periodic]:
-                return evt_src, evt_type, evt_value
-            try:
-                status = evt_value.value
-                last_line = status.split('\n')[-1]
-                new_evt_value = PyTango.DeviceAttribute(evt_value)
-                new_evt_value.value = last_line
-                return evt_src, evt_type, new_evt_value
-            except:
-                return evt_src, evt_type, evt_value
-        self.ui.lblStatus.insertEventFilter(just_ctrl_status_line)
-
-        # HOMING NOT IMPLMENTED YET
-        self.ui.btnHome.setEnabled(False)
-
-        # DEFAULT VISIBLE COMPONENTS
-        self.toggleHideAll()
-        self.toggleMoveAbsolute(True)
-        self.toggleMoveRelative(True)
-        self.toggleStopMove(True)
-
-        self.ui.motorGroupBox.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
-        self.connect(self.ui.motorGroupBox, QtCore.SIGNAL('customContextMenuRequested(QPoint)'), self.buildContextMenu)
-        
-        self.connect(self.ui.btnGoToNeg, QtCore.SIGNAL('clicked()'), self.jogNeg)
-        self.connect(self.ui.btnGoToNegPress, QtCore.SIGNAL('pressed()'), self.jogNeg)
-        self.connect(self.ui.btnGoToNegPress, QtCore.SIGNAL('released()'), self.abort)
-        self.connect(self.ui.btnGoToNegInc, QtCore.SIGNAL('clicked()'), self.goToNegInc)
-        self.connect(self.ui.btnGoToPos, QtCore.SIGNAL('clicked()'), self.jogPos)
-        self.connect(self.ui.btnGoToPosPress, QtCore.SIGNAL('pressed()'), self.jogPos)
-        self.connect(self.ui.btnGoToPosPress, QtCore.SIGNAL('released()'), self.abort)
-        self.connect(self.ui.btnGoToPosInc, QtCore.SIGNAL('clicked()'), self.goToPosInc)
-
-        self.connect(self.ui.btnHome, QtCore.SIGNAL('clicked()'), self.goHome)
-        self.connect(self.ui.btnStop, QtCore.SIGNAL('clicked()'), self.abort)
-
-    def updateLimits(self, limits):
-        pos_lim = limits[1]
-        pos_stylesheet = ''
-        if pos_lim:
-            pos_stylesheet = 'QPushButton{%s}'%tau.core.util.DEVICE_STATE_PALETTE.qtStyleSheet(PyTango.DevState.ALARM)
-        self.ui.btnGoToPos.setStyleSheet(pos_stylesheet)
-        self.ui.btnGoToPosPress.setStyleSheet(pos_stylesheet)
-        self.ui.btnGoToPosInc.setStyleSheet(pos_stylesheet)
-        
-        neg_lim = limits[2]
-        neg_stylesheet = ''
-        if neg_lim:
-            neg_stylesheet = 'QPushButton{%s}'%tau.core.util.DEVICE_STATE_PALETTE.qtStyleSheet(PyTango.DevState.ALARM)
-        self.ui.btnGoToNeg.setStyleSheet(neg_stylesheet)
-        self.ui.btnGoToNegPress.setStyleSheet(neg_stylesheet)
-        self.ui.btnGoToNegInc.setStyleSheet(neg_stylesheet)
-
-    def sizeHint(self):
-        return QtCore.QSize(600,30)
-
-    def goToNegInc(self):
-        self.moveInc(-1 * self.ui.inc.value())
-        
-    def goToPosInc(self):
-        self.moveInc(self.ui.inc.value())
-        
-    def buildContextMenu(self, point):
-        if not self.show_context_menu:
-            return
-        menu = Qt.QMenu(self)
-
-        motors = self.getPoolMotors()
-        if  len(motors) > 0 and self.show_pool_motors:
-            motors_menu = Qt.QMenu('Change motor...',self)
-            for motor in self.getPoolMotors():
-                action_change_motor = Qt.QAction(self)
-                action_change_motor.setText(motor)
-                motors_menu.addAction(action_change_motor)
-                self.connect(action_change_motor, QtCore.SIGNAL('triggered()'), lambda model=motor: self.setModel(model))
-            menu.addMenu(motors_menu)
-
-        action_hide_all = Qt.QAction(self)
-        action_hide_all.setText('Hide All')
-        menu.addAction(action_hide_all)
-
-        action_show_all = Qt.QAction(self)
-        action_show_all.setText('Show All')
-        menu.addAction(action_show_all)
-
-        action_move_absolute = Qt.QAction(self)
-        action_move_absolute.setText('Move Absolute')
-        action_move_absolute.setCheckable(True)
-        action_move_absolute.setChecked(self.tau_value.writeWidget().isVisible())
-        menu.addAction(action_move_absolute)
-
-        action_move_relative = Qt.QAction(self)
-        action_move_relative.setText('Move Relative')
-        action_move_relative.setCheckable(True)
-        action_move_relative.setChecked(self.ui.inc.isVisible())
-        menu.addAction(action_move_relative)
-
-        action_move_continuous = Qt.QAction(self)
-        action_move_continuous.setText('Move Continuous')
-        action_move_continuous.setCheckable(True)
-        action_move_continuous.setChecked(self.ui.btnGoToNegPress.isVisible())
-        menu.addAction(action_move_continuous)
-
-        action_move_to_limits = Qt.QAction(self)
-        action_move_to_limits.setText('Move to Limits')
-        action_move_to_limits.setCheckable(True)
-        action_move_to_limits.setChecked(self.ui.btnGoToNeg.isVisible())
-        menu.addAction(action_move_to_limits)
-
-        action_stop_move = Qt.QAction(self)
-        action_stop_move.setText('Stop Movement')
-        action_stop_move.setCheckable(True)
-        action_stop_move.setChecked(self.ui.btnStop.isVisible())
-        menu.addAction(action_stop_move)
-
-        action_homing = Qt.QAction(self)
-        action_homing.setText('Homing')
-        action_homing.setCheckable(True)
-        action_homing.setChecked(self.ui.btnHome.isVisible())
-        menu.addAction(action_homing)
-        
-        action_config = Qt.QAction(self)
-        action_config.setText('Config')
-        action_config.setCheckable(True)
-        action_config.setChecked(self.ui.btnCfg.isVisible())
-        menu.addAction(action_config)
-        
-        action_status = Qt.QAction(self)
-        action_status.setText('Status')
-        action_status.setCheckable(True)
-        action_status.setChecked(self.ui.lblStatus.isVisible())
-        menu.addAction(action_status)
-        
-        self.connect(action_hide_all, QtCore.SIGNAL('triggered()'), self.toggleHideAll)
-        self.connect(action_show_all, QtCore.SIGNAL('triggered()'), self.toggleShowAll)
-        self.connect(action_move_absolute, QtCore.SIGNAL('toggled(bool)'), self.toggleMoveAbsolute)
-        self.connect(action_move_relative, QtCore.SIGNAL('toggled(bool)'), self.toggleMoveRelative)
-        self.connect(action_move_continuous, QtCore.SIGNAL('toggled(bool)'), self.toggleMoveContinuous)
-        self.connect(action_move_to_limits, QtCore.SIGNAL('toggled(bool)'), self.toggleMoveToLimits)
-        self.connect(action_stop_move, QtCore.SIGNAL('toggled(bool)'), self.toggleStopMove)
-        self.connect(action_homing, QtCore.SIGNAL('toggled(bool)'), self.toggleHoming)
-        self.connect(action_config, QtCore.SIGNAL('toggled(bool)'), self.toggleConfig)
-        self.connect(action_status, QtCore.SIGNAL('toggled(bool)'), self.toggleStatus)
-        
-        menu.popup(self.cursor().pos())
-
-    def toggleHideAll(self):
-        self.toggleAll(False)
-
-    def toggleShowAll(self):
-        self.toggleAll(True)
-
-    def toggleAll(self, visible):
-        self.toggleMoveAbsolute(visible)
-        self.toggleMoveRelative(visible)
-        self.toggleMoveContinuous(visible)
-        self.toggleMoveToLimits(visible)
-        self.toggleStopMove(visible)
-        self.toggleHoming(visible)
-        self.toggleConfig(visible)
-        self.toggleStatus(visible)
-
-    def toggleMoveAbsolute(self, visible):
-        self.tau_value.writeWidget().setVisible(visible)
-
-    def toggleMoveRelative(self, visible):
-        self.ui.btnGoToNegInc.setVisible(visible)
-        self.ui.inc.setVisible(visible)
-        self.ui.btnGoToPosInc.setVisible(visible)
-
-    def toggleMoveContinuous(self, visible):
-        self.ui.btnGoToNegPress.setVisible(visible)
-        self.ui.btnGoToPosPress.setVisible(visible)
-
-    def toggleMoveToLimits(self, visible):
-        self.ui.btnGoToNeg.setVisible(visible)
-        self.ui.btnGoToPos.setVisible(visible)
-
-    def toggleStopMove(self, visible):
-        self.ui.btnStop.setVisible(visible)
-
-    def toggleHoming(self, visible):
-        self.ui.btnHome.setVisible(visible)
-
-    def toggleConfig(self, visible):
-        self.ui.btnCfg.setVisible(visible)
-
-    def toggleStatus(self, visible):
-        self.ui.lblStatus.setVisible(visible)
-
-    def dragEnterEvent(self, event):
-        event.accept()
-        
-    def dropEvent(self, event):
-        model = str(event.mimeData().text())
-        self.setModel(model)
-
-    def keyPressEvent(self, key_event):
-        if key_event.key() == Qt.Qt.Key_Escape:
-            self.abort()
-
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # QT properties 
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    @QtCore.pyqtSignature("getModel()")
-    def getModel(self):
-        return self.ui.motorGroupBox.getModel()
-
-    @QtCore.pyqtSignature("setModel(QString)")
-    def setModel(self, model):
-        # DUE TO A BUG IN TAUGROUPBOX, WE NEED THE FULL MODEL NAME
-        try:
-            model = tau.Factory().getDevice(model).getFullName()
-            self.setMotor(model)
-            self.ui.motorGroupBox.setModel(model)
-            self.ui.motorGroupBox.setEnabled(True)
-            
-            # CONFIGURE A LISTENER IN ORDER TO UPDATE LIMIT SWITCHES STATES
-            self.limits_listener = LimitsListener()
-            self.connect(self.limits_listener, QtCore.SIGNAL('updateLimits'), self.updateLimits)
-            self.motor_dev.getAttribute('Limit_switches').addListener(self.limits_listener)
-        except:
-            self.ui.motorGroupBox.setEnabled(False)
-        
-    @QtCore.pyqtSignature("resetModel()")
-    def resetModel(self):
-        self.ui.motorGroupBox.resetModel()
-
-    @QtCore.pyqtSignature("getShowContextMenu()")
-    def getShowContextMenu(self):
-        return self.show_context_menu
-
-    @QtCore.pyqtSignature("setShowContextMenu(bool)")
-    def setShowContextMenu(self, showContextMenu):
-        self.show_context_menu = showContextMenu
-
-    @QtCore.pyqtSignature("resetShowContextMenu()")
-    def resetShowContextMenu(self):
-        self.show_context_menu = True
-
-    @QtCore.pyqtSignature("getShowPoolMotors()")
-    def getShowPoolMotors(self):
-        return self.show_pool_motors
-
-    @QtCore.pyqtSignature("setShowPoolMotors(bool)")
-    def setShowPoolMotors(self, showPoolMotors):
-        self.show_pool_motors = showPoolMotors
-
-    @QtCore.pyqtSignature("resetShowPoolMotors()")
-    def resetShowPoolMotors(self):
-        self.show_pool_motors = True
-
-    @QtCore.pyqtSignature("getStepSize()")
-    def getStepSize(self):
-        return self.ui.inc.value()
-
-    @QtCore.pyqtSignature("setStepSize(double)")
-    def setStepSize(self, stepSize):
-        self.ui.inc.setValue(stepSize)
-
-    @QtCore.pyqtSignature("resetStepSize()")
-    def resetStepSize(self):
-        self.setStepSize(1)
-
-    @QtCore.pyqtSignature("getStepSizeIncrement()")
-    def getStepSizeIncrement(self):
-        return self.ui.inc.singleStep()
-
-    @QtCore.pyqtSignature("setStepSizeIncrement(double)")
-    def setStepSizeIncrement(self, stepSizeIncrement):
-        self.ui.inc.setSingleStep(stepSizeIncrement)
-
-    @QtCore.pyqtSignature("resetStepSizeIncrement()")
-    def resetStepSizeIncrement(self):
-        self.setStepSizeIncrement(1)
-
-    model = QtCore.pyqtProperty("QString", getModel,setModel,resetModel)
-    showPoolMotors = QtCore.pyqtProperty("bool", getShowPoolMotors,setShowPoolMotors,resetShowPoolMotors)
-    stepSize = QtCore.pyqtProperty("bool", getStepSize,setStepSize,resetStepSize)
-    stepSizeIncrement = QtCore.pyqtProperty("bool", getStepSizeIncrement,setStepSizeIncrement,resetStepSizeIncrement)
-
-if __name__ == '__main__':
-    app = QtGui.QApplication(sys.argv)
-    qw = QtGui.QWidget()
-    qw.setLayout(QtGui.QVBoxLayout())
-
-    tau.setLogLevel(tau.Debug)
-    
-    motors = ['tango://controls02:10000/motor/gc_ipap_ctrl/1', 'tango://controls02:10000/motor/gc_dummymot_ctrl/1']
-    if len(sys.argv)>1:
-        motors = sys.argv[1:]
-    
-    # A QTIMER IS SET TO DETECT IF THE APPLICATION STARTED PROPERLY
-    # WE HAVE A GHOST BUG THAT 'SOMETIMES' MAKE THE APPLICATIONS NOT START
-    # IF THIS IS THE CASE, THE APPLICATION WILL EXIT LEAVING A MESSAGE TO THE USER.
-    # WE GUARANTEE A STARTUP TIME OF 2" OF STARTUP + 0.1" per PMS
-    APP_STARTED = False
-    def check_app_started():
-        print 'CHECKING TIMER.....'
-        if not APP_STARTED:
-            print 'There was an startup error (Known Bug), please, try again.'
-            QtGui.QApplication.instance().exit(1)
-        # FOR THE TESTS WE WANT, THE IDEA IS TO KEEP THE LOGS IF IT HANGS, JUST THE OPOSITE
-        else:
-            print "........................................................................................................."
-            print "NORMAL STATE, WE SHOULD KEEP THE APPLICATION RUNNING BUT SINCE WE ARE TESTING 'NOT NORMAL STATES' WE EXIT"
-            print "........................................................................................................."
-            sys.exit(1)
-    timer = Qt.QTimer()
-    time_to_wait = 2000+len(motors)*0.1
-    timer.singleShot(time_to_wait, check_app_started)
-
-    
-    for motor in motors:
-        pms = PoolMotorSlim()
-        pms.setStepSize(1000)
-        pms.setStepSizeIncrement(1000)
-        qw.layout().addWidget(pms)
-        pms.setModel(motor)
-    qw.show()
-    APP_STARTED = True
-    sys.exit(app.exec_())
diff --git a/lib/taurus/qt/qtgui/extra_pool/ui/AppleiiPLCTemperature.ui b/lib/taurus/qt/qtgui/extra_pool/ui/AppleiiPLCTemperature.ui
deleted file mode 100644
index d7719db..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/ui/AppleiiPLCTemperature.ui
+++ /dev/null
@@ -1,211 +0,0 @@
-<ui version="4.0">
- <class>AppleiiPLCTemperature</class>
- <widget class="QWidget" name="AppleiiPLCTemperature">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>238</width>
-    <height>30</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <layout class="QGridLayout">
-   <property name="leftMargin">
-    <number>0</number>
-   </property>
-   <property name="topMargin">
-    <number>0</number>
-   </property>
-   <property name="rightMargin">
-    <number>0</number>
-   </property>
-   <property name="bottomMargin">
-    <number>0</number>
-   </property>
-   <property name="horizontalSpacing">
-    <number>0</number>
-   </property>
-   <property name="verticalSpacing">
-    <number>0</number>
-   </property>
-   <item row="0" column="0">
-    <widget class="TaurusGroupBox" name="TaurusGroupBox">
-     <property name="showText">
-      <bool>false</bool>
-     </property>
-     <layout class="QGridLayout">
-      <property name="leftMargin">
-       <number>0</number>
-      </property>
-      <property name="topMargin">
-       <number>0</number>
-      </property>
-      <property name="rightMargin">
-       <number>0</number>
-      </property>
-      <property name="bottomMargin">
-       <number>0</number>
-      </property>
-      <property name="horizontalSpacing">
-       <number>0</number>
-      </property>
-      <property name="verticalSpacing">
-       <number>0</number>
-      </property>
-      <item row="0" column="0">
-       <layout class="QHBoxLayout">
-        <item>
-         <widget class="TaurusBoolLed" name="TemperatureInterlock">
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-          <property name="ledColor">
-           <string>RED</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <spacer>
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint">
-           <size>
-            <width>20</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-        <item>
-         <widget class="TaurusConfigLabel" name="TemperatureLabel">
-          <property name="minimumSize">
-           <size>
-            <width>50</width>
-            <height>22</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>50</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-          <property name="prefixText">
-           <string/>
-          </property>
-          <property name="model">
-           <string/>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="TaurusValueLabel" name="TemperatureValue">
-          <property name="sizePolicy">
-           <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="minimumSize">
-           <size>
-            <width>50</width>
-            <height>22</height>
-           </size>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-          <property name="model">
-           <string/>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="TaurusConfigLabel" name="TemperatureUnits">
-          <property name="minimumSize">
-           <size>
-            <width>35</width>
-            <height>22</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>35</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-          <property name="prefixText">
-           <string/>
-          </property>
-          <property name="model">
-           <string/>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <spacer>
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint">
-           <size>
-            <width>20</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-        <item>
-         <widget class="QToolButton" name="TemperatureConfiguration">
-          <property name="text">
-           <string>Cfg</string>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-     </layout>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>TaurusGroupBox</class>
-   <extends>QGroupBox</extends>
-   <header>taurus.qt.qtgui.container</header>
-   <container>1</container>
-  </customwidget>
-  <customwidget>
-   <class>TaurusBoolLed</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusConfigLabel</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusValueLabel</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
-
diff --git a/lib/taurus/qt/qtgui/extra_pool/ui/AppleiiPLCTemperatureAlarms.ui b/lib/taurus/qt/qtgui/extra_pool/ui/AppleiiPLCTemperatureAlarms.ui
deleted file mode 100644
index 8742bb4..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/ui/AppleiiPLCTemperatureAlarms.ui
+++ /dev/null
@@ -1,255 +0,0 @@
-<ui version="4.0">
- <class>AppleiiPLCTemperatureAlarms</class>
- <widget class="QWidget" name="AppleiiPLCTemperatureAlarms">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>275</width>
-    <height>191</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <layout class="QGridLayout">
-   <property name="leftMargin">
-    <number>0</number>
-   </property>
-   <property name="topMargin">
-    <number>0</number>
-   </property>
-   <property name="rightMargin">
-    <number>0</number>
-   </property>
-   <property name="bottomMargin">
-    <number>0</number>
-   </property>
-   <property name="horizontalSpacing">
-    <number>0</number>
-   </property>
-   <property name="verticalSpacing">
-    <number>0</number>
-   </property>
-   <item row="0" column="0">
-    <widget class="TaurusGroupBox" name="TaurusGroupBox">
-     <property name="showText">
-      <bool>false</bool>
-     </property>
-     <layout class="QGridLayout">
-      <item row="0" column="0">
-       <layout class="QGridLayout">
-        <item row="0" column="0">
-         <widget class="QLabel" name="label">
-          <property name="text">
-           <string>Alarm Up</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="1">
-         <widget class="TaurusValueLineEdit" name="AlarmUp">
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="2">
-         <widget class="Line" name="line">
-          <property name="minimumSize">
-           <size>
-            <width>100</width>
-            <height>0</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>100</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="0">
-         <widget class="QLabel" name="label_2">
-          <property name="text">
-           <string>Warning Up</string>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="1">
-         <widget class="TaurusValueLineEdit" name="WarningUp">
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-          <property name="showQuality">
-           <bool>false</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="2">
-         <widget class="Line" name="line_2">
-          <property name="minimumSize">
-           <size>
-            <width>100</width>
-            <height>0</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>100</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-         </widget>
-        </item>
-        <item row="2" column="1">
-         <widget class="TaurusConfigLabel" name="TemperatureLabel">
-          <property name="minimumSize">
-           <size>
-            <width>0</width>
-            <height>20</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>16777215</width>
-            <height>20</height>
-           </size>
-          </property>
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="2" column="2">
-         <widget class="TaurusValueLabel" name="TemperatureValue">
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="3" column="0">
-         <widget class="QLabel" name="label_3">
-          <property name="text">
-           <string>Warning Down</string>
-          </property>
-         </widget>
-        </item>
-        <item row="3" column="1">
-         <widget class="TaurusValueLineEdit" name="WarningDown">
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="3" column="2">
-         <widget class="Line" name="line_4">
-          <property name="minimumSize">
-           <size>
-            <width>100</width>
-            <height>0</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>100</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-         </widget>
-        </item>
-        <item row="4" column="0">
-         <widget class="QLabel" name="label_4">
-          <property name="text">
-           <string>Alarm Down</string>
-          </property>
-         </widget>
-        </item>
-        <item row="4" column="1">
-         <widget class="TaurusValueLineEdit" name="AlarmDown">
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-         </widget>
-        </item>
-        <item row="4" column="2">
-         <widget class="Line" name="line_5">
-          <property name="minimumSize">
-           <size>
-            <width>100</width>
-            <height>0</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>100</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-         </widget>
-        </item>
-        <item row="5" column="0">
-         <widget class="QPushButton" name="ApplyButton">
-          <property name="text">
-           <string>Apply</string>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-     </layout>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>TaurusGroupBox</class>
-   <extends>QGroupBox</extends>
-   <header>taurus.qt.qtgui.container</header>
-   <container>1</container>
-  </customwidget>
-  <customwidget>
-   <class>TaurusValueLineEdit</class>
-   <extends>QLineEdit</extends>
-   <header>taurus.qt.qtgui.input</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusConfigLabel</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusValueLabel</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
-
diff --git a/lib/taurus/qt/qtgui/extra_pool/ui/PoolMotorSlim.ui b/lib/taurus/qt/qtgui/extra_pool/ui/PoolMotorSlim.ui
deleted file mode 100644
index eace021..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/ui/PoolMotorSlim.ui
+++ /dev/null
@@ -1,375 +0,0 @@
-<ui version="4.0">
- <class>PoolMotorSlim</class>
- <widget class="QDialog" name="PoolMotorSlim">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>487</width>
-    <height>61</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Dialog</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout_2">
-   <property name="margin">
-    <number>0</number>
-   </property>
-   <property name="spacing">
-    <number>0</number>
-   </property>
-   <item row="0" column="0">
-    <widget class="TaurusGroupBox" name="motorGroupBox">
-     <property name="sizePolicy">
-      <sizepolicy vsizetype="Fixed" hsizetype="Preferred">
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="showText" stdset="0">
-      <bool>false</bool>
-     </property>
-     <layout class="QGridLayout" name="gridLayout">
-      <property name="margin">
-       <number>0</number>
-      </property>
-      <property name="spacing">
-       <number>0</number>
-      </property>
-      <item row="0" column="0">
-       <widget class="QWidget" native="1" name="taurusValueContainer">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Preferred" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1">
-       <layout class="QHBoxLayout" name="horizontalLayout">
-        <property name="spacing">
-         <number>0</number>
-        </property>
-        <item>
-         <widget class="QPushButton" name="btnMin">
-          <property name="sizePolicy">
-           <sizepolicy vsizetype="Maximum" hsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>20</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="toolTip">
-           <string>Negative limit</string>
-          </property>
-          <property name="text">
-           <string>-</string>
-          </property>
-          <property name="autoDefault">
-           <bool>true</bool>
-          </property>
-          <property name="flat">
-           <bool>false</bool>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QPushButton" name="btnGoToNeg">
-          <property name="sizePolicy">
-           <sizepolicy vsizetype="Maximum" hsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>20</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="toolTip">
-           <string>Moves the motor towards negative limit</string>
-          </property>
-          <property name="text">
-           <string>|<</string>
-          </property>
-          <property name="default">
-           <bool>false</bool>
-          </property>
-          <property name="flat">
-           <bool>false</bool>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QPushButton" name="btnGoToNegPress">
-          <property name="sizePolicy">
-           <sizepolicy vsizetype="Maximum" hsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>20</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="toolTip">
-           <string>Moves the motor towards negative limit while pressed</string>
-          </property>
-          <property name="text">
-           <string>«</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QPushButton" name="btnGoToNegInc">
-          <property name="sizePolicy">
-           <sizepolicy vsizetype="Maximum" hsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>20</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="toolTip">
-           <string>Decrements motor position <inc> units</string>
-          </property>
-          <property name="text">
-           <string><</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QDoubleSpinBox" name="inc">
-          <property name="maximumSize">
-           <size>
-            <width>80</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="maximum">
-           <double>10000000000000000159028911097599180468360808563945281389781327557747838772170381060813469985856815104.000000000000000</double>
-          </property>
-          <property name="value">
-           <double>1.000000000000000</double>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QPushButton" name="btnGoToPosInc">
-          <property name="sizePolicy">
-           <sizepolicy vsizetype="Fixed" hsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>20</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="toolTip">
-           <string>Increments motor position <inc> units</string>
-          </property>
-          <property name="text">
-           <string>></string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QPushButton" name="btnGoToPosPress">
-          <property name="sizePolicy">
-           <sizepolicy vsizetype="Fixed" hsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>20</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="toolTip">
-           <string>Moves the motor towards positive limit while pressed</string>
-          </property>
-          <property name="text">
-           <string>»</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QPushButton" name="btnGoToPos">
-          <property name="sizePolicy">
-           <sizepolicy vsizetype="Fixed" hsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>20</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="toolTip">
-           <string>Moves the motor towards positive limit</string>
-          </property>
-          <property name="text">
-           <string>>|</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QPushButton" name="btnMax">
-          <property name="sizePolicy">
-           <sizepolicy vsizetype="Fixed" hsizetype="Fixed">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>20</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="toolTip">
-           <string>Positive limit</string>
-          </property>
-          <property name="text">
-           <string>+</string>
-          </property>
-          <property name="autoDefault">
-           <bool>false</bool>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-      <item row="0" column="2">
-       <widget class="QPushButton" name="btnStop">
-        <property name="maximumSize">
-         <size>
-          <width>30</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="toolTip">
-         <string>Stops the motor</string>
-        </property>
-        <property name="text">
-         <string>S</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="3">
-       <widget class="QPushButton" name="btnHome">
-        <property name="maximumSize">
-         <size>
-          <width>30</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="toolTip">
-         <string>Goes Home</string>
-        </property>
-        <property name="text">
-         <string>H</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="4">
-       <widget class="TaurusLauncherButton" name="btnCfg">
-        <property name="maximumSize">
-         <size>
-          <width>30</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="toolTip">
-         <string>Configures the motor</string>
-        </property>
-        <property name="text">
-         <string>Cfg</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="0" colspan="5">
-       <widget class="TaurusValueLabel" name="lblStatus">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="font">
-         <font>
-          <pointsize>7</pointsize>
-         </font>
-        </property>
-        <property name="styleSheet">
-         <string notr="true">TauValueLabel {
-            border-style: outset;
-            border-width: 2px;
-            border-color: rgba(255,255,255,128);
-            background-color: transparent; color:black; }</string>
-        </property>
-        <property name="frameShape">
-         <enum>QFrame::StyledPanel</enum>
-        </property>
-        <property name="lineWidth">
-         <number>0</number>
-        </property>
-        <property name="model" stdset="0">
-         <string>/Status</string>
-        </property>
-        <property name="useParentModel" stdset="0">
-         <bool>true</bool>
-        </property>
-        <property name="showQuality" stdset="0">
-         <bool>false</bool>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>TaurusLauncherButton</class>
-   <extends>QPushButton</extends>
-   <header>taurus.qt.qtgui.button</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusGroupBox</class>
-   <extends>QGroupBox</extends>
-   <header>taurus.qt.qtgui.container</header>
-   <container>1</container>
-  </customwidget>
-  <customwidget>
-   <class>TaurusValueLabel</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
-
diff --git a/lib/taurus/qt/qtgui/extra_pool/ui/TaurusMotorH.ui b/lib/taurus/qt/qtgui/extra_pool/ui/TaurusMotorH.ui
deleted file mode 100644
index efbd6e3..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/ui/TaurusMotorH.ui
+++ /dev/null
@@ -1,226 +0,0 @@
-<ui version="4.0">
- <class>TaurusMotorH</class>
- <widget class="QWidget" name="TaurusMotorH">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>392</width>
-    <height>48</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <layout class="QGridLayout">
-   <property name="leftMargin">
-    <number>0</number>
-   </property>
-   <property name="topMargin">
-    <number>0</number>
-   </property>
-   <property name="rightMargin">
-    <number>0</number>
-   </property>
-   <property name="bottomMargin">
-    <number>0</number>
-   </property>
-   <property name="horizontalSpacing">
-    <number>0</number>
-   </property>
-   <property name="verticalSpacing">
-    <number>0</number>
-   </property>
-   <item row="0" column="0">
-    <widget class="TaurusGroupBox" name="TaurusGroupBox">
-     <property name="showText">
-      <bool>false</bool>
-     </property>
-     <layout class="QGridLayout">
-      <item row="0" column="0">
-       <layout class="QHBoxLayout">
-        <item>
-         <widget class="TaurusValueLabel" name="labelState">
-          <property name="minimumSize">
-           <size>
-            <width>50</width>
-            <height>22</height>
-           </size>
-          </property>
-          <property name="frameShape">
-           <enum>QFrame::NoFrame</enum>
-          </property>
-          <property name="frameShadow">
-           <enum>QFrame::Plain</enum>
-          </property>
-          <property name="showQuality">
-           <bool>false</bool>
-          </property>
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-          <property name="model">
-           <string>/State</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="TaurusStateLed" name="ledState">
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-          <property name="model">
-           <string>/State</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="TaurusValueLineEdit" name="positionWrite">
-          <property name="minimumSize">
-           <size>
-            <width>50</width>
-            <height>22</height>
-           </size>
-          </property>
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-          <property name="model">
-           <string>/Position</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="TaurusValueLabel" name="positionRead">
-          <property name="sizePolicy">
-           <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-            <horstretch>0</horstretch>
-            <verstretch>0</verstretch>
-           </sizepolicy>
-          </property>
-          <property name="minimumSize">
-           <size>
-            <width>50</width>
-            <height>22</height>
-           </size>
-          </property>
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-          <property name="model">
-           <string>/Position</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="TaurusConfigLabel" name="positionUnits">
-          <property name="minimumSize">
-           <size>
-            <width>35</width>
-            <height>22</height>
-           </size>
-          </property>
-          <property name="maximumSize">
-           <size>
-            <width>35</width>
-            <height>16777215</height>
-           </size>
-          </property>
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-          <property name="prefixText">
-           <string/>
-          </property>
-          <property name="model">
-           <string>/Position?configuration=unit</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QToolButton" name="config">
-          <property name="text">
-           <string>cfg</string>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="TaurusBoolLed" name="limitN">
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-          <property name="model">
-           <string>/Limit_switches</string>
-          </property>
-          <property name="boolIndex">
-           <number>2</number>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QLabel" name="limitLabel">
-          <property name="text">
-           <string>- lim +</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="TaurusBoolLed" name="limitP">
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-          <property name="model">
-           <string>/Limit_switches</string>
-          </property>
-          <property name="boolIndex">
-           <number>1</number>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-     </layout>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>TaurusGroupBox</class>
-   <extends>QGroupBox</extends>
-   <header>taurus.qt.qtgui.container</header>
-   <container>1</container>
-  </customwidget>
-  <customwidget>
-   <class>TaurusStateLed</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusBoolLed</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusValueLineEdit</class>
-   <extends>QLineEdit</extends>
-   <header>taurus.qt.qtgui.input</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusConfigLabel</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusValueLabel</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
-
diff --git a/lib/taurus/qt/qtgui/extra_pool/ui/TaurusMotorH2.ui b/lib/taurus/qt/qtgui/extra_pool/ui/TaurusMotorH2.ui
deleted file mode 100644
index be73d2e..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/ui/TaurusMotorH2.ui
+++ /dev/null
@@ -1,235 +0,0 @@
-<ui version="4.0">
- <class>TaurusMotorH2</class>
- <widget class="QWidget" name="TaurusMotorH2">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>212</width>
-    <height>82</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <layout class="QGridLayout">
-   <property name="leftMargin">
-    <number>0</number>
-   </property>
-   <property name="topMargin">
-    <number>0</number>
-   </property>
-   <property name="rightMargin">
-    <number>0</number>
-   </property>
-   <property name="bottomMargin">
-    <number>0</number>
-   </property>
-   <property name="horizontalSpacing">
-    <number>0</number>
-   </property>
-   <property name="verticalSpacing">
-    <number>0</number>
-   </property>
-   <item row="0" column="0">
-    <widget class="TaurusGroupBox" name="TaurusGroupBox">
-     <property name="showText">
-      <bool>false</bool>
-     </property>
-     <layout class="QGridLayout">
-      <item row="0" column="0">
-       <layout class="QVBoxLayout">
-        <item>
-         <layout class="QHBoxLayout">
-          <item>
-           <widget class="TaurusValueLabel" name="labelState">
-            <property name="minimumSize">
-             <size>
-              <width>50</width>
-              <height>22</height>
-             </size>
-            </property>
-            <property name="frameShape">
-             <enum>QFrame::NoFrame</enum>
-            </property>
-            <property name="frameShadow">
-             <enum>QFrame::Plain</enum>
-            </property>
-            <property name="showQuality">
-             <bool>false</bool>
-            </property>
-            <property name="useParentModel">
-             <bool>true</bool>
-            </property>
-            <property name="model">
-             <string>/State</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="TaurusStateLed" name="ledState">
-            <property name="useParentModel">
-             <bool>true</bool>
-            </property>
-            <property name="model">
-             <string>/State</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <spacer>
-            <property name="orientation">
-             <enum>Qt::Horizontal</enum>
-            </property>
-            <property name="sizeHint">
-             <size>
-              <width>40</width>
-              <height>20</height>
-             </size>
-            </property>
-           </spacer>
-          </item>
-          <item>
-           <widget class="TaurusBoolLed" name="limitN">
-            <property name="useParentModel">
-             <bool>true</bool>
-            </property>
-            <property name="model">
-             <string>/Limit_switches</string>
-            </property>
-            <property name="boolIndex">
-             <number>2</number>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QLabel" name="limitLabel">
-            <property name="text">
-             <string>- lim +</string>
-            </property>
-            <property name="alignment">
-             <set>Qt::AlignCenter</set>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="TaurusBoolLed" name="limitP">
-            <property name="useParentModel">
-             <bool>true</bool>
-            </property>
-            <property name="model">
-             <string>/Limit_switches</string>
-            </property>
-            <property name="boolIndex">
-             <number>1</number>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
-        <item>
-         <layout class="QHBoxLayout">
-          <item>
-           <widget class="TaurusValueLineEdit" name="positionWrite">
-            <property name="useParentModel">
-             <bool>true</bool>
-            </property>
-            <property name="model">
-             <string>/Position</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="TaurusValueLabel" name="positionRead">
-            <property name="sizePolicy">
-             <sizepolicy vsizetype="Preferred" hsizetype="Expanding">
-              <horstretch>0</horstretch>
-              <verstretch>0</verstretch>
-             </sizepolicy>
-            </property>
-            <property name="useParentModel">
-             <bool>true</bool>
-            </property>
-            <property name="model">
-             <string>/Position</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="TaurusConfigLabel" name="positionUnits">
-            <property name="minimumSize">
-             <size>
-              <width>35</width>
-              <height>24</height>
-             </size>
-            </property>
-            <property name="maximumSize">
-             <size>
-              <width>35</width>
-              <height>24</height>
-             </size>
-            </property>
-            <property name="useParentModel">
-             <bool>true</bool>
-            </property>
-            <property name="prefixText">
-             <string/>
-            </property>
-            <property name="model">
-             <string>/Position?configuration=unit</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QToolButton" name="config">
-            <property name="text">
-             <string>cfg</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
-       </layout>
-      </item>
-     </layout>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>TaurusGroupBox</class>
-   <extends>QGroupBox</extends>
-   <header>taurus.qt.qtgui.container</header>
-   <container>1</container>
-  </customwidget>
-  <customwidget>
-   <class>TaurusStateLed</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusBoolLed</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusValueLineEdit</class>
-   <extends>QLineEdit</extends>
-   <header>taurus.qt.qtgui.input</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusConfigLabel</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusValueLabel</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
-
diff --git a/lib/taurus/qt/qtgui/extra_pool/ui/TaurusMotorV.ui b/lib/taurus/qt/qtgui/extra_pool/ui/TaurusMotorV.ui
deleted file mode 100644
index 3c80761..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/ui/TaurusMotorV.ui
+++ /dev/null
@@ -1,224 +0,0 @@
-<ui version="4.0">
- <class>TaurusMotorV</class>
- <widget class="QWidget" name="TaurusMotorV">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>120</width>
-    <height>144</height>
-   </rect>
-  </property>
-  <property name="windowTitle">
-   <string>Form</string>
-  </property>
-  <layout class="QGridLayout">
-   <property name="leftMargin">
-    <number>0</number>
-   </property>
-   <property name="topMargin">
-    <number>0</number>
-   </property>
-   <property name="rightMargin">
-    <number>0</number>
-   </property>
-   <property name="bottomMargin">
-    <number>0</number>
-   </property>
-   <property name="horizontalSpacing">
-    <number>0</number>
-   </property>
-   <property name="verticalSpacing">
-    <number>0</number>
-   </property>
-   <item row="0" column="0">
-    <widget class="TaurusGroupBox" name="TaurusGroupBox">
-     <property name="showText">
-      <bool>false</bool>
-     </property>
-     <layout class="QGridLayout">
-      <item row="0" column="0">
-       <layout class="QVBoxLayout">
-        <item>
-         <layout class="QHBoxLayout">
-          <item>
-           <widget class="TaurusValueLabel" name="labelState">
-            <property name="minimumSize">
-             <size>
-              <width>50</width>
-              <height>22</height>
-             </size>
-            </property>
-            <property name="frameShape">
-             <enum>QFrame::NoFrame</enum>
-            </property>
-            <property name="frameShadow">
-             <enum>QFrame::Plain</enum>
-            </property>
-            <property name="showQuality">
-             <bool>false</bool>
-            </property>
-            <property name="useParentModel">
-             <bool>true</bool>
-            </property>
-            <property name="model">
-             <string>/State</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="TaurusStateLed" name="ledState">
-            <property name="useParentModel">
-             <bool>true</bool>
-            </property>
-            <property name="model">
-             <string>/State</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
-        <item>
-         <layout class="QHBoxLayout">
-          <item>
-           <widget class="TaurusValueLineEdit" name="positionWrite">
-            <property name="useParentModel">
-             <bool>true</bool>
-            </property>
-            <property name="model">
-             <string>/Position</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QToolButton" name="config">
-            <property name="text">
-             <string>cfg</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
-        <item>
-         <layout class="QHBoxLayout">
-          <item>
-           <widget class="TaurusValueLabel" name="positionRead">
-            <property name="useParentModel">
-             <bool>true</bool>
-            </property>
-            <property name="model">
-             <string>/Position</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="TaurusConfigLabel" name="positionUnits">
-            <property name="minimumSize">
-             <size>
-              <width>35</width>
-              <height>24</height>
-             </size>
-            </property>
-            <property name="maximumSize">
-             <size>
-              <width>35</width>
-              <height>24</height>
-             </size>
-            </property>
-            <property name="useParentModel">
-             <bool>true</bool>
-            </property>
-            <property name="prefixText">
-             <string/>
-            </property>
-            <property name="model">
-             <string>/Position?configuration=unit</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
-        <item>
-         <layout class="QHBoxLayout">
-          <item>
-           <widget class="TaurusBoolLed" name="limitN">
-            <property name="useParentModel">
-             <bool>true</bool>
-            </property>
-            <property name="model">
-             <string>/Limit_switches</string>
-            </property>
-            <property name="boolIndex">
-             <number>2</number>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QLabel" name="limitLabel">
-            <property name="text">
-             <string>- lim +</string>
-            </property>
-            <property name="alignment">
-             <set>Qt::AlignCenter</set>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="TaurusBoolLed" name="limitP">
-            <property name="useParentModel">
-             <bool>true</bool>
-            </property>
-            <property name="model">
-             <string>/Limit_switches</string>
-            </property>
-            <property name="boolIndex">
-             <number>1</number>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </item>
-       </layout>
-      </item>
-     </layout>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>TaurusGroupBox</class>
-   <extends>QGroupBox</extends>
-   <header>taurus.qt.qtgui.container</header>
-   <container>1</container>
-  </customwidget>
-  <customwidget>
-   <class>TaurusStateLed</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusBoolLed</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusValueLineEdit</class>
-   <extends>QLineEdit</extends>
-   <header>taurus.qt.qtgui.input</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusConfigLabel</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusValueLabel</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
-
diff --git a/lib/taurus/qt/qtgui/extra_pool/ui/TaurusMotorV2.ui b/lib/taurus/qt/qtgui/extra_pool/ui/TaurusMotorV2.ui
deleted file mode 100644
index f68c1ca..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/ui/TaurusMotorV2.ui
+++ /dev/null
@@ -1,882 +0,0 @@
-<ui version="4.0">
- <class>TaurusMotorV2</class>
- <widget class="QDialog" name="TaurusMotorV2">
-  <property name="geometry">
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>297</width>
-    <height>272</height>
-   </rect>
-  </property>
-  <property name="sizePolicy">
-   <sizepolicy vsizetype="Expanding" hsizetype="Expanding">
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="windowTitle">
-   <string>Dialog</string>
-  </property>
-  <layout class="QGridLayout">
-   <property name="leftMargin">
-    <number>0</number>
-   </property>
-   <property name="topMargin">
-    <number>0</number>
-   </property>
-   <property name="rightMargin">
-    <number>0</number>
-   </property>
-   <property name="bottomMargin">
-    <number>0</number>
-   </property>
-   <property name="horizontalSpacing">
-    <number>0</number>
-   </property>
-   <property name="verticalSpacing">
-    <number>0</number>
-   </property>
-   <item row="0" column="0">
-    <widget class="TaurusGroupBox" name="TaurusGroupBox">
-     <property name="showText">
-      <bool>false</bool>
-     </property>
-     <layout class="QGridLayout">
-      <item row="0" column="0">
-       <widget class="TaurusStateLed" name="ledState">
-        <property name="ledSize">
-         <number>24</number>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/State</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="1">
-       <widget class="TaurusValueLabel" name="labelState">
-        <property name="minimumSize">
-         <size>
-          <width>50</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="frameShape">
-         <enum>QFrame::NoFrame</enum>
-        </property>
-        <property name="frameShadow">
-         <enum>QFrame::Plain</enum>
-        </property>
-        <property name="showQuality">
-         <bool>false</bool>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/State</string>
-        </property>
-       </widget>
-      </item>
-      <item row="0" column="3">
-       <layout class="QHBoxLayout">
-        <item>
-         <spacer>
-          <property name="orientation">
-           <enum>Qt::Horizontal</enum>
-          </property>
-          <property name="sizeHint">
-           <size>
-            <width>40</width>
-            <height>20</height>
-           </size>
-          </property>
-         </spacer>
-        </item>
-        <item>
-         <widget class="TaurusBoolLed" name="limitN">
-          <property name="useParentModel">
-           <bool>true</bool>
-          </property>
-          <property name="ledColor">
-           <string>ORANGE</string>
-          </property>
-          <property name="model">
-           <string>/Limit_switches</string>
-          </property>
-          <property name="boolIndex">
-           <number>2</number>
-          </property>
-         </widget>
-        </item>
-        <item>
-         <widget class="QLabel" name="limitLabel">
-          <property name="text">
-           <string>- lim +</string>
-          </property>
-          <property name="alignment">
-           <set>Qt::AlignCenter</set>
-          </property>
-         </widget>
-        </item>
-       </layout>
-      </item>
-      <item row="0" column="4">
-       <widget class="TaurusBoolLed" name="limitP">
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="ledColor">
-         <string>ORANGE</string>
-        </property>
-        <property name="model">
-         <string>/Limit_switches</string>
-        </property>
-        <property name="boolIndex">
-         <number>1</number>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="0" colspan="2">
-       <widget class="TaurusConfigLabel" name="positionLabel">
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="suffixText">
-         <string>:</string>
-        </property>
-        <property name="model">
-         <string>/Position?configuration=label</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="2">
-       <widget class="TaurusValueLineEdit" name="positionWrite">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>70</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Position</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="3">
-       <widget class="TaurusValueLabel" name="positionRead">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>50</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Position</string>
-        </property>
-        <property name="buddy">
-         <cstring/>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="4">
-       <widget class="TaurusConfigLabel" name="positionUnits">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Preferred" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>35</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>35</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Position?configuration=unit</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="0" colspan="2">
-       <widget class="TaurusConfigLabel" name="velocityLabel">
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="suffixText">
-         <string>:</string>
-        </property>
-        <property name="model">
-         <string>/Velocity?configuration=label</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="2">
-       <widget class="TaurusValueLineEdit" name="velocityWrite">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>70</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Velocity</string>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="3">
-       <widget class="TaurusValueLabel" name="velocityRead">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>50</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Velocity</string>
-        </property>
-        <property name="buddy">
-         <cstring/>
-        </property>
-       </widget>
-      </item>
-      <item row="2" column="4">
-       <widget class="TaurusConfigLabel" name="velocityUnits">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Preferred" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>35</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>35</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Velocity?configuration=unit</string>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="0" colspan="2">
-       <widget class="TaurusConfigLabel" name="accelLabel">
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="suffixText">
-         <string>:</string>
-        </property>
-        <property name="model">
-         <string>/Acceleration?configuration=label</string>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="2">
-       <widget class="TaurusValueLineEdit" name="accelWrite">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>70</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Acceleration</string>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="3">
-       <widget class="TaurusValueLabel" name="accelRead">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>50</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Acceleration</string>
-        </property>
-        <property name="buddy">
-         <cstring/>
-        </property>
-       </widget>
-      </item>
-      <item row="3" column="4">
-       <widget class="TaurusConfigLabel" name="accelUnits">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Preferred" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>35</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>35</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Acceleration?configuration=unit</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="0" colspan="2">
-       <widget class="TaurusConfigLabel" name="decelLabel">
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="suffixText">
-         <string>:</string>
-        </property>
-        <property name="model">
-         <string>/Deceleration?configuration=label</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="2">
-       <widget class="TaurusValueLineEdit" name="decelWrite">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>70</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Deceleration</string>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="3">
-       <widget class="TaurusValueLabel" name="decelRead">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>50</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Deceleration</string>
-        </property>
-        <property name="buddy">
-         <cstring/>
-        </property>
-       </widget>
-      </item>
-      <item row="4" column="4">
-       <widget class="TaurusConfigLabel" name="decelUnits">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Preferred" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>35</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>35</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Deceleration?configuration=unit</string>
-        </property>
-       </widget>
-      </item>
-      <item row="5" column="0" colspan="2">
-       <widget class="TaurusConfigLabel" name="offsetLabel">
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="suffixText">
-         <string>:</string>
-        </property>
-        <property name="model">
-         <string>/Offset?configuration=label</string>
-        </property>
-       </widget>
-      </item>
-      <item row="5" column="2">
-       <widget class="TaurusValueLineEdit" name="offsetWrite">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>70</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Offset</string>
-        </property>
-       </widget>
-      </item>
-      <item row="5" column="3">
-       <widget class="TaurusValueLabel" name="offsetRead">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>50</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Offset</string>
-        </property>
-        <property name="buddy">
-         <cstring/>
-        </property>
-       </widget>
-      </item>
-      <item row="5" column="4">
-       <widget class="TaurusConfigLabel" name="offsetUnits">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Preferred" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>35</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>35</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Offset?configuration=unit</string>
-        </property>
-       </widget>
-      </item>
-      <item row="6" column="0" colspan="2">
-       <widget class="TaurusConfigLabel" name="baseRateLabel">
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="suffixText">
-         <string>:</string>
-        </property>
-        <property name="model">
-         <string>/Base_rate?configuration=label</string>
-        </property>
-       </widget>
-      </item>
-      <item row="6" column="2">
-       <widget class="TaurusValueLineEdit" name="baseRateWrite">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>70</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Base_rate</string>
-        </property>
-       </widget>
-      </item>
-      <item row="6" column="3">
-       <widget class="TaurusValueLabel" name="baseRateRead">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>50</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Base_rate</string>
-        </property>
-       </widget>
-      </item>
-      <item row="6" column="4">
-       <widget class="TaurusConfigLabel" name="baseRateUnits">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Preferred" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>35</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>35</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Base_rate?configuration=unit</string>
-        </property>
-       </widget>
-      </item>
-      <item row="7" column="0" colspan="2">
-       <widget class="TaurusConfigLabel" name="stepsUnitLabel">
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="suffixText">
-         <string>:</string>
-        </property>
-        <property name="model">
-         <string>/Step_per_unit?configuration=label</string>
-        </property>
-       </widget>
-      </item>
-      <item row="7" column="2">
-       <widget class="TaurusValueLineEdit" name="stepsUnitsWrite">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>70</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Step_per_unit</string>
-        </property>
-       </widget>
-      </item>
-      <item row="7" column="3">
-       <widget class="TaurusValueLabel" name="stepsUnitRead">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>50</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Step_per_unit</string>
-        </property>
-        <property name="buddy">
-         <cstring/>
-        </property>
-       </widget>
-      </item>
-      <item row="7" column="4">
-       <widget class="TaurusConfigLabel" name="stepsUnitUnits">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Preferred" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>35</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>35</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Step_per_unit?configuration=unit</string>
-        </property>
-       </widget>
-      </item>
-      <item row="8" column="0" colspan="2">
-       <widget class="TaurusConfigLabel" name="backlashLabel">
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="suffixText">
-         <string>:</string>
-        </property>
-        <property name="model">
-         <string>/Backlash?configuration=label</string>
-        </property>
-       </widget>
-      </item>
-      <item row="8" column="2">
-       <widget class="TaurusValueLineEdit" name="backlashWrite">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>70</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Backlash</string>
-        </property>
-       </widget>
-      </item>
-      <item row="8" column="3">
-       <widget class="TaurusValueLabel" name="backlashRead">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Fixed" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>50</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Backlash</string>
-        </property>
-       </widget>
-      </item>
-      <item row="8" column="4">
-       <widget class="TaurusConfigLabel" name="backlashUnits">
-        <property name="sizePolicy">
-         <sizepolicy vsizetype="Preferred" hsizetype="Expanding">
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
-        </property>
-        <property name="minimumSize">
-         <size>
-          <width>35</width>
-          <height>22</height>
-         </size>
-        </property>
-        <property name="maximumSize">
-         <size>
-          <width>35</width>
-          <height>16777215</height>
-         </size>
-        </property>
-        <property name="useParentModel">
-         <bool>true</bool>
-        </property>
-        <property name="model">
-         <string>/Backlash?configuration=unit</string>
-        </property>
-       </widget>
-      </item>
-     </layout>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>TaurusGroupBox</class>
-   <extends>QGroupBox</extends>
-   <header>taurus.qt.qtgui.container</header>
-   <container>1</container>
-  </customwidget>
-  <customwidget>
-   <class>TaurusStateLed</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusBoolLed</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusValueLineEdit</class>
-   <extends>QLineEdit</extends>
-   <header>taurus.qt.qtgui.input</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusConfigLabel</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusValueLabel</class>
-   <extends>QLabel</extends>
-   <header>taurus.qt.qtgui.display</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
-
diff --git a/lib/taurus/qt/qtgui/extra_pool/ui/poolioregisterbuttons.ui b/lib/taurus/qt/qtgui/extra_pool/ui/poolioregisterbuttons.ui
deleted file mode 100644
index 97e2039..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/ui/poolioregisterbuttons.ui
+++ /dev/null
@@ -1,49 +0,0 @@
-<ui version="4.0" >
- <class>PoolIORegisterButtons</class>
- <widget class="QWidget" name="PoolIORegisterButtons" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>172</width>
-    <height>52</height>
-   </rect>
-  </property>
-  <property name="sizePolicy" >
-   <sizepolicy vsizetype="MinimumExpanding" hsizetype="MinimumExpanding" >
-    <horstretch>0</horstretch>
-    <verstretch>0</verstretch>
-   </sizepolicy>
-  </property>
-  <property name="windowTitle" >
-   <string>Form</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout" >
-   <property name="margin" >
-    <number>0</number>
-   </property>
-   <property name="spacing" >
-    <number>0</number>
-   </property>
-   <item row="0" column="0" >
-    <layout class="QHBoxLayout" name="lo_state_read" >
-     <property name="spacing" >
-      <number>0</number>
-     </property>
-     <property name="sizeConstraint" >
-      <enum>QLayout::SetMinimumSize</enum>
-     </property>
-    </layout>
-   </item>
-   <item row="1" column="0" >
-    <layout class="QHBoxLayout" name="lo_buttons_write" >
-     <property name="spacing" >
-      <number>0</number>
-     </property>
-    </layout>
-   </item>
-  </layout>
- </widget>
- <resources/>
- <connections/>
-</ui>
diff --git a/lib/taurus/qt/qtgui/extra_pool/ui_poolioregisterbuttons.py b/lib/taurus/qt/qtgui/extra_pool/ui_poolioregisterbuttons.py
deleted file mode 100644
index 575e16a..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/ui_poolioregisterbuttons.py
+++ /dev/null
@@ -1,50 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'ui/poolioregisterbuttons.ui'
-#
-# Created: Tue Aug 16 10:17:34 2011
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_PoolIORegisterButtons(object):
-    def setupUi(self, PoolIORegisterButtons):
-        PoolIORegisterButtons.setObjectName("PoolIORegisterButtons")
-        PoolIORegisterButtons.resize(172, 52)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.MinimumExpanding)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(PoolIORegisterButtons.sizePolicy().hasHeightForWidth())
-        PoolIORegisterButtons.setSizePolicy(sizePolicy)
-        self.gridLayout = QtGui.QGridLayout(PoolIORegisterButtons)
-        self.gridLayout.setMargin(0)
-        self.gridLayout.setSpacing(0)
-        self.gridLayout.setObjectName("gridLayout")
-        self.lo_state_read = QtGui.QHBoxLayout()
-        self.lo_state_read.setSpacing(0)
-        self.lo_state_read.setSizeConstraint(QtGui.QLayout.SetMinimumSize)
-        self.lo_state_read.setObjectName("lo_state_read")
-        self.gridLayout.addLayout(self.lo_state_read, 0, 0, 1, 1)
-        self.lo_buttons_write = QtGui.QHBoxLayout()
-        self.lo_buttons_write.setSpacing(0)
-        self.lo_buttons_write.setObjectName("lo_buttons_write")
-        self.gridLayout.addLayout(self.lo_buttons_write, 1, 0, 1, 1)
-
-        self.retranslateUi(PoolIORegisterButtons)
-        QtCore.QMetaObject.connectSlotsByName(PoolIORegisterButtons)
-
-    def retranslateUi(self, PoolIORegisterButtons):
-        PoolIORegisterButtons.setWindowTitle(QtGui.QApplication.translate("PoolIORegisterButtons", "Form", None, QtGui.QApplication.UnicodeUTF8))
-
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    PoolIORegisterButtons = QtGui.QWidget()
-    ui = Ui_PoolIORegisterButtons()
-    ui.setupUi(PoolIORegisterButtons)
-    PoolIORegisterButtons.show()
-    sys.exit(app.exec_())
-
diff --git a/lib/taurus/qt/qtgui/extra_pool/ui_poolmotorslim.py b/lib/taurus/qt/qtgui/extra_pool/ui_poolmotorslim.py
deleted file mode 100644
index 3c47c39..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/ui_poolmotorslim.py
+++ /dev/null
@@ -1,202 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'ui/PoolMotorSlim.ui'
-#
-# Created: Thu Nov 11 19:30:23 2010
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_PoolMotorSlim(object):
-    def setupUi(self, PoolMotorSlim):
-        PoolMotorSlim.setObjectName("PoolMotorSlim")
-        PoolMotorSlim.resize(487, 61)
-        self.gridLayout_2 = QtGui.QGridLayout(PoolMotorSlim)
-        self.gridLayout_2.setMargin(0)
-        self.gridLayout_2.setSpacing(0)
-        self.gridLayout_2.setObjectName("gridLayout_2")
-        self.motorGroupBox = TaurusGroupBox(PoolMotorSlim)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.motorGroupBox.sizePolicy().hasHeightForWidth())
-        self.motorGroupBox.setSizePolicy(sizePolicy)
-        self.motorGroupBox.setProperty("showText", QtCore.QVariant(False))
-        self.motorGroupBox.setObjectName("motorGroupBox")
-        self.gridLayout = QtGui.QGridLayout(self.motorGroupBox)
-        self.gridLayout.setMargin(0)
-        self.gridLayout.setSpacing(0)
-        self.gridLayout.setObjectName("gridLayout")
-        self.taurusValueContainer = QtGui.QWidget(self.motorGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.taurusValueContainer.sizePolicy().hasHeightForWidth())
-        self.taurusValueContainer.setSizePolicy(sizePolicy)
-        self.taurusValueContainer.setObjectName("taurusValueContainer")
-        self.gridLayout.addWidget(self.taurusValueContainer, 0, 0, 1, 1)
-        self.horizontalLayout = QtGui.QHBoxLayout()
-        self.horizontalLayout.setSpacing(0)
-        self.horizontalLayout.setObjectName("horizontalLayout")
-        self.btnMin = QtGui.QPushButton(self.motorGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Maximum)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.btnMin.sizePolicy().hasHeightForWidth())
-        self.btnMin.setSizePolicy(sizePolicy)
-        self.btnMin.setMaximumSize(QtCore.QSize(20, 16777215))
-        self.btnMin.setAutoDefault(True)
-        self.btnMin.setFlat(False)
-        self.btnMin.setObjectName("btnMin")
-        self.horizontalLayout.addWidget(self.btnMin)
-        self.btnGoToNeg = QtGui.QPushButton(self.motorGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Maximum)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.btnGoToNeg.sizePolicy().hasHeightForWidth())
-        self.btnGoToNeg.setSizePolicy(sizePolicy)
-        self.btnGoToNeg.setMaximumSize(QtCore.QSize(20, 16777215))
-        self.btnGoToNeg.setDefault(False)
-        self.btnGoToNeg.setFlat(False)
-        self.btnGoToNeg.setObjectName("btnGoToNeg")
-        self.horizontalLayout.addWidget(self.btnGoToNeg)
-        self.btnGoToNegPress = QtGui.QPushButton(self.motorGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Maximum)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.btnGoToNegPress.sizePolicy().hasHeightForWidth())
-        self.btnGoToNegPress.setSizePolicy(sizePolicy)
-        self.btnGoToNegPress.setMaximumSize(QtCore.QSize(20, 16777215))
-        self.btnGoToNegPress.setObjectName("btnGoToNegPress")
-        self.horizontalLayout.addWidget(self.btnGoToNegPress)
-        self.btnGoToNegInc = QtGui.QPushButton(self.motorGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Maximum)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.btnGoToNegInc.sizePolicy().hasHeightForWidth())
-        self.btnGoToNegInc.setSizePolicy(sizePolicy)
-        self.btnGoToNegInc.setMaximumSize(QtCore.QSize(20, 16777215))
-        self.btnGoToNegInc.setObjectName("btnGoToNegInc")
-        self.horizontalLayout.addWidget(self.btnGoToNegInc)
-        self.inc = QtGui.QDoubleSpinBox(self.motorGroupBox)
-        self.inc.setMaximumSize(QtCore.QSize(80, 16777215))
-        self.inc.setMaximum(1e+100)
-        self.inc.setProperty("value", QtCore.QVariant(1.0))
-        self.inc.setObjectName("inc")
-        self.horizontalLayout.addWidget(self.inc)
-        self.btnGoToPosInc = QtGui.QPushButton(self.motorGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.btnGoToPosInc.sizePolicy().hasHeightForWidth())
-        self.btnGoToPosInc.setSizePolicy(sizePolicy)
-        self.btnGoToPosInc.setMaximumSize(QtCore.QSize(20, 16777215))
-        self.btnGoToPosInc.setObjectName("btnGoToPosInc")
-        self.horizontalLayout.addWidget(self.btnGoToPosInc)
-        self.btnGoToPosPress = QtGui.QPushButton(self.motorGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.btnGoToPosPress.sizePolicy().hasHeightForWidth())
-        self.btnGoToPosPress.setSizePolicy(sizePolicy)
-        self.btnGoToPosPress.setMaximumSize(QtCore.QSize(20, 16777215))
-        self.btnGoToPosPress.setObjectName("btnGoToPosPress")
-        self.horizontalLayout.addWidget(self.btnGoToPosPress)
-        self.btnGoToPos = QtGui.QPushButton(self.motorGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.btnGoToPos.sizePolicy().hasHeightForWidth())
-        self.btnGoToPos.setSizePolicy(sizePolicy)
-        self.btnGoToPos.setMaximumSize(QtCore.QSize(20, 16777215))
-        self.btnGoToPos.setObjectName("btnGoToPos")
-        self.horizontalLayout.addWidget(self.btnGoToPos)
-        self.btnMax = QtGui.QPushButton(self.motorGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.btnMax.sizePolicy().hasHeightForWidth())
-        self.btnMax.setSizePolicy(sizePolicy)
-        self.btnMax.setMaximumSize(QtCore.QSize(20, 16777215))
-        self.btnMax.setAutoDefault(False)
-        self.btnMax.setObjectName("btnMax")
-        self.horizontalLayout.addWidget(self.btnMax)
-        self.gridLayout.addLayout(self.horizontalLayout, 0, 1, 1, 1)
-        self.btnStop = QtGui.QPushButton(self.motorGroupBox)
-        self.btnStop.setMaximumSize(QtCore.QSize(30, 16777215))
-        self.btnStop.setObjectName("btnStop")
-        self.gridLayout.addWidget(self.btnStop, 0, 2, 1, 1)
-        self.btnHome = QtGui.QPushButton(self.motorGroupBox)
-        self.btnHome.setMaximumSize(QtCore.QSize(30, 16777215))
-        self.btnHome.setObjectName("btnHome")
-        self.gridLayout.addWidget(self.btnHome, 0, 3, 1, 1)
-        self.btnCfg = TaurusLauncherButton(self.motorGroupBox)
-        self.btnCfg.setMaximumSize(QtCore.QSize(30, 16777215))
-        self.btnCfg.setObjectName("btnCfg")
-        self.gridLayout.addWidget(self.btnCfg, 0, 4, 1, 1)
-        self.lblStatus = TaurusValueLabel(self.motorGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.lblStatus.sizePolicy().hasHeightForWidth())
-        self.lblStatus.setSizePolicy(sizePolicy)
-        font = QtGui.QFont()
-        font.setPointSize(7)
-        self.lblStatus.setFont(font)
-        self.lblStatus.setStyleSheet("""TaurusValueLabel {
-            border-style: outset;
-            border-width: 2px;
-            border-color: rgba(255,255,255,128);
-            background-color: transparent; color:black; }""")
-        self.lblStatus.setFrameShape(QtGui.QFrame.StyledPanel)
-        self.lblStatus.setLineWidth(0)
-        self.lblStatus.setProperty("model", QtCore.QVariant(QtGui.QApplication.translate("PoolMotorSlim", "/Status", None, QtGui.QApplication.UnicodeUTF8)))
-        self.lblStatus.setProperty("useParentModel", QtCore.QVariant(True))
-        self.lblStatus.setProperty("showQuality", QtCore.QVariant(False))
-        self.lblStatus.setObjectName("lblStatus")
-        self.gridLayout.addWidget(self.lblStatus, 1, 0, 1, 5)
-        self.gridLayout_2.addWidget(self.motorGroupBox, 0, 0, 1, 1)
-
-        self.retranslateUi(PoolMotorSlim)
-        QtCore.QMetaObject.connectSlotsByName(PoolMotorSlim)
-
-    def retranslateUi(self, PoolMotorSlim):
-        PoolMotorSlim.setWindowTitle(QtGui.QApplication.translate("PoolMotorSlim", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnMin.setToolTip(QtGui.QApplication.translate("PoolMotorSlim", "Negative limit", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnMin.setText(QtGui.QApplication.translate("PoolMotorSlim", "-", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnGoToNeg.setToolTip(QtGui.QApplication.translate("PoolMotorSlim", "Moves the motor towards negative limit", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnGoToNeg.setText(QtGui.QApplication.translate("PoolMotorSlim", "|<", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnGoToNegPress.setToolTip(QtGui.QApplication.translate("PoolMotorSlim", "Moves the motor towards negative limit while pressed", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnGoToNegPress.setText(QtGui.QApplication.translate("PoolMotorSlim", "«", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnGoToNegInc.setToolTip(QtGui.QApplication.translate("PoolMotorSlim", "Decrements motor position <inc> units", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnGoToNegInc.setText(QtGui.QApplication.translate("PoolMotorSlim", "<", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnGoToPosInc.setToolTip(QtGui.QApplication.translate("PoolMotorSlim", "Increments motor position <inc> units", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnGoToPosInc.setText(QtGui.QApplication.translate("PoolMotorSlim", ">", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnGoToPosPress.setToolTip(QtGui.QApplication.translate("PoolMotorSlim", "Moves the motor towards positive limit while pressed", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnGoToPosPress.setText(QtGui.QApplication.translate("PoolMotorSlim", "»", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnGoToPos.setToolTip(QtGui.QApplication.translate("PoolMotorSlim", "Moves the motor towards positive limit", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnGoToPos.setText(QtGui.QApplication.translate("PoolMotorSlim", ">|", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnMax.setToolTip(QtGui.QApplication.translate("PoolMotorSlim", "Positive limit", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnMax.setText(QtGui.QApplication.translate("PoolMotorSlim", "+", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnStop.setToolTip(QtGui.QApplication.translate("PoolMotorSlim", "Stops the motor", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnStop.setText(QtGui.QApplication.translate("PoolMotorSlim", "S", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnHome.setToolTip(QtGui.QApplication.translate("PoolMotorSlim", "Goes Home", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnHome.setText(QtGui.QApplication.translate("PoolMotorSlim", "H", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnCfg.setToolTip(QtGui.QApplication.translate("PoolMotorSlim", "Configures the motor", None, QtGui.QApplication.UnicodeUTF8))
-        self.btnCfg.setText(QtGui.QApplication.translate("PoolMotorSlim", "Cfg", None, QtGui.QApplication.UnicodeUTF8))
-
-from taurus.qt.qtgui.display import TaurusValueLabel
-from taurus.qt.qtgui.container import TaurusGroupBox
-from taurus.qt.qtgui.button import TaurusLauncherButton
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    PoolMotorSlim = QtGui.QDialog()
-    ui = Ui_PoolMotorSlim()
-    ui.setupUi(PoolMotorSlim)
-    PoolMotorSlim.show()
-    sys.exit(app.exec_())
-
diff --git a/lib/taurus/qt/qtgui/extra_pool/ui_taurusmotorh.py b/lib/taurus/qt/qtgui/extra_pool/ui_taurusmotorh.py
deleted file mode 100644
index f399d46..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/ui_taurusmotorh.py
+++ /dev/null
@@ -1,107 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'ui/TaurusMotorH.ui'
-#
-# Created: Thu Nov 11 19:30:21 2010
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_TaurusMotorH(object):
-    def setupUi(self, TaurusMotorH):
-        TaurusMotorH.setObjectName("TaurusMotorH")
-        TaurusMotorH.resize(392, 48)
-        self.gridlayout = QtGui.QGridLayout(TaurusMotorH)
-        self.gridlayout.setMargin(0)
-        self.gridlayout.setSpacing(0)
-        self.gridlayout.setObjectName("gridlayout")
-        self.TaurusGroupBox = TaurusGroupBox(TaurusMotorH)
-        self.TaurusGroupBox.setShowText(False)
-        self.TaurusGroupBox.setObjectName("TaurusGroupBox")
-        self.gridlayout1 = QtGui.QGridLayout(self.TaurusGroupBox)
-        self.gridlayout1.setObjectName("gridlayout1")
-        self.hboxlayout = QtGui.QHBoxLayout()
-        self.hboxlayout.setObjectName("hboxlayout")
-        self.labelState = TaurusValueLabel(self.TaurusGroupBox)
-        self.labelState.setMinimumSize(QtCore.QSize(50, 22))
-        self.labelState.setFrameShape(QtGui.QFrame.NoFrame)
-        self.labelState.setFrameShadow(QtGui.QFrame.Plain)
-        self.labelState.setShowQuality(False)
-        self.labelState.setUseParentModel(True)
-        self.labelState.setObjectName("labelState")
-        self.hboxlayout.addWidget(self.labelState)
-        self.ledState = TaurusStateLed(self.TaurusGroupBox)
-        self.ledState.setUseParentModel(True)
-        self.ledState.setObjectName("ledState")
-        self.hboxlayout.addWidget(self.ledState)
-        self.positionWrite = TaurusValueLineEdit(self.TaurusGroupBox)
-        self.positionWrite.setMinimumSize(QtCore.QSize(50, 22))
-        self.positionWrite.setUseParentModel(True)
-        self.positionWrite.setObjectName("positionWrite")
-        self.hboxlayout.addWidget(self.positionWrite)
-        self.positionRead = TaurusValueLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.positionRead.sizePolicy().hasHeightForWidth())
-        self.positionRead.setSizePolicy(sizePolicy)
-        self.positionRead.setMinimumSize(QtCore.QSize(50, 22))
-        self.positionRead.setUseParentModel(True)
-        self.positionRead.setObjectName("positionRead")
-        self.hboxlayout.addWidget(self.positionRead)
-        self.positionUnits = TaurusConfigLabel(self.TaurusGroupBox)
-        self.positionUnits.setMinimumSize(QtCore.QSize(35, 22))
-        self.positionUnits.setMaximumSize(QtCore.QSize(35, 16777215))
-        self.positionUnits.setUseParentModel(True)
-        self.positionUnits.setObjectName("positionUnits")
-        self.hboxlayout.addWidget(self.positionUnits)
-        self.config = QtGui.QToolButton(self.TaurusGroupBox)
-        self.config.setObjectName("config")
-        self.hboxlayout.addWidget(self.config)
-        self.limitN = TaurusBoolLed(self.TaurusGroupBox)
-        self.limitN.setUseParentModel(True)
-        self.limitN.setBoolIndex(2)
-        self.limitN.setObjectName("limitN")
-        self.hboxlayout.addWidget(self.limitN)
-        self.limitLabel = QtGui.QLabel(self.TaurusGroupBox)
-        self.limitLabel.setAlignment(QtCore.Qt.AlignCenter)
-        self.limitLabel.setObjectName("limitLabel")
-        self.hboxlayout.addWidget(self.limitLabel)
-        self.limitP = TaurusBoolLed(self.TaurusGroupBox)
-        self.limitP.setUseParentModel(True)
-        self.limitP.setBoolIndex(1)
-        self.limitP.setObjectName("limitP")
-        self.hboxlayout.addWidget(self.limitP)
-        self.gridlayout1.addLayout(self.hboxlayout, 0, 0, 1, 1)
-        self.gridlayout.addWidget(self.TaurusGroupBox, 0, 0, 1, 1)
-
-        self.retranslateUi(TaurusMotorH)
-        QtCore.QMetaObject.connectSlotsByName(TaurusMotorH)
-
-    def retranslateUi(self, TaurusMotorH):
-        TaurusMotorH.setWindowTitle(QtGui.QApplication.translate("TaurusMotorH", "Form", None, QtGui.QApplication.UnicodeUTF8))
-        self.labelState.setModel(QtGui.QApplication.translate("TaurusMotorH", "/State", None, QtGui.QApplication.UnicodeUTF8))
-        self.ledState.setModel(QtGui.QApplication.translate("TaurusMotorH", "/State", None, QtGui.QApplication.UnicodeUTF8))
-        self.positionWrite.setModel(QtGui.QApplication.translate("TaurusMotorH", "/Position", None, QtGui.QApplication.UnicodeUTF8))
-        self.positionRead.setModel(QtGui.QApplication.translate("TaurusMotorH", "/Position", None, QtGui.QApplication.UnicodeUTF8))
-        self.positionUnits.setModel(QtGui.QApplication.translate("TaurusMotorH", "/Position?configuration=unit", None, QtGui.QApplication.UnicodeUTF8))
-        self.config.setText(QtGui.QApplication.translate("TaurusMotorH", "cfg", None, QtGui.QApplication.UnicodeUTF8))
-        self.limitN.setModel(QtGui.QApplication.translate("TaurusMotorH", "/Limit_switches", None, QtGui.QApplication.UnicodeUTF8))
-        self.limitLabel.setText(QtGui.QApplication.translate("TaurusMotorH", "- lim +", None, QtGui.QApplication.UnicodeUTF8))
-        self.limitP.setModel(QtGui.QApplication.translate("TaurusMotorH", "/Limit_switches", None, QtGui.QApplication.UnicodeUTF8))
-
-from taurus.qt.qtgui.display import TaurusBoolLed, TaurusConfigLabel, TaurusStateLed, TaurusValueLabel
-from taurus.qt.qtgui.container import TaurusGroupBox
-from taurus.qt.qtgui.input import TaurusValueLineEdit
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    TaurusMotorH = QtGui.QWidget()
-    ui = Ui_TaurusMotorH()
-    ui.setupUi(TaurusMotorH)
-    TaurusMotorH.show()
-    sys.exit(app.exec_())
-
diff --git a/lib/taurus/qt/qtgui/extra_pool/ui_taurusmotorh2.py b/lib/taurus/qt/qtgui/extra_pool/ui_taurusmotorh2.py
deleted file mode 100644
index ea03f68..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/ui_taurusmotorh2.py
+++ /dev/null
@@ -1,113 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'ui/TaurusMotorH2.ui'
-#
-# Created: Thu Nov 11 19:30:22 2010
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_TaurusMotorH2(object):
-    def setupUi(self, TaurusMotorH2):
-        TaurusMotorH2.setObjectName("TaurusMotorH2")
-        TaurusMotorH2.resize(212, 82)
-        self.gridlayout = QtGui.QGridLayout(TaurusMotorH2)
-        self.gridlayout.setMargin(0)
-        self.gridlayout.setSpacing(0)
-        self.gridlayout.setObjectName("gridlayout")
-        self.TaurusGroupBox = TaurusGroupBox(TaurusMotorH2)
-        self.TaurusGroupBox.setShowText(False)
-        self.TaurusGroupBox.setObjectName("TaurusGroupBox")
-        self.gridlayout1 = QtGui.QGridLayout(self.TaurusGroupBox)
-        self.gridlayout1.setObjectName("gridlayout1")
-        self.vboxlayout = QtGui.QVBoxLayout()
-        self.vboxlayout.setObjectName("vboxlayout")
-        self.hboxlayout = QtGui.QHBoxLayout()
-        self.hboxlayout.setObjectName("hboxlayout")
-        self.labelState = TaurusValueLabel(self.TaurusGroupBox)
-        self.labelState.setMinimumSize(QtCore.QSize(50, 22))
-        self.labelState.setFrameShape(QtGui.QFrame.NoFrame)
-        self.labelState.setFrameShadow(QtGui.QFrame.Plain)
-        self.labelState.setShowQuality(False)
-        self.labelState.setUseParentModel(True)
-        self.labelState.setObjectName("labelState")
-        self.hboxlayout.addWidget(self.labelState)
-        self.ledState = TaurusStateLed(self.TaurusGroupBox)
-        self.ledState.setUseParentModel(True)
-        self.ledState.setObjectName("ledState")
-        self.hboxlayout.addWidget(self.ledState)
-        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.hboxlayout.addItem(spacerItem)
-        self.limitN = TaurusBoolLed(self.TaurusGroupBox)
-        self.limitN.setUseParentModel(True)
-        self.limitN.setBoolIndex(2)
-        self.limitN.setObjectName("limitN")
-        self.hboxlayout.addWidget(self.limitN)
-        self.limitLabel = QtGui.QLabel(self.TaurusGroupBox)
-        self.limitLabel.setAlignment(QtCore.Qt.AlignCenter)
-        self.limitLabel.setObjectName("limitLabel")
-        self.hboxlayout.addWidget(self.limitLabel)
-        self.limitP = TaurusBoolLed(self.TaurusGroupBox)
-        self.limitP.setUseParentModel(True)
-        self.limitP.setBoolIndex(1)
-        self.limitP.setObjectName("limitP")
-        self.hboxlayout.addWidget(self.limitP)
-        self.vboxlayout.addLayout(self.hboxlayout)
-        self.hboxlayout1 = QtGui.QHBoxLayout()
-        self.hboxlayout1.setObjectName("hboxlayout1")
-        self.positionWrite = TaurusValueLineEdit(self.TaurusGroupBox)
-        self.positionWrite.setUseParentModel(True)
-        self.positionWrite.setObjectName("positionWrite")
-        self.hboxlayout1.addWidget(self.positionWrite)
-        self.positionRead = TaurusValueLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.positionRead.sizePolicy().hasHeightForWidth())
-        self.positionRead.setSizePolicy(sizePolicy)
-        self.positionRead.setUseParentModel(True)
-        self.positionRead.setObjectName("positionRead")
-        self.hboxlayout1.addWidget(self.positionRead)
-        self.positionUnits = TaurusConfigLabel(self.TaurusGroupBox)
-        self.positionUnits.setMinimumSize(QtCore.QSize(35, 24))
-        self.positionUnits.setMaximumSize(QtCore.QSize(35, 24))
-        self.positionUnits.setUseParentModel(True)
-        self.positionUnits.setObjectName("positionUnits")
-        self.hboxlayout1.addWidget(self.positionUnits)
-        self.config = QtGui.QToolButton(self.TaurusGroupBox)
-        self.config.setObjectName("config")
-        self.hboxlayout1.addWidget(self.config)
-        self.vboxlayout.addLayout(self.hboxlayout1)
-        self.gridlayout1.addLayout(self.vboxlayout, 0, 0, 1, 1)
-        self.gridlayout.addWidget(self.TaurusGroupBox, 0, 0, 1, 1)
-
-        self.retranslateUi(TaurusMotorH2)
-        QtCore.QMetaObject.connectSlotsByName(TaurusMotorH2)
-
-    def retranslateUi(self, TaurusMotorH2):
-        TaurusMotorH2.setWindowTitle(QtGui.QApplication.translate("TaurusMotorH2", "Form", None, QtGui.QApplication.UnicodeUTF8))
-        self.labelState.setModel(QtGui.QApplication.translate("TaurusMotorH2", "/State", None, QtGui.QApplication.UnicodeUTF8))
-        self.ledState.setModel(QtGui.QApplication.translate("TaurusMotorH2", "/State", None, QtGui.QApplication.UnicodeUTF8))
-        self.limitN.setModel(QtGui.QApplication.translate("TaurusMotorH2", "/Limit_switches", None, QtGui.QApplication.UnicodeUTF8))
-        self.limitLabel.setText(QtGui.QApplication.translate("TaurusMotorH2", "- lim +", None, QtGui.QApplication.UnicodeUTF8))
-        self.limitP.setModel(QtGui.QApplication.translate("TaurusMotorH2", "/Limit_switches", None, QtGui.QApplication.UnicodeUTF8))
-        self.positionWrite.setModel(QtGui.QApplication.translate("TaurusMotorH2", "/Position", None, QtGui.QApplication.UnicodeUTF8))
-        self.positionRead.setModel(QtGui.QApplication.translate("TaurusMotorH2", "/Position", None, QtGui.QApplication.UnicodeUTF8))
-        self.positionUnits.setModel(QtGui.QApplication.translate("TaurusMotorH2", "/Position?configuration=unit", None, QtGui.QApplication.UnicodeUTF8))
-        self.config.setText(QtGui.QApplication.translate("TaurusMotorH2", "cfg", None, QtGui.QApplication.UnicodeUTF8))
-
-from taurus.qt.qtgui.display import TaurusBoolLed, TaurusConfigLabel, TaurusStateLed, TaurusValueLabel
-from taurus.qt.qtgui.container import TaurusGroupBox
-from taurus.qt.qtgui.input import TaurusValueLineEdit
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    TaurusMotorH2 = QtGui.QWidget()
-    ui = Ui_TaurusMotorH2()
-    ui.setupUi(TaurusMotorH2)
-    TaurusMotorH2.show()
-    sys.exit(app.exec_())
-
diff --git a/lib/taurus/qt/qtgui/extra_pool/ui_taurusmotorv.py b/lib/taurus/qt/qtgui/extra_pool/ui_taurusmotorv.py
deleted file mode 100644
index 0a61dcc..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/ui_taurusmotorv.py
+++ /dev/null
@@ -1,112 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'ui/TaurusMotorV.ui'
-#
-# Created: Thu Nov 11 19:30:22 2010
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_TaurusMotorV(object):
-    def setupUi(self, TaurusMotorV):
-        TaurusMotorV.setObjectName("TaurusMotorV")
-        TaurusMotorV.resize(120, 144)
-        self.gridlayout = QtGui.QGridLayout(TaurusMotorV)
-        self.gridlayout.setMargin(0)
-        self.gridlayout.setSpacing(0)
-        self.gridlayout.setObjectName("gridlayout")
-        self.TaurusGroupBox = TaurusGroupBox(TaurusMotorV)
-        self.TaurusGroupBox.setShowText(False)
-        self.TaurusGroupBox.setObjectName("TaurusGroupBox")
-        self.gridlayout1 = QtGui.QGridLayout(self.TaurusGroupBox)
-        self.gridlayout1.setObjectName("gridlayout1")
-        self.vboxlayout = QtGui.QVBoxLayout()
-        self.vboxlayout.setObjectName("vboxlayout")
-        self.hboxlayout = QtGui.QHBoxLayout()
-        self.hboxlayout.setObjectName("hboxlayout")
-        self.labelState = TaurusValueLabel(self.TaurusGroupBox)
-        self.labelState.setMinimumSize(QtCore.QSize(50, 22))
-        self.labelState.setFrameShape(QtGui.QFrame.NoFrame)
-        self.labelState.setFrameShadow(QtGui.QFrame.Plain)
-        self.labelState.setShowQuality(False)
-        self.labelState.setUseParentModel(True)
-        self.labelState.setObjectName("labelState")
-        self.hboxlayout.addWidget(self.labelState)
-        self.ledState = TaurusStateLed(self.TaurusGroupBox)
-        self.ledState.setUseParentModel(True)
-        self.ledState.setObjectName("ledState")
-        self.hboxlayout.addWidget(self.ledState)
-        self.vboxlayout.addLayout(self.hboxlayout)
-        self.hboxlayout1 = QtGui.QHBoxLayout()
-        self.hboxlayout1.setObjectName("hboxlayout1")
-        self.positionWrite = TaurusValueLineEdit(self.TaurusGroupBox)
-        self.positionWrite.setUseParentModel(True)
-        self.positionWrite.setObjectName("positionWrite")
-        self.hboxlayout1.addWidget(self.positionWrite)
-        self.config = QtGui.QToolButton(self.TaurusGroupBox)
-        self.config.setObjectName("config")
-        self.hboxlayout1.addWidget(self.config)
-        self.vboxlayout.addLayout(self.hboxlayout1)
-        self.hboxlayout2 = QtGui.QHBoxLayout()
-        self.hboxlayout2.setObjectName("hboxlayout2")
-        self.positionRead = TaurusValueLabel(self.TaurusGroupBox)
-        self.positionRead.setUseParentModel(True)
-        self.positionRead.setObjectName("positionRead")
-        self.hboxlayout2.addWidget(self.positionRead)
-        self.positionUnits = TaurusConfigLabel(self.TaurusGroupBox)
-        self.positionUnits.setMinimumSize(QtCore.QSize(35, 24))
-        self.positionUnits.setMaximumSize(QtCore.QSize(35, 24))
-        self.positionUnits.setUseParentModel(True)
-        self.positionUnits.setObjectName("positionUnits")
-        self.hboxlayout2.addWidget(self.positionUnits)
-        self.vboxlayout.addLayout(self.hboxlayout2)
-        self.hboxlayout3 = QtGui.QHBoxLayout()
-        self.hboxlayout3.setObjectName("hboxlayout3")
-        self.limitN = TaurusBoolLed(self.TaurusGroupBox)
-        self.limitN.setUseParentModel(True)
-        self.limitN.setBoolIndex(2)
-        self.limitN.setObjectName("limitN")
-        self.hboxlayout3.addWidget(self.limitN)
-        self.limitLabel = QtGui.QLabel(self.TaurusGroupBox)
-        self.limitLabel.setAlignment(QtCore.Qt.AlignCenter)
-        self.limitLabel.setObjectName("limitLabel")
-        self.hboxlayout3.addWidget(self.limitLabel)
-        self.limitP = TaurusBoolLed(self.TaurusGroupBox)
-        self.limitP.setUseParentModel(True)
-        self.limitP.setBoolIndex(1)
-        self.limitP.setObjectName("limitP")
-        self.hboxlayout3.addWidget(self.limitP)
-        self.vboxlayout.addLayout(self.hboxlayout3)
-        self.gridlayout1.addLayout(self.vboxlayout, 0, 0, 1, 1)
-        self.gridlayout.addWidget(self.TaurusGroupBox, 0, 0, 1, 1)
-
-        self.retranslateUi(TaurusMotorV)
-        QtCore.QMetaObject.connectSlotsByName(TaurusMotorV)
-
-    def retranslateUi(self, TaurusMotorV):
-        TaurusMotorV.setWindowTitle(QtGui.QApplication.translate("TaurusMotorV", "Form", None, QtGui.QApplication.UnicodeUTF8))
-        self.labelState.setModel(QtGui.QApplication.translate("TaurusMotorV", "/State", None, QtGui.QApplication.UnicodeUTF8))
-        self.ledState.setModel(QtGui.QApplication.translate("TaurusMotorV", "/State", None, QtGui.QApplication.UnicodeUTF8))
-        self.positionWrite.setModel(QtGui.QApplication.translate("TaurusMotorV", "/Position", None, QtGui.QApplication.UnicodeUTF8))
-        self.config.setText(QtGui.QApplication.translate("TaurusMotorV", "cfg", None, QtGui.QApplication.UnicodeUTF8))
-        self.positionRead.setModel(QtGui.QApplication.translate("TaurusMotorV", "/Position", None, QtGui.QApplication.UnicodeUTF8))
-        self.positionUnits.setModel(QtGui.QApplication.translate("TaurusMotorV", "/Position?configuration=unit", None, QtGui.QApplication.UnicodeUTF8))
-        self.limitN.setModel(QtGui.QApplication.translate("TaurusMotorV", "/Limit_switches", None, QtGui.QApplication.UnicodeUTF8))
-        self.limitLabel.setText(QtGui.QApplication.translate("TaurusMotorV", "- lim +", None, QtGui.QApplication.UnicodeUTF8))
-        self.limitP.setModel(QtGui.QApplication.translate("TaurusMotorV", "/Limit_switches", None, QtGui.QApplication.UnicodeUTF8))
-
-from taurus.qt.qtgui.display import TaurusBoolLed, TaurusConfigLabel, TaurusStateLed, TaurusValueLabel
-from taurus.qt.qtgui.container import TaurusGroupBox
-from taurus.qt.qtgui.input import TaurusValueLineEdit
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    TaurusMotorV = QtGui.QWidget()
-    ui = Ui_TaurusMotorV()
-    ui.setupUi(TaurusMotorV)
-    TaurusMotorV.show()
-    sys.exit(app.exec_())
-
diff --git a/lib/taurus/qt/qtgui/extra_pool/ui_taurusmotorv2.py b/lib/taurus/qt/qtgui/extra_pool/ui_taurusmotorv2.py
deleted file mode 100644
index fc538f4..0000000
--- a/lib/taurus/qt/qtgui/extra_pool/ui_taurusmotorv2.py
+++ /dev/null
@@ -1,409 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'ui/TaurusMotorV2.ui'
-#
-# Created: Thu Nov 11 19:30:22 2010
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_TaurusMotorV2(object):
-    def setupUi(self, TaurusMotorV2):
-        TaurusMotorV2.setObjectName("TaurusMotorV2")
-        TaurusMotorV2.resize(297, 272)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(TaurusMotorV2.sizePolicy().hasHeightForWidth())
-        TaurusMotorV2.setSizePolicy(sizePolicy)
-        self.gridlayout = QtGui.QGridLayout(TaurusMotorV2)
-        self.gridlayout.setMargin(0)
-        self.gridlayout.setSpacing(0)
-        self.gridlayout.setObjectName("gridlayout")
-        self.TaurusGroupBox = TaurusGroupBox(TaurusMotorV2)
-        self.TaurusGroupBox.setShowText(False)
-        self.TaurusGroupBox.setObjectName("TaurusGroupBox")
-        self.gridlayout1 = QtGui.QGridLayout(self.TaurusGroupBox)
-        self.gridlayout1.setObjectName("gridlayout1")
-        self.ledState = TaurusStateLed(self.TaurusGroupBox)
-        self.ledState.setLedSize(24)
-        self.ledState.setUseParentModel(True)
-        self.ledState.setObjectName("ledState")
-        self.gridlayout1.addWidget(self.ledState, 0, 0, 1, 1)
-        self.labelState = TaurusValueLabel(self.TaurusGroupBox)
-        self.labelState.setMinimumSize(QtCore.QSize(50, 22))
-        self.labelState.setFrameShape(QtGui.QFrame.NoFrame)
-        self.labelState.setFrameShadow(QtGui.QFrame.Plain)
-        self.labelState.setShowQuality(False)
-        self.labelState.setUseParentModel(True)
-        self.labelState.setObjectName("labelState")
-        self.gridlayout1.addWidget(self.labelState, 0, 1, 1, 1)
-        self.hboxlayout = QtGui.QHBoxLayout()
-        self.hboxlayout.setObjectName("hboxlayout")
-        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.hboxlayout.addItem(spacerItem)
-        self.limitN = TaurusBoolLed(self.TaurusGroupBox)
-        self.limitN.setUseParentModel(True)
-        self.limitN.setBoolIndex(2)
-        self.limitN.setObjectName("limitN")
-        self.hboxlayout.addWidget(self.limitN)
-        self.limitLabel = QtGui.QLabel(self.TaurusGroupBox)
-        self.limitLabel.setAlignment(QtCore.Qt.AlignCenter)
-        self.limitLabel.setObjectName("limitLabel")
-        self.hboxlayout.addWidget(self.limitLabel)
-        self.gridlayout1.addLayout(self.hboxlayout, 0, 3, 1, 1)
-        self.limitP = TaurusBoolLed(self.TaurusGroupBox)
-        self.limitP.setUseParentModel(True)
-        self.limitP.setBoolIndex(1)
-        self.limitP.setObjectName("limitP")
-        self.gridlayout1.addWidget(self.limitP, 0, 4, 1, 1)
-        self.positionLabel = TaurusConfigLabel(self.TaurusGroupBox)
-        self.positionLabel.setUseParentModel(True)
-        self.positionLabel.setObjectName("positionLabel")
-        self.gridlayout1.addWidget(self.positionLabel, 1, 0, 1, 2)
-        self.positionWrite = TaurusValueLineEdit(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.positionWrite.sizePolicy().hasHeightForWidth())
-        self.positionWrite.setSizePolicy(sizePolicy)
-        self.positionWrite.setMinimumSize(QtCore.QSize(70, 22))
-        self.positionWrite.setUseParentModel(True)
-        self.positionWrite.setObjectName("positionWrite")
-        self.gridlayout1.addWidget(self.positionWrite, 1, 2, 1, 1)
-        self.positionRead = TaurusValueLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.positionRead.sizePolicy().hasHeightForWidth())
-        self.positionRead.setSizePolicy(sizePolicy)
-        self.positionRead.setMinimumSize(QtCore.QSize(50, 22))
-        self.positionRead.setUseParentModel(True)
-        self.positionRead.setObjectName("positionRead")
-        self.gridlayout1.addWidget(self.positionRead, 1, 3, 1, 1)
-        self.positionUnits = TaurusConfigLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.positionUnits.sizePolicy().hasHeightForWidth())
-        self.positionUnits.setSizePolicy(sizePolicy)
-        self.positionUnits.setMinimumSize(QtCore.QSize(35, 22))
-        self.positionUnits.setMaximumSize(QtCore.QSize(35, 16777215))
-        self.positionUnits.setUseParentModel(True)
-        self.positionUnits.setObjectName("positionUnits")
-        self.gridlayout1.addWidget(self.positionUnits, 1, 4, 1, 1)
-        self.velocityLabel = TaurusConfigLabel(self.TaurusGroupBox)
-        self.velocityLabel.setUseParentModel(True)
-        self.velocityLabel.setObjectName("velocityLabel")
-        self.gridlayout1.addWidget(self.velocityLabel, 2, 0, 1, 2)
-        self.velocityWrite = TaurusValueLineEdit(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.velocityWrite.sizePolicy().hasHeightForWidth())
-        self.velocityWrite.setSizePolicy(sizePolicy)
-        self.velocityWrite.setMinimumSize(QtCore.QSize(70, 22))
-        self.velocityWrite.setUseParentModel(True)
-        self.velocityWrite.setObjectName("velocityWrite")
-        self.gridlayout1.addWidget(self.velocityWrite, 2, 2, 1, 1)
-        self.velocityRead = TaurusValueLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.velocityRead.sizePolicy().hasHeightForWidth())
-        self.velocityRead.setSizePolicy(sizePolicy)
-        self.velocityRead.setMinimumSize(QtCore.QSize(50, 22))
-        self.velocityRead.setUseParentModel(True)
-        self.velocityRead.setObjectName("velocityRead")
-        self.gridlayout1.addWidget(self.velocityRead, 2, 3, 1, 1)
-        self.velocityUnits = TaurusConfigLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.velocityUnits.sizePolicy().hasHeightForWidth())
-        self.velocityUnits.setSizePolicy(sizePolicy)
-        self.velocityUnits.setMinimumSize(QtCore.QSize(35, 22))
-        self.velocityUnits.setMaximumSize(QtCore.QSize(35, 16777215))
-        self.velocityUnits.setUseParentModel(True)
-        self.velocityUnits.setObjectName("velocityUnits")
-        self.gridlayout1.addWidget(self.velocityUnits, 2, 4, 1, 1)
-        self.accelLabel = TaurusConfigLabel(self.TaurusGroupBox)
-        self.accelLabel.setUseParentModel(True)
-        self.accelLabel.setObjectName("accelLabel")
-        self.gridlayout1.addWidget(self.accelLabel, 3, 0, 1, 2)
-        self.accelWrite = TaurusValueLineEdit(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.accelWrite.sizePolicy().hasHeightForWidth())
-        self.accelWrite.setSizePolicy(sizePolicy)
-        self.accelWrite.setMinimumSize(QtCore.QSize(70, 22))
-        self.accelWrite.setUseParentModel(True)
-        self.accelWrite.setObjectName("accelWrite")
-        self.gridlayout1.addWidget(self.accelWrite, 3, 2, 1, 1)
-        self.accelRead = TaurusValueLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.accelRead.sizePolicy().hasHeightForWidth())
-        self.accelRead.setSizePolicy(sizePolicy)
-        self.accelRead.setMinimumSize(QtCore.QSize(50, 22))
-        self.accelRead.setUseParentModel(True)
-        self.accelRead.setObjectName("accelRead")
-        self.gridlayout1.addWidget(self.accelRead, 3, 3, 1, 1)
-        self.accelUnits = TaurusConfigLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.accelUnits.sizePolicy().hasHeightForWidth())
-        self.accelUnits.setSizePolicy(sizePolicy)
-        self.accelUnits.setMinimumSize(QtCore.QSize(35, 22))
-        self.accelUnits.setMaximumSize(QtCore.QSize(35, 16777215))
-        self.accelUnits.setUseParentModel(True)
-        self.accelUnits.setObjectName("accelUnits")
-        self.gridlayout1.addWidget(self.accelUnits, 3, 4, 1, 1)
-        self.decelLabel = TaurusConfigLabel(self.TaurusGroupBox)
-        self.decelLabel.setUseParentModel(True)
-        self.decelLabel.setObjectName("decelLabel")
-        self.gridlayout1.addWidget(self.decelLabel, 4, 0, 1, 2)
-        self.decelWrite = TaurusValueLineEdit(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.decelWrite.sizePolicy().hasHeightForWidth())
-        self.decelWrite.setSizePolicy(sizePolicy)
-        self.decelWrite.setMinimumSize(QtCore.QSize(70, 22))
-        self.decelWrite.setUseParentModel(True)
-        self.decelWrite.setObjectName("decelWrite")
-        self.gridlayout1.addWidget(self.decelWrite, 4, 2, 1, 1)
-        self.decelRead = TaurusValueLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.decelRead.sizePolicy().hasHeightForWidth())
-        self.decelRead.setSizePolicy(sizePolicy)
-        self.decelRead.setMinimumSize(QtCore.QSize(50, 22))
-        self.decelRead.setUseParentModel(True)
-        self.decelRead.setObjectName("decelRead")
-        self.gridlayout1.addWidget(self.decelRead, 4, 3, 1, 1)
-        self.decelUnits = TaurusConfigLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.decelUnits.sizePolicy().hasHeightForWidth())
-        self.decelUnits.setSizePolicy(sizePolicy)
-        self.decelUnits.setMinimumSize(QtCore.QSize(35, 22))
-        self.decelUnits.setMaximumSize(QtCore.QSize(35, 16777215))
-        self.decelUnits.setUseParentModel(True)
-        self.decelUnits.setObjectName("decelUnits")
-        self.gridlayout1.addWidget(self.decelUnits, 4, 4, 1, 1)
-        self.offsetLabel = TaurusConfigLabel(self.TaurusGroupBox)
-        self.offsetLabel.setUseParentModel(True)
-        self.offsetLabel.setObjectName("offsetLabel")
-        self.gridlayout1.addWidget(self.offsetLabel, 5, 0, 1, 2)
-        self.offsetWrite = TaurusValueLineEdit(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.offsetWrite.sizePolicy().hasHeightForWidth())
-        self.offsetWrite.setSizePolicy(sizePolicy)
-        self.offsetWrite.setMinimumSize(QtCore.QSize(70, 22))
-        self.offsetWrite.setUseParentModel(True)
-        self.offsetWrite.setObjectName("offsetWrite")
-        self.gridlayout1.addWidget(self.offsetWrite, 5, 2, 1, 1)
-        self.offsetRead = TaurusValueLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.offsetRead.sizePolicy().hasHeightForWidth())
-        self.offsetRead.setSizePolicy(sizePolicy)
-        self.offsetRead.setMinimumSize(QtCore.QSize(50, 22))
-        self.offsetRead.setUseParentModel(True)
-        self.offsetRead.setObjectName("offsetRead")
-        self.gridlayout1.addWidget(self.offsetRead, 5, 3, 1, 1)
-        self.offsetUnits = TaurusConfigLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.offsetUnits.sizePolicy().hasHeightForWidth())
-        self.offsetUnits.setSizePolicy(sizePolicy)
-        self.offsetUnits.setMinimumSize(QtCore.QSize(35, 22))
-        self.offsetUnits.setMaximumSize(QtCore.QSize(35, 16777215))
-        self.offsetUnits.setUseParentModel(True)
-        self.offsetUnits.setObjectName("offsetUnits")
-        self.gridlayout1.addWidget(self.offsetUnits, 5, 4, 1, 1)
-        self.baseRateLabel = TaurusConfigLabel(self.TaurusGroupBox)
-        self.baseRateLabel.setUseParentModel(True)
-        self.baseRateLabel.setObjectName("baseRateLabel")
-        self.gridlayout1.addWidget(self.baseRateLabel, 6, 0, 1, 2)
-        self.baseRateWrite = TaurusValueLineEdit(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.baseRateWrite.sizePolicy().hasHeightForWidth())
-        self.baseRateWrite.setSizePolicy(sizePolicy)
-        self.baseRateWrite.setMinimumSize(QtCore.QSize(70, 22))
-        self.baseRateWrite.setUseParentModel(True)
-        self.baseRateWrite.setObjectName("baseRateWrite")
-        self.gridlayout1.addWidget(self.baseRateWrite, 6, 2, 1, 1)
-        self.baseRateRead = TaurusValueLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.baseRateRead.sizePolicy().hasHeightForWidth())
-        self.baseRateRead.setSizePolicy(sizePolicy)
-        self.baseRateRead.setMinimumSize(QtCore.QSize(50, 22))
-        self.baseRateRead.setUseParentModel(True)
-        self.baseRateRead.setObjectName("baseRateRead")
-        self.gridlayout1.addWidget(self.baseRateRead, 6, 3, 1, 1)
-        self.baseRateUnits = TaurusConfigLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.baseRateUnits.sizePolicy().hasHeightForWidth())
-        self.baseRateUnits.setSizePolicy(sizePolicy)
-        self.baseRateUnits.setMinimumSize(QtCore.QSize(35, 22))
-        self.baseRateUnits.setMaximumSize(QtCore.QSize(35, 16777215))
-        self.baseRateUnits.setUseParentModel(True)
-        self.baseRateUnits.setObjectName("baseRateUnits")
-        self.gridlayout1.addWidget(self.baseRateUnits, 6, 4, 1, 1)
-        self.stepsUnitLabel = TaurusConfigLabel(self.TaurusGroupBox)
-        self.stepsUnitLabel.setUseParentModel(True)
-        self.stepsUnitLabel.setObjectName("stepsUnitLabel")
-        self.gridlayout1.addWidget(self.stepsUnitLabel, 7, 0, 1, 2)
-        self.stepsUnitsWrite = TaurusValueLineEdit(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.stepsUnitsWrite.sizePolicy().hasHeightForWidth())
-        self.stepsUnitsWrite.setSizePolicy(sizePolicy)
-        self.stepsUnitsWrite.setMinimumSize(QtCore.QSize(70, 22))
-        self.stepsUnitsWrite.setUseParentModel(True)
-        self.stepsUnitsWrite.setObjectName("stepsUnitsWrite")
-        self.gridlayout1.addWidget(self.stepsUnitsWrite, 7, 2, 1, 1)
-        self.stepsUnitRead = TaurusValueLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.stepsUnitRead.sizePolicy().hasHeightForWidth())
-        self.stepsUnitRead.setSizePolicy(sizePolicy)
-        self.stepsUnitRead.setMinimumSize(QtCore.QSize(50, 22))
-        self.stepsUnitRead.setUseParentModel(True)
-        self.stepsUnitRead.setObjectName("stepsUnitRead")
-        self.gridlayout1.addWidget(self.stepsUnitRead, 7, 3, 1, 1)
-        self.stepsUnitUnits = TaurusConfigLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.stepsUnitUnits.sizePolicy().hasHeightForWidth())
-        self.stepsUnitUnits.setSizePolicy(sizePolicy)
-        self.stepsUnitUnits.setMinimumSize(QtCore.QSize(35, 22))
-        self.stepsUnitUnits.setMaximumSize(QtCore.QSize(35, 16777215))
-        self.stepsUnitUnits.setUseParentModel(True)
-        self.stepsUnitUnits.setObjectName("stepsUnitUnits")
-        self.gridlayout1.addWidget(self.stepsUnitUnits, 7, 4, 1, 1)
-        self.backlashLabel = TaurusConfigLabel(self.TaurusGroupBox)
-        self.backlashLabel.setUseParentModel(True)
-        self.backlashLabel.setObjectName("backlashLabel")
-        self.gridlayout1.addWidget(self.backlashLabel, 8, 0, 1, 2)
-        self.backlashWrite = TaurusValueLineEdit(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.backlashWrite.sizePolicy().hasHeightForWidth())
-        self.backlashWrite.setSizePolicy(sizePolicy)
-        self.backlashWrite.setMinimumSize(QtCore.QSize(70, 22))
-        self.backlashWrite.setUseParentModel(True)
-        self.backlashWrite.setObjectName("backlashWrite")
-        self.gridlayout1.addWidget(self.backlashWrite, 8, 2, 1, 1)
-        self.backlashRead = TaurusValueLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.backlashRead.sizePolicy().hasHeightForWidth())
-        self.backlashRead.setSizePolicy(sizePolicy)
-        self.backlashRead.setMinimumSize(QtCore.QSize(50, 22))
-        self.backlashRead.setUseParentModel(True)
-        self.backlashRead.setObjectName("backlashRead")
-        self.gridlayout1.addWidget(self.backlashRead, 8, 3, 1, 1)
-        self.backlashUnits = TaurusConfigLabel(self.TaurusGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.backlashUnits.sizePolicy().hasHeightForWidth())
-        self.backlashUnits.setSizePolicy(sizePolicy)
-        self.backlashUnits.setMinimumSize(QtCore.QSize(35, 22))
-        self.backlashUnits.setMaximumSize(QtCore.QSize(35, 16777215))
-        self.backlashUnits.setUseParentModel(True)
-        self.backlashUnits.setObjectName("backlashUnits")
-        self.gridlayout1.addWidget(self.backlashUnits, 8, 4, 1, 1)
-        self.gridlayout.addWidget(self.TaurusGroupBox, 0, 0, 1, 1)
-
-        self.retranslateUi(TaurusMotorV2)
-        QtCore.QMetaObject.connectSlotsByName(TaurusMotorV2)
-
-    def retranslateUi(self, TaurusMotorV2):
-        TaurusMotorV2.setWindowTitle(QtGui.QApplication.translate("TaurusMotorV2", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
-        self.ledState.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/State", None, QtGui.QApplication.UnicodeUTF8))
-        self.labelState.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/State", None, QtGui.QApplication.UnicodeUTF8))
-        self.limitN.setLedColor(QtGui.QApplication.translate("TaurusMotorV2", "ORANGE", None, QtGui.QApplication.UnicodeUTF8))
-        self.limitN.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Limit_switches", None, QtGui.QApplication.UnicodeUTF8))
-        self.limitLabel.setText(QtGui.QApplication.translate("TaurusMotorV2", "- lim +", None, QtGui.QApplication.UnicodeUTF8))
-        self.limitP.setLedColor(QtGui.QApplication.translate("TaurusMotorV2", "ORANGE", None, QtGui.QApplication.UnicodeUTF8))
-        self.limitP.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Limit_switches", None, QtGui.QApplication.UnicodeUTF8))
-        self.positionLabel.setSuffixText(QtGui.QApplication.translate("TaurusMotorV2", ":", None, QtGui.QApplication.UnicodeUTF8))
-        self.positionLabel.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Position?configuration=label", None, QtGui.QApplication.UnicodeUTF8))
-        self.positionWrite.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Position", None, QtGui.QApplication.UnicodeUTF8))
-        self.positionRead.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Position", None, QtGui.QApplication.UnicodeUTF8))
-        self.positionUnits.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Position?configuration=unit", None, QtGui.QApplication.UnicodeUTF8))
-        self.velocityLabel.setSuffixText(QtGui.QApplication.translate("TaurusMotorV2", ":", None, QtGui.QApplication.UnicodeUTF8))
-        self.velocityLabel.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Velocity?configuration=label", None, QtGui.QApplication.UnicodeUTF8))
-        self.velocityWrite.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Velocity", None, QtGui.QApplication.UnicodeUTF8))
-        self.velocityRead.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Velocity", None, QtGui.QApplication.UnicodeUTF8))
-        self.velocityUnits.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Velocity?configuration=unit", None, QtGui.QApplication.UnicodeUTF8))
-        self.accelLabel.setSuffixText(QtGui.QApplication.translate("TaurusMotorV2", ":", None, QtGui.QApplication.UnicodeUTF8))
-        self.accelLabel.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Acceleration?configuration=label", None, QtGui.QApplication.UnicodeUTF8))
-        self.accelWrite.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Acceleration", None, QtGui.QApplication.UnicodeUTF8))
-        self.accelRead.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Acceleration", None, QtGui.QApplication.UnicodeUTF8))
-        self.accelUnits.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Acceleration?configuration=unit", None, QtGui.QApplication.UnicodeUTF8))
-        self.decelLabel.setSuffixText(QtGui.QApplication.translate("TaurusMotorV2", ":", None, QtGui.QApplication.UnicodeUTF8))
-        self.decelLabel.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Deceleration?configuration=label", None, QtGui.QApplication.UnicodeUTF8))
-        self.decelWrite.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Deceleration", None, QtGui.QApplication.UnicodeUTF8))
-        self.decelRead.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Deceleration", None, QtGui.QApplication.UnicodeUTF8))
-        self.decelUnits.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Deceleration?configuration=unit", None, QtGui.QApplication.UnicodeUTF8))
-        self.offsetLabel.setSuffixText(QtGui.QApplication.translate("TaurusMotorV2", ":", None, QtGui.QApplication.UnicodeUTF8))
-        self.offsetLabel.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Offset?configuration=label", None, QtGui.QApplication.UnicodeUTF8))
-        self.offsetWrite.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Offset", None, QtGui.QApplication.UnicodeUTF8))
-        self.offsetRead.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Offset", None, QtGui.QApplication.UnicodeUTF8))
-        self.offsetUnits.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Offset?configuration=unit", None, QtGui.QApplication.UnicodeUTF8))
-        self.baseRateLabel.setSuffixText(QtGui.QApplication.translate("TaurusMotorV2", ":", None, QtGui.QApplication.UnicodeUTF8))
-        self.baseRateLabel.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Base_rate?configuration=label", None, QtGui.QApplication.UnicodeUTF8))
-        self.baseRateWrite.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Base_rate", None, QtGui.QApplication.UnicodeUTF8))
-        self.baseRateRead.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Base_rate", None, QtGui.QApplication.UnicodeUTF8))
-        self.baseRateUnits.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Base_rate?configuration=unit", None, QtGui.QApplication.UnicodeUTF8))
-        self.stepsUnitLabel.setSuffixText(QtGui.QApplication.translate("TaurusMotorV2", ":", None, QtGui.QApplication.UnicodeUTF8))
-        self.stepsUnitLabel.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Step_per_unit?configuration=label", None, QtGui.QApplication.UnicodeUTF8))
-        self.stepsUnitsWrite.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Step_per_unit", None, QtGui.QApplication.UnicodeUTF8))
-        self.stepsUnitRead.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Step_per_unit", None, QtGui.QApplication.UnicodeUTF8))
-        self.stepsUnitUnits.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Step_per_unit?configuration=unit", None, QtGui.QApplication.UnicodeUTF8))
-        self.backlashLabel.setSuffixText(QtGui.QApplication.translate("TaurusMotorV2", ":", None, QtGui.QApplication.UnicodeUTF8))
-        self.backlashLabel.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Backlash?configuration=label", None, QtGui.QApplication.UnicodeUTF8))
-        self.backlashWrite.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Backlash", None, QtGui.QApplication.UnicodeUTF8))
-        self.backlashRead.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Backlash", None, QtGui.QApplication.UnicodeUTF8))
-        self.backlashUnits.setModel(QtGui.QApplication.translate("TaurusMotorV2", "/Backlash?configuration=unit", None, QtGui.QApplication.UnicodeUTF8))
-
-from taurus.qt.qtgui.display import TaurusBoolLed, TaurusConfigLabel, TaurusStateLed, TaurusValueLabel
-from taurus.qt.qtgui.container import TaurusGroupBox
-from taurus.qt.qtgui.input import TaurusValueLineEdit
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    TaurusMotorV2 = QtGui.QDialog()
-    ui = Ui_TaurusMotorV2()
-    ui.setupUi(TaurusMotorV2)
-    TaurusMotorV2.show()
-    sys.exit(app.exec_())
-
diff --git a/lib/taurus/qt/qtgui/extra_sardana/__init__.py b/lib/taurus/qt/qtgui/extra_sardana/__init__.py
index e07aa48..2953ab8 100644
--- a/lib/taurus/qt/qtgui/extra_sardana/__init__.py
+++ b/lib/taurus/qt/qtgui/extra_sardana/__init__.py
@@ -1,41 +1,24 @@
-#!/usr/bin/env python
-
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
 #############################################################################
 
-"""This package contains a collection of taurus widgets designed to connect
-to sardana"""
-
-__docformat__ = 'restructuredtext'
-
-from .measurementgroup import *
-from .expdescription import *
-from .elementtree import *
-
-try:
-    from .sardanaeditor import *
-except:
-    from taurus.qt.qtgui.display import create_taurus_fallback as __create
-    SardanaEditor = __create("SardanaEditor")
-
-
+from sardana.taurus.qt.qtgui.extra_sardana import *
diff --git a/lib/taurus/qt/qtgui/extra_sardana/cmdline.py b/lib/taurus/qt/qtgui/extra_sardana/cmdline.py
deleted file mode 100644
index df83764..0000000
--- a/lib/taurus/qt/qtgui/extra_sardana/cmdline.py
+++ /dev/null
@@ -1,110 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""This package contains a collection of taurus widgets designed to connect
-to sardana"""
-
-__docformat__ = 'restructuredtext'
-
-from taurus.qt import Qt
-
-from taurus.qt.qtgui.resource import getIcon, getThemeIcon
-
-class CommandLineHistory(list):
-    pass
-    
-class CommandLine(Qt.QComboBox):
-    
-    def __init__(self, qt_parent=None, designMode=False):
-        Qt.QComboBox.__init__(self, qt_parent)
-        self.setEditable(True)
-        self.setFrame(False)
-
-class TaurusCommandLineWidget(Qt.QWidget):
-    
-    def __init__(self, qt_parent=None, designMode=False):
-        Qt.QWidget.__init__(self, qt_parent)
-        
-        self._history = CommandLineHistory()
-        
-        l = Qt.QHBoxLayout()
-        self.setLayout(l)
-        l.setContentsMargins(0,0,0,0)
-        l.setSpacing(0)
-        
-        self._detailsButton = Qt.QToolButton()
-        self._detailsButton.setText("...")
-        
-        self._cmdLine = Qt.QComboBox()
-        self._cmdLine.setEditable(True)
-
-        self._applyButton = Qt.QToolButton()
-        self._applyButton.setIcon(getIcon(":/actions/media_playback_start.svg"))
-        
-        self._stopButton = Qt.QToolButton()
-        self._stopButton.setIcon(getIcon(":/actions/media_playback_stop.svg"))
-        
-        self._clearButton = Qt.QToolButton()
-        self._clearButton.setIcon(getThemeIcon("edit-clear"))
-        
-        l.addWidget(self._detailsButton, 0)
-        l.addWidget(self._cmdLine, 1)
-        l.addWidget(self._applyButton, 0)
-        l.addWidget(self._stopButton, 0)
-        l.addWidget(self._clearButton, 0)
-    
-    
-    
-    def run(self):
-        pass
-        
-def demo():
-    pass
-
-def main():
-    import sys
-    import taurus.qt.qtgui.application
-    Application = taurus.qt.qtgui.application.TaurusApplication
-    
-    app = Application.instance()
-    owns_app = app is None
-    
-    if owns_app:
-        import taurus.core.util.argparse
-        parser = taurus.core.util.argparse.get_taurus_parser()
-        app = Application(sys.argv, cmd_line_parser=parser, 
-                          app_name="Taurus command line demo", app_version="1.0",
-                          org_domain="Taurus", org_name="Tango community")
-        
-    w = TaurusCommandLineWidget()
-    w.show()
-    
-    if owns_app:
-        sys.exit(app.exec_())
-    else:
-        return w
-
-if __name__ == '__main__':
-    main()
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_sardana/controllertree.py b/lib/taurus/qt/qtgui/extra_sardana/controllertree.py
deleted file mode 100644
index 9a12ff7..0000000
--- a/lib/taurus/qt/qtgui/extra_sardana/controllertree.py
+++ /dev/null
@@ -1,346 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""This module contains a taurus text editor widget."""
-
-__all__ = ["ControllerClassTreeWidget", "ControllerClassSelectionDialog"]
-
-__docformat__ = 'restructuredtext'
-
-import sys
-import os
-
-from taurus.qt import Qt
-
-import taurus.core
-
-from taurus.core.util.enumeration import Enumeration
-
-from taurus.qt.qtcore.model import TaurusBaseTreeItem, TaurusBaseModel, TaurusBaseProxyModel
-from taurus.qt.qtgui.tree import TaurusBaseTreeWidget
-from taurus.qt.qtgui.resource import getThemeIcon, getIcon
-
-PoolControllerView = Enumeration("PoolControllerView", ("ControllerModule", "ControllerClass", "Unknown"))
-
-def getElementTypeIcon(t):
-    if t == PoolControllerView.ControllerModule:
-        return getIcon(":/python-file.png")
-    elif t == PoolControllerView.ControllerClass:
-        return getIcon(":/python.png")
-    return getIcon(":/tango.png")
-    
-def getElementTypeSize(t):
-    return Qt.QSize(200,24)
-
-def getElementTypeToolTip(t):
-    """Wrapper to prevent loading qtgui when this module is imported"""
-    if t == PoolControllerView.ControllerModule:
-        return "Controller module"
-    elif t == PoolControllerView.ControllerClass:
-        return "Controller class"
-
-
-class ControllerBaseTreeItem(TaurusBaseTreeItem):
-    """A generic node"""
-
-    def data(self, index):
-        """Returns the data of this node for the given index
-        
-        :return: (object) the data for the given index
-        """
-        return self._itemData
-    
-    def role(self):
-        """Returns the prefered role for the item.
-        This implementation returns taurus.core.taurusbasetypes.TaurusElementType.Unknown
-        
-        This method should be able to return any kind of python object as long
-        as the model that is used is compatible.
-        
-        :return: (PoolControllerView) the role in form of element type"""
-        return PoolControllerView.Unknown
-
-
-class ControllerModuleTreeItem(ControllerBaseTreeItem):
-
-    def role(self):
-        return PoolControllerView.ControllerModule
-
-    def toolTip(self):
-        return "The controller module '%s'" % self.display()
-    
-    def icon(self):
-        return getIcon(":/python-file.png")
-    
-    
-class ControllerTreeItem(ControllerBaseTreeItem):
-
-    def data(self, index):
-        """Returns the data of this node for the given index
-        
-        :return: (object) the data for the given index
-        """
-        return self._itemData.name
-
-    def role(self):
-        return PoolControllerView.ControllerClass
-
-    def toolTip(self):
-        return self._itemData.doc
-
-    def icon(self):
-        return getIcon(":/python.png")
-
-
-class ControllerBaseModel(TaurusBaseModel):
-    
-    ColumnNames = "Controllers",
-    ColumnRoles = (PoolControllerView.ControllerModule, PoolControllerView.ControllerModule, PoolControllerView.ControllerClass),
-    
-    def setDataSource(self, pool):
-        if self._data_src is not None:
-            Qt.QObject.disconnect(self._data_src, Qt.SIGNAL('controllerClassesUpdated'), self.controllerClassesUpdated)
-        if pool is not None:
-            Qt.QObject.connect(pool, Qt.SIGNAL('controllerClassesUpdated'), self.controllerClassesUpdated)
-        TaurusBaseModel.setDataSource(self, pool)
-
-    def controllerClassesUpdated(self):
-        self.refresh()
-
-    def createNewRootItem(self):
-        return ControllerBaseTreeItem(self, self.ColumnNames)
-    
-    def roleIcon(self, role):
-        return getElementTypeIcon(role)
-    
-    def columnIcon(self, column):
-        return self.roleIcon(self.role(column))
-    
-    def roleToolTip(self, role):
-        return getElementTypeToolTip(role)
-
-    def columnToolTip(self, column):
-        return self.roleToolTip(self.role(column))
-    
-    def roleSize(self, role):
-        return getElementTypeSize(role)
-
-    def columnSize(self, column):
-        role = self.role(column)
-        s = self.roleSize(role)
-        return s
-    
-    def mimeTypes(self):
-        return ["text/plain", taurus.qt.qtcore.mimetypes.TAURUS_MODEL_LIST_MIME_TYPE, taurus.qt.qtcore.mimetypes.TAURUS_MODEL_MIME_TYPE]
-
-    def mimeData(self, indexes):
-        ret = Qt.QMimeData()
-        data = []
-        for index in indexes:
-            if not index.isValid(): continue
-            tree_item = index.internalPointer()
-            mime_data_item = tree_item.mimeData(index)
-            if mime_data_item is None:
-                continue
-            data.append(mime_data_item)
-        ret.setData(taurus.qt.qtcore.mimetypes.TAURUS_MODEL_LIST_MIME_TYPE, "\r\n".join(data))
-        ret.setText(", ".join(data))
-        if len(data)==1:
-            ret.setData(taurus.qt.qtcore.mimetypes.TAURUS_MODEL_MIME_TYPE, str(data[0]))
-        return ret
-
-    def pyData(self, index, role):
-        if not index.isValid():
-            return None
-        
-        item = index.internalPointer()
-        row, column, depth = index.row(), index.column(), item.depth()
-        item_role = self.role(column, depth)
-        
-        ret = None
-        if role == Qt.Qt.DisplayRole:
-            ret = Qt.QString(item.data(index))
-        elif role == Qt.Qt.DecorationRole:
-            ret = item.icon()
-        elif role == Qt.Qt.ToolTipRole:
-            ret = item.toolTip()
-        #elif role == Qt.Qt.SizeHintRole:
-        #    ret = self.columnSize(column)
-        elif role == Qt.Qt.FontRole:
-            ret = self.DftFont
-        return ret
-
-    def setupModelData(self, data):
-        pool = self.dataSource()
-        if pool is None:
-            return
-        root = self._rootItem
-        ctrl_modules = {}
-        # TODO
-        #ctrl_class_dict = pool.getControllerClasses()
-        #for ctrl_class_name, ctrl_class in ctrl_class_dict.items():
-        #    module_name = ctrl_class.module_name
-        #    moduleNode = ctrl_modules.get(module_name)
-        #    if moduleNode is None:
-        #        moduleNode = ControllerModuleTreeItem(self, module_name, root)
-        #        root.appendChild(moduleNode)
-        #        ctrl_modules[module_name] = moduleNode
-        #    ctrlNode = ControllerTreeItem(self, ctrl_class, moduleNode)
-        #    moduleNode.appendChild(ctrlNode)
-    
-
-class ControllerModuleModel(ControllerBaseModel):
-    pass
-
-
-class PlainControllerModel(ControllerBaseModel):
-
-    ColumnNames = "Controller classes",
-    ColumnRoles = (PoolControllerView.ControllerClass, PoolControllerView.ControllerClass),
-
-    def setupModelData(self, data):
-        pool = self.dataSource()
-        if pool is None:
-            return
-        root = self._rootItem
-        # TODO
-        #ctrl_class_dict = pool.getControllerClasses()
-        #ctrl_classes = ctrl_class_dict.keys()
-        #ctrl_classes.sort()
-        #self.debug("Found %d controller classes", len(ctrl_classes))
-        #for ctrl_class_name in ctrl_classes:
-        #    ctrl_class = ctrl_class_dict[ctrl_class_name]
-        #    ctrlNode = ControllerTreeItem(self, ctrl_class, root)
-        #    root.appendChild(ctrlNode)
-
-
-class ControllerBaseModelProxy(TaurusBaseProxyModel):
-    pass
-
-
-class ControllerModuleModelProxy(ControllerBaseModelProxy):
-    pass
-
-
-class PlainControllerModelProxy(ControllerBaseModelProxy):
-    pass
-
-
-class ControllerClassTreeWidget(TaurusBaseTreeWidget):
-    
-    KnownPerspectives = { PoolControllerView.ControllerModule : {
-                            "label" : "By module",
-                            "icon" : ":/python-file.png",
-                            "tooltip" : "View by controller module",
-                            "model" : [ControllerModuleModelProxy, ControllerModuleModel],
-                          },
-                          PoolControllerView.ControllerClass : {
-                            "label" : "By controller",
-                            "icon" : ":/python.png",
-                            "tooltip" : "View by controller class",
-                            "model" : [PlainControllerModelProxy, PlainControllerModel], 
-                          }
-    }
-    DftPerspective = PoolControllerView.ControllerModule
-        
-    def getModelClass(self):
-        return taurus.core.taurusdevice.TaurusDevice
-
-
-class ControllerClassSelectionDialog(Qt.QDialog):
-    
-    def __init__(self, parent=None, designMode=False, model_name=None, perspective=None):
-        Qt.QDialog.__init__(self, parent)
-        
-        self.setWindowTitle("Controller Class Selection Dialog")
-        
-        layout = Qt.QVBoxLayout()
-        layout.setContentsMargins(0, 0, 0, 0)
-        self.setLayout(layout)
-        self._panel = ControllerClassTreeWidget(parent=self,
-                                                perspective=perspective,
-                                                designMode=designMode,
-                                                with_navigation_bar=False)
-        self._panel.setModel(model_name)
-        self.setWindowIcon(getElementTypeIcon(self._panel.perspective()))
-        self._buttonBox = Qt.QDialogButtonBox(self)
-        bts = Qt.QDialogButtonBox.Ok | Qt.QDialogButtonBox.Cancel
-        self._buttonBox.setStandardButtons(bts)
-        layout.addWidget(self._panel)
-        layout.addWidget(self._buttonBox)
-        self.connect(self._buttonBox, Qt.SIGNAL("accepted()"), self.accept)
-        self.connect(self._buttonBox, Qt.SIGNAL("rejected()"), self.reject)
-    
-    def selectedItems(self):
-        return self._panel.selectedItems()
-        
-    def getSelectedMacros(self):
-        return [ i.itemData() for i in self.selectedItems() ]
-
-
-def main_ControllerClassSelecionDialog(pool, perspective=PoolControllerView.ControllerClass):
-    w = ControllerClassSelectionDialog(model_name=pool, perspective=perspective)
-    
-    if w.result() == Qt.QDialog.Accepted:
-        print w.getSelectedMacros()
-    return w
-    
-def main_ControllerClassTreeWidget(pool, perspective=PoolControllerView.ControllerClass):
-    w = ControllerClassTreeWidget(perspective=perspective,with_navigation_bar=False)
-    w.setModel(pool)
-    w.show()
-    return w
-
-def demo(poolname="Pool_BL98"):
-    """ControllerClassTreeWidget"""
-    w = main_ControllerClassSelecionDialog(poolname, PoolControllerView.ControllerClass)
-    return w
-
-def main():
-    import sys
-    import taurus.qt.qtgui.application
-    Application = taurus.qt.qtgui.application.TaurusApplication
-    
-    app = Application.instance()
-    owns_app = app is None
-    
-    if owns_app:
-        app = Application(app_name="Pool controller class tree demo", app_version="1.0",
-                          org_domain="Taurus", org_name="Tango community")
-    
-    args = app.get_command_line_args()
-    if len(args)==1:
-        w = demo(poolname=args[0])
-    else:
-        w = demo()
-        
-    w.show()
-    if owns_app:
-        sys.exit(app.exec_())
-    else:
-        return w
-    
-if __name__ == "__main__":
-    main()
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_sardana/elementtree.py b/lib/taurus/qt/qtgui/extra_sardana/elementtree.py
deleted file mode 100644
index 763651e..0000000
--- a/lib/taurus/qt/qtgui/extra_sardana/elementtree.py
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""This module contains a taurus text editor widget."""
-
-__all__ = ["SardanaElementTreeWidget"]
-
-__docformat__ = 'restructuredtext'
-
-from taurus.core.taurusdevice import TaurusDevice
-from taurus.qt.qtcore.tango.sardana.model import SardanaBaseProxyModel, \
-    SardanaElementTypeModel
-from taurus.qt.qtgui.tree import TaurusBaseTreeWidget
-
-class SardanaElementTreeWidget(TaurusBaseTreeWidget):
-    
-    KnownPerspectives = { "Type" : {
-                          "label" : "By type",
-                          "icon" : ":/python-file.png",
-                          "tooltip" : "View elements by type",
-                          "model" : [SardanaBaseProxyModel, SardanaElementTypeModel],
-                        },
-    }
-    DftPerspective = "Type"
-        
-    def getModelClass(self):
-        return TaurusDevice
-    
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        ret = TaurusBaseTreeWidget.getQtDesignerPluginInfo()
-        ret['module'] = 'taurus.qt.qtgui.extra_sardana'
-        ret['group'] = 'Taurus Sardana'
-        ret['icon'] = ":/designer/listview.png"
-        return ret
-
-
-def main_SardanaTreeWidget(device):
-    w = SardanaElementTreeWidget(with_navigation_bar=True)
-    w.setWindowTitle("Sardana browser - " + device)
-    w.setModel(device)
-    w.setMinimumSize(400,800)
-    w.show()
-    return w
-
-def demo(device="V3"):
-    """"""
-    w = main_SardanaTreeWidget(device)
-    return w
-
-def main():
-    import sys
-    import taurus.qt.qtgui.application
-    Application = taurus.qt.qtgui.application.TaurusApplication
-    
-    app = Application.instance()
-    owns_app = app is None
-    
-    if owns_app:
-        app = Application(app_name="Pool element tree demo", app_version="1.0",
-                          org_domain="Taurus", org_name="Tango community")
-    
-    args = app.get_command_line_args()
-    if len(args)==1:
-        w = demo(device=args[0])
-    else:
-        w = demo()
-        
-    w.show()
-    if owns_app:
-        sys.exit(app.exec_())
-    else:
-        return w
-    
-if __name__ == "__main__":
-    main()
diff --git a/lib/taurus/qt/qtgui/extra_sardana/environment.py b/lib/taurus/qt/qtgui/extra_sardana/environment.py
deleted file mode 100644
index d5bf8dd..0000000
--- a/lib/taurus/qt/qtgui/extra_sardana/environment.py
+++ /dev/null
@@ -1,101 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""This module contains a taurus environment widgets."""
-
-__all__ = ["SardanaEnvironmentTreeWidget"]
-
-__docformat__ = 'restructuredtext'
-
-from taurus.core.taurusdevice import TaurusDevice
-from taurus.qt import Qt
-from taurus.qt.qtcore.tango.sardana.model import SardanaEnvironmentModel
-from taurus.qt.qtgui.tree import TaurusBaseTreeWidget
-
-
-class SardanaEnvironmentTreeWidget(TaurusBaseTreeWidget):
-    
-    KnownPerspectives = { "Type" : {
-                          "label" : "By key",
-                          "icon" : ":/python-file.png",
-                          "tooltip" : "View elements by key",
-                          "model" : [SardanaEnvironmentModel],
-                        },
-    }
-    DftPerspective = "Type"
-        
-    def getModelClass(self):
-        return TaurusDevice
-    
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        ret = TaurusBaseTreeWidget.getQtDesignerPluginInfo()
-        ret['module'] = 'taurus.qt.qtgui.extra_sardana'
-        ret['group'] = 'Taurus Sardana'
-        ret['icon'] = ":/designer/listview.png"
-        return ret
-
-
-def main_SardanaTreeWidget(device):
-    w = SardanaEnvironmentTreeWidget(with_navigation_bar=True)
-    w.setWindowTitle("Sardana browser - " + device)
-    w.setModel(device)
-    w.setMinimumSize(400,800)
-    w.show()
-    return w
-
-def demo(device="V3"):
-    """"""
-    w = main_SardanaTreeWidget(device)
-    return w
-
-def main():
-    import sys
-    import taurus.qt.qtgui.application
-    Application = taurus.qt.qtgui.application.TaurusApplication
-    
-    app = Application.instance()
-    owns_app = app is None
-    
-    if owns_app:
-        app = Application(app_name="Sardana environment tree demo", app_version="1.0",
-                          org_domain="Taurus", org_name="Tango community")
-    
-    args = app.get_command_line_args()
-    if len(args)==1:
-        w = demo(device=args[0])
-    else:
-        w = demo()
-        
-    w.show()
-    if owns_app:
-        sys.exit(app.exec_())
-    else:
-        return w
-    
-if __name__ == "__main__":
-    main()
-
-
diff --git a/lib/taurus/qt/qtgui/extra_sardana/expdescription.py b/lib/taurus/qt/qtgui/extra_sardana/expdescription.py
deleted file mode 100644
index 21a4de3..0000000
--- a/lib/taurus/qt/qtgui/extra_sardana/expdescription.py
+++ /dev/null
@@ -1,395 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""This module provides widget for configuring the data acquisition and display of an experiment"""
-
-__all__ = ["ExpDescriptionEditor"]
-
-from taurus.qt import Qt
-import copy
-import taurus
-import taurus.core
-from taurus.qt.qtgui.base import TaurusBaseWidget
-from taurus.qt.qtcore.tango.sardana.model import SardanaBaseProxyModel, SardanaTypeTreeItem
-
-## Using a plain model and filtering and checking 'Acquirable' in item.itemData().interfaces is more elegant, but things don't get properly sorted...
-#from taurus.qt.qtcore.tango.sardana.model import SardanaElementPlainModel
-        
-class SardanaAcquirableProxyModel(SardanaBaseProxyModel):
-#    ALLOWED_TYPES = 'Acquirable'
-#    
-#    def filterAcceptsRow(self, sourceRow, sourceParent):
-#        sourceModel = self.sourceModel()
-#        idx = sourceModel.index(sourceRow, 0, sourceParent)
-#        item = idx.internalPointer()
-#        return 'Acquirable' in item.itemData().interfaces
-
-#    ALLOWED_TYPES = ['Motor', 'CTExpChannel', 'ZeroDExpChannel', 'OneDExpChannel',
-#                     'TwoDExpChannel', 'ComChannel', 'IORegister', 'PseudoMotor',
-#                     'PseudoCounter']
-
-    from sardana.sardanadefs import ElementType, TYPE_ACQUIRABLE_ELEMENTS
-    ALLOWED_TYPES = [ElementType[t] for t in TYPE_ACQUIRABLE_ELEMENTS]
-
-    def filterAcceptsRow(self, sourceRow, sourceParent):
-        sourceModel = self.sourceModel()
-        idx = sourceModel.index(sourceRow, 0, sourceParent)
-        treeItem = idx.internalPointer()
-        if isinstance(treeItem, SardanaTypeTreeItem):
-            return treeItem.itemData() in self.ALLOWED_TYPES
-        return True
-
-class ExpDescriptionEditor(Qt.QWidget, TaurusBaseWidget):
-    '''
-    A widget for editing the configuration of a experiment (measurement groups,
-    plot and storage parameters, etc).
-    
-    It receives a Sardana Door name as its model and gets/sets the configuration
-    using the `ExperimentConfiguration` environmental variable for that Door.
-    '''
-    def __init__(self, parent=None, door=None):
-        Qt.QWidget.__init__(self, parent)
-        TaurusBaseWidget.__init__(self, 'ExpDescriptionEditor')
-        from ui.ui_ExpDescriptionEditor import Ui_ExpDescriptionEditor
-        self.ui = Ui_ExpDescriptionEditor()
-        self.ui.setupUi(self)
-        self.ui.buttonBox.setStandardButtons(Qt.QDialogButtonBox.Reset | Qt.QDialogButtonBox.Apply)
-        newperspectivesDict = copy.deepcopy(self.ui.sardanaElementTree.KnownPerspectives)
-        #newperspectivesDict[self.ui.sardanaElementTree.DftPerspective]['model'] = [SardanaAcquirableProxyModel, SardanaElementPlainModel]
-        newperspectivesDict[self.ui.sardanaElementTree.DftPerspective]['model'][0] = SardanaAcquirableProxyModel
-        self.ui.sardanaElementTree.KnownPerspectives = newperspectivesDict #assign a copy because if just a key of this class memberwas modified, all instances of this class would be affected 
-        self.ui.sardanaElementTree._setPerspective(self.ui.sardanaElementTree.DftPerspective)
-        
-        self._localConfig = None
-        self._originalConfiguration = None
-        self._dirty = False
-        self._dirtyMntGrps = set()
-        
-        self.connect(self.ui.activeMntGrpCB, Qt.SIGNAL('activated (QString)'), self.changeActiveMntGrp)
-        self.connect(self.ui.createMntGrpBT, Qt.SIGNAL('clicked ()'), self.createMntGrp)
-        self.connect(self.ui.deleteMntGrpBT, Qt.SIGNAL('clicked ()'), self.deleteMntGrp)
-        self.connect(self.ui.compressionCB, Qt.SIGNAL('currentIndexChanged (int)'), self.onCompressionCBChanged )
-        self.connect(self.ui.pathLE, Qt.SIGNAL('textEdited (QString)'), self.onPathLEEdited )
-        self.connect(self.ui.filenameLE, Qt.SIGNAL('textEdited (QString)'), self.onFilenameLEEdited )
-        self.connect(self.ui.channelEditor.getQModel(), Qt.SIGNAL('dataChanged (QModelIndex, QModelIndex)'), self._updateButtonBox )
-        self.connect(self.ui.channelEditor.getQModel(), Qt.SIGNAL('modelReset ()'), self._updateButtonBox )
-        self.connect(self.ui.preScanList, Qt.SIGNAL('dataChanged'), self.onPreScanSnapshotChanged )
-        self.connect(self.ui.choosePathBT, Qt.SIGNAL('clicked ()'), self.onChooseScanDirButtonClicked)
-        
-        if door is not None:
-            self.setModel(door)
-        self.connect(self.ui.buttonBox, Qt.SIGNAL("clicked(QAbstractButton *)"), self.onDialogButtonClicked)
-        
-        #Taurus Configuration properties and delegates
-        self.registerConfigDelegate(self.ui.channelEditor)
-             
-    def getModelClass(self):
-        '''reimplemented from :class:`TaurusBaseWidget`'''
-        return taurus.core.taurusdevice.TaurusDevice
-        
-    def onChooseScanDirButtonClicked(self):
-        ret = Qt.QFileDialog.getExistingDirectory ( self, 'Choose directory for saving files', self.ui.pathLE.text())
-        if ret:
-            self.ui.pathLE.setText(ret)
-            self.ui.pathLE.emit(Qt.SIGNAL('textEdited (QString)'),ret)
-        
-    def onDialogButtonClicked(self, button):
-        role = self.ui.buttonBox.buttonRole(button)
-        if role == Qt.QDialogButtonBox.ApplyRole:
-            self.writeExperimentConfiguration(ask=False)
-        elif role == Qt.QDialogButtonBox.ResetRole:
-            self._reloadConf()
-    
-    def closeEvent(self,event):
-        '''This event handler receives widget close events'''
-        if self.isDataChanged():
-            self.writeExperimentConfiguration(ask=True)
-        Qt.QWidget.closeEvent(self,event)
-    
-    def setModel(self, model):
-        '''reimplemented from :class:`TaurusBaseWidget`'''
-        TaurusBaseWidget.setModel(self, model)
-        self._reloadConf(force=True)
-        #set the model of some child widgets
-        door = self.getModelObj()
-        if door is None: return
-        tghost = taurus.Database().getNormalName() #@todo: get the tghost from the door model instead
-        msname = door.macro_server.getFullName()
-        self.ui.taurusModelTree.setModel(tghost)
-        self.ui.sardanaElementTree.setModel(msname)
-
-    def _reloadConf(self, force=False):
-        if not force and self.isDataChanged():
-            op = Qt.QMessageBox.question(self, "Reload info from door", 
-                "If you reload, all current experiment configuration changes will be lost. Reload?", 
-                Qt.QMessageBox.Yes|Qt.QMessageBox.Cancel)
-            if op != Qt.QMessageBox.Yes: 
-                return
-        door = self.getModelObj()
-        if door is None: return
-        conf = door.getExperimentConfiguration()
-        self._originalConfiguration = copy.deepcopy(conf)
-        self.setLocalConfig(conf)
-        self._setDirty(False)
-        self._dirtyMntGrps = set()
-        #set a list of available channels
-        avail_channels = {}
-        for ch_info in door.macro_server.getExpChannelElements().values():
-            avail_channels[ch_info.full_name] = ch_info.getData()
-        self.ui.channelEditor.getQModel().setAvailableChannels(avail_channels)
-    
-    def _setDirty(self,dirty):
-        self._dirty = dirty
-        self._updateButtonBox()
-        
-    def isDataChanged(self):
-        """Tells if the local data has been modified since it was last refreshed
-        
-        :return: (bool) True if he local data has been modified since it was last refreshed
-        """
-        return bool(self._dirty or self.ui.channelEditor.getQModel().isDataChanged() or self._dirtyMntGrps)
-    
-    def _updateButtonBox(self, *args, **kwargs):
-        self.ui.buttonBox.setEnabled(self.isDataChanged())
-
-    def getLocalConfig(self):
-        return self._localConfig
-
-    def setLocalConfig(self, conf):
-        '''gets a ExpDescription dictionary and sets up the widget'''
-    
-        self._localConfig = conf
-        
-        #set the Channel Editor
-        activeMntGrpName = self._localConfig['ActiveMntGrp'] or ''
-        if activeMntGrpName in self._localConfig['MntGrpConfigs']:
-            mgconfig = self._localConfig['MntGrpConfigs'][activeMntGrpName]
-            self.ui.channelEditor.getQModel().setDataSource(mgconfig)
-        
-        #set the measurement group ComboBox
-        self.ui.activeMntGrpCB.clear()
-        self.ui.activeMntGrpCB.addItems(sorted(self._localConfig['MntGrpConfigs'].keys()))
-        idx = self.ui.activeMntGrpCB.findText(activeMntGrpName)
-        self.ui.activeMntGrpCB.setCurrentIndex(idx)
-        
-        #set the system snapshot list
-        psl = self._localConfig.get('PreScanSnapshot') #I get it before clearing because clear() changes the _localConfig
-        self.ui.preScanList.clear()
-        self.ui.preScanList.addModels(psl)
-        
-        #other settings
-        self.ui.filenameLE.setText(", ".join(self._localConfig['ScanFile']))
-        self.ui.pathLE.setText(self._localConfig['ScanDir'] or '')
-        self.ui.compressionCB.setCurrentIndex(self._localConfig['DataCompressionRank']+1)
-        
-    def writeExperimentConfiguration(self, ask=True):
-        '''sends the current local configuration to the door
-        
-        :param ask: (bool) If True (default) prompts the user before saving.
-        '''
-
-        if ask:
-            op = Qt.QMessageBox.question(self, "Save configuration?", 
-                                        'Do you want to save the current configuration?\n(if not, any changes will be lost)', 
-                                        Qt.QMessageBox.Yes|Qt.QMessageBox.No)
-            if op != Qt.QMessageBox.Yes:
-                return False
-        
-        conf = self.getLocalConfig()
-        
-        #make sure that no empty measurement groups are written
-        for mgname, mgconfig in conf.get('MntGrpConfigs',{}).items():
-            if mgconfig is not None and not mgconfig.get('controllers'):
-                Qt.QMessageBox.information(self, "Empty Measurement group", 
-                "The measurement group '%s' is empty. Fill it (or delete it) before applying"%mgname, 
-                Qt.QMessageBox.Ok)
-                self.changeActiveMntGrp(mgname)
-                return False
-        
-        #check if the currently displayed mntgrp is changed
-        if self.ui.channelEditor.getQModel().isDataChanged():
-            self._dirtyMntGrps.add(self._localConfig['ActiveMntGrp'])
-                   
-        door = self.getModelObj()
-        door.setExperimentConfiguration(conf, mnt_grps=self._dirtyMntGrps)
-        self._originalConfiguration = copy.deepcopy(conf)
-        self._dirtyMntGrps = set()
-        self.ui.channelEditor.getQModel().setDataChanged(False)
-        self._setDirty(False)
-        self.emit(Qt.SIGNAL('experimentConfigurationChanged'), copy.deepcopy(conf))
-        return True
-        
-    def changeActiveMntGrp(self, activeMntGrpName):
-        activeMntGrpName = str(activeMntGrpName)
-        if self._localConfig is None: 
-            return
-        if activeMntGrpName == self._localConfig['ActiveMntGrp']: 
-            return #nothing changed
-        if activeMntGrpName not in self._localConfig['MntGrpConfigs']: 
-            raise KeyError('Unknown measurement group "%s"'%activeMntGrpName)
-        
-        #add the previous measurement group to the list of "dirty" groups if something was changed
-        if self.ui.channelEditor.getQModel().isDataChanged():
-            self._dirtyMntGrps.add(self._localConfig['ActiveMntGrp'])
-                            
-        self._localConfig['ActiveMntGrp'] = activeMntGrpName
-        
-        i = self.ui.activeMntGrpCB.findText(activeMntGrpName, Qt.Qt.MatchExactly)
-        self.ui.activeMntGrpCB.setCurrentIndex(i)
-        mgconfig = self._localConfig['MntGrpConfigs'][activeMntGrpName]
-        self.ui.channelEditor.getQModel().setDataSource(mgconfig)
-        self._setDirty(True)
-        
-    def createMntGrp(self):
-        '''creates a new Measurement Group'''     
-        
-        if self._localConfig is None:
-            return
-           
-        mntGrpName, ok = Qt.QInputDialog.getText(self, "New Measurement Group", 
-                                                 "Enter a name for the new measurement Group")
-        if not ok: return
-        mntGrpName = str(mntGrpName)
-        
-        #check that the given name is not an existing pool element
-        ms = self.getModelObj().macro_server
-        poolElementNames = [v.name for v in ms.getElementsWithInterface("PoolElement").values()]
-        while mntGrpName in poolElementNames:
-            Qt.QMessageBox.warning(self, "Cannot create Measurement group", 
-                "The name '%s' already is used for another pool element. Please Choose a different one."%mntGrpName, 
-                Qt.QMessageBox.Ok)
-            mntGrpName, ok = Qt.QInputDialog.getText(self, "New Measurement Group", 
-                                                     "Enter a name for the new measurement Group",
-                                                     Qt.QLineEdit.Normal,
-                                                     mntGrpName)
-            if not ok: return
-            mntGrpName = str(mntGrpName)
-            
-        #check that the measurement group is not already in the localConfig
-        if mntGrpName in self._localConfig['MntGrpConfigs']:
-            Qt.QMessageBox.warning(self, "%s already exists"%mntGrpName, 
-                'A measurement group named "%s" already exists. A new one will not be created'%mntGrpName)
-            return
-        
-        #add an empty configuration dictionary to the local config        
-        mgconfig = {'label': mntGrpName, 'controllers':{} }
-        self._localConfig['MntGrpConfigs'][mntGrpName] = mgconfig
-        #add the new measurement group to the list of "dirty" groups
-        self._dirtyMntGrps.add(mntGrpName)
-        #add the name to the combobox
-        self.ui.activeMntGrpCB.addItem(mntGrpName)
-        #make it the Active MntGrp
-        self.changeActiveMntGrp(mntGrpName)
-        
-    def deleteMntGrp(self):
-        '''creates a new Measurement Group'''
-        activeMntGrpName = str(self.ui.activeMntGrpCB.currentText())
-        op = Qt.QMessageBox.question(self, "Delete Measurement Group", 
-                "Remove the measurement group '%s'?"%activeMntGrpName, 
-                Qt.QMessageBox.Yes|Qt.QMessageBox.Cancel)
-        if op != Qt.QMessageBox.Yes: 
-            return
-        currentIndex = self.ui.activeMntGrpCB.currentIndex()
-        if self._localConfig is None:
-            return
-        if activeMntGrpName not in self._localConfig['MntGrpConfigs']: 
-            raise KeyError('Unknown measurement group "%s"'%activeMntGrpName)
-        
-        #add the current measurement group to the list of "dirty" groups
-        self._dirtyMntGrps.add(activeMntGrpName)
-        
-        self._localConfig['MntGrpConfigs'][activeMntGrpName] = None
-        self.ui.activeMntGrpCB.setCurrentIndex(-1)
-        self.ui.activeMntGrpCB.removeItem(currentIndex)
-        self.ui.channelEditor.getQModel().setDataSource({})
-        self._setDirty(True)
-        
-    def onCompressionCBChanged(self, idx):
-        if self._localConfig is None: return
-        self._localConfig['DataCompressionRank'] = idx - 1
-        self._setDirty(True)
-        
-    def onPathLEEdited(self, text):
-        self._localConfig['ScanDir'] = str(text)
-        self._setDirty(True)
-        
-    def onFilenameLEEdited(self, text):
-        self._localConfig['ScanFile'] = [v.strip() for v in str(text).split(',')]
-        self._setDirty(True)
-        
-    def onPreScanSnapshotChanged(self, items):
-        door = self.getModelObj()
-        ms = door.macro_server
-        preScanList = []
-        for e in items:
-            nfo = ms.getElementInfo(e.src)
-            if nfo is None:
-                preScanList.append((e.src,e.display)) 
-            else:
-                preScanList.append((nfo.full_name,nfo.name))
-        self._localConfig['PreScanSnapshot'] = preScanList
-        self._setDirty(True)    
-       
-   
-def demo(model=None):
-    """Experiment configuration"""
-    #w = main_ChannelEditor()
-    w = ExpDescriptionEditor()
-    if model is None:
-        from taurus.qt.qtgui.extra_macroexecutor import TaurusMacroConfigurationDialog
-        dialog = TaurusMacroConfigurationDialog(w)
-        accept = dialog.exec_()
-        if accept:
-            model = str(dialog.doorComboBox.currentText())
-    if model is not None:
-        w.setModel(model)
-    return w
-
-def main():
-    import sys
-    import taurus.qt.qtgui.application
-    Application = taurus.qt.qtgui.application.TaurusApplication
-    
-    app = Application.instance()
-    owns_app = app is None
-    
-    if owns_app:
-        app = Application(app_name="Exp. Description demo", app_version="1.0",
-                          org_domain="Sardana", org_name="Tango community")
-    
-    args = app.get_command_line_args()
-    if len(args)==1:
-        w = demo(model=args[0])
-    else:
-        w = demo()
-    w.show()
-    
-    if owns_app:
-        sys.exit(app.exec_())
-    else:
-        return w
-    
-if __name__ == "__main__":
-    main()
diff --git a/lib/taurus/qt/qtgui/extra_sardana/macrotree.py b/lib/taurus/qt/qtgui/extra_sardana/macrotree.py
deleted file mode 100644
index 4f6e6eb..0000000
--- a/lib/taurus/qt/qtgui/extra_sardana/macrotree.py
+++ /dev/null
@@ -1,320 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""This module contains a taurus text editor widget."""
-
-__all__ = ["MacroTreeWidget", "MacroSelectionDialog"]
-
-__docformat__ = 'restructuredtext'
-
-import sys
-import os
-
-from taurus.qt import Qt
-
-import taurus.core
-
-from taurus.core.util.enumeration import Enumeration
-from taurus.core.tango.sardana.macro import MacroInfo
-
-from taurus.qt.qtcore.model import TaurusBaseTreeItem, TaurusBaseModel, TaurusBaseProxyModel
-from taurus.qt.qtgui.tree import TaurusBaseTreeWidget
-from taurus.qt.qtgui.resource import getThemeIcon, getIcon
-
-MacroView = Enumeration("MacroView", ("MacroModule", "Macro", "Unknown"))
-
-def getElementTypeIcon(t):
-    if t == MacroView.MacroModule:
-        return getIcon(":/python-file.png")
-    elif t == MacroView.Macro:
-        return getIcon(":/python.png")
-    return getIcon(":/tango.png")
-    
-def getElementTypeSize(t):
-    return Qt.QSize(200,24)
-
-def getElementTypeToolTip(t):
-    """Wrapper to prevent loading qtgui when this module is imported"""
-    if t == MacroView.MacroModule:
-        return "Macro module"
-    elif t == MacroView.Macro:
-        return "Macro item"
-    return "Unknown"
-
-
-class MacroTreeBaseItem(TaurusBaseTreeItem):
-    """A generic node"""
-
-    def data(self, index):
-        """Returns the data of this node for the given index
-        
-        :return: (object) the data for the given index
-        """
-        return self._itemData
-    
-    def role(self):
-        """Returns the prefered role for the item.
-        This implementation returns taurus.core.taurusbasetypes.TaurusElementType.Unknown
-        
-        This method should be able to return any kind of python object as long
-        as the model that is used is compatible.
-        
-        :return: (MacroView) the role in form of element type"""
-        return MacroView.Unknown
-
-
-class MacroModuleTreeItem(MacroTreeBaseItem):
-
-    def role(self):
-        return MacroView.MacroModule
-
-    def toolTip(self, index):
-        return "The macro module '%s'" % self.display()
-    
-    def icon(self, index):
-        return getIcon(":/python-file.png")
-    
-    
-class MacroTreeItem(MacroTreeBaseItem):
-
-    def data(self, index):
-        """Returns the data of this node for the given index
-        
-        :return: (object) the data for the given index
-        """
-        return self._itemData.name
-
-    def role(self):
-        return MacroView.Macro
-
-    def toolTip(self, index):
-        return self._itemData.doc
-
-    def icon(self, index):
-        return getIcon(":/python.png")
-
-
-class MacroBaseModel(TaurusBaseModel):
-    
-    ColumnNames = "Macros",
-    ColumnRoles = (MacroView.MacroModule, MacroView.MacroModule, MacroView.Macro),
-    
-    def setDataSource(self, ms):
-        if self._data_src is not None:
-            Qt.QObject.disconnect(self._data_src, Qt.SIGNAL('macrosUpdated'), self.macrosUpdated)
-        if ms is not None:
-            Qt.QObject.connect(ms, Qt.SIGNAL('macrosUpdated'), self.macrosUpdated)
-        TaurusBaseModel.setDataSource(self, ms)
-
-    def macrosUpdated(self):
-        self.refresh()
-
-    def createNewRootItem(self):
-        return MacroTreeBaseItem(self, self.ColumnNames)
-    
-    def roleIcon(self, role):
-        return getElementTypeIcon(role)
-    
-    def columnIcon(self, column):
-        return self.roleIcon(self.role(column))
-    
-    def roleToolTip(self, role):
-        return getElementTypeToolTip(role)
-
-    def columnToolTip(self, column):
-        return self.roleToolTip(self.role(column))
-    
-    def roleSize(self, role):
-        return getElementTypeSize(role)
-
-    def columnSize(self, column):
-        role = self.role(column)
-        s = self.roleSize(role)
-        return s
-    
-    def mimeTypes(self):
-        return ["text/plain", taurus.qt.qtcore.mimetypes.TAURUS_MODEL_LIST_MIME_TYPE, taurus.qt.qtcore.mimetypes.TAURUS_MODEL_MIME_TYPE]
-
-    def mimeData(self, indexes):
-        ret = Qt.QMimeData()
-        data = []
-        for index in indexes:
-            if not index.isValid(): continue
-            tree_item = index.internalPointer()
-            mime_data_item = tree_item.mimeData(index)
-            if mime_data_item is None:
-                continue
-            data.append(mime_data_item)
-        ret.setData(taurus.qt.qtcore.mimetypes.TAURUS_MODEL_LIST_MIME_TYPE, "\r\n".join(data))
-        ret.setText(", ".join(data))
-        if len(data)==1:
-            ret.setData(taurus.qt.qtcore.mimetypes.TAURUS_MODEL_MIME_TYPE, str(data[0]))
-        return ret
-
-
-
-    def setupModelData(self, data):
-        ms = self.dataSource()
-        if ms is None:
-            return
-        root = self._rootItem
-        macro_modules = {}
-        macro_dict = ms.getMacros()
-        for macro_name, macro in macro_dict.items():
-            module_name = macro.module
-            moduleNode = macro_modules.get(module_name)
-            if moduleNode is None:
-                moduleNode = MacroModuleTreeItem(self, module_name, root)
-                root.appendChild(moduleNode)
-                macro_modules[module_name] = moduleNode
-            macroNode = MacroTreeItem(self, macro, moduleNode)
-            moduleNode.appendChild(macroNode)
-    
-
-class MacroModuleModel(MacroBaseModel):
-    pass
-
-
-class MacroPlainMacroModel(MacroBaseModel):
-
-    ColumnNames = "Macros",
-    ColumnRoles = (MacroView.Macro, MacroView.Macro),
-
-    def setupModelData(self, data):
-        ms = self.dataSource()
-        if ms is None:
-            return
-        root = self._rootItem
-        macro_dict = ms.getMacros()
-        macros = macro_dict.keys()
-        macros.sort()
-        self.debug("Found %d macros", len(macros))
-        for macro_name in macros:
-            macro = macro_dict[macro_name]
-            macroNode = MacroTreeItem(self, macro, root)
-            root.appendChild(macroNode)
-
-
-class MacroBaseModelProxy(TaurusBaseProxyModel):
-    pass
-
-
-class MacroModuleModelProxy(MacroBaseModelProxy):
-    pass
-
-
-class MacroPlainMacroModelProxy(MacroBaseModelProxy):
-    pass
-
-
-class MacroTreeWidget(TaurusBaseTreeWidget):
-    
-    KnownPerspectives = { MacroView.MacroModule : {
-                            "label" : "By module",
-                            "icon" : ":/python-file.png",
-                            "tooltip" : "View by macro module",
-                            "model" : [MacroModuleModelProxy, MacroModuleModel],
-                          },
-                          MacroView.Macro : {
-                            "label" : "By macro",
-                            "icon" : ":/python.png",
-                            "tooltip" : "View by macro",
-                            "model" : [MacroPlainMacroModelProxy, MacroPlainMacroModel], 
-                          }
-    }
-    DftPerspective = MacroView.MacroModule
-        
-    def getModelClass(self):
-        return taurus.core.taurusdevice.TaurusDevice
-
-
-class MacroSelectionDialog(Qt.QDialog):
-    
-    def __init__(self, parent=None, designMode=False, model_name=None, perspective=None):
-        Qt.QDialog.__init__(self, parent)
-        
-        self.setWindowTitle("Macro Selection Dialog")
-        
-        layout = Qt.QVBoxLayout()
-        layout.setContentsMargins(0, 0, 0, 0)
-        self.setLayout(layout)
-        self._panel = MacroTreeWidget(parent=self, perspective=perspective, 
-                                      designMode=designMode,
-                                      with_navigation_bar=False)
-        self._panel.setModel(model_name)
-        self.setWindowIcon(getElementTypeIcon(self._panel.perspective()))
-        self._buttonBox = Qt.QDialogButtonBox(self)
-        bts = Qt.QDialogButtonBox.Ok | Qt.QDialogButtonBox.Cancel
-        self._buttonBox.setStandardButtons(bts)
-        layout.addWidget(self._panel)
-        layout.addWidget(self._buttonBox)
-        self.connect(self._buttonBox, Qt.SIGNAL("accepted()"), self.accept)
-        self.connect(self._buttonBox, Qt.SIGNAL("rejected()"), self.reject)
-    
-    def selectedItems(self):
-        return self._panel.selectedItems()
-        
-    def getSelectedMacros(self):
-        return [ i.itemData() for i in self.selectedItems() ]
-
-
-def main_MacroSelecionDialog(ms, perspective=MacroView.MacroModule):
-    w = MacroSelectionDialog(model_name=ms, perspective=perspective)
-    
-    if w.result() == Qt.QDialog.Accepted:
-        print w.getSelectedMacros()
-    return w
-    
-def main_MacroTreeWidget(ms, perspective=MacroView.MacroModule):
-    w = MacroTreeWidget(perspective=perspective,with_navigation_bar=False)
-    w.setModel(ms)
-    w.show()
-    return w
-
-def demo():
-    """MacroTreeWidget"""
-    w = main_MacroSelecionDialog("MS_BL98", MacroView.Macro)
-    return w
-
-def main():
-    import sys
-    import taurus.qt.qtgui.application
-    Application = taurus.qt.qtgui.application.TaurusApplication
-    
-    app = Application.instance()
-    owns_app = app is None
-    
-    if owns_app:
-        app = Application(app_name="MacroServer macro tree demo", app_version="1.0",
-                          org_domain="Taurus", org_name="Tango community")
-    w = demo()
-    w.show()
-    if owns_app:
-        sys.exit(app.exec_())
-    else:
-        return w
-    
-if __name__ == "__main__":
-    main()
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_sardana/measurementgroup.py b/lib/taurus/qt/qtgui/extra_sardana/measurementgroup.py
deleted file mode 100644
index 3b93cbf..0000000
--- a/lib/taurus/qt/qtgui/extra_sardana/measurementgroup.py
+++ /dev/null
@@ -1,980 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-##
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-##
-## Taurus 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.
-##
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""This module provides a base widget that can be used to display a taurus
-model in a table widget"""
-
-__all__ = ["MntGrpChannelEditor"]
-
-__docformat__ = 'restructuredtext'
-
-from taurus.qt import Qt
-#import copy
-import taurus
-
-from taurus.qt.qtcore.model import TaurusBaseTreeItem, TaurusBaseModel
-from taurus.qt.qtgui.model import EditorToolBar
-from taurus.qt.qtgui.resource import getIcon, getThemeIcon
-from taurus.qt.qtgui.table import TaurusBaseTableWidget
-from taurus.qt.qtgui.panel import TaurusModelChooser
-from taurus.core.tango.sardana import ChannelView, PlotType, Normalization, AcqTriggerType
-from taurus.core.tango.sardana.pool import getChannelConfigs
-from taurus.core.taurusbasetypes import TaurusElementType
-
-#===============================================================================
-# some dummydict for developing the "Experimental Configuration widget"
-# This block is to be removed and the dictionaries will be defined and
-# initialized in Sardana's Door code
-
-
-# dict <str, obj> with (at least) keys:
-#    - 'timer' : the timer channel name / timer channel id
-#    - 'monitor' : the monitor channel name / monitor channel id
-#    - 'controllers' : dict<Controller, dict> where:
-#        - key: ctrl
-#        - value: dict<str, dict> with (at least) keys:
-#            - 'units': dict<str, dict> with (at least) keys:
-#                - 'id' : the unit ID inside the controller
-#                - 'timer' : the timer channel name / timer channel id
-#                - 'monitor' : the monitor channel name / monitor channel id
-#                - 'trigger_type' : a value from AcqTriggerType enum
-#                - 'channels' where value is a dict<str, obj> with (at least) keys:
-#                    - 'index' : int indicating the position of the channel in the measurement group
-#                    - 'id' : the channel name ( channel id )
-#                    optional keys:
-#                    - 'enabled' : True/False (default is True)
-#                    any hints:
-#                    - 'output' : True/False (default is True)
-#                    - 'plot_type' : a value from PlotType enum
-#                    - 'plot_axes' : list<str> 'where str is channel name/'step#/'index#' (default is [])
-#                    - 'label' : prefered label (default is channel name)
-#                    - 'scale' : <float, float> with min/max (defaults to channel
-#                                range if it is defined
-#                    - 'plot_color' : int representing RGB
-#    optional keys:
-#    - 'label' : measurement group label (defaults to measurement group name)
-#    - 'description' : measurement group description
-
-
-#===============================================================================
-DEFAULT_STRING_LENGTH = 80 #just an arbitrary value to use as default string length...
-
-def createChannelDict(channel, index=None, **kwargs):
-    from taurus.core.tango import FROM_TANGO_TO_STR_TYPE
-    import PyTango
-    import numpy
-
-    if isinstance(channel, (str, unicode)):
-        #@fixme: to make things uglier, I lazily assume Tango attribute namin
-        dev_name, attr_name = channel.rsplit('/', 1)
-        name = attr_name
-        try:
-            dev = PyTango.DeviceProxy(dev_name)
-            db = dev.get_device_db()
-            try:
-                alias = db.get_alias(dev.name())
-            except:
-                # no alias...
-                alias = dev.name()
-            label = alias + "/" + attr_name
-        except:
-            label = channel
-        full_name = channel
-        source = channel
-    else:
-        name = channel['name']
-        label = name
-        full_name = channel['full_name']
-        source = channel['source']
-
-    ret = {
-           'name' : name,
-           'label': label,
-           'full_name': full_name,
-           'enabled': True,  # bool. Whether this channel is enabled (if not enabled, it won't be used for output or plot)
-           'output': True,   # bool. Whether to show output in the stdout
-           'data_type':'float64',
-           'data_units': 'No unit',
-#           'timer': '', #should contain a channel name
-#           'monitor': '', #should contain a channel name
-#           'trigger': '', #should contain a channel name
-           'conditioning': '', #this is a python expresion to be evaluated for conditioning the data. The data for this channel can be referred as 'x' and data from other channels can be referred by channel name
-           'normalization': Normalization.No, # one of the Normalization enumeration members
-           'nexus_path': '', #string indicating the location of the data of this channel within the nexus tree
-           }
-
-    #If the channel is a Tango one, try to guess data_type, shape and data_units
-    attrproxy = attrconf = value = None
-    dtype = shape = None
-    try:
-        attrproxy = PyTango.AttributeProxy(source)
-        attrconf = attrproxy.get_config()
-        # avoid trying to read for scalars. We know that their shape must be ()
-        if attrconf.data_format != PyTango.AttrDataFormat.SCALAR:
-            value = attrproxy.read().value
-    except Exception,e:
-        print str(e)
-
-    if value is not None:
-        shape = list(numpy.shape(value))
-        dtype = getattr(value, 'dtype', numpy.dtype(type(value))).name
-        ret['data_units'] = attrconf.unit
-    elif attrconf is not None:
-        if attrconf.data_format == PyTango.AttrDataFormat.SCALAR:
-            shape = []
-        else:
-            shape = [n for n in (attrconf.max_dim_x,attrconf.max_dim_y) if n>0]
-        dtype = FROM_TANGO_TO_STR_TYPE[attrconf.data_type]
-        ret['data_units'] = attrconf.unit
-
-    if dtype is not None:
-#        if dtype.startswith('str'):
-#            dtype='char'
-#            shape = list(shape)+[DEFAULT_STRING_LENGTH]
-#        elif dtype == 'bool':
-#            dtype='int8'
-        ret['data_type'] = dtype
-    if shape is not None:
-        ret['shape'] = shape
-
-    #now overwrite using the arguments
-    ret.update(kwargs)
-
-    #Calculate the index
-    if index is not None:
-        ret['index'] = index  #an integer used for ordering the channel in this measurement group
-
-    #Choose a default plot_type for the channel
-    if 'plot_type' not in ret:
-        default_plot_type = {0:PlotType.Spectrum, 2:PlotType.Image, None:PlotType.No}
-        try: rank = len(ret['shape'])
-        except KeyError:
-            rank = None #if shape is not known, use the default plot_type
-        ret['plot_type'] = default_plot_type.get(rank, PlotType.No)
-
-    #And a default value for plot_axes
-    if 'plot_axes' not in ret:
-        default_axes = {PlotType.No:[], PlotType.Spectrum:['<mov>'], PlotType.Image:['<idx>','<idx>']}
-        ret['plot_axes'] = default_axes[ret['plot_type']] # a string defining a colon-separated list of axis names. An axis can be a channel name or "<idx>". This shares the syntax of the NeXus @axes attribute
-
-    return ret
-
-
-
-def getElementTypeIcon(t):
-    if t == ChannelView.Channel:
-        return getIcon(":/actions/system-shutdown.svg")
-    elif t == ChannelView.Enabled:
-        return getIcon(":/status/true.svg")
-    elif t == ChannelView.Output:
-        return getThemeIcon("utilities-terminal")
-    elif t == ChannelView.PlotType:
-        return getIcon(":/apps/utilities-system-monitor.svg")
-    elif t == ChannelView.PlotAxes:
-        return getIcon(":/apps/utilities-system-monitor.svg")
-    elif t == ChannelView.Timer:
-        return getIcon(":/status/flag-green-clock.svg")
-    elif t == ChannelView.Monitor:
-        return getIcon(":/status/flag-green.svg")
-    elif t == ChannelView.Trigger:
-        return getIcon(":/actions/system-shutdown.svg")
-    elif t == ChannelView.NXPath:
-        return getThemeIcon("document-save-as")
-
-    return getIcon(":/tango.png")
-
-
-def getElementTypeSize(t):
-    if t == ChannelView.Channel:
-        return Qt.QSize(200,24)
-    elif t == ChannelView.Enabled:
-        return Qt.QSize(50,24)
-    elif t == ChannelView.Output:
-        return Qt.QSize(50,24)
-    elif t == ChannelView.PlotType:
-        return Qt.QSize(50,24)
-    return Qt.QSize(50,24)
-
-
-def getElementTypeToolTip(t):
-    """Wrapper to prevent loading qtgui when this module is imported"""
-    if t == ChannelView.Channel:
-        return "Channel"
-    elif t == ChannelView.Enabled:
-        return "Channel active or not"
-    elif t == ChannelView.Output:
-        return "Channel output active or not"
-    elif t == ChannelView.Shape:
-        return "Shape of the data (using numpy convention). For example, a scalar will have shape=(), a spectrum of 10 elements will have shape=(10,) and an image of 20x30 will be shape=(20,30)"
-    elif t == ChannelView.DataType:
-        return "Type of data for storing (valid types are: char, float32, float64, [u]int{8|16|32|64})",
-    elif t == ChannelView.PlotType:
-        return "Plot type for this channel "
-    elif t == ChannelView.PlotAxes:
-        return "Independent variables to be used in the plot of this channel"
-    elif t == ChannelView.Timer:
-        return "The channel to be used as the timer"
-    elif t == ChannelView.Monitor:
-        return "The channel to be used as a monitor for stopping the acquisition"
-    elif t == ChannelView.Trigger:
-        return "The channel to be used for triggering the acquisition"
-    elif t == ChannelView.Conditioning:
-        return "An expression to evaluate on the data when displaying it"
-    elif t == ChannelView.Normalization:
-        return "Normalization mode for the data"
-    elif t == ChannelView.NXPath:
-        return "Location of the data of this channel within the NeXus tree"
-    return "Unknown"
-
-
-class BaseMntGrpChannelItem(TaurusBaseTreeItem):
-    """ """
-    def data(self, index):
-        """Returns the data of this node for the given index
-
-        :return: (object) the data for the given index
-        """
-        return self._itemData
-
-    def role(self):
-        """Returns the prefered role for the item.
-        This implementation returns ChannelView.Unknown
-
-        This method should be able to return any kind of python object as long
-        as the model that is used is compatible.
-
-        :return: (MacroView) the role in form of element type"""
-        return ChannelView.Unknown
-
-
-class MntGrpChannelItem(BaseMntGrpChannelItem):
-
-    itemdata_keys_map = {ChannelView.Channel:'label',
-                         ChannelView.Enabled:'enabled',
-                         ChannelView.Output:'output',
-                         ChannelView.Shape:'shape',
-                         ChannelView.DataType:'data_type',
-                         ChannelView.PlotType:'plot_type',
-                         ChannelView.PlotAxes:'plot_axes',
-#                         ChannelView.Timer:'timer',
-#                         ChannelView.Monitor:'monitor',
-#                         ChannelView.Trigger:'trigger',
-                         ChannelView.Conditioning:'conditioning',
-                         ChannelView.Normalization:'normalization',
-                         ChannelView.NXPath:'nexus_path'
-                         }
-
-    def data(self, index):
-        """Returns the data of this node for the given index
-
-        :return: (object) the data for the given index
-        """
-        taurus_role = index.model().role(index.column())
-        ch_name, ch_data = self.itemData()
-        key = self.itemdata_keys_map[taurus_role]
-        ret = ch_data[key]
-        if taurus_role == ChannelView.PlotType:
-            ret = PlotType[ret]
-        elif taurus_role == ChannelView.Normalization:
-            ret = Normalization[ret]
-        elif taurus_role == ChannelView.PlotAxes:
-            ret = ":".join(ret)
-        elif taurus_role == ChannelView.Shape:
-            ret = str(ret)
-        return ret
-
-    def setData(self, index, qvalue):
-        taurus_role = index.model().role(index.column())
-        str_value = Qt.from_qvariant(qvalue, str)
-        if taurus_role in (ChannelView.Channel, ChannelView.Conditioning,
-                           ChannelView.NXPath, ChannelView.DataType) :
-            data = str_value
-        elif taurus_role in (ChannelView.Enabled, ChannelView.Output) :
-            data = Qt.from_qvariant(qvalue, bool)
-        elif taurus_role == ChannelView.PlotType:
-            data = PlotType[str_value]
-        elif taurus_role == ChannelView.Normalization:
-            data = Normalization[str_value]
-        elif taurus_role == ChannelView.PlotAxes:
-            data = [a for a in str_value.split(':')]
-        elif taurus_role == ChannelView.Shape:
-            s = str_value
-            try:
-                data = eval(s,{},{})
-                if not isinstance(data,(tuple,list)):
-                    raise ValueError
-            except:
-                from taurus.core.util.log import Logger
-                Logger(self.__class__.__name__).error('Invalid shape %s',s )
-                data = ()
-        else:
-            raise NotImplementedError('Unknown role')
-        ch_name, ch_data = self.itemData()
-        key = self.itemdata_keys_map[taurus_role]
-        ch_data[key] = data
-
-    def role(self):
-        return ChannelView.Channel
-
-    def toolTip(self, index):
-        return "Channel " + self._itemData[0]
-
-    def icon(self, index):
-        taurus_role = index.model().role(index.column())
-        if taurus_role == ChannelView.Channel:
-            return getIcon(":/actions/system-shutdown.svg")
-
-
-class MntGrpUnitItem(TaurusBaseTreeItem):
-    pass
-
-
-class BaseMntGrpChannelModel(TaurusBaseModel):
-    ColumnNames = ("Channel", "enabled", "output", "Shape", "Data Type", "Plot Type", "Plot Axes", "Timer",
-                  "Monitor", "Trigger", "Conditioning", "Normalization","NeXus Path")
-    ColumnRoles = ((ChannelView.Channel, ChannelView.Channel), ChannelView.Enabled,
-                  ChannelView.Output, ChannelView.Shape, ChannelView.DataType, ChannelView.PlotType,
-                  ChannelView.PlotAxes, ChannelView.Timer, ChannelView.Monitor,
-                  ChannelView.Trigger, ChannelView.Conditioning,
-                  ChannelView.Normalization, ChannelView.NXPath)
-    DftFont = Qt.QFont()
-
-    _availableChannels = {}
-    data_keys_map = {ChannelView.Timer:'timer',
-                     ChannelView.Monitor:'monitor',
-                     ChannelView.Trigger:'trigger_type',
-                     }
-
-    def __init__(self, parent=None, data=None):
-        TaurusBaseModel.__init__(self, parent=parent, data=data)
-        self._mgconfig = None
-        self._dirty = False
-
-    def setAvailableChannels(self,cdict):
-        self._availableChannels = cdict
-
-    def getAvailableChannels(self):
-        return self._availableChannels
-
-    def createNewRootItem(self):
-        return BaseMntGrpChannelItem(self, self.ColumnNames)
-
-    def roleIcon(self, taurus_role):
-        return getElementTypeIcon(taurus_role)
-
-    def roleSize(self, taurus_role):
-        return getElementTypeSize(taurus_role)
-
-    def roleToolTip(self, taurus_role):
-        return getElementTypeToolTip(taurus_role)
-
-    def getPyData(self, ctrlname=None, unitid=None, chname=None, key=None):
-        '''
-        If controller name, unitid and channel name are given, it returns the dictionary with the channel info.
-        If only controller name and unit id are given, it returns the dictionary with the unit info.
-        If only controller name is given, it returns the dictionary with the controller info.
-
-        Note that it will raise a KeyError exception if any of the keys are not
-        found or if chname is given without providing the unit id
-        '''
-        if ctrlname is None:
-            raise ValueError('controller name must be passed')
-        if unitid is None:
-            return self._mgconfig['controllers'][ctrlname]
-        elif chname is None:
-            return  self._mgconfig['controllers'][ctrlname]['units'][unitid]
-        else:
-            return  self._mgconfig['controllers'][ctrlname]['units'][unitid]['channels'][chname]
-
-    def setupModelData(self, mgconfig):
-        if mgconfig is None:
-            return
-        root = self._rootItem #@The root could eventually be changed for each unit or controller
-        channelNodes = [MntGrpChannelItem(self, chcfg, root) for chcfg in getChannelConfigs(mgconfig)]
-        for ch in channelNodes:
-            root.appendChild(ch)
-        self.updateMntGrpChannelIndex(root=root)
-        #store the whole config object for accessing the info that is not at the channel level
-        self._mgconfig = mgconfig
-
-    def setDataSource(self, data_src):
-        self._dirty = False
-        TaurusBaseModel.setDataSource(self, data_src)
-
-    def updateMntGrpChannelIndex(self, root=None):
-        '''
-        assigns the MeasurementGroup index (the internal order in the MG)
-        according to the order in the QModel
-        '''
-        if root is None:
-            root = self._rootItem
-        for row in range(root.childCount()):
-            chname,chdata = root.child(row).itemData()
-            chdata['index'] = row
-
-    def flags(self, index):
-        flags = TaurusBaseModel.flags(self, index)
-        taurus_role = self.role(index.column())
-        if taurus_role == ChannelView.Channel: #channel column is not editable
-            return flags
-        elif taurus_role == ChannelView.Trigger:
-            ch_name, ch_data = index.internalPointer().itemData()
-            if not ch_data['_controller_name'].startswith("__"):
-                ch_info = self.getAvailableChannels()[ch_name]
-                #only timer/monitor columns of counter timers are editable
-                if ch_info['type'] in ('CTExpChannel', 'OneDExpChannel', 'TwoDExpChannel'):
-                    flags |= Qt.Qt.ItemIsEditable
-        elif taurus_role in (ChannelView.Timer, ChannelView.Monitor):
-            ch_name, ch_data = index.internalPointer().itemData()
-            if not ch_data['_controller_name'].startswith("__"):
-                #ch_info = self.getAvailableChannels()[ch_name]
-                #if 'CTExpChannel' == ch_info['type']: #only timer/monitor columns of counter timers are editable
-                #    flags |= Qt.Qt.ItemIsEditable
-                flags |= Qt.Qt.ItemIsEditable
-        else:
-            flags |= Qt.Qt.ItemIsEditable
-        return flags
-
-    def data(self, index, role=Qt.Qt.DisplayRole):
-        """Reimplemented from :meth:`TaurusBaseModel.data`
-
-        :return: (object) the data for the given index
-        """
-        #Try with the normal TaurusBaseModel item-oriented approach
-        try:
-            return TaurusBaseModel.data(self, index, role=role)
-        except:
-            pass
-        #For those things which are inter-item, we handle them here
-        taurus_role = self.role(index.column())
-        if taurus_role == ChannelView.Trigger:
-            ch_name, ch_data = index.internalPointer().itemData()
-            unitdict = self.getPyData(ctrlname=ch_data['_controller_name'], unitid=ch_data['_unit_id'])
-            key = self.data_keys_map[taurus_role]
-            return Qt.QVariant(AcqTriggerType[unitdict.get(key, None)])
-        elif taurus_role in (ChannelView.Timer, ChannelView.Monitor):
-            ch_name, ch_data = index.internalPointer().itemData()
-            ctrlname = ch_data['_controller_name']
-            if ctrlname.startswith("__"):
-                return Qt.QVariant()
-            ch_info = self.getAvailableChannels()[ch_name]
-            if ch_info['type'] in ('CTExpChannel', 'OneDExpChannel', 'TwoDExpChannel'):
-                unitdict = self.getPyData(ctrlname=ctrlname, unitid=ch_data['_unit_id'])
-                key = self.data_keys_map[taurus_role]
-                master_full_name = unitdict.get(key, None)
-            else:
-                key = taurus_role == ChannelView.Timer and 'timer' or 'monitor'
-                master_full_name = self._mgconfig.get(key, None)
-            if master_full_name is None:
-                return Qt.QVariant()
-            else:
-                master_info = self.getAvailableChannels()[master_full_name]
-                return Qt.QVariant(master_info['name'])
-
-        return Qt.QVariant()
-
-    def setData(self, index, qvalue, role=Qt.Qt.EditRole):
-        #For those things which are at the unit level, we handle them here
-        taurus_role = self.role(index.column())
-        if taurus_role in (ChannelView.Timer, ChannelView.Monitor, ChannelView.Trigger):
-            ch_name, ch_data = index.internalPointer().itemData()
-            ch_info = self.getAvailableChannels()[ch_name]
-            unit_data = self.getPyData(ctrlname=ch_data['_controller_name'], unitid=ch_data['_unit_id'])
-            key = self.data_keys_map[taurus_role]
-            data = Qt.from_qvariant(qvalue, str)
-
-            self._dirty = True
-            self.beginResetModel()
-            is_settable = ch_info['type'] in ('CTExpChannel', 'OneDExpChannel', 'TwoDExpChannel')
-            if taurus_role == ChannelView.Trigger:
-                data = AcqTriggerType[data]
-                if is_settable:
-                    unit_data[key] = data
-            else:
-                if is_settable:
-                    if unit_data[key] == self._mgconfig[key]:
-                        self._mgconfig[key] = data
-                    unit_data[key] = data
-                else:
-                    self._mgconfig[key] = data
-            self.endResetModel()
-            return True
-        #for the rest, we use the regular TaurusBaseModel item-oriented approach
-        #ret = self._setData(index, qvalue, role) #@todo we do not use _setData because it is not Qt4.4-compatible
-        item = index.internalPointer()
-        item.setData(index, qvalue)
-        self._dirty = True
-        self.emit(Qt.SIGNAL("dataChanged(const QModelIndex &, const QModelIndex &)"),
-                  index, index)
-        return True
-
-    def addChannel(self, chname=None, chinfo=None, ctrlname=None, unitname=None, external=False): #@todo: Very inefficient implementation. We should use {begin|end}InsertRows
-
-        if chname is None:
-            chname = chinfo['full_name']
-        chname = str(chname)
-        if ctrlname is None:
-            desc = self.getAvailableChannels()[chname]
-            ctrlname = desc['controller']
-        if unitname is None:
-            desc = self.getAvailableChannels()[chname]
-            unitname = desc.get('unit','0') #@fixme: at the moment of writing, the unit info cannot be obtained from desc
-
-        #update the internal data
-        self.beginResetModel() #we are altering the internal data here, so we need to protect it
-        ctrlsdict = self.dataSource()['controllers']
-        if not ctrlsdict.has_key(ctrlname): ctrlsdict[ctrlname] = {'units':{}}
-        unitsdict = ctrlsdict[ctrlname]['units']
-        if not unitsdict.has_key(unitname):
-            unitsdict[unitname] = unit = {'channels':{}}
-            if not external and chinfo['type'] in ('CTExpChannel', 'OneDExpChannel', 'TwoDExpChannel'):
-                unit['timer'] = chname
-                unit['monitor'] = chname
-                unit['trigger_type'] = AcqTriggerType.Software
-        channelsdict = unitsdict[unitname]['channels']
-        if channelsdict.has_key(chname):
-            self.error('Channel "%s" is already in the measurement group. It will not be added again'%chname)
-            return
-
-        self._dirty = True
-        if external:
-            channelsdict[chname] = createChannelDict(chname)
-        else:
-            channelsdict[chname] = createChannelDict(chinfo)
-        self.endResetModel() #we are altering the internal data here, so we need to protect it
-        self.refresh() #note that another reset will be done here...
-
-        #import pprint
-        #pprint.pprint(self.dataSource())
-
-    def removeChannels(self, chnames): #@todo: Very inefficient implementation. We should use {begin|end}InsertRows
-        #update the internal data
-        self._dirty = True
-        self.beginResetModel() #we are altering the internal data here, so we need to protect it
-        for chname in chnames:
-            avail_channels = self.getAvailableChannels()
-            if chname in avail_channels:
-                desc = self.getAvailableChannels()[chname]
-                ctrlname = desc['controller']
-                unitname = desc.get('unit','0') #@fixme: at the moment of writing, the unit info cannot be obtained from desc
-            else:
-                #@todo: This assumes that if it is not in the list of avail_channels, it must be an external tango channel
-                ctrlname = '__tango__'
-                unitname = '0'
-            try:
-                self.dataSource()['controllers'][ctrlname]['units'][unitname]['channels'].pop(chname)
-                try:
-                    if not self.dataSource()['controllers'][ctrlname]['units'][unitname]['channels']:
-                        self.dataSource()['controllers'][ctrlname]['units'].pop(unitname)
-                        if not self.dataSource()['controllers'][ctrlname]['units']:
-                            self.dataSource()['controllers'].pop(ctrlname)
-                except:
-                    self.error('error cleaning the data source dictionary')
-            except:
-                self.error('cannot find "%s" for removing'%chname)
-            
-        self.endResetModel() #we are altering the internal data here, so we need to protect it
-        self.refresh() #note that another reset will be done here...
-
-    def swapChannels(self, root, row1, row2): #@todo: Very inefficient implementation. We should use {begin|end}MoveRows
-        self._dirty = True
-        n1,d1 = root.child(row1).itemData()
-        n2,d2 = root.child(row2).itemData()
-        d1['index'], d2['index'] = d2['index'], d1['index']
-        self.debug("swapping %s with %s"%(n1,n2))
-        self.refresh()
-
-    def isDataChanged(self):
-        return self._dirty
-
-    def setDataChanged(self, datachanged):
-        self._dirty = datachanged
-
-class MntGrpChannelModel(BaseMntGrpChannelModel):
-    '''A BaseMntGrpChannelModel that communicates with a MntGrp device for setting and reading the configuration
-    '''
-
-    def setDataSource(self, mg):
-        if self._data_src is not None:
-            Qt.QObject.disconnect(self._data_src, Qt.SIGNAL('configurationChanged'), self.configurationChanged)
-        if mg is not None:
-            Qt.QObject.connect(mg, Qt.SIGNAL('configurationChanged'), self.configurationChanged)
-        BaseMntGrpChannelModel.setDataSource(self, mg)
-
-    def configurationChanged(self):
-        self.refresh()
-
-    def setupModelData(self, mg):
-        if mg is None:
-            return
-        BaseMntGrpChannelModel.setupModelData(self, self.getSourceData())
-
-    def writeSourceData(self):
-        mg = self.dataSource()
-        if mg is not None and self._mgconfig is not None:
-            mg.setConfiguration(self._mgconfig)
-
-    def getSourceData(self):
-        """Gets data from the dataSource"""
-        mg = self.dataSource()
-        if mg is not None:
-            return mg.getConfiguration()
-
-    def getLocalData(self):
-        """Gets the local data (may be different from the one in the data source
-        since it may have been modified by the user)"""
-        return self._mgconfig
-
-
-class AxesSelector(Qt.QWidget):
-    def __init__(self, parent, n=0, choices=None):
-        '''Shows n comboboxes populated with choices. If n is 0, it just shows a LineEdit instead'''
-        Qt.QWidget.__init__(self, parent)
-        self._n = n
-        self._CBs = []
-        self._LE = None
-        l = Qt.QHBoxLayout(self)
-        if self._n == 0:
-            self._LE = Qt.QLineEdit()
-            l.addWidget(self._LE)
-        else:
-            for i in range(n):
-                cb = Qt.QComboBox()
-                l.addWidget(cb)
-                self._CBs.append(cb)
-        if choices is not None:
-            self.setChoices(choices)
-
-    def setChoices(self, choices):
-        for cb in self._CBs:
-            cb.addItems(choices)
-
-    def text(self):
-        return ":".join(self.getCurrentChoices())
-
-    def getCurrentChoices(self):
-        if self._LE is None:
-            return [str(cb.currentText()) for cb in self._CBs]
-        else:
-            return [str(self._LE.text())]
-
-    def setCurrentChoices(self, choice):
-        if self._LE is None:
-            texts = str(choice).split(':')
-            for t,cb in zip(texts[:len(self._CBs)],self._CBs):
-                cb.setCurrentIndex(max(0,cb.findText(t)))
-        else:
-            self._LE.setText(str(choice))
-
-
-class ChannelDelegate(Qt.QStyledItemDelegate):
-    def createEditor(self, parent, option, index):
-        model = index.model()
-        taurus_role = model.role(index.column())
-        if taurus_role in (ChannelView.Channel, ChannelView.PlotType, ChannelView.Normalization,
-                           ChannelView.Timer, ChannelView.Monitor, ChannelView.Trigger):
-            ret = Qt.QComboBox(parent)
-        elif taurus_role == ChannelView.PlotAxes:
-            item = index.internalPointer()
-            ptype = item.itemData()[1]['plot_type']
-            if ptype == PlotType.Spectrum:
-                n=1
-            elif ptype == PlotType.Image:
-                n=2
-            else:
-                return None
-            ret = AxesSelector(parent, n=n)
-        else:
-            ret = Qt.QStyledItemDelegate.createEditor(self, parent, option, index)
-        ret.setAutoFillBackground(True)
-        return ret
-
-    def setEditorData(self, editor, index):
-        model = index.model()
-        dataSource = model.dataSource()
-        taurus_role = model.role(index.column())
-        if taurus_role == ChannelView.PlotType:
-            editor.addItems(PlotType.keys())
-            current = Qt.from_qvariant(model.data(index), str)
-            editor.setCurrentIndex(editor.findText(current))
-        elif taurus_role == ChannelView.Normalization:
-            editor.addItems(Normalization.keys())
-            current = Qt.from_qvariant(model.data(index), str)
-            editor.setCurrentIndex(editor.findText(current))
-        elif taurus_role in (ChannelView.Timer, ChannelView.Monitor):
-            key = taurus_role == ChannelView.Timer and 'timer' or 'monitor'
-            ch_name, ch_data = index.internalPointer().itemData()
-            ctrl_filterlist = [ch_data['_controller_name']]
-            ctrl_dict = getChannelConfigs(dataSource, ctrls=ctrl_filterlist)
-            all_channels = model.getAvailableChannels()
-            # if it is a timer capable type of element
-            if all_channels[ch_name]['type'] in ('CTExpChannel', 'OneDExpChannel', 'TwoDExpChannel'):
-                for full_name, channel_data in ctrl_dict:
-                    editor.addItem(channel_data['name'], Qt.QVariant(full_name))
-                current = Qt.from_qvariant(model.data(index), str)
-                editor.setCurrentIndex(editor.findText(current))
-            else:
-                for ctrl_data in dataSource['controllers'].values():
-                    for unit_data in ctrl_data['units'].values():
-                        if key in unit_data:
-                            channel = all_channels[unit_data[key]]
-                            editor.addItem(channel['name'], Qt.QVariant(channel['full_name']))
-                current = dataSource.get(key) # current global timer/monitor
-                editor.setCurrentIndex(editor.findData(Qt.QVariant(current)))
-        elif taurus_role == ChannelView.Trigger:
-            editor.addItems(AcqTriggerType.keys())
-            current = Qt.from_qvariant(model.data(index), str)
-            editor.setCurrentIndex(editor.findText(current))
-        elif taurus_role == ChannelView.PlotAxes:
-            selectables = ['<idx>','<mov>']+[n for n,d in getChannelConfigs(dataSource)]
-            editor.setChoices(selectables)
-            current = Qt.from_qvariant(model.data(index), str)
-            editor.setCurrentChoices(current)
-        else:
-            Qt.QStyledItemDelegate.setEditorData(self, editor, index)
-
-    def setModelData(self, editor, model, index):
-        taurus_role = model.role(index.column())
-        dataSource = model.dataSource()
-        if taurus_role in (ChannelView.Channel, ChannelView.PlotType, ChannelView.Normalization):
-            data = Qt.QVariant(editor.currentText())
-            model.setData(index, data)
-        elif taurus_role == ChannelView.Trigger:
-            old_value = Qt.from_qvariant(model.data(index), str)
-            new_value = str(editor.currentText())
-            if new_value == old_value:
-                return
-            ch_name, ch_data = index.internalPointer().itemData()
-            channels = getChannelConfigs(dataSource, ctrls=[ch_data['_controller_name']], units=[ch_data['_unit_id']])
-            affected = [d['name'] for n,d in channels]
-            if len(affected) >1:
-                op = Qt.QMessageBox.question(editor, "Caution: multiple channels affected",
-                                            "This change will also affect the following channels:\n- %s \nContinue?"%"\n- ".join(affected),
-                                            Qt.QMessageBox.Yes|Qt.QMessageBox.Cancel)
-                if op != Qt.QMessageBox.Yes:
-                    return
-            data = Qt.QVariant(new_value)
-            model.setData(index, data)
-        elif taurus_role in (ChannelView.Timer, ChannelView.Monitor):
-            key = taurus_role == ChannelView.Timer and 'timer' or 'monitor'
-            old_value = Qt.from_qvariant(model.data(index), str)
-            new_value = str(editor.currentText())
-            if new_value == old_value:
-                return
-            ch_name, ch_data = index.internalPointer().itemData()
-            all_channels = model.getAvailableChannels()
-            # if it is a timer capable type of element
-            ch_info = all_channels[ch_name]
-            selected_master = editor.itemData(editor.currentIndex())
-            if ch_info['type'] in ('CTExpChannel', 'OneDExpChannel', 'TwoDExpChannel'):
-                affected = []
-                unit_data = model.getPyData(ctrlname=ch_data['_controller_name'], unitid=ch_data['_unit_id'])
-                channels = getChannelConfigs(dataSource, ctrls=[ch_data['_controller_name']], units=[ch_data['_unit_id']])
-                for n, d in channels:
-                    affected.append(d['name'])
-                # if old timer/monitor was also the global, then non
-                # timerable/monitorable channels must be changed
-                if unit_data[key] == dataSource.get(key):
-                    for n, d in getChannelConfigs(dataSource):
-                        if d['_controller_name'].startswith("__"):
-                            continue
-                        ch_info = all_channels[n]
-                        if ch_info['type'] in ('CTExpChannel', 'OneDExpChannel', 'TwoDExpChannel'):
-                            continue
-                        affected.append(d['name'])
-
-                if len(affected) >1:
-                    op = Qt.QMessageBox.question(editor, "Caution: multiple channels affected",
-                                                "This change will also affect the following channels:\n- %s \nContinue?"%"\n- ".join(affected),
-                                                Qt.QMessageBox.Yes|Qt.QMessageBox.Cancel)
-                    if op != Qt.QMessageBox.Yes:
-                        return
-            else:
-                affected = []
-                channels = getChannelConfigs(dataSource)
-                for n, d in channels:
-                    if d['_controller_name'].startswith("__"):
-                        continue
-                    ch_info = all_channels[n]
-                    if ch_info['type'] in ('CTExpChannel', 'OneDExpChannel', 'TwoDExpChannel'):
-                        continue
-                    affected.append(d['name'])
-                if len(affected) >1:
-                    op = Qt.QMessageBox.question(editor, "Caution: multiple channels affected",
-                                                "This change will also affect the following channels:\n- %s \nContinue?"%"\n- ".join(affected),
-                                                Qt.QMessageBox.Yes|Qt.QMessageBox.Cancel)
-                    if op != Qt.QMessageBox.Yes:
-                        return
-            model.setData(index, selected_master)
-        elif taurus_role == ChannelView.PlotAxes:
-            data = Qt.QVariant(editor.text())
-            model.setData(index, data)
-        else:
-            Qt.QStyledItemDelegate.setModelData(self, editor, model, index)
-
-
-class MntGrpChannelEditor(TaurusBaseTableWidget):
-    """
-    """
-
-    KnownPerspectives = {
-        "Channel" : {
-            "label"   : "Channels",
-            "icon"    : ":/actions/system-shutdown.svg",
-            "tooltip" : "View by channel",
-            "model"   : [BaseMntGrpChannelModel,],
-        },
-    }
-
-    DftPerspective = "Channel"
-    _simpleViewColumns = (ChannelView.Channel, ChannelView.Output, ChannelView.Shape, ChannelView.PlotType, ChannelView.PlotAxes)
-    _simpleView = False
-
-    def __init__(self,parent=None, designMode=False, with_filter_widget=True, perspective=None):
-        TaurusBaseTableWidget.__init__(self, parent=parent, designMode=designMode,
-                                       with_filter_widget=with_filter_widget,
-                                       perspective=perspective, proxy=None)
-        self.setContextMenuPolicy(Qt.Qt.ActionsContextMenu)
-        self._simpleViewAction = Qt.QAction("Simple View", self)
-        self._simpleViewAction.setCheckable(True)
-        self.connect(self._simpleViewAction, Qt.SIGNAL("toggled(bool)"), self.setSimpleView)
-        self.addAction(self._simpleViewAction)
-        self.registerConfigProperty(self.isSimpleView, self.setSimpleView, "simpleView")
-
-    def isSimpleView(self):
-        return self._simpleView
-
-    def setSimpleView(self, simpleview):
-        if simpleview == self.isSimpleView():
-            return
-        columnRoles = list(self.getQModel().ColumnRoles)
-        columnRoles[0] = columnRoles[0][-1] #account for the fact that the first element is a tuple instead of a role
-        columnIndexes = [columnRoles.index(r) for r in self._simpleViewColumns]
-        for i in range(self.getQModel().columnCount()):
-            hide = simpleview and (i not in columnIndexes)
-            self.tableView().setColumnHidden(i, hide)
-        self._simpleView = simpleview
-        self._simpleViewAction.setChecked(simpleview)
-
-    def resetSimpleView(self):
-        self.setSimpleView(False)
-
-    def createViewWidget(self):
-        tableView = TaurusBaseTableWidget.createViewWidget(self)
-        self._delegate = ChannelDelegate(self)
-        #self._delegate.setItemEditorFactory(Qt.QItemEditorFactory()) #This causes a segfault when calling ChannelDelegate.createEditor
-        tableView.setItemDelegate(self._delegate)
-        tableView.setSortingEnabled(False)
-        self.connect(self._editorBar, Qt.SIGNAL("addTriggered"), self.addChannel)
-        self.connect(self._editorBar, Qt.SIGNAL("removeTriggered"), self.removeChannels)
-        self.connect(self._editorBar, Qt.SIGNAL("moveUpTriggered"), self.moveUpChannel)
-        self.connect(self._editorBar, Qt.SIGNAL("moveDownTriggered"), self.moveDownChannel)
-        return tableView
-
-    def createToolArea(self):
-        ta = TaurusBaseTableWidget.createToolArea(self)
-        e_bar = self._editorBar = EditorToolBar(self, self)
-        ta.append(e_bar)
-        return ta
-
-    def getModelClass(self):
-        return taurus.core.taurusdevice.TaurusDevice
-
-    def addChannel(self, channel=None):
-        qmodel = self.getQModel()
-        dataSource = qmodel.dataSource()
-        if channel is None:
-            shown = [n for n,d in getChannelConfigs(dataSource)]
-            avail_channels = qmodel.getAvailableChannels()
-            clist = [ ch_info['name'] for ch_name, ch_info in avail_channels.items()
-                      if ch_name not in shown ]
-            clist = sorted(clist) + ['(Other...)']
-            chname,ok = Qt.QInputDialog.getItem(self, "New Channel", "Choose channel:", clist, 0, False)
-            if not ok:
-                return
-        chname = str(chname)
-        if chname == '(Other...)':
-            models, ok = TaurusModelChooser.modelChooserDlg(parent = self, singleModel=False, windowTitle='Choose source of data',
-                                                            selectables = [TaurusElementType.Attribute])
-            if not ok:
-                return
-            for m in models:
-                qmodel.addChannel(chname=m, ctrlname='__tango__', unitname='0', external=True)
-        else:
-            for ch_info in avail_channels.values():
-                if ch_info['name'] == chname:
-                    qmodel.addChannel(chinfo=ch_info)
-
-    def removeChannels(self, channels=None):
-        if channels is None:
-            channels = self.selectedItems()
-        chnames = [ch.itemData()[0] for ch in channels]
-        self.getQModel().removeChannels(chnames)
-
-    def moveUpChannel(self, channel=None):
-        if channel is None:
-            channels = self.selectedItems()
-            if len(channels) != 1:
-                return
-            channel = channels[0]
-        parent = channel.parent()
-        row = channel.row()
-        if row < 1:
-            return
-
-        model = self.getQModel()
-        model.swapChannels(parent, row, row-1)
-        idx = model.index(row-1,0)
-        self.viewWidget().setCurrentIndex(idx)
-
-    def moveDownChannel(self, channel=None):
-        if channel is None:
-            channels = self.selectedItems()
-            if len(channels) != 1:
-                return
-            channel = channels[0]
-        parent = channel.parent()
-        row = channel.row()
-        if row >= parent.childCount() - 1:
-            return
-        model = self.getQModel()
-        self.getQModel().swapChannels(parent, row, row+1)
-        idx = model.index(row+1,0)
-        self.viewWidget().setCurrentIndex(idx)
-
-    def getLocalConfig(self):
-        return self.getQModel().getLocalData()
-
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        ret = TaurusBaseTableWidget.getQtDesignerPluginInfo()
-        ret['module'] = 'taurus.qt.qtgui.extra_sardana'
-        ret['group'] = 'Taurus Sardana'
-        ret['icon'] = ":/designer/table.png"
-        return ret
-
-    simpleView = Qt.pyqtProperty("bool", isSimpleView, setSimpleView, resetSimpleView)
-
-
diff --git a/lib/taurus/qt/qtgui/extra_sardana/sardanabasewizard.py b/lib/taurus/qt/qtgui/extra_sardana/sardanabasewizard.py
deleted file mode 100644
index 804e3f8..0000000
--- a/lib/taurus/qt/qtgui/extra_sardana/sardanabasewizard.py
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""This module contains sardana base wizard classes."""
-
-__all__ = ["SardanaBaseWizard"]
-
-__docformat__ = 'restructuredtext'
-
-from taurus.qt import Qt
-
-
-class SardanaBasePage(Qt.QWizardPage):
-    
-    def __init__(self, parent = None):
-        Qt.QWizardPage.__init__(self, parent)
-        self._item_funcs = {}
-        
-    def __setitem__(self, name, value):
-        self._item_funcs[name] = value
-
-    def __getitem__(self, name):
-        return self._item_funcs[name]
-        
-    def getPanelWidget(self):
-        return self._panel
-    
-
-class SardanaBaseWizard(Qt.QWizard):
-
-    def __init__(self, parent=None):
-        Qt.QWizard.__init__(self, parent)
-        self._item_funcs = {}
-        self._pages = {}
-
-    def __setitem__(self, name, value):
-        self._item_funcs[name] = value
-        
-    def __getitem__(self, name):
-        for id in self.getPages():
-            p = self.page(id)
-            if isinstance(p, SardanaBasePage):
-                try:
-                    return p[name]()
-                except Exception,e:
-                    pass
-        return self._item_funcs[name]()
-        return None
-        
-    def addPage(self, page):
-        id = QtGui.QWizard.addPage(self, page)
-        self._pages[id] = page
-
-    def setPage(self, id, page):
-        QtGui.QWizard.setPage(self, id, page)
-        self._pages[id] = page
-        
-    def getPages(self):
-        return self._pages
-
diff --git a/lib/taurus/qt/qtgui/extra_sardana/sardanaeditor.py b/lib/taurus/qt/qtgui/extra_sardana/sardanaeditor.py
deleted file mode 100644
index d85d2d4..0000000
--- a/lib/taurus/qt/qtgui/extra_sardana/sardanaeditor.py
+++ /dev/null
@@ -1,557 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""This module contains a taurus text editor widget."""
-
-__all__ = ["SardanaEditor"]
-
-__docformat__ = 'restructuredtext'
-
-import os
-import os.path as osp
-import tempfile
-import shutil
-import functools
-
-from taurus.qt import Qt
-
-from taurus.qt.qtgui.base import TaurusBaseWidget
-from taurus.qt.qtgui.editor import TaurusBaseEditor
-from taurus.qt.qtgui.util import ActionFactory
-from taurus.qt.qtgui.dialog import ProtectTaurusMessageBox
-from macrotree import MacroSelectionDialog
-from elementtree import SardanaElementTreeWidget
-
-from taurus.qt.qtcore.tango.sardana.model import SardanaBaseProxyModel, \
-    SardanaElementTypeModel, SardanaTypeTreeItem, SardanaRootTreeItem
-
-from sardanabasewizard import SardanaBaseWizard, SardanaBasePage
-
-_MACRO_LIB_TEMPLATE = """#!/usr/bin/env python
-{copyright}
-# don't forget to place every new macro here!
-__all__ = []
-
-__docformat__ = 'restructuredtext'
-
-{non_sardana_imports}
-from sardana.macroserver.macro import macro, Macro, Type
-{sardana_imports}
-# Place your code here!
-
-"""
-
-_MACRO_CLASS_TEMPLATE = """
-
-class {macro_name}(Macro):
-    \"\"\"{macro_name} description.\"\"\"
-
-    # uncomment the following lines as necessary. Otherwise you may delete them
-    #param_def = []
-    #result_def = []
-    #hints = {}
-    #env = (,)
-    
-    # uncomment the following lines if need prepare. Otherwise you may delete them
-    #def prepare(self):
-    #    pass
-        
-    def run(self):
-        pass
-
-"""
-
-_MACRO_FUNCTION_TEMPLATE = """
-
- at macro()
-def {macro_name}(self):
-    self.output("Running {macro_name}...")
-
-"""
-
-class NewElementWizard(SardanaBaseWizard):
-    pass
-
-
-class ChooseElementTypePage(SardanaBasePage):
-    
-    def __init__(self, parent = None):
-        SardanaBasePage.__init__(self, parent)
-    
-        self.setTitle('Please select type of element you wish to create')
-        layout = Qt.QVBoxLayout()
-        self.setLayout(layout)
-
-
-class SardanaLibProxyModel(SardanaBaseProxyModel):
-    
-    ALLOWED_TYPES =  'MacroLibrary', #'ControllerLibrary',
-    
-    def filterAcceptsRow(self, sourceRow, sourceParent):
-        sourceModel = self.sourceModel()
-        idx = sourceModel.index(sourceRow, 0, sourceParent)
-        treeItem = idx.internalPointer()
-        
-        if isinstance(treeItem, SardanaRootTreeItem):
-            return True
-        if isinstance(treeItem, SardanaTypeTreeItem):
-            return treeItem.itemData() in self.ALLOWED_TYPES
-        return True
-
-
-class SardanaLibTreeWidget(SardanaElementTreeWidget):
-    
-    KnownPerspectives = { "Type" : {
-                          "label" : "By lib",
-                          "icon" : ":/python-package.png",
-                          "tooltip" : "View elements by library",
-                          "model" : [SardanaLibProxyModel, SardanaElementTypeModel],
-                        },
-    }
-    DftPerspective = "Type"
-    
-
-class SardanaEditor(TaurusBaseEditor, TaurusBaseWidget):
-
-    def __init__(self, parent=None, designMode=None):
-        name = self.__class__.__name__
-        self._base_tmp_dir = None
-        self._tmp_dir = None
-        self._is_filesystem_prepared = False
-        self.call__init__wo_kw(TaurusBaseEditor, parent)
-        self.call__init__(TaurusBaseWidget, name, designMode=designMode)
-        self._elementTree = elementTree = \
-            SardanaLibTreeWidget(self, with_navigation_bar=False,
-                                 with_filter_widget=False,)
-        elementTree.treeView().setColumnHidden(1, True)
-        self.connect(self._elementTree, Qt.SIGNAL("itemDoubleClicked"),
-                     self.on_element_clicked)
-        self.insertWidget(0, self._elementTree)
-        self.setAutoTooltip(False)
-            
-    def setTemporaryDirectory(self, tmp_dir):
-        self._base_tmp_dir = tmp_dir
-        self._is_filesystem_prepared = False
-        
-    def getTemporaryDirectory(self):
-        return self._base_tmp_dir
-    
-    def createMenuActions(self):
-        af = ActionFactory()
-        on_save = functools.partial(self.on_save, apply=False)
-        on_save_apply = functools.partial(self.on_save, apply=True)
-        
-        self.new_action = af.createAction(self, "New...",
-                icon='document-new', tip="Create a new macro or controller class",
-                triggered=self.on_new, shortcut=Qt.QKeySequence.New)
-        self.open_action = af.createAction(self, "Open...",
-                icon='document-open', tip="Open macro(s) or controller(s)",
-                triggered=self.on_open, shortcut=Qt.QKeySequence.Open)
-        self.save_action = af.createAction(self, "Save",
-                icon='document-save', tip="Save the current selected item",
-                triggered=on_save)
-        self.save_and_apply_action = af.createAction(self, "Save && apply",
-                triggered=on_save_apply, icon='document-save',
-                tip="Save the current selected item and apply the new code",
-                shortcut=Qt.QKeySequence.Save)
-        self.revert_action = af.createAction(self, "Revert",
-                icon='edit-undo', tip="Revert the current selected item code",
-                triggered=self.on_revert)
-        
-        io_actions = [self.new_action, self.open_action, self.save_action,
-                      self.revert_action]
-        actions = [self.new_action, self.open_action, self.save_action,
-                   self.save_and_apply_action, self.revert_action]
-        return actions, io_actions
-    
-    def register_editorstack(self, editorstack):
-        TaurusBaseEditor.register_editorstack(self, editorstack)
-        self.connect(editorstack, Qt.SIGNAL('refresh_save_all_action()'),
-                     self.refresh_save_and_apply_action)
-    
-    def refresh_save_and_apply_action(self):
-        self.save_and_apply_action.setEnabled(self.save_action.isEnabled())
-    
-    def on_element_clicked(self, item, item_column):
-        item_data = item.itemData()
-        interfaces = item_data.interfaces
-        if 'MacroCode' in interfaces:
-            self.open_macros([item_data])
-        elif 'MacroLibrary' in interfaces:
-            self.open_macro_libraries([item_data])
-            
-    @ProtectTaurusMessageBox(title="A error occured trying to create a class")
-    def on_new(self):
-        
-        elem_types = "Macro function", "Macro class", "Macro library", \
-            "Motor controller class", "Counter/Timer controller class", \
-            "Pseudo motor controller class"
-        
-        msg = "Please select type of element you wish to create"
-        elem_type, ok = Qt.QInputDialog.getItem(self, "New", msg, elem_types,
-                                                current=0, editable=False)
-        if not ok:
-            return
-        
-        idx = elem_types.index(elem_type)
-        if idx == 0:
-            return self.new_macro_function()
-        elif idx == 1:
-            return self.new_macro_class()
-        elif idx == 2:
-            return self.new_macro_library()
-        raise NotImplementedError("Sorry! Not implemented yet.")
-    
-    def new_macro(self, template):
-        macro_server = self.getModelObj()
-        
-        msg = "Please select the library where you want to place the new macro"
-        
-        macro_libraries = macro_server.getElementsOfType("MacroLibrary")
-        macro_lib_names = macro_libraries.keys()
-        macro_lib_names.sort()
-        macro_lib_name, ok = Qt.QInputDialog.getItem(self, "Macro library", msg,
-            macro_lib_names, current = 0, editable=False)
-        if not ok:
-            return
-        macro_lib_name = str(macro_lib_name)
-        macro_lib = macro_libraries[macro_lib_name]
-        
-        fname, path = macro_lib.file_path, macro_lib.path
-        fname = fname[fname.index(osp.sep)+1:] # transform into relative path
-        local_filename = osp.join(self._tmp_dir, fname)
-        
-        msg = "Please give new macro name"
-        
-        macros = macro_lib.elements
-        valid = False
-        while not valid:
-            macro_name, ok = Qt.QInputDialog.getText(self, "Macro name", msg)
-            if not ok:
-                return
-            if macro_name in macros:
-                res = Qt.QMessageBox.information(self, "Macro already exists",
-                    "A macro named '%s' already exists in '%s'.\n"
-                    "Please give a different macro name"
-                    % (macro_name, macro_lib_name),
-                    Qt.QMessageBox.Ok | Qt.QMessageBox.Cancel, Qt.QMessageBox.Ok)
-                if res == Qt.QMessageBox.Cancel:
-                    return
-                continue
-            valid = True
-
-        pars = dict(macro_name=macro_name)
-        code = template.format(**pars)
-        
-        editorstack = self.editorStack()
-        idx = editorstack.has_filename(local_filename)
-        if idx is None:
-            if not self._prepare_path(path):
-                raise Exception("Error trying to prepare path for %s", path)
-            self.debug("Creating local file %s...", local_filename)
-            fname, lib_code, line = macro_server.GetMacroCode((macro_lib_name,))
-            fd = file(local_filename, "w")
-            fd.write(lib_code)
-            fd.close()
-            self.debug("Loading local file %s...", local_filename)
-            self.load(local_filename, goto=None)
-        else:
-            pass
-        editorstack.set_current_filename(local_filename)
-        editor = editorstack.get_current_editor()
-        editor.set_cursor_position(editor.get_position("eof"))
-        editor.append(code)
-        return macro_lib, macro_name
-
-    def new_macro_class(self):
-        macro_info = self.new_macro(_MACRO_CLASS_TEMPLATE)
-        if macro_info is None:
-            return
-        macro_lib, macro_name = macro_info
-    
-    def new_macro_function(self):
-        macro_info = self.new_macro(_MACRO_FUNCTION_TEMPLATE)
-        if macro_info is None:
-            return
-        macro_lib, macro_name = macro_info
-        
-    def new_macro_library(self):
-        ms = self.getModelObj()
-        ms_path = ms.getMacroPathObj()
-        directory, ok = Qt.QInputDialog.getItem(self, "New macro module",
-            "Select the directory where you want the new macro module to " \
-            "be placed",
-            ms_path.macro_path, current = 0, editable=False)
-        if not ok:
-            return
-        directory = str(directory)
-        ok = 0
-        while not ok:
-            mod, ok = Qt.QInputDialog.getText(self, "New macro module",
-                "Module name:", Qt.QLineEdit.Normal, "")
-            if not ok:
-                return
-            mod = str(mod)
-            m, ext = osp.splitext(mod)
-            if len(ext):
-                if ext != ".py" :
-                    Qt.QMessageBox.critical(self, "Wrong extension",
-                        "When given, file extension<b> MUST</b> be <code>.py</code>.")
-                    ok = 0
-                    continue
-            else:
-                mod = mod + ".py"
-        self._prepare_path(directory)
-        filename = osp.join(directory, mod)
-        rel_filename = filename[filename.index(osp.sep)+1:] # transform into relative path
-        local_filename = osp.join(self._tmp_dir, rel_filename)
-        f = file(local_filename, "w")
-        
-        #TODO: ask for additional imports
-        #TODO: check if door environment has copyright variable
-        
-        pars = dict(copyright="", non_sardana_imports = "",
-                    sardana_imports = "")
-        code = _MACRO_LIB_TEMPLATE.format(**pars)
-        f.write(code)
-        f.close()
-        self.editorStack().load(local_filename)
-    
-    @ProtectTaurusMessageBox(title="An error occured trying to open a macro class")
-    def on_open(self):
-        ms = self.getModelObj()
-        ms_tree = MacroSelectionDialog(self, model_name=ms.getNormalName())
-        ms_tree.exec_()
-        if ms_tree.result() != Qt.QDialog.Accepted:
-            return
-        self.open_macros(ms_tree.getSelectedMacros())
-    
-    @ProtectTaurusMessageBox(title="An error occured trying to open macro(s)")
-    def open_macros(self, macros):
-        editorstack = self.editorStack()
-
-        all_any = Qt.QMessageBox.YesToAll, Qt.QMessageBox.NoToAll
-        yes_any = Qt.QMessageBox.Yes, Qt.QMessageBox.YesToAll
-        no_any = Qt.QMessageBox.No, Qt.QMessageBox.NoToAll
-        
-        last_answer = Qt.QMessageBox.No
-        for macro_info in macros:
-            name, fname = macro_info.name, macro_info.file_path
-            module = macro_info.module
-            fname = fname[fname.index(osp.sep)+1:] # transform into relative path
-            local_filename = osp.join(self._tmp_dir, fname)
-            
-            idx = editorstack.has_filename(local_filename)
-            if idx is not None and last_answer not in all_any:
-                last_answer = Qt.QMessageBox.question(self,
-                    "Macro file '{0}' already opened".format(module),
-                    "All changes to <b>{0}</b> will be lost."
-                    "<br>Do you want to revert file from the server ignoring "
-                    "any possible changes you (may) have made?".format(module),
-                    Qt.QMessageBox.Yes | Qt.QMessageBox.YesToAll | \
-                    Qt.QMessageBox.No  | Qt.QMessageBox.NoToAll,
-                    Qt.QMessageBox.No)
-            
-            if idx is None or last_answer in yes_any:
-                if not self._prepare_path(macro_info.path):
-                    Qt.QMessageBox.warning(self,
-                        "Error trying to prepare '{0}'".format(module),
-                        "An error occured trying to prepare '{0}'".format(module),
-                        Qt.QMessageBox.Ok, Qt.QMessageBox.Ok)
-                    continue
-                _, code, line = self.get_macro_code(module, name)
-                line = int(line)
-                self.debug("Creating local file %s...", local_filename)
-                fd = file(local_filename, "w")
-                fd.write(code)
-                fd.close()
-                if idx is None:
-                    self.debug("Loading local file %s...", local_filename)
-                    self.load(local_filename,goto=line)
-                else:
-                    self.debug("Reloading local file %s...", local_filename)
-                    self.reload(idx, filename=local_filename, goto=line)
-            elif last_answer in no_any:
-                self.set_current_filename(local_filename)
-    
-    @ProtectTaurusMessageBox(title="An error occured trying to open macro(s)")
-    def open_macro_libraries(self, macro_libraries):
-        editorstack = self.editorStack()
-
-        all_any = Qt.QMessageBox.YesToAll, Qt.QMessageBox.NoToAll
-        yes_any = Qt.QMessageBox.Yes, Qt.QMessageBox.YesToAll
-        no_any = Qt.QMessageBox.No, Qt.QMessageBox.NoToAll
-        
-        last_answer = Qt.QMessageBox.No
-        for macro_library in macro_libraries:
-            name, fname = macro_library.name, macro_library.file_path
-            module = macro_library.module
-            fname = fname[fname.index(osp.sep)+1:] # transform into relative path
-            local_filename = osp.join(self._tmp_dir, fname)
-            
-            idx = editorstack.has_filename(local_filename)
-            if idx is not None and last_answer not in all_any:
-                last_answer = Qt.QMessageBox.question(self,
-                    "Macro file '{0}' already opened".format(module),
-                    "All changes to <b>{0}</b> will be lost."
-                    "<br>Do you want to revert file from the server ignoring "
-                    "any possible changes you (may) have made?".format(module),
-                    Qt.QMessageBox.Yes | Qt.QMessageBox.YesToAll | \
-                    Qt.QMessageBox.No  | Qt.QMessageBox.NoToAll,
-                    Qt.QMessageBox.No)
-            
-            if idx is None or last_answer in yes_any:
-                if not self._prepare_path(macro_library.path):
-                    Qt.QMessageBox.warning(self,
-                        "Error trying to prepare '{0}'".format(module),
-                        "An error occured trying to prepare '{0}'".format(module),
-                        Qt.QMessageBox.Ok, Qt.QMessageBox.Ok)
-                    continue
-                _, code, line = self.get_macro_code(module)
-                line = int(line)
-                self.debug("Creating local file %s...", local_filename)
-                fd = file(local_filename, "w")
-                fd.write(code)
-                fd.close()
-                if idx is None:
-                    self.debug("Loading local file %s...", local_filename)
-                    self.load(local_filename,goto=line)
-                else:
-                    self.debug("Reloading local file %s...", local_filename)
-                    self.reload(idx, filename=local_filename, goto=line)
-            elif last_answer in no_any:
-                self.set_current_filename(local_filename)
-    
-    @ProtectTaurusMessageBox(msg="A error occured trying to save")
-    def on_save(self, apply=True):
-        editorstack = self.editorStack()
-        # Save the currently edited file
-        if not editorstack.get_stack_count():
-            return
-        index = editorstack.get_stack_index()
-        res = editorstack.save(index=index)
-        file_info = editorstack.data[index]
-        if not res:
-            return
-        local_filename = file_info.filename
-        fd = file(local_filename, "r")
-        code = fd.read()
-        fd.close()
-        remote_filename = local_filename[len(self._tmp_dir):]
-        self.set_macro_code(remote_filename, code, apply)
-    
-    def on_revert(self):
-        self.editorStack().revert()
-    
-    def reload_macro_lib(self, module_name):
-        pass
-    
-    def set_macro_code(self, filename, code, apply=True):
-        ms = self.getModelObj()
-        if apply:
-            apply = "true"
-        else:
-            apply = "false"
-        return ms.SetMacroCode((filename, code, apply))
-
-    def get_macro_code(self, module_name, macro_name=None):
-        ms = self.getModelObj()
-        pars = [ module_name ]
-        if macro_name is not None:
-            pars.append(macro_name)
-        return ms.GetMacroCode(pars)
-    
-    def setModel(self, model_name):
-        TaurusBaseWidget.setModel(self, model_name)
-        self._elementTree.setModel(model_name)
-        self._is_filesystem_prepared = False
-        self.prepare_filesystem()
-    
-    def _prepare_path(self, p):
-        if not self.prepare_filesystem():
-            return False
-        p = p[p.index(osp.sep)+1:] # transform into relative path
-        p = osp.join(self._tmp_dir, p)
-        if not osp.exists(p):
-            os.makedirs(p)
-        return True
-    
-    def prepare_filesystem(self):
-        """Prepares a temporary directory to store the macro files locally"""
-        if self._is_filesystem_prepared:
-            return True
-        ms = self.getModelObj()
-        if ms is None:
-            self.warning("Could not prepare local filesystem to store macros")
-            return False
-        ms_name = ms.getSimpleName().replace('/','_')
-        self._tmp_dir = tempfile.mkdtemp(prefix=ms_name, dir=self._base_tmp_dir)
-        self._is_filesystem_prepared = True
-        return True
-    
-    def closeEvent(self, event):
-        if self._is_filesystem_prepared:
-            shutil.rmtree(self._tmp_dir)
-        TaurusBaseEditor.closeEvent(self, event)
-
-
-def demo(model_name="MS_BL98"):
-    test = SardanaEditor()
-    test.resize(1000, 800)
-    #test.load(__file__)
-    test.setModel(model_name)
-    test.show()
-    return test
-
-def main():
-    import sys
-    import taurus.qt.qtgui.application
-    Application = taurus.qt.qtgui.application.TaurusApplication
-    
-    app = Application.instance()
-    owns_app = app is None
-    
-    if owns_app:
-        import taurus.core.util.argparse
-        parser = taurus.core.util.argparse.get_taurus_parser()
-        parser.usage = "%prog [options] <macro server name>"
-        app = Application(sys.argv, cmd_line_parser=parser, 
-                          app_name="Macro editor demo", app_version="1.0",
-                          org_domain="Sardana", org_name="Tango community")
-        
-    args = app.get_command_line_args()
-
-    if len(args) == 0:
-        parser.error("must give a macroserver device name")
-    else:
-        w = demo(args[0])
-    
-    if owns_app:
-        sys.exit(app.exec_())
-    else:
-        return w
-
-if __name__ == "__main__":
-    main()
diff --git a/lib/taurus/qt/qtgui/extra_sardana/startup.py b/lib/taurus/qt/qtgui/extra_sardana/startup.py
deleted file mode 100644
index 766c07b..0000000
--- a/lib/taurus/qt/qtgui/extra_sardana/startup.py
+++ /dev/null
@@ -1,185 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-## 
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
-## Taurus 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.
-## 
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""This file is executed by the python interpreter running as subprocess of
-SpockShell"""
-
-__docformat__ = 'restructuredtext'
-
-
-import sys
-
-def __run_pythonstartup_script():
-    import os
-    filename = os.environ.get('PYTHONSTARTUP')
-    if filename and os.path.isfile(filename):
-        execfile(filename)
-
-def __run_init_commands():
-    import os
-    return os.environ.get('PYTHONINITCOMMANDS')
-
-def __remove_from_syspath__():
-    """Remove this module's path from sys.path"""
-    import os.path as osp
-    try:
-        sys.path.remove(osp.dirname(__file__))
-    except ValueError:
-        pass
-
-
-class UserModuleDeleter(object):
-    """
-    User Module Deleter (UMD) aims at deleting user modules 
-    to force Python to deeply reload them during import
-    
-    pathlist [list]: blacklist in terms of module path
-    namelist [list]: blacklist in terms of module name
-    """
-    def __init__(self, namelist=None, pathlist=None):
-        if namelist is None:
-            namelist = []
-        self.namelist = namelist+['sitecustomize', 'spyderlib', 'spyderplugins']
-        if pathlist is None:
-            pathlist = []
-        self.pathlist = pathlist
-        self.previous_modules = sys.modules.keys()
-
-    def is_module_blacklisted(self, modname, modpath):
-        for path in [sys.prefix]+self.pathlist:
-            if modpath.startswith(path):
-                return True
-        else:
-            return set(modname.split('.')) & set(self.namelist)
-        
-    def run(self, verbose=False):
-        """
-        Del user modules to force Python to deeply reload them
-        
-        Do not del modules which are considered as system modules, i.e. 
-        modules installed in subdirectories of Python interpreter's binary
-        Do not del C modules
-        """
-        log = []
-        for modname, module in sys.modules.items():
-            if modname not in self.previous_modules:
-                modpath = getattr(module, '__file__', None)
-                if modpath is None:
-                    # *module* is a C module that is statically linked into the 
-                    # interpreter. There is no way to know its path, so we 
-                    # choose to ignore it.
-                    continue
-                if not self.is_module_blacklisted(modname, modpath):
-                    log.append(modname)
-                    del sys.modules[modname]
-        if verbose and log:
-            print "\x1b[4;33m%s\x1b[24m%s\x1b[0m" % ("UMD has deleted",
-                                                     ": "+", ".join(log))
-
-__umd__ = None
-
-def runfile(filename, args=None, wdir=None):
-    """
-    Run filename
-    args: command line arguments (string)
-    wdir: working directory
-    """
-    global __umd__
-    import os
-    if os.environ.get("UMD_ENABLED", "").lower() == "true":
-        if __umd__ is None:
-            namelist = os.environ.get("UMD_NAMELIST", None)
-            if namelist is not None:
-                namelist = namelist.split(',')
-            __umd__ = UserModuleDeleter(namelist=namelist)
-        else:
-            verbose = os.environ.get("UMD_VERBOSE", "").lower() == "true"
-            __umd__.run(verbose=verbose)
-    if args is not None and not isinstance(args, basestring):
-        raise TypeError("expected a character buffer object")
-    glbs = globals()
-    if '__ipythonshell__' in glbs:
-        glbs = glbs['__ipythonshell__'].IP.user_ns
-    glbs['__file__'] = filename
-    sys.argv = [filename]
-    if args is not None:
-        for arg in args.split():
-            sys.argv.append(arg)
-    if wdir is not None:
-        os.chdir(wdir)
-    execfile(filename, glbs)
-    sys.argv = ['']
-    glbs.pop('__file__')
-    
-
-def debugfile(filename, args=None, wdir=None):
-    """
-    Debug filename
-    args: command line arguments (string)
-    wdir: working directory
-    """
-    import pdb
-    debugger = pdb.Pdb()
-    filename = debugger.canonic(filename)
-    debugger._wait_for_mainpyfile = 1
-    debugger.mainpyfile = filename
-    debugger._user_requested_quit = 0
-    debugger.run("runfile(%r, args=%r, wdir=%r)" % (filename, args, wdir))
-
-
-if __name__ == "__main__":
-    __remove_from_syspath__()
-    
-    __commands__ = __run_init_commands()
-    if __commands__:
-        for command in __commands__.split(';'):
-            exec command
-    else:
-        __run_pythonstartup_script()
-
-    for _name in ['__run_pythonstartup_script', '__run_init_commands',
-                  '__create_banner', '__commands__', 'command', '__file__',
-                  '__remove_sys_argv__']+['_name']:
-        if _name in locals():
-            locals().pop(_name)
-
-    __doc__ = ''
-    __name__ = '__main__'
-
-    import os
-    if os.name == 'nt':
-        # Windows platforms: monkey-patching *pyreadline* module
-        # to make IPython work in a remote process
-        from pyreadline import unicode_helper
-        unicode_helper.pyreadline_codepage = "ascii"
-        import pyreadline
-        pyreadline.GetOutputFile = lambda: None
-    import spocklib.genutils
-    
-    __ipythonshell__ = spocklib.genutils.start(user_ns={'runfile': runfile,
-                                                        'debugfile': debugfile})
-    __ipythonshell__.IP.stdin_encoding = os.environ['SPYDER_ENCODING']
-    
-    spocklib.genutils.mainloop(shell=__ipythonshell__)
diff --git a/lib/taurus/qt/qtgui/extra_sardana/ui/ExpDescriptionEditor.ui b/lib/taurus/qt/qtgui/extra_sardana/ui/ExpDescriptionEditor.ui
deleted file mode 100644
index 9c1c28d..0000000
--- a/lib/taurus/qt/qtgui/extra_sardana/ui/ExpDescriptionEditor.ui
+++ /dev/null
@@ -1,268 +0,0 @@
-<ui version="4.0" >
- <class>ExpDescriptionEditor</class>
- <widget class="QWidget" name="ExpDescriptionEditor" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>733</width>
-    <height>411</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string>Experiment Configuration</string>
-  </property>
-  <layout class="QVBoxLayout" name="verticalLayout_3" >
-   <item>
-    <widget class="QTabWidget" name="tabWidget" >
-     <property name="currentIndex" >
-      <number>0</number>
-     </property>
-     <widget class="QWidget" name="mntGrpTab" >
-      <attribute name="title" >
-       <string>Measurement Group</string>
-      </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout" >
-       <item>
-        <layout class="QHBoxLayout" name="horizontalLayout" >
-         <item>
-          <widget class="QLabel" name="label" >
-           <property name="text" >
-            <string>Active Measurement Group</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QComboBox" name="activeMntGrpCB" >
-           <property name="toolTip" >
-            <string>Selects the active Measurement Group</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QToolButton" name="createMntGrpBT" >
-           <property name="toolTip" >
-            <string>Create a new Measurement Group</string>
-           </property>
-           <property name="text" >
-            <string>+</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <widget class="QToolButton" name="deleteMntGrpBT" >
-           <property name="toolTip" >
-            <string>Delete the current Measurement Group</string>
-           </property>
-           <property name="text" >
-            <string>-</string>
-           </property>
-          </widget>
-         </item>
-         <item>
-          <spacer name="horizontalSpacer" >
-           <property name="orientation" >
-            <enum>Qt::Horizontal</enum>
-           </property>
-           <property name="sizeHint" stdset="0" >
-            <size>
-             <width>40</width>
-             <height>20</height>
-            </size>
-           </property>
-          </spacer>
-         </item>
-        </layout>
-       </item>
-       <item>
-        <widget class="MntGrpChannelEditor" name="channelEditor" />
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="tab_2" >
-      <attribute name="title" >
-       <string>Snapshot Group</string>
-      </attribute>
-      <layout class="QVBoxLayout" name="verticalLayout_6" >
-       <item>
-        <widget class="QSplitter" name="splitter" >
-         <property name="orientation" >
-          <enum>Qt::Vertical</enum>
-         </property>
-         <widget class="QTabWidget" name="tabWidget_2" >
-          <property name="currentIndex" >
-           <number>0</number>
-          </property>
-          <widget class="QWidget" name="tab_4" >
-           <attribute name="title" >
-            <string>Sardana Elements</string>
-           </attribute>
-           <layout class="QVBoxLayout" name="verticalLayout_5" >
-            <item>
-             <widget class="SardanaElementTreeWidget" name="sardanaElementTree" />
-            </item>
-           </layout>
-          </widget>
-          <widget class="QWidget" name="tab" >
-           <attribute name="title" >
-            <string>External (Tango)</string>
-           </attribute>
-           <layout class="QVBoxLayout" name="verticalLayout_4" >
-            <item>
-             <widget class="TaurusModelSelectorTree" name="taurusModelTree" />
-            </item>
-           </layout>
-          </widget>
-         </widget>
-         <widget class="QWidget" name="layoutWidget" >
-          <layout class="QVBoxLayout" name="verticalLayout_2" >
-           <item>
-            <widget class="QLabel" name="label_5" >
-             <property name="text" >
-              <string>(Drag elements from the above selectors and drop them at the bottom list)</string>
-             </property>
-            </widget>
-           </item>
-           <item>
-            <widget class="TaurusModelList" name="preScanList" />
-           </item>
-          </layout>
-         </widget>
-        </widget>
-       </item>
-      </layout>
-     </widget>
-     <widget class="QWidget" name="tab_3" >
-      <attribute name="title" >
-       <string>Storage</string>
-      </attribute>
-      <layout class="QFormLayout" name="formLayout" >
-       <property name="fieldGrowthPolicy" >
-        <enum>QFormLayout::ExpandingFieldsGrow</enum>
-       </property>
-       <item row="0" column="0" >
-        <widget class="QLabel" name="label_3" >
-         <property name="toolTip" >
-          <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:9pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">comma separated list of file names in which to store the results of the scans. Use .h5 extension for NeXus files (preferred) and .dat for spec format (note: SPEC format is <span style=" font-weight:600;">not </span>supported)</p></body></html></string>
-         </property>
-         <property name="text" >
-          <string>File Name(s)</string>
-         </property>
-        </widget>
-       </item>
-       <item row="1" column="1" >
-        <widget class="QLineEdit" name="filenameLE" >
-         <property name="toolTip" >
-          <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-<html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Ubuntu'; font-size:9pt; font-weight:400; font-style:normal;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">comma separated list of file names in which to store the results of the scans. Use .h5 extension for NeXus files (preferred) and .dat for spec format (note: SPEC format is <span style=" font-weight:600;">not </span>supported)</p></body></html></string>
-         </property>
-        </widget>
-       </item>
-       <item row="2" column="0" >
-        <widget class="QLabel" name="label_2" >
-         <property name="text" >
-          <string>Path</string>
-         </property>
-        </widget>
-       </item>
-       <item row="3" column="1" >
-        <widget class="QWidget" native="1" name="widget" >
-         <layout class="QHBoxLayout" name="horizontalLayout_2" >
-          <property name="margin" >
-           <number>0</number>
-          </property>
-          <item>
-           <widget class="QLineEdit" name="pathLE" />
-          </item>
-          <item>
-           <widget class="QToolButton" name="choosePathBT" >
-            <property name="text" >
-             <string>...</string>
-            </property>
-           </widget>
-          </item>
-         </layout>
-        </widget>
-       </item>
-       <item row="4" column="0" >
-        <widget class="QLabel" name="label_4" >
-         <property name="text" >
-          <string>Data compression</string>
-         </property>
-        </widget>
-       </item>
-       <item row="5" column="1" >
-        <widget class="QComboBox" name="compressionCB" >
-         <item>
-          <property name="text" >
-           <string>nowhere</string>
-          </property>
-         </item>
-         <item>
-          <property name="text" >
-           <string>for all datasets</string>
-          </property>
-         </item>
-         <item>
-          <property name="text" >
-           <string>for datasets of rank 1 or more</string>
-          </property>
-         </item>
-         <item>
-          <property name="text" >
-           <string>for datasets of rank 2 or more</string>
-          </property>
-         </item>
-         <item>
-          <property name="text" >
-           <string>for datasets of rank 3 or more</string>
-          </property>
-         </item>
-        </widget>
-       </item>
-      </layout>
-     </widget>
-    </widget>
-   </item>
-   <item>
-    <widget class="QDialogButtonBox" name="buttonBox" >
-     <property name="standardButtons" >
-      <set>QDialogButtonBox::NoButton</set>
-     </property>
-    </widget>
-   </item>
-  </layout>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>SardanaElementTreeWidget</class>
-   <extends>QMainWindow</extends>
-   <header>taurus.qt.qtgui.extra_sardana</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusModelList</class>
-   <extends>QListView</extends>
-   <header>taurus.qt.qtgui.panel</header>
-  </customwidget>
-  <customwidget>
-   <class>MntGrpChannelEditor</class>
-   <extends>QMainWindow</extends>
-   <header>taurus.qt.qtgui.extra_sardana</header>
-   <container>1</container>
-  </customwidget>
-  <customwidget>
-   <class>TaurusModelSelectorTree</class>
-   <extends>TaurusWidget</extends>
-   <header>taurus.qt.qtgui.panel</header>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
diff --git a/lib/taurus/qt/qtgui/extra_sardana/ui/ui_ExpDescriptionEditor.py b/lib/taurus/qt/qtgui/extra_sardana/ui/ui_ExpDescriptionEditor.py
deleted file mode 100644
index 70a1f84..0000000
--- a/lib/taurus/qt/qtgui/extra_sardana/ui/ui_ExpDescriptionEditor.py
+++ /dev/null
@@ -1,166 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file '/tmp/tmpSE27_q.ui'
-#
-# Created: Mon Apr 16 15:17:09 2012
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_ExpDescriptionEditor(object):
-    def setupUi(self, ExpDescriptionEditor):
-        ExpDescriptionEditor.setObjectName("ExpDescriptionEditor")
-        ExpDescriptionEditor.resize(733, 411)
-        self.verticalLayout_3 = QtGui.QVBoxLayout(ExpDescriptionEditor)
-        self.verticalLayout_3.setObjectName("verticalLayout_3")
-        self.tabWidget = QtGui.QTabWidget(ExpDescriptionEditor)
-        self.tabWidget.setObjectName("tabWidget")
-        self.mntGrpTab = QtGui.QWidget()
-        self.mntGrpTab.setObjectName("mntGrpTab")
-        self.verticalLayout = QtGui.QVBoxLayout(self.mntGrpTab)
-        self.verticalLayout.setObjectName("verticalLayout")
-        self.horizontalLayout = QtGui.QHBoxLayout()
-        self.horizontalLayout.setObjectName("horizontalLayout")
-        self.label = QtGui.QLabel(self.mntGrpTab)
-        self.label.setObjectName("label")
-        self.horizontalLayout.addWidget(self.label)
-        self.activeMntGrpCB = QtGui.QComboBox(self.mntGrpTab)
-        self.activeMntGrpCB.setObjectName("activeMntGrpCB")
-        self.horizontalLayout.addWidget(self.activeMntGrpCB)
-        self.createMntGrpBT = QtGui.QToolButton(self.mntGrpTab)
-        self.createMntGrpBT.setObjectName("createMntGrpBT")
-        self.horizontalLayout.addWidget(self.createMntGrpBT)
-        self.deleteMntGrpBT = QtGui.QToolButton(self.mntGrpTab)
-        self.deleteMntGrpBT.setObjectName("deleteMntGrpBT")
-        self.horizontalLayout.addWidget(self.deleteMntGrpBT)
-        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.horizontalLayout.addItem(spacerItem)
-        self.verticalLayout.addLayout(self.horizontalLayout)
-        self.channelEditor = MntGrpChannelEditor(self.mntGrpTab)
-        self.channelEditor.setObjectName("channelEditor")
-        self.verticalLayout.addWidget(self.channelEditor)
-        self.tabWidget.addTab(self.mntGrpTab, "")
-        self.tab_2 = QtGui.QWidget()
-        self.tab_2.setObjectName("tab_2")
-        self.verticalLayout_6 = QtGui.QVBoxLayout(self.tab_2)
-        self.verticalLayout_6.setObjectName("verticalLayout_6")
-        self.splitter = QtGui.QSplitter(self.tab_2)
-        self.splitter.setOrientation(QtCore.Qt.Vertical)
-        self.splitter.setObjectName("splitter")
-        self.tabWidget_2 = QtGui.QTabWidget(self.splitter)
-        self.tabWidget_2.setObjectName("tabWidget_2")
-        self.tab_4 = QtGui.QWidget()
-        self.tab_4.setObjectName("tab_4")
-        self.verticalLayout_5 = QtGui.QVBoxLayout(self.tab_4)
-        self.verticalLayout_5.setObjectName("verticalLayout_5")
-        self.sardanaElementTree = SardanaElementTreeWidget(self.tab_4)
-        self.sardanaElementTree.setObjectName("sardanaElementTree")
-        self.verticalLayout_5.addWidget(self.sardanaElementTree)
-        self.tabWidget_2.addTab(self.tab_4, "")
-        self.tab = QtGui.QWidget()
-        self.tab.setObjectName("tab")
-        self.verticalLayout_4 = QtGui.QVBoxLayout(self.tab)
-        self.verticalLayout_4.setObjectName("verticalLayout_4")
-        self.taurusModelTree = TaurusModelSelectorTree(self.tab)
-        self.taurusModelTree.setObjectName("taurusModelTree")
-        self.verticalLayout_4.addWidget(self.taurusModelTree)
-        self.tabWidget_2.addTab(self.tab, "")
-        self.layoutWidget = QtGui.QWidget(self.splitter)
-        self.layoutWidget.setObjectName("layoutWidget")
-        self.verticalLayout_2 = QtGui.QVBoxLayout(self.layoutWidget)
-        self.verticalLayout_2.setObjectName("verticalLayout_2")
-        self.label_5 = QtGui.QLabel(self.layoutWidget)
-        self.label_5.setObjectName("label_5")
-        self.verticalLayout_2.addWidget(self.label_5)
-        self.preScanList = TaurusModelList(self.layoutWidget)
-        self.preScanList.setObjectName("preScanList")
-        self.verticalLayout_2.addWidget(self.preScanList)
-        self.verticalLayout_6.addWidget(self.splitter)
-        self.tabWidget.addTab(self.tab_2, "")
-        self.tab_3 = QtGui.QWidget()
-        self.tab_3.setObjectName("tab_3")
-        self.formLayout = QtGui.QFormLayout(self.tab_3)
-        self.formLayout.setFieldGrowthPolicy(QtGui.QFormLayout.ExpandingFieldsGrow)
-        self.formLayout.setObjectName("formLayout")
-        self.label_3 = QtGui.QLabel(self.tab_3)
-        self.label_3.setObjectName("label_3")
-        self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.label_3)
-        self.filenameLE = QtGui.QLineEdit(self.tab_3)
-        self.filenameLE.setObjectName("filenameLE")
-        self.formLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.filenameLE)
-        self.label_2 = QtGui.QLabel(self.tab_3)
-        self.label_2.setObjectName("label_2")
-        self.formLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.label_2)
-        self.widget = QtGui.QWidget(self.tab_3)
-        self.widget.setObjectName("widget")
-        self.horizontalLayout_2 = QtGui.QHBoxLayout(self.widget)
-        self.horizontalLayout_2.setMargin(0)
-        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
-        self.pathLE = QtGui.QLineEdit(self.widget)
-        self.pathLE.setObjectName("pathLE")
-        self.horizontalLayout_2.addWidget(self.pathLE)
-        self.choosePathBT = QtGui.QToolButton(self.widget)
-        self.choosePathBT.setObjectName("choosePathBT")
-        self.horizontalLayout_2.addWidget(self.choosePathBT)
-        self.formLayout.setWidget(3, QtGui.QFormLayout.FieldRole, self.widget)
-        self.label_4 = QtGui.QLabel(self.tab_3)
-        self.label_4.setObjectName("label_4")
-        self.formLayout.setWidget(4, QtGui.QFormLayout.LabelRole, self.label_4)
-        self.compressionCB = QtGui.QComboBox(self.tab_3)
-        self.compressionCB.setObjectName("compressionCB")
-        self.compressionCB.addItem(QtCore.QString())
-        self.compressionCB.addItem(QtCore.QString())
-        self.compressionCB.addItem(QtCore.QString())
-        self.compressionCB.addItem(QtCore.QString())
-        self.compressionCB.addItem(QtCore.QString())
-        self.formLayout.setWidget(5, QtGui.QFormLayout.FieldRole, self.compressionCB)
-        self.tabWidget.addTab(self.tab_3, "")
-        self.verticalLayout_3.addWidget(self.tabWidget)
-        self.buttonBox = QtGui.QDialogButtonBox(ExpDescriptionEditor)
-        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.NoButton)
-        self.buttonBox.setObjectName("buttonBox")
-        self.verticalLayout_3.addWidget(self.buttonBox)
-
-        self.retranslateUi(ExpDescriptionEditor)
-        self.tabWidget.setCurrentIndex(0)
-        self.tabWidget_2.setCurrentIndex(0)
-        QtCore.QMetaObject.connectSlotsByName(ExpDescriptionEditor)
-
-    def retranslateUi(self, ExpDescriptionEditor):
-        ExpDescriptionEditor.setWindowTitle(QtGui.QApplication.translate("ExpDescriptionEditor", "Experiment Configuration", None, QtGui.QApplication.UnicodeUTF8))
-        self.label.setText(QtGui.QApplication.translate("ExpDescriptionEditor", "Active Measurement Group", None, QtGui.QApplication.UnicodeUTF8))
-        self.activeMntGrpCB.setToolTip(QtGui.QApplication.translate("ExpDescriptionEditor", "Selects the active Measurement Group", None, QtGui.QApplication.UnicodeUTF8))
-        self.createMntGrpBT.setToolTip(QtGui.QApplication.translate("ExpDescriptionEditor", "Create a new Measurement Group", None, QtGui.QApplication.UnicodeUTF8))
-        self.createMntGrpBT.setText(QtGui.QApplication.translate("ExpDescriptionEditor", "+", None, QtGui.QApplication.UnicodeUTF8))
-        self.deleteMntGrpBT.setToolTip(QtGui.QApplication.translate("ExpDescriptionEditor", "Delete the current Measurement Group", None, QtGui.QApplication.UnicodeUTF8))
-        self.deleteMntGrpBT.setText(QtGui.QApplication.translate("ExpDescriptionEditor", "-", None, QtGui.QApplication.UnicodeUTF8))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.mntGrpTab), QtGui.QApplication.translate("ExpDescriptionEditor", "Measurement Group", None, QtGui.QApplication.UnicodeUTF8))
-        self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tab_4), QtGui.QApplication.translate("ExpDescriptionEditor", "Sardana Elements", None, QtGui.QApplication.UnicodeUTF8))
-        self.tabWidget_2.setTabText(self.tabWidget_2.indexOf(self.tab), QtGui.QApplication.translate("ExpDescriptionEditor", "External (Tango)", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_5.setText(QtGui.QApplication.translate("ExpDescriptionEditor", "(Drag elements from the above selectors and drop them at the bottom list)", None, QtGui.QApplication.UnicodeUTF8))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), QtGui.QApplication.translate("ExpDescriptionEditor", "Snapshot Group", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_3.setToolTip(QtGui.QApplication.translate("ExpDescriptionEditor", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
-"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-"p, li { white-space: pre-wrap; }\n"
-"</style></head><body style=\" font-family:\'Ubuntu\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
-"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">comma separated list of file names in which to store the results of the scans. Use .h5 extension for NeXus files (preferred) and .dat for spec format (note: SPEC format is <span style=\" font-weight:600;\">not </span>supported)</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_3.setText(QtGui.QApplication.translate("ExpDescriptionEditor", "File Name(s)", None, QtGui.QApplication.UnicodeUTF8))
-        self.filenameLE.setToolTip(QtGui.QApplication.translate("ExpDescriptionEditor", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
-"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-"p, li { white-space: pre-wrap; }\n"
-"</style></head><body style=\" font-family:\'Ubuntu\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
-"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">comma separated list of file names in which to store the results of the scans. Use .h5 extension for NeXus files (preferred) and .dat for spec format (note: SPEC format is <span style=\" font-weight:600;\">not </span>supported)</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_2.setText(QtGui.QApplication.translate("ExpDescriptionEditor", "Path", None, QtGui.QApplication.UnicodeUTF8))
-        self.choosePathBT.setText(QtGui.QApplication.translate("ExpDescriptionEditor", "...", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_4.setText(QtGui.QApplication.translate("ExpDescriptionEditor", "Data compression", None, QtGui.QApplication.UnicodeUTF8))
-        self.compressionCB.setItemText(0, QtGui.QApplication.translate("ExpDescriptionEditor", "nowhere", None, QtGui.QApplication.UnicodeUTF8))
-        self.compressionCB.setItemText(1, QtGui.QApplication.translate("ExpDescriptionEditor", "for all datasets", None, QtGui.QApplication.UnicodeUTF8))
-        self.compressionCB.setItemText(2, QtGui.QApplication.translate("ExpDescriptionEditor", "for datasets of rank 1 or more", None, QtGui.QApplication.UnicodeUTF8))
-        self.compressionCB.setItemText(3, QtGui.QApplication.translate("ExpDescriptionEditor", "for datasets of rank 2 or more", None, QtGui.QApplication.UnicodeUTF8))
-        self.compressionCB.setItemText(4, QtGui.QApplication.translate("ExpDescriptionEditor", "for datasets of rank 3 or more", None, QtGui.QApplication.UnicodeUTF8))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_3), QtGui.QApplication.translate("ExpDescriptionEditor", "Storage", None, QtGui.QApplication.UnicodeUTF8))
-
-from taurus.qt.qtgui.panel import TaurusModelList, TaurusModelSelectorTree
-from taurus.qt.qtgui.extra_sardana import SardanaElementTreeWidget, MntGrpChannelEditor
diff --git a/lib/taurus/qt/qtgui/extra_xterm/qxtermwidget.py b/lib/taurus/qt/qtgui/extra_xterm/qxtermwidget.py
index 7b75a62..05dcf23 100644
--- a/lib/taurus/qt/qtgui/extra_xterm/qxtermwidget.py
+++ b/lib/taurus/qt/qtgui/extra_xterm/qxtermwidget.py
@@ -28,7 +28,7 @@ QXTermWidget.py:
 """
 
 import sys
-from taurus.qt import QtCore, QtGui, Qt
+from taurus.external.qt import QtCore, QtGui, Qt
 
 class QXTermWidget(QtGui.QWidget):
 
diff --git a/lib/taurus/qt/qtgui/gauge/demo/qmeterdemo.py b/lib/taurus/qt/qtgui/gauge/demo/qmeterdemo.py
index 19fe256..bdc5351 100644
--- a/lib/taurus/qt/qtgui/gauge/demo/qmeterdemo.py
+++ b/lib/taurus/qt/qtgui/gauge/demo/qmeterdemo.py
@@ -30,7 +30,7 @@ __all__ = ["demo", "main"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 def demo():
     import sys
diff --git a/lib/taurus/qt/qtgui/gauge/qmeter.py b/lib/taurus/qt/qtgui/gauge/qmeter.py
index e38912b..9d21b06 100644
--- a/lib/taurus/qt/qtgui/gauge/qmeter.py
+++ b/lib/taurus/qt/qtgui/gauge/qmeter.py
@@ -30,7 +30,7 @@ __docformat__ = 'restructuredtext'
 import sys
 import math
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.display import QPixmapWidget
 
 class QBaseMeter(QPixmapWidget):
diff --git a/lib/taurus/qt/qtgui/gauge/taurusgauge.py b/lib/taurus/qt/qtgui/gauge/taurusgauge.py
index df141f0..e232367 100644
--- a/lib/taurus/qt/qtgui/gauge/taurusgauge.py
+++ b/lib/taurus/qt/qtgui/gauge/taurusgauge.py
@@ -34,7 +34,7 @@ __docformat__ = 'restructuredtext'
 
 import math
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.base import TaurusBaseWidget
 
 class TaurusLinearGauge(qtcontrols.ELinearGauge, TaurusBaseWidget):
diff --git a/lib/taurus/qt/qtgui/graphic/jdraw/jdraw.py b/lib/taurus/qt/qtgui/graphic/jdraw/jdraw.py
index 1fbf01a..a5e01a0 100644
--- a/lib/taurus/qt/qtgui/graphic/jdraw/jdraw.py
+++ b/lib/taurus/qt/qtgui/graphic/jdraw/jdraw.py
@@ -32,7 +32,7 @@ __docformat__ = 'restructuredtext'
 import os
 import traceback
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.core.util.log import Logger
 from taurus.core.util.singleton import Singleton
 from taurus.core.util.containers import CaselessDict
@@ -49,16 +49,16 @@ LINESTYLE_JDW2QT = { 0: Qt.Qt.SolidLine,
 
 FILLSTYLE_JDW2QT = { 0: Qt.Qt.NoBrush,
                      1: Qt.Qt.SolidPattern,
-                     2: Qt.Qt.BDiagPattern,
-                     3: Qt.Qt.FDiagPattern,
+                     2: Qt.Qt.FDiagPattern,
+                     3: Qt.Qt.BDiagPattern,
                      4: Qt.Qt.DiagCrossPattern,
-                     5: Qt.Qt.BDiagPattern,
-                     6: Qt.Qt.FDiagPattern,
+                     5: Qt.Qt.FDiagPattern,
+                     6: Qt.Qt.BDiagPattern,
                      7: Qt.Qt.Dense5Pattern,
                      8: Qt.Qt.Dense7Pattern,
                      9: Qt.Qt.Dense6Pattern,
                      10:Qt.Qt.Dense4Pattern,
-                     11:Qt.Qt.RadialGradientPattern }
+                     11:Qt.Qt.LinearGradientPattern }
 
 TEXTHINT_JDW2QT = CaselessDict({ 
     'helvetica'  : Qt.QFont.Helvetica,
@@ -69,6 +69,17 @@ TEXTHINT_JDW2QT = CaselessDict({
     'times'      : Qt.QFont.Times,
     ''           : Qt.QFont.AnyStyle,})
 
+ALIGNMENT = {
+    0: Qt.Qt.AlignHCenter,
+    1: Qt.Qt.AlignLeft,
+    2: Qt.Qt.AlignRight,
+}
+
+VALIGNMENT = {
+    0: Qt.Qt.AlignVCenter,
+    1: Qt.Qt.AlignTop,
+    2: Qt.Qt.AlignBottom,
+}
 
 class TaurusJDrawGraphicsFactory(Singleton, TaurusBaseGraphicsFactory, Logger):
     
@@ -174,28 +185,62 @@ class TaurusJDrawGraphicsFactory(Singleton, TaurusBaseGraphicsFactory, Logger):
 
     def getSplineObj(self, params):
         item = self.getGraphicsItem('Spline', params)
-                
         p = params.get('summit')
         p = [Qt.QPointF(p[i],p[i+1]) for i in xrange(0,len(p),2)]
         item.setControlPoints(p)
+        isClosed = params.get('isClosed', True)
+        item.setClose(isClosed)
+        return item
 
+    def getLabelObj(self, params):
+        item = self.getGraphicsItem('Label', params)
+        self.readLabelObj(item, params)
         return item
 
-    def getLabelObj(self,params):
-        item = self.getGraphicsItem('Label',params)
-        
-        s = params.get('summit')
-        x1, y1 = s[0], s[1]
-        item.setPos(x1,y1)
-        #Font size and type is set at set_common_params
+    def readLabelObj(self, item, params):
+        origin = params.get('origin')
+        item.setPos(origin[0], origin[1])
+
+        summit = params.get('summit')
+        x, y = summit[0] - origin[0], summit[1] - origin[1]
+        width, height = summit[2] - summit[0], summit[3] - summit[1]
+        item.setRect(x, y, width, height)
+
+        # it is parsed as a float
+        vAlignment = int(params.get('vAlignment', 0))
+        hAlignment = int(params.get('hAlignment', 0))
+        assert(vAlignment in VALIGNMENT.keys())
+        assert(hAlignment in ALIGNMENT.keys())
+        vAlignment = VALIGNMENT[vAlignment]
+        hAlignment = ALIGNMENT[hAlignment]
+        item.setAlignment(hAlignment | vAlignment)
+
+        fnt = params.get('font',None)
+        if fnt:
+            family,style,size = fnt
+            f = Qt.QFont(family, int(.85*size), Qt.QFont.Light, False)
+            f.setStyleHint(TEXTHINT_JDW2QT.get(family, Qt.QFont.AnyStyle))
+            f.setStyleStrategy(Qt.QFont.PreferMatch)
+            if style == 1:
+                f.setWeight(Qt.QFont.DemiBold)
+            elif style == 2:
+                f.setItalic(True)
+            elif style == 3:
+                f.setWeight(Qt.QFont.DemiBold)
+                f.setItalic(True)
+            #TODO: Improve code in order to be able to set a suitable font
+            item.setFont(f)
+        fg = params.get("foreground", (0,0,0))
+        color = Qt.QColor(fg[0],fg[1],fg[2])
+        item.setDefaultTextColor(color)
+
         txt = params.get('text')
         if txt:
             if any(isinstance(txt,t) for t in (list,tuple,set)): #Parsing several lines of text
                 txt = '\n'.join(txt)            
             item.setPlainText(Qt.QString(txt))
             item._currText = txt
-        return item        
-    
+
     def getGroupObj(self,params):
         item = self.getGraphicsItem('Group',params)
         s = params.get('summit')
@@ -207,18 +252,47 @@ class TaurusJDrawGraphicsFactory(Singleton, TaurusBaseGraphicsFactory, Logger):
                 if child:
                     #self.info('jdraw.py: "%s".addItem("%s")'%(str(params.get('name')),str(child)))
                     item.addToGroup(child)
-        if item._fillStyle: self.set_item_filling(item,expand=True)
+        if item._fillStyle:
+            self.set_item_filling(item, expand=True)
         return item
-    
+
     def getSwingObjectObj(self,params):
         item = self.getGraphicsItem('SwingObject', params)
         s = params.get('summit')
         x1, y1 = s[0], s[1]
         item.setPos(x1,y1)
-        ext = params.get('extensions')
-        #Font size and type is set at set_common_params
+
+        className = params.get('className')
+        if className == "fr.esrf.tangoatk.widget.attribute.SimpleScalarViewer":
+            self.readSimpleScalarViewerObj(item, params)
+
         return item
-    
+
+    def readSimpleScalarViewerObj(self, item, params):
+        self.readLabelObj(item, params)
+
+        ext = params.get('extensions')
+
+        c = ext.get('validBackground')
+        c = [int(x) for x in c.split(",")]
+        if c:
+            validBackground = Qt.QColor(*c)
+            item.setValidBackground(validBackground)
+
+        invalidText = ext.get('invalidText', "-----")
+        item.setNoneValue(invalidText)
+
+        alarmEnabled = ext.get('alarmEnabled', True)
+        alarmEnabled = alarmEnabled.lower().strip() in ["yes", "true", "1"]
+        item.setShowQuality(alarmEnabled)
+
+        unitVisible = ext.get('unitVisible', True)
+        unitVisible = unitVisible.lower().strip() in ["yes", "true", "1"]
+        item.setUnitVisible(unitVisible)
+
+        userFormat = ext.get('userFormat', None)
+        item.setUserFormat(userFormat)
+
     def getImageObj(self,params):
         item = self.getGraphicsItem('Image',params)
         s = params.get('summit')
@@ -244,7 +318,14 @@ class TaurusJDrawGraphicsFactory(Singleton, TaurusBaseGraphicsFactory, Logger):
         if not item:
             return
         item._params = params
-        name = params.get('name')  
+        name = params.get('name')
+
+        if name.lower() == "ignorerepaint":
+            name = ""
+            if not 'extensions' in params:
+                params['extensions'] = {}
+            params.get('extensions')["ignoreRepaint"] = "true"
+
         if self.alias: 
             for k,v in self.alias.items():
                 name = str(name).replace(k,v)
@@ -274,70 +355,50 @@ class TaurusJDrawGraphicsFactory(Singleton, TaurusBaseGraphicsFactory, Logger):
         if extensions:
             item._extensions = extensions
 
-        if isinstance(item,Qt.QGraphicsTextItem):
-            try:
-                fnt = params.get('font',None)
-                if fnt:
-                    family,style,size = fnt
-                    f = Qt.QFont(family, int(.85*size), Qt.QFont.Light, False)
-                    f.setStyleHint(TEXTHINT_JDW2QT.get(family, Qt.QFont.AnyStyle))
-                    f.setStyleStrategy(Qt.QFont.PreferMatch)
-                    if style == 1:
-                        f.setWeight(Qt.QFont.DemiBold)
-                    elif style == 2:
-                        f.setItalic(True)
-                    elif style == 3:
-                        f.setWeight(Qt.QFont.DemiBold)
-                        f.setItalic(True)
-                    #TODO: Improve code in order to be able to set a suitable font
-                    item.setFont(f)                
-                fg = params.get("foreground", (0,0,0))
-                color = Qt.QColor(fg[0],fg[1],fg[2])
-                item.setDefaultTextColor(color)
-            except:
-                self.warning('jdraw.set_common_params(%s(%s)).(foreground,width,style) failed!: \n\t%s'%(type(item).__name__,name,traceback.format_exc()))
-
-        else:
-          try:
-              getattr(item,'setPen')
-              fg = params.get("foreground", (0,0,0))
-              pen = Qt.QPen(Qt.QColor(fg[0],fg[1],fg[2]))
-              pen.setWidth(params.get("lineWidth", 1))
-              pen.setStyle(LINESTYLE_JDW2QT[params.get("lineStyle", 0)])
-              item.setPen(pen)
-          except AttributeError,ae:
-              pass
-          except Exception,e:
-              self.warning('jdraw.set_common_params(%s(%s)).(foreground,width,style) failed!: \n\t%s'%(type(item).__name__,name,traceback.format_exc()))
-
-          fillStyle = FILLSTYLE_JDW2QT[params.get('fillStyle', 0)]
-          item._fillStyle = fillStyle
-          try:
-              if hasattr(item,'brush'):
-                  brush = Qt.QBrush()
-                  if fillStyle == Qt.Qt.RadialGradientPattern:
-                      x1, y1, x2, y2 = params.get('summit')
-                      w, h = (x2-x1)/2.0, (y2-y1)/2.0
-                      gradient = Qt.QLinearGradient(params.get('gradX1',0)+w,
-                                                      params.get('gradY1',0)+h,
-                                                      params.get('gradX2',0)+w,
-                                                      params.get('gradY2',0)+h)
-                      c = params.get('gradC1',(0,0,0))
-                      gradient.setColorAt(0,Qt.QColor(c[0],c[1],c[2]))
-                      c = params.get('gradC2',(255,255,255))
-                      gradient.setColorAt(1,Qt.QColor(c[0],c[1],c[2]))
-                      brush = Qt.QBrush(gradient)
-                  else:
-                      brush.setStyle(fillStyle)
-
-                  bg = params.get('background',(255,255,255))
-                  brush.setColor(Qt.QColor(bg[0],bg[1],bg[2]))
-                  item.setBrush(brush)
-          #except AttributeError,ae: pass
-          except Exception,e:
-              self.warning('jdraw.set_common_params(%s(%s)).(background,gradient,style) failed!: \n\t%s'%(type(item).__name__,name,traceback.format_exc()))
-        #self.debug('Out of TaurusJDrawGraphicsFactory.%s.set_common_params(%s)'%(type(item).__name__,name))
-        
+        try:
+            getattr(item,'setPen')
+            fg = params.get("foreground", (0,0,0))
+            lineWidth = params.get("lineWidth", 1)
+            if lineWidth == 0:
+                pen = Qt.QPen(Qt.Qt.NoPen)
+            else:
+                pen = Qt.QPen(Qt.QColor(fg[0],fg[1],fg[2]))
+                pen.setWidth(lineWidth)
+                pen.setStyle(LINESTYLE_JDW2QT[params.get("lineStyle", 0)])
+            item.setPen(pen)
+        except AttributeError,ae:
+            pass
+        except Exception,e:
+            self.warning('jdraw.set_common_params(%s(%s)).(foreground,width,style) failed!: \n\t%s'%(type(item).__name__,name,traceback.format_exc()))
+
+        fillStyle = FILLSTYLE_JDW2QT[params.get('fillStyle', 0)]
+        item._fillStyle = fillStyle
+
+        if hasattr(item,'brush'):
+            brush = Qt.QBrush()
+            if fillStyle == Qt.Qt.LinearGradientPattern:
+                ox, oy = params.get('origin', (0, 0))
+                gradient = Qt.QLinearGradient(ox + params.get('gradX1',0),
+                                                oy + params.get('gradY1',0),
+                                                ox + params.get('gradX2',0),
+                                                oy + params.get('gradY2',0))
+                c = params.get('gradC1',(0,0,0))
+                gradient.setColorAt(0,Qt.QColor(c[0],c[1],c[2]))
+                c = params.get('gradC2',(255,255,255))
+                gradient.setColorAt(1,Qt.QColor(c[0],c[1],c[2]))
+
+                gradCyclic = params.get('gradCyclic', False)
+                if gradCyclic:
+                    gradient.setSpread(Qt.QGradient.ReflectSpread)
+
+                brush = Qt.QBrush(gradient)
+            else:
+                brush.setStyle(fillStyle)
+
+            bg = params.get('background',(255,255,255))
+            brush.setColor(Qt.QColor(bg[0],bg[1],bg[2]))
+            item.setBrush(brush)
+
     def set_item_filling(self,item,pattern=Qt.Qt.Dense4Pattern,expand=False):
         count = 0
         item._fillStyle = item._fillStyle or pattern
diff --git a/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_lextab.py b/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_lextab.py
new file mode 100644
index 0000000..827b4b4
--- /dev/null
+++ b/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_lextab.py
@@ -0,0 +1,9 @@
+# jdraw_lextab.py. This file automatically created by PLY (version 3.4). Don't edit!
+_tabversion   = '3.2'
+_lextokens    = {'false': 1, 'JDSWINGOBJECT': 1, 'TEXT': 1, 'SYMBOL': 1, 'GLOBAL': 1, 'NUMBER': 1, 'LBRACKET': 1, 'JDPOLYLINE': 1, 'JDSPLINE': 1, 'JDIMAGE': 1, 'JDAXIS': 1, 'JDLINE': 1, 'JDGROUP': 1, 'COMMA': 1, 'JDBAR': 1, 'JDSLIDER': 1, 'JDLABEL': 1, 'JDELLIPSE': 1, 'true': 1, 'JDRECTANGLE': 1, 'TWOP': 1, 'RBRACKET': 1, 'JDFILE': 1, 'JDROUNDRECTANGLE': 1}
+_lexreflags   = 0
+_lexliterals  = ''
+_lexstateinfo = {'INITIAL': 'inclusive'}
+_lexstatere   = {'INITIAL': [('(?P<t_SYMBOL>[a-zA-Z_][a-zA-Z_0-9]*)|(?P<t_NUMBER>[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?)|(?P<t_newline>\\n+)|(?P<t_TEXT>\\"[^"]*\\")|(?P<t_LBRACKET>\\{)|(?P<t_COMMA>\\,)|(?P<t_TWOP>\\:)|(?P<t_RBRACKET>\\})', [None, ('t_SYMBOL', 'SYMBOL'), ('t_NUMBER', 'NUMBER'), None, ('t_newline', 'newline'), (None, 'TEXT'), (None, 'LBRACKET'), (None, 'COMMA'), (None, 'TWOP'), (None, 'RBRACKET')])]}
+_lexstateignore = {'INITIAL': ' \t'}
+_lexstateerrorf = {'INITIAL': 't_error'}
diff --git a/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py b/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py
index 4def500..425ea33 100644
--- a/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py
+++ b/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py
@@ -25,14 +25,15 @@
 
 """This module parses jdraw files"""
 
-__all__ = ["parse"]
+from __future__ import absolute_import
+
+__all__ = ["new_parser", "parse"]
 
 import os,re,traceback
 
-import ply.lex as lex
-import ply.yacc as yacc
+from ply import lex
+from ply import yacc
 
-from jdraw import *
 from taurus.core.util.log import Logger
 
 tokens = ( 'NUMBER', 'SYMBOL', 'LBRACKET', 'RBRACKET', 'TWOP', 'COMMA',
@@ -258,25 +259,75 @@ def p_value_bool(p):
              | false'''
     p[0] = p[1] == 'true'
 
-def parse(filename,factory):
-    l = lex.lex()
-    p = yacc.yacc()
+def new_parser(optimize=None, debug=0, outputdir=None):
+    log = Logger('JDraw Parser')
+
+    if optimize is None:
+        from taurus import tauruscustomsettings
+        optimize = getattr(tauruscustomsettings, 'PLY_OPTIMIZE', 1)
+    if outputdir is None:
+        outputdir = os.path.dirname(os.path.realpath(__file__))
+
+    debuglog = None
+    if debug:
+        debuglog = log
+    
+    common_kwargs = dict(optimize=optimize, outputdir=outputdir,
+                         debug=debug, debuglog=debuglog, errorlog=log)
+    
+    # lex/yacc v<3.0 do not accept  debuglog or errorlog keyword args
+    if int(lex.__version__.split('.')[0]) < 3: 
+        common_kwargs.pop('debuglog')
+        common_kwargs.pop('errorlog')
+    
+    try:
+        from . import jdraw_lextab
+    except ImportError:
+        jdraw_lextab = 'jdraw_lextab'
+
+    try:
+        from . import jdraw_yacctab
+    except ImportError:
+        jdraw_yacctab = 'jdraw_yacctab'
+
+    # Lexer
+    l = lex.lex(lextab=jdraw_lextab, **common_kwargs)
+
+    # Yacc
+    try:
+        p = yacc.yacc(tabmodule=jdraw_yacctab, debugfile=None, write_tables=1,
+                      **common_kwargs)
+    except Exception, e:
+        msg = ('Error while parsing. You may solve it by:\n' + \
+               '  a) removing jdraw_lextab.* and jdraw_yacctab.* from\n' +\
+               '     %s , or...\n' % os.path.dirname(__file__) + \
+               '  b) setting PLY_OPTIMIZE=0 in tauruscustomsettings.py')
+        raise RuntimeError(msg)
+        
+    return l, p
+    
+def parse(filename=None, factory=None):
+
+    if filename is None or factory is None:
+        return
+
+    _, p = new_parser()
+
     p.factory = factory
     p.modelStack = []
     p.modelStack2 = []
-    p.log = Logger('JDraw Parser')
-    l.log = p.log
+
     res = None
     try:
         filename = os.path.realpath(filename)
         f = open(filename)
         res = yacc.parse(f.read())
     except:
-        p.log.warning("Failed to parse %s" % filename)
-        #p.log.traceback()
-        p.log.warning(traceback.format_exc())
+        log = Logger('JDraw Parser')
+        log.warning("Failed to parse %s" % filename)
+        log.debug("Details:", exc_info=1)
     return res
-    
-#if __name__ == '__main__':
-#    res = parse("jd1.jdw",jdraw.JDrawTaurusGraphicsFactory(self))
 
+
+if __name__ == "__main__":
+    new_parser()
diff --git a/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_view.py b/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_view.py
index 325281b..be92f70 100644
--- a/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_view.py
+++ b/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_view.py
@@ -32,9 +32,9 @@ __docformat__ = 'restructuredtext'
 import os
 import traceback
 import taurus
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.core.taurusvalidator import DeviceNameValidator, AttributeNameValidator
-from taurus.qt.qtgui.graphic.taurusgraphic import parseTangoUri, TaurusGraphicsItem
+from taurus.qt.qtgui.graphic.taurusgraphic import parseTangoUri, TaurusGraphicsItem, SynopticSelectionStyle
 from taurus.qt.qtcore.mimetypes import TAURUS_ATTR_MIME_TYPE, TAURUS_DEV_MIME_TYPE, TAURUS_MODEL_MIME_TYPE
 from taurus.qt.qtgui.base import TaurusBaseWidget
 import jdraw_parser
@@ -83,6 +83,7 @@ class TaurusJDrawSynopticsView(Qt.QGraphicsView, TaurusBaseWidget):
         self.h_scene = None
         self._fileName ="Root"
         self._mousePos = (0,0)
+        self._selectionStyle = SynopticSelectionStyle.OUTLINE
         self.setResizable(resizable)
         self.setInteractive(True)
         self.setAlias(alias)
@@ -152,17 +153,15 @@ class TaurusJDrawSynopticsView(Qt.QGraphicsView, TaurusBaseWidget):
     def selectGraphicItem(self,item_name):
         self.scene().selectGraphicItem(item_name)
         return False
-    
-    @Qt.pyqtSignature("graphicItemSelected(QString)")
-    def graphicItemSelected(self,item_name):
+
+    def _graphicItemSelected(self,item_name):
         self.debug(' => graphicItemSelected(QString)(%s)'%item_name)
         self.emit(Qt.SIGNAL("graphicItemSelected(QString)"),item_name)
-        
-    @Qt.pyqtSignature("graphicSceneClicked(QPoint)")
-    def graphicSceneClicked(self,point):
+
+    def _graphicSceneClicked(self,point):
         self.debug('In TaurusJDrawSynopticsView.graphicSceneClicked(%s,%s)'%(point.x(),point.y()))
         self.emit(Qt.SIGNAL("graphicSceneClicked(QPoint)"),point)        
-        
+
     def modelsChanged(self):
         items = self.get_item_list()
         self.debug('modelsChanged(%s)'%len(items))
@@ -346,6 +345,7 @@ class TaurusJDrawSynopticsView(Qt.QGraphicsView, TaurusBaseWidget):
                 self.path = os.path.dirname(filename)
                 factory = self.getGraphicsFactory(delayed=delayed)
                 scene = jdraw_parser.parse(filename, factory)
+                scene.setSelectionStyle(self._selectionStyle)
                 self.debug("Obtained %s(%s)", type(scene).__name__,filename)
                 if not scene:
                     self.warning("TaurusJDrawSynopticsView.setModel(%s): Unable to parse %s!!!"%(model,filename))
@@ -354,8 +354,8 @@ class TaurusJDrawSynopticsView(Qt.QGraphicsView, TaurusBaseWidget):
                     self.h_scene = scene.sceneRect().height()
                 else: self.debug('JDrawView.sceneRect() is NONE!!!')
                 self.setScene(scene)
-                Qt.QObject.connect(self.scene(), Qt.SIGNAL("graphicItemSelected(QString)"), self, Qt.SLOT("graphicItemSelected(QString)"))
-                Qt.QObject.connect(self.scene(), Qt.SIGNAL("graphicSceneClicked(QPoint)"), self, Qt.SLOT("graphicSceneClicked(QPoint)"))
+                Qt.QObject.connect(self.scene(), Qt.SIGNAL("graphicItemSelected(QString)"), self._graphicItemSelected)
+                Qt.QObject.connect(self.scene(), Qt.SIGNAL("graphicSceneClicked(QPoint)"), self._graphicSceneClicked)
                 #Qt.QObject.connect(Qt.QApplication.instance(), Qt.SIGNAL("lastWindowClosed()"), self.close) #It caused a segfault!
                 self.modelsChanged()
                 self.setWindowTitle(self.modelName)
@@ -390,8 +390,32 @@ class TaurusJDrawSynopticsView(Qt.QGraphicsView, TaurusBaseWidget):
         return ret
     
     model = Qt.pyqtProperty("QString", getModel, setModel)
+
+    def setSelectionStyle(self, selectionStyle):
+        if isinstance(selectionStyle, (Qt.QString, basestring)):
+            selectionStyle = str(selectionStyle).upper()
+            try:
+                selectionStyle = SynopticSelectionStyle[selectionStyle]
+            except:
+                self.debug('invalid selectionStyle "%s"', selectionStyle)
+                return
+        if self.scene() != None:
+            self.scene().setSelectionStyle(selectionStyle)
+        self._selectionStyle = selectionStyle
+
+    def getSelectionStyle(self):
+        return self._selectionStyle
     
-    
+    def getSelectionStyleName(self):
+        return SynopticSelectionStyle.whatis(self.getSelectionStyle())
+
+    def resetSelectionStyle(self):
+        self.setSelectionStyle(SynopticSelectionStyle.OUTLINE)
+
+    selectionStyle = Qt.pyqtProperty("QString", getSelectionStyleName,
+                                         setSelectionStyle,
+                                         resetSelectionStyle)
+
 #!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 def jdraw_view_main():
     import sys,time
diff --git a/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_yacctab.py b/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_yacctab.py
new file mode 100644
index 0000000..4972077
--- /dev/null
+++ b/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_yacctab.py
@@ -0,0 +1,63 @@
+
+# /nfs/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_yacctab.py
+# This file is automatically generated. Do not edit.
+_tabversion = '3.2'
+
+_lr_method = 'LALR'
+
+_lr_signature = '\x03\x1bS\x1d\xbf\x0c\xbe\xbaa\xfe\xbf\xb7G\x8d%\xb2'
+    
+_lr_action_items = {'false':([36,48,],[39,39,]),'JDSWINGOBJECT':([8,21,25,29,31,34,38,44,47,49,],[11,11,-6,-3,-5,-4,-7,11,-8,11,]),'TEXT':([36,48,],[41,41,]),'SYMBOL':([2,10,27,30,33,35,37,39,40,41,42,43,44,45,46,50,51,52,53,54,],[3,28,28,-23,28,-22,28,-34,-28,-32,-31,-30,28,-33,-24,28,-25,-29,-27,-26,]),'GLOBAL':([4,5,],[7,7,]),'JDELLIPSE':([8,21,25,29,31,34,38,44,47,49,],[12,12,-6,-3,-5,-4,-7,12,-8,12,]),'LBRACKET':([2,3,7,11,12,13,14,15,16,17,18,19,20,22,23,24,26,36,],[4,5,10,-15,-13, [...]
+
+_lr_action = { }
+for _k, _v in _lr_action_items.items():
+   for _x,_y in zip(_v[0],_v[1]):
+      if not _x in _lr_action:  _lr_action[_x] = { }
+      _lr_action[_x][_k] = _y
+del _lr_action_items
+
+_lr_goto_items = {'obj':([8,21,44,49,],[23,23,23,23,]),'parameter_list':([10,33,44,],[27,37,50,]),'element_list':([8,44,],[21,49,]),'value_list':([36,],[40,]),'global':([4,5,],[6,8,]),'value':([36,48,],[43,52,]),'element':([8,21,44,49,],[25,31,25,31,]),'param_value':([36,],[46,]),'parameter':([10,27,33,37,44,50,],[30,35,30,35,30,35,]),'jdfile':([0,],[1,]),}
+
+_lr_goto = { }
+for _k, _v in _lr_goto_items.items():
+   for _x,_y in zip(_v[0],_v[1]):
+       if not _x in _lr_goto: _lr_goto[_x] = { }
+       _lr_goto[_x][_k] = _y
+del _lr_goto_items
+_lr_productions = [
+  ("S' -> jdfile","S'",1,None,None,None),
+  ('jdfile -> JDFILE SYMBOL LBRACKET global element_list RBRACKET','jdfile',6,'p_jdfile','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',107),
+  ('jdfile -> JDFILE LBRACKET global RBRACKET','jdfile',4,'p_jdfile_empty','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',115),
+  ('global -> GLOBAL LBRACKET RBRACKET','global',3,'p_global','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',123),
+  ('global -> GLOBAL LBRACKET parameter_list RBRACKET','global',4,'p_global','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',124),
+  ('element_list -> element_list element','element_list',2,'p_element_list','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',131),
+  ('element_list -> element','element_list',1,'p_element','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',138),
+  ('element -> obj LBRACKET RBRACKET','element',3,'p_single_element','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',142),
+  ('element -> obj LBRACKET parameter_list RBRACKET','element',4,'p_single_element','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',143),
+  ('obj -> JDLINE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',191),
+  ('obj -> JDRECTANGLE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',192),
+  ('obj -> JDROUNDRECTANGLE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',193),
+  ('obj -> JDGROUP','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',194),
+  ('obj -> JDELLIPSE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',195),
+  ('obj -> JDBAR','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',196),
+  ('obj -> JDSWINGOBJECT','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',197),
+  ('obj -> JDLABEL','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',198),
+  ('obj -> JDPOLYLINE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',199),
+  ('obj -> JDIMAGE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',200),
+  ('obj -> JDAXIS','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',201),
+  ('obj -> JDSLIDER','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',202),
+  ('obj -> JDSPLINE','obj',1,'p_obj','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',203),
+  ('parameter_list -> parameter_list parameter','parameter_list',2,'p_parameter_list','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',207),
+  ('parameter_list -> parameter','parameter_list',1,'p_parameter','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',212),
+  ('parameter -> SYMBOL TWOP param_value','parameter',3,'p_single_parameter','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',216),
+  ('parameter -> SYMBOL TWOP LBRACKET RBRACKET','parameter',4,'p_complex_parameter','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',225),
+  ('parameter -> SYMBOL TWOP LBRACKET parameter_list RBRACKET','parameter',5,'p_complex_parameter','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',226),
+  ('parameter -> SYMBOL TWOP LBRACKET element_list RBRACKET','parameter',5,'p_complex_parameter','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',227),
+  ('param_value -> value_list','param_value',1,'p_param_value_number_list','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',235),
+  ('value_list -> value_list COMMA value','value_list',3,'p_value_list','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',242),
+  ('value_list -> value','value_list',1,'p_value_list_value','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',246),
+  ('value -> NUMBER','value',1,'p_value_number','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',250),
+  ('value -> TEXT','value',1,'p_value_text','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',254),
+  ('value -> true','value',1,'p_value_bool','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',258),
+  ('value -> false','value',1,'p_value_bool','/home/cpascual/src/sardana/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',259),
+]
diff --git a/lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py b/lib/taurus/qt/qtgui/graphic/jdraw/test/__init__.py
similarity index 100%
copy from lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py
copy to lib/taurus/qt/qtgui/graphic/jdraw/test/__init__.py
diff --git a/lib/taurus/qt/qtgui/graphic/jdraw/test/res/SimpleScalarViewer.jdw b/lib/taurus/qt/qtgui/graphic/jdraw/test/res/SimpleScalarViewer.jdw
new file mode 100644
index 0000000..cc2c293
--- /dev/null
+++ b/lib/taurus/qt/qtgui/graphic/jdraw/test/res/SimpleScalarViewer.jdw
@@ -0,0 +1,171 @@
+JDFile v11 {
+  Global {
+  }
+  JDRectangle {
+    summit:18,25,496,351
+    origin:257,188
+    background:204,204,204
+    fillStyle:1
+    name:"Rectangle"
+  }
+  JDSwingObject {
+    summit:50,120,181,220
+    origin:84,128
+    fillStyle:1
+    lineWidth:0
+    name:"sys/tg_test/1/float_scalar"
+    extensions:{
+      unitVisible:"true"
+      userFormat:""
+      alarmEnabled:"true"
+      validBackground:"0,255,0"
+      invalidText:"-----"
+    }
+    className:"fr.esrf.tangoatk.widget.attribute.SimpleScalarViewer"
+    font:"Dialog",0,12
+  }
+  JDLabel {
+    summit:78,96,136,117
+    origin:107,107
+    lineWidth:0
+    name:"Label"
+    text:"big box"
+  }
+  JDSwingObject {
+    summit:300,78,431,95
+    origin:334,86
+    fillStyle:1
+    lineWidth:0
+    name:"sys/tg_test/1/float_scalar"
+    extensions:{
+      unitVisible:"true"
+      userFormat:""
+      alarmEnabled:"true"
+      validBackground:"255,125,215"
+      invalidText:"-----"
+    }
+    className:"fr.esrf.tangoatk.widget.attribute.SimpleScalarViewer"
+    font:"Dialog",0,12
+  }
+  JDSwingObject {
+    summit:310,195,441,212
+    origin:344,203
+    fillStyle:1
+    lineWidth:0
+    name:"sys/tg_test/1/float_scalar"
+    extensions:{
+      unitVisible:"true"
+      userFormat:""
+      alarmEnabled:"false"
+      validBackground:"0,255,0"
+      invalidText:"-----"
+    }
+    className:"fr.esrf.tangoatk.widget.attribute.SimpleScalarViewer"
+    font:"Dialog",0,12
+  }
+  JDLabel {
+    summit:276,57,450,78
+    origin:305,68
+    lineWidth:0
+    name:"Label"
+    text:"validBackground = pink"
+  }
+  JDLabel {
+    summit:295,146,452,167
+    origin:324,157
+    lineWidth:0
+    name:"Label"
+    text:"alarmEnabled = false"
+  }
+  JDLabel {
+    summit:307,225,436,246
+    origin:336,236
+    lineWidth:0
+    name:"Label"
+    text:"custom text color"
+  }
+  JDSwingObject {
+    summit:309,244,440,261
+    origin:343,252
+    foreground:51,51,255
+    fillStyle:1
+    lineWidth:0
+    name:"sys/tg_test/1/float_scalar"
+    extensions:{
+      unitVisible:"true"
+      userFormat:""
+      alarmEnabled:"false"
+      validBackground:"0,255,0"
+      invalidText:"-----"
+    }
+    className:"fr.esrf.tangoatk.widget.attribute.SimpleScalarViewer"
+    font:"Dialog",0,12
+  }
+  JDLabel {
+    summit:318,278,437,299
+    origin:347,289
+    lineWidth:0
+    name:"Label"
+    text:"custom bg color"
+  }
+  JDSwingObject {
+    summit:309,296,440,314
+    origin:343,304
+    background:204,255,255
+    fillStyle:1
+    lineWidth:0
+    name:"sys/tg_test/1/float_scalar"
+    extensions:{
+      unitVisible:"true"
+      userFormat:""
+      alarmEnabled:"false"
+      validBackground:"0,255,0"
+      invalidText:"-----"
+    }
+    className:"fr.esrf.tangoatk.widget.attribute.SimpleScalarViewer"
+    font:"Dialog",0,12
+  }
+  JDLabel {
+    summit:346,176,402,197
+    origin:375,187
+    lineWidth:0
+    name:"Label"
+    text:"normal"
+  }
+  JDRectangle {
+    summit:270,337,478,166
+    origin:374,245
+    name:"Rectangle"
+  }
+  JDLabel {
+    summit:24,33,188,54
+    origin:97,44
+    lineWidth:0
+    name:"Label"
+    font:"Dialog",1,14
+    text:"SimpleScalarViewer"
+  }
+  JDSwingObject {
+    summit:50,256,181,276
+    origin:84,264
+    fillStyle:1
+    lineWidth:0
+    name:"sys/tg_test/1/float_scalar"
+    extensions:{
+      unitVisible:"false"
+      userFormat:"x = %4.1f"
+      alarmEnabled:"true"
+      validBackground:"0,255,0"
+      invalidText:"-----"
+    }
+    className:"fr.esrf.tangoatk.widget.attribute.SimpleScalarViewer"
+    font:"Dialog",0,12
+  }
+  JDLabel {
+    summit:28,234,263,255
+    origin:146,245
+    lineWidth:0
+    name:"Label"
+    text:"userFormat + unitVisible = false"
+  }
+}
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/__init__.py b/lib/taurus/qt/qtgui/graphic/jdraw/test/res/__init__.py
similarity index 83%
rename from lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/__init__.py
rename to lib/taurus/qt/qtgui/graphic/jdraw/test/res/__init__.py
index e942840..7d2077d 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/__init__.py
+++ b/lib/taurus/qt/qtgui/graphic/jdraw/test/res/__init__.py
@@ -23,8 +23,12 @@
 ##
 #############################################################################
 
-"""
-__init__.py: 
-"""
-from macroparameterseditor import ParamEditorManager, StandardMacroParametersEditor
-from model import ParamEditorModel
\ No newline at end of file
+'''
+This resources module contains:
+
+  - SimpleScalarViewer.jdw : a jdraw synoptic for testing visualization of 
+    scalars. 
+   
+  - styles.jdw : a jdraw synoptic for testing rendering of different styles
+  
+'''
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/graphic/jdraw/test/res/styles.jdw b/lib/taurus/qt/qtgui/graphic/jdraw/test/res/styles.jdw
new file mode 100644
index 0000000..72c6f96
--- /dev/null
+++ b/lib/taurus/qt/qtgui/graphic/jdraw/test/res/styles.jdw
@@ -0,0 +1,70 @@
+JDFile v11 {
+  Global {
+  }
+  JDLabel {
+    summit:39,19,148,40
+    origin:120,30
+    lineWidth:0
+    name:"Label"
+    text:"lineWidth=0"
+  }
+  JDLabel {
+    summit:51,50,141,71
+    origin:132,61
+    name:"Label"
+    text:"lineWidth=1"
+  }
+  JDLabel {
+    summit:52,90,142,111
+    origin:133,101
+    lineWidth:2
+    name:"Label"
+    text:"lineWidth=2"
+  }
+  JDRectangle {
+    summit:171,23,196,38
+    origin:182,30
+    background:204,255,255
+    fillStyle:1
+    lineWidth:0
+    name:"Rectangle"
+  }
+  JDRectangle {
+    summit:170,55,195,70
+    origin:181,62
+    background:204,255,255
+    fillStyle:1
+    name:"Rectangle"
+  }
+  JDRectangle {
+    summit:169,91,199,107
+    origin:185,71
+    background:204,255,255
+    fillStyle:1
+    lineWidth:2
+    name:"Rectangle"
+  }
+  JDPolyline {
+    summit:222,71,221,54,230,61,236,55,236,70,228,66,223,70,223,70,221,73
+    origin:229,64
+    background:153,255,255
+    fillStyle:1
+    name:"Polyline"
+  }
+  JDPolyline {
+    summit:221,39,220,22,229,29,235,23,235,38,227,34,222,38,222,38,220,41
+    origin:228,32
+    background:153,255,255
+    fillStyle:1
+    lineWidth:0
+    name:"Polyline"
+  }
+  JDPolyline {
+    summit:223,104,222,87,231,94,237,88,237,103,229,99,224,103,224,103,222,106
+    origin:230,97
+    background:153,255,255
+    fillStyle:1
+    lineWidth:2
+    name:"Polyline"
+  }
+}
diff --git a/lib/taurus/qt/qtgui/graphic/taurusgraphic.py b/lib/taurus/qt/qtgui/graphic/taurusgraphic.py
index 7a2768f..203c28e 100644
--- a/lib/taurus/qt/qtgui/graphic/taurusgraphic.py
+++ b/lib/taurus/qt/qtgui/graphic/taurusgraphic.py
@@ -1,4 +1,5 @@
 #!/usr/bin/env python
+import PyTango
 
 #############################################################################
 ##
@@ -45,11 +46,19 @@ from taurus.core.util.log import Logger
 from taurus.core.taurusvalidator import DeviceNameValidator, AttributeNameValidator
 from taurus.core.taurusdevice import TaurusDevice
 from taurus.core.taurusattribute import TaurusAttribute
-from taurus.qt import Qt
+from taurus.core.util.enumeration import Enumeration
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.base import TaurusBaseComponent
 from taurus.qt.qtgui.util import (QT_ATTRIBUTE_QUALITY_PALETTE, QT_DEVICE_STATE_PALETTE,
                                   ExternalAppAction, TaurusWidgetFactory)
 
+SynopticSelectionStyle = Enumeration("SynopticSelectionStyle", [
+    # A blue ellipse is displayed around the selected objects
+    "ELLIPSE",
+    # The own outline of selected object is displayed in blue and bolder
+    "OUTLINE",
+    ])
+
 def parseTangoUri(name):
     from taurus.core import tango
     validator = {tango.TangoDevice    : DeviceNameValidator,
@@ -134,7 +143,7 @@ class TaurusGraphicsScene(Qt.QGraphicsScene):
     __pyqtSignals__ = ("refreshTree2","graphicItemSelected(QString)","graphicSceneClicked(QPoint)")
     ANY_ATTRIBUTE_SELECTS_DEVICE = True
     TRACE_ALL = False
-    
+
     def __init__(self, parent = None, strt = True):
         name = self.__class__.__name__
         #self.call__init__(Logger, name, parent) #Inheriting from Logger caused exceptions in CONNECT
@@ -144,6 +153,7 @@ class TaurusGraphicsScene(Qt.QGraphicsScene):
         self._itemnames = CaselessDefaultDict(lambda k:set())
         self._selection = []
         self._selectedItems = []
+        self._selectionStyle = SynopticSelectionStyle.OUTLINE
         self.threads = []
         self.pids = []
         self.panels = []
@@ -193,7 +203,8 @@ class TaurusGraphicsScene(Qt.QGraphicsScene):
                 standAlone = args.standAlone
             else:
                 clName,clParam,objName = self.panel_launcher,args,args
-            
+            if not clName or clName == 'noPanel': 
+                return
             self.debug('TaurusGraphicsScene.showNewPanel(%s,%s,%s)'%(clName,clParam,objName))
             if isinstance(clName,ExternalAppAction):
                 clName.actionTriggered(clParam if isinstance(clParam,(list,tuple)) else [clParam])
@@ -202,7 +213,7 @@ class TaurusGraphicsScene(Qt.QGraphicsScene):
                     klass = self.getClass(clName)
                     if klass is None: 
                         self.warning("%s Class not found!"%clName)
-                        return
+                        klass = self.getClass("TaurusDevicePanel")
                 else:
                     klass,clName = clName,getattr(clName,'__name__',str(clName))
                 widget = klass() #self.parent())
@@ -324,12 +335,15 @@ class TaurusGraphicsScene(Qt.QGraphicsScene):
         try: 
             obj = self.getItemClicked(mouseEvent)
             obj_name = getattr(obj,'_name', '')
-            if not obj_name and isinstance(obj,Qt.QGraphicsTextItem): obj_name = obj.toPlainText()
+            if not obj_name and isinstance(obj,QGraphicsTextBoxing): obj_name = obj.toPlainText()
             if (mouseEvent.button() == Qt.Qt.LeftButton):
                 ## A null obj_name should deselect all, we don't send obj because we want all similar to be matched                
                 if self.selectGraphicItem(obj_name):
                     self.debug(' => graphicItemSelected(QString)(%s)'%obj_name)
-                    self.emit(Qt.SIGNAL("graphicItemSelected(QString)"),obj_name) # A null obj_name should deselect all
+                    self.emit(Qt.SIGNAL("graphicItemSelected(QString)"),obj_name)
+                else:
+                    # It should send None but the signature do not allow it
+                    self.emit(Qt.SIGNAL("graphicItemSelected(QString)"), "")
             def addMenuAction(menu,k,action,last_was_separator=False):
                 try:
                     if k:
@@ -388,6 +402,10 @@ class TaurusGraphicsScene(Qt.QGraphicsScene):
         except:
             self.warning(traceback.format_exc())
 
+    def setSelectionStyle(self, selectionStyle):
+        # TODO We should test that selectionStyle is part of SynopticSelectionStyle but there is nothing about it
+        self._selectionStyle = selectionStyle
+
     #@Qt.pyqtSignature("selectGraphicItem(const QString &)")
     def selectGraphicItem(self,item_name):
         """
@@ -395,7 +413,6 @@ class TaurusGraphicsScene(Qt.QGraphicsScene):
         If the item_name is empty, or it is a reserved keyword, or it has the "noSelect" extension, then the blue circle is removed from the synoptic.
         """      
         #self.debug('In TaurusGraphicsScene.selectGraphicItem(%s))'%item_name)
-        retval = False
         selected = [str(getattr(item,'_name',item)) for item in self._selectedItems if item]
         if selected:
             iname = str(getattr(item_name,'_name',item_name))
@@ -422,6 +439,16 @@ class TaurusGraphicsScene(Qt.QGraphicsScene):
             items = [i for i in items if self.getTaurusParentItem(i) not in (items+self._selectedItems)]
             self.debug('In TaurusGraphicsScene.selectGraphicItem(%s)): matched %d items'%(item_name,len(items)))
 
+        if self._selectionStyle == SynopticSelectionStyle.ELLIPSE:
+            displaySelection = self._displaySelectionAsEllipse
+        elif self._selectionStyle == SynopticSelectionStyle.OUTLINE:
+            displaySelection = self._displaySelectionAsOutline
+        else:
+            raise Exception("Unexpected selectionStyle '%s'" % SynopticSelectionStyle.whatis(self._selectionStyle))
+        return displaySelection(items)
+
+    def _displaySelectionAsEllipse(self, items):
+        retval = False
         for item in items:
             try:
                 if ( (isinstance(item,TaurusGraphicsItem) and item.getExtensions().get('noSelect'))
@@ -452,6 +479,61 @@ class TaurusGraphicsScene(Qt.QGraphicsScene):
                 #return False           
         return retval
 
+    def _displaySelectionAsOutline(self, items):
+        def _outline(shapes):
+            """"Compute the boolean union from a list of QGraphicsItem. """
+            shape = None
+            # TODO we can use a stack instead of recursivity
+            for s in shapes:
+                # TODO we should skip text and things like that
+                if isinstance(s, TaurusGroupItem):
+                    s = _outline(s.childItems())
+                    if s == None:
+                        continue
+
+                s = s.shape()
+                if shape != None:
+                    shape = shape.united(s)
+                else:
+                    shape = s
+
+            if shape == None:
+                return None
+
+            return Qt.QGraphicsPathItem(shape)
+
+        # TODO we can cache the outline instead of computing it again and again
+        selectionShape = _outline(items)
+        if selectionShape:
+            # copy-paste from getSelectionMark
+            color = Qt.QColor(Qt.Qt.blue)
+            color.setAlphaF(.10)
+            pen = Qt.QPen(Qt.Qt.SolidLine)
+            pen.setWidth(4)
+            pen.setColor(Qt.QColor(Qt.Qt.blue))
+            selectionShape.setBrush(color)
+            selectionShape.setPen(pen)
+
+            for item in items:
+                if item not in self._selectedItems: self._selectedItems.append(item)
+
+            # TODO i dont think this function work... or i dont know how...
+            #self.setSelectionMark(picture=selectionShape)
+            # ... Then do it it with hands...
+            # copy-paste from drawSelectionMark
+            self._selection.append(selectionShape)
+            # It's better to add it hidden to avoid resizings
+            selectionShape.hide()
+            self.addItem(selectionShape)
+            # Put on Top
+            selectionShape.setZValue(9999)
+            selectionShape.show()
+            self.updateSceneViews()
+
+            return True
+
+        return False
+
     def clearSelection(self):
         #self.debug('In clearSelection([%d])'%len(self._selectedItems))
         for i in self._selection:
@@ -644,6 +726,106 @@ class TaurusGraphicsScene(Qt.QGraphicsScene):
         return
 
 
+class QGraphicsTextBoxing(Qt.QGraphicsItemGroup):
+    """Display a text inside a virtual box. Support horizontal and vertical alignment"""
+
+    _TEXT_RATIO = 0.8
+
+    def __init__(self, parent=None, scene=None):
+        Qt.QGraphicsItemGroup.__init__(self, parent, scene)
+        self._rect = Qt.QGraphicsRectItem(self, scene)
+        self._rect.setBrush(Qt.QBrush(Qt.Qt.NoBrush))
+        self._rect.setPen(Qt.QPen(Qt.Qt.NoPen))
+        self._text = Qt.QGraphicsTextItem(self, scene)
+        self._text.scale(self._TEXT_RATIO, self._TEXT_RATIO)
+        self._validBackground = None
+        # using that like the previous code create a worst result
+        self.__layoutValide = True
+        self._alignment = Qt.Qt.AlignCenter | Qt.Qt.AlignVCenter
+
+    def setRect(self, x, y, width, height):
+        self._rect.setRect(x, y, width, height)
+        self._invalidateLayout()
+
+    def setPlainText(self, text):
+        self._text.setPlainText(text)
+        self._invalidateLayout()
+
+    def setValidBackground(self, color):
+        self._validBackground = color
+
+    def toPlainText(self):
+        return self._text.toPlainText()
+
+    def brush(self):
+        return self._rect.brush()
+
+    def setBrush(self, brush):
+        self._rect.setBrush(brush)
+
+    def pen(self):
+        return self._rect.pen()
+
+    def setPen(self, pen):
+        self._rect.setPen(pen)
+
+    def setDefaultTextColor(self, color):
+        self._text.setDefaultTextColor(color)
+
+    def setHtml(self, html):
+        self._text.setHtml(html)
+        self._invalidateLayout()
+
+    def setFont(self, font):
+        self._text.setFont(font)
+        self._invalidateLayout()
+
+    def setAlignment(self, alignment):
+        self._alignment = alignment
+        self._invalidateLayout()
+
+    def _invalidateLayout(self):
+        """Invalidate the current location of the text"""
+        if not self.__layoutValide:
+            return
+        self.__layoutValide = False
+        self.update()
+
+    def _validateLayout(self):
+        """Compute the text location"""
+        if self.__layoutValide:
+            return
+
+        rect = self._rect.rect()
+        width, height = rect.width(), rect.height()
+        textRect = self._text.boundingRect()
+
+        # horizontal layout
+        x = rect.x()
+        alignment = int(self._alignment)
+        if (alignment & int(Qt.Qt.AlignLeft)) != 0:
+            x += 0
+        elif (alignment & int(Qt.Qt.AlignHCenter)) != 0:
+            x += width * 0.5 - textRect.width() * 0.5 * self._TEXT_RATIO
+        elif (alignment & int(Qt.Qt.AlignRight)) != 0:
+            x += width - textRect.width() * self._TEXT_RATIO
+
+        # vertical layout
+        y = rect.y()
+        if (alignment & int(Qt.Qt.AlignTop)) != 0:
+            y += 0
+        elif (alignment & int(Qt.Qt.AlignVCenter)) != 0:
+            y += height * 0.5 - textRect.height() * 0.5 * self._TEXT_RATIO
+        elif (alignment & int(Qt.Qt.AlignBottom)) != 0:
+            y += height - textRect.height() * self._TEXT_RATIO
+
+        self._text.setPos(x, y)
+        self.__layoutValide = True
+
+    def paint(self, painter, option, widget):
+        self._validateLayout()
+        Qt.QGraphicsItemGroup.paint(self, painter, option, widget)
+
 class QSpline(Qt.QGraphicsPathItem):
 
     def __init__(self, parent=None, closed=False, control_points=None):
@@ -655,38 +837,34 @@ class QSpline(Qt.QGraphicsPathItem):
 
     def setControlPoints(self, control_points):
         self.__control_points = control_points
-    
-    def clearPath(self):
-        path = Qt.QPainterPath()
-        self.setPath(path)
-        return path
+        self.updateSplinePath()
 
-    def nextMiddlePoint(self, i):
-        cp = self.__control_points
-        p1, p2 = cp[i], cp[(i+1)%len(cp)]
-        return p1+0.5*(p2-p1)
+    def setClose(self, isClosed):
+        if self.__closed == isClosed:
+            return
+        self.__closed = isClosed
+        self.updateSplinePath()
 
     def updateSplinePath(self):
-        path = self.clearPath()
+        path = Qt.QPainterPath()
         cp = self.__control_points
         nb_points = len(cp)
-        nmp = self.nextMiddlePoint
-        if nb_points == 0:
-            return
+        if nb_points <= 1:
+            pass
         elif nb_points == 2:
             path.moveTo(cp[0])
             path.lineTo(cp[1])
         else:
+            path.moveTo(cp[0])
+            for i in xrange(1, nb_points - 1, 3):
+                p1 = cp[i + 0]
+                p2 = cp[i + 1]
+                end = cp[i + 2]
+                path.cubicTo(p1, p2, end)
             if self.__closed:
-                path.moveTo(nmp(0))
-                for i in range(1, nb_points):
-                    path.quadTo(cp[i], nmp(i))
-            else:
-                path.moveTo(cp[0])
-                path.lineTo(nmp(0))
-                for i in range(1, nb_points-1):
-                    path.quadTo(cp[i], nmp(i))
-                path.lineTo(cp[nb_points-1])
+                path.lineTo(cp[0])
+
+        self.setPath(path)
 
 
 class TaurusGraphicsItem(TaurusBaseComponent):
@@ -695,6 +873,7 @@ class TaurusGraphicsItem(TaurusBaseComponent):
     def __init__(self, name = None, parent = None):
         self.call__init__(TaurusBaseComponent, name, parent) #<- log created here
         #self.debug('TaurusGraphicsItem(%s,%s)' % (name,parent))
+        self.ignoreRepaint = False
         self.setName(name)
         self._currFgBrush = None
         self._currBgBrush = None
@@ -734,9 +913,8 @@ class TaurusGraphicsItem(TaurusBaseComponent):
         self.noPrompt = self._extensions.get('noPrompt',False)
         self.standAlone = self._extensions.get('standAlone',False)
         self.noTooltip = self._extensions.get('noTooltip',False)
-        self.ignoreRepaint = self._extensions.get('ignoreRepaint',False)
+        self.ignoreRepaint = self._extensions.get('ignoreRepaint', self.ignoreRepaint)
         self.setName(self._extensions.get('name',self._name))
-        self._unitVisible = str(self._extensions.get('unitVisible',True)).lower().strip() in ('yes','true','1')
         tooltip = '' if (self.noTooltip or self._name==self.__class__.__name__ or self._name is None) else str(self._name)
         #self.debug('setting %s.tooltip = %s'%(self._name,tooltip))
         self.setToolTip(tooltip)
@@ -799,6 +977,8 @@ class TaurusGraphicsAttributeItem(TaurusGraphicsItem):
         name = name or self.__class__.__name__
         self._unitVisible = True
         self._currValue = None
+        self._userFormat = None
+        self._unitVisible = True
         self.call__init__(TaurusGraphicsItem, name, parent)
 
     def getUnit(self):
@@ -811,31 +991,34 @@ class TaurusGraphicsAttributeItem(TaurusGraphicsItem):
 
     def updateStyle(self):
         v = self.getModelValueObj()
-        self._currText = self.getDisplayValue()
-        #self.debug('In TaurusGraphicsAttributeItem(%s).updateStyle(%s)'%(self.getName(),self._currText))
         if self.getShowQuality():
             try:
                 quality = None
                 if v:
                     quality = v.quality
-                #self._currHtmlText = QT_ATTRIBUTE_QUALITY_PALETTE.htmlStyle('TD',quality)
-                #self._currHtmlText += "<table cellpadding='1'><tr><td class='%s'>%s</td>" % (quality,self._currText)
-                #if self._unitVisible: self._currHtmlText += "<td>%s</td>" % self.getUnit()
-                #self._currHtmlText += "</tr></table>"
-                self._currHtmlText = QT_ATTRIBUTE_QUALITY_PALETTE.htmlStyle('P',quality)
-                unit = (self._unitVisible and self.getUnit()) or ''
-                self._currHtmlText += "<p class='%s'>%s%s</p>" % (quality,self._currText,' '+unit if unit else '')            
-                self._currHtmlText = self._currHtmlText.decode('unicode-escape')
+                if quality == PyTango.AttrQuality.ATTR_VALID and self._validBackground:
+                    background = self._validBackground
+                else:
+                    background, _ = QT_ATTRIBUTE_QUALITY_PALETTE.qcolor(quality)
+                self.setBrush(Qt.QBrush(background))
             except:
                 self.warning('In TaurusGraphicsAttributeItem(%s).updateStyle(%s): colors failed!'%(self._name,self._currText))
-                self.warning(traceback.format_exc())               
+                self.warning(traceback.format_exc())
+
+        if v and self._userFormat:
+            text = self._userFormat % (v.value)
         else:
-            if self._unitVisible: self._currText += ' ' + unit
-            self._currText = self._currText.decode('unicode-escape')
-            self._currHtmlText = self.currText
-        
+            text = self._currText = self.getDisplayValue()
+        if self._unitVisible:
+            text = text + ' ' + self.getUnit()
+        self._currText = text.decode('unicode-escape')
+        self._currHtmlText = None
+
         TaurusGraphicsItem.updateStyle(self)
 
+    def setUserFormat(self, format):
+        self._userFormat = format
+
     def setUnitVisible(self,yesno):
         self._unitVisible = yesno
 
@@ -921,15 +1104,34 @@ class TaurusRectStateItem(Qt.QGraphicsRectItem, TaurusGraphicsStateItem):
             self.setBrush(self._currBgBrush)
         Qt.QGraphicsRectItem.paint(self,painter,option,widget)
 
-class TaurusGroupStateItem(Qt.QGraphicsItemGroup, TaurusGraphicsStateItem):
 
-    def __init__(self, name = None, parent = None, scene = None):
+class TaurusSplineStateItem(QSpline, TaurusGraphicsStateItem):
+
+    def __init__(self, name=None, parent=None, scene=None):
         name = name or self.__class__.__name__
+        QSpline.__init__(self, parent, scene)
+        self.call__init__(TaurusGraphicsStateItem, name, parent)
+
+    def paint(self, painter, option, widget):
+        if self._currBgBrush:
+            self._currBgBrush.setStyle(self.brush().style())
+            self.setBrush(self._currBgBrush)
+        QSpline.paint(self, painter, option, widget)
+
+class TaurusGroupItem(Qt.QGraphicsItemGroup):
+
+    def __init__(self, name = None, parent = None, scene = None):
         Qt.QGraphicsItemGroup.__init__(self, parent, scene)
+
+class TaurusGroupStateItem(TaurusGroupItem, TaurusGraphicsStateItem):
+
+    def __init__(self, name = None, parent = None, scene = None):
+        name = name or self.__class__.__name__
+        TaurusGroupItem.__init__(self, parent, scene)
         self.call__init__(TaurusGraphicsStateItem, name, parent)
 
     def paint(self,painter,option,widget):
-        Qt.QGraphicsItemGroup.paint(self,painter,option,widget)
+        TaurusGroupItem.paint(self,painter,option,widget)
         
 class TaurusPolygonStateItem(Qt.QGraphicsPolygonItem,TaurusGraphicsStateItem):
     
@@ -956,32 +1158,32 @@ class TaurusLineStateItem(Qt.QGraphicsLineItem,TaurusGraphicsStateItem):
         if self._currBgBrush:
             self._currBgBrush.setStyle(self.brush().style())
             self.setBrush(self._currBgBrush)
-        Qt.QGraphicsLineItem.paint(self,painter,option,widget)
-        
-class TaurusTextStateItem(Qt.QGraphicsTextItem, TaurusGraphicsStateItem):
+        Qt.QGraphicsLineItem.paint(self, painter, option, widget)
+
+class TaurusTextStateItem(QGraphicsTextBoxing, TaurusGraphicsStateItem):
     """
     A QGraphicsItem that represents a text related to a device state or attribute quality
     """      
-    def __init__(self, name = None, parent = None, scene = None):
+    def __init__(self, name=None, parent=None, scene=None):
         name = name or self.__class__.__name__
-        Qt.QGraphicsTextItem.__init__(self, parent, scene)
+        QGraphicsTextBoxing.__init__(self, parent, scene)
         self.call__init__(TaurusGraphicsStateItem, name, parent)
         
     def paint(self,painter,option,widget):
         if self._currHtmlText:
             self.setHtml(self._currHtmlText)
         else:
-            self.setPlainText(self._currText or '') 
-        Qt.QGraphicsTextItem.paint(self,painter,option,widget)
+            self.setPlainText(self._currText or '')
+        QGraphicsTextBoxing.paint(self, painter, option, widget)
 
 
-class TaurusTextAttributeItem(Qt.QGraphicsTextItem, TaurusGraphicsAttributeItem, Qt.QGraphicsRectItem):
+class TaurusTextAttributeItem(QGraphicsTextBoxing, TaurusGraphicsAttributeItem):
     """
     A QGraphicsItem that represents a text related to an attribute value
     """
-    def __init__(self, name = None, parent = None, scene = None):
+    def __init__(self, name=None, parent=None, scene=None):
         name = name or self.__class__.__name__
-        Qt.QGraphicsTextItem.__init__(self, parent, scene)
+        QGraphicsTextBoxing.__init__(self, parent, scene)
         self.call__init__(TaurusGraphicsAttributeItem, name, parent)
         
     def paint(self,painter,option,widget):
@@ -990,42 +1192,42 @@ class TaurusTextAttributeItem(Qt.QGraphicsTextItem, TaurusGraphicsAttributeItem,
             self.setHtml(self._currHtmlText)
         else:
             self.setPlainText(self._currText or '')
-        Qt.QGraphicsTextItem.paint(self,painter,option,widget)
+        QGraphicsTextBoxing.paint(self, painter, option, widget)
 
 
-TYPE_TO_GRAPHICS = { 
+TYPE_TO_GRAPHICS = {
     None : { "Rectangle"      : Qt.QGraphicsRectItem,
              "RoundRectangle" : Qt.QGraphicsRectItem,
              "Ellipse"        : Qt.QGraphicsEllipseItem,
              "Polyline"       : Qt.QGraphicsPolygonItem,
-             "Label"          : Qt.QGraphicsTextItem,
+             "Label"          : QGraphicsTextBoxing,
              "Line"           : Qt.QGraphicsLineItem,
-             "Group"          : Qt.QGraphicsItemGroup, 
-             "SwingObject"    : Qt.QGraphicsRectItem, 
+             "Group"          : TaurusGroupItem,
+             "SwingObject"    : TaurusTextAttributeItem,
              "Image"          : Qt.QGraphicsPixmapItem,
              "Spline"         : QSpline, },
-             
+
     TaurusDevice : { "Rectangle"      : TaurusRectStateItem,
                            "RoundRectangle" : TaurusRectStateItem,
                            "Ellipse"        : TaurusEllipseStateItem,
-                           "Polyline"       : TaurusPolygonStateItem, 
+                           "Polyline"       : TaurusPolygonStateItem,
                            "Label"          : TaurusTextStateItem,
-                           "Line"           : Qt.QGraphicsLineItem, #TaurusLineStateItem,
-                           "Group"          : TaurusGroupStateItem, 
+                           "Line"           : Qt.QGraphicsLineItem,  #TaurusLineStateItem,
+                           "Group"          : TaurusGroupStateItem,
                            "SwingObject"    : TaurusTextAttributeItem,
                            "Image"          : Qt.QGraphicsPixmapItem,
-                           "Spline"         : QSpline, },
+                           "Spline"         : TaurusSplineStateItem, },
 
     TaurusAttribute : { "Rectangle"      : TaurusRectStateItem,
                            "RoundRectangle" : TaurusRectStateItem,
                            "Ellipse"        : TaurusEllipseStateItem,
-                           "Polyline"       : TaurusPolygonStateItem, 
+                           "Polyline"       : TaurusPolygonStateItem,
                            "Label"          : TaurusTextAttributeItem,
-                           "Line"           : Qt.QGraphicsLineItem, #TaurusLineStateItem,
-                           "Group"          : TaurusGroupStateItem, 
+                           "Line"           : Qt.QGraphicsLineItem,  #TaurusLineStateItem,
+                           "Group"          : TaurusGroupStateItem,
                            "SwingObject"    : TaurusTextAttributeItem,
                            "Image"          : Qt.QGraphicsPixmapItem,
-                           "Spline"         : QSpline, },
+                           "Spline"         : TaurusSplineStateItem, },
 }
 
 
@@ -1103,8 +1305,6 @@ class TaurusBaseGraphicsFactory:
         self.set_common_params(item,params)
         if hasattr(item,'getExtensions'):
             item.getExtensions() #<= must be called here to take extensions from params
-        if 'text' in klass.__name__.lower():
-            item.scale(.8,.8)
         return item
 
     def getNameParam(self):
diff --git a/lib/taurus/qt/qtgui/graphic/taurusgraphicview.py b/lib/taurus/qt/qtgui/graphic/taurusgraphicview.py
index 4a9fa5d..190a385 100644
--- a/lib/taurus/qt/qtgui/graphic/taurusgraphicview.py
+++ b/lib/taurus/qt/qtgui/graphic/taurusgraphicview.py
@@ -31,7 +31,7 @@ taurusgraphicview.py:
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 from taurus.qt.qtgui.base import TaurusBaseWidget
 
diff --git a/lib/taurus/qt/qtgui/image/taurusqub.py b/lib/taurus/qt/qtgui/image/taurusqub.py
index ca33f92..e60c743 100644
--- a/lib/taurus/qt/qtgui/image/taurusqub.py
+++ b/lib/taurus/qt/qtgui/image/taurusqub.py
@@ -27,7 +27,7 @@
 
 import weakref
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 from Qub.Widget.DataDisplay.QubDataImageDisplay import QubDataImageDisplay
 from Qub.Widget.QubActionSet import QubToolbarToggleButtonAction
diff --git a/lib/taurus/qt/qtgui/input/choicedlg.py b/lib/taurus/qt/qtgui/input/choicedlg.py
index 0655ed2..78f5d64 100644
--- a/lib/taurus/qt/qtgui/input/choicedlg.py
+++ b/lib/taurus/qt/qtgui/input/choicedlg.py
@@ -29,7 +29,7 @@ __all__ = ["GraphicalChoiceDlg","GraphicalChoiceWidget"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 class GraphicalChoiceDlg(Qt.QDialog):
     '''
diff --git a/lib/taurus/qt/qtgui/input/qwheel.py b/lib/taurus/qt/qtgui/input/qwheel.py
index 0882cf7..2279a5b 100644
--- a/lib/taurus/qt/qtgui/input/qwheel.py
+++ b/lib/taurus/qt/qtgui/input/qwheel.py
@@ -32,7 +32,7 @@ __docformat__ = 'restructuredtext'
 import os
 import math
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 #from taurus.qt.qtgui.resource.qrc_extra_icons import *
 
diff --git a/lib/taurus/qt/qtgui/input/tauruscheckbox.py b/lib/taurus/qt/qtgui/input/tauruscheckbox.py
index edb3ad4..7a16138 100644
--- a/lib/taurus/qt/qtgui/input/tauruscheckbox.py
+++ b/lib/taurus/qt/qtgui/input/tauruscheckbox.py
@@ -29,7 +29,7 @@ __all__ = ["TaurusValueCheckBox"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.base import TaurusBaseWritableWidget
 
 
diff --git a/lib/taurus/qt/qtgui/input/tauruscombobox.py b/lib/taurus/qt/qtgui/input/tauruscombobox.py
index c8d1673..8591a0d 100644
--- a/lib/taurus/qt/qtgui/input/tauruscombobox.py
+++ b/lib/taurus/qt/qtgui/input/tauruscombobox.py
@@ -30,7 +30,7 @@ __all__ = ["TaurusAttrListComboBox", "TaurusValueComboBox"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 import PyTango
 import taurus.core
diff --git a/lib/taurus/qt/qtgui/input/tauruslineedit.py b/lib/taurus/qt/qtgui/input/tauruslineedit.py
index 5a40862..36a0fac 100644
--- a/lib/taurus/qt/qtgui/input/tauruslineedit.py
+++ b/lib/taurus/qt/qtgui/input/tauruslineedit.py
@@ -30,7 +30,7 @@ __all__ = ["TaurusValueLineEdit", "TaurusConfigLineEdit"]
 __docformat__ = 'restructuredtext'
 
 import sys, PyTango, taurus.core
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.base import TaurusBaseWidget, TaurusBaseWritableWidget
 
 _String = str
diff --git a/lib/taurus/qt/qtgui/input/taurusspinbox.py b/lib/taurus/qt/qtgui/input/taurusspinbox.py
index 744f558..54cbbd1 100644
--- a/lib/taurus/qt/qtgui/input/taurusspinbox.py
+++ b/lib/taurus/qt/qtgui/input/taurusspinbox.py
@@ -29,7 +29,7 @@ __all__ = ["TaurusValueSpinBox", "TaurusValueSpinBoxEx" ]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 from taurus.qt.qtgui.base import TaurusBaseWritableWidget
 from tauruslineedit import TaurusValueLineEdit
@@ -46,35 +46,22 @@ class TaurusValueSpinBox(Qt.QAbstractSpinBox):
         self._showQuality = False
         
         self._singleStep = 1.0
-        
-        self.setLineEdit(TaurusValueLineEdit(designMode=designMode))
+
+        lineEdit = TaurusValueLineEdit(designMode=designMode)
+        self.setLineEdit(lineEdit)
         self.setAccelerated(True)
+        self.connect(self, Qt.SIGNAL("editingFinished()"),
+                     self.writeValue)
 
     def __getattr__(self, name):
         return getattr(self.lineEdit(), name)
 
-    # The minimum size of the widget (a limit for the user)
-    #def minimumSizeHint(self):
-    #    return Qt.QSize(20, 20)
-    
-    # The default size of the widget
-    #def sizeHint(self):
-    #    return Qt.QSize(80, 24)
-        
     def setValue(self, v):
         self.lineEdit().setValue(v)
 
     def getValue(self):
         return self.lineEdit().getValue()
     
-    def keyPressEvent(self, event):
-        if event.key() in (Qt.Qt.Key_Return, Qt.Qt.Key_Enter):
-            self.lineEdit().writeValue()
-            event.accept()
-        else:
-            Qt.QAbstractSpinBox.keyPressEvent(self,event)
-            event.ignore()
-
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     # Mandatory overload from QAbstractSpinBox
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
@@ -92,12 +79,17 @@ class TaurusValueSpinBox(Qt.QAbstractSpinBox):
                 self.lineEdit().writeValue(forceApply=True)
     
     def stepEnabled(self):
-        le, curr_val, ss = self.lineEdit(), self.getValue(), self.getSingleStep()
         ret = Qt.QAbstractSpinBox.StepEnabled(Qt.QAbstractSpinBox.StepNone)
-        
+        if self.getModelObj() == None:
+            return ret
+        if self.getModelObj().getValueObj() == None:
+            return ret
+
+        le, curr_val, ss = self.lineEdit(), self.getValue(), self.getSingleStep()
+
         if curr_val == None:
             return ret
-        
+
         if not le._outOfRange(curr_val + ss):
             ret |= Qt.QAbstractSpinBox.StepUpEnabled
         if not le._outOfRange(curr_val - ss):
@@ -223,4 +215,3 @@ class TaurusValueSpinBoxEx(Qt.QWidget):
     
     def __setattr__(self, name, value):
         setattr(self.spinBox, name, value)
-    
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/input/tauruswheel.py b/lib/taurus/qt/qtgui/input/tauruswheel.py
index 326e7d0..a962621 100644
--- a/lib/taurus/qt/qtgui/input/tauruswheel.py
+++ b/lib/taurus/qt/qtgui/input/tauruswheel.py
@@ -29,7 +29,7 @@ __all__ = ["TaurusWheelEdit" ]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 import taurus.core
 from taurus.qt.qtgui.base import TaurusBaseWritableWidget
diff --git a/lib/taurus/qt/qtgui/model/qbasemodel.py b/lib/taurus/qt/qtgui/model/qbasemodel.py
index 3b17192..e891a15 100644
--- a/lib/taurus/qt/qtgui/model/qbasemodel.py
+++ b/lib/taurus/qt/qtgui/model/qbasemodel.py
@@ -32,7 +32,7 @@ __all__ = ["QBaseModelWidget", "TaurusBaseModelWidget",
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 from taurus.qt.qtgui.util import ActionFactory
 from taurus.qt.qtgui.resource import getIcon, getThemeIcon
diff --git a/lib/taurus/qt/qtgui/panel/qdataexportdialog.py b/lib/taurus/qt/qtgui/panel/qdataexportdialog.py
old mode 100755
new mode 100644
index e8dd6df..140e5a0
--- a/lib/taurus/qt/qtgui/panel/qdataexportdialog.py
+++ b/lib/taurus/qt/qtgui/panel/qdataexportdialog.py
@@ -29,11 +29,12 @@ one or more curves"""
 import os.path
 from datetime import datetime
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
+from taurus.qt.qtgui.util.ui import UILoadable
 
-from ui import ui_DataExportDlg
 
-class QDataExportDialog(Qt.QDialog, ui_DataExportDlg.Ui_DataExportDlg):
+ at UILoadable
+class QDataExportDialog(Qt.QDialog):
     """
     This creates a Qt dialog for showing and exporting x-y Ascii data from one or more curves 
     The data sets are passed (by calling setDataSets() or at instantiation time) as a dictionary::
@@ -51,7 +52,7 @@ class QDataExportDialog(Qt.QDialog, ui_DataExportDlg.Ui_DataExportDlg):
 
     def __init__(self, parent=None, datadict=None):
         super(QDataExportDialog,self).__init__(parent)
-        self.setupUi(self)
+        self.loadUi()
         self._xIsTime = False
         
         #connections
diff --git a/lib/taurus/qt/qtgui/panel/qdoublelist.py b/lib/taurus/qt/qtgui/panel/qdoublelist.py
index efd4252..48e2d8a 100644
--- a/lib/taurus/qt/qtgui/panel/qdoublelist.py
+++ b/lib/taurus/qt/qtgui/panel/qdoublelist.py
@@ -33,9 +33,12 @@ __all__ = ["QDoubleListDlg"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
-from ui.ui_DoubleListDlg import Ui_DoubleListDlg
+from taurus.external.qt import Qt
+from taurus.qt.qtgui.util.ui import UILoadable
 
+
+
+ at UILoadable(with_ui='ui')
 class QDoubleListDlg(Qt.QDialog):
     '''Generic dialog providing two lists. Items can be moved from one to the other
     '''
@@ -49,9 +52,7 @@ class QDoubleListDlg(Qt.QDialog):
             list2=[]
         
         super(QDoubleListDlg,self).__init__(parent)
-        
-        self.ui = Ui_DoubleListDlg()
-        self.ui.setupUi(self)
+        self.loadUi()
         
         if winTitle:
             self.setWindowTitle(winTitle)
@@ -139,4 +140,4 @@ if __name__ == "__main__":
     import sys
     main()    
         
-        
\ No newline at end of file
+        
diff --git a/lib/taurus/qt/qtgui/panel/qrawdatachooser.py b/lib/taurus/qt/qtgui/panel/qrawdatachooser.py
index 8714f26..7ba9ce1 100644
--- a/lib/taurus/qt/qtgui/panel/qrawdatachooser.py
+++ b/lib/taurus/qt/qtgui/panel/qrawdatachooser.py
@@ -29,17 +29,17 @@ RawDataChooser.py:  widget for importing RawData (from file or from a function)
 
 import numpy
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.core.util.safeeval import SafeEvaluator
+from taurus.qt.qtgui.util.ui import UILoadable
 
-from .ui import ui_RawDataChooser
 
-
-class QRawDataWidget(Qt.QWidget, ui_RawDataChooser.Ui_RawDataChooser):
+ at UILoadable
+class QRawDataWidget(Qt.QWidget):
     
     def __init__(self, parent=None):
         super(QRawDataWidget,self).__init__(parent)
-        self.setupUi(self)
+        self.loadUi()
 
         #connecttions
         self.connect(self.openFilesBT,Qt.SIGNAL( "clicked()"), self.onOpenFilesButtonClicked)
@@ -76,7 +76,7 @@ class QRawDataWidget(Qt.QWidget, ui_RawDataChooser.Ui_RawDataChooser):
         
 if __name__ == "__main__":
     import sys 
-    app = QApplication(sys.argv)
+    app = Qt.QApplication(sys.argv)
     form = QRawDataWidget()
     form.show()
     sys.exit(app.exec_())
diff --git a/lib/taurus/qt/qtgui/panel/report/albareport.py b/lib/taurus/qt/qtgui/panel/report/albareport.py
index c6c3d70..53604ea 100644
--- a/lib/taurus/qt/qtgui/panel/report/albareport.py
+++ b/lib/taurus/qt/qtgui/panel/report/albareport.py
@@ -29,7 +29,7 @@ __all__ = ["TicketReportHandler"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from basicreport import SendMailDialog, SMTPReportHandler
 
 
diff --git a/lib/taurus/qt/qtgui/panel/report/basicreport.py b/lib/taurus/qt/qtgui/panel/report/basicreport.py
index b342644..57dcb46 100644
--- a/lib/taurus/qt/qtgui/panel/report/basicreport.py
+++ b/lib/taurus/qt/qtgui/panel/report/basicreport.py
@@ -30,8 +30,8 @@ __all__ = ["ClipboardReportHandler", "SMTPReportHandler"]
 __docformat__ = 'restructuredtext'
 
 from taurus.core.util.report import TaurusMessageReportHandler
-from taurus.qt import Qt
-from ui import ui_SendMailForm
+from taurus.external.qt import Qt
+from taurus.qt.qtgui.util.ui import UILoadable
 
 
 class ClipboardReportHandler(TaurusMessageReportHandler):
@@ -48,14 +48,14 @@ class ClipboardReportHandler(TaurusMessageReportHandler):
             "Message Copied to clipboard")
 
 
+ at UILoadable(with_ui='ui')
 class SendMailDialog(Qt.QDialog):
 
     def __init__(self, parent=None):
         Qt.QDialog.__init__(self, parent)
-        self.ui = ui = ui_SendMailForm.Ui_SendMailForm()
-        ui.setupUi(self)
-        self.connect(ui.buttonBox, Qt.SIGNAL("accepted()"), self.accept)
-        self.connect(ui.buttonBox, Qt.SIGNAL("rejected()"), self.reject)
+        self.loadUi(filename="SendMailForm.ui")
+        self.connect(self.ui.buttonBox, Qt.SIGNAL("accepted()"), self.accept)
+        self.connect(self.ui.buttonBox, Qt.SIGNAL("rejected()"), self.reject)
         self.ui.editMessage.setFont(Qt.QFont("Monospace"))
 
     def setFrom(self, efrom):
diff --git a/lib/taurus/qt/qtgui/panel/report/ui/ui_SendMailForm.py b/lib/taurus/qt/qtgui/panel/report/ui/ui_SendMailForm.py
deleted file mode 100644
index 42ddce5..0000000
--- a/lib/taurus/qt/qtgui/panel/report/ui/ui_SendMailForm.py
+++ /dev/null
@@ -1,65 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'SendMailForm.ui'
-#
-# Created: Wed May 23 10:10:22 2012
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_SendMailForm(object):
-    def setupUi(self, SendMailForm):
-        SendMailForm.setObjectName("SendMailForm")
-        SendMailForm.resize(400, 300)
-        self.mainLayout = QtGui.QGridLayout(SendMailForm)
-        self.mainLayout.setObjectName("mainLayout")
-        self.labelFrom = QtGui.QLabel(SendMailForm)
-        self.labelFrom.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
-        self.labelFrom.setObjectName("labelFrom")
-        self.mainLayout.addWidget(self.labelFrom, 0, 0, 1, 1)
-        self.editFrom = QtGui.QLineEdit(SendMailForm)
-        self.editFrom.setObjectName("editFrom")
-        self.mainLayout.addWidget(self.editFrom, 0, 1, 1, 1)
-        self.labelTo = QtGui.QLabel(SendMailForm)
-        self.labelTo.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
-        self.labelTo.setObjectName("labelTo")
-        self.mainLayout.addWidget(self.labelTo, 1, 0, 1, 1)
-        self.editTo = QtGui.QLineEdit(SendMailForm)
-        self.editTo.setObjectName("editTo")
-        self.mainLayout.addWidget(self.editTo, 1, 1, 1, 1)
-        self.labelSubject = QtGui.QLabel(SendMailForm)
-        self.labelSubject.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
-        self.labelSubject.setObjectName("labelSubject")
-        self.mainLayout.addWidget(self.labelSubject, 2, 0, 1, 1)
-        self.editSubject = QtGui.QLineEdit(SendMailForm)
-        self.editSubject.setObjectName("editSubject")
-        self.mainLayout.addWidget(self.editSubject, 2, 1, 1, 1)
-        self.editMessage = QtGui.QPlainTextEdit(SendMailForm)
-        self.editMessage.setObjectName("editMessage")
-        self.mainLayout.addWidget(self.editMessage, 3, 0, 1, 2)
-        self.buttonBox = QtGui.QDialogButtonBox(SendMailForm)
-        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
-        self.buttonBox.setObjectName("buttonBox")
-        self.mainLayout.addWidget(self.buttonBox, 4, 0, 1, 2)
-
-        self.retranslateUi(SendMailForm)
-        QtCore.QMetaObject.connectSlotsByName(SendMailForm)
-
-    def retranslateUi(self, SendMailForm):
-        SendMailForm.setWindowTitle(QtGui.QApplication.translate("SendMailForm", "Form", None, QtGui.QApplication.UnicodeUTF8))
-        self.labelFrom.setText(QtGui.QApplication.translate("SendMailForm", "From:", None, QtGui.QApplication.UnicodeUTF8))
-        self.labelTo.setText(QtGui.QApplication.translate("SendMailForm", "To:", None, QtGui.QApplication.UnicodeUTF8))
-        self.labelSubject.setText(QtGui.QApplication.translate("SendMailForm", "Subject:", None, QtGui.QApplication.UnicodeUTF8))
-
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    SendMailForm = QtGui.QWidget()
-    ui = Ui_SendMailForm()
-    ui.setupUi(SendMailForm)
-    SendMailForm.show()
-    sys.exit(app.exec_())
-
diff --git a/lib/taurus/qt/qtgui/panel/taurusattributechooser.py b/lib/taurus/qt/qtgui/panel/taurusattributechooser.py
index 96e67f8..f3cd813 100644
--- a/lib/taurus/qt/qtgui/panel/taurusattributechooser.py
+++ b/lib/taurus/qt/qtgui/panel/taurusattributechooser.py
@@ -31,13 +31,14 @@ __all__ = ["TaurusAttributeChooser"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 from taurus.qt.qtgui.base import TaurusBaseWidget
 from taurus.core.util.containers import CaselessList
+from taurus.qt.qtgui.util.ui import UILoadable
 
-from .ui.ui_AttributeChooser import *
 
+ at UILoadable(with_ui='ui')
 class TaurusAttributeChooser(Qt.QWidget, TaurusBaseWidget):
     
     __pyqtSignals__ = ("modelChanged(const QString &)",) ##
@@ -48,8 +49,7 @@ class TaurusAttributeChooser(Qt.QWidget, TaurusBaseWidget):
         self.call__init__wo_kw(Qt.QWidget, parent)
         self.call__init__(TaurusBaseWidget, str(self.objectName()))
         ##
-        self.ui = Ui_AttrCh()
-        self.ui.setupUi(self)
+        self.loadUi()
         #Create global variables
         self.dev_name = ""
         self.selectedItems = CaselessList([])
diff --git a/lib/taurus/qt/qtgui/panel/taurusconfigbrowser.py b/lib/taurus/qt/qtgui/panel/taurusconfigbrowser.py
index d0bd968..d99fcbd 100644
--- a/lib/taurus/qt/qtgui/panel/taurusconfigbrowser.py
+++ b/lib/taurus/qt/qtgui/panel/taurusconfigbrowser.py
@@ -33,7 +33,7 @@ __docformat__ = 'restructuredtext'
 
 raise DeprecationWarning("QConfigViewer is deprecated. Use QConfigEditor instead")
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 import cPickle as pickle
 import os
 from taurus.qt.qtcore.configuration import BaseConfigurableClass
diff --git a/lib/taurus/qt/qtgui/panel/taurusconfigeditor.py b/lib/taurus/qt/qtgui/panel/taurusconfigeditor.py
index 8905fcb..93b6377 100644
--- a/lib/taurus/qt/qtgui/panel/taurusconfigeditor.py
+++ b/lib/taurus/qt/qtgui/panel/taurusconfigeditor.py
@@ -31,7 +31,7 @@ __all__ = ["QConfigEditor"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 import cPickle as pickle
 import os
 import tempfile
diff --git a/lib/taurus/qt/qtgui/panel/taurusconfigurationpanel.py b/lib/taurus/qt/qtgui/panel/taurusconfigurationpanel.py
index c28eefe..5610e02 100644
--- a/lib/taurus/qt/qtgui/panel/taurusconfigurationpanel.py
+++ b/lib/taurus/qt/qtgui/panel/taurusconfigurationpanel.py
@@ -30,16 +30,18 @@ __all__ = ["TaurusConfigurationPanel"]
 __docformat__ = 'restructuredtext'
 
 import sys, traceback
-import ui.ui_TaurusConfigurationPanel
-from taurus.qt import Qt
+
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.input import TaurusConfigLineEdit
 from taurus.qt.qtgui.util import getWidgetsOfType
+from taurus.qt.qtgui.util.ui import UILoadable
+
 
+ at UILoadable(with_ui='_ui')
 class TaurusConfigurationPanel(Qt.QWidget):
     def __init__(self, parent=None, designMode=False):
         Qt.QWidget.__init__(self, parent)
-        self._ui = ui.ui_TaurusConfigurationPanel.Ui_TaurusConfigurationPanel()
-        self._ui.setupUi(self)
+        self.loadUi()
 
         Qt.QObject.connect(self._ui.pushButtonOk, Qt.SIGNAL("clicked()"), self._onOk)
         Qt.QObject.connect(self._ui.pushButtonApply, Qt.SIGNAL("clicked()"), self._onApply)
@@ -58,7 +60,7 @@ class TaurusConfigurationPanel(Qt.QWidget):
 	            w.writeValue()
 
     def _onCancel(self):
-       self._ui._Form.close()
+       self._ui.close()
 
     def _onRestore(self):
 	    widgets=getWidgetsOfType(self, TaurusConfigLineEdit)
@@ -95,4 +97,4 @@ def main():
     return a.exec_()
 
 if __name__ == "__main__":
-    sys.exit(main())
\ No newline at end of file
+    sys.exit(main())
diff --git a/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py b/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py
index 3a3e158..e2bb4ee 100644
--- a/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py
+++ b/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py
@@ -32,7 +32,7 @@ __all__ = ["TaurusDevicePanel","TaurusDevPanel"]
 __docformat__ = 'restructuredtext'
 
 import re,traceback
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 import taurus.qt.qtgui.resource
 from taurus.core.taurusbasetypes import TaurusSWDevState, TaurusElementType
@@ -44,6 +44,7 @@ from taurus.qt.qtgui.display import TaurusValueLabel as LABEL_CLASS #@todo: Taur
 from taurus.qt.qtgui.display import TaurusStateLed as LED_CLASS #@todo: TaurusStateLed is deprecated. Use TaurusLed instead
 from taurus.qt.qtgui.panel.taurusform import TaurusForm
 from taurus.qt.qtgui.panel.taurusform import TaurusCommandsForm
+from taurus.qt.qtgui.util.ui import UILoadable
 
 ###############################################################################
 # TaurusDevicePanel (from Vacca)
@@ -415,6 +416,7 @@ def filterNonExported(obj):
     return None
 
 
+ at UILoadable(with_ui='_ui')
 class TaurusDevPanel(TaurusMainWindow):
     '''
     TaurusDevPanel is a Taurus Application inspired in Jive and Atk Panel.
@@ -424,10 +426,7 @@ class TaurusDevPanel(TaurusMainWindow):
     '''
     def __init__(self, parent=None, designMode = False):
         TaurusMainWindow.__init__(self, parent, designMode=designMode)
-        
-        import taurus.qt.qtgui.ui.ui_TaurusDevPanel
-        self._ui = taurus.qt.qtgui.ui.ui_TaurusDevPanel.Ui_TaurusDevPanel()
-        self._ui.setupUi(self)
+        self.loadUi()
         
         #setting up the device Tree. 
         #@todo: This should be done in the ui file when the TaurusDatabaseTree Designer plugin is available
@@ -472,7 +471,7 @@ class TaurusDevPanel(TaurusMainWindow):
         self.showAttrAction = self.viewMenu.addAction(self._ui.attrDW.toggleViewAction())
         self.showCommandsAction = self.viewMenu.addAction(self._ui.commandsDW.toggleViewAction())
         self.showTrendAction = self.viewMenu.addAction(self._ui.trendDW.toggleViewAction())
-        
+
     def setTangoHost(self, host):
         '''extended from :class:setTangoHost'''
         TaurusMainWindow.setTangoHost(self, host)
@@ -604,4 +603,4 @@ def TaurusPanelMain():
 ###############################################################################
     
 if __name__ == "__main__":
-    TaurusDevicePanelMain() 
\ No newline at end of file
+    TaurusDevicePanelMain() 
diff --git a/lib/taurus/qt/qtgui/panel/taurusfilterpanel.py b/lib/taurus/qt/qtgui/panel/taurusfilterpanel.py
index 9fcc877..b4c77e3 100644
--- a/lib/taurus/qt/qtgui/panel/taurusfilterpanel.py
+++ b/lib/taurus/qt/qtgui/panel/taurusfilterpanel.py
@@ -27,9 +27,10 @@
 
 __docformat__ = 'restructuredtext'
 
+import os
 import re
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 import taurus.core
 import taurus.core.util
@@ -401,8 +402,6 @@ class TaurusFilterPanelOld2(Qt.QWidget, taurus.qt.qtgui.base.TaurusBaseWidget):
                             taurus.qt.qtgui.base.TaurusBaseWidget.resetModel)
 
 
-import ui_FilterView
-
 class _MessageWidget(Qt.QWidget):
 
     def __init__(self, parent=None, pixmap=None):
@@ -420,6 +419,10 @@ class _MessageWidget(Qt.QWidget):
     def setText(self, text):
         self._label.setText(text)
 
+
+from taurus.external.qt.uic import loadUi
+
+
 class TaurusFilterPanel(Qt.QWidget, taurus.qt.qtgui.base.TaurusBaseWidget):
     
     _Items = "server", "serverName", "serverInstance", \
@@ -435,13 +438,14 @@ class TaurusFilterPanel(Qt.QWidget, taurus.qt.qtgui.base.TaurusBaseWidget):
     def init(self):
         l = Qt.QVBoxLayout()
         self.setLayout(l)
-
+        
         panel = self._mainPanel = Qt.QWidget()
         l.addWidget(panel, 1)
-        form = self.uiForm = ui_FilterView.Ui_FilterForm()
-        form.setupUi(panel)
+        this_dir = os.path.dirname(os.path.abspath(__file__))
+        ui_filename = os.path.join(this_dir, 'ui', 'TaurusFilterPanel.ui')
+        self.ui = ui = loadUi(ui_filename, baseinstance=panel)
         
-        comboBox = form.filterTypeCombo
+        comboBox = ui.filterTypeCombo
         comboBox.addItem(getElementTypeIcon(ElemType.Attribute), "Attribute", ElemType.Attribute)
         comboBox.addItem(getElementTypeIcon(ElemType.Device), "Device", ElemType.Device)
         comboBox.addItem(getElementTypeIcon(ElemType.DeviceClass), "Device type", ElemType.DeviceClass)
@@ -449,9 +453,9 @@ class TaurusFilterPanel(Qt.QWidget, taurus.qt.qtgui.base.TaurusBaseWidget):
 
         clickedSig = Qt.SIGNAL("clicked()")
         idxChangedSig = Qt.SIGNAL("currentIndexChanged(int)")
-        Qt.QObject.connect(form.serverNameCombo, idxChangedSig, self._updateServerInstanceCombo)
-        Qt.QObject.connect(form.deviceDomainCombo, idxChangedSig, self._updateDeviceFamilyCombo)
-        Qt.QObject.connect(form.deviceFamilyCombo, idxChangedSig, self._updateDeviceMemberCombo)
+        Qt.QObject.connect(ui.serverNameCombo, idxChangedSig, self._updateServerInstanceCombo)
+        Qt.QObject.connect(ui.deviceDomainCombo, idxChangedSig, self._updateDeviceFamilyCombo)
+        Qt.QObject.connect(ui.deviceFamilyCombo, idxChangedSig, self._updateDeviceMemberCombo)
 
         class clearSelection(object):
             def __init__(self, cb):
@@ -474,13 +478,13 @@ class TaurusFilterPanel(Qt.QWidget, taurus.qt.qtgui.base.TaurusBaseWidget):
     
     def combos(self):
         if not hasattr(self, "_combos"):
-            f = self.uiForm
+            f = self.ui
             self._combos = [ getattr(f, name + "Combo") for name in self._Items ]
         return self._combos
 
     def clearButtons(self):
         if not hasattr(self, "_clearButtons"):
-            f = self.uiForm
+            f = self.ui
             self._clearButtons = [ getattr(f, name + "ClearButton") for name in self._Items ]
         return self._clearButtons
     
@@ -490,7 +494,7 @@ class TaurusFilterPanel(Qt.QWidget, taurus.qt.qtgui.base.TaurusBaseWidget):
         return db.cache()
 
     def _updateStatusBar(self, index=None):
-        form = self.uiForm
+        form = self.ui
         server = str(form.serverCombo.currentText())
         serverName = str(form.serverNameCombo.currentText())
         serverInstance = str(form.serverInstanceCombo.currentText())
@@ -519,7 +523,7 @@ class TaurusFilterPanel(Qt.QWidget, taurus.qt.qtgui.base.TaurusBaseWidget):
         
         
     def _updateServerCombo(self, index=None):
-        combo = self.uiForm.serverCombo
+        combo = self.ui.serverCombo
         combo.clear()
         db_cache = self._db_cache()
         if db_cache is None: return
@@ -531,7 +535,7 @@ class TaurusFilterPanel(Qt.QWidget, taurus.qt.qtgui.base.TaurusBaseWidget):
         combo.setCurrentIndex(-1)
 
     def _updateServerNameCombo(self, index=None):
-        combo = self.uiForm.serverNameCombo
+        combo = self.ui.serverNameCombo
         combo.clear()
         db_cache = self._db_cache()
         if db_cache is None: return
@@ -548,7 +552,7 @@ class TaurusFilterPanel(Qt.QWidget, taurus.qt.qtgui.base.TaurusBaseWidget):
         combo.setCurrentIndex(-1)
 
     def _updateServerInstanceCombo(self, index=None):
-        combo = self.uiForm.serverInstanceCombo
+        combo = self.ui.serverInstanceCombo
         combo.clear()
         db_cache = self._db_cache()
         if db_cache is None: return
@@ -566,7 +570,7 @@ class TaurusFilterPanel(Qt.QWidget, taurus.qt.qtgui.base.TaurusBaseWidget):
         combo.setCurrentIndex(-1)
         
     def _updateDeviceTypeCombo(self, index=None):
-        combo = self.uiForm.deviceTypeCombo
+        combo = self.ui.deviceTypeCombo
         combo.clear()
         db_cache = self._db_cache()
         if db_cache is None: return
@@ -578,7 +582,7 @@ class TaurusFilterPanel(Qt.QWidget, taurus.qt.qtgui.base.TaurusBaseWidget):
         combo.setCurrentIndex(-1)
 
     def _updateDeviceNameCombo(self, index=None):
-        combo = self.uiForm.deviceNameCombo
+        combo = self.ui.deviceNameCombo
         combo.clear()
         db_cache = self._db_cache()
         if db_cache is None: return
@@ -590,7 +594,7 @@ class TaurusFilterPanel(Qt.QWidget, taurus.qt.qtgui.base.TaurusBaseWidget):
         combo.setCurrentIndex(-1)
 
     def _updateDeviceDomainCombo(self, index=None):
-        combo = self.uiForm.deviceDomainCombo
+        combo = self.ui.deviceDomainCombo
         combo.clear()
         db_cache = self._db_cache()
         if db_cache is None: return
@@ -602,12 +606,12 @@ class TaurusFilterPanel(Qt.QWidget, taurus.qt.qtgui.base.TaurusBaseWidget):
         combo.setCurrentIndex(-1)
 
     def _updateDeviceFamilyCombo(self, index=None):
-        combo = self.uiForm.deviceFamilyCombo
+        combo = self.ui.deviceFamilyCombo
         combo.clear()
         db_cache = self._db_cache()
         if db_cache is None: return
         
-        deviceDomain = str(self.uiForm.deviceDomainCombo.currentText())
+        deviceDomain = str(self.ui.deviceDomainCombo.currentText())
         if deviceDomain == "": return
         families = db_cache.getDeviceFamilyNames(deviceDomain)
         families.sort()
@@ -617,14 +621,14 @@ class TaurusFilterPanel(Qt.QWidget, taurus.qt.qtgui.base.TaurusBaseWidget):
         combo.setCurrentIndex(-1)
 
     def _updateDeviceMemberCombo(self, index=None):
-        combo = self.uiForm.deviceMemberCombo
+        combo = self.ui.deviceMemberCombo
         combo.clear()
         db_cache = self._db_cache()
         if db_cache is None: return
 
-        deviceDomain = str(self.uiForm.deviceDomainCombo.currentText())
+        deviceDomain = str(self.ui.deviceDomainCombo.currentText())
         if deviceDomain == "": return
-        deviceFamily = str(self.uiForm.deviceFamilyCombo.currentText())
+        deviceFamily = str(self.ui.deviceFamilyCombo.currentText())
         if deviceFamily == "": return
         members = db_cache.getDeviceMemberNames(deviceDomain, deviceFamily)
         members.sort()
@@ -634,7 +638,7 @@ class TaurusFilterPanel(Qt.QWidget, taurus.qt.qtgui.base.TaurusBaseWidget):
         combo.setCurrentIndex(-1)
         
     def _updateAttributeCombo(self, index=None):
-        combo = self.uiForm.attributeCombo
+        combo = self.ui.attributeCombo
         combo.clear()
         db_cache = self._db_cache()
         if db_cache is None: return
@@ -663,7 +667,7 @@ class TaurusFilterPanel(Qt.QWidget, taurus.qt.qtgui.base.TaurusBaseWidget):
         #model = self._deviceEdit.model()
         #if model is None: return
         #model.setDataSource(db)
-        self.uiForm.deviceNameCombo.clear()
+        self.ui.deviceNameCombo.clear()
         self._fillItems()
         
     #: This property holds the unique URI string representing the model name 
diff --git a/lib/taurus/qt/qtgui/panel/taurusform.py b/lib/taurus/qt/qtgui/panel/taurusform.py
index 9fac118..1b4379d 100644
--- a/lib/taurus/qt/qtgui/panel/taurusform.py
+++ b/lib/taurus/qt/qtgui/panel/taurusform.py
@@ -31,7 +31,7 @@ __docformat__ = 'restructuredtext'
 
 from datetime import datetime
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 import PyTango
 
 import taurus.core
@@ -112,7 +112,6 @@ class TaurusForm(TaurusWidget):
         
         self._connectButtons()
         
-        
         #Actions (they automatically populate the context menu)
         self.setContextMenuPolicy(Qt.Qt.ActionsContextMenu)
         
@@ -130,11 +129,20 @@ class TaurusForm(TaurusWidget):
         self.addAction(self.changeLabelsAction)
         self.connect(self.changeLabelsAction, Qt.SIGNAL("triggered()"), self.onChangeLabelsAction)
         
+        self.compactModeAction = Qt.QAction('Compact mode (all items)', self)
+        self.compactModeAction.setCheckable(True)
+        self.addAction(self.compactModeAction)
+        self.connect(self.compactModeAction, Qt.SIGNAL("triggered(bool)"), self.setCompact)
+        
         self.resetModifiableByUser()
         self.setSupportedMimeTypes([TAURUS_MODEL_LIST_MIME_TYPE, TAURUS_DEV_MIME_TYPE, TAURUS_ATTR_MIME_TYPE, TAURUS_MODEL_MIME_TYPE, 'text/plain'])
 
+        
+        self.resetCompact()
+        
         #properties
         self.registerConfigProperty(self.isWithButtons, self.setWithButtons, 'withButtons')
+        self.registerConfigProperty(self.isCompact, self.setCompact, 'compact')
 
     def __getitem__(self, key):
         '''provides a list-like interface: items of the form can be accessed using slice notation'''
@@ -337,6 +345,19 @@ class TaurusForm(TaurusWidget):
         
     def resetWithButtons(self):
         self.setWithButtons(True)
+        
+    def setCompact(self, compact):
+        self._compact = compact
+        for item in self.getItems():
+            item.setCompact(compact)
+        self.compactModeAction.setChecked(compact)
+
+    def isCompact(self):
+        return self._compact
+    
+    def resetCompact(self):
+        from taurus import tauruscustomsettings
+        self.setCompact(getattr(tauruscustomsettings,'T_FORM_COMPACT',{}))
     
     def dropEvent(self, event):
         '''reimplemented to support dropping of modelnames in forms'''
@@ -398,7 +419,9 @@ class TaurusForm(TaurusWidget):
             klass, args, kwargs = self.getFormWidget(model=model)
             widget = klass(frame,*args,**kwargs)
             widget.setMinimumHeight(20)  #@todo UGLY... See if this can be done in other ways... (this causes trouble with widget that need more vertical space , like PoolMotorTV)
-            try: 
+
+            try:
+                widget.setCompact(self.isCompact())
                 widget.setModel(model)
                 widget.setParent(frame)
             except: 
@@ -489,6 +512,8 @@ class TaurusForm(TaurusWidget):
     modifiableByUser = Qt.pyqtProperty("bool", TaurusWidget.isModifiableByUser, 
                                                setModifiableByUser,
                                                TaurusWidget.resetModifiableByUser)
+    
+    compact = Qt.pyqtProperty("bool", isCompact, setCompact, resetCompact)
       
     
 
diff --git a/lib/taurus/qt/qtgui/panel/taurusinputpanel.py b/lib/taurus/qt/qtgui/panel/taurusinputpanel.py
index bda0c2a..318b5eb 100644
--- a/lib/taurus/qt/qtgui/panel/taurusinputpanel.py
+++ b/lib/taurus/qt/qtgui/panel/taurusinputpanel.py
@@ -32,10 +32,11 @@ __docformat__ = 'restructuredtext'
 import sys
 import collections
 
-from taurus.qt import Qt
-import ui.ui_TaurusInputPanel
+from taurus.external.qt import Qt
+from taurus.qt.qtgui.util.ui import UILoadable
 
 
+ at UILoadable(with_ui='_ui')
 class TaurusInputPanel(Qt.QWidget):
     """A panel design to get an input from the user.
     
@@ -96,9 +97,8 @@ class TaurusInputPanel(Qt.QWidget):
     def __init__(self, input_data, parent=None):
         Qt.QWidget.__init__(self, parent)
         self._input_data = input_data
-        self._ui = _ui = ui.ui_TaurusInputPanel.Ui_TaurusInputPanel()
-        _ui.setupUi(self)
-        self.fill_main_panel(_ui.inputPanel, input_data)
+        self.loadUi()
+        self.fill_main_panel(self._ui._inputPanel, input_data)
 
     def fill_main_panel(self, panel, input_data):
         layout = Qt.QVBoxLayout()
@@ -339,14 +339,14 @@ class TaurusInputPanel(Qt.QWidget):
         return self._ui.inputWidget.checkState() == Qt.Qt.Checked
     
     def inputPanel(self):
-        return self._ui.inputPanel
+        return self._ui._inputPanel
 
     def buttonBox(self):
         """Returns the button box from this panel
 
         :return: the button box from this panel
         :rtype: PyQt4.Qt.QDialogButtonBox"""
-        return self._ui.buttonBox
+        return self._ui._buttonBox
 
     def addButton(self, button, role=Qt.QDialogButtonBox.ActionRole):
         """Adds the given button with the given to the button box
@@ -355,7 +355,7 @@ class TaurusInputPanel(Qt.QWidget):
         :type button: PyQt4.QtGui.QPushButton
         :param role: button role
         :type role: PyQt4.Qt.QDialogButtonBox.ButtonRole"""
-        self._ui.buttonBox.addButton(button, role)
+        self._ui._buttonBox.addButton(button, role)
 
     def setIconPixmap(self, pixmap):
         """Sets the icon to the dialog
diff --git a/lib/taurus/qt/qtgui/panel/taurusmessagepanel.py b/lib/taurus/qt/qtgui/panel/taurusmessagepanel.py
index 4dcbfb3..807d65c 100644
--- a/lib/taurus/qt/qtgui/panel/taurusmessagepanel.py
+++ b/lib/taurus/qt/qtgui/panel/taurusmessagepanel.py
@@ -47,9 +47,9 @@ except:
 import PyTango
 
 from taurus.core.util.report import TaurusMessageReportHandler
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.resource import getThemePixmap
-import ui.ui_TaurusMessagePanel
+from taurus.qt.qtgui.util.ui import UILoadable
 
 
 class TaurusMessageErrorHandler(object):
@@ -227,6 +227,7 @@ An error occured in '{appName} {appVersion}' on {time}
 --------------------------------------------------------------------------------
 """
 
+ at UILoadable(with_ui='_ui')
 class TaurusMessagePanel(Qt.QWidget):
     """A panel intended to display a taurus error.
     Example::
@@ -255,16 +256,18 @@ class TaurusMessagePanel(Qt.QWidget):
 
     def __init__(self, err_type=None, err_value=None, err_traceback=None, parent=None, designMode=False):
         Qt.QWidget.__init__(self, parent)
+        self.loadUi()
         self._exc_info = err_type, err_value, err_traceback
-        self._ui = _ui = ui.ui_TaurusMessagePanel.Ui_TaurusMessagePanel()
-        _ui.setupUi(self)
-        _ui.detailsWidget.setVisible(False)
-        _ui.checkBox.setVisible(False)
-        _ui.checkBox.setCheckState(Qt.Qt.Unchecked)
+
+        self._ui._detailsWidget.setVisible(False)
+        self._ui._checkBox.setVisible(False)
+        self._ui._checkBox.setCheckState(Qt.Qt.Unchecked)
         self._initReportCombo()
 
-        Qt.QObject.connect(_ui.showDetailsButton, Qt.SIGNAL("toggled(bool)"), self._onShowDetails)
-        Qt.QObject.connect(_ui.reportComboBox, Qt.SIGNAL("activated(int)"), self._onReportTriggered)
+        Qt.QObject.connect(self._ui._showDetailsButton,
+                           Qt.SIGNAL("toggled(bool)"), self._onShowDetails)
+        Qt.QObject.connect(self._ui._reportComboBox,
+                           Qt.SIGNAL("activated(int)"), self._onReportTriggered)
 
         pixmap = getThemePixmap("emblem-important")
         self.setIconPixmap(pixmap)
@@ -296,24 +299,24 @@ class TaurusMessagePanel(Qt.QWidget):
         report.report(txt)
 
     def _onShowDetails(self, show):
-        self._ui.detailsWidget.setVisible(show)
+        self._ui._detailsWidget.setVisible(show)
         if show:
             text = "Hide details..."
         else:
             text = "Show details..."
-        self._ui.showDetailsButton.setText(text)
+        self._ui._showDetailsButton.setText(text)
         self.adjustSize()
         self.emit(Qt.SIGNAL("toggledDetails(bool)"), show)
 
     def reportComboBox(self):
-        return self._ui.reportComboBox
+        return self._ui._reportComboBox
 
     def checkBox(self):
         """Returns the check box from this panel
 
         :return: the check box from this panel
         :rtype: PyQt4.Qt.QCheckBox"""
-        return self._ui.checkBox
+        return self._ui._checkBox
 
     def checkBoxState(self):
         """Returns the check box state
@@ -355,7 +358,7 @@ class TaurusMessagePanel(Qt.QWidget):
 
         :return: the button box from this panel
         :rtype: PyQt4.Qt.QDialogButtonBox"""
-        return self._ui.buttonBox
+        return self._ui._buttonBox
 
     def addButton(self, button, role=Qt.QDialogButtonBox.ActionRole):
         """Adds the given button with the given to the button box
@@ -364,84 +367,84 @@ class TaurusMessagePanel(Qt.QWidget):
         :type button: PyQt4.QtGui.QPushButton
         :param role: button role
         :type role: PyQt4.Qt.QDialogButtonBox.ButtonRole"""
-        self._ui.buttonBox.addButton(button, role)
+        self._ui._buttonBox.addButton(button, role)
 
     def setIconPixmap(self, pixmap):
         """Sets the icon to the dialog
 
         :param pixmap: the icon pixmap
         :type pixmap: PyQt4.Qt.QPixmap"""
-        self._ui.iconLabel.setPixmap(pixmap)
+        self._ui._iconLabel.setPixmap(pixmap)
 
     def setText(self, text):
         """Sets the text of this panel
 
         :param text: the new text
         :type text: str"""
-        self._ui.textLabel.setText(text)
+        self._ui._textLabel.setText(text)
 
     def getText(self):
         """Returns the current text of this panel
 
         :return: the text for this panel
         :rtype: str"""
-        return self._ui.textLabel.text()
+        return self._ui._textLabel.text()
 
     def setDetailedText(self, text):
         """Sets the detailed text of the dialog
 
         :param text: the new text
         :type text: str"""
-        self._ui.detailsTextEdit.setPlainText(text)
+        self._ui._detailsTextEdit.setPlainText(text)
 
     def setDetailedHtml(self, html):
         """Sets the detailed HTML of the dialog
 
         :param html: the new HTML text
         :type html: str"""
-        self._ui.detailsTextEdit.setHtml(html)
+        self._ui._detailsTextEdit.setHtml(html)
 
     def getDetailedText(self):
         """Returns the current detailed text of this panel
 
         :return: the detailed text for this panel
         :rtype: str"""
-        return self._ui.detailsTextEdit.toPlainText()
+        return self._ui._detailsTextEdit.toPlainText()
 
     def getDetailedHtml(self):
         """Returns the current detailed HTML of this panel
 
         :return: the detailed HTML for this panel
         :rtype: str"""
-        return self._ui.detailsTextEdit.toHtml()
+        return self._ui._detailsTextEdit.toHtml()
 
     def setOriginText(self, text):
         """Sets the origin text of the dialog
 
         :param text: the new text
         :type text: str"""
-        self._ui.originTextEdit.setPlainText(text)
+        self._ui._originTextEdit.setPlainText(text)
 
     def setOriginHtml(self, html):
         """Sets the origin HTML of the dialog
 
         :param html: the new HTML text
         :type html: str"""
-        self._ui.originTextEdit.setHtml(html)
+        self._ui._originTextEdit.setHtml(html)
 
     def getOriginText(self):
         """Returns the current origin text of this panel
 
         :return: the origin text for this panel
         :rtype: str"""
-        return self._ui.originTextEdit.toPlainText()
+        return self._ui._originTextEdit.toPlainText()
 
     def getOriginHtml(self):
         """Returns the current origin HTML of this panel
 
         :return: the origin HTML for this panel
         :rtype: str"""
-        return self._ui.originTextEdit.toHtml()
+        return self._ui._originTextEdit.toHtml()
 
     def setError(self, err_type=None, err_value=None, err_traceback=None):
         """Sets the exception object.
diff --git a/lib/taurus/qt/qtgui/panel/taurusmodelchooser.py b/lib/taurus/qt/qtgui/panel/taurusmodelchooser.py
index dc6d898..67ef89b 100644
--- a/lib/taurus/qt/qtgui/panel/taurusmodelchooser.py
+++ b/lib/taurus/qt/qtgui/panel/taurusmodelchooser.py
@@ -29,7 +29,7 @@ AttributeChooser.py: widget for choosing (a list of) attributes from a tango DB
 
 
 import sys
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 import taurus.core
 from taurus.qt.qtgui.container import TaurusWidget
 from taurus.qt.qtgui.tree import TaurusDbTreeWidget
diff --git a/lib/taurus/qt/qtgui/panel/taurusmodellist.py b/lib/taurus/qt/qtgui/panel/taurusmodellist.py
index 9780691..0664fa1 100644
--- a/lib/taurus/qt/qtgui/panel/taurusmodellist.py
+++ b/lib/taurus/qt/qtgui/panel/taurusmodellist.py
@@ -31,7 +31,7 @@ __all__=['TaurusModelModel','TaurusModelItem', 'TaurusModelList']
 
 import copy
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 import taurus
 from taurus.core.taurusbasetypes import TaurusElementType
 from taurus.core.taurusexception import TaurusException
diff --git a/lib/taurus/qt/qtgui/panel/taurusvalue.py b/lib/taurus/qt/qtgui/panel/taurusvalue.py
index fd424d0..09510d0 100644
--- a/lib/taurus/qt/qtgui/panel/taurusvalue.py
+++ b/lib/taurus/qt/qtgui/panel/taurusvalue.py
@@ -34,7 +34,7 @@ __all__ = ["TaurusValue", "TaurusValuesFrame", "DefaultTaurusValueCheckBox", "De
 __docformat__ = 'restructuredtext'
 
 import weakref
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 import PyTango
 import taurus.core
 
@@ -49,6 +49,7 @@ from taurus.qt.qtgui.input import TaurusValueSpinBox, TaurusValueCheckBox
 from taurus.qt.qtgui.input import TaurusWheelEdit, TaurusValueLineEdit
 from taurus.qt.qtgui.button import TaurusLauncherButton
 from taurus.qt.qtgui.util import TaurusWidgetFactory, ConfigurationMenu
+from taurus.qt.qtgui.compact import TaurusReadWriteSwitcher
 
 
 class DefaultTaurusValueCheckBox(TaurusValueCheckBox):
@@ -108,6 +109,11 @@ class DefaultLabelWidget(TaurusLabel):
             menu.addAction("Change Read Widget",self.taurusValueBuddy().onChangeReadWidget)
             cw_action = menu.addAction("Change Write Widget",self.taurusValueBuddy().onChangeWriteWidget)
             cw_action.setEnabled(not self.taurusValueBuddy().isReadOnly()) #disable the action if the taurusValue is readonly
+            cm_action = menu.addAction("Compact")
+            cm_action.setCheckable(True)
+            cm_action.setChecked(self.taurusValueBuddy().isCompact())
+            self.connect(cm_action, Qt.SIGNAL("toggled(bool)"), self.taurusValueBuddy().setCompact)
+            
             
         menu.exec_(event.globalPos())
         event.accept()
@@ -232,6 +238,7 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         breaks some conventions on the way it manages layouts of its parent model.
     '''
     __pyqtSignals__ = ("modelChanged(const QString &)",)
+    _compact = False
     
     def __init__(self, parent = None, designMode = False, customWidgetMap=None):
         name = self.__class__.__name__
@@ -281,7 +288,8 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         if parent is not None:
             self.setParent(parent)
             
-        self.registerConfigProperty(self.getLabelConfig, self.setLabelConfig, 'labeConfig')
+        self.registerConfigProperty(self.getLabelConfig, self.setLabelConfig, 'labelConfig')
+        self.registerConfigProperty(self.isCompact, self.setCompact, 'compact')
             
     def setVisible(self, visible):
         for w in (self.labelWidget(), self.readWidget(), self.writeWidget(), self.unitsWidget(), self.customWidget(), self.extraWidget()):
@@ -582,41 +590,54 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         if classID is None or classID == 'None': return None
         if isinstance(classID, type): return classID
         elif str(classID) == 'Auto': return self.getDefaultLabelWidgetClass()
-        else: return TaurusWidgetFactory().getTaurusWidgetClass(classID)
+        else: return TaurusWidgetFactory().getWidgetClass(classID)
 
     def readWidgetClassFactory(self, classID):
         if self._customWidget is not None: return None
         if classID is None or classID == 'None': return None
-        if isinstance(classID, type): return classID
-        elif str(classID) == 'Auto': return self.getDefaultReadWidgetClass()
-        else: return TaurusWidgetFactory().getTaurusWidgetClass(classID)
-    
-    def writeWidgetClassFactory(self, classID):
+        
+        if isinstance(classID, type): ret = classID
+        elif str(classID) == 'Auto': ret = self.getDefaultReadWidgetClass()
+        else: ret = TaurusWidgetFactory().getWidgetClass(classID)
+        
+        if self._compact:
+            R = ret
+            W = self.writeWidgetClassFactory(self.writeWidgetClassID, ignoreCompact=True)
+            if W is None: 
+                return R
+            class Switcher(TaurusReadWriteSwitcher):
+                readWClass = R
+                writeWClass = W
+            return Switcher
+        return ret
+    
+    def writeWidgetClassFactory(self, classID, ignoreCompact=False):
         if self._customWidget is not None: return None
         if classID is None or classID == 'None': return None
+        if self._compact and not ignoreCompact: return None
         if isinstance(classID, type): return classID
         elif str(classID) == 'Auto': return self.getDefaultWriteWidgetClass()
-        else: return TaurusWidgetFactory().getTaurusWidgetClass(classID)
+        else: return TaurusWidgetFactory().getWidgetClass(classID)
         
     def unitsWidgetClassFactory(self, classID):
         if self._customWidget is not None: return None
         if classID is None or classID == 'None': return None
         if isinstance(classID, type): return classID
         elif str(classID) == 'Auto': return self.getDefaultUnitsWidgetClass()
-        else: return TaurusWidgetFactory().getTaurusWidgetClass(classID)
+        else: return TaurusWidgetFactory().getWidgetClass(classID)
         
     def customWidgetClassFactory(self, classID):
         if classID is None or classID == 'None': return None
         if isinstance(classID, type): return classID
         elif str(classID) == 'Auto': return self.getDefaultCustomWidgetClass()
-        else: return TaurusWidgetFactory().getTaurusWidgetClass(classID)
+        else: return TaurusWidgetFactory().getWidgetClass(classID)
         
     def extraWidgetClassFactory(self, classID):
         if self._customWidget is not None: return None
         if classID is None or classID == 'None': return None
         if isinstance(classID, type): return classID
         elif str(classID) == 'Auto': return self.getDefaultExtraWidgetClass()
-        else: return TaurusWidgetFactory().getTaurusWidgetClass(classID)
+        else: return TaurusWidgetFactory().getWidgetClass(classID)
         
     def updateLabelWidget(self):
         #get the class for the widget and replace it if necessary
@@ -863,6 +884,17 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
     def resetExtraWidgetClass(self):
         self.extraWidgetClassID = 'Auto'
         
+    def setCompact(self, compact):
+        if compact == self._compact:
+            return
+        self._compact = compact
+        if self.getModel():
+            self.updateReadWidget()
+            self.updateWriteWidget()
+
+    def isCompact(self):
+        return self._compact
+        
     def isReadOnly(self):
         if not self.getAllowWrite(): return True 
         modelObj = self.getModelObj()
diff --git a/lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py b/lib/taurus/qt/qtgui/panel/test/__init__.py
similarity index 98%
copy from lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py
copy to lib/taurus/qt/qtgui/panel/test/__init__.py
index 810fb34..d36d30e 100644
--- a/lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py
+++ b/lib/taurus/qt/qtgui/panel/test/__init__.py
@@ -3,21 +3,21 @@
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
diff --git a/lib/taurus/qt/qtgui/panel/test/test_taurusform.py b/lib/taurus/qt/qtgui/panel/test/test_taurusform.py
new file mode 100644
index 0000000..e20963c
--- /dev/null
+++ b/lib/taurus/qt/qtgui/panel/test/test_taurusform.py
@@ -0,0 +1,72 @@
+#!/usr/bin/env python
+#############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+##
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+##
+## Taurus 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.
+##
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+"""Unit tests for Taurus Forms"""
+
+from taurus.external import unittest
+from taurus.qt.qtgui.test import GenericWidgetTestCase
+from taurus.qt.qtgui.panel import TaurusForm, TaurusAttrForm
+
+
+class TaurusFormTest(GenericWidgetTestCase, unittest.TestCase):
+
+    '''
+    Generic tests for TaurusForm widget.
+
+    .. seealso: :class:`taurus.qt.qtgui.test.base.GenericWidgetTestCase`
+    '''
+    _klass = TaurusForm
+    modelnames = [['sys/tg_test/1'],
+                  ['sys/tg_test/1/wave'],
+                  [],
+                  '',
+                  ['eval://1'],
+                  None,
+                  ['sys/tg_test/1/%s' % a for a in (
+                   'short_scalar', 'double_array',
+                   'uchar_image_ro', 'string_spectrum',
+                   'no_value', 'throw_exception')],
+                  [''],
+                  'sys/tg_test/1,eval://1',
+                  'sys/tg_test/1/short_image eval://rand(16)',
+                  [None]
+                  ]
+
+
+class TaurusAttrFormTest(GenericWidgetTestCase, unittest.TestCase):
+
+    '''
+    Generic tests for TaurusAttrForm widget.
+
+    .. seealso: :class:`taurus.qt.qtgui.test.base.GenericWidgetTestCase`
+    '''
+    _klass = TaurusAttrForm
+    modelnames = ['sys/tg_test/1', None]
+
+
+
+# if __name__ == "__main__":
+#     unittest.main()
+#    suite = unittest.defaultTestLoader.loadTestsFromTestCase(TaurusFormTest)
+#    unittest.TextTestRunner(verbosity=2).run(suite)
diff --git a/lib/taurus/qt/qtgui/panel/test/test_taurusvalue.py b/lib/taurus/qt/qtgui/panel/test/test_taurusvalue.py
new file mode 100644
index 0000000..0c26855
--- /dev/null
+++ b/lib/taurus/qt/qtgui/panel/test/test_taurusvalue.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+## 
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+## 
+## Taurus 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.
+## 
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+"""Test for taurus.qt.qtgui.panel.taurusvalue"""
+
+from taurus.external import unittest
+from taurus.qt.qtgui.test import  BaseWidgetTestCase
+from taurus.qt.qtgui.panel import TaurusValue 
+
+class TestTaurusValue(BaseWidgetTestCase, unittest.TestCase):
+    '''Specific test for the TaurusValue widget'''    
+    _klass = TaurusValue
+
+    def setUp(self):
+        '''Do all what is done in BaseWidgetTestCase.setUp and also set a 
+        model and show the widget'''
+        
+        #Make sure the basics are taken care of (QApplication, etc)
+        BaseWidgetTestCase.setUp(self)
+        self._widget.setModel('eval://1')
+        self._widget.show()
+ 
+    def tearDown(self):
+        '''Set Model to None'''
+        self._widget.setModel(None)
+        unittest.TestCase.tearDown(self)
+ 
+    def test_bug126(self):
+        '''Verify that case is not lost when customizing a label (bug#126)'''
+        w = self._widget
+        label = 'MIXEDcase'
+        w.setLabelConfig(label)
+        self._app.processEvents() #required
+        shownLabel = str(w.labelWidget().text())
+        msg = 'Shown label ("%s") differs from set label ("%s")' % (shownLabel,
+                                                                    label)
+        self.assertEqual(label, shownLabel, msg)
+
+if __name__ == '__main__':
+    pass
diff --git a/lib/taurus/qt/qtgui/panel/ui/DataExportDlg.ui b/lib/taurus/qt/qtgui/panel/ui/QDataExportDialog.ui
similarity index 100%
rename from lib/taurus/qt/qtgui/panel/ui/DataExportDlg.ui
rename to lib/taurus/qt/qtgui/panel/ui/QDataExportDialog.ui
diff --git a/lib/taurus/qt/qtgui/panel/ui/DoubleListDlg.ui b/lib/taurus/qt/qtgui/panel/ui/QDoubleListDlg.ui
similarity index 100%
rename from lib/taurus/qt/qtgui/panel/ui/DoubleListDlg.ui
rename to lib/taurus/qt/qtgui/panel/ui/QDoubleListDlg.ui
diff --git a/lib/taurus/qt/qtgui/panel/ui/RawDataChooser.ui b/lib/taurus/qt/qtgui/panel/ui/QRawDataWidget.ui
similarity index 100%
rename from lib/taurus/qt/qtgui/panel/ui/RawDataChooser.ui
rename to lib/taurus/qt/qtgui/panel/ui/QRawDataWidget.ui
diff --git a/lib/taurus/qt/qtgui/panel/ui/AttributeChooser.ui b/lib/taurus/qt/qtgui/panel/ui/TaurusAttributeChooser.ui
similarity index 100%
rename from lib/taurus/qt/qtgui/panel/ui/AttributeChooser.ui
rename to lib/taurus/qt/qtgui/panel/ui/TaurusAttributeChooser.ui
diff --git a/lib/taurus/qt/qtgui/panel/ui/TaurusConfigurationPanel.ui b/lib/taurus/qt/qtgui/panel/ui/TaurusConfigurationPanel.ui
index 8cf6238..e10f8a4 100644
--- a/lib/taurus/qt/qtgui/panel/ui/TaurusConfigurationPanel.ui
+++ b/lib/taurus/qt/qtgui/panel/ui/TaurusConfigurationPanel.ui
@@ -150,28 +150,44 @@
    </item>
    <item row="11" column="0" colspan="4" >
     <layout class="QGridLayout" name="gridLayout_2" >
-     <item row="2" column="3" >
+     <item row="2" column="0" >
+      <widget class="QPushButton" name="pushButtonOk" >
+       <property name="enabled" >
+        <bool>true</bool>
+       </property>
+       <property name="sizePolicy" >
+        <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="text" >
+        <string>OK</string>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="1" >
       <widget class="QPushButton" name="pushButtonApply" >
        <property name="text" >
         <string>Apply</string>
        </property>
       </widget>
      </item>
-     <item row="2" column="5" >
+     <item row="2" column="2" >
       <widget class="QPushButton" name="pushButtonCancel" >
        <property name="text" >
         <string>Cancel</string>
        </property>
       </widget>
      </item>
-     <item row="2" column="6" >
+     <item row="2" column="3" >
       <widget class="QPushButton" name="pushButtonRestore" >
        <property name="text" >
         <string>Restore</string>
        </property>
       </widget>
      </item>
-     <item row="2" column="1" >
+     <item row="2" column="4" >
       <spacer name="horizontalSpacer" >
        <property name="orientation" >
         <enum>Qt::Horizontal</enum>
@@ -184,22 +200,6 @@
        </property>
       </spacer>
      </item>
-     <item row="2" column="2" >
-      <widget class="QPushButton" name="pushButtonOk" >
-       <property name="enabled" >
-        <bool>true</bool>
-       </property>
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="text" >
-        <string>OK</string>
-       </property>
-      </widget>
-     </item>
     </layout>
    </item>
    <item row="0" column="0" >
diff --git a/lib/taurus/qt/qtgui/ui/TaurusDevPanel.ui b/lib/taurus/qt/qtgui/panel/ui/TaurusDevPanel.ui
similarity index 91%
rename from lib/taurus/qt/qtgui/ui/TaurusDevPanel.ui
rename to lib/taurus/qt/qtgui/panel/ui/TaurusDevPanel.ui
index 1236fc1..f4eaf77 100644
--- a/lib/taurus/qt/qtgui/ui/TaurusDevPanel.ui
+++ b/lib/taurus/qt/qtgui/panel/ui/TaurusDevPanel.ui
@@ -1,6 +1,6 @@
 <ui version="4.0">
- <class>TauDevPanel</class>
- <widget class="QMainWindow" name="TauDevPanel">
+ <class>TaurusDevPanel</class>
+ <widget class="QMainWindow" name="TaurusDevPanel">
   <property name="geometry">
    <rect>
     <x>0</x>
@@ -29,7 +29,7 @@
    <widget class="QWidget" name="dockWidgetContents">
     <layout class="QVBoxLayout">
      <item>
-      <widget class="TaurusAttrForm" name="tauAttrForm">
+      <widget class="TaurusAttrForm" name="taurusAttrForm">
        <property name="useParentModel">
         <bool>true</bool>
        </property>
@@ -51,7 +51,7 @@
    <widget class="QWidget" name="dockWidgetContents_2">
     <layout class="QVBoxLayout">
      <item>
-      <widget class="TaurusCommandsForm" name="tauCommandsForm">
+      <widget class="TaurusCommandsForm" name="taurusCommandsForm">
        <property name="useParentModel">
         <bool>true</bool>
        </property>
@@ -70,7 +70,7 @@
    <widget class="QWidget" name="dockWidgetContents_3">
     <layout class="QVBoxLayout">
      <item>
-      <widget class="TaurusTrend" name="tauTrend"/>
+      <widget class="TaurusTrend" name="taurusTrend"/>
      </item>
     </layout>
    </widget>
diff --git a/lib/taurus/qt/qtgui/panel/FilterView.ui b/lib/taurus/qt/qtgui/panel/ui/TaurusFilterPanel.ui
similarity index 100%
rename from lib/taurus/qt/qtgui/panel/FilterView.ui
rename to lib/taurus/qt/qtgui/panel/ui/TaurusFilterPanel.ui
diff --git a/lib/taurus/qt/qtgui/panel/ui/TaurusInputPanel.ui b/lib/taurus/qt/qtgui/panel/ui/TaurusInputPanel.ui
index 82443dd..34ede80 100644
--- a/lib/taurus/qt/qtgui/panel/ui/TaurusInputPanel.ui
+++ b/lib/taurus/qt/qtgui/panel/ui/TaurusInputPanel.ui
@@ -34,7 +34,7 @@
        </spacer>
       </item>
       <item>
-       <widget class="QDialogButtonBox" name="buttonBox">
+       <widget class="QDialogButtonBox" name="_buttonBox">
         <property name="standardButtons">
          <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
         </property>
@@ -62,7 +62,7 @@
     </layout>
    </item>
    <item row="3" column="0" colspan="2">
-    <widget class="QWidget" name="inputPanel" native="true"/>
+    <widget class="QWidget" name="_inputPanel" native="true"/>
    </item>
   </layout>
  </widget>
diff --git a/lib/taurus/qt/qtgui/panel/ui/TaurusMessagePanel.ui b/lib/taurus/qt/qtgui/panel/ui/TaurusMessagePanel.ui
index 1f7b1eb..28ebbeb 100644
--- a/lib/taurus/qt/qtgui/panel/ui/TaurusMessagePanel.ui
+++ b/lib/taurus/qt/qtgui/panel/ui/TaurusMessagePanel.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>548</width>
-    <height>616</height>
+    <height>618</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -15,7 +15,7 @@
   </property>
   <layout class="QGridLayout" name="gridLayout">
    <item row="4" column="0" colspan="3">
-    <widget class="QWidget" name="detailsWidget" native="true">
+    <widget class="QWidget" name="_detailsWidget" native="true">
      <layout class="QVBoxLayout" name="verticalLayout">
       <property name="spacing">
        <number>2</number>
@@ -24,7 +24,7 @@
        <number>0</number>
       </property>
       <item>
-       <widget class="QTabWidget" name="detailsTabWidget">
+       <widget class="QTabWidget" name="_detailsTabWidget">
         <property name="minimumSize">
          <size>
           <width>512</width>
@@ -32,9 +32,9 @@
          </size>
         </property>
         <property name="currentIndex">
-         <number>0</number>
+         <number>1</number>
         </property>
-        <widget class="QWidget" name="tabDetails">
+        <widget class="QWidget" name="_tabDetails">
          <attribute name="title">
           <string>Details</string>
          </attribute>
@@ -43,7 +43,7 @@
            <number>2</number>
           </property>
           <item>
-           <widget class="QTextEdit" name="detailsTextEdit">
+           <widget class="QTextEdit" name="_detailsTextEdit">
             <property name="minimumSize">
              <size>
               <width>512</width>
@@ -57,7 +57,7 @@
           </item>
          </layout>
         </widget>
-        <widget class="QWidget" name="tabOrigin">
+        <widget class="QWidget" name="_tabOrigin">
          <attribute name="title">
           <string>Origin</string>
          </attribute>
@@ -66,7 +66,7 @@
            <number>2</number>
           </property>
           <item>
-           <widget class="QTextEdit" name="originTextEdit">
+           <widget class="QTextEdit" name="_originTextEdit">
             <property name="minimumSize">
              <size>
               <width>512</width>
@@ -86,13 +86,13 @@
     </widget>
    </item>
    <item row="3" column="0" colspan="3">
-    <widget class="QWidget" name="buttonPanelWidget" native="true">
+    <widget class="QWidget" name="_buttonPanelWidget" native="true">
      <layout class="QHBoxLayout" name="horizontalLayout" stretch="1,0,0,0">
       <property name="margin">
        <number>0</number>
       </property>
       <item>
-       <spacer name="horizontalSpacer">
+       <spacer name="_horizontalSpacer">
         <property name="orientation">
          <enum>Qt::Horizontal</enum>
         </property>
@@ -105,7 +105,7 @@
        </spacer>
       </item>
       <item>
-       <widget class="QPushButton" name="showDetailsButton">
+       <widget class="QPushButton" name="_showDetailsButton">
         <property name="text">
          <string>Show Details...</string>
         </property>
@@ -115,14 +115,14 @@
        </widget>
       </item>
       <item>
-       <widget class="QComboBox" name="reportComboBox">
+       <widget class="QComboBox" name="_reportComboBox">
         <property name="toolTip">
          <string>Report error message</string>
         </property>
        </widget>
       </item>
       <item>
-       <widget class="QDialogButtonBox" name="buttonBox">
+       <widget class="QDialogButtonBox" name="_buttonBox">
         <property name="standardButtons">
          <set>QDialogButtonBox::Ok</set>
         </property>
@@ -132,23 +132,23 @@
     </widget>
    </item>
    <item row="5" column="0">
-    <widget class="QCheckBox" name="checkBox">
+    <widget class="QCheckBox" name="_checkBox">
      <property name="text">
       <string>Don't show this message again</string>
      </property>
     </widget>
    </item>
    <item row="1" column="0" rowspan="2" colspan="3">
-    <layout class="QHBoxLayout" name="iconTextLayout" stretch="0,1">
+    <layout class="QHBoxLayout" name="_iconTextLayout" stretch="0,1">
      <item>
-      <widget class="QLabel" name="iconLabel">
+      <widget class="QLabel" name="_iconLabel">
        <property name="text">
         <string>iconLabel</string>
        </property>
       </widget>
      </item>
      <item>
-      <widget class="QLabel" name="textLabel">
+      <widget class="QLabel" name="_textLabel">
        <property name="text">
         <string>textLabel</string>
        </property>
diff --git a/lib/taurus/qt/qtgui/panel/ui/ui_AttributeChooser.py b/lib/taurus/qt/qtgui/panel/ui/ui_AttributeChooser.py
deleted file mode 100644
index f65210a..0000000
--- a/lib/taurus/qt/qtgui/panel/ui/ui_AttributeChooser.py
+++ /dev/null
@@ -1,163 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file '/home/cpascual/src/svn/taurus/widget/dialog/ui/AttributeChooser.ui'
-#
-# Created: Tue Feb  2 11:34:16 2010
-#      by: PyQt4 UI code generator 4.3.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_AttrCh(object):
-    def setupUi(self, AttrCh):
-        AttrCh.setObjectName("AttrCh")
-        AttrCh.resize(QtCore.QSize(QtCore.QRect(0,0,371,469).size()).expandedTo(AttrCh.minimumSizeHint()))
-        AttrCh.setMinimumSize(QtCore.QSize(0,0))
-
-        self.vboxlayout = QtGui.QVBoxLayout(AttrCh)
-        self.vboxlayout.setObjectName("vboxlayout")
-
-        self.hboxlayout = QtGui.QHBoxLayout()
-        self.hboxlayout.setObjectName("hboxlayout")
-
-        self.label_1 = QtGui.QLabel(AttrCh)
-        self.label_1.setMinimumSize(QtCore.QSize(54,20))
-        self.label_1.setObjectName("label_1")
-        self.hboxlayout.addWidget(self.label_1)
-
-        self.lineEdit = QtGui.QLineEdit(AttrCh)
-
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.lineEdit.sizePolicy().hasHeightForWidth())
-        self.lineEdit.setSizePolicy(sizePolicy)
-        self.lineEdit.setMinimumSize(QtCore.QSize(0,0))
-        self.lineEdit.setObjectName("lineEdit")
-        self.hboxlayout.addWidget(self.lineEdit)
-        self.vboxlayout.addLayout(self.hboxlayout)
-
-        self.hboxlayout1 = QtGui.QHBoxLayout()
-        self.hboxlayout1.setObjectName("hboxlayout1")
-
-        self.vboxlayout1 = QtGui.QVBoxLayout()
-        self.vboxlayout1.setObjectName("vboxlayout1")
-
-        self.label_2 = QtGui.QLabel(AttrCh)
-        self.label_2.setObjectName("label_2")
-        self.vboxlayout1.addWidget(self.label_2)
-
-        self.devList = QtGui.QListWidget(AttrCh)
-        self.devList.setMinimumSize(QtCore.QSize(0,0))
-        self.devList.setObjectName("devList")
-        self.vboxlayout1.addWidget(self.devList)
-        self.hboxlayout1.addLayout(self.vboxlayout1)
-
-        self.vboxlayout2 = QtGui.QVBoxLayout()
-        self.vboxlayout2.setObjectName("vboxlayout2")
-
-        self.label_3 = QtGui.QLabel(AttrCh)
-        self.label_3.setObjectName("label_3")
-        self.vboxlayout2.addWidget(self.label_3)
-
-        self.attrList = QtGui.QListWidget(AttrCh)
-        self.attrList.setMinimumSize(QtCore.QSize(0,0))
-        self.attrList.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
-        self.attrList.setObjectName("attrList")
-        self.vboxlayout2.addWidget(self.attrList)
-        self.hboxlayout1.addLayout(self.vboxlayout2)
-        self.vboxlayout.addLayout(self.hboxlayout1)
-
-        self.hboxlayout2 = QtGui.QHBoxLayout()
-        self.hboxlayout2.setObjectName("hboxlayout2")
-
-        spacerItem = QtGui.QSpacerItem(51,23,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
-        self.hboxlayout2.addItem(spacerItem)
-
-        self.addButton = QtGui.QToolButton(AttrCh)
-        self.addButton.setObjectName("addButton")
-        self.hboxlayout2.addWidget(self.addButton)
-
-        self.removeButton = QtGui.QToolButton(AttrCh)
-        self.removeButton.setObjectName("removeButton")
-        self.hboxlayout2.addWidget(self.removeButton)
-
-        self.cancelButton = QtGui.QToolButton(AttrCh)
-        self.cancelButton.setObjectName("cancelButton")
-        self.hboxlayout2.addWidget(self.cancelButton)
-        self.vboxlayout.addLayout(self.hboxlayout2)
-
-        self.vboxlayout3 = QtGui.QVBoxLayout()
-        self.vboxlayout3.setObjectName("vboxlayout3")
-
-        self.label_4 = QtGui.QLabel(AttrCh)
-        self.label_4.setMinimumSize(QtCore.QSize(0,0))
-        self.label_4.setObjectName("label_4")
-        self.vboxlayout3.addWidget(self.label_4)
-
-        self.final_List = QtGui.QListWidget(AttrCh)
-        self.final_List.setMinimumSize(QtCore.QSize(0,0))
-        self.final_List.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
-        self.final_List.setObjectName("final_List")
-        self.vboxlayout3.addWidget(self.final_List)
-
-        self.updateButton = QtGui.QPushButton(AttrCh)
-        self.updateButton.setMinimumSize(QtCore.QSize(75,41))
-        self.updateButton.setObjectName("updateButton")
-        self.vboxlayout3.addWidget(self.updateButton)
-        self.vboxlayout.addLayout(self.vboxlayout3)
-
-        self.retranslateUi(AttrCh)
-        QtCore.QMetaObject.connectSlotsByName(AttrCh)
-
-    def retranslateUi(self, AttrCh):
-        AttrCh.setWindowTitle(QtGui.QApplication.translate("AttrCh", "Form", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_1.setWhatsThis(QtGui.QApplication.translate("AttrCh", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Enter here the path for search a device.</p>\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Format:</p>\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Domain/Family/Member</p>\n"
-        "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_1.setText(QtGui.QApplication.translate("AttrCh", "Enter a path:", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_2.setWhatsThis(QtGui.QApplication.translate("AttrCh", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">List of Devices.</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_2.setText(QtGui.QApplication.translate("AttrCh", "Devices:", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_3.setWhatsThis(QtGui.QApplication.translate("AttrCh", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">List of the device attributes.</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_3.setText(QtGui.QApplication.translate("AttrCh", "Attributes:", None, QtGui.QApplication.UnicodeUTF8))
-        self.addButton.setToolTip(QtGui.QApplication.translate("AttrCh", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Add selected attribute(s) from the <span style=\" font-style:italic;\">Attribute List</span> to the <span style=\" font-style:italic;\">Chosen Attributes</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.addButton.setText(QtGui.QApplication.translate("AttrCh", "Add", None, QtGui.QApplication.UnicodeUTF8))
-        self.removeButton.setToolTip(QtGui.QApplication.translate("AttrCh", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Remove selected attribute(s) from the <span style=\" font-style:italic;\">Chosen Attributes</span></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.removeButton.setText(QtGui.QApplication.translate("AttrCh", "Remove", None, QtGui.QApplication.UnicodeUTF8))
-        self.cancelButton.setToolTip(QtGui.QApplication.translate("AttrCh", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Clear the <span style=\" font-style:italic;\">Chosen Attributes</span> list</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.cancelButton.setText(QtGui.QApplication.translate("AttrCh", "Clear", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_4.setWhatsThis(QtGui.QApplication.translate("AttrCh", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">List of all the attributes selected.</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_4.setText(QtGui.QApplication.translate("AttrCh", "Chosen attributes:", None, QtGui.QApplication.UnicodeUTF8))
-        self.updateButton.setToolTip(QtGui.QApplication.translate("AttrCh", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Update the attribute(s)</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.updateButton.setWhatsThis(QtGui.QApplication.translate("AttrCh", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Update with the choosen attributes.</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.updateButton.setText(QtGui.QApplication.translate("AttrCh", "Apply", None, QtGui.QApplication.UnicodeUTF8))
-
diff --git a/lib/taurus/qt/qtgui/panel/ui/ui_DataExportDlg.py b/lib/taurus/qt/qtgui/panel/ui/ui_DataExportDlg.py
deleted file mode 100644
index b1f5575..0000000
--- a/lib/taurus/qt/qtgui/panel/ui/ui_DataExportDlg.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'DataExportDlg.ui'
-#
-# Created: Wed Feb  3 12:31:44 2010
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_DataExportDlg(object):
-    def setupUi(self, DataExportDlg):
-        DataExportDlg.setObjectName("DataExportDlg")
-        DataExportDlg.resize(394, 371)
-        self.vboxlayout = QtGui.QVBoxLayout(DataExportDlg)
-        self.vboxlayout.setObjectName("vboxlayout")
-        self.groupBox_2 = QtGui.QGroupBox(DataExportDlg)
-        self.groupBox_2.setObjectName("groupBox_2")
-        self.vboxlayout1 = QtGui.QVBoxLayout(self.groupBox_2)
-        self.vboxlayout1.setObjectName("vboxlayout1")
-        self.hboxlayout = QtGui.QHBoxLayout()
-        self.hboxlayout.setObjectName("hboxlayout")
-        self.label = QtGui.QLabel(self.groupBox_2)
-        self.label.setObjectName("label")
-        self.hboxlayout.addWidget(self.label)
-        self.dataSetCB = QtGui.QComboBox(self.groupBox_2)
-        self.dataSetCB.setObjectName("dataSetCB")
-        self.hboxlayout.addWidget(self.dataSetCB)
-        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.hboxlayout.addItem(spacerItem)
-        self.vboxlayout1.addLayout(self.hboxlayout)
-        self.dataTE = QtGui.QTextEdit(self.groupBox_2)
-        self.dataTE.setObjectName("dataTE")
-        self.vboxlayout1.addWidget(self.dataTE)
-        self.vboxlayout.addWidget(self.groupBox_2)
-        self.groupBox = QtGui.QGroupBox(DataExportDlg)
-        self.groupBox.setObjectName("groupBox")
-        self.hboxlayout1 = QtGui.QHBoxLayout(self.groupBox)
-        self.hboxlayout1.setObjectName("hboxlayout1")
-        self.exportBT = QtGui.QPushButton(self.groupBox)
-        self.exportBT.setObjectName("exportBT")
-        self.hboxlayout1.addWidget(self.exportBT)
-        spacerItem1 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.hboxlayout1.addItem(spacerItem1)
-        self.closeAfterCB = QtGui.QCheckBox(self.groupBox)
-        self.closeAfterCB.setChecked(True)
-        self.closeAfterCB.setObjectName("closeAfterCB")
-        self.hboxlayout1.addWidget(self.closeAfterCB)
-        self.vboxlayout.addWidget(self.groupBox)
-        self.label.setBuddy(self.dataSetCB)
-
-        self.retranslateUi(DataExportDlg)
-        QtCore.QMetaObject.connectSlotsByName(DataExportDlg)
-
-    def retranslateUi(self, DataExportDlg):
-        DataExportDlg.setWindowTitle(QtGui.QApplication.translate("DataExportDlg", "Export to ASCII", None, QtGui.QApplication.UnicodeUTF8))
-        self.groupBox_2.setTitle(QtGui.QApplication.translate("DataExportDlg", "View data", None, QtGui.QApplication.UnicodeUTF8))
-        self.label.setText(QtGui.QApplication.translate("DataExportDlg", "&Data set", None, QtGui.QApplication.UnicodeUTF8))
-        self.groupBox.setTitle(QtGui.QApplication.translate("DataExportDlg", "Save to File(s)", None, QtGui.QApplication.UnicodeUTF8))
-        self.exportBT.setText(QtGui.QApplication.translate("DataExportDlg", "&Save", None, QtGui.QApplication.UnicodeUTF8))
-        self.closeAfterCB.setText(QtGui.QApplication.translate("DataExportDlg", "&Close after exporting", None, QtGui.QApplication.UnicodeUTF8))
-
diff --git a/lib/taurus/qt/qtgui/panel/ui/ui_DoubleListDlg.py b/lib/taurus/qt/qtgui/panel/ui/ui_DoubleListDlg.py
deleted file mode 100644
index 2753ad6..0000000
--- a/lib/taurus/qt/qtgui/panel/ui/ui_DoubleListDlg.py
+++ /dev/null
@@ -1,99 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file '/tmp/tmpgrv08D.ui'
-#
-# Created: Tue May 15 10:29:42 2012
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_DoubleListDlg(object):
-    def setupUi(self, DoubleListDlg):
-        DoubleListDlg.setObjectName("DoubleListDlg")
-        DoubleListDlg.resize(533, 426)
-        DoubleListDlg.setModal(True)
-        self.verticalLayout_4 = QtGui.QVBoxLayout(DoubleListDlg)
-        self.verticalLayout_4.setObjectName("verticalLayout_4")
-        self.mainLabel = QtGui.QLabel(DoubleListDlg)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.mainLabel.sizePolicy().hasHeightForWidth())
-        self.mainLabel.setSizePolicy(sizePolicy)
-        self.mainLabel.setWordWrap(True)
-        self.mainLabel.setMargin(6)
-        self.mainLabel.setObjectName("mainLabel")
-        self.verticalLayout_4.addWidget(self.mainLabel)
-        self.horizontalLayout = QtGui.QHBoxLayout()
-        self.horizontalLayout.setObjectName("horizontalLayout")
-        self.group1 = QtGui.QGroupBox(DoubleListDlg)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.group1.sizePolicy().hasHeightForWidth())
-        self.group1.setSizePolicy(sizePolicy)
-        self.group1.setObjectName("group1")
-        self.verticalLayout_2 = QtGui.QVBoxLayout(self.group1)
-        self.verticalLayout_2.setObjectName("verticalLayout_2")
-        self.list1 = QtGui.QListWidget(self.group1)
-        self.list1.setDragEnabled(True)
-        self.list1.setDragDropOverwriteMode(True)
-        self.list1.setDragDropMode(QtGui.QAbstractItemView.NoDragDrop)
-        self.list1.setAlternatingRowColors(True)
-        self.list1.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
-        self.list1.setObjectName("list1")
-        self.verticalLayout_2.addWidget(self.list1)
-        self.horizontalLayout.addWidget(self.group1)
-        self.verticalLayout_3 = QtGui.QVBoxLayout()
-        self.verticalLayout_3.setObjectName("verticalLayout_3")
-        spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.verticalLayout_3.addItem(spacerItem)
-        self.to2BT = QtGui.QToolButton(DoubleListDlg)
-        self.to2BT.setArrowType(QtCore.Qt.RightArrow)
-        self.to2BT.setObjectName("to2BT")
-        self.verticalLayout_3.addWidget(self.to2BT)
-        self.to1BT = QtGui.QToolButton(DoubleListDlg)
-        self.to1BT.setArrowType(QtCore.Qt.LeftArrow)
-        self.to1BT.setObjectName("to1BT")
-        self.verticalLayout_3.addWidget(self.to1BT)
-        spacerItem1 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.verticalLayout_3.addItem(spacerItem1)
-        self.horizontalLayout.addLayout(self.verticalLayout_3)
-        self.group2 = QtGui.QGroupBox(DoubleListDlg)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.group2.sizePolicy().hasHeightForWidth())
-        self.group2.setSizePolicy(sizePolicy)
-        self.group2.setObjectName("group2")
-        self.verticalLayout = QtGui.QVBoxLayout(self.group2)
-        self.verticalLayout.setObjectName("verticalLayout")
-        self.list2 = QtGui.QListWidget(self.group2)
-        self.list2.setDragEnabled(True)
-        self.list2.setDragDropOverwriteMode(True)
-        self.list2.setDragDropMode(QtGui.QAbstractItemView.NoDragDrop)
-        self.list2.setAlternatingRowColors(True)
-        self.list2.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
-        self.list2.setObjectName("list2")
-        self.verticalLayout.addWidget(self.list2)
-        self.horizontalLayout.addWidget(self.group2)
-        self.verticalLayout_4.addLayout(self.horizontalLayout)
-        self.buttonBox = QtGui.QDialogButtonBox(DoubleListDlg)
-        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
-        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
-        self.buttonBox.setObjectName("buttonBox")
-        self.verticalLayout_4.addWidget(self.buttonBox)
-
-        self.retranslateUi(DoubleListDlg)
-        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), DoubleListDlg.accept)
-        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("rejected()"), DoubleListDlg.reject)
-        QtCore.QMetaObject.connectSlotsByName(DoubleListDlg)
-
-    def retranslateUi(self, DoubleListDlg):
-        self.list1.setSortingEnabled(True)
-        self.to2BT.setText(QtGui.QApplication.translate("DoubleListDlg", "...", None, QtGui.QApplication.UnicodeUTF8))
-        self.to1BT.setText(QtGui.QApplication.translate("DoubleListDlg", "...", None, QtGui.QApplication.UnicodeUTF8))
-        self.list2.setSortingEnabled(True)
-
diff --git a/lib/taurus/qt/qtgui/panel/ui/ui_RawDataChooser.py b/lib/taurus/qt/qtgui/panel/ui/ui_RawDataChooser.py
deleted file mode 100644
index eaeba1a..0000000
--- a/lib/taurus/qt/qtgui/panel/ui/ui_RawDataChooser.py
+++ /dev/null
@@ -1,208 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file '/home/cpascual/src/svn/taurus/widget/dialog/ui/RawDataChooser.ui'
-#
-# Created: Fri Jan 29 11:48:43 2010
-#      by: PyQt4 UI code generator 4.3.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_RawDataChooser(object):
-    def setupUi(self, RawDataChooser):
-        RawDataChooser.setObjectName("RawDataChooser")
-        RawDataChooser.resize(QtCore.QSize(QtCore.QRect(0,0,373,468).size()).expandedTo(RawDataChooser.minimumSizeHint()))
-
-        self.vboxlayout = QtGui.QVBoxLayout(RawDataChooser)
-        self.vboxlayout.setObjectName("vboxlayout")
-
-        self.groupBox = QtGui.QGroupBox(RawDataChooser)
-
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred,QtGui.QSizePolicy.Maximum)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.groupBox.sizePolicy().hasHeightForWidth())
-        self.groupBox.setSizePolicy(sizePolicy)
-        self.groupBox.setObjectName("groupBox")
-
-        self.vboxlayout1 = QtGui.QVBoxLayout(self.groupBox)
-        self.vboxlayout1.setObjectName("vboxlayout1")
-
-        self.hboxlayout = QtGui.QHBoxLayout()
-        self.hboxlayout.setObjectName("hboxlayout")
-
-        self.label_8 = QtGui.QLabel(self.groupBox)
-        self.label_8.setObjectName("label_8")
-        self.hboxlayout.addWidget(self.label_8)
-
-        self.headerSB = QtGui.QSpinBox(self.groupBox)
-        self.headerSB.setObjectName("headerSB")
-        self.hboxlayout.addWidget(self.headerSB)
-        self.vboxlayout1.addLayout(self.hboxlayout)
-
-        self.hboxlayout1 = QtGui.QHBoxLayout()
-        self.hboxlayout1.setObjectName("hboxlayout1")
-
-        self.label_9 = QtGui.QLabel(self.groupBox)
-        self.label_9.setObjectName("label_9")
-        self.hboxlayout1.addWidget(self.label_9)
-
-        self.xcolSB = QtGui.QSpinBox(self.groupBox)
-        self.xcolSB.setMinimum(-1)
-        self.xcolSB.setProperty("value",QtCore.QVariant(-1))
-        self.xcolSB.setObjectName("xcolSB")
-        self.hboxlayout1.addWidget(self.xcolSB)
-        self.vboxlayout1.addLayout(self.hboxlayout1)
-
-        self.hboxlayout2 = QtGui.QHBoxLayout()
-        self.hboxlayout2.setObjectName("hboxlayout2")
-
-        self.openFilesBT = QtGui.QPushButton(self.groupBox)
-        self.openFilesBT.setObjectName("openFilesBT")
-        self.hboxlayout2.addWidget(self.openFilesBT)
-
-        spacerItem = QtGui.QSpacerItem(40,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
-        self.hboxlayout2.addItem(spacerItem)
-        self.vboxlayout1.addLayout(self.hboxlayout2)
-        self.vboxlayout.addWidget(self.groupBox)
-
-        self.groupBox_2 = QtGui.QGroupBox(RawDataChooser)
-
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred,QtGui.QSizePolicy.Maximum)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.groupBox_2.sizePolicy().hasHeightForWidth())
-        self.groupBox_2.setSizePolicy(sizePolicy)
-        self.groupBox_2.setObjectName("groupBox_2")
-
-        self.vboxlayout2 = QtGui.QVBoxLayout(self.groupBox_2)
-        self.vboxlayout2.setObjectName("vboxlayout2")
-
-        self.groupBox_3 = QtGui.QGroupBox(self.groupBox_2)
-        self.groupBox_3.setObjectName("groupBox_3")
-
-        self.vboxlayout3 = QtGui.QVBoxLayout(self.groupBox_3)
-        self.vboxlayout3.setObjectName("vboxlayout3")
-
-        self.hboxlayout3 = QtGui.QHBoxLayout()
-        self.hboxlayout3.setObjectName("hboxlayout3")
-
-        self.xRangeRB = QtGui.QRadioButton(self.groupBox_3)
-        self.xRangeRB.setChecked(True)
-        self.xRangeRB.setObjectName("xRangeRB")
-        self.hboxlayout3.addWidget(self.xRangeRB)
-
-        self.hboxlayout4 = QtGui.QHBoxLayout()
-        self.hboxlayout4.setObjectName("hboxlayout4")
-
-        self.label_5 = QtGui.QLabel(self.groupBox_3)
-        self.label_5.setObjectName("label_5")
-        self.hboxlayout4.addWidget(self.label_5)
-
-        self.xFromLE = QtGui.QLineEdit(self.groupBox_3)
-        self.xFromLE.setObjectName("xFromLE")
-        self.hboxlayout4.addWidget(self.xFromLE)
-
-        self.label_6 = QtGui.QLabel(self.groupBox_3)
-        self.label_6.setObjectName("label_6")
-        self.hboxlayout4.addWidget(self.label_6)
-
-        self.xToLE = QtGui.QLineEdit(self.groupBox_3)
-        self.xToLE.setObjectName("xToLE")
-        self.hboxlayout4.addWidget(self.xToLE)
-
-        self.label_7 = QtGui.QLabel(self.groupBox_3)
-        self.label_7.setObjectName("label_7")
-        self.hboxlayout4.addWidget(self.label_7)
-
-        self.xStepLE = QtGui.QLineEdit(self.groupBox_3)
-        self.xStepLE.setObjectName("xStepLE")
-        self.hboxlayout4.addWidget(self.xStepLE)
-        self.hboxlayout3.addLayout(self.hboxlayout4)
-        self.vboxlayout3.addLayout(self.hboxlayout3)
-
-        self.hboxlayout5 = QtGui.QHBoxLayout()
-        self.hboxlayout5.setObjectName("hboxlayout5")
-
-        self.xValuesRB = QtGui.QRadioButton(self.groupBox_3)
-        self.xValuesRB.setObjectName("xValuesRB")
-        self.hboxlayout5.addWidget(self.xValuesRB)
-
-        self.xValuesLE = QtGui.QLineEdit(self.groupBox_3)
-        self.xValuesLE.setObjectName("xValuesLE")
-        self.hboxlayout5.addWidget(self.xValuesLE)
-        self.vboxlayout3.addLayout(self.hboxlayout5)
-        self.vboxlayout2.addWidget(self.groupBox_3)
-
-        self.groupBox_4 = QtGui.QGroupBox(self.groupBox_2)
-        self.groupBox_4.setObjectName("groupBox_4")
-
-        self.vboxlayout4 = QtGui.QVBoxLayout(self.groupBox_4)
-        self.vboxlayout4.setObjectName("vboxlayout4")
-
-        self.hboxlayout6 = QtGui.QHBoxLayout()
-        self.hboxlayout6.setObjectName("hboxlayout6")
-
-        self.label = QtGui.QLabel(self.groupBox_4)
-        self.label.setObjectName("label")
-        self.hboxlayout6.addWidget(self.label)
-
-        self.f_xLE = QtGui.QLineEdit(self.groupBox_4)
-        self.f_xLE.setObjectName("f_xLE")
-        self.hboxlayout6.addWidget(self.f_xLE)
-        self.vboxlayout4.addLayout(self.hboxlayout6)
-        self.vboxlayout2.addWidget(self.groupBox_4)
-
-        self.hboxlayout7 = QtGui.QHBoxLayout()
-        self.hboxlayout7.setObjectName("hboxlayout7")
-
-        spacerItem1 = QtGui.QSpacerItem(40,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
-        self.hboxlayout7.addItem(spacerItem1)
-
-        self.addCurveBT = QtGui.QPushButton(self.groupBox_2)
-        self.addCurveBT.setObjectName("addCurveBT")
-        self.hboxlayout7.addWidget(self.addCurveBT)
-        self.vboxlayout2.addLayout(self.hboxlayout7)
-        self.vboxlayout.addWidget(self.groupBox_2)
-
-        self.retranslateUi(RawDataChooser)
-        QtCore.QMetaObject.connectSlotsByName(RawDataChooser)
-
-    def retranslateUi(self, RawDataChooser):
-        RawDataChooser.setWindowTitle(QtGui.QApplication.translate("RawDataChooser", "Form", None, QtGui.QApplication.UnicodeUTF8))
-        self.groupBox.setTitle(QtGui.QApplication.translate("RawDataChooser", "Load data from ASCII File", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_8.setText(QtGui.QApplication.translate("RawDataChooser", "Number of header lines", None, QtGui.QApplication.UnicodeUTF8))
-        self.headerSB.setToolTip(QtGui.QApplication.translate("RawDataChooser", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">This many lines at the beginning of the file will be ignored</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_9.setText(QtGui.QApplication.translate("RawDataChooser", "x values in colum:", None, QtGui.QApplication.UnicodeUTF8))
-        self.xcolSB.setToolTip(QtGui.QApplication.translate("RawDataChooser", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">In multi column files, the values of this column will be used for the abcissas. Set to \"no x\" if the abcissas should be automatically generated as the row number.</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.xcolSB.setSpecialValueText(QtGui.QApplication.translate("RawDataChooser", "--", None, QtGui.QApplication.UnicodeUTF8))
-        self.openFilesBT.setText(QtGui.QApplication.translate("RawDataChooser", "Open File(s)...", None, QtGui.QApplication.UnicodeUTF8))
-        self.groupBox_2.setTitle(QtGui.QApplication.translate("RawDataChooser", "Generate curve from function", None, QtGui.QApplication.UnicodeUTF8))
-        self.groupBox_3.setTitle(QtGui.QApplication.translate("RawDataChooser", "x", None, QtGui.QApplication.UnicodeUTF8))
-        self.xRangeRB.setText(QtGui.QApplication.translate("RawDataChooser", "Range", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_5.setText(QtGui.QApplication.translate("RawDataChooser", "from", None, QtGui.QApplication.UnicodeUTF8))
-        self.xFromLE.setText(QtGui.QApplication.translate("RawDataChooser", "0", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_6.setText(QtGui.QApplication.translate("RawDataChooser", "to", None, QtGui.QApplication.UnicodeUTF8))
-        self.xToLE.setText(QtGui.QApplication.translate("RawDataChooser", "100", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_7.setText(QtGui.QApplication.translate("RawDataChooser", "step", None, QtGui.QApplication.UnicodeUTF8))
-        self.xStepLE.setText(QtGui.QApplication.translate("RawDataChooser", "1", None, QtGui.QApplication.UnicodeUTF8))
-        self.xValuesRB.setText(QtGui.QApplication.translate("RawDataChooser", "Values", None, QtGui.QApplication.UnicodeUTF8))
-        self.xValuesLE.setToolTip(QtGui.QApplication.translate("RawDataChooser", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">comma separated list of values</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.groupBox_4.setTitle(QtGui.QApplication.translate("RawDataChooser", "y", None, QtGui.QApplication.UnicodeUTF8))
-        self.label.setText(QtGui.QApplication.translate("RawDataChooser", "f(x)=", None, QtGui.QApplication.UnicodeUTF8))
-        self.addCurveBT.setToolTip(QtGui.QApplication.translate("RawDataChooser", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Generate new curve and add it</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.addCurveBT.setText(QtGui.QApplication.translate("RawDataChooser", "Add", None, QtGui.QApplication.UnicodeUTF8))
-
diff --git a/lib/taurus/qt/qtgui/panel/ui/ui_TaurusConfigurationPanel.py b/lib/taurus/qt/qtgui/panel/ui/ui_TaurusConfigurationPanel.py
deleted file mode 100644
index e844e01..0000000
--- a/lib/taurus/qt/qtgui/panel/ui/ui_TaurusConfigurationPanel.py
+++ /dev/null
@@ -1,207 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file '/tmp/tmpQAgACn.ui'
-#
-# Created: Wed Nov 30 11:35:28 2011
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_TaurusConfigurationPanel(object):
-    def setupUi(self, Form):
-        Form.setObjectName("Form")
-        Form.resize(422, 401)
-        self._Form=Form
-        self.gridLayout = QtGui.QGridLayout(Form)
-        self.gridLayout.setObjectName("gridLayout")
-        self.gridLayoutRight = QtGui.QGridLayout()
-        self.gridLayoutRight.setObjectName("gridLayoutRight")
-        self.valueGroupBox = TaurusGroupBox(Form)
-        self.valueGroupBox.setFlat(False)
-        self.valueGroupBox.setCheckable(False)
-        self.valueGroupBox.setObjectName("valueGroupBox")
-        self.formLayout_2 = QtGui.QFormLayout(self.valueGroupBox)
-        self.formLayout_2.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow)
-        self.formLayout_2.setObjectName("formLayout_2")
-        self.rangeMinLabel = QtGui.QLabel(self.valueGroupBox)
-        self.rangeMinLabel.setObjectName("rangeMinLabel")
-        self.formLayout_2.setWidget(0, QtGui.QFormLayout.LabelRole, self.rangeMinLabel)
-        self.valueMinConfig = TaurusConfigLineEdit(self.valueGroupBox)
-        self.valueMinConfig.setObjectName("valueMinConfig")
-        self.formLayout_2.setWidget(0, QtGui.QFormLayout.FieldRole, self.valueMinConfig)
-        self.rangeMaxLabel = QtGui.QLabel(self.valueGroupBox)
-        self.rangeMaxLabel.setObjectName("rangeMaxLabel")
-        self.formLayout_2.setWidget(1, QtGui.QFormLayout.LabelRole, self.rangeMaxLabel)
-        self.valueMaxConfig = TaurusConfigLineEdit(self.valueGroupBox)
-        self.valueMaxConfig.setObjectName("valueMaxConfig")
-        self.formLayout_2.setWidget(1, QtGui.QFormLayout.FieldRole, self.valueMaxConfig)
-        self.gridLayoutRight.addWidget(self.valueGroupBox, 0, 0, 1, 1)
-        self.alarmGroupBox = TaurusGroupBox(Form)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.alarmGroupBox.sizePolicy().hasHeightForWidth())
-        self.alarmGroupBox.setSizePolicy(sizePolicy)
-        self.alarmGroupBox.setObjectName("alarmGroupBox")
-        self.formLayout_3 = QtGui.QFormLayout(self.alarmGroupBox)
-        self.formLayout_3.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow)
-        self.formLayout_3.setObjectName("formLayout_3")
-        self.alarmMinLabel = QtGui.QLabel(self.alarmGroupBox)
-        self.alarmMinLabel.setObjectName("alarmMinLabel")
-        self.formLayout_3.setWidget(0, QtGui.QFormLayout.LabelRole, self.alarmMinLabel)
-        self.alarmMinConfig = TaurusConfigLineEdit(self.alarmGroupBox)
-        self.alarmMinConfig.setObjectName("alarmMinConfig")
-        self.formLayout_3.setWidget(0, QtGui.QFormLayout.FieldRole, self.alarmMinConfig)
-        self.alarmMaxLabel = QtGui.QLabel(self.alarmGroupBox)
-        self.alarmMaxLabel.setObjectName("alarmMaxLabel")
-        self.formLayout_3.setWidget(1, QtGui.QFormLayout.LabelRole, self.alarmMaxLabel)
-        self.alarmMaxConfig = TaurusConfigLineEdit(self.alarmGroupBox)
-        self.alarmMaxConfig.setObjectName("alarmMaxConfig")
-        self.formLayout_3.setWidget(1, QtGui.QFormLayout.FieldRole, self.alarmMaxConfig)
-        self.gridLayoutRight.addWidget(self.alarmGroupBox, 1, 0, 1, 1)
-        self.warningGroupBox = TaurusGroupBox(Form)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.warningGroupBox.sizePolicy().hasHeightForWidth())
-        self.warningGroupBox.setSizePolicy(sizePolicy)
-        self.warningGroupBox.setObjectName("warningGroupBox")
-        self.formLayout_4 = QtGui.QFormLayout(self.warningGroupBox)
-        self.formLayout_4.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow)
-        self.formLayout_4.setObjectName("formLayout_4")
-        self.warningMinLabel = QtGui.QLabel(self.warningGroupBox)
-        self.warningMinLabel.setObjectName("warningMinLabel")
-        self.formLayout_4.setWidget(0, QtGui.QFormLayout.LabelRole, self.warningMinLabel)
-        self.warningMinConfig = TaurusConfigLineEdit(self.warningGroupBox)
-        self.warningMinConfig.setObjectName("warningMinConfig")
-        self.formLayout_4.setWidget(0, QtGui.QFormLayout.FieldRole, self.warningMinConfig)
-        self.warningMaxLabel = QtGui.QLabel(self.warningGroupBox)
-        self.warningMaxLabel.setObjectName("warningMaxLabel")
-        self.formLayout_4.setWidget(1, QtGui.QFormLayout.LabelRole, self.warningMaxLabel)
-        self.warningMaxConfig = TaurusConfigLineEdit(self.warningGroupBox)
-        self.warningMaxConfig.setObjectName("warningMaxConfig")
-        self.formLayout_4.setWidget(1, QtGui.QFormLayout.FieldRole, self.warningMaxConfig)
-        self.gridLayoutRight.addWidget(self.warningGroupBox, 2, 0, 1, 1)
-        spacerItem = QtGui.QSpacerItem(0, 0, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.gridLayoutRight.addItem(spacerItem, 3, 0, 1, 1)
-        self.gridLayout.addLayout(self.gridLayoutRight, 1, 3, 9, 1)
-        self.gridLayout_2 = QtGui.QGridLayout()
-        self.gridLayout_2.setObjectName("gridLayout_2")
-        self.pushButtonApply = QtGui.QPushButton(Form)
-        self.pushButtonApply.setObjectName("pushButtonApply")
-        self.gridLayout_2.addWidget(self.pushButtonApply, 2, 3, 1, 1)
-        self.pushButtonCancel = QtGui.QPushButton(Form)
-        self.pushButtonCancel.setObjectName("pushButtonCancel")
-        self.gridLayout_2.addWidget(self.pushButtonCancel, 2, 5, 1, 1)
-        self.pushButtonRestore = QtGui.QPushButton(Form)
-        self.pushButtonRestore.setObjectName("pushButtonRestore")
-        self.gridLayout_2.addWidget(self.pushButtonRestore, 2, 6, 1, 1)
-        spacerItem1 = QtGui.QSpacerItem(113, 23, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.gridLayout_2.addItem(spacerItem1, 2, 1, 1, 1)
-        self.pushButtonOk = QtGui.QPushButton(Form)
-        self.pushButtonOk.setEnabled(True)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.pushButtonOk.sizePolicy().hasHeightForWidth())
-        self.pushButtonOk.setSizePolicy(sizePolicy)
-        self.pushButtonOk.setObjectName("pushButtonOk")
-        self.gridLayout_2.addWidget(self.pushButtonOk, 2, 2, 1, 1)
-        self.gridLayout.addLayout(self.gridLayout_2, 11, 0, 1, 4)
-        self.nameLabel = QtGui.QLabel(Form)
-        self.nameLabel.setObjectName("nameLabel")
-        self.gridLayout.addWidget(self.nameLabel, 0, 0, 1, 1)
-        self.fullNameLineEdit = QtGui.QLineEdit(Form)
-        font = QtGui.QFont()
-        font.setWeight(75)
-        font.setBold(True)
-        self.fullNameLineEdit.setFont(font)
-        self.fullNameLineEdit.setReadOnly(True)
-        self.fullNameLineEdit.setObjectName("fullNameLineEdit")
-        self.gridLayout.addWidget(self.fullNameLineEdit, 0, 1, 1, 3)
-        self.labelLabel = QtGui.QLabel(Form)
-        self.labelLabel.setObjectName("labelLabel")
-        self.gridLayout.addWidget(self.labelLabel, 2, 0, 1, 1)
-        self.labelConfig = TaurusConfigLineEdit(Form)
-        self.labelConfig.setObjectName("labelConfig")
-        self.gridLayout.addWidget(self.labelConfig, 2, 1, 1, 2)
-        self.unitLabel = QtGui.QLabel(Form)
-        self.unitLabel.setObjectName("unitLabel")
-        self.gridLayout.addWidget(self.unitLabel, 3, 0, 1, 1)
-        self.unitConfig = TaurusConfigLineEdit(Form)
-        self.unitConfig.setObjectName("unitConfig")
-        self.gridLayout.addWidget(self.unitConfig, 3, 1, 1, 2)
-        self.displayUnitLabel = QtGui.QLabel(Form)
-        self.displayUnitLabel.setObjectName("displayUnitLabel")
-        self.gridLayout.addWidget(self.displayUnitLabel, 4, 0, 1, 1)
-        self.displayUnitConfig = TaurusConfigLineEdit(Form)
-        self.displayUnitConfig.setObjectName("displayUnitConfig")
-        self.gridLayout.addWidget(self.displayUnitConfig, 4, 1, 1, 2)
-        self.standardUnitLabel = QtGui.QLabel(Form)
-        self.standardUnitLabel.setObjectName("standardUnitLabel")
-        self.gridLayout.addWidget(self.standardUnitLabel, 5, 0, 1, 1)
-        self.standardUnitConfig = TaurusConfigLineEdit(Form)
-        self.standardUnitConfig.setObjectName("standardUnitConfig")
-        self.gridLayout.addWidget(self.standardUnitConfig, 5, 1, 1, 2)
-        self.formatLabel = QtGui.QLabel(Form)
-        self.formatLabel.setObjectName("formatLabel")
-        self.gridLayout.addWidget(self.formatLabel, 6, 0, 1, 1)
-        self.formatConfig = TaurusConfigLineEdit(Form)
-        self.formatConfig.setObjectName("formatConfig")
-        self.gridLayout.addWidget(self.formatConfig, 6, 1, 1, 2)
-        self.descriptionLabel = QtGui.QLabel(Form)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.descriptionLabel.sizePolicy().hasHeightForWidth())
-        self.descriptionLabel.setSizePolicy(sizePolicy)
-        self.descriptionLabel.setObjectName("descriptionLabel")
-        self.gridLayout.addWidget(self.descriptionLabel, 7, 0, 1, 2)
-        self.descriptionConfig = TaurusConfigLineEdit(Form)
-        self.descriptionConfig.setObjectName("descriptionConfig")
-        self.gridLayout.addWidget(self.descriptionConfig, 8, 0, 1, 3)
-        spacerItem2 = QtGui.QSpacerItem(0, 0, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.gridLayout.addItem(spacerItem2, 12, 0, 1, 4)
-        spacerItem3 = QtGui.QSpacerItem(0, 0, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.gridLayout.addItem(spacerItem3, 9, 1, 1, 1)
-
-        self.retranslateUi(Form)
-        QtCore.QMetaObject.connectSlotsByName(Form)
-
-    def retranslateUi(self, Form):
-        Form.setWindowTitle(QtGui.QApplication.translate("Form", "TaurusConfigurationPanel", None, QtGui.QApplication.UnicodeUTF8))
-        self.valueGroupBox.setTitle(QtGui.QApplication.translate("Form", "Value", None, QtGui.QApplication.UnicodeUTF8))
-        self.rangeMinLabel.setText(QtGui.QApplication.translate("Form", "Min:", None, QtGui.QApplication.UnicodeUTF8))
-        self.rangeMaxLabel.setText(QtGui.QApplication.translate("Form", "Max:", None, QtGui.QApplication.UnicodeUTF8))
-        self.alarmGroupBox.setTitle(QtGui.QApplication.translate("Form", "Alarm", None, QtGui.QApplication.UnicodeUTF8))
-        self.alarmMinLabel.setText(QtGui.QApplication.translate("Form", "Min:", None, QtGui.QApplication.UnicodeUTF8))
-        self.alarmMaxLabel.setText(QtGui.QApplication.translate("Form", "Max:", None, QtGui.QApplication.UnicodeUTF8))
-        self.warningGroupBox.setTitle(QtGui.QApplication.translate("Form", "Warning", None, QtGui.QApplication.UnicodeUTF8))
-        self.warningMinLabel.setText(QtGui.QApplication.translate("Form", "Min:", None, QtGui.QApplication.UnicodeUTF8))
-        self.warningMaxLabel.setText(QtGui.QApplication.translate("Form", "Max:", None, QtGui.QApplication.UnicodeUTF8))
-        self.pushButtonApply.setText(QtGui.QApplication.translate("Form", "Apply", None, QtGui.QApplication.UnicodeUTF8))
-        self.pushButtonCancel.setText(QtGui.QApplication.translate("Form", "Cancel", None, QtGui.QApplication.UnicodeUTF8))
-        self.pushButtonRestore.setText(QtGui.QApplication.translate("Form", "Restore", None, QtGui.QApplication.UnicodeUTF8))
-        self.pushButtonOk.setText(QtGui.QApplication.translate("Form", "OK", None, QtGui.QApplication.UnicodeUTF8))
-        self.nameLabel.setText(QtGui.QApplication.translate("Form", "Full Name", None, QtGui.QApplication.UnicodeUTF8))
-        self.labelLabel.setText(QtGui.QApplication.translate("Form", "Label:", None, QtGui.QApplication.UnicodeUTF8))
-        self.unitLabel.setText(QtGui.QApplication.translate("Form", "Unit:", None, QtGui.QApplication.UnicodeUTF8))
-        self.displayUnitLabel.setText(QtGui.QApplication.translate("Form", "Display Unit:", None, QtGui.QApplication.UnicodeUTF8))
-        self.standardUnitLabel.setText(QtGui.QApplication.translate("Form", "Standard Unit:", None, QtGui.QApplication.UnicodeUTF8))
-        self.formatLabel.setText(QtGui.QApplication.translate("Form", "Format:", None, QtGui.QApplication.UnicodeUTF8))
-        self.descriptionLabel.setText(QtGui.QApplication.translate("Form", "Description:", None, QtGui.QApplication.UnicodeUTF8))
-
-from taurus.qt.qtgui.container import TaurusGroupBox
-from taurus.qt.qtgui.input import TaurusConfigLineEdit
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    Form = QtGui.QWidget()
-    ui = Ui_Form()
-    ui.setupUi(Form)
-    Form.show()
-    sys.exit(app.exec_())
-
diff --git a/lib/taurus/qt/qtgui/panel/ui/ui_TaurusConfigurationPanel.ui b/lib/taurus/qt/qtgui/panel/ui/ui_TaurusConfigurationPanel.ui
deleted file mode 100644
index e10f8a4..0000000
--- a/lib/taurus/qt/qtgui/panel/ui/ui_TaurusConfigurationPanel.ui
+++ /dev/null
@@ -1,353 +0,0 @@
-<ui version="4.0" >
- <class>Form</class>
- <widget class="QWidget" name="Form" >
-  <property name="geometry" >
-   <rect>
-    <x>0</x>
-    <y>0</y>
-    <width>422</width>
-    <height>401</height>
-   </rect>
-  </property>
-  <property name="windowTitle" >
-   <string>TaurusConfigurationPanel</string>
-  </property>
-  <layout class="QGridLayout" name="gridLayout" >
-   <item rowspan="9" row="1" column="3" >
-    <layout class="QGridLayout" name="gridLayoutRight" >
-     <item row="0" column="0" >
-      <widget class="TaurusGroupBox" name="valueGroupBox" >
-       <property name="title" >
-        <string>Value</string>
-       </property>
-       <property name="flat" >
-        <bool>false</bool>
-       </property>
-       <property name="checkable" >
-        <bool>false</bool>
-       </property>
-       <layout class="QFormLayout" name="formLayout_2" >
-        <property name="fieldGrowthPolicy" >
-         <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
-        </property>
-        <item row="0" column="0" >
-         <widget class="QLabel" name="rangeMinLabel" >
-          <property name="text" >
-           <string>Min:</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="1" >
-         <widget class="TaurusConfigLineEdit" name="valueMinConfig" />
-        </item>
-        <item row="1" column="0" >
-         <widget class="QLabel" name="rangeMaxLabel" >
-          <property name="text" >
-           <string>Max:</string>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="1" >
-         <widget class="TaurusConfigLineEdit" name="valueMaxConfig" />
-        </item>
-       </layout>
-      </widget>
-     </item>
-     <item row="1" column="0" >
-      <widget class="TaurusGroupBox" name="alarmGroupBox" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Minimum" hsizetype="Minimum" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="title" >
-        <string>Alarm</string>
-       </property>
-       <layout class="QFormLayout" name="formLayout_3" >
-        <property name="fieldGrowthPolicy" >
-         <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
-        </property>
-        <item row="0" column="0" >
-         <widget class="QLabel" name="alarmMinLabel" >
-          <property name="text" >
-           <string>Min:</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="1" >
-         <widget class="TaurusConfigLineEdit" name="alarmMinConfig" />
-        </item>
-        <item row="1" column="0" >
-         <widget class="QLabel" name="alarmMaxLabel" >
-          <property name="text" >
-           <string>Max:</string>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="1" >
-         <widget class="TaurusConfigLineEdit" name="alarmMaxConfig" />
-        </item>
-       </layout>
-       <zorder>alarmMinLabel</zorder>
-       <zorder>alarmMaxLabel</zorder>
-       <zorder>alarmMinConfig</zorder>
-       <zorder>alarmMaxConfig</zorder>
-      </widget>
-     </item>
-     <item row="2" column="0" >
-      <widget class="TaurusGroupBox" name="warningGroupBox" >
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="title" >
-        <string>Warning</string>
-       </property>
-       <layout class="QFormLayout" name="formLayout_4" >
-        <property name="fieldGrowthPolicy" >
-         <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
-        </property>
-        <item row="0" column="0" >
-         <widget class="QLabel" name="warningMinLabel" >
-          <property name="text" >
-           <string>Min:</string>
-          </property>
-         </widget>
-        </item>
-        <item row="0" column="1" >
-         <widget class="TaurusConfigLineEdit" name="warningMinConfig" />
-        </item>
-        <item row="1" column="0" >
-         <widget class="QLabel" name="warningMaxLabel" >
-          <property name="text" >
-           <string>Max:</string>
-          </property>
-         </widget>
-        </item>
-        <item row="1" column="1" >
-         <widget class="TaurusConfigLineEdit" name="warningMaxConfig" />
-        </item>
-       </layout>
-      </widget>
-     </item>
-     <item row="3" column="0" >
-      <spacer name="verticalSpacer_3" >
-       <property name="orientation" >
-        <enum>Qt::Vertical</enum>
-       </property>
-       <property name="sizeHint" stdset="0" >
-        <size>
-         <width>0</width>
-         <height>0</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-    </layout>
-   </item>
-   <item row="11" column="0" colspan="4" >
-    <layout class="QGridLayout" name="gridLayout_2" >
-     <item row="2" column="0" >
-      <widget class="QPushButton" name="pushButtonOk" >
-       <property name="enabled" >
-        <bool>true</bool>
-       </property>
-       <property name="sizePolicy" >
-        <sizepolicy vsizetype="Fixed" hsizetype="Minimum" >
-         <horstretch>0</horstretch>
-         <verstretch>0</verstretch>
-        </sizepolicy>
-       </property>
-       <property name="text" >
-        <string>OK</string>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="1" >
-      <widget class="QPushButton" name="pushButtonApply" >
-       <property name="text" >
-        <string>Apply</string>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="2" >
-      <widget class="QPushButton" name="pushButtonCancel" >
-       <property name="text" >
-        <string>Cancel</string>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="3" >
-      <widget class="QPushButton" name="pushButtonRestore" >
-       <property name="text" >
-        <string>Restore</string>
-       </property>
-      </widget>
-     </item>
-     <item row="2" column="4" >
-      <spacer name="horizontalSpacer" >
-       <property name="orientation" >
-        <enum>Qt::Horizontal</enum>
-       </property>
-       <property name="sizeHint" stdset="0" >
-        <size>
-         <width>113</width>
-         <height>23</height>
-        </size>
-       </property>
-      </spacer>
-     </item>
-    </layout>
-   </item>
-   <item row="0" column="0" >
-    <widget class="QLabel" name="nameLabel" >
-     <property name="text" >
-      <string>Full Name</string>
-     </property>
-    </widget>
-   </item>
-   <item row="0" column="1" colspan="3" >
-    <widget class="QLineEdit" name="fullNameLineEdit" >
-     <property name="font" >
-      <font>
-       <weight>75</weight>
-       <bold>true</bold>
-      </font>
-     </property>
-     <property name="readOnly" >
-      <bool>true</bool>
-     </property>
-     <property name="fullName" stdset="0" >
-      <string/>
-     </property>
-    </widget>
-   </item>
-   <item row="2" column="0" >
-    <widget class="QLabel" name="labelLabel" >
-     <property name="text" >
-      <string>Label:</string>
-     </property>
-    </widget>
-   </item>
-   <item row="2" column="1" colspan="2" >
-    <widget class="TaurusConfigLineEdit" name="labelConfig" />
-   </item>
-   <item row="3" column="0" >
-    <widget class="QLabel" name="unitLabel" >
-     <property name="text" >
-      <string>Unit:</string>
-     </property>
-    </widget>
-   </item>
-   <item row="3" column="1" colspan="2" >
-    <widget class="TaurusConfigLineEdit" name="unitConfig" />
-   </item>
-   <item row="4" column="0" >
-    <widget class="QLabel" name="displayUnitLabel" >
-     <property name="text" >
-      <string>Display Unit:</string>
-     </property>
-    </widget>
-   </item>
-   <item row="4" column="1" colspan="2" >
-    <widget class="TaurusConfigLineEdit" name="displayUnitConfig" />
-   </item>
-   <item row="5" column="0" >
-    <widget class="QLabel" name="standardUnitLabel" >
-     <property name="text" >
-      <string>Standard Unit:</string>
-     </property>
-    </widget>
-   </item>
-   <item row="5" column="1" colspan="2" >
-    <widget class="TaurusConfigLineEdit" name="standardUnitConfig" />
-   </item>
-   <item row="6" column="0" >
-    <widget class="QLabel" name="formatLabel" >
-     <property name="text" >
-      <string>Format:</string>
-     </property>
-    </widget>
-   </item>
-   <item row="6" column="1" colspan="2" >
-    <widget class="TaurusConfigLineEdit" name="formatConfig" />
-   </item>
-   <item row="7" column="0" colspan="2" >
-    <widget class="QLabel" name="descriptionLabel" >
-     <property name="sizePolicy" >
-      <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
-       <horstretch>0</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="text" >
-      <string>Description:</string>
-     </property>
-    </widget>
-   </item>
-   <item row="8" column="0" colspan="3" >
-    <widget class="TaurusConfigLineEdit" name="descriptionConfig" />
-   </item>
-   <item row="12" column="0" colspan="4" >
-    <spacer name="verticalSpacer_2" >
-     <property name="orientation" >
-      <enum>Qt::Vertical</enum>
-     </property>
-     <property name="sizeHint" stdset="0" >
-      <size>
-       <width>0</width>
-       <height>0</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-   <item row="9" column="1" >
-    <spacer name="horizontalSpacer_2" >
-     <property name="orientation" >
-      <enum>Qt::Horizontal</enum>
-     </property>
-     <property name="sizeHint" stdset="0" >
-      <size>
-       <width>0</width>
-       <height>0</height>
-      </size>
-     </property>
-    </spacer>
-   </item>
-  </layout>
-  <zorder>nameLabel</zorder>
-  <zorder>fullNameLineEdit</zorder>
-  <zorder>labelLabel</zorder>
-  <zorder>labelConfig</zorder>
-  <zorder>unitLabel</zorder>
-  <zorder>unitConfig</zorder>
-  <zorder>displayUnitLabel</zorder>
-  <zorder>displayUnitConfig</zorder>
-  <zorder>standardUnitLabel</zorder>
-  <zorder>standardUnitConfig</zorder>
-  <zorder>formatLabel</zorder>
-  <zorder>formatConfig</zorder>
-  <zorder>descriptionLabel</zorder>
-  <zorder>descriptionConfig</zorder>
-  <zorder>verticalSpacer_2</zorder>
-  <zorder>horizontalSpacer_2</zorder>
- </widget>
- <customwidgets>
-  <customwidget>
-   <class>TaurusConfigLineEdit</class>
-   <extends>QLineEdit</extends>
-   <header>taurus.qt.qtgui.input</header>
-  </customwidget>
-  <customwidget>
-   <class>TaurusGroupBox</class>
-   <extends>QGroupBox</extends>
-   <header>taurus.qt.qtgui.container</header>
-   <container>1</container>
-  </customwidget>
- </customwidgets>
- <resources/>
- <connections/>
-</ui>
diff --git a/lib/taurus/qt/qtgui/panel/ui/ui_TaurusInputPanel.py b/lib/taurus/qt/qtgui/panel/ui/ui_TaurusInputPanel.py
deleted file mode 100644
index 5582af6..0000000
--- a/lib/taurus/qt/qtgui/panel/ui/ui_TaurusInputPanel.py
+++ /dev/null
@@ -1,69 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'TaurusInputPanel.ui'
-#
-# Created: Mon Jul  9 14:25:29 2012
-#      by: PyQt4 UI code generator 4.8.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-try:
-    _fromUtf8 = QtCore.QString.fromUtf8
-except AttributeError:
-    _fromUtf8 = lambda s: s
-
-class Ui_TaurusInputPanel(object):
-    def setupUi(self, TaurusInputPanel):
-        TaurusInputPanel.setObjectName(_fromUtf8("TaurusInputPanel"))
-        TaurusInputPanel.resize(549, 174)
-        self.gridLayout = QtGui.QGridLayout(TaurusInputPanel)
-        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
-        self.buttonPanelWidget = QtGui.QWidget(TaurusInputPanel)
-        self.buttonPanelWidget.setObjectName(_fromUtf8("buttonPanelWidget"))
-        self.horizontalLayout = QtGui.QHBoxLayout(self.buttonPanelWidget)
-        self.horizontalLayout.setMargin(0)
-        self.horizontalLayout.setMargin(0)
-        self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout"))
-        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.horizontalLayout.addItem(spacerItem)
-        self.buttonBox = QtGui.QDialogButtonBox(self.buttonPanelWidget)
-        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
-        self.buttonBox.setObjectName(_fromUtf8("buttonBox"))
-        self.horizontalLayout.addWidget(self.buttonBox)
-        self.horizontalLayout.setStretch(0, 1)
-        self.gridLayout.addWidget(self.buttonPanelWidget, 4, 0, 1, 2)
-        self.iconTextLayout = QtGui.QHBoxLayout()
-        self.iconTextLayout.setObjectName(_fromUtf8("iconTextLayout"))
-        self.iconLabel = QtGui.QLabel(TaurusInputPanel)
-        self.iconLabel.setObjectName(_fromUtf8("iconLabel"))
-        self.iconTextLayout.addWidget(self.iconLabel)
-        self.textLabel = QtGui.QLabel(TaurusInputPanel)
-        self.textLabel.setObjectName(_fromUtf8("textLabel"))
-        self.iconTextLayout.addWidget(self.textLabel)
-        self.iconTextLayout.setStretch(1, 1)
-        self.gridLayout.addLayout(self.iconTextLayout, 1, 0, 2, 2)
-        self.inputPanel = QtGui.QWidget(TaurusInputPanel)
-        self.inputPanel.setObjectName(_fromUtf8("inputPanel"))
-        self.gridLayout.addWidget(self.inputPanel, 3, 0, 1, 2)
-        self.gridLayout.setRowStretch(3, 1)
-
-        self.retranslateUi(TaurusInputPanel)
-        QtCore.QMetaObject.connectSlotsByName(TaurusInputPanel)
-
-    def retranslateUi(self, TaurusInputPanel):
-        TaurusInputPanel.setWindowTitle(QtGui.QApplication.translate("TaurusInputPanel", "Form", None, QtGui.QApplication.UnicodeUTF8))
-        self.iconLabel.setText(QtGui.QApplication.translate("TaurusInputPanel", "iconLabel", None, QtGui.QApplication.UnicodeUTF8))
-        self.textLabel.setText(QtGui.QApplication.translate("TaurusInputPanel", "textLabel", None, QtGui.QApplication.UnicodeUTF8))
-
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    TaurusInputPanel = QtGui.QWidget()
-    ui = Ui_TaurusInputPanel()
-    ui.setupUi(TaurusInputPanel)
-    TaurusInputPanel.show()
-    sys.exit(app.exec_())
-
diff --git a/lib/taurus/qt/qtgui/panel/ui/ui_TaurusMessagePanel.py b/lib/taurus/qt/qtgui/panel/ui/ui_TaurusMessagePanel.py
deleted file mode 100644
index 7ee256e..0000000
--- a/lib/taurus/qt/qtgui/panel/ui/ui_TaurusMessagePanel.py
+++ /dev/null
@@ -1,106 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'TaurusMessagePanel.ui'
-#
-# Created: Tue Apr 24 11:10:11 2012
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_TaurusMessagePanel(object):
-    def setupUi(self, TaurusMessagePanel):
-        TaurusMessagePanel.setObjectName("TaurusMessagePanel")
-        TaurusMessagePanel.resize(548, 616)
-        self.gridLayout = QtGui.QGridLayout(TaurusMessagePanel)
-        self.gridLayout.setObjectName("gridLayout")
-        self.detailsWidget = QtGui.QWidget(TaurusMessagePanel)
-        self.detailsWidget.setObjectName("detailsWidget")
-        self.verticalLayout = QtGui.QVBoxLayout(self.detailsWidget)
-        self.verticalLayout.setSpacing(2)
-        self.verticalLayout.setMargin(0)
-        self.verticalLayout.setObjectName("verticalLayout")
-        self.detailsTabWidget = QtGui.QTabWidget(self.detailsWidget)
-        self.detailsTabWidget.setMinimumSize(QtCore.QSize(512, 512))
-        self.detailsTabWidget.setObjectName("detailsTabWidget")
-        self.tabDetails = QtGui.QWidget()
-        self.tabDetails.setObjectName("tabDetails")
-        self.verticalLayout_2 = QtGui.QVBoxLayout(self.tabDetails)
-        self.verticalLayout_2.setMargin(2)
-        self.verticalLayout_2.setObjectName("verticalLayout_2")
-        self.detailsTextEdit = QtGui.QTextEdit(self.tabDetails)
-        self.detailsTextEdit.setMinimumSize(QtCore.QSize(512, 512))
-        self.detailsTextEdit.setReadOnly(True)
-        self.detailsTextEdit.setObjectName("detailsTextEdit")
-        self.verticalLayout_2.addWidget(self.detailsTextEdit)
-        self.detailsTabWidget.addTab(self.tabDetails, "")
-        self.tabOrigin = QtGui.QWidget()
-        self.tabOrigin.setObjectName("tabOrigin")
-        self.verticalLayout_3 = QtGui.QVBoxLayout(self.tabOrigin)
-        self.verticalLayout_3.setMargin(2)
-        self.verticalLayout_3.setObjectName("verticalLayout_3")
-        self.originTextEdit = QtGui.QTextEdit(self.tabOrigin)
-        self.originTextEdit.setMinimumSize(QtCore.QSize(512, 256))
-        self.originTextEdit.setReadOnly(True)
-        self.originTextEdit.setObjectName("originTextEdit")
-        self.verticalLayout_3.addWidget(self.originTextEdit)
-        self.detailsTabWidget.addTab(self.tabOrigin, "")
-        self.verticalLayout.addWidget(self.detailsTabWidget)
-        self.gridLayout.addWidget(self.detailsWidget, 4, 0, 1, 3)
-        self.buttonPanelWidget = QtGui.QWidget(TaurusMessagePanel)
-        self.buttonPanelWidget.setObjectName("buttonPanelWidget")
-        self.horizontalLayout = QtGui.QHBoxLayout(self.buttonPanelWidget)
-        self.horizontalLayout.setMargin(0)
-        self.horizontalLayout.setObjectName("horizontalLayout")
-        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.horizontalLayout.addItem(spacerItem)
-        self.showDetailsButton = QtGui.QPushButton(self.buttonPanelWidget)
-        self.showDetailsButton.setCheckable(True)
-        self.showDetailsButton.setObjectName("showDetailsButton")
-        self.horizontalLayout.addWidget(self.showDetailsButton)
-        self.reportComboBox = QtGui.QComboBox(self.buttonPanelWidget)
-        self.reportComboBox.setObjectName("reportComboBox")
-        self.horizontalLayout.addWidget(self.reportComboBox)
-        self.buttonBox = QtGui.QDialogButtonBox(self.buttonPanelWidget)
-        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok)
-        self.buttonBox.setObjectName("buttonBox")
-        self.horizontalLayout.addWidget(self.buttonBox)
-        self.gridLayout.addWidget(self.buttonPanelWidget, 3, 0, 1, 3)
-        self.checkBox = QtGui.QCheckBox(TaurusMessagePanel)
-        self.checkBox.setObjectName("checkBox")
-        self.gridLayout.addWidget(self.checkBox, 5, 0, 1, 1)
-        self.iconTextLayout = QtGui.QHBoxLayout()
-        self.iconTextLayout.setObjectName("iconTextLayout")
-        self.iconLabel = QtGui.QLabel(TaurusMessagePanel)
-        self.iconLabel.setObjectName("iconLabel")
-        self.iconTextLayout.addWidget(self.iconLabel)
-        self.textLabel = QtGui.QLabel(TaurusMessagePanel)
-        self.textLabel.setObjectName("textLabel")
-        self.iconTextLayout.addWidget(self.textLabel)
-        self.gridLayout.addLayout(self.iconTextLayout, 1, 0, 2, 3)
-
-        self.retranslateUi(TaurusMessagePanel)
-        self.detailsTabWidget.setCurrentIndex(0)
-        QtCore.QMetaObject.connectSlotsByName(TaurusMessagePanel)
-
-    def retranslateUi(self, TaurusMessagePanel):
-        TaurusMessagePanel.setWindowTitle(QtGui.QApplication.translate("TaurusMessagePanel", "Form", None, QtGui.QApplication.UnicodeUTF8))
-        self.detailsTabWidget.setTabText(self.detailsTabWidget.indexOf(self.tabDetails), QtGui.QApplication.translate("TaurusMessagePanel", "Details", None, QtGui.QApplication.UnicodeUTF8))
-        self.detailsTabWidget.setTabText(self.detailsTabWidget.indexOf(self.tabOrigin), QtGui.QApplication.translate("TaurusMessagePanel", "Origin", None, QtGui.QApplication.UnicodeUTF8))
-        self.showDetailsButton.setText(QtGui.QApplication.translate("TaurusMessagePanel", "Show Details...", None, QtGui.QApplication.UnicodeUTF8))
-        self.reportComboBox.setToolTip(QtGui.QApplication.translate("TaurusMessagePanel", "Report error message", None, QtGui.QApplication.UnicodeUTF8))
-        self.checkBox.setText(QtGui.QApplication.translate("TaurusMessagePanel", "Don\'t show this message again", None, QtGui.QApplication.UnicodeUTF8))
-        self.iconLabel.setText(QtGui.QApplication.translate("TaurusMessagePanel", "iconLabel", None, QtGui.QApplication.UnicodeUTF8))
-        self.textLabel.setText(QtGui.QApplication.translate("TaurusMessagePanel", "textLabel", None, QtGui.QApplication.UnicodeUTF8))
-
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    TaurusMessagePanel = QtGui.QWidget()
-    ui = Ui_TaurusMessagePanel()
-    ui.setupUi(TaurusMessagePanel)
-    TaurusMessagePanel.show()
-    sys.exit(app.exec_())
-
diff --git a/lib/taurus/qt/qtgui/plot/arrayedit.py b/lib/taurus/qt/qtgui/plot/arrayedit.py
index 33ccbab..24d15aa 100644
--- a/lib/taurus/qt/qtgui/plot/arrayedit.py
+++ b/lib/taurus/qt/qtgui/plot/arrayedit.py
@@ -29,21 +29,17 @@ arrayedit.py: Widget for editing a spectrum/array via control points
 
 
 import numpy
-from taurus.qt import Qt, Qwt5
+from taurus.external.qt import Qt, Qwt5
+from taurus.qt.qtgui.util.ui import UILoadable
 from curvesAppearanceChooserDlg import CurveAppearanceProperties 
 
-import ui.ui_EditCPointsDialog as ui_EditCPointsDialog
-import ui.ui_AddCPointsDialog as ui_AddCPointsDialog
-import ui.ui_ArrayEditor as ui_ArrayEditor
-import ui.ui_ControllerBox as ui_ControllerBox
 
-
-
-class ControllerBox(Qt.QWidget, ui_ControllerBox.Ui_ControllerBox):
+ at UILoadable
+class ControllerBox(Qt.QWidget):
     
     def __init__(self, parent=None, x=0, y=0, corr=0):
         Qt.QWidget.__init__(self, parent)
-        self.setupUi(self)
+        self.loadUi()
         self._x = x
         self.setY(y)
         self.box.setTitle('x=%6g'%self._x)
@@ -71,25 +67,29 @@ class ControllerBox(Qt.QWidget, ui_ControllerBox.Ui_ControllerBox):
         enable = (self._y + self.corrSB.value()) != 0
         self.lScaleBT.setEnabled(enable)
         self.rScaleBT.setEnabled(enable)
-                
-class EditCPointsDialog(Qt.QDialog, ui_EditCPointsDialog.Ui_EditCPointsDialog):
+
+
+ at UILoadable
+class EditCPointsDialog(Qt.QDialog):
     
     def __init__(self, parent=None, x=0):
         Qt.QDialog.__init__(self, parent)
         self.setupUi(self)
-        
-class AddCPointsDialog(Qt.QDialog, ui_AddCPointsDialog.Ui_AddCPointsDialog):
+
+ at UILoadable
+class AddCPointsDialog(Qt.QDialog):
     
     def __init__(self, parent=None, x=0):
         Qt.QDialog.__init__(self, parent)
-        self.setupUi(self)
+        self.loadUi()
         
 
-class ArrayEditor(Qt.QWidget, ui_ArrayEditor.Ui_ArrayEditor):
+ at UILoadable
+class ArrayEditor(Qt.QWidget):
     
     def __init__(self, parent=None):
         Qt.QWidget.__init__(self, parent)
-        self.setupUi(self)
+        self.loadUi()
         
         self._controllers = []
         
diff --git a/lib/taurus/qt/qtgui/plot/curveStatsDlg.py b/lib/taurus/qt/qtgui/plot/curveStatsDlg.py
index 2c71e54..2208dca 100644
--- a/lib/taurus/qt/qtgui/plot/curveStatsDlg.py
+++ b/lib/taurus/qt/qtgui/plot/curveStatsDlg.py
@@ -29,12 +29,13 @@ curvesAppearanceChooserDlg.py:
     for a QwtPlot-derived widget (like Taurusplot)
 """
 
-from taurus.qt import Qt, Qwt5
-from ui.ui_CurveStatsDialog import  Ui_CurveStatsDialog
+from taurus.external.qt import Qt, Qwt5
 from datetime import datetime
 from taurus.qt.qtgui.resource import getIcon, getThemeIcon
+from taurus.qt.qtgui.util.ui import UILoadable
 
 
+ at UILoadable(with_ui='ui')
 class CurveStatsDialog(Qt.QDialog):
     """
     A dialog for configuring and displaying statistics from  curves of a plot
@@ -43,8 +44,7 @@ class CurveStatsDialog(Qt.QDialog):
     statColumns = ('points','min', 'max', 'mean', 'std', 'rms')
     def __init__(self, parent=None):
         super(CurveStatsDialog,self).__init__(parent)
-        self.ui = Ui_CurveStatsDialog()
-        self.ui.setupUi(self)
+        self.loadUi()
         
         plot = parent
         xIsTime = plot.getXIsTime()
diff --git a/lib/taurus/qt/qtgui/plot/curveprops.py b/lib/taurus/qt/qtgui/plot/curveprops.py
index 6211e2a..2faa83b 100644
--- a/lib/taurus/qt/qtgui/plot/curveprops.py
+++ b/lib/taurus/qt/qtgui/plot/curveprops.py
@@ -31,12 +31,12 @@ __all__=['CurveConf','CurvesTableModel','ExtendedSelectionModel','CurvePropertie
 
 import copy, re
 
-from taurus.qt import Qt, Qwt5
+from taurus.external.qt import Qt, Qwt5
 import taurus
 import taurus.core
 from taurus.qt.qtgui.resource import getThemeIcon
-from ui.ui_CurvePropertiesView import Ui_CurvePropertiesView
 from taurus.qt.qtcore.mimetypes import TAURUS_MODEL_LIST_MIME_TYPE, TAURUS_ATTR_MIME_TYPE
+from taurus.qt.qtgui.util.ui import UILoadable
 
 from curvesAppearanceChooserDlg import NamedLineStyles, ReverseNamedLineStyles, \
                                        NamedCurveStyles, ReverseNamedCurveStyles, \
@@ -332,9 +332,7 @@ class ExtendedSelectionModel(Qt.QItemSelectionModel):
         return [model.index(row, 0) for row in temp]
 
 
-
-
-
+ at UILoadable(with_ui='ui')
 class CurvePropertiesView(Qt.QAbstractItemView):
     '''This widget is a view on a CurvesTableModel. It displays and allows to change the 
     properties of selected curve(s). Note that this widget does not allow to
@@ -343,11 +341,7 @@ class CurvePropertiesView(Qt.QAbstractItemView):
     '''
     def __init__(self, parent=None, designMode=False):
         super(CurvePropertiesView,self).__init__(parent)
-        
-        self.ui = Ui_CurvePropertiesView()
-        self.ui.setupUi(self)
-        
-        
+        self.loadUi()
         
         self.ui.sStyleCB.insertItems(0,sorted(NamedSymbolStyles.values()))
         self.ui.lStyleCB.insertItems(0,NamedLineStyles.values())
diff --git a/lib/taurus/qt/qtgui/plot/curvesAppearanceChooserDlg.py b/lib/taurus/qt/qtgui/plot/curvesAppearanceChooserDlg.py
index f37d063..106dccb 100644
--- a/lib/taurus/qt/qtgui/plot/curvesAppearanceChooserDlg.py
+++ b/lib/taurus/qt/qtgui/plot/curvesAppearanceChooserDlg.py
@@ -29,12 +29,14 @@ curvesAppearanceChooserDlg.py:
     for a QwtPlot-derived widget (like Taurusplot)
 """
 
-from taurus.qt import Qt, Qwt5
-from ui import ui_curvesAppearanceChooser
-from taurus.qt.qtgui.resource import getIcon
-from taurus.core.util.containers import CaselessDict
 import copy
 
+from taurus.external.qt import Qt, Qwt5
+from taurus.core.util.containers import CaselessDict
+from taurus.qt.qtgui.resource import getIcon
+from taurus.qt.qtgui.util.ui import UILoadable
+
+
 NamedLineStyles={None:"",
                 Qt.Qt.NoPen:"No line",
                 Qt.Qt.SolidLine:"_____",
@@ -81,7 +83,9 @@ for k,v in NamedSymbolStyles.iteritems(): ReverseNamedSymbolStyles[v]=k
 
 NamedColors=["Black","Red","Blue","Magenta","Green","Cyan","Yellow","Gray","White"]
 
-class CurvesAppearanceChooser(Qt.QWidget,ui_curvesAppearanceChooser.Ui_curvesAppearanceChooserDlg):
+
+ at UILoadable
+class CurvesAppearanceChooser(Qt.QWidget):
     """
     A widget for choosing plot appearance for one or more curves.
     The current curves properties are passed using the setCurves() method using
@@ -92,11 +96,13 @@ class CurvesAppearanceChooser(Qt.QWidget,ui_curvesAppearanceChooser.Ui_curvesApp
     where propX is an instance of :class:`CurveAppearanceProperties`
     When applying, a signal is emitted and the chosen properties are made
     available in a similar dictionary. """
+
     NAME_ROLE = Qt.Qt.UserRole
+    
     def __init__(self, parent=None, curvePropDict={}, showButtons=False, autoApply=False, designMode=False):
         #try:
             super(CurvesAppearanceChooser,self).__init__(parent)
-            self.setupUi(self)
+            self.loadUi()
             self.autoApply=autoApply
             self.sStyleCB.insertItems(0,sorted(NamedSymbolStyles.values()))
             self.lStyleCB.insertItems(0,NamedLineStyles.values())
diff --git a/lib/taurus/qt/qtgui/plot/monitor.py b/lib/taurus/qt/qtgui/plot/monitor.py
index 7f37b02..2d4410d 100644
--- a/lib/taurus/qt/qtgui/plot/monitor.py
+++ b/lib/taurus/qt/qtgui/plot/monitor.py
@@ -27,7 +27,7 @@
 monitor.py: Specialized mini-trend widget to monitor some scalar value
 """
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.plot import TaurusTrend
 
 
diff --git a/lib/taurus/qt/qtgui/plot/qwtdialog.py b/lib/taurus/qt/qtgui/plot/qwtdialog.py
index 40e2f00..c44f88d 100644
--- a/lib/taurus/qt/qtgui/plot/qwtdialog.py
+++ b/lib/taurus/qt/qtgui/plot/qwtdialog.py
@@ -27,10 +27,11 @@
 qwtdialog.py: Dialogs for Taurusplot
 """
 
-from taurus.qt import Qt, Qwt5
 import time
 
-from ui.ui_TaurusPlotConfigDialog import Ui_TaurusPlotConfigDialog
+from taurus.external.qt import Qt, Qwt5
+from taurus.qt.qtgui.util.ui import UILoadable
+
 
 #class TaurusPlotConfigCapable:
 #    """This class is aimed to act as an interface for class TaurusPlot. Every class that uses
@@ -51,13 +52,13 @@ from ui.ui_TaurusPlotConfigDialog import Ui_TaurusPlotConfigDialog
 #    def setAxisScaleType(self, axis=None, scale=None):
 #        raise NotImplementedError, "TaurusPlotConfigCapable: method setAxisScaleType() not implemented in child class"
 
+
+ at UILoadable(with_ui='ui')
 class TaurusPlotConfigDialog(Qt.QDialog):
     """This class is used to build and manage the plot configuration dialog. It
-    has been designed using the qt designer application, translating it into
-    python code, and finally importing the file ui_TaurusPlotConfigDialog to use
-    setupUI() and retranslateUI() functions. Hence, if you need to modify the
-    dialog, you can use the TaurusPlotConfig.ui file (under ui directory) to make
-    it easier."""
+    has been designed using the qt designer application, and then loaded to this
+    widget. Hence, if you need to modify the dialog, you can use the
+    TaurusPlotConfigDialog.ui file (under ui directory) to make it easier."""
 
     def __init__(self, parent=None, flags=Qt.Qt.WindowFlags()):
         self.parent = parent
@@ -65,8 +66,7 @@ class TaurusPlotConfigDialog(Qt.QDialog):
         #    raise NotImplementedError, "Parent object doesn't implement TaurusPlotConfigCapable class"
         #call qt designer generated functions to initialize GUI
         Qt.QDialog.__init__(self, parent, flags)
-        self.ui = Ui_TaurusPlotConfigDialog()
-        self.ui.setupUi(self)
+        self.loadUi()
         
         #insert the CurvesAppearanceWidget 
         #(@TODO:must be changed to be done directly in the ui, but I couldn't make the widget available to TaurusDesigner)
diff --git a/lib/taurus/qt/qtgui/plot/scales.py b/lib/taurus/qt/qtgui/plot/scales.py
index c652b80..046c590 100644
--- a/lib/taurus/qt/qtgui/plot/scales.py
+++ b/lib/taurus/qt/qtgui/plot/scales.py
@@ -33,7 +33,7 @@ __all__=["DateTimeScaleEngine", "DeltaTimeScaleEngine", "FixedLabelsScaleEngine"
 import numpy
 from datetime import datetime, timedelta
 from time import mktime
-from taurus.qt import Qt, Qwt5
+from taurus.external.qt import Qt, Qwt5
 
     
 def _getDefaultAxisLabelsAlignment(axis, rotation):
diff --git a/lib/taurus/qt/qtgui/plot/taurusarrayedit.py b/lib/taurus/qt/qtgui/plot/taurusarrayedit.py
index d07e360..1eb9968 100644
--- a/lib/taurus/qt/qtgui/plot/taurusarrayedit.py
+++ b/lib/taurus/qt/qtgui/plot/taurusarrayedit.py
@@ -25,7 +25,7 @@
 
 
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 import taurus
 import numpy
 
diff --git a/lib/taurus/qt/qtgui/plot/taurusplot.py b/lib/taurus/qt/qtgui/plot/taurusplot.py
index eccc31d..aa27b07 100644
--- a/lib/taurus/qt/qtgui/plot/taurusplot.py
+++ b/lib/taurus/qt/qtgui/plot/taurusplot.py
@@ -33,7 +33,7 @@ import copy
 from datetime import datetime
 import time
 import numpy
-from taurus.qt import Qt, Qwt5
+from taurus.external.qt import Qt, Qwt5
 
 import PyTango
 
diff --git a/lib/taurus/qt/qtgui/plot/taurusplotconf.py b/lib/taurus/qt/qtgui/plot/taurusplotconf.py
index f849a71..bb9b32a 100644
--- a/lib/taurus/qt/qtgui/plot/taurusplotconf.py
+++ b/lib/taurus/qt/qtgui/plot/taurusplotconf.py
@@ -32,14 +32,16 @@ __all__ = ['TaurusPlotConfDlg']
 raise NotImplementedError('Under Construction!')
 
 import taurus.core
-from taurus.qt import Qt, Qwt5
-from ui.ui_TaurusPlotConf import Ui_TaurusPlotConfDlg
+from taurus.external.qt import Qt, Qwt5
+from taurus.qt.qtgui.util.ui import UILoadable
+
 import curveprops
 try:
     import taurus.qt.qtgui.extra_nexus as extra_nexus
 except:
     extra_nexus = None
- 
+
+ at UILoadable(with_ui='ui')
 class TaurusPlotConfDlg(Qt.QWidget):
     ''' A configuration dialog for TaurusPlot.
     
@@ -64,9 +66,7 @@ class TaurusPlotConfDlg(Qt.QWidget):
     
     def __init__(self, parent=None, curves=None):
         super(TaurusPlotConfDlg,self).__init__(parent)
-        
-        self.ui = Ui_TaurusPlotConfDlg()
-        self.ui.setupUi(self)
+        self.loadUi()
         
         ###################################
         #@todo: this block should disappear once we can use taurusuic4 to include taurus widgets
diff --git a/lib/taurus/qt/qtgui/plot/taurustrend.py b/lib/taurus/qt/qtgui/plot/taurustrend.py
index a4687b8..718c6d0 100644
--- a/lib/taurus/qt/qtgui/plot/taurustrend.py
+++ b/lib/taurus/qt/qtgui/plot/taurustrend.py
@@ -26,19 +26,20 @@
 """
 taurustrend.py: Generic trend widget for Taurus
 """
-__all__=["ScanTrendsSet", "TaurusTrend", "TaurusTrendsSet"]
+__all__ = ["ScanTrendsSet", "TaurusTrend", "TaurusTrendsSet"]
 
 from datetime import datetime
 import time
 import numpy
 import re
 import gc
-from taurus.qt import Qt, Qwt5
+from taurus.external.qt import Qt, Qwt5
 
 import taurus.core
 from taurus.core.util.containers import CaselessDict, CaselessList, ArrayBuffer
 from taurus.qt.qtgui.base import TaurusBaseComponent
 from taurus.qt.qtgui.plot import TaurusPlot
+
 import PyTango
 
 def getArchivedTrendValues(*args, **kwargs):
@@ -48,7 +49,6 @@ def getArchivedTrendValues(*args, **kwargs):
     except:
         return []
 
-from taurus.qt.qtcore.tango.sardana.macroserver import QDoor
 
 def stripShape(s):
     '''
@@ -772,6 +772,7 @@ class ScanTrendsSet(TaurusTrendsSet):
         
         :param qdoor: (QDoor or str) either a QDoor instance or the QDoor name
         '''
+        from sardana.taurus.qt.qtcore.tango.sardana.macroserver import QDoor
         if not isinstance(qdoor, QDoor): qdoor = taurus.Device(qdoor)
         self.connect(qdoor, Qt.SIGNAL("recordDataUpdated"), self.scanDataReceived)
         
@@ -781,6 +782,7 @@ class ScanTrendsSet(TaurusTrendsSet):
         
         :param qdoor: (QDoor or str) either a QDoor instance or the QDoor name
         '''
+        from sardana.taurus.qt.qtcore.tango.sardana.macroserver import QDoor
         if not isinstance(qdoor, QDoor): qdoor = taurus.Device(qdoor)
         self.disconnect(qdoor, Qt.SIGNAL("recordDataUpdated"), self.scanDataReceived)
     
diff --git a/lib/taurus/qt/qtgui/plot/ui/curvesAppearanceChooser.ui b/lib/taurus/qt/qtgui/plot/ui/CurvesAppearanceChooser.ui
similarity index 100%
rename from lib/taurus/qt/qtgui/plot/ui/curvesAppearanceChooser.ui
rename to lib/taurus/qt/qtgui/plot/ui/CurvesAppearanceChooser.ui
diff --git a/lib/taurus/qt/qtgui/plot/ui/TaurusPlotConf.ui b/lib/taurus/qt/qtgui/plot/ui/TaurusPlotConfDlg.ui
similarity index 100%
rename from lib/taurus/qt/qtgui/plot/ui/TaurusPlotConf.ui
rename to lib/taurus/qt/qtgui/plot/ui/TaurusPlotConfDlg.ui
diff --git a/lib/taurus/qt/qtgui/plot/ui/ui_AddCPointsDialog.py b/lib/taurus/qt/qtgui/plot/ui/ui_AddCPointsDialog.py
deleted file mode 100644
index 4eae346..0000000
--- a/lib/taurus/qt/qtgui/plot/ui/ui_AddCPointsDialog.py
+++ /dev/null
@@ -1,98 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file '/home/cpascual/src/taurus/widget/qwt/ui/AddCPointsDialog.ui'
-#
-# Created: Fri Aug 21 16:24:23 2009
-#      by: PyQt4 UI code generator 4.3.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_AddCPointsDialog(object):
-    def setupUi(self, AddCPointsDialog):
-        AddCPointsDialog.setObjectName("AddCPointsDialog")
-        AddCPointsDialog.resize(QtCore.QSize(QtCore.QRect(0,0,367,127).size()).expandedTo(AddCPointsDialog.minimumSizeHint()))
-
-        self.vboxlayout = QtGui.QVBoxLayout(AddCPointsDialog)
-        self.vboxlayout.setObjectName("vboxlayout")
-
-        self.gridlayout = QtGui.QGridLayout()
-        self.gridlayout.setObjectName("gridlayout")
-
-        self.label = QtGui.QLabel(AddCPointsDialog)
-        self.label.setObjectName("label")
-        self.gridlayout.addWidget(self.label,0,0,1,2)
-
-        self.singleCPointXSB = QtGui.QDoubleSpinBox(AddCPointsDialog)
-
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred,QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.singleCPointXSB.sizePolicy().hasHeightForWidth())
-        self.singleCPointXSB.setSizePolicy(sizePolicy)
-        self.singleCPointXSB.setMinimumSize(QtCore.QSize(50,0))
-        self.singleCPointXSB.setMinimum(-1e+300)
-        self.singleCPointXSB.setMaximum(1e+300)
-        self.singleCPointXSB.setObjectName("singleCPointXSB")
-        self.gridlayout.addWidget(self.singleCPointXSB,0,2,1,1)
-
-        self.addSingleCPointBT = QtGui.QPushButton(AddCPointsDialog)
-        self.addSingleCPointBT.setObjectName("addSingleCPointBT")
-        self.gridlayout.addWidget(self.addSingleCPointBT,0,3,1,1)
-
-        self.regEspCPointsSB = QtGui.QSpinBox(AddCPointsDialog)
-
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred,QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.regEspCPointsSB.sizePolicy().hasHeightForWidth())
-        self.regEspCPointsSB.setSizePolicy(sizePolicy)
-        self.regEspCPointsSB.setMinimum(1)
-        self.regEspCPointsSB.setObjectName("regEspCPointsSB")
-        self.gridlayout.addWidget(self.regEspCPointsSB,1,0,1,1)
-
-        self.label_2 = QtGui.QLabel(AddCPointsDialog)
-        self.label_2.setObjectName("label_2")
-        self.gridlayout.addWidget(self.label_2,1,1,1,2)
-
-        self.addRegEspCPointsBT = QtGui.QPushButton(AddCPointsDialog)
-        self.addRegEspCPointsBT.setObjectName("addRegEspCPointsBT")
-        self.gridlayout.addWidget(self.addRegEspCPointsBT,1,3,1,1)
-        self.vboxlayout.addLayout(self.gridlayout)
-
-        self.hboxlayout = QtGui.QHBoxLayout()
-        self.hboxlayout.setObjectName("hboxlayout")
-
-        self.cleanBT = QtGui.QPushButton(AddCPointsDialog)
-        self.cleanBT.setObjectName("cleanBT")
-        self.hboxlayout.addWidget(self.cleanBT)
-
-        self.editBT = QtGui.QPushButton(AddCPointsDialog)
-        self.editBT.setObjectName("editBT")
-        self.hboxlayout.addWidget(self.editBT)
-
-        spacerItem = QtGui.QSpacerItem(40,20,QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Minimum)
-        self.hboxlayout.addItem(spacerItem)
-
-        self.buttonBox = QtGui.QDialogButtonBox(AddCPointsDialog)
-        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
-        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Close)
-        self.buttonBox.setObjectName("buttonBox")
-        self.hboxlayout.addWidget(self.buttonBox)
-        self.vboxlayout.addLayout(self.hboxlayout)
-
-        self.retranslateUi(AddCPointsDialog)
-        QtCore.QObject.connect(self.buttonBox,QtCore.SIGNAL("accepted()"),AddCPointsDialog.accept)
-        QtCore.QObject.connect(self.buttonBox,QtCore.SIGNAL("rejected()"),AddCPointsDialog.reject)
-        QtCore.QMetaObject.connectSlotsByName(AddCPointsDialog)
-
-    def retranslateUi(self, AddCPointsDialog):
-        AddCPointsDialog.setWindowTitle(QtGui.QApplication.translate("AddCPointsDialog", "Add Control Points", None, QtGui.QApplication.UnicodeUTF8))
-        self.label.setText(QtGui.QApplication.translate("AddCPointsDialog", "Single Control Point at x=", None, QtGui.QApplication.UnicodeUTF8))
-        self.addSingleCPointBT.setText(QtGui.QApplication.translate("AddCPointsDialog", "Add", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_2.setText(QtGui.QApplication.translate("AddCPointsDialog", "Regularly spaced Control Points", None, QtGui.QApplication.UnicodeUTF8))
-        self.addRegEspCPointsBT.setText(QtGui.QApplication.translate("AddCPointsDialog", "Add", None, QtGui.QApplication.UnicodeUTF8))
-        self.cleanBT.setText(QtGui.QApplication.translate("AddCPointsDialog", "Clean", None, QtGui.QApplication.UnicodeUTF8))
-        self.editBT.setText(QtGui.QApplication.translate("AddCPointsDialog", "Edit", None, QtGui.QApplication.UnicodeUTF8))
-
diff --git a/lib/taurus/qt/qtgui/plot/ui/ui_ArrayEditor.py b/lib/taurus/qt/qtgui/plot/ui/ui_ArrayEditor.py
deleted file mode 100644
index 14047f7..0000000
--- a/lib/taurus/qt/qtgui/plot/ui/ui_ArrayEditor.py
+++ /dev/null
@@ -1,70 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'ArrayEditor.ui'
-#
-# Created: Thu Sep 30 15:22:10 2010
-#      by: PyQt4 UI code generator 4.7.2
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_ArrayEditor(object):
-    def setupUi(self, ArrayEditor):
-        ArrayEditor.setObjectName("ArrayEditor")
-        ArrayEditor.resize(879, 654)
-        self.vboxlayout = QtGui.QVBoxLayout(ArrayEditor)
-        self.vboxlayout.setObjectName("vboxlayout")
-        self.plot1 = TaurusPlot(ArrayEditor)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(2)
-        sizePolicy.setHeightForWidth(self.plot1.sizePolicy().hasHeightForWidth())
-        self.plot1.setSizePolicy(sizePolicy)
-        self.plot1.setMinimumSize(QtCore.QSize(400, 150))
-        self.plot1.setAllowZoomers(False)
-        self.plot1.setObjectName("plot1")
-        self.vboxlayout.addWidget(self.plot1)
-        self.plot2 = TaurusPlot(ArrayEditor)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(1)
-        sizePolicy.setHeightForWidth(self.plot2.sizePolicy().hasHeightForWidth())
-        self.plot2.setSizePolicy(sizePolicy)
-        self.plot2.setMinimumSize(QtCore.QSize(400, 150))
-        self.plot2.setAllowZoomers(False)
-        self.plot2.setObjectName("plot2")
-        self.vboxlayout.addWidget(self.plot2)
-        self.cpointsGroupBox = QtGui.QGroupBox(ArrayEditor)
-        self.cpointsGroupBox.setMinimumSize(QtCore.QSize(0, 180))
-        self.cpointsGroupBox.setObjectName("cpointsGroupBox")
-        self.hboxlayout = QtGui.QHBoxLayout(self.cpointsGroupBox)
-        self.hboxlayout.setContentsMargins(0, 0, 1, 1)
-        self.hboxlayout.setObjectName("hboxlayout")
-        self.controllersContainer = QtGui.QWidget(self.cpointsGroupBox)
-        self.controllersContainer.setObjectName("controllersContainer")
-        self.hboxlayout.addWidget(self.controllersContainer)
-        self.vboxlayout1 = QtGui.QVBoxLayout()
-        self.vboxlayout1.setObjectName("vboxlayout1")
-        spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.vboxlayout1.addItem(spacerItem)
-        self.addCPointsBT = QtGui.QPushButton(self.cpointsGroupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.addCPointsBT.sizePolicy().hasHeightForWidth())
-        self.addCPointsBT.setSizePolicy(sizePolicy)
-        self.addCPointsBT.setObjectName("addCPointsBT")
-        self.vboxlayout1.addWidget(self.addCPointsBT)
-        self.hboxlayout.addLayout(self.vboxlayout1)
-        self.vboxlayout.addWidget(self.cpointsGroupBox)
-
-        self.retranslateUi(ArrayEditor)
-        QtCore.QMetaObject.connectSlotsByName(ArrayEditor)
-
-    def retranslateUi(self, ArrayEditor):
-        ArrayEditor.setWindowTitle(QtGui.QApplication.translate("ArrayEditor", "ArrayEditor", None, QtGui.QApplication.UnicodeUTF8))
-        self.cpointsGroupBox.setTitle(QtGui.QApplication.translate("ArrayEditor", "Control Points", None, QtGui.QApplication.UnicodeUTF8))
-        self.addCPointsBT.setText(QtGui.QApplication.translate("ArrayEditor", "Add...", None, QtGui.QApplication.UnicodeUTF8))
-
-from taurus.qt.qtgui.plot import TaurusPlot
diff --git a/lib/taurus/qt/qtgui/plot/ui/ui_ControllerBox.py b/lib/taurus/qt/qtgui/plot/ui/ui_ControllerBox.py
deleted file mode 100644
index 8b1ab6a..0000000
--- a/lib/taurus/qt/qtgui/plot/ui/ui_ControllerBox.py
+++ /dev/null
@@ -1,105 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file '/home/cpascual/src/svn/taurus/widget/qwt/ui/ControllerBox.ui'
-#
-# Created: Mon Jan 25 12:21:47 2010
-#      by: PyQt4 UI code generator 4.3.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_ControllerBox(object):
-    def setupUi(self, ControllerBox):
-        ControllerBox.setObjectName("ControllerBox")
-        ControllerBox.resize(QtCore.QSize(QtCore.QRect(0,0,118,130).size()).expandedTo(ControllerBox.minimumSizeHint()))
-
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed,QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(ControllerBox.sizePolicy().hasHeightForWidth())
-        ControllerBox.setSizePolicy(sizePolicy)
-
-        self.vboxlayout = QtGui.QVBoxLayout(ControllerBox)
-        self.vboxlayout.setObjectName("vboxlayout")
-
-        self.box = QtGui.QGroupBox(ControllerBox)
-
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Maximum,QtGui.QSizePolicy.Maximum)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.box.sizePolicy().hasHeightForWidth())
-        self.box.setSizePolicy(sizePolicy)
-        self.box.setMinimumSize(QtCore.QSize(100,0))
-        self.box.setFlat(False)
-        self.box.setCheckable(False)
-        self.box.setObjectName("box")
-
-        self.vboxlayout1 = QtGui.QVBoxLayout(self.box)
-        self.vboxlayout1.setMargin(2)
-        self.vboxlayout1.setObjectName("vboxlayout1")
-
-        self.corrSB = QtGui.QDoubleSpinBox(self.box)
-
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Maximum,QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(252)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.corrSB.sizePolicy().hasHeightForWidth())
-        self.corrSB.setSizePolicy(sizePolicy)
-        self.corrSB.setAccelerated(True)
-        self.corrSB.setMinimum(-1e+99)
-        self.corrSB.setMaximum(1e+99)
-        self.corrSB.setProperty("value",QtCore.QVariant(0.0))
-        self.corrSB.setObjectName("corrSB")
-        self.vboxlayout1.addWidget(self.corrSB)
-
-        self.splitter_2 = QtGui.QSplitter(self.box)
-        self.splitter_2.setOrientation(QtCore.Qt.Horizontal)
-        self.splitter_2.setObjectName("splitter_2")
-
-        self.lCopyBT = QtGui.QToolButton(self.splitter_2)
-        self.lCopyBT.setObjectName("lCopyBT")
-
-        self.rCopyBT = QtGui.QToolButton(self.splitter_2)
-        self.rCopyBT.setObjectName("rCopyBT")
-        self.vboxlayout1.addWidget(self.splitter_2)
-
-        self.splitter = QtGui.QSplitter(self.box)
-        self.splitter.setOrientation(QtCore.Qt.Horizontal)
-        self.splitter.setObjectName("splitter")
-
-        self.lScaleBT = QtGui.QToolButton(self.splitter)
-        self.lScaleBT.setObjectName("lScaleBT")
-
-        self.rScaleBT = QtGui.QToolButton(self.splitter)
-        self.rScaleBT.setObjectName("rScaleBT")
-        self.vboxlayout1.addWidget(self.splitter)
-        self.vboxlayout.addWidget(self.box)
-
-        self.retranslateUi(ControllerBox)
-        QtCore.QMetaObject.connectSlotsByName(ControllerBox)
-
-    def retranslateUi(self, ControllerBox):
-        ControllerBox.setWindowTitle(QtGui.QApplication.translate("ControllerBox", "ControlBox", None, QtGui.QApplication.UnicodeUTF8))
-        self.box.setTitle(QtGui.QApplication.translate("ControllerBox", "x=", None, QtGui.QApplication.UnicodeUTF8))
-        self.lCopyBT.setToolTip(QtGui.QApplication.translate("ControllerBox", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Propagate value to the left</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.lCopyBT.setText(QtGui.QApplication.translate("ControllerBox", "<", None, QtGui.QApplication.UnicodeUTF8))
-        self.rCopyBT.setToolTip(QtGui.QApplication.translate("ControllerBox", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Propagate value to the right</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.rCopyBT.setText(QtGui.QApplication.translate("ControllerBox", ">", None, QtGui.QApplication.UnicodeUTF8))
-        self.lScaleBT.setToolTip(QtGui.QApplication.translate("ControllerBox", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Propagate value proportionally to the left</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.lScaleBT.setText(QtGui.QApplication.translate("ControllerBox", "<%", None, QtGui.QApplication.UnicodeUTF8))
-        self.rScaleBT.setToolTip(QtGui.QApplication.translate("ControllerBox", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Propagate value proportionally to the right</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.rScaleBT.setText(QtGui.QApplication.translate("ControllerBox", "%>", None, QtGui.QApplication.UnicodeUTF8))
-
diff --git a/lib/taurus/qt/qtgui/plot/ui/ui_CurvePropertiesView.py b/lib/taurus/qt/qtgui/plot/ui/ui_CurvePropertiesView.py
deleted file mode 100644
index 97391bb..0000000
--- a/lib/taurus/qt/qtgui/plot/ui/ui_CurvePropertiesView.py
+++ /dev/null
@@ -1,136 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'CurvePropertiesView.ui'
-#
-# Created: Fri Jul 30 12:08:19 2010
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_CurvePropertiesView(object):
-    def setupUi(self, CurvePropertiesView):
-        CurvePropertiesView.setObjectName("CurvePropertiesView")
-        CurvePropertiesView.resize(274, 198)
-        CurvePropertiesView.setMinimumSize(QtCore.QSize(250, 180))
-        self.horizontalLayout = QtGui.QHBoxLayout(CurvePropertiesView)
-        self.horizontalLayout.setObjectName("horizontalLayout")
-        self.lineGB = QtGui.QGroupBox(CurvePropertiesView)
-        self.lineGB.setObjectName("lineGB")
-        self._2 = QtGui.QGridLayout(self.lineGB)
-        self._2.setObjectName("_2")
-        self.label_4 = QtGui.QLabel(self.lineGB)
-        self.label_4.setObjectName("label_4")
-        self._2.addWidget(self.label_4, 0, 0, 1, 1)
-        self.lStyleCB = QtGui.QComboBox(self.lineGB)
-        self.lStyleCB.setObjectName("lStyleCB")
-        self._2.addWidget(self.lStyleCB, 0, 1, 1, 1)
-        self.label_5 = QtGui.QLabel(self.lineGB)
-        self.label_5.setObjectName("label_5")
-        self._2.addWidget(self.label_5, 1, 0, 1, 1)
-        self.lWidthSB = QtGui.QSpinBox(self.lineGB)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.lWidthSB.sizePolicy().hasHeightForWidth())
-        self.lWidthSB.setSizePolicy(sizePolicy)
-        self.lWidthSB.setMinimum(-1)
-        self.lWidthSB.setMaximum(10)
-        self.lWidthSB.setProperty("value", QtCore.QVariant(1))
-        self.lWidthSB.setObjectName("lWidthSB")
-        self._2.addWidget(self.lWidthSB, 1, 1, 1, 1)
-        self.label_6 = QtGui.QLabel(self.lineGB)
-        self.label_6.setObjectName("label_6")
-        self._2.addWidget(self.label_6, 2, 0, 1, 1)
-        self.lColorCB = QtGui.QComboBox(self.lineGB)
-        self.lColorCB.setObjectName("lColorCB")
-        self._2.addWidget(self.lColorCB, 2, 1, 1, 1)
-        self.labelCurveStyle = QtGui.QLabel(self.lineGB)
-        self.labelCurveStyle.setObjectName("labelCurveStyle")
-        self._2.addWidget(self.labelCurveStyle, 3, 0, 1, 1)
-        self.cStyleCB = QtGui.QComboBox(self.lineGB)
-        self.cStyleCB.setObjectName("cStyleCB")
-        self._2.addWidget(self.cStyleCB, 3, 1, 1, 1)
-        self.cFillCB = QtGui.QCheckBox(self.lineGB)
-        self.cFillCB.setTristate(True)
-        self.cFillCB.setObjectName("cFillCB")
-        self._2.addWidget(self.cFillCB, 4, 0, 1, 2)
-        self.horizontalLayout.addWidget(self.lineGB)
-        self.symbolGB = QtGui.QGroupBox(CurvePropertiesView)
-        self.symbolGB.setObjectName("symbolGB")
-        self._3 = QtGui.QGridLayout(self.symbolGB)
-        self._3.setObjectName("_3")
-        self.label = QtGui.QLabel(self.symbolGB)
-        self.label.setObjectName("label")
-        self._3.addWidget(self.label, 0, 0, 1, 1)
-        self.sStyleCB = QtGui.QComboBox(self.symbolGB)
-        self.sStyleCB.setObjectName("sStyleCB")
-        self._3.addWidget(self.sStyleCB, 0, 1, 1, 1)
-        self.label_2 = QtGui.QLabel(self.symbolGB)
-        self.label_2.setObjectName("label_2")
-        self._3.addWidget(self.label_2, 1, 0, 1, 1)
-        self.sSizeSB = QtGui.QSpinBox(self.symbolGB)
-        self.sSizeSB.setMinimum(-1)
-        self.sSizeSB.setMaximum(10)
-        self.sSizeSB.setSingleStep(1)
-        self.sSizeSB.setProperty("value", QtCore.QVariant(3))
-        self.sSizeSB.setObjectName("sSizeSB")
-        self._3.addWidget(self.sSizeSB, 1, 1, 1, 1)
-        self.label_3 = QtGui.QLabel(self.symbolGB)
-        self.label_3.setObjectName("label_3")
-        self._3.addWidget(self.label_3, 2, 0, 1, 1)
-        self.sColorCB = QtGui.QComboBox(self.symbolGB)
-        self.sColorCB.setObjectName("sColorCB")
-        self._3.addWidget(self.sColorCB, 2, 1, 1, 1)
-        self.sFillCB = QtGui.QCheckBox(self.symbolGB)
-        self.sFillCB.setTristate(True)
-        self.sFillCB.setObjectName("sFillCB")
-        self._3.addWidget(self.sFillCB, 3, 0, 1, 2)
-        spacerItem = QtGui.QSpacerItem(111, 16, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self._3.addItem(spacerItem, 4, 0, 1, 2)
-        self.horizontalLayout.addWidget(self.symbolGB)
-        self.label_4.setBuddy(self.lStyleCB)
-        self.label_5.setBuddy(self.lWidthSB)
-        self.label_6.setBuddy(self.lColorCB)
-        self.label.setBuddy(self.sStyleCB)
-        self.label_2.setBuddy(self.sSizeSB)
-        self.label_3.setBuddy(self.sColorCB)
-
-        self.retranslateUi(CurvePropertiesView)
-        QtCore.QMetaObject.connectSlotsByName(CurvePropertiesView)
-
-    def retranslateUi(self, CurvePropertiesView):
-        CurvePropertiesView.setWindowTitle(QtGui.QApplication.translate("CurvePropertiesView", "Form", None, QtGui.QApplication.UnicodeUTF8))
-        self.lineGB.setTitle(QtGui.QApplication.translate("CurvePropertiesView", "Line", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_4.setText(QtGui.QApplication.translate("CurvePropertiesView", "S&tyle", None, QtGui.QApplication.UnicodeUTF8))
-        self.lStyleCB.setToolTip(QtGui.QApplication.translate("CurvePropertiesView", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-"p, li { white-space: pre-wrap; }\n"
-"</style></head><body style=\" font-family:\'Sans Serif\'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
-"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Style of the pen used to connect the points.</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_5.setText(QtGui.QApplication.translate("CurvePropertiesView", "&Width", None, QtGui.QApplication.UnicodeUTF8))
-        self.lWidthSB.setSpecialValueText(QtGui.QApplication.translate("CurvePropertiesView", "--", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_6.setText(QtGui.QApplication.translate("CurvePropertiesView", "C&olor", None, QtGui.QApplication.UnicodeUTF8))
-        self.labelCurveStyle.setText(QtGui.QApplication.translate("CurvePropertiesView", "Mode", None, QtGui.QApplication.UnicodeUTF8))
-        self.cStyleCB.setToolTip(QtGui.QApplication.translate("CurvePropertiesView", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-"p, li { white-space: pre-wrap; }\n"
-"</style></head><body style=\" font-family:\'Sans Serif\'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
-"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Connector mode: how the data points are connected (steps, straight lines,...)</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.cFillCB.setText(QtGui.QApplication.translate("CurvePropertiesView", "&Area Fill", None, QtGui.QApplication.UnicodeUTF8))
-        self.symbolGB.setTitle(QtGui.QApplication.translate("CurvePropertiesView", "Symbols", None, QtGui.QApplication.UnicodeUTF8))
-        self.label.setText(QtGui.QApplication.translate("CurvePropertiesView", "&Style", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_2.setText(QtGui.QApplication.translate("CurvePropertiesView", "Si&ze", None, QtGui.QApplication.UnicodeUTF8))
-        self.sSizeSB.setSpecialValueText(QtGui.QApplication.translate("CurvePropertiesView", "--", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_3.setText(QtGui.QApplication.translate("CurvePropertiesView", "&Color", None, QtGui.QApplication.UnicodeUTF8))
-        self.sFillCB.setText(QtGui.QApplication.translate("CurvePropertiesView", "&Fill", None, QtGui.QApplication.UnicodeUTF8))
-
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    CurvePropertiesView = QtGui.QWidget()
-    ui = Ui_CurvePropertiesView()
-    ui.setupUi(CurvePropertiesView)
-    CurvePropertiesView.show()
-    sys.exit(app.exec_())
-
diff --git a/lib/taurus/qt/qtgui/plot/ui/ui_CurveStatsDialog.py b/lib/taurus/qt/qtgui/plot/ui/ui_CurveStatsDialog.py
deleted file mode 100644
index e6bf21f..0000000
--- a/lib/taurus/qt/qtgui/plot/ui/ui_CurveStatsDialog.py
+++ /dev/null
@@ -1,174 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file '/tmp/tmpCPhivc.ui'
-#
-# Created: Wed Jan 16 09:11:13 2013
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_CurveStatsDialog(object):
-    def setupUi(self, CurveStatsDialog):
-        CurveStatsDialog.setObjectName("CurveStatsDialog")
-        CurveStatsDialog.resize(723, 382)
-        self.gridLayout_2 = QtGui.QGridLayout(CurveStatsDialog)
-        self.gridLayout_2.setObjectName("gridLayout_2")
-        self.groupBox = QtGui.QGroupBox(CurveStatsDialog)
-        self.groupBox.setObjectName("groupBox")
-        self.verticalLayout = QtGui.QVBoxLayout(self.groupBox)
-        self.verticalLayout.setObjectName("verticalLayout")
-        self.horizontalLayout = QtGui.QHBoxLayout()
-        self.horizontalLayout.setObjectName("horizontalLayout")
-        self.minCB = QtGui.QCheckBox(self.groupBox)
-        self.minCB.setObjectName("minCB")
-        self.horizontalLayout.addWidget(self.minCB)
-        self.minSB = QtGui.QDoubleSpinBox(self.groupBox)
-        self.minSB.setEnabled(False)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.minSB.sizePolicy().hasHeightForWidth())
-        self.minSB.setSizePolicy(sizePolicy)
-        self.minSB.setDecimals(5)
-        self.minSB.setObjectName("minSB")
-        self.horizontalLayout.addWidget(self.minSB)
-        self.minDTE = QtGui.QDateTimeEdit(self.groupBox)
-        self.minDTE.setEnabled(False)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.minDTE.sizePolicy().hasHeightForWidth())
-        self.minDTE.setSizePolicy(sizePolicy)
-        self.minDTE.setCurrentSection(QtGui.QDateTimeEdit.YearSection)
-        self.minDTE.setObjectName("minDTE")
-        self.horizontalLayout.addWidget(self.minDTE)
-        self.selectMinPB = QtGui.QToolButton(self.groupBox)
-        self.selectMinPB.setEnabled(True)
-        self.selectMinPB.setObjectName("selectMinPB")
-        self.horizontalLayout.addWidget(self.selectMinPB)
-        self.verticalLayout.addLayout(self.horizontalLayout)
-        self.horizontalLayout_2 = QtGui.QHBoxLayout()
-        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
-        self.maxCB = QtGui.QCheckBox(self.groupBox)
-        self.maxCB.setObjectName("maxCB")
-        self.horizontalLayout_2.addWidget(self.maxCB)
-        self.maxSB = QtGui.QDoubleSpinBox(self.groupBox)
-        self.maxSB.setEnabled(False)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.maxSB.sizePolicy().hasHeightForWidth())
-        self.maxSB.setSizePolicy(sizePolicy)
-        self.maxSB.setDecimals(5)
-        self.maxSB.setObjectName("maxSB")
-        self.horizontalLayout_2.addWidget(self.maxSB)
-        self.maxDTE = QtGui.QDateTimeEdit(self.groupBox)
-        self.maxDTE.setEnabled(False)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.maxDTE.sizePolicy().hasHeightForWidth())
-        self.maxDTE.setSizePolicy(sizePolicy)
-        self.maxDTE.setCurrentSection(QtGui.QDateTimeEdit.YearSection)
-        self.maxDTE.setObjectName("maxDTE")
-        self.horizontalLayout_2.addWidget(self.maxDTE)
-        self.selectMaxPB = QtGui.QToolButton(self.groupBox)
-        self.selectMaxPB.setEnabled(True)
-        self.selectMaxPB.setObjectName("selectMaxPB")
-        self.horizontalLayout_2.addWidget(self.selectMaxPB)
-        self.verticalLayout.addLayout(self.horizontalLayout_2)
-        self.gridLayout_2.addWidget(self.groupBox, 0, 0, 1, 1)
-        self.groupBox_2 = QtGui.QGroupBox(CurveStatsDialog)
-        self.groupBox_2.setObjectName("groupBox_2")
-        self.gridLayout = QtGui.QGridLayout(self.groupBox_2)
-        self.gridLayout.setObjectName("gridLayout")
-        self.npointsStatCB = QtGui.QCheckBox(self.groupBox_2)
-        self.npointsStatCB.setChecked(True)
-        self.npointsStatCB.setObjectName("npointsStatCB")
-        self.gridLayout.addWidget(self.npointsStatCB, 0, 0, 1, 1)
-        self.minStatCB = QtGui.QCheckBox(self.groupBox_2)
-        self.minStatCB.setChecked(True)
-        self.minStatCB.setObjectName("minStatCB")
-        self.gridLayout.addWidget(self.minStatCB, 0, 1, 1, 1)
-        self.stdStatCB = QtGui.QCheckBox(self.groupBox_2)
-        self.stdStatCB.setChecked(True)
-        self.stdStatCB.setObjectName("stdStatCB")
-        self.gridLayout.addWidget(self.stdStatCB, 0, 2, 1, 1)
-        self.meanStatCB = QtGui.QCheckBox(self.groupBox_2)
-        self.meanStatCB.setChecked(True)
-        self.meanStatCB.setObjectName("meanStatCB")
-        self.gridLayout.addWidget(self.meanStatCB, 1, 0, 1, 1)
-        self.maxStatCB = QtGui.QCheckBox(self.groupBox_2)
-        self.maxStatCB.setChecked(True)
-        self.maxStatCB.setObjectName("maxStatCB")
-        self.gridLayout.addWidget(self.maxStatCB, 1, 1, 1, 1)
-        self.rmsStatCB = QtGui.QCheckBox(self.groupBox_2)
-        self.rmsStatCB.setChecked(True)
-        self.rmsStatCB.setObjectName("rmsStatCB")
-        self.gridLayout.addWidget(self.rmsStatCB, 1, 2, 1, 1)
-        self.gridLayout_2.addWidget(self.groupBox_2, 0, 1, 1, 1)
-        self.statsTW = QtGui.QTableWidget(CurveStatsDialog)
-        self.statsTW.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
-        self.statsTW.setSelectionBehavior(QtGui.QAbstractItemView.SelectRows)
-        self.statsTW.setObjectName("statsTW")
-        self.statsTW.setColumnCount(0)
-        self.statsTW.setRowCount(0)
-        self.gridLayout_2.addWidget(self.statsTW, 1, 0, 1, 2)
-        self.horizontalLayout_4 = QtGui.QHBoxLayout()
-        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
-        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.horizontalLayout_4.addItem(spacerItem)
-        self.calculatePB = QtGui.QPushButton(CurveStatsDialog)
-        self.calculatePB.setObjectName("calculatePB")
-        self.horizontalLayout_4.addWidget(self.calculatePB)
-        self.gridLayout_2.addLayout(self.horizontalLayout_4, 2, 0, 1, 2)
-
-        self.retranslateUi(CurveStatsDialog)
-        QtCore.QObject.connect(self.minCB, QtCore.SIGNAL("toggled(bool)"), self.minSB.setEnabled)
-        QtCore.QObject.connect(self.minCB, QtCore.SIGNAL("toggled(bool)"), self.minDTE.setEnabled)
-        QtCore.QObject.connect(self.maxCB, QtCore.SIGNAL("toggled(bool)"), self.maxSB.setEnabled)
-        QtCore.QObject.connect(self.maxCB, QtCore.SIGNAL("toggled(bool)"), self.maxDTE.setEnabled)
-        QtCore.QMetaObject.connectSlotsByName(CurveStatsDialog)
-
-    def retranslateUi(self, CurveStatsDialog):
-        CurveStatsDialog.setWindowTitle(QtGui.QApplication.translate("CurveStatsDialog", "Curve Stats Dialog", None, QtGui.QApplication.UnicodeUTF8))
-        self.groupBox.setTitle(QtGui.QApplication.translate("CurveStatsDialog", "X limits", None, QtGui.QApplication.UnicodeUTF8))
-        self.minCB.setText(QtGui.QApplication.translate("CurveStatsDialog", "min", None, QtGui.QApplication.UnicodeUTF8))
-        self.minDTE.setDisplayFormat(QtGui.QApplication.translate("CurveStatsDialog", "yyyy-MM-ddThh:mm:ss.zzz", None, QtGui.QApplication.UnicodeUTF8))
-        self.selectMinPB.setToolTip(QtGui.QApplication.translate("CurveStatsDialog", "Select from plot", None, QtGui.QApplication.UnicodeUTF8))
-        self.selectMinPB.setText(QtGui.QApplication.translate("CurveStatsDialog", "...", None, QtGui.QApplication.UnicodeUTF8))
-        self.maxCB.setText(QtGui.QApplication.translate("CurveStatsDialog", "max", None, QtGui.QApplication.UnicodeUTF8))
-        self.maxDTE.setDisplayFormat(QtGui.QApplication.translate("CurveStatsDialog", "yyyy-MM-ddThh:mm:ss.zzz", None, QtGui.QApplication.UnicodeUTF8))
-        self.selectMaxPB.setToolTip(QtGui.QApplication.translate("CurveStatsDialog", "Select from plot", None, QtGui.QApplication.UnicodeUTF8))
-        self.selectMaxPB.setText(QtGui.QApplication.translate("CurveStatsDialog", "...", None, QtGui.QApplication.UnicodeUTF8))
-        self.groupBox_2.setTitle(QtGui.QApplication.translate("CurveStatsDialog", "Stats", None, QtGui.QApplication.UnicodeUTF8))
-        self.npointsStatCB.setToolTip(QtGui.QApplication.translate("CurveStatsDialog", "Number of points considered for the statistical analysis", None, QtGui.QApplication.UnicodeUTF8))
-        self.npointsStatCB.setText(QtGui.QApplication.translate("CurveStatsDialog", "#points", None, QtGui.QApplication.UnicodeUTF8))
-        self.minStatCB.setToolTip(QtGui.QApplication.translate("CurveStatsDialog", "x and y values for the minimum of the curve in the considered range", None, QtGui.QApplication.UnicodeUTF8))
-        self.minStatCB.setText(QtGui.QApplication.translate("CurveStatsDialog", "min", None, QtGui.QApplication.UnicodeUTF8))
-        self.stdStatCB.setToolTip(QtGui.QApplication.translate("CurveStatsDialog", "biased standard deviation:\n"
-"std = sqrt(mean(abs(y - y.mean())**2))", None, QtGui.QApplication.UnicodeUTF8))
-        self.stdStatCB.setText(QtGui.QApplication.translate("CurveStatsDialog", "std", None, QtGui.QApplication.UnicodeUTF8))
-        self.meanStatCB.setToolTip(QtGui.QApplication.translate("CurveStatsDialog", "arithmetic mean", None, QtGui.QApplication.UnicodeUTF8))
-        self.meanStatCB.setText(QtGui.QApplication.translate("CurveStatsDialog", "mean", None, QtGui.QApplication.UnicodeUTF8))
-        self.maxStatCB.setToolTip(QtGui.QApplication.translate("CurveStatsDialog", "x and y values for the maximum of the curve in the considered range", None, QtGui.QApplication.UnicodeUTF8))
-        self.maxStatCB.setText(QtGui.QApplication.translate("CurveStatsDialog", "max", None, QtGui.QApplication.UnicodeUTF8))
-        self.rmsStatCB.setToolTip(QtGui.QApplication.translate("CurveStatsDialog", "Root Mean Square:\n"
-"rms=sqrt(mean(y**2))", None, QtGui.QApplication.UnicodeUTF8))
-        self.rmsStatCB.setText(QtGui.QApplication.translate("CurveStatsDialog", "rms", None, QtGui.QApplication.UnicodeUTF8))
-        self.statsTW.setToolTip(QtGui.QApplication.translate("CurveStatsDialog", "select the curve names for which statistics will be calculated", None, QtGui.QApplication.UnicodeUTF8))
-        self.calculatePB.setToolTip(QtGui.QApplication.translate("CurveStatsDialog", "(re) calculate statistics for the selected curves (or for all curves if None is selected)", None, QtGui.QApplication.UnicodeUTF8))
-        self.calculatePB.setText(QtGui.QApplication.translate("CurveStatsDialog", "(re)calculate", None, QtGui.QApplication.UnicodeUTF8))
-
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    CurveStatsDialog = QtGui.QDialog()
-    ui = Ui_CurveStatsDialog()
-    ui.setupUi(CurveStatsDialog)
-    CurveStatsDialog.show()
-    sys.exit(app.exec_())
-
diff --git a/lib/taurus/qt/qtgui/plot/ui/ui_EditCPointsDialog.py b/lib/taurus/qt/qtgui/plot/ui/ui_EditCPointsDialog.py
deleted file mode 100644
index 3a579b8..0000000
--- a/lib/taurus/qt/qtgui/plot/ui/ui_EditCPointsDialog.py
+++ /dev/null
@@ -1,68 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file '/home/cpascual/src/taurus/widget/qwt/ui/EditCPointsDialog.ui'
-#
-# Created: Thu Aug 20 10:57:57 2009
-#      by: PyQt4 UI code generator 4.3.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_EditCPointsDialog(object):
-    def setupUi(self, EditCPointsDialog):
-        EditCPointsDialog.setObjectName("EditCPointsDialog")
-        EditCPointsDialog.resize(QtCore.QSize(QtCore.QRect(0,0,257,300).size()).expandedTo(EditCPointsDialog.minimumSizeHint()))
-
-        self.vboxlayout = QtGui.QVBoxLayout(EditCPointsDialog)
-        self.vboxlayout.setObjectName("vboxlayout")
-
-        self.hboxlayout = QtGui.QHBoxLayout()
-        self.hboxlayout.setObjectName("hboxlayout")
-
-        self.tableTW = QtGui.QTableWidget(EditCPointsDialog)
-        self.tableTW.setObjectName("tableTW")
-        self.hboxlayout.addWidget(self.tableTW)
-
-        self.vboxlayout1 = QtGui.QVBoxLayout()
-        self.vboxlayout1.setObjectName("vboxlayout1")
-
-        spacerItem = QtGui.QSpacerItem(20,40,QtGui.QSizePolicy.Minimum,QtGui.QSizePolicy.Expanding)
-        self.vboxlayout1.addItem(spacerItem)
-
-        self.delBT = QtGui.QToolButton(EditCPointsDialog)
-        self.delBT.setObjectName("delBT")
-        self.vboxlayout1.addWidget(self.delBT)
-        self.hboxlayout.addLayout(self.vboxlayout1)
-        self.vboxlayout.addLayout(self.hboxlayout)
-
-        self.buttonBox = QtGui.QDialogButtonBox(EditCPointsDialog)
-        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
-        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.NoButton|QtGui.QDialogButtonBox.Ok)
-        self.buttonBox.setObjectName("buttonBox")
-        self.vboxlayout.addWidget(self.buttonBox)
-
-        self.retranslateUi(EditCPointsDialog)
-        QtCore.QObject.connect(self.buttonBox,QtCore.SIGNAL("accepted()"),EditCPointsDialog.accept)
-        QtCore.QObject.connect(self.buttonBox,QtCore.SIGNAL("rejected()"),EditCPointsDialog.reject)
-        QtCore.QMetaObject.connectSlotsByName(EditCPointsDialog)
-
-    def retranslateUi(self, EditCPointsDialog):
-        EditCPointsDialog.setWindowTitle(QtGui.QApplication.translate("EditCPointsDialog", "Edit Control Points", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableTW.clear()
-        self.tableTW.setColumnCount(2)
-        self.tableTW.setRowCount(0)
-
-        headerItem = QtGui.QTableWidgetItem()
-        headerItem.setText(QtGui.QApplication.translate("EditCPointsDialog", "Position", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableTW.setHorizontalHeaderItem(0,headerItem)
-
-        headerItem1 = QtGui.QTableWidgetItem()
-        headerItem1.setText(QtGui.QApplication.translate("EditCPointsDialog", "Correction", None, QtGui.QApplication.UnicodeUTF8))
-        self.tableTW.setHorizontalHeaderItem(1,headerItem1)
-        self.delBT.setToolTip(QtGui.QApplication.translate("EditCPointsDialog", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Delete selected</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.delBT.setText(QtGui.QApplication.translate("EditCPointsDialog", "D", None, QtGui.QApplication.UnicodeUTF8))
-
diff --git a/lib/taurus/qt/qtgui/plot/ui/ui_TaurusPlotConf.py b/lib/taurus/qt/qtgui/plot/ui/ui_TaurusPlotConf.py
deleted file mode 100644
index f9c544c..0000000
--- a/lib/taurus/qt/qtgui/plot/ui/ui_TaurusPlotConf.py
+++ /dev/null
@@ -1,200 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'TaurusPlotConf.ui'
-#
-# Created: Fri Oct 15 11:43:10 2010
-#      by: PyQt4 UI code generator 4.7.2
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_TaurusPlotConfDlg(object):
-    def setupUi(self, TaurusPlotConfDlg):
-        TaurusPlotConfDlg.setObjectName("TaurusPlotConfDlg")
-        TaurusPlotConfDlg.resize(844, 564)
-        self.verticalLayout_8 = QtGui.QVBoxLayout(TaurusPlotConfDlg)
-        self.verticalLayout_8.setObjectName("verticalLayout_8")
-        self.splitter = QtGui.QSplitter(TaurusPlotConfDlg)
-        self.splitter.setOrientation(QtCore.Qt.Horizontal)
-        self.splitter.setObjectName("splitter")
-        self.groupBox_2 = QtGui.QGroupBox(self.splitter)
-        self.groupBox_2.setObjectName("groupBox_2")
-        self.verticalLayout_5 = QtGui.QVBoxLayout(self.groupBox_2)
-        self.verticalLayout_5.setObjectName("verticalLayout_5")
-        self.tabWidget = QtGui.QTabWidget(self.groupBox_2)
-        self.tabWidget.setObjectName("tabWidget")
-        self.tangoTab = QtGui.QWidget()
-        self.tangoTab.setObjectName("tangoTab")
-        self.horizontalLayout = QtGui.QHBoxLayout(self.tangoTab)
-        self.horizontalLayout.setObjectName("horizontalLayout")
-        self.tangoTree = QtGui.QWidget(self.tangoTab)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.tangoTree.sizePolicy().hasHeightForWidth())
-        self.tangoTree.setSizePolicy(sizePolicy)
-        self.tangoTree.setObjectName("tangoTree")
-        self.horizontalLayout.addWidget(self.tangoTree)
-        self.verticalLayout = QtGui.QVBoxLayout()
-        self.verticalLayout.setObjectName("verticalLayout")
-        spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.verticalLayout.addItem(spacerItem)
-        self.tangoSendBT = QtGui.QToolButton(self.tangoTab)
-        self.tangoSendBT.setArrowType(QtCore.Qt.RightArrow)
-        self.tangoSendBT.setObjectName("tangoSendBT")
-        self.verticalLayout.addWidget(self.tangoSendBT)
-        spacerItem1 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.verticalLayout.addItem(spacerItem1)
-        self.horizontalLayout.addLayout(self.verticalLayout)
-        self.tabWidget.addTab(self.tangoTab, "")
-        self.nexusTab = QtGui.QWidget()
-        self.nexusTab.setObjectName("nexusTab")
-        self.horizontalLayout_5 = QtGui.QHBoxLayout(self.nexusTab)
-        self.horizontalLayout_5.setObjectName("horizontalLayout_5")
-        self.nexusBrowser = QtGui.QLabel(self.nexusTab)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Preferred)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.nexusBrowser.sizePolicy().hasHeightForWidth())
-        self.nexusBrowser.setSizePolicy(sizePolicy)
-        self.nexusBrowser.setAlignment(QtCore.Qt.AlignCenter)
-        self.nexusBrowser.setObjectName("nexusBrowser")
-        self.horizontalLayout_5.addWidget(self.nexusBrowser)
-        self.verticalLayout_2 = QtGui.QVBoxLayout()
-        self.verticalLayout_2.setObjectName("verticalLayout_2")
-        spacerItem2 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.verticalLayout_2.addItem(spacerItem2)
-        self.nexusSendBT = QtGui.QToolButton(self.nexusTab)
-        self.nexusSendBT.setArrowType(QtCore.Qt.RightArrow)
-        self.nexusSendBT.setObjectName("nexusSendBT")
-        self.verticalLayout_2.addWidget(self.nexusSendBT)
-        spacerItem3 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.verticalLayout_2.addItem(spacerItem3)
-        self.horizontalLayout_5.addLayout(self.verticalLayout_2)
-        self.tabWidget.addTab(self.nexusTab, "")
-        self.asciiTab = QtGui.QWidget()
-        self.asciiTab.setObjectName("asciiTab")
-        self.layoutWidget_2 = QtGui.QWidget(self.asciiTab)
-        self.layoutWidget_2.setGeometry(QtCore.QRect(350, 0, 34, 459))
-        self.layoutWidget_2.setObjectName("layoutWidget_2")
-        self.verticalLayout_3 = QtGui.QVBoxLayout(self.layoutWidget_2)
-        self.verticalLayout_3.setObjectName("verticalLayout_3")
-        self.toolButton_3 = QtGui.QToolButton(self.layoutWidget_2)
-        self.toolButton_3.setObjectName("toolButton_3")
-        self.verticalLayout_3.addWidget(self.toolButton_3)
-        spacerItem4 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.verticalLayout_3.addItem(spacerItem4)
-        self.tabWidget.addTab(self.asciiTab, "")
-        self.verticalLayout_5.addWidget(self.tabWidget)
-        self.groupBox_3 = QtGui.QGroupBox(self.splitter)
-        self.groupBox_3.setObjectName("groupBox_3")
-        self.verticalLayout_7 = QtGui.QVBoxLayout(self.groupBox_3)
-        self.verticalLayout_7.setObjectName("verticalLayout_7")
-        self.verticalLayout_4 = QtGui.QVBoxLayout()
-        self.verticalLayout_4.setObjectName("verticalLayout_4")
-        self.curvesTable = QtGui.QTableView(self.groupBox_3)
-        self.curvesTable.setDragEnabled(True)
-        self.curvesTable.setDragDropMode(QtGui.QAbstractItemView.DragDrop)
-        self.curvesTable.setDefaultDropAction(QtCore.Qt.CopyAction)
-        self.curvesTable.setObjectName("curvesTable")
-        self.verticalLayout_4.addWidget(self.curvesTable)
-        self.horizontalLayout_2 = QtGui.QHBoxLayout()
-        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
-        spacerItem5 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.horizontalLayout_2.addItem(spacerItem5)
-        self.visibilityBT = QtGui.QToolButton(self.groupBox_3)
-        self.visibilityBT.setPopupMode(QtGui.QToolButton.MenuButtonPopup)
-        self.visibilityBT.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
-        self.visibilityBT.setObjectName("visibilityBT")
-        self.horizontalLayout_2.addWidget(self.visibilityBT)
-        self.removeCurvesBT = QtGui.QToolButton(self.groupBox_3)
-        self.removeCurvesBT.setPopupMode(QtGui.QToolButton.MenuButtonPopup)
-        self.removeCurvesBT.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
-        self.removeCurvesBT.setObjectName("removeCurvesBT")
-        self.horizontalLayout_2.addWidget(self.removeCurvesBT)
-        self.editCurvesTableBT = QtGui.QToolButton(self.groupBox_3)
-        self.editCurvesTableBT.setPopupMode(QtGui.QToolButton.MenuButtonPopup)
-        self.editCurvesTableBT.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
-        self.editCurvesTableBT.setObjectName("editCurvesTableBT")
-        self.horizontalLayout_2.addWidget(self.editCurvesTableBT)
-        self.verticalLayout_4.addLayout(self.horizontalLayout_2)
-        self.verticalLayout_7.addLayout(self.verticalLayout_4)
-        self.groupBox = QtGui.QGroupBox(self.groupBox_3)
-        self.groupBox.setObjectName("groupBox")
-        self.horizontalLayout_4 = QtGui.QHBoxLayout(self.groupBox)
-        self.horizontalLayout_4.setObjectName("horizontalLayout_4")
-        self.propView = QtGui.QWidget(self.groupBox)
-        self.propView.setObjectName("propView")
-        self.horizontalLayout_4.addWidget(self.propView)
-        self.verticalLayout_6 = QtGui.QVBoxLayout()
-        self.verticalLayout_6.setObjectName("verticalLayout_6")
-        self.bckgndBT = QtGui.QPushButton(self.groupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.bckgndBT.sizePolicy().hasHeightForWidth())
-        self.bckgndBT.setSizePolicy(sizePolicy)
-        self.bckgndBT.setObjectName("bckgndBT")
-        self.verticalLayout_6.addWidget(self.bckgndBT)
-        self.gridColorBT = QtGui.QPushButton(self.groupBox)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.gridColorBT.sizePolicy().hasHeightForWidth())
-        self.gridColorBT.setSizePolicy(sizePolicy)
-        self.gridColorBT.setObjectName("gridColorBT")
-        self.verticalLayout_6.addWidget(self.gridColorBT)
-        self.horizontalLayout_4.addLayout(self.verticalLayout_6)
-        self.verticalLayout_7.addWidget(self.groupBox)
-        self.verticalLayout_8.addWidget(self.splitter)
-        self.horizontalLayout_3 = QtGui.QHBoxLayout()
-        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
-        spacerItem6 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.horizontalLayout_3.addItem(spacerItem6)
-        self.reloadBT = QtGui.QPushButton(TaurusPlotConfDlg)
-        self.reloadBT.setObjectName("reloadBT")
-        self.horizontalLayout_3.addWidget(self.reloadBT)
-        self.cancelBT = QtGui.QPushButton(TaurusPlotConfDlg)
-        self.cancelBT.setObjectName("cancelBT")
-        self.horizontalLayout_3.addWidget(self.cancelBT)
-        self.applyBT = QtGui.QPushButton(TaurusPlotConfDlg)
-        self.applyBT.setObjectName("applyBT")
-        self.horizontalLayout_3.addWidget(self.applyBT)
-        self.verticalLayout_8.addLayout(self.horizontalLayout_3)
-
-        self.retranslateUi(TaurusPlotConfDlg)
-        self.tabWidget.setCurrentIndex(1)
-        QtCore.QMetaObject.connectSlotsByName(TaurusPlotConfDlg)
-
-    def retranslateUi(self, TaurusPlotConfDlg):
-        TaurusPlotConfDlg.setWindowTitle(QtGui.QApplication.translate("TaurusPlotConfDlg", "Form", None, QtGui.QApplication.UnicodeUTF8))
-        self.groupBox_2.setTitle(QtGui.QApplication.translate("TaurusPlotConfDlg", "Sources of data", None, QtGui.QApplication.UnicodeUTF8))
-        self.tangoSendBT.setText(QtGui.QApplication.translate("TaurusPlotConfDlg", "->", None, QtGui.QApplication.UnicodeUTF8))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.tangoTab), QtGui.QApplication.translate("TaurusPlotConfDlg", "Tango", None, QtGui.QApplication.UnicodeUTF8))
-        self.nexusBrowser.setText(QtGui.QApplication.translate("TaurusPlotConfDlg", "Nexus browsing not available. ", None, QtGui.QApplication.UnicodeUTF8))
-        self.nexusSendBT.setText(QtGui.QApplication.translate("TaurusPlotConfDlg", "->", None, QtGui.QApplication.UnicodeUTF8))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.nexusTab), QtGui.QApplication.translate("TaurusPlotConfDlg", "Nexus", None, QtGui.QApplication.UnicodeUTF8))
-        self.toolButton_3.setText(QtGui.QApplication.translate("TaurusPlotConfDlg", "->", None, QtGui.QApplication.UnicodeUTF8))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.asciiTab), QtGui.QApplication.translate("TaurusPlotConfDlg", "ASCII", None, QtGui.QApplication.UnicodeUTF8))
-        self.groupBox_3.setTitle(QtGui.QApplication.translate("TaurusPlotConfDlg", "Contents & appearance", None, QtGui.QApplication.UnicodeUTF8))
-        self.visibilityBT.setText(QtGui.QApplication.translate("TaurusPlotConfDlg", "Visibility...", None, QtGui.QApplication.UnicodeUTF8))
-        self.removeCurvesBT.setText(QtGui.QApplication.translate("TaurusPlotConfDlg", " Remove...", None, QtGui.QApplication.UnicodeUTF8))
-        self.editCurvesTableBT.setText(QtGui.QApplication.translate("TaurusPlotConfDlg", "Edit...", None, QtGui.QApplication.UnicodeUTF8))
-        self.groupBox.setTitle(QtGui.QApplication.translate("TaurusPlotConfDlg", "Appearance of selected curves", None, QtGui.QApplication.UnicodeUTF8))
-        self.bckgndBT.setText(QtGui.QApplication.translate("TaurusPlotConfDlg", "Canvas Color...", None, QtGui.QApplication.UnicodeUTF8))
-        self.gridColorBT.setText(QtGui.QApplication.translate("TaurusPlotConfDlg", "Grid Color...", None, QtGui.QApplication.UnicodeUTF8))
-        self.reloadBT.setText(QtGui.QApplication.translate("TaurusPlotConfDlg", "Reload", None, QtGui.QApplication.UnicodeUTF8))
-        self.cancelBT.setText(QtGui.QApplication.translate("TaurusPlotConfDlg", "Cancel", None, QtGui.QApplication.UnicodeUTF8))
-        self.applyBT.setText(QtGui.QApplication.translate("TaurusPlotConfDlg", "Apply", None, QtGui.QApplication.UnicodeUTF8))
-
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    TaurusPlotConfDlg = QtGui.QWidget()
-    ui = Ui_TaurusPlotConfDlg()
-    ui.setupUi(TaurusPlotConfDlg)
-    TaurusPlotConfDlg.show()
-    sys.exit(app.exec_())
-
diff --git a/lib/taurus/qt/qtgui/plot/ui/ui_TaurusPlotConfigDialog.py b/lib/taurus/qt/qtgui/plot/ui/ui_TaurusPlotConfigDialog.py
deleted file mode 100644
index 7b28a52..0000000
--- a/lib/taurus/qt/qtgui/plot/ui/ui_TaurusPlotConfigDialog.py
+++ /dev/null
@@ -1,231 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file '/home/cpascual/src/svn/taurus/widget/qwt/ui/TaurusPlotConfigDialog.ui'
-#
-# Created: Fri Jan 29 11:47:12 2010
-#      by: PyQt4 UI code generator 4.3.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_TaurusPlotConfigDialog(object):
-    def setupUi(self, TaurusPlotConfigDialog):
-        TaurusPlotConfigDialog.setObjectName("TaurusPlotConfigDialog")
-        TaurusPlotConfigDialog.resize(QtCore.QSize(QtCore.QRect(0,0,573,486).size()).expandedTo(TaurusPlotConfigDialog.minimumSizeHint()))
-        TaurusPlotConfigDialog.setModal(True)
-
-        self.gridlayout = QtGui.QGridLayout(TaurusPlotConfigDialog)
-        self.gridlayout.setObjectName("gridlayout")
-
-        self.curveAppearanceGB = QtGui.QGroupBox(TaurusPlotConfigDialog)
-        self.curveAppearanceGB.setObjectName("curveAppearanceGB")
-        self.gridlayout.addWidget(self.curveAppearanceGB,0,0,1,3)
-
-        self.xGroupBox = QtGui.QGroupBox(TaurusPlotConfigDialog)
-        self.xGroupBox.setObjectName("xGroupBox")
-
-        self.gridlayout1 = QtGui.QGridLayout(self.xGroupBox)
-        self.gridlayout1.setObjectName("gridlayout1")
-
-        self.xAutoGroupBox = QtGui.QGroupBox(self.xGroupBox)
-        self.xAutoGroupBox.setCheckable(True)
-        self.xAutoGroupBox.setChecked(False)
-        self.xAutoGroupBox.setObjectName("xAutoGroupBox")
-
-        self.gridlayout2 = QtGui.QGridLayout(self.xAutoGroupBox)
-        self.gridlayout2.setObjectName("gridlayout2")
-
-        self.xLabelMin = QtGui.QLabel(self.xAutoGroupBox)
-        self.xLabelMin.setObjectName("xLabelMin")
-        self.gridlayout2.addWidget(self.xLabelMin,0,0,1,1)
-
-        self.xEditMin = QtGui.QLineEdit(self.xAutoGroupBox)
-        self.xEditMin.setMinimumSize(QtCore.QSize(150,0))
-        self.xEditMin.setObjectName("xEditMin")
-        self.gridlayout2.addWidget(self.xEditMin,0,1,1,1)
-
-        self.xLabelMax = QtGui.QLabel(self.xAutoGroupBox)
-        self.xLabelMax.setObjectName("xLabelMax")
-        self.gridlayout2.addWidget(self.xLabelMax,1,0,1,1)
-
-        self.xEditMax = QtGui.QLineEdit(self.xAutoGroupBox)
-        self.xEditMax.setMinimumSize(QtCore.QSize(150,0))
-        self.xEditMax.setObjectName("xEditMax")
-        self.gridlayout2.addWidget(self.xEditMax,1,1,1,1)
-        self.gridlayout1.addWidget(self.xAutoGroupBox,0,0,1,2)
-
-        self.xLabelRange = QtGui.QLabel(self.xGroupBox)
-        self.xLabelRange.setObjectName("xLabelRange")
-        self.gridlayout1.addWidget(self.xLabelRange,1,0,1,1)
-
-        self.xRangeCB = QtGui.QComboBox(self.xGroupBox)
-        self.xRangeCB.setEditable(True)
-        self.xRangeCB.setObjectName("xRangeCB")
-        self.gridlayout1.addWidget(self.xRangeCB,1,1,1,1)
-
-        self.xModeLabel = QtGui.QLabel(self.xGroupBox)
-        self.xModeLabel.setObjectName("xModeLabel")
-        self.gridlayout1.addWidget(self.xModeLabel,2,0,1,1)
-
-        self.xModeComboBox = QtGui.QComboBox(self.xGroupBox)
-        self.xModeComboBox.setObjectName("xModeComboBox")
-        self.gridlayout1.addWidget(self.xModeComboBox,2,1,1,1)
-
-        self.xDynScaleCheckBox = QtGui.QCheckBox(self.xGroupBox)
-        self.xDynScaleCheckBox.setObjectName("xDynScaleCheckBox")
-        self.gridlayout1.addWidget(self.xDynScaleCheckBox,3,0,1,2)
-        self.gridlayout.addWidget(self.xGroupBox,1,0,2,1)
-
-        self.tabWidget = QtGui.QTabWidget(TaurusPlotConfigDialog)
-
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred,QtGui.QSizePolicy.Preferred)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.tabWidget.sizePolicy().hasHeightForWidth())
-        self.tabWidget.setSizePolicy(sizePolicy)
-        self.tabWidget.setObjectName("tabWidget")
-
-        self.y1Tab = QtGui.QWidget()
-        self.y1Tab.setObjectName("y1Tab")
-
-        self.gridlayout3 = QtGui.QGridLayout(self.y1Tab)
-        self.gridlayout3.setObjectName("gridlayout3")
-
-        self.y1AutoGroupBox = QtGui.QGroupBox(self.y1Tab)
-        self.y1AutoGroupBox.setCheckable(True)
-        self.y1AutoGroupBox.setChecked(False)
-        self.y1AutoGroupBox.setObjectName("y1AutoGroupBox")
-
-        self.gridlayout4 = QtGui.QGridLayout(self.y1AutoGroupBox)
-        self.gridlayout4.setObjectName("gridlayout4")
-
-        self.y1LabelMin = QtGui.QLabel(self.y1AutoGroupBox)
-        self.y1LabelMin.setObjectName("y1LabelMin")
-        self.gridlayout4.addWidget(self.y1LabelMin,0,0,1,1)
-
-        self.y1EditMin = QtGui.QLineEdit(self.y1AutoGroupBox)
-        self.y1EditMin.setObjectName("y1EditMin")
-        self.gridlayout4.addWidget(self.y1EditMin,0,1,1,1)
-
-        self.y1LabelMax = QtGui.QLabel(self.y1AutoGroupBox)
-        self.y1LabelMax.setObjectName("y1LabelMax")
-        self.gridlayout4.addWidget(self.y1LabelMax,1,0,1,1)
-
-        self.y1EditMax = QtGui.QLineEdit(self.y1AutoGroupBox)
-        self.y1EditMax.setObjectName("y1EditMax")
-        self.gridlayout4.addWidget(self.y1EditMax,1,1,1,1)
-        self.gridlayout3.addWidget(self.y1AutoGroupBox,0,0,1,2)
-
-        self.y1ModeLabel = QtGui.QLabel(self.y1Tab)
-        self.y1ModeLabel.setObjectName("y1ModeLabel")
-        self.gridlayout3.addWidget(self.y1ModeLabel,1,0,1,1)
-
-        self.y1ModeComboBox = QtGui.QComboBox(self.y1Tab)
-        self.y1ModeComboBox.setObjectName("y1ModeComboBox")
-        self.gridlayout3.addWidget(self.y1ModeComboBox,1,1,1,1)
-        self.tabWidget.addTab(self.y1Tab,"")
-
-        self.y2Tab = QtGui.QWidget()
-        self.y2Tab.setObjectName("y2Tab")
-
-        self.gridlayout5 = QtGui.QGridLayout(self.y2Tab)
-        self.gridlayout5.setObjectName("gridlayout5")
-
-        self.y2AutoGroupBox = QtGui.QGroupBox(self.y2Tab)
-        self.y2AutoGroupBox.setCheckable(True)
-        self.y2AutoGroupBox.setChecked(False)
-        self.y2AutoGroupBox.setObjectName("y2AutoGroupBox")
-
-        self.gridlayout6 = QtGui.QGridLayout(self.y2AutoGroupBox)
-        self.gridlayout6.setObjectName("gridlayout6")
-
-        self.y2LabelMin = QtGui.QLabel(self.y2AutoGroupBox)
-        self.y2LabelMin.setObjectName("y2LabelMin")
-        self.gridlayout6.addWidget(self.y2LabelMin,0,0,1,1)
-
-        self.y2EditMin = QtGui.QLineEdit(self.y2AutoGroupBox)
-        self.y2EditMin.setObjectName("y2EditMin")
-        self.gridlayout6.addWidget(self.y2EditMin,0,1,1,1)
-
-        self.y2LabelMax = QtGui.QLabel(self.y2AutoGroupBox)
-        self.y2LabelMax.setObjectName("y2LabelMax")
-        self.gridlayout6.addWidget(self.y2LabelMax,1,0,1,1)
-
-        self.y2EditMax = QtGui.QLineEdit(self.y2AutoGroupBox)
-        self.y2EditMax.setObjectName("y2EditMax")
-        self.gridlayout6.addWidget(self.y2EditMax,1,1,1,1)
-        self.gridlayout5.addWidget(self.y2AutoGroupBox,0,0,1,2)
-
-        self.y2ModeLabel = QtGui.QLabel(self.y2Tab)
-        self.y2ModeLabel.setObjectName("y2ModeLabel")
-        self.gridlayout5.addWidget(self.y2ModeLabel,1,0,1,1)
-
-        self.y2ModeComboBox = QtGui.QComboBox(self.y2Tab)
-        self.y2ModeComboBox.setObjectName("y2ModeComboBox")
-        self.gridlayout5.addWidget(self.y2ModeComboBox,1,1,1,1)
-        self.tabWidget.addTab(self.y2Tab,"")
-        self.gridlayout.addWidget(self.tabWidget,1,1,2,1)
-
-        self.hboxlayout = QtGui.QHBoxLayout()
-        self.hboxlayout.setObjectName("hboxlayout")
-
-        self.y1PeaksLabel = QtGui.QLabel(TaurusPlotConfigDialog)
-        self.y1PeaksLabel.setObjectName("y1PeaksLabel")
-        self.hboxlayout.addWidget(self.y1PeaksLabel)
-
-        self.peaksComboBox = QtGui.QComboBox(TaurusPlotConfigDialog)
-        self.peaksComboBox.setObjectName("peaksComboBox")
-        self.hboxlayout.addWidget(self.peaksComboBox)
-        self.gridlayout.addLayout(self.hboxlayout,1,2,1,1)
-
-        self.buttonBox = QtGui.QDialogButtonBox(TaurusPlotConfigDialog)
-
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred,QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.buttonBox.sizePolicy().hasHeightForWidth())
-        self.buttonBox.setSizePolicy(sizePolicy)
-        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
-        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Apply|QtGui.QDialogButtonBox.Close|QtGui.QDialogButtonBox.NoButton)
-        self.buttonBox.setObjectName("buttonBox")
-        self.gridlayout.addWidget(self.buttonBox,2,2,1,1)
-
-        self.retranslateUi(TaurusPlotConfigDialog)
-        self.tabWidget.setCurrentIndex(0)
-        QtCore.QObject.connect(self.xDynScaleCheckBox,QtCore.SIGNAL("toggled(bool)"),self.xLabelRange.setVisible)
-        QtCore.QObject.connect(self.xDynScaleCheckBox,QtCore.SIGNAL("toggled(bool)"),self.xRangeCB.setVisible)
-        QtCore.QObject.connect(self.xDynScaleCheckBox,QtCore.SIGNAL("toggled(bool)"),self.xAutoGroupBox.setHidden)
-        QtCore.QMetaObject.connectSlotsByName(TaurusPlotConfigDialog)
-
-    def retranslateUi(self, TaurusPlotConfigDialog):
-        TaurusPlotConfigDialog.setWindowTitle(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Configure plot", None, QtGui.QApplication.UnicodeUTF8))
-        self.curveAppearanceGB.setTitle(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Curves Appearance", None, QtGui.QApplication.UnicodeUTF8))
-        self.xGroupBox.setTitle(QtGui.QApplication.translate("TaurusPlotConfigDialog", "X Axis", None, QtGui.QApplication.UnicodeUTF8))
-        self.xAutoGroupBox.setToolTip(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Customize scale range (this disables autoscaling)", None, QtGui.QApplication.UnicodeUTF8))
-        self.xAutoGroupBox.setTitle(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Custom scale", None, QtGui.QApplication.UnicodeUTF8))
-        self.xLabelMin.setText(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Min.:", None, QtGui.QApplication.UnicodeUTF8))
-        self.xLabelMax.setText(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Max:", None, QtGui.QApplication.UnicodeUTF8))
-        self.xLabelRange.setText(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Range", None, QtGui.QApplication.UnicodeUTF8))
-        self.xModeLabel.setText(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Mode", None, QtGui.QApplication.UnicodeUTF8))
-        self.xDynScaleCheckBox.setToolTip(QtGui.QApplication.translate("TaurusPlotConfigDialog", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-        "p, li { white-space: pre-wrap; }\n"
-        "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:9pt; font-style:italic;\">AKA</span><span style=\" font-size:9pt;\">, \"Trend Mode\":</span></p>\n"
-        "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;\">(If checked, the X scale range will be kept constant but its offset will move to guarantee that the newest point is shown.)</p>\n"
-        "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9pt;\"></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.xDynScaleCheckBox.setText(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Fixed-range scale", None, QtGui.QApplication.UnicodeUTF8))
-        self.y1AutoGroupBox.setToolTip(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Customize scale range (this disables autoscaling)", None, QtGui.QApplication.UnicodeUTF8))
-        self.y1AutoGroupBox.setTitle(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Custom scale", None, QtGui.QApplication.UnicodeUTF8))
-        self.y1LabelMin.setText(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Min.:", None, QtGui.QApplication.UnicodeUTF8))
-        self.y1LabelMax.setText(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Max:", None, QtGui.QApplication.UnicodeUTF8))
-        self.y1ModeLabel.setText(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Mode", None, QtGui.QApplication.UnicodeUTF8))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.y1Tab), QtGui.QApplication.translate("TaurusPlotConfigDialog", "Y1 Axis", None, QtGui.QApplication.UnicodeUTF8))
-        self.y2AutoGroupBox.setToolTip(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Customize scale range (this disables autoscaling)", None, QtGui.QApplication.UnicodeUTF8))
-        self.y2AutoGroupBox.setTitle(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Custom scale", None, QtGui.QApplication.UnicodeUTF8))
-        self.y2LabelMin.setText(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Min.:", None, QtGui.QApplication.UnicodeUTF8))
-        self.y2LabelMax.setText(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Max:", None, QtGui.QApplication.UnicodeUTF8))
-        self.y2ModeLabel.setText(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Mode", None, QtGui.QApplication.UnicodeUTF8))
-        self.tabWidget.setTabText(self.tabWidget.indexOf(self.y2Tab), QtGui.QApplication.translate("TaurusPlotConfigDialog", "Y2 Axis", None, QtGui.QApplication.UnicodeUTF8))
-        self.y1PeaksLabel.setText(QtGui.QApplication.translate("TaurusPlotConfigDialog", "Peak Markers", None, QtGui.QApplication.UnicodeUTF8))
-
diff --git a/lib/taurus/qt/qtgui/plot/ui/ui_curvesAppearanceChooser.py b/lib/taurus/qt/qtgui/plot/ui/ui_curvesAppearanceChooser.py
deleted file mode 100644
index 71a171b..0000000
--- a/lib/taurus/qt/qtgui/plot/ui/ui_curvesAppearanceChooser.py
+++ /dev/null
@@ -1,195 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'curvesAppearanceChooser.ui'
-#
-# Created: Fri Apr  9 10:47:57 2010
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_curvesAppearanceChooserDlg(object):
-    def setupUi(self, curvesAppearanceChooserDlg):
-        curvesAppearanceChooserDlg.setObjectName("curvesAppearanceChooserDlg")
-        curvesAppearanceChooserDlg.resize(808, 204)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Maximum)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(curvesAppearanceChooserDlg.sizePolicy().hasHeightForWidth())
-        curvesAppearanceChooserDlg.setSizePolicy(sizePolicy)
-        curvesAppearanceChooserDlg.setMaximumSize(QtCore.QSize(16777215, 205))
-        self.hboxlayout = QtGui.QHBoxLayout(curvesAppearanceChooserDlg)
-        self.hboxlayout.setObjectName("hboxlayout")
-        self.vboxlayout = QtGui.QVBoxLayout()
-        self.vboxlayout.setObjectName("vboxlayout")
-        self.curvesLW = QtGui.QListWidget(curvesAppearanceChooserDlg)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.curvesLW.sizePolicy().hasHeightForWidth())
-        self.curvesLW.setSizePolicy(sizePolicy)
-        self.curvesLW.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection)
-        self.curvesLW.setObjectName("curvesLW")
-        self.vboxlayout.addWidget(self.curvesLW)
-        self.hboxlayout1 = QtGui.QHBoxLayout()
-        self.hboxlayout1.setObjectName("hboxlayout1")
-        self.resetBT = QtGui.QPushButton(curvesAppearanceChooserDlg)
-        self.resetBT.setObjectName("resetBT")
-        self.hboxlayout1.addWidget(self.resetBT)
-        self.applyBT = QtGui.QPushButton(curvesAppearanceChooserDlg)
-        self.applyBT.setObjectName("applyBT")
-        self.hboxlayout1.addWidget(self.applyBT)
-        self.vboxlayout.addLayout(self.hboxlayout1)
-        self.hboxlayout.addLayout(self.vboxlayout)
-        self.lineGB = QtGui.QGroupBox(curvesAppearanceChooserDlg)
-        self.lineGB.setObjectName("lineGB")
-        self.gridlayout = QtGui.QGridLayout(self.lineGB)
-        self.gridlayout.setObjectName("gridlayout")
-        self.label_4 = QtGui.QLabel(self.lineGB)
-        self.label_4.setObjectName("label_4")
-        self.gridlayout.addWidget(self.label_4, 0, 0, 1, 1)
-        self.lStyleCB = QtGui.QComboBox(self.lineGB)
-        self.lStyleCB.setObjectName("lStyleCB")
-        self.gridlayout.addWidget(self.lStyleCB, 0, 1, 1, 1)
-        self.label_5 = QtGui.QLabel(self.lineGB)
-        self.label_5.setObjectName("label_5")
-        self.gridlayout.addWidget(self.label_5, 1, 0, 1, 1)
-        self.lWidthSB = QtGui.QSpinBox(self.lineGB)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.lWidthSB.sizePolicy().hasHeightForWidth())
-        self.lWidthSB.setSizePolicy(sizePolicy)
-        self.lWidthSB.setMinimum(-1)
-        self.lWidthSB.setMaximum(10)
-        self.lWidthSB.setProperty("value", QtCore.QVariant(1))
-        self.lWidthSB.setObjectName("lWidthSB")
-        self.gridlayout.addWidget(self.lWidthSB, 1, 1, 1, 1)
-        self.label_6 = QtGui.QLabel(self.lineGB)
-        self.label_6.setObjectName("label_6")
-        self.gridlayout.addWidget(self.label_6, 2, 0, 1, 1)
-        self.lColorCB = QtGui.QComboBox(self.lineGB)
-        self.lColorCB.setObjectName("lColorCB")
-        self.gridlayout.addWidget(self.lColorCB, 2, 1, 1, 1)
-        self.labelCurveStyle = QtGui.QLabel(self.lineGB)
-        self.labelCurveStyle.setObjectName("labelCurveStyle")
-        self.gridlayout.addWidget(self.labelCurveStyle, 3, 0, 1, 1)
-        self.cStyleCB = QtGui.QComboBox(self.lineGB)
-        self.cStyleCB.setObjectName("cStyleCB")
-        self.gridlayout.addWidget(self.cStyleCB, 3, 1, 1, 1)
-        self.cFillCB = QtGui.QCheckBox(self.lineGB)
-        self.cFillCB.setObjectName("cFillCB")
-        self.gridlayout.addWidget(self.cFillCB, 4, 0, 1, 2)
-        self.hboxlayout.addWidget(self.lineGB)
-        self.symbolGB = QtGui.QGroupBox(curvesAppearanceChooserDlg)
-        self.symbolGB.setObjectName("symbolGB")
-        self.gridlayout1 = QtGui.QGridLayout(self.symbolGB)
-        self.gridlayout1.setObjectName("gridlayout1")
-        self.label = QtGui.QLabel(self.symbolGB)
-        self.label.setObjectName("label")
-        self.gridlayout1.addWidget(self.label, 0, 0, 1, 1)
-        self.sStyleCB = QtGui.QComboBox(self.symbolGB)
-        self.sStyleCB.setObjectName("sStyleCB")
-        self.gridlayout1.addWidget(self.sStyleCB, 0, 1, 1, 1)
-        self.label_2 = QtGui.QLabel(self.symbolGB)
-        self.label_2.setObjectName("label_2")
-        self.gridlayout1.addWidget(self.label_2, 1, 0, 1, 1)
-        self.sSizeSB = QtGui.QSpinBox(self.symbolGB)
-        self.sSizeSB.setMinimum(-1)
-        self.sSizeSB.setMaximum(10)
-        self.sSizeSB.setSingleStep(1)
-        self.sSizeSB.setProperty("value", QtCore.QVariant(3))
-        self.sSizeSB.setObjectName("sSizeSB")
-        self.gridlayout1.addWidget(self.sSizeSB, 1, 1, 1, 1)
-        self.label_3 = QtGui.QLabel(self.symbolGB)
-        self.label_3.setObjectName("label_3")
-        self.gridlayout1.addWidget(self.label_3, 2, 0, 1, 1)
-        self.sColorCB = QtGui.QComboBox(self.symbolGB)
-        self.sColorCB.setObjectName("sColorCB")
-        self.gridlayout1.addWidget(self.sColorCB, 2, 1, 1, 1)
-        self.sFillCB = QtGui.QCheckBox(self.symbolGB)
-        self.sFillCB.setTristate(False)
-        self.sFillCB.setObjectName("sFillCB")
-        self.gridlayout1.addWidget(self.sFillCB, 3, 0, 1, 2)
-        spacerItem = QtGui.QSpacerItem(111, 16, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.gridlayout1.addItem(spacerItem, 4, 0, 1, 2)
-        self.hboxlayout.addWidget(self.symbolGB)
-        self.otherGB = QtGui.QGroupBox(curvesAppearanceChooserDlg)
-        self.otherGB.setObjectName("otherGB")
-        self.gridlayout2 = QtGui.QGridLayout(self.otherGB)
-        self.gridlayout2.setObjectName("gridlayout2")
-        self.groupBox = QtGui.QGroupBox(self.otherGB)
-        self.groupBox.setObjectName("groupBox")
-        self.hboxlayout2 = QtGui.QHBoxLayout(self.groupBox)
-        self.hboxlayout2.setObjectName("hboxlayout2")
-        self.assignToY1BT = QtGui.QToolButton(self.groupBox)
-        self.assignToY1BT.setObjectName("assignToY1BT")
-        self.hboxlayout2.addWidget(self.assignToY1BT)
-        self.assignToY2BT = QtGui.QToolButton(self.groupBox)
-        self.assignToY2BT.setObjectName("assignToY2BT")
-        self.hboxlayout2.addWidget(self.assignToY2BT)
-        self.gridlayout2.addWidget(self.groupBox, 0, 0, 1, 1)
-        self.changeTitlesBT = QtGui.QPushButton(self.otherGB)
-        self.changeTitlesBT.setObjectName("changeTitlesBT")
-        self.gridlayout2.addWidget(self.changeTitlesBT, 1, 0, 1, 1)
-        self.bckgndBT = QtGui.QPushButton(self.otherGB)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.bckgndBT.sizePolicy().hasHeightForWidth())
-        self.bckgndBT.setSizePolicy(sizePolicy)
-        self.bckgndBT.setObjectName("bckgndBT")
-        self.gridlayout2.addWidget(self.bckgndBT, 2, 0, 1, 1)
-        self.hboxlayout.addWidget(self.otherGB)
-        self.label_4.setBuddy(self.lStyleCB)
-        self.label_5.setBuddy(self.lWidthSB)
-        self.label_6.setBuddy(self.lColorCB)
-        self.label.setBuddy(self.sStyleCB)
-        self.label_2.setBuddy(self.sSizeSB)
-        self.label_3.setBuddy(self.sColorCB)
-
-        self.retranslateUi(curvesAppearanceChooserDlg)
-        QtCore.QMetaObject.connectSlotsByName(curvesAppearanceChooserDlg)
-
-    def retranslateUi(self, curvesAppearanceChooserDlg):
-        curvesAppearanceChooserDlg.setWindowTitle(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "Form", None, QtGui.QApplication.UnicodeUTF8))
-        self.curvesLW.setSortingEnabled(True)
-        self.resetBT.setText(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "&Reset", None, QtGui.QApplication.UnicodeUTF8))
-        self.applyBT.setText(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "&Apply", None, QtGui.QApplication.UnicodeUTF8))
-        self.lineGB.setTitle(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "Line", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_4.setText(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "S&tyle", None, QtGui.QApplication.UnicodeUTF8))
-        self.lStyleCB.setToolTip(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-"p, li { white-space: pre-wrap; }\n"
-"</style></head><body style=\" font-family:\'Sans Serif\'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
-"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Style of the pen used to connect the points.</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_5.setText(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "&Width", None, QtGui.QApplication.UnicodeUTF8))
-        self.lWidthSB.setSpecialValueText(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "--", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_6.setText(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "C&olor", None, QtGui.QApplication.UnicodeUTF8))
-        self.labelCurveStyle.setText(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "Mode", None, QtGui.QApplication.UnicodeUTF8))
-        self.cStyleCB.setToolTip(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-"p, li { white-space: pre-wrap; }\n"
-"</style></head><body style=\" font-family:\'Sans Serif\'; font-size:10pt; font-weight:400; font-style:normal;\">\n"
-"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Connector mode: how the data points are connected (steps, straight lines,...)</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.cFillCB.setText(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "&Area Fill", None, QtGui.QApplication.UnicodeUTF8))
-        self.symbolGB.setTitle(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "Symbols", None, QtGui.QApplication.UnicodeUTF8))
-        self.label.setText(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "&Style", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_2.setText(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "Si&ze", None, QtGui.QApplication.UnicodeUTF8))
-        self.sSizeSB.setSpecialValueText(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "--", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_3.setText(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "&Color", None, QtGui.QApplication.UnicodeUTF8))
-        self.sFillCB.setText(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "&Fill", None, QtGui.QApplication.UnicodeUTF8))
-        self.otherGB.setTitle(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "Other", None, QtGui.QApplication.UnicodeUTF8))
-        self.groupBox.setTitle(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "Assign to axis", None, QtGui.QApplication.UnicodeUTF8))
-        self.assignToY1BT.setToolTip(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-"p, li { white-space: pre-wrap; }\n"
-"</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
-"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Assign selected curves to Y1 (left axis)</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.assignToY1BT.setText(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "Y1", None, QtGui.QApplication.UnicodeUTF8))
-        self.assignToY2BT.setToolTip(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
-"p, li { white-space: pre-wrap; }\n"
-"</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
-"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Assign selected curves to Y2 (right axis)</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
-        self.assignToY2BT.setText(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "Y2", None, QtGui.QApplication.UnicodeUTF8))
-        self.changeTitlesBT.setText(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "Curve Title(s)...", None, QtGui.QApplication.UnicodeUTF8))
-        self.bckgndBT.setText(QtGui.QApplication.translate("curvesAppearanceChooserDlg", "Background fill...", None, QtGui.QApplication.UnicodeUTF8))
-
diff --git a/lib/taurus/qt/qtgui/resource/catalog.html b/lib/taurus/qt/qtgui/resource/catalog.html
index 834c1f5..a39db1a 100644
--- a/lib/taurus/qt/qtgui/resource/catalog.html
+++ b/lib/taurus/qt/qtgui/resource/catalog.html
@@ -5,31 +5,31 @@
 <body>
 <h1>Index</h1>
 <ul><li><a href="#_base">Base icons</a></li>
-<li><a href="#rrze-icons/emblems">rrze-icons/emblems (:/emblems/)</a></li>
-<li><a href="#rrze-icons/devices">rrze-icons/devices (:/devices/)</a></li>
+<li><a href="#external/jive">external/jive (:/jive/)</a></li>
+<li><a href="#external">external (:/)</a></li>
+<li><a href="#large/snapshot">large/snapshot (:/snapshot/)</a></li>
+<li><a href="#large">large (:/)</a></li>
 <li><a href="#rrze-icons/actions">rrze-icons/actions (:/actions/)</a></li>
+<li><a href="#rrze-icons/categories">rrze-icons/categories (:/categories/)</a></li>
+<li><a href="#rrze-icons/devices">rrze-icons/devices (:/devices/)</a></li>
+<li><a href="#rrze-icons/emblems">rrze-icons/emblems (:/emblems/)</a></li>
 <li><a href="#rrze-icons/mime-types">rrze-icons/mime-types (:/mime-types/)</a></li>
 <li><a href="#rrze-icons/status">rrze-icons/status (:/status/)</a></li>
-<li><a href="#rrze-icons/categories">rrze-icons/categories (:/categories/)</a></li>
-<li><a href="#tango-icons/status">tango-icons/status (:/status/)</a></li>
 <li><a href="#tango-icons/actions">tango-icons/actions (:/actions/)</a></li>
-<li><a href="#tango-icons/mimetypes">tango-icons/mimetypes (:/mimetypes/)</a></li>
-<li><a href="#tango-icons/emblems">tango-icons/emblems (:/emblems/)</a></li>
-<li><a href="#tango-icons/devices">tango-icons/devices (:/devices/)</a></li>
 <li><a href="#tango-icons/apps">tango-icons/apps (:/apps/)</a></li>
 <li><a href="#tango-icons/categories">tango-icons/categories (:/categories/)</a></li>
-<li><a href="#tango-icons/places">tango-icons/places (:/places/)</a></li>
+<li><a href="#tango-icons/devices">tango-icons/devices (:/devices/)</a></li>
+<li><a href="#tango-icons/emblems">tango-icons/emblems (:/emblems/)</a></li>
 <li><a href="#tango-icons/emotes">tango-icons/emotes (:/emotes/)</a></li>
-<li><a href="#extra-icons/designer">extra-icons/designer (:/designer/)</a></li>
+<li><a href="#tango-icons/mimetypes">tango-icons/mimetypes (:/mimetypes/)</a></li>
+<li><a href="#tango-icons/places">tango-icons/places (:/places/)</a></li>
+<li><a href="#tango-icons/status">tango-icons/status (:/status/)</a></li>
 <li><a href="#extra-icons/actions">extra-icons/actions (:/actions/)</a></li>
+<li><a href="#extra-icons/designer">extra-icons/designer (:/designer/)</a></li>
+<li><a href="#extra-icons/leds/images24">extra-icons/leds/images24 (:/leds/images24/)</a></li>
 <li><a href="#extra-icons/leds/images256">extra-icons/leds/images256 (:/leds/images256/)</a></li>
 <li><a href="#extra-icons/leds/images48">extra-icons/leds/images48 (:/leds/images48/)</a></li>
-<li><a href="#extra-icons/leds/images24">extra-icons/leds/images24 (:/leds/images24/)</a></li>
 <li><a href="#extra-icons">extra-icons (:/)</a></li>
-<li><a href="#external/jive">external/jive (:/jive/)</a></li>
-<li><a href="#external">external (:/)</a></li>
-<li><a href="#large/snapshot">large/snapshot (:/snapshot/)</a></li>
-<li><a href="#large">large (:/)</a></li>
 </ul>
 <h2><a name="_base">Base icons</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
@@ -37,817 +37,817 @@
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="taurus.png" alt="taurus.png"/></td><td width="400">:/taurus.png</td><td width="400">taurus.png</td><td width="200">taurus</td></tr>
 </table>
-<h2><a name="rrze-icons/emblems">:/emblems/ (rrze-icons/emblems)</a></h2>
+<h2><a name="external/jive">:/jive/ (external/jive)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/emblems/" Directory: "rrze-icons/emblems"</th>
+<th colspan="4">Resource: ":/jive/" Directory: "external/jive"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/relay.png" alt="rrze-icons/emblems/relay.svg"/></td><td width="400">:/emblems/relay.svg</td><td width="400">rrze-icons/emblems/relay.svg</td><td width="200">relay</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/at.png" alt="rrze-icons/emblems/at.svg"/></td><td width="400">:/emblems/at.svg</td><td width="400">rrze-icons/emblems/at.svg</td><td width="200">at</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/table.png" alt="rrze-icons/emblems/table.svg"/></td><td width="400">:/emblems/table.svg</td><td width="400">rrze-icons/emblems/table.svg</td><td width="200">table</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/message-new.png" alt="rrze-icons/emblems/message-new.svg"/></td><td width="400">:/emblems/message-new.svg</td><td width="400">rrze-icons/emblems/message-new.svg</td><td width="200">message-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tree-diagramm-delete.png" alt="rrze-icons/emblems/tree-diagramm-delete.svg"/></td><td width="400">:/emblems/tree-diagramm-delete.svg</td><td width="400">rrze-icons/emblems/tree-diagramm-delete.svg</td><td width="200">tree-diagramm-delete</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/affiliation-abstract.png" alt="rrze-icons/emblems/affiliation-abstract.svg"/></td><td width="400">:/emblems/affiliation-abstract.svg</td><td width="400">rrze-icons/emblems/affiliation-abstract.svg</td><td width="200">affiliation-abstract</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/mailbox.png" alt="rrze-icons/emblems/mailbox.svg"/></td><td width="400">:/emblems/mailbox.svg</td><td width="400">rrze-icons/emblems/mailbox.svg</td><td width="200">mailbox</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report.png" alt="rrze-icons/emblems/report.svg"/></td><td width="400">:/emblems/report.svg</td><td width="400">rrze-icons/emblems/report.svg</td><td width="200">report</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/wide-area-network-connection.png" alt="rrze-icons/emblems/wide-area-network-connection.svg"/></td><td width="400">:/emblems/wide-area-network-connection.svg</td><td width="400">rrze-icons/emblems/wide-area-network-connection.svg</td><td width="200">wide-area-network-connection</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/ten-per-page.png" alt="rrze-icons/emblems/ten-per-page.svg"/></td><td width="400">:/emblems/ten-per-page.svg</td><td width="400">rrze-icons/emblems/ten-per-page.svg</td><td width="200">ten-per-page</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/media-floppy-green.png" alt="rrze-icons/emblems/media-floppy-green.svg"/></td><td width="400">:/emblems/media-floppy-green.svg</td><td width="400">rrze-icons/emblems/media-floppy-green.svg</td><td width="200">media-floppy-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/account-new.png" alt="rrze-icons/emblems/account-new.svg"/></td><td width="400">:/emblems/account-new.svg</td><td width="400">rrze-icons/emblems/account-new.svg</td><td width="200">account-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-run.png" alt="rrze-icons/emblems/report-run.svg"/></td><td width="400">:/emblems/report-run.svg</td><td width="400">rrze-icons/emblems/report-run.svg</td><td width="200">report-run</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/statistic.png" alt="rrze-icons/emblems/statistic.svg"/></td><td width="400">:/emblems/statistic.svg</td><td width="400">rrze-icons/emblems/statistic.svg</td><td width="200">statistic</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/organisational-unit-tree.png" alt="rrze-icons/emblems/organisational-unit-tree.svg"/></td><td width="400">:/emblems/organisational-unit-tree.svg</td><td width="400">rrze-icons/emblems/organisational-unit-tree.svg</td><td width="200">organisational-unit-tree</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/note.png" alt="rrze-icons/emblems/note.svg"/></td><td width="400">:/emblems/note.svg</td><td width="400">rrze-icons/emblems/note.svg</td><td width="200">note</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/template.png" alt="rrze-icons/emblems/template.svg"/></td><td width="400">:/emblems/template.svg</td><td width="400">rrze-icons/emblems/template.svg</td><td width="200">template</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/folder.png" alt="rrze-icons/emblems/folder.svg"/></td><td width="400">:/emblems/folder.svg</td><td width="400">rrze-icons/emblems/folder.svg</td><td width="200">folder</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/page-all.png" alt="rrze-icons/emblems/page-all.svg"/></td><td width="400">:/emblems/page-all.svg</td><td width="400">rrze-icons/emblems/page-all.svg</td><td width="200">page-all</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/footnote-delete.png" alt="rrze-icons/emblems/footnote-delete.svg"/></td><td width="400">:/emblems/footnote-delete.svg</td><td width="400">rrze-icons/emblems/footnote-delete.svg</td><td width="200">footnote-delete</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/id.png" alt="rrze-icons/emblems/id.svg"/></td><td width="400">:/emblems/id.svg</td><td width="400">rrze-icons/emblems/id.svg</td><td width="200">id</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/page-25.png" alt="rrze-icons/emblems/page-25.svg"/></td><td width="400">:/emblems/page-25.svg</td><td width="400">rrze-icons/emblems/page-25.svg</td><td width="200">page-25</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/affirmation.png" alt="rrze-icons/emblems/affirmation.svg"/></td><td width="400">:/emblems/affirmation.svg</td><td width="400">rrze-icons/emblems/affirmation.svg</td><td width="200">affirmation</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/inspector-hat.png" alt="rrze-icons/emblems/inspector-hat.svg"/></td><td width="400">:/emblems/inspector-hat.svg</td><td width="400">rrze-icons/emblems/inspector-hat.svg</td><td width="200">inspector-hat</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/network-cloud.png" alt="rrze-icons/emblems/network-cloud.svg"/></td><td width="400">:/emblems/network-cloud.svg</td><td width="400">rrze-icons/emblems/network-cloud.svg</td><td width="200">network-cloud</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/unix.png" alt="rrze-icons/emblems/unix.svg"/></td><td width="400">:/emblems/unix.svg</td><td width="400">rrze-icons/emblems/unix.svg</td><td width="200">unix</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/lock.png" alt="rrze-icons/emblems/lock.svg"/></td><td width="400">:/emblems/lock.svg</td><td width="400">rrze-icons/emblems/lock.svg</td><td width="200">lock</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database.png" alt="rrze-icons/emblems/database.svg"/></td><td width="400">:/emblems/database.svg</td><td width="400">rrze-icons/emblems/database.svg</td><td width="200">database</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/wide-area-network-link.png" alt="rrze-icons/emblems/wide-area-network-link.svg"/></td><td width="400">:/emblems/wide-area-network-link.svg</td><td width="400">rrze-icons/emblems/wide-area-network-link.svg</td><td width="200">wide-area-network-link</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tree-diagramm-move.png" alt="rrze-icons/emblems/tree-diagramm-move.svg"/></td><td width="400">:/emblems/tree-diagramm-move.svg</td><td width="400">rrze-icons/emblems/tree-diagramm-move.svg</td><td width="200">tree-diagramm-move</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/audio-visual-slide.png" alt="rrze-icons/emblems/audio-visual-slide.svg"/></td><td width="400">:/emblems/audio-visual-slide.svg</td><td width="400">rrze-icons/emblems/audio-visual-slide.svg</td><td width="200">audio-visual-slide</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/twenty-five-per-page.png" alt="rrze-icons/emblems/twenty-five-per-page.svg"/></td><td width="400">:/emblems/twenty-five-per-page.svg</td><td width="400">rrze-icons/emblems/twenty-five-per-page.svg</td><td width="200">twenty-five-per-page</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/bridge-stone.png" alt="rrze-icons/emblems/bridge-stone.svg"/></td><td width="400">:/emblems/bridge-stone.svg</td><td width="400">rrze-icons/emblems/bridge-stone.svg</td><td width="200">bridge-stone</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-attribute.png" alt="rrze-icons/emblems/directory-attribute.svg"/></td><td width="400">:/emblems/directory-attribute.svg</td><td width="400">rrze-icons/emblems/directory-attribute.svg</td><td width="200">directory-attribute</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/wifi.png" alt="rrze-icons/emblems/wifi.svg"/></td><td width="400">:/emblems/wifi.svg</td><td width="400">rrze-icons/emblems/wifi.svg</td><td width="200">wifi</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/information.png" alt="rrze-icons/emblems/information.svg"/></td><td width="400">:/emblems/information.svg</td><td width="400">rrze-icons/emblems/information.svg</td><td width="200">information</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/email.png" alt="rrze-icons/emblems/email.svg"/></td><td width="400">:/emblems/email.svg</td><td width="400">rrze-icons/emblems/email.svg</td><td width="200">email</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-schema.png" alt="rrze-icons/emblems/directory-schema.svg"/></td><td width="400">:/emblems/directory-schema.svg</td><td width="400">rrze-icons/emblems/directory-schema.svg</td><td width="200">directory-schema</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/affiliation.png" alt="rrze-icons/emblems/affiliation.svg"/></td><td width="400">:/emblems/affiliation.svg</td><td width="400">rrze-icons/emblems/affiliation.svg</td><td width="200">affiliation</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/entitlement.png" alt="rrze-icons/emblems/entitlement.svg"/></td><td width="400">:/emblems/entitlement.svg</td><td width="400">rrze-icons/emblems/entitlement.svg</td><td width="200">entitlement</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-upload.png" alt="rrze-icons/emblems/report-upload.svg"/></td><td width="400">:/emblems/report-upload.svg</td><td width="400">rrze-icons/emblems/report-upload.svg</td><td width="200">report-upload</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/account-delete.png" alt="rrze-icons/emblems/account-delete.svg"/></td><td width="400">:/emblems/account-delete.svg</td><td width="400">rrze-icons/emblems/account-delete.svg</td><td width="200">account-delete</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/for-free.png" alt="rrze-icons/emblems/for-free.svg"/></td><td width="400">:/emblems/for-free.svg</td><td width="400">rrze-icons/emblems/for-free.svg</td><td width="200">for-free</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-vcs-subversion.png" alt="rrze-icons/emblems/database-vcs-subversion.svg"/></td><td width="400">:/emblems/database-vcs-subversion.svg</td><td width="400">rrze-icons/emblems/database-vcs-subversion.svg</td><td width="200">database-vcs-subversion</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/pen.png" alt="rrze-icons/emblems/pen.svg"/></td><td width="400">:/emblems/pen.svg</td><td width="400">rrze-icons/emblems/pen.svg</td><td width="200">pen</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/floppy-disc-green.png" alt="rrze-icons/emblems/floppy-disc-green.svg"/></td><td width="400">:/emblems/floppy-disc-green.svg</td><td width="400">rrze-icons/emblems/floppy-disc-green.svg</td><td width="200">floppy-disc-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tree-diagramm-new.png" alt="rrze-icons/emblems/tree-diagramm-new.svg"/></td><td width="400">:/emblems/tree-diagramm-new.svg</td><td width="400">rrze-icons/emblems/tree-diagramm-new.svg</td><td width="200">tree-diagramm-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/bridge-stone-new.png" alt="rrze-icons/emblems/bridge-stone-new.svg"/></td><td width="400">:/emblems/bridge-stone-new.svg</td><td width="400">rrze-icons/emblems/bridge-stone-new.svg</td><td width="200">bridge-stone-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/subversion.png" alt="rrze-icons/emblems/subversion.svg"/></td><td width="400">:/emblems/subversion.svg</td><td width="400">rrze-icons/emblems/subversion.svg</td><td width="200">subversion</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tomcat.png" alt="rrze-icons/emblems/tomcat.svg"/></td><td width="400">:/emblems/tomcat.svg</td><td width="400">rrze-icons/emblems/tomcat.svg</td><td width="200">tomcat</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/geo-id.png" alt="rrze-icons/emblems/geo-id.svg"/></td><td width="400">:/emblems/geo-id.svg</td><td width="400">rrze-icons/emblems/geo-id.svg</td><td width="200">geo-id</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-postgres.png" alt="rrze-icons/emblems/database-postgres.svg"/></td><td width="400">:/emblems/database-postgres.svg</td><td width="400">rrze-icons/emblems/database-postgres.svg</td><td width="200">database-postgres</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/video-film.png" alt="rrze-icons/emblems/video-film.svg"/></td><td width="400">:/emblems/video-film.svg</td><td width="400">rrze-icons/emblems/video-film.svg</td><td width="200">video-film</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-mysql.png" alt="rrze-icons/emblems/database-mysql.svg"/></td><td width="400">:/emblems/database-mysql.svg</td><td width="400">rrze-icons/emblems/database-mysql.svg</td><td width="200">database-mysql</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/subversion-logo.png" alt="rrze-icons/emblems/subversion-logo.svg"/></td><td width="400">:/emblems/subversion-logo.svg</td><td width="400">rrze-icons/emblems/subversion-logo.svg</td><td width="200">subversion-logo</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/task.png" alt="rrze-icons/emblems/task.svg"/></td><td width="400">:/emblems/task.svg</td><td width="400">rrze-icons/emblems/task.svg</td><td width="200">task</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/all-per-page.png" alt="rrze-icons/emblems/all-per-page.svg"/></td><td width="400">:/emblems/all-per-page.svg</td><td width="400">rrze-icons/emblems/all-per-page.svg</td><td width="200">all-per-page</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/slide-audio.png" alt="rrze-icons/emblems/slide-audio.svg"/></td><td width="400">:/emblems/slide-audio.svg</td><td width="400">rrze-icons/emblems/slide-audio.svg</td><td width="200">slide-audio</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/movie-audio.png" alt="rrze-icons/emblems/movie-audio.svg"/></td><td width="400">:/emblems/movie-audio.svg</td><td width="400">rrze-icons/emblems/movie-audio.svg</td><td width="200">movie-audio</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/bridge-stone-delete.png" alt="rrze-icons/emblems/bridge-stone-delete.svg"/></td><td width="400">:/emblems/bridge-stone-delete.svg</td><td width="400">rrze-icons/emblems/bridge-stone-delete.svg</td><td width="200">bridge-stone-delete</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/promotion-data.png" alt="rrze-icons/emblems/promotion-data.svg"/></td><td width="400">:/emblems/promotion-data.svg</td><td width="400">rrze-icons/emblems/promotion-data.svg</td><td width="200">promotion-data</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/rss-feed.png" alt="rrze-icons/emblems/rss-feed.svg"/></td><td width="400">:/emblems/rss-feed.svg</td><td width="400">rrze-icons/emblems/rss-feed.svg</td><td width="200">rss-feed</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/peace-sign.png" alt="rrze-icons/emblems/peace-sign.svg"/></td><td width="400">:/emblems/peace-sign.svg</td><td width="400">rrze-icons/emblems/peace-sign.svg</td><td width="200">peace-sign</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/firewall.png" alt="rrze-icons/emblems/firewall.svg"/></td><td width="400">:/emblems/firewall.svg</td><td width="400">rrze-icons/emblems/firewall.svg</td><td width="200">firewall</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/slide.png" alt="rrze-icons/emblems/slide.svg"/></td><td width="400">:/emblems/slide.svg</td><td width="400">rrze-icons/emblems/slide.svg</td><td width="200">slide</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/audio-itunes.png" alt="rrze-icons/emblems/audio-itunes.svg"/></td><td width="400">:/emblems/audio-itunes.svg</td><td width="400">rrze-icons/emblems/audio-itunes.svg</td><td width="200">audio-itunes</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/footnote-new.png" alt="rrze-icons/emblems/footnote-new.svg"/></td><td width="400">:/emblems/footnote-new.svg</td><td width="400">rrze-icons/emblems/footnote-new.svg</td><td width="200">footnote-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/index.png" alt="rrze-icons/emblems/index.svg"/></td><td width="400">:/emblems/index.svg</td><td width="400">rrze-icons/emblems/index.svg</td><td width="200">index</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/doctoral-cap.png" alt="rrze-icons/emblems/doctoral-cap.svg"/></td><td width="400">:/emblems/doctoral-cap.svg</td><td width="400">rrze-icons/emblems/doctoral-cap.svg</td><td width="200">doctoral-cap</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/zipper.png" alt="rrze-icons/emblems/zipper.svg"/></td><td width="400">:/emblems/zipper.svg</td><td width="400">rrze-icons/emblems/zipper.svg</td><td width="200">zipper</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/organizational-unit.png" alt="rrze-icons/emblems/organizational-unit.svg"/></td><td width="400">:/emblems/organizational-unit.svg</td><td width="400">rrze-icons/emblems/organizational-unit.svg</td><td width="200">organizational-unit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/account-edit.png" alt="rrze-icons/emblems/account-edit.svg"/></td><td width="400">:/emblems/account-edit.svg</td><td width="400">rrze-icons/emblems/account-edit.svg</td><td width="200">account-edit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/structured-program-stay-abroad.png" alt="rrze-icons/emblems/structured-program-stay-abroad.svg"/></td><td width="400">:/emblems/structured-program-stay-abroad.svg</td><td width="400">rrze-icons/emblems/structured-program-stay-abroad.svg</td><td width="200">structured-program-stay-abroad</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/fifty-per-page.png" alt="rrze-icons/emblems/fifty-per-page.svg"/></td><td width="400">:/emblems/fifty-per-page.svg</td><td width="400">rrze-icons/emblems/fifty-per-page.svg</td><td width="200">fifty-per-page</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/money.png" alt="rrze-icons/emblems/money.svg"/></td><td width="400">:/emblems/money.svg</td><td width="400">rrze-icons/emblems/money.svg</td><td width="200">money</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-object.png" alt="rrze-icons/emblems/directory-object.svg"/></td><td width="400">:/emblems/directory-object.svg</td><td width="400">rrze-icons/emblems/directory-object.svg</td><td width="200">directory-object</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-new.png" alt="rrze-icons/emblems/report-new.svg"/></td><td width="400">:/emblems/report-new.svg</td><td width="400">rrze-icons/emblems/report-new.svg</td><td width="200">report-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/single-sign-on.png" alt="rrze-icons/emblems/single-sign-on.svg"/></td><td width="400">:/emblems/single-sign-on.svg</td><td width="400">rrze-icons/emblems/single-sign-on.svg</td><td width="200">single-sign-on</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-delete.png" alt="rrze-icons/emblems/report-delete.svg"/></td><td width="400">:/emblems/report-delete.svg</td><td width="400">rrze-icons/emblems/report-delete.svg</td><td width="200">report-delete</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-firebird.png" alt="rrze-icons/emblems/database-firebird.svg"/></td><td width="400">:/emblems/database-firebird.svg</td><td width="400">rrze-icons/emblems/database-firebird.svg</td><td width="200">database-firebird</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/page-50.png" alt="rrze-icons/emblems/page-50.svg"/></td><td width="400">:/emblems/page-50.svg</td><td width="400">rrze-icons/emblems/page-50.svg</td><td width="200">page-50</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/office-word.png" alt="rrze-icons/emblems/office-word.svg"/></td><td width="400">:/emblems/office-word.svg</td><td width="400">rrze-icons/emblems/office-word.svg</td><td width="200">office-word</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-syntax.png" alt="rrze-icons/emblems/directory-syntax.svg"/></td><td width="400">:/emblems/directory-syntax.svg</td><td width="400">rrze-icons/emblems/directory-syntax.svg</td><td width="200">directory-syntax</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-object-class.png" alt="rrze-icons/emblems/directory-object-class.svg"/></td><td width="400">:/emblems/directory-object-class.svg</td><td width="400">rrze-icons/emblems/directory-object-class.svg</td><td width="200">directory-object-class</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/footnote-edit.png" alt="rrze-icons/emblems/footnote-edit.svg"/></td><td width="400">:/emblems/footnote-edit.svg</td><td width="400">rrze-icons/emblems/footnote-edit.svg</td><td width="200">footnote-edit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/office-excel.png" alt="rrze-icons/emblems/office-excel.svg"/></td><td width="400">:/emblems/office-excel.svg</td><td width="400">rrze-icons/emblems/office-excel.svg</td><td width="200">office-excel</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/webview.png" alt="rrze-icons/emblems/webview.svg"/></td><td width="400">:/emblems/webview.svg</td><td width="400">rrze-icons/emblems/webview.svg</td><td width="200">webview</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-edit.png" alt="rrze-icons/emblems/report-edit.svg"/></td><td width="400">:/emblems/report-edit.svg</td><td width="400">rrze-icons/emblems/report-edit.svg</td><td width="200">report-edit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/export.png" alt="rrze-icons/emblems/export.svg"/></td><td width="400">:/emblems/export.svg</td><td width="400">rrze-icons/emblems/export.svg</td><td width="200">export</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/globe.png" alt="rrze-icons/emblems/globe.svg"/></td><td width="400">:/emblems/globe.svg</td><td width="400">rrze-icons/emblems/globe.svg</td><td width="200">globe</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/phone.png" alt="rrze-icons/emblems/phone.svg"/></td><td width="400">:/emblems/phone.svg</td><td width="400">rrze-icons/emblems/phone.svg</td><td width="200">phone</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/footnote.png" alt="rrze-icons/emblems/footnote.svg"/></td><td width="400">:/emblems/footnote.svg</td><td width="400">rrze-icons/emblems/footnote.svg</td><td width="200">footnote</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory.png" alt="rrze-icons/emblems/directory.svg"/></td><td width="400">:/emblems/directory.svg</td><td width="400">rrze-icons/emblems/directory.svg</td><td width="200">directory</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-openldap.png" alt="rrze-icons/emblems/database-openldap.svg"/></td><td width="400">:/emblems/database-openldap.svg</td><td width="400">rrze-icons/emblems/database-openldap.svg</td><td width="200">database-openldap</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/audio-itunes-u.png" alt="rrze-icons/emblems/audio-itunes-u.svg"/></td><td width="400">:/emblems/audio-itunes-u.svg</td><td width="400">rrze-icons/emblems/audio-itunes-u.svg</td><td width="200">audio-itunes-u</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-otrs.png" alt="rrze-icons/emblems/database-otrs.svg"/></td><td width="400">:/emblems/database-otrs.svg</td><td width="400">rrze-icons/emblems/database-otrs.svg</td><td width="200">database-otrs</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/media-film.png" alt="rrze-icons/emblems/media-film.svg"/></td><td width="400">:/emblems/media-film.svg</td><td width="400">rrze-icons/emblems/media-film.svg</td><td width="200">media-film</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tree-diagramm.png" alt="rrze-icons/emblems/tree-diagramm.svg"/></td><td width="400">:/emblems/tree-diagramm.svg</td><td width="400">rrze-icons/emblems/tree-diagramm.svg</td><td width="200">tree-diagramm</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/jive/class.png" alt="external/jive/class.png"/></td><td width="400">:/jive/class.png</td><td width="400">external/jive/class.png</td><td width="200">class</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/jive/device.png" alt="external/jive/device.png"/></td><td width="400">:/jive/device.png</td><td width="400">external/jive/device.png</td><td width="200">device</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/jive/server.png" alt="external/jive/server.png"/></td><td width="400">:/jive/server.png</td><td width="400">external/jive/server.png</td><td width="200">server</td></tr>
 </table>
-<h2><a name="rrze-icons/devices">:/devices/ (rrze-icons/devices)</a></h2>
+<h2><a name="external">:/ (external)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/devices/" Directory: "rrze-icons/devices"</th>
+<th colspan="4">Resource: ":/" Directory: "external"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/wlan-controller.png" alt="rrze-icons/devices/wlan-controller.svg"/></td><td width="400">:/devices/wlan-controller.svg</td><td width="400">rrze-icons/devices/wlan-controller.svg</td><td width="200">wlan-controller</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-access.png" alt="rrze-icons/devices/server-access.svg"/></td><td width="400">:/devices/server-access.svg</td><td width="400">rrze-icons/devices/server-access.svg</td><td width="200">server-access</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-book.png" alt="rrze-icons/devices/server-book.svg"/></td><td width="400">:/devices/server-book.svg</td><td width="400">rrze-icons/devices/server-book.svg</td><td width="200">server-book</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-web-secure.png" alt="rrze-icons/devices/server-web-secure.svg"/></td><td width="400">:/devices/server-web-secure.svg</td><td width="400">rrze-icons/devices/server-web-secure.svg</td><td width="200">server-web-secure</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-yellow.png" alt="rrze-icons/devices/server-database-yellow.svg"/></td><td width="400">:/devices/server-database-yellow.svg</td><td width="400">rrze-icons/devices/server-database-yellow.svg</td><td width="200">server-database-yellow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/router.png" alt="rrze-icons/devices/router.svg"/></td><td width="400">:/devices/router.svg</td><td width="400">rrze-icons/devices/router.svg</td><td width="200">router</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-web-yellow.png" alt="rrze-icons/devices/server-web-yellow.svg"/></td><td width="400">:/devices/server-web-yellow.svg</td><td width="400">rrze-icons/devices/server-web-yellow.svg</td><td width="200">server-web-yellow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-firewall.png" alt="rrze-icons/devices/server-firewall.svg"/></td><td width="400">:/devices/server-firewall.svg</td><td width="400">rrze-icons/devices/server-firewall.svg</td><td width="200">server-firewall</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-vpn.png" alt="rrze-icons/devices/server-vpn.svg"/></td><td width="400">:/devices/server-vpn.svg</td><td width="400">rrze-icons/devices/server-vpn.svg</td><td width="200">server-vpn</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-print.png" alt="rrze-icons/devices/server-print.svg"/></td><td width="400">:/devices/server-print.svg</td><td width="400">rrze-icons/devices/server-print.svg</td><td width="200">server-print</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-otrs.png" alt="rrze-icons/devices/server-database-otrs.svg"/></td><td width="400">:/devices/server-database-otrs.svg</td><td width="400">rrze-icons/devices/server-database-otrs.svg</td><td width="200">server-database-otrs</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-email.png" alt="rrze-icons/devices/server-email.svg"/></td><td width="400">:/devices/server-email.svg</td><td width="400">rrze-icons/devices/server-email.svg</td><td width="200">server-email</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-green.png" alt="rrze-icons/devices/server-green.svg"/></td><td width="400">:/devices/server-green.svg</td><td width="400">rrze-icons/devices/server-green.svg</td><td width="200">server-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-directory-green.png" alt="rrze-icons/devices/server-directory-green.svg"/></td><td width="400">:/devices/server-directory-green.svg</td><td width="400">rrze-icons/devices/server-directory-green.svg</td><td width="200">server-directory-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-directory-yellow.png" alt="rrze-icons/devices/server-directory-yellow.svg"/></td><td width="400">:/devices/server-directory-yellow.svg</td><td width="400">rrze-icons/devices/server-directory-yellow.svg</td><td width="200">server-directory-yellow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-multiple.png" alt="rrze-icons/devices/server-multiple.svg"/></td><td width="400">:/devices/server-multiple.svg</td><td width="400">rrze-icons/devices/server-multiple.svg</td><td width="200">server-multiple</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/switch.png" alt="rrze-icons/devices/switch.svg"/></td><td width="400">:/devices/switch.svg</td><td width="400">rrze-icons/devices/switch.svg</td><td width="200">switch</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-mysql.png" alt="rrze-icons/devices/server-database-mysql.svg"/></td><td width="400">:/devices/server-database-mysql.svg</td><td width="400">rrze-icons/devices/server-database-mysql.svg</td><td width="200">server-database-mysql</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/wlan-access-point.png" alt="rrze-icons/devices/wlan-access-point.svg"/></td><td width="400">:/devices/wlan-access-point.svg</td><td width="400">rrze-icons/devices/wlan-access-point.svg</td><td width="200">wlan-access-point</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-user.png" alt="rrze-icons/devices/server-user.svg"/></td><td width="400">:/devices/server-user.svg</td><td width="400">rrze-icons/devices/server-user.svg</td><td width="200">server-user</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-web-green.png" alt="rrze-icons/devices/server-web-green.svg"/></td><td width="400">:/devices/server-web-green.svg</td><td width="400">rrze-icons/devices/server-web-green.svg</td><td width="200">server-web-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-blades.png" alt="rrze-icons/devices/server-blades.svg"/></td><td width="400">:/devices/server-blades.svg</td><td width="400">rrze-icons/devices/server-blades.svg</td><td width="200">server-blades</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-file.png" alt="rrze-icons/devices/server-file.svg"/></td><td width="400">:/devices/server-file.svg</td><td width="400">rrze-icons/devices/server-file.svg</td><td width="200">server-file</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/modem.png" alt="rrze-icons/devices/modem.svg"/></td><td width="400">:/devices/modem.svg</td><td width="400">rrze-icons/devices/modem.svg</td><td width="200">modem</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/workstation.png" alt="rrze-icons/devices/workstation.svg"/></td><td width="400">:/devices/workstation.svg</td><td width="400">rrze-icons/devices/workstation.svg</td><td width="200">workstation</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database.png" alt="rrze-icons/devices/server-database.svg"/></td><td width="400">:/devices/server-database.svg</td><td width="400">rrze-icons/devices/server-database.svg</td><td width="200">server-database</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-postgres.png" alt="rrze-icons/devices/server-database-postgres.svg"/></td><td width="400">:/devices/server-database-postgres.svg</td><td width="400">rrze-icons/devices/server-database-postgres.svg</td><td width="200">server-database-postgres</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-monitoring.png" alt="rrze-icons/devices/server-monitoring.svg"/></td><td width="400">:/devices/server-monitoring.svg</td><td width="400">rrze-icons/devices/server-monitoring.svg</td><td width="200">server-monitoring</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-firebird.png" alt="rrze-icons/devices/server-database-firebird.svg"/></td><td width="400">:/devices/server-database-firebird.svg</td><td width="400">rrze-icons/devices/server-database-firebird.svg</td><td width="200">server-database-firebird</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-directory.png" alt="rrze-icons/devices/server-directory.svg"/></td><td width="400">:/devices/server-directory.svg</td><td width="400">rrze-icons/devices/server-directory.svg</td><td width="200">server-directory</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-subversion.png" alt="rrze-icons/devices/server-subversion.svg"/></td><td width="400">:/devices/server-subversion.svg</td><td width="400">rrze-icons/devices/server-subversion.svg</td><td width="200">server-subversion</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/database-locked.png" alt="rrze-icons/devices/database-locked.svg"/></td><td width="400">:/devices/database-locked.svg</td><td width="400">rrze-icons/devices/database-locked.svg</td><td width="200">database-locked</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-web.png" alt="rrze-icons/devices/server-web.svg"/></td><td width="400">:/devices/server-web.svg</td><td width="400">rrze-icons/devices/server-web.svg</td><td width="200">server-web</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-email-relay.png" alt="rrze-icons/devices/server-email-relay.svg"/></td><td width="400">:/devices/server-email-relay.svg</td><td width="400">rrze-icons/devices/server-email-relay.svg</td><td width="200">server-email-relay</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-yellow.png" alt="rrze-icons/devices/server-yellow.svg"/></td><td width="400">:/devices/server-yellow.svg</td><td width="400">rrze-icons/devices/server-yellow.svg</td><td width="200">server-yellow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-green.png" alt="rrze-icons/devices/server-database-green.svg"/></td><td width="400">:/devices/server-database-green.svg</td><td width="400">rrze-icons/devices/server-database-green.svg</td><td width="200">server-database-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-red.png" alt="rrze-icons/devices/server-red.svg"/></td><td width="400">:/devices/server-red.svg</td><td width="400">rrze-icons/devices/server-red.svg</td><td width="200">server-red</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-accounting.png" alt="rrze-icons/devices/server-accounting.svg"/></td><td width="400">:/devices/server-accounting.svg</td><td width="400">rrze-icons/devices/server-accounting.svg</td><td width="200">server-accounting</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-radius.png" alt="rrze-icons/devices/server-radius.svg"/></td><td width="400">:/devices/server-radius.svg</td><td width="400">rrze-icons/devices/server-radius.svg</td><td width="200">server-radius</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server.png" alt="rrze-icons/devices/server.svg"/></td><td width="400">:/devices/server.svg</td><td width="400">rrze-icons/devices/server.svg</td><td width="200">server</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/class.png" alt="external/class.png"/></td><td width="400">:/class.png</td><td width="400">external/class.png</td><td width="200">class</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/function.png" alt="external/function.png"/></td><td width="400">:/function.png</td><td width="400">external/function.png</td><td width="200">function</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/ipython.png" alt="external/ipython.png"/></td><td width="400">:/ipython.png</td><td width="400">external/ipython.png</td><td width="200">ipython</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/python-console.png" alt="external/python-console.png"/></td><td width="400">:/python-console.png</td><td width="400">external/python-console.png</td><td width="200">python-console</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/python-file.png" alt="external/python-file.png"/></td><td width="400">:/python-file.png</td><td width="400">external/python-file.png</td><td width="200">python-file</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/python-module.png" alt="external/python-module.png"/></td><td width="400">:/python-module.png</td><td width="400">external/python-module.png</td><td width="200">python-module</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/python-package.png" alt="external/python-package.png"/></td><td width="400">:/python-package.png</td><td width="400">external/python-package.png</td><td width="200">python-package</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/python.png" alt="external/python.png"/></td><td width="400">:/python.png</td><td width="400">external/python.png</td><td width="200">python</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/pythonw-console.png" alt="external/pythonw-console.png"/></td><td width="400">:/pythonw-console.png</td><td width="400">external/pythonw-console.png</td><td width="200">pythonw-console</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="external/tango.png" alt="external/tango.png"/></td><td width="400">:/tango.png</td><td width="400">external/tango.png</td><td width="200">tango</td></tr>
+</table>
+<h2><a name="large/snapshot">:/snapshot/ (large/snapshot)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/snapshot/" Directory: "large/snapshot"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/SardanaEditor.png" alt="large/snapshot/SardanaEditor.png"/></td><td width="400">:/snapshot/SardanaEditor.png</td><td width="400">large/snapshot/SardanaEditor.png</td><td width="200">SardanaEditor</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusArrayEditor.png" alt="large/snapshot/TaurusArrayEditor.png"/></td><td width="400">:/snapshot/TaurusArrayEditor.png</td><td width="400">large/snapshot/TaurusArrayEditor.png</td><td width="200">TaurusArrayEditor</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusDbTreeWidget.png" alt="large/snapshot/TaurusDbTreeWidget.png"/></td><td width="400">:/snapshot/TaurusDbTreeWidget.png</td><td width="400">large/snapshot/TaurusDbTreeWidget.png</td><td width="200">TaurusDbTreeWidget</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusDevicePanel.png" alt="large/snapshot/TaurusDevicePanel.png"/></td><td width="400">:/snapshot/TaurusDevicePanel.png</td><td width="400">large/snapshot/TaurusDevicePanel.png</td><td width="200">TaurusDevicePanel</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusForm.png" alt="large/snapshot/TaurusForm.png"/></td><td width="400">:/snapshot/TaurusForm.png</td><td width="400">large/snapshot/TaurusForm.png</td><td width="200">TaurusForm</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusImageDialog.png" alt="large/snapshot/TaurusImageDialog.png"/></td><td width="400">:/snapshot/TaurusImageDialog.png</td><td width="400">large/snapshot/TaurusImageDialog.png</td><td width="200">TaurusImageDialog</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusJDrawSynopticsView.png" alt="large/snapshot/TaurusJDrawSynopticsView.png"/></td><td width="400">:/snapshot/TaurusJDrawSynopticsView.png</td><td width="400">large/snapshot/TaurusJDrawSynopticsView.png</td><td width="200">TaurusJDrawSynopticsView</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusNeXusBrowser.png" alt="large/snapshot/TaurusNeXusBrowser.png"/></td><td width="400">:/snapshot/TaurusNeXusBrowser.png</td><td width="400">large/snapshot/TaurusNeXusBrowser.png</td><td width="200">TaurusNeXusBrowser</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusPlot.png" alt="large/snapshot/TaurusPlot.png"/></td><td width="400">:/snapshot/TaurusPlot.png</td><td width="400">large/snapshot/TaurusPlot.png</td><td width="200">TaurusPlot</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusQubDataImageDisplay.png" alt="large/snapshot/TaurusQubDataImageDisplay.png"/></td><td width="400">:/snapshot/TaurusQubDataImageDisplay.png</td><td width="400">large/snapshot/TaurusQubDataImageDisplay.png</td><td width="200">TaurusQubDataImageDisplay</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusShell.png" alt="large/snapshot/TaurusShell.png"/></td><td width="400">:/snapshot/TaurusShell.png</td><td width="400">large/snapshot/TaurusShell.png</td><td width="200">TaurusShell</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusTrend.png" alt="large/snapshot/TaurusTrend.png"/></td><td width="400">:/snapshot/TaurusTrend.png</td><td width="400">large/snapshot/TaurusTrend.png</td><td width="200">TaurusTrend</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusTrend2DDialog.png" alt="large/snapshot/TaurusTrend2DDialog.png"/></td><td width="400">:/snapshot/TaurusTrend2DDialog.png</td><td width="400">large/snapshot/TaurusTrend2DDialog.png</td><td width="200">TaurusTrend2DDialog</td></tr>
+</table>
+<h2><a name="large">:/ (large)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/" Directory: "large"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="large/TaurusSplash.png" alt="large/TaurusSplash.png"/></td><td width="400">:/TaurusSplash.png</td><td width="400">large/TaurusSplash.png</td><td width="200">TaurusSplash</td></tr>
 </table>
 <h2><a name="rrze-icons/actions">:/actions/ (rrze-icons/actions)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/actions/" Directory: "rrze-icons/actions"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/run.png" alt="rrze-icons/actions/run.svg"/></td><td width="400">:/actions/run.svg</td><td width="400">rrze-icons/actions/run.svg</td><td width="200">run</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/hide.png" alt="rrze-icons/actions/hide.svg"/></td><td width="400">:/actions/hide.svg</td><td width="400">rrze-icons/actions/hide.svg</td><td width="200">hide</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-down.png" alt="rrze-icons/actions/sort-down.svg"/></td><td width="400">:/actions/sort-down.svg</td><td width="400">rrze-icons/actions/sort-down.svg</td><td width="200">sort-down</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/up.png" alt="rrze-icons/actions/up.svg"/></td><td width="400">:/actions/up.svg</td><td width="400">rrze-icons/actions/up.svg</td><td width="200">up</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dynamic-blue-down.png" alt="rrze-icons/actions/dynamic-blue-down.svg"/></td><td width="400">:/actions/dynamic-blue-down.svg</td><td width="400">rrze-icons/actions/dynamic-blue-down.svg</td><td width="200">dynamic-blue-down</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/up-grey.png" alt="rrze-icons/actions/up-grey.svg"/></td><td width="400">:/actions/up-grey.svg</td><td width="400">rrze-icons/actions/up-grey.svg</td><td width="200">up-grey</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/left-grey.png" alt="rrze-icons/actions/left-grey.svg"/></td><td width="400">:/actions/left-grey.svg</td><td width="400">rrze-icons/actions/left-grey.svg</td><td width="200">left-grey</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-down-grey.png" alt="rrze-icons/actions/move-waiting-down-grey.svg"/></td><td width="400">:/actions/move-waiting-down-grey.svg</td><td width="400">rrze-icons/actions/move-waiting-down-grey.svg</td><td width="200">move-waiting-down-grey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/action-undo.png" alt="rrze-icons/actions/action-undo.svg"/></td><td width="400">:/actions/action-undo.svg</td><td width="400">rrze-icons/actions/action-undo.svg</td><td width="200">action-undo</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/add-participant.png" alt="rrze-icons/actions/add-participant.svg"/></td><td width="400">:/actions/add-participant.svg</td><td width="400">rrze-icons/actions/add-participant.svg</td><td width="200">add-participant</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/right.png" alt="rrze-icons/actions/right.svg"/></td><td width="400">:/actions/right.svg</td><td width="400">rrze-icons/actions/right.svg</td><td width="200">right</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/add.png" alt="rrze-icons/actions/add.svg"/></td><td width="400">:/actions/add.svg</td><td width="400">rrze-icons/actions/add.svg</td><td width="200">add</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/approval.png" alt="rrze-icons/actions/approval.svg"/></td><td width="400">:/actions/approval.svg</td><td width="400">rrze-icons/actions/approval.svg</td><td width="200">approval</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/manage-settings.png" alt="rrze-icons/actions/manage-settings.svg"/></td><td width="400">:/actions/manage-settings.svg</td><td width="400">rrze-icons/actions/manage-settings.svg</td><td width="200">manage-settings</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/load-settings.png" alt="rrze-icons/actions/load-settings.svg"/></td><td width="400">:/actions/load-settings.svg</td><td width="400">rrze-icons/actions/load-settings.svg</td><td width="200">load-settings</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/arrange-boxes.png" alt="rrze-icons/actions/arrange-boxes.svg"/></td><td width="400">:/actions/arrange-boxes.svg</td><td width="400">rrze-icons/actions/arrange-boxes.svg</td><td width="200">arrange-boxes</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dynamic-blue-right.png" alt="rrze-icons/actions/dynamic-blue-right.svg"/></td><td width="400">:/actions/dynamic-blue-right.svg</td><td width="400">rrze-icons/actions/dynamic-blue-right.svg</td><td width="200">dynamic-blue-right</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/left.png" alt="rrze-icons/actions/left.svg"/></td><td width="400">:/actions/left.svg</td><td width="400">rrze-icons/actions/left.svg</td><td width="200">left</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/download.png" alt="rrze-icons/actions/download.svg"/></td><td width="400">:/actions/download.svg</td><td width="400">rrze-icons/actions/download.svg</td><td width="200">download</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/switch-course-book.png" alt="rrze-icons/actions/switch-course-book.svg"/></td><td width="400">:/actions/switch-course-book.svg</td><td width="400">rrze-icons/actions/switch-course-book.svg</td><td width="200">switch-course-book</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/data-transfer.png" alt="rrze-icons/actions/data-transfer.svg"/></td><td width="400">:/actions/data-transfer.svg</td><td width="400">rrze-icons/actions/data-transfer.svg</td><td width="200">data-transfer</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/send-email-group.png" alt="rrze-icons/actions/send-email-group.svg"/></td><td width="400">:/actions/send-email-group.svg</td><td width="400">rrze-icons/actions/send-email-group.svg</td><td width="200">send-email-group</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/switch-course.png" alt="rrze-icons/actions/switch-course.svg"/></td><td width="400">:/actions/switch-course.svg</td><td width="400">rrze-icons/actions/switch-course.svg</td><td width="200">switch-course</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/right-grey.png" alt="rrze-icons/actions/right-grey.svg"/></td><td width="400">:/actions/right-grey.svg</td><td width="400">rrze-icons/actions/right-grey.svg</td><td width="200">right-grey</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/send-email-user.png" alt="rrze-icons/actions/send-email-user.svg"/></td><td width="400">:/actions/send-email-user.svg</td><td width="400">rrze-icons/actions/send-email-user.svg</td><td width="200">send-email-user</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/back-to-ou.png" alt="rrze-icons/actions/back-to-ou.svg"/></td><td width="400">:/actions/back-to-ou.svg</td><td width="400">rrze-icons/actions/back-to-ou.svg</td><td width="200">back-to-ou</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/data-transfer.png" alt="rrze-icons/actions/data-transfer.svg"/></td><td width="400">:/actions/data-transfer.svg</td><td width="400">rrze-icons/actions/data-transfer.svg</td><td width="200">data-transfer</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/delete-all-participants.png" alt="rrze-icons/actions/delete-all-participants.svg"/></td><td width="400">:/actions/delete-all-participants.svg</td><td width="400">rrze-icons/actions/delete-all-participants.svg</td><td width="200">delete-all-participants</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dial-in.png" alt="rrze-icons/actions/dial-in.svg"/></td><td width="400">:/actions/dial-in.svg</td><td width="400">rrze-icons/actions/dial-in.svg</td><td width="200">dial-in</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/down-grey.png" alt="rrze-icons/actions/down-grey.svg"/></td><td width="400">:/actions/down-grey.svg</td><td width="400">rrze-icons/actions/down-grey.svg</td><td width="200">down-grey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/down.png" alt="rrze-icons/actions/down.svg"/></td><td width="400">:/actions/down.svg</td><td width="400">rrze-icons/actions/down.svg</td><td width="200">down</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/download.png" alt="rrze-icons/actions/download.svg"/></td><td width="400">:/actions/download.svg</td><td width="400">rrze-icons/actions/download.svg</td><td width="200">download</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dynamic-blue-down.png" alt="rrze-icons/actions/dynamic-blue-down.svg"/></td><td width="400">:/actions/dynamic-blue-down.svg</td><td width="400">rrze-icons/actions/dynamic-blue-down.svg</td><td width="200">dynamic-blue-down</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dynamic-blue-left.png" alt="rrze-icons/actions/dynamic-blue-left.svg"/></td><td width="400">:/actions/dynamic-blue-left.svg</td><td width="400">rrze-icons/actions/dynamic-blue-left.svg</td><td width="200">dynamic-blue-left</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dynamic-blue-right.png" alt="rrze-icons/actions/dynamic-blue-right.svg"/></td><td width="400">:/actions/dynamic-blue-right.svg</td><td width="400">rrze-icons/actions/dynamic-blue-right.svg</td><td width="200">dynamic-blue-right</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dynamic-blue-up.png" alt="rrze-icons/actions/dynamic-blue-up.svg"/></td><td width="400">:/actions/dynamic-blue-up.svg</td><td width="400">rrze-icons/actions/dynamic-blue-up.svg</td><td width="200">dynamic-blue-up</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/email-not-available.png" alt="rrze-icons/actions/email-not-available.svg"/></td><td width="400">:/actions/email-not-available.svg</td><td width="400">rrze-icons/actions/email-not-available.svg</td><td width="200">email-not-available</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/filter.png" alt="rrze-icons/actions/filter.svg"/></td><td width="400">:/actions/filter.svg</td><td width="400">rrze-icons/actions/filter.svg</td><td width="200">filter</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-up-green.png" alt="rrze-icons/actions/sort-up-green.svg"/></td><td width="400">:/actions/sort-up-green.svg</td><td width="400">rrze-icons/actions/sort-up-green.svg</td><td width="200">sort-up-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/go-bottom.png" alt="rrze-icons/actions/go-bottom.svg"/></td><td width="400">:/actions/go-bottom.svg</td><td width="400">rrze-icons/actions/go-bottom.svg</td><td width="200">go-bottom</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/go-top.png" alt="rrze-icons/actions/go-top.svg"/></td><td width="400">:/actions/go-top.svg</td><td width="400">rrze-icons/actions/go-top.svg</td><td width="200">go-top</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/show.png" alt="rrze-icons/actions/show.svg"/></td><td width="400">:/actions/show.svg</td><td width="400">rrze-icons/actions/show.svg</td><td width="200">show</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/refuse.png" alt="rrze-icons/actions/refuse.svg"/></td><td width="400">:/actions/refuse.svg</td><td width="400">rrze-icons/actions/refuse.svg</td><td width="200">refuse</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/hide.png" alt="rrze-icons/actions/hide.svg"/></td><td width="400">:/actions/hide.svg</td><td width="400">rrze-icons/actions/hide.svg</td><td width="200">hide</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/left-grey.png" alt="rrze-icons/actions/left-grey.svg"/></td><td width="400">:/actions/left-grey.svg</td><td width="400">rrze-icons/actions/left-grey.svg</td><td width="200">left-grey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/left.png" alt="rrze-icons/actions/left.svg"/></td><td width="400">:/actions/left.svg</td><td width="400">rrze-icons/actions/left.svg</td><td width="200">left</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/list-all-participants.png" alt="rrze-icons/actions/list-all-participants.svg"/></td><td width="400">:/actions/list-all-participants.svg</td><td width="400">rrze-icons/actions/list-all-participants.svg</td><td width="200">list-all-participants</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-down-red.png" alt="rrze-icons/actions/sort-down-red.svg"/></td><td width="400">:/actions/sort-down-red.svg</td><td width="400">rrze-icons/actions/sort-down-red.svg</td><td width="200">sort-down-red</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/transfer-up_down.png" alt="rrze-icons/actions/transfer-up_down.svg"/></td><td width="400">:/actions/transfer-up_down.svg</td><td width="400">rrze-icons/actions/transfer-up_down.svg</td><td width="200">transfer-up_down</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/print.png" alt="rrze-icons/actions/print.svg"/></td><td width="400">:/actions/print.svg</td><td width="400">rrze-icons/actions/print.svg</td><td width="200">print</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-up-grey.png" alt="rrze-icons/actions/move-waiting-up-grey.svg"/></td><td width="400">:/actions/move-waiting-up-grey.svg</td><td width="400">rrze-icons/actions/move-waiting-up-grey.svg</td><td width="200">move-waiting-up-grey</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-up.png" alt="rrze-icons/actions/sort-up.svg"/></td><td width="400">:/actions/sort-up.svg</td><td width="400">rrze-icons/actions/sort-up.svg</td><td width="200">sort-up</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dynamic-blue-up.png" alt="rrze-icons/actions/dynamic-blue-up.svg"/></td><td width="400">:/actions/dynamic-blue-up.svg</td><td width="400">rrze-icons/actions/dynamic-blue-up.svg</td><td width="200">dynamic-blue-up</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/workflow.png" alt="rrze-icons/actions/workflow.svg"/></td><td width="400">:/actions/workflow.svg</td><td width="400">rrze-icons/actions/workflow.svg</td><td width="200">workflow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-neutral.png" alt="rrze-icons/actions/sort-neutral.svg"/></td><td width="400">:/actions/sort-neutral.svg</td><td width="400">rrze-icons/actions/sort-neutral.svg</td><td width="200">sort-neutral</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/add.png" alt="rrze-icons/actions/add.svg"/></td><td width="400">:/actions/add.svg</td><td width="400">rrze-icons/actions/add.svg</td><td width="200">add</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/switch-course-book-grey.png" alt="rrze-icons/actions/switch-course-book-grey.svg"/></td><td width="400">:/actions/switch-course-book-grey.svg</td><td width="400">rrze-icons/actions/switch-course-book-grey.svg</td><td width="200">switch-course-book-grey</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/down.png" alt="rrze-icons/actions/down.svg"/></td><td width="400">:/actions/down.svg</td><td width="400">rrze-icons/actions/down.svg</td><td width="200">down</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-down-green.png" alt="rrze-icons/actions/sort-down-green.svg"/></td><td width="400">:/actions/sort-down-green.svg</td><td width="400">rrze-icons/actions/sort-down-green.svg</td><td width="200">sort-down-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/switch-course-grey.png" alt="rrze-icons/actions/switch-course-grey.svg"/></td><td width="400">:/actions/switch-course-grey.svg</td><td width="400">rrze-icons/actions/switch-course-grey.svg</td><td width="200">switch-course-grey</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-down.png" alt="rrze-icons/actions/move-waiting-down.svg"/></td><td width="400">:/actions/move-waiting-down.svg</td><td width="400">rrze-icons/actions/move-waiting-down.svg</td><td width="200">move-waiting-down</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/action-undo.png" alt="rrze-icons/actions/action-undo.svg"/></td><td width="400">:/actions/action-undo.svg</td><td width="400">rrze-icons/actions/action-undo.svg</td><td width="200">action-undo</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dial-in.png" alt="rrze-icons/actions/dial-in.svg"/></td><td width="400">:/actions/dial-in.svg</td><td width="400">rrze-icons/actions/dial-in.svg</td><td width="200">dial-in</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-neutral-red.png" alt="rrze-icons/actions/sort-neutral-red.svg"/></td><td width="400">:/actions/sort-neutral-red.svg</td><td width="400">rrze-icons/actions/sort-neutral-red.svg</td><td width="200">sort-neutral-red</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/load-settings.png" alt="rrze-icons/actions/load-settings.svg"/></td><td width="400">:/actions/load-settings.svg</td><td width="400">rrze-icons/actions/load-settings.svg</td><td width="200">load-settings</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/log-in.png" alt="rrze-icons/actions/log-in.svg"/></td><td width="400">:/actions/log-in.svg</td><td width="400">rrze-icons/actions/log-in.svg</td><td width="200">log-in</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/log-out.png" alt="rrze-icons/actions/log-out.svg"/></td><td width="400">:/actions/log-out.svg</td><td width="400">rrze-icons/actions/log-out.svg</td><td width="200">log-out</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/email-not-available.png" alt="rrze-icons/actions/email-not-available.svg"/></td><td width="400">:/actions/email-not-available.svg</td><td width="400">rrze-icons/actions/email-not-available.svg</td><td width="200">email-not-available</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/go-bottom.png" alt="rrze-icons/actions/go-bottom.svg"/></td><td width="400">:/actions/go-bottom.svg</td><td width="400">rrze-icons/actions/go-bottom.svg</td><td width="200">go-bottom</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/transfer-right_left.png" alt="rrze-icons/actions/transfer-right_left.svg"/></td><td width="400">:/actions/transfer-right_left.svg</td><td width="400">rrze-icons/actions/transfer-right_left.svg</td><td width="200">transfer-right_left</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/manage-settings.png" alt="rrze-icons/actions/manage-settings.svg"/></td><td width="400">:/actions/manage-settings.svg</td><td width="400">rrze-icons/actions/manage-settings.svg</td><td width="200">manage-settings</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/merge-affiliation.png" alt="rrze-icons/actions/merge-affiliation.svg"/></td><td width="400">:/actions/merge-affiliation.svg</td><td width="400">rrze-icons/actions/merge-affiliation.svg</td><td width="200">merge-affiliation</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-up-green.png" alt="rrze-icons/actions/sort-up-green.svg"/></td><td width="400">:/actions/sort-up-green.svg</td><td width="400">rrze-icons/actions/sort-up-green.svg</td><td width="200">sort-up-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/delete-all-participants.png" alt="rrze-icons/actions/delete-all-participants.svg"/></td><td width="400">:/actions/delete-all-participants.svg</td><td width="400">rrze-icons/actions/delete-all-participants.svg</td><td width="200">delete-all-participants</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/send-email.png" alt="rrze-icons/actions/send-email.svg"/></td><td width="400">:/actions/send-email.svg</td><td width="400">rrze-icons/actions/send-email.svg</td><td width="200">send-email</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/transfer-left_right.png" alt="rrze-icons/actions/transfer-left_right.svg"/></td><td width="400">:/actions/transfer-left_right.svg</td><td width="400">rrze-icons/actions/transfer-left_right.svg</td><td width="200">transfer-left_right</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-to-participant-green-arrow.png" alt="rrze-icons/actions/move-waiting-to-participant-green-arrow.svg"/></td><td width="400">:/actions/move-waiting-to-participant-green-arrow.svg</td><td width="400">rrze-icons/actions/move-waiting-to-participant-green-arrow.svg</td><td width="200">move-waiting-to-participant-green-arrow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/send-email-user-other.png" alt="rrze-icons/actions/send-email-user-other.svg"/></td><td width="400">:/actions/send-email-user-other.svg</td><td width="400">rrze-icons/actions/send-email-user-other.svg</td><td width="200">send-email-user-other</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/dynamic-blue-left.png" alt="rrze-icons/actions/dynamic-blue-left.svg"/></td><td width="400">:/actions/dynamic-blue-left.svg</td><td width="400">rrze-icons/actions/dynamic-blue-left.svg</td><td width="200">dynamic-blue-left</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/view.png" alt="rrze-icons/actions/view.svg"/></td><td width="400">:/actions/view.svg</td><td width="400">rrze-icons/actions/view.svg</td><td width="200">view</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/monitoring.png" alt="rrze-icons/actions/monitoring.svg"/></td><td width="400">:/actions/monitoring.svg</td><td width="400">rrze-icons/actions/monitoring.svg</td><td width="200">monitoring</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-participant-to-waiting-red-grey.png" alt="rrze-icons/actions/move-participant-to-waiting-red-grey.svg"/></td><td width="400">:/actions/move-participant-to-waiting-red-grey.svg</td><td width="400">rrze-icons/actions/move-participant-to-waiting-red-grey.svg</td><td width="200">move-participant-to-waiting-red-grey</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-participant-to-waiting-red.png" alt="rrze-icons/actions/move-participant-to-waiting-red.svg"/></td><td width="400">:/actions/move-participant-to-waiting-red.svg</td><td width="400">rrze-icons/actions/move-participant-to-waiting-red.svg</td><td width="200">move-participant-to-waiting-red</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/transfer-down_up.png" alt="rrze-icons/actions/transfer-down_up.svg"/></td><td width="400">:/actions/transfer-down_up.svg</td><td width="400">rrze-icons/actions/transfer-down_up.svg</td><td width="200">transfer-down_up</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/filter.png" alt="rrze-icons/actions/filter.svg"/></td><td width="400">:/actions/filter.svg</td><td width="400">rrze-icons/actions/filter.svg</td><td width="200">filter</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/log-in.png" alt="rrze-icons/actions/log-in.svg"/></td><td width="400">:/actions/log-in.svg</td><td width="400">rrze-icons/actions/log-in.svg</td><td width="200">log-in</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-down-grey.png" alt="rrze-icons/actions/move-waiting-down-grey.svg"/></td><td width="400">:/actions/move-waiting-down-grey.svg</td><td width="400">rrze-icons/actions/move-waiting-down-grey.svg</td><td width="200">move-waiting-down-grey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-down.png" alt="rrze-icons/actions/move-waiting-down.svg"/></td><td width="400">:/actions/move-waiting-down.svg</td><td width="400">rrze-icons/actions/move-waiting-down.svg</td><td width="200">move-waiting-down</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-to-participant-green-arrow.png" alt="rrze-icons/actions/move-waiting-to-participant-green-arrow.svg"/></td><td width="400">:/actions/move-waiting-to-participant-green-arrow.svg</td><td width="400">rrze-icons/actions/move-waiting-to-participant-green-arrow.svg</td><td width="200">move-waiting-to-participant-green-arrow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-up-grey.png" alt="rrze-icons/actions/move-waiting-up-grey.svg"/></td><td width="400">:/actions/move-waiting-up-grey.svg</td><td width="400">rrze-icons/actions/move-waiting-up-grey.svg</td><td width="200">move-waiting-up-grey</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-waiting-up.png" alt="rrze-icons/actions/move-waiting-up.svg"/></td><td width="400">:/actions/move-waiting-up.svg</td><td width="400">rrze-icons/actions/move-waiting-up.svg</td><td width="200">move-waiting-up</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/monitoring.png" alt="rrze-icons/actions/monitoring.svg"/></td><td width="400">:/actions/monitoring.svg</td><td width="400">rrze-icons/actions/monitoring.svg</td><td width="200">monitoring</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/upload.png" alt="rrze-icons/actions/upload.svg"/></td><td width="400">:/actions/upload.svg</td><td width="400">rrze-icons/actions/upload.svg</td><td width="200">upload</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-up-red.png" alt="rrze-icons/actions/sort-up-red.svg"/></td><td width="400">:/actions/sort-up-red.svg</td><td width="400">rrze-icons/actions/sort-up-red.svg</td><td width="200">sort-up-red</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/print.png" alt="rrze-icons/actions/print.svg"/></td><td width="400">:/actions/print.svg</td><td width="400">rrze-icons/actions/print.svg</td><td width="200">print</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/refuse.png" alt="rrze-icons/actions/refuse.svg"/></td><td width="400">:/actions/refuse.svg</td><td width="400">rrze-icons/actions/refuse.svg</td><td width="200">refuse</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/right-grey.png" alt="rrze-icons/actions/right-grey.svg"/></td><td width="400">:/actions/right-grey.svg</td><td width="400">rrze-icons/actions/right-grey.svg</td><td width="200">right-grey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/right.png" alt="rrze-icons/actions/right.svg"/></td><td width="400">:/actions/right.svg</td><td width="400">rrze-icons/actions/right.svg</td><td width="200">right</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/run.png" alt="rrze-icons/actions/run.svg"/></td><td width="400">:/actions/run.svg</td><td width="400">rrze-icons/actions/run.svg</td><td width="200">run</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/send-email-group.png" alt="rrze-icons/actions/send-email-group.svg"/></td><td width="400">:/actions/send-email-group.svg</td><td width="400">rrze-icons/actions/send-email-group.svg</td><td width="200">send-email-group</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/send-email-user-other.png" alt="rrze-icons/actions/send-email-user-other.svg"/></td><td width="400">:/actions/send-email-user-other.svg</td><td width="400">rrze-icons/actions/send-email-user-other.svg</td><td width="200">send-email-user-other</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/send-email-user.png" alt="rrze-icons/actions/send-email-user.svg"/></td><td width="400">:/actions/send-email-user.svg</td><td width="400">rrze-icons/actions/send-email-user.svg</td><td width="200">send-email-user</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/send-email.png" alt="rrze-icons/actions/send-email.svg"/></td><td width="400">:/actions/send-email.svg</td><td width="400">rrze-icons/actions/send-email.svg</td><td width="200">send-email</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/show.png" alt="rrze-icons/actions/show.svg"/></td><td width="400">:/actions/show.svg</td><td width="400">rrze-icons/actions/show.svg</td><td width="200">show</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-down-green.png" alt="rrze-icons/actions/sort-down-green.svg"/></td><td width="400">:/actions/sort-down-green.svg</td><td width="400">rrze-icons/actions/sort-down-green.svg</td><td width="200">sort-down-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-down-red.png" alt="rrze-icons/actions/sort-down-red.svg"/></td><td width="400">:/actions/sort-down-red.svg</td><td width="400">rrze-icons/actions/sort-down-red.svg</td><td width="200">sort-down-red</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-down.png" alt="rrze-icons/actions/sort-down.svg"/></td><td width="400">:/actions/sort-down.svg</td><td width="400">rrze-icons/actions/sort-down.svg</td><td width="200">sort-down</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-neutral-green.png" alt="rrze-icons/actions/sort-neutral-green.svg"/></td><td width="400">:/actions/sort-neutral-green.svg</td><td width="400">rrze-icons/actions/sort-neutral-green.svg</td><td width="200">sort-neutral-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-neutral-red.png" alt="rrze-icons/actions/sort-neutral-red.svg"/></td><td width="400">:/actions/sort-neutral-red.svg</td><td width="400">rrze-icons/actions/sort-neutral-red.svg</td><td width="200">sort-neutral-red</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-neutral.png" alt="rrze-icons/actions/sort-neutral.svg"/></td><td width="400">:/actions/sort-neutral.svg</td><td width="400">rrze-icons/actions/sort-neutral.svg</td><td width="200">sort-neutral</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-up-red.png" alt="rrze-icons/actions/sort-up-red.svg"/></td><td width="400">:/actions/sort-up-red.svg</td><td width="400">rrze-icons/actions/sort-up-red.svg</td><td width="200">sort-up-red</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/sort-up.png" alt="rrze-icons/actions/sort-up.svg"/></td><td width="400">:/actions/sort-up.svg</td><td width="400">rrze-icons/actions/sort-up.svg</td><td width="200">sort-up</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/split-affiliation.png" alt="rrze-icons/actions/split-affiliation.svg"/></td><td width="400">:/actions/split-affiliation.svg</td><td width="400">rrze-icons/actions/split-affiliation.svg</td><td width="200">split-affiliation</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/move-participant-to-waiting-red-grey.png" alt="rrze-icons/actions/move-participant-to-waiting-red-grey.svg"/></td><td width="400">:/actions/move-participant-to-waiting-red-grey.svg</td><td width="400">rrze-icons/actions/move-participant-to-waiting-red-grey.svg</td><td width="200">move-participant-to-waiting-red-grey</td></tr>
-</table>
-<h2><a name="rrze-icons/mime-types">:/mime-types/ (rrze-icons/mime-types)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/mime-types/" Directory: "rrze-icons/mime-types"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-slide-audio.png" alt="rrze-icons/mime-types/media-slide-audio.svg"/></td><td width="400">:/mime-types/media-slide-audio.svg</td><td width="400">rrze-icons/mime-types/media-slide-audio.svg</td><td width="200">media-slide-audio</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/audio-mp3.png" alt="rrze-icons/mime-types/audio-mp3.svg"/></td><td width="400">:/mime-types/audio-mp3.svg</td><td width="400">rrze-icons/mime-types/audio-mp3.svg</td><td width="200">audio-mp3</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-audio-itunes.png" alt="rrze-icons/mime-types/media-audio-itunes.svg"/></td><td width="400">:/mime-types/media-audio-itunes.svg</td><td width="400">rrze-icons/mime-types/media-audio-itunes.svg</td><td width="200">media-audio-itunes</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/office-ms-word.png" alt="rrze-icons/mime-types/office-ms-word.svg"/></td><td width="400">:/mime-types/office-ms-word.svg</td><td width="400">rrze-icons/mime-types/office-ms-word.svg</td><td width="200">office-ms-word</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/office-ms-excel.png" alt="rrze-icons/mime-types/office-ms-excel.svg"/></td><td width="400">:/mime-types/office-ms-excel.svg</td><td width="400">rrze-icons/mime-types/office-ms-excel.svg</td><td width="200">office-ms-excel</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-video-film.png" alt="rrze-icons/mime-types/media-video-film.svg"/></td><td width="400">:/mime-types/media-video-film.svg</td><td width="400">rrze-icons/mime-types/media-video-film.svg</td><td width="200">media-video-film</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-audio-itunes-u.png" alt="rrze-icons/mime-types/media-audio-itunes-u.svg"/></td><td width="400">:/mime-types/media-audio-itunes-u.svg</td><td width="400">rrze-icons/mime-types/media-audio-itunes-u.svg</td><td width="200">media-audio-itunes-u</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-movie.png" alt="rrze-icons/mime-types/media-movie.svg"/></td><td width="400">:/mime-types/media-movie.svg</td><td width="400">rrze-icons/mime-types/media-movie.svg</td><td width="200">media-movie</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/video-mov.png" alt="rrze-icons/mime-types/video-mov.svg"/></td><td width="400">:/mime-types/video-mov.svg</td><td width="400">rrze-icons/mime-types/video-mov.svg</td><td width="200">video-mov</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/document-pdf.png" alt="rrze-icons/mime-types/document-pdf.svg"/></td><td width="400">:/mime-types/document-pdf.svg</td><td width="400">rrze-icons/mime-types/document-pdf.svg</td><td width="200">document-pdf</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-movie-audio.png" alt="rrze-icons/mime-types/media-movie-audio.svg"/></td><td width="400">:/mime-types/media-movie-audio.svg</td><td width="400">rrze-icons/mime-types/media-movie-audio.svg</td><td width="200">media-movie-audio</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-audio-visual-slide.png" alt="rrze-icons/mime-types/media-audio-visual-slide.svg"/></td><td width="400">:/mime-types/media-audio-visual-slide.svg</td><td width="400">rrze-icons/mime-types/media-audio-visual-slide.svg</td><td width="200">media-audio-visual-slide</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/text-csv-text.png" alt="rrze-icons/mime-types/text-csv-text.svg"/></td><td width="400">:/mime-types/text-csv-text.svg</td><td width="400">rrze-icons/mime-types/text-csv-text.svg</td><td width="200">text-csv-text</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/audio-mp4.png" alt="rrze-icons/mime-types/audio-mp4.svg"/></td><td width="400">:/mime-types/audio-mp4.svg</td><td width="400">rrze-icons/mime-types/audio-mp4.svg</td><td width="200">audio-mp4</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/video-m4v.png" alt="rrze-icons/mime-types/video-m4v.svg"/></td><td width="400">:/mime-types/video-m4v.svg</td><td width="400">rrze-icons/mime-types/video-m4v.svg</td><td width="200">video-m4v</td></tr>
-</table>
-<h2><a name="rrze-icons/status">:/status/ (rrze-icons/status)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/status/" Directory: "rrze-icons/status"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/true.png" alt="rrze-icons/status/true.svg"/></td><td width="400">:/status/true.svg</td><td width="400">rrze-icons/status/true.svg</td><td width="200">true</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/available.png" alt="rrze-icons/status/available.svg"/></td><td width="400">:/status/available.svg</td><td width="400">rrze-icons/status/available.svg</td><td width="200">available</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/maintenance-time.png" alt="rrze-icons/status/maintenance-time.svg"/></td><td width="400">:/status/maintenance-time.svg</td><td width="400">rrze-icons/status/maintenance-time.svg</td><td width="200">maintenance-time</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/hourglass.png" alt="rrze-icons/status/hourglass.svg"/></td><td width="400">:/status/hourglass.svg</td><td width="400">rrze-icons/status/hourglass.svg</td><td width="200">hourglass</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/temporarily-not-available.png" alt="rrze-icons/status/temporarily-not-available.svg"/></td><td width="400">:/status/temporarily-not-available.svg</td><td width="400">rrze-icons/status/temporarily-not-available.svg</td><td width="200">temporarily-not-available</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/true-orange.png" alt="rrze-icons/status/true-orange.svg"/></td><td width="400">:/status/true-orange.svg</td><td width="400">rrze-icons/status/true-orange.svg</td><td width="200">true-orange</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/synchronized.png" alt="rrze-icons/status/synchronized.svg"/></td><td width="400">:/status/synchronized.svg</td><td width="400">rrze-icons/status/synchronized.svg</td><td width="200">synchronized</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-yellow-mail.png" alt="rrze-icons/status/flag-yellow-mail.svg"/></td><td width="400">:/status/flag-yellow-mail.svg</td><td width="400">rrze-icons/status/flag-yellow-mail.svg</td><td width="200">flag-yellow-mail</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-yellow-clock.png" alt="rrze-icons/status/flag-yellow-clock.svg"/></td><td width="400">:/status/flag-yellow-clock.svg</td><td width="400">rrze-icons/status/flag-yellow-clock.svg</td><td width="200">flag-yellow-clock</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/temporarily-not-available-clock.png" alt="rrze-icons/status/temporarily-not-available-clock.svg"/></td><td width="400">:/status/temporarily-not-available-clock.svg</td><td width="400">rrze-icons/status/temporarily-not-available-clock.svg</td><td width="200">temporarily-not-available-clock</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/false.png" alt="rrze-icons/status/false.svg"/></td><td width="400">:/status/false.svg</td><td width="400">rrze-icons/status/false.svg</td><td width="200">false</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/not-synchronized.png" alt="rrze-icons/status/not-synchronized.svg"/></td><td width="400">:/status/not-synchronized.svg</td><td width="400">rrze-icons/status/not-synchronized.svg</td><td width="200">not-synchronized</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/exclamation-mark.png" alt="rrze-icons/status/exclamation-mark.svg"/></td><td width="400">:/status/exclamation-mark.svg</td><td width="400">rrze-icons/status/exclamation-mark.svg</td><td width="200">exclamation-mark</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-green-mail.png" alt="rrze-icons/status/flag-green-mail.svg"/></td><td width="400">:/status/flag-green-mail.svg</td><td width="400">rrze-icons/status/flag-green-mail.svg</td><td width="200">flag-green-mail</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/expired.png" alt="rrze-icons/status/expired.svg"/></td><td width="400">:/status/expired.svg</td><td width="400">rrze-icons/status/expired.svg</td><td width="200">expired</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/error.png" alt="rrze-icons/status/error.svg"/></td><td width="400">:/status/error.svg</td><td width="400">rrze-icons/status/error.svg</td><td width="200">error</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/awaiting-plus.png" alt="rrze-icons/status/awaiting-plus.svg"/></td><td width="400">:/status/awaiting-plus.svg</td><td width="400">rrze-icons/status/awaiting-plus.svg</td><td width="200">awaiting-plus</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-green-clock.png" alt="rrze-icons/status/flag-green-clock.svg"/></td><td width="400">:/status/flag-green-clock.svg</td><td width="400">rrze-icons/status/flag-green-clock.svg</td><td width="200">flag-green-clock</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-red-mail.png" alt="rrze-icons/status/flag-red-mail.svg"/></td><td width="400">:/status/flag-red-mail.svg</td><td width="400">rrze-icons/status/flag-red-mail.svg</td><td width="200">flag-red-mail</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/male.png" alt="rrze-icons/status/male.svg"/></td><td width="400">:/status/male.svg</td><td width="400">rrze-icons/status/male.svg</td><td width="200">male</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-red-clock.png" alt="rrze-icons/status/flag-red-clock.svg"/></td><td width="400">:/status/flag-red-clock.svg</td><td width="400">rrze-icons/status/flag-red-clock.svg</td><td width="200">flag-red-clock</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-yellow.png" alt="rrze-icons/status/flag-yellow.svg"/></td><td width="400">:/status/flag-yellow.svg</td><td width="400">rrze-icons/status/flag-yellow.svg</td><td width="200">flag-yellow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/unlocked.png" alt="rrze-icons/status/unlocked.svg"/></td><td width="400">:/status/unlocked.svg</td><td width="400">rrze-icons/status/unlocked.svg</td><td width="200">unlocked</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/warning.png" alt="rrze-icons/status/warning.svg"/></td><td width="400">:/status/warning.svg</td><td width="400">rrze-icons/status/warning.svg</td><td width="200">warning</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/not-known.png" alt="rrze-icons/status/not-known.svg"/></td><td width="400">:/status/not-known.svg</td><td width="400">rrze-icons/status/not-known.svg</td><td width="200">not-known</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/not-available.png" alt="rrze-icons/status/not-available.svg"/></td><td width="400">:/status/not-available.svg</td><td width="400">rrze-icons/status/not-available.svg</td><td width="200">not-available</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/binational.png" alt="rrze-icons/status/binational.svg"/></td><td width="400">:/status/binational.svg</td><td width="400">rrze-icons/status/binational.svg</td><td width="200">binational</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-red.png" alt="rrze-icons/status/flag-red.svg"/></td><td width="400">:/status/flag-red.svg</td><td width="400">rrze-icons/status/flag-red.svg</td><td width="200">flag-red</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-green.png" alt="rrze-icons/status/flag-green.svg"/></td><td width="400">:/status/flag-green.svg</td><td width="400">rrze-icons/status/flag-green.svg</td><td width="200">flag-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/female.png" alt="rrze-icons/status/female.svg"/></td><td width="400">:/status/female.svg</td><td width="400">rrze-icons/status/female.svg</td><td width="200">female</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/awaiting.png" alt="rrze-icons/status/awaiting.svg"/></td><td width="400">:/status/awaiting.svg</td><td width="400">rrze-icons/status/awaiting.svg</td><td width="200">awaiting</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/important.png" alt="rrze-icons/status/important.svg"/></td><td width="400">:/status/important.svg</td><td width="400">rrze-icons/status/important.svg</td><td width="200">important</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/not-specified.png" alt="rrze-icons/status/not-specified.svg"/></td><td width="400">:/status/not-specified.svg</td><td width="400">rrze-icons/status/not-specified.svg</td><td width="200">not-specified</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/switch-course-book-grey.png" alt="rrze-icons/actions/switch-course-book-grey.svg"/></td><td width="400">:/actions/switch-course-book-grey.svg</td><td width="400">rrze-icons/actions/switch-course-book-grey.svg</td><td width="200">switch-course-book-grey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/switch-course-book.png" alt="rrze-icons/actions/switch-course-book.svg"/></td><td width="400">:/actions/switch-course-book.svg</td><td width="400">rrze-icons/actions/switch-course-book.svg</td><td width="200">switch-course-book</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/switch-course-grey.png" alt="rrze-icons/actions/switch-course-grey.svg"/></td><td width="400">:/actions/switch-course-grey.svg</td><td width="400">rrze-icons/actions/switch-course-grey.svg</td><td width="200">switch-course-grey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/switch-course.png" alt="rrze-icons/actions/switch-course.svg"/></td><td width="400">:/actions/switch-course.svg</td><td width="400">rrze-icons/actions/switch-course.svg</td><td width="200">switch-course</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/transfer-down_up.png" alt="rrze-icons/actions/transfer-down_up.svg"/></td><td width="400">:/actions/transfer-down_up.svg</td><td width="400">rrze-icons/actions/transfer-down_up.svg</td><td width="200">transfer-down_up</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/transfer-left_right.png" alt="rrze-icons/actions/transfer-left_right.svg"/></td><td width="400">:/actions/transfer-left_right.svg</td><td width="400">rrze-icons/actions/transfer-left_right.svg</td><td width="200">transfer-left_right</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/transfer-right_left.png" alt="rrze-icons/actions/transfer-right_left.svg"/></td><td width="400">:/actions/transfer-right_left.svg</td><td width="400">rrze-icons/actions/transfer-right_left.svg</td><td width="200">transfer-right_left</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/transfer-up_down.png" alt="rrze-icons/actions/transfer-up_down.svg"/></td><td width="400">:/actions/transfer-up_down.svg</td><td width="400">rrze-icons/actions/transfer-up_down.svg</td><td width="200">transfer-up_down</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/up-grey.png" alt="rrze-icons/actions/up-grey.svg"/></td><td width="400">:/actions/up-grey.svg</td><td width="400">rrze-icons/actions/up-grey.svg</td><td width="200">up-grey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/up.png" alt="rrze-icons/actions/up.svg"/></td><td width="400">:/actions/up.svg</td><td width="400">rrze-icons/actions/up.svg</td><td width="200">up</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/upload.png" alt="rrze-icons/actions/upload.svg"/></td><td width="400">:/actions/upload.svg</td><td width="400">rrze-icons/actions/upload.svg</td><td width="200">upload</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/view.png" alt="rrze-icons/actions/view.svg"/></td><td width="400">:/actions/view.svg</td><td width="400">rrze-icons/actions/view.svg</td><td width="200">view</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/actions/workflow.png" alt="rrze-icons/actions/workflow.svg"/></td><td width="400">:/actions/workflow.svg</td><td width="400">rrze-icons/actions/workflow.svg</td><td width="200">workflow</td></tr>
 </table>
 <h2><a name="rrze-icons/categories">:/categories/ (rrze-icons/categories)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/categories/" Directory: "rrze-icons/categories"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/book.png" alt="rrze-icons/categories/book.svg"/></td><td width="400">:/categories/book.svg</td><td width="400">rrze-icons/categories/book.svg</td><td width="200">book</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-helpdesk.png" alt="rrze-icons/categories/user-helpdesk.svg"/></td><td width="400">:/categories/user-helpdesk.svg</td><td width="400">rrze-icons/categories/user-helpdesk.svg</td><td width="200">user-helpdesk</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-other.png" alt="rrze-icons/categories/user-other.svg"/></td><td width="400">:/categories/user-other.svg</td><td width="400">rrze-icons/categories/user-other.svg</td><td width="200">user-other</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-phd-group.png" alt="rrze-icons/categories/user-phd-group.svg"/></td><td width="400">:/categories/user-phd-group.svg</td><td width="400">rrze-icons/categories/user-phd-group.svg</td><td width="200">user-phd-group</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-examiner-group.png" alt="rrze-icons/categories/user-examiner-group.svg"/></td><td width="400">:/categories/user-examiner-group.svg</td><td width="400">rrze-icons/categories/user-examiner-group.svg</td><td width="200">user-examiner-group</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-other-new.png" alt="rrze-icons/categories/user-other-new.svg"/></td><td width="400">:/categories/user-other-new.svg</td><td width="400">rrze-icons/categories/user-other-new.svg</td><td width="200">user-other-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/affiliation-guest.png" alt="rrze-icons/categories/affiliation-guest.svg"/></td><td width="400">:/categories/affiliation-guest.svg</td><td width="400">rrze-icons/categories/affiliation-guest.svg</td><td width="200">affiliation-guest</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-partner.png" alt="rrze-icons/categories/user-partner.svg"/></td><td width="400">:/categories/user-partner.svg</td><td width="400">rrze-icons/categories/user-partner.svg</td><td width="200">user-partner</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-customer.png" alt="rrze-icons/categories/user-customer.svg"/></td><td width="400">:/categories/user-customer.svg</td><td width="400">rrze-icons/categories/user-customer.svg</td><td width="200">user-customer</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/mood-level-green.png" alt="rrze-icons/categories/mood-level-green.svg"/></td><td width="400">:/categories/mood-level-green.svg</td><td width="400">rrze-icons/categories/mood-level-green.svg</td><td width="200">mood-level-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-other-female.png" alt="rrze-icons/categories/user-other-female.svg"/></td><td width="400">:/categories/user-other-female.svg</td><td width="400">rrze-icons/categories/user-other-female.svg</td><td width="200">user-other-female</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-other-business.png" alt="rrze-icons/categories/user-other-business.svg"/></td><td width="400">:/categories/user-other-business.svg</td><td width="400">rrze-icons/categories/user-other-business.svg</td><td width="200">user-other-business</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-student-assistant.png" alt="rrze-icons/categories/user-student-assistant.svg"/></td><td width="400">:/categories/user-student-assistant.svg</td><td width="400">rrze-icons/categories/user-student-assistant.svg</td><td width="200">user-student-assistant</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-real-person.png" alt="rrze-icons/categories/user-real-person.svg"/></td><td width="400">:/categories/user-real-person.svg</td><td width="400">rrze-icons/categories/user-real-person.svg</td><td width="200">user-real-person</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-disabled.png" alt="rrze-icons/categories/user-disabled.svg"/></td><td width="400">:/categories/user-disabled.svg</td><td width="400">rrze-icons/categories/user-disabled.svg</td><td width="200">user-disabled</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/affiliation-employee.png" alt="rrze-icons/categories/affiliation-employee.svg"/></td><td width="400">:/categories/affiliation-employee.svg</td><td width="400">rrze-icons/categories/affiliation-employee.svg</td><td width="200">affiliation-employee</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/alumni-group.png" alt="rrze-icons/categories/alumni-group.svg"/></td><td width="400">:/categories/alumni-group.svg</td><td width="400">rrze-icons/categories/alumni-group.svg</td><td width="200">alumni-group</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-expert.png" alt="rrze-icons/categories/user-expert.svg"/></td><td width="400">:/categories/user-expert.svg</td><td width="400">rrze-icons/categories/user-expert.svg</td><td width="200">user-expert</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/affiliation-guest.png" alt="rrze-icons/categories/affiliation-guest.svg"/></td><td width="400">:/categories/affiliation-guest.svg</td><td width="400">rrze-icons/categories/affiliation-guest.svg</td><td width="200">affiliation-guest</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/affiliation-student.png" alt="rrze-icons/categories/affiliation-student.svg"/></td><td width="400">:/categories/affiliation-student.svg</td><td width="400">rrze-icons/categories/affiliation-student.svg</td><td width="200">affiliation-student</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/mood-level-yellow.png" alt="rrze-icons/categories/mood-level-yellow.svg"/></td><td width="400">:/categories/mood-level-yellow.svg</td><td width="400">rrze-icons/categories/mood-level-yellow.svg</td><td width="200">mood-level-yellow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-enrolee.png" alt="rrze-icons/categories/user-enrolee.svg"/></td><td width="400">:/categories/user-enrolee.svg</td><td width="400">rrze-icons/categories/user-enrolee.svg</td><td width="200">user-enrolee</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-library.png" alt="rrze-icons/categories/user-library.svg"/></td><td width="400">:/categories/user-library.svg</td><td width="400">rrze-icons/categories/user-library.svg</td><td width="200">user-library</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-employee.png" alt="rrze-icons/categories/user-employee.svg"/></td><td width="400">:/categories/user-employee.svg</td><td width="400">rrze-icons/categories/user-employee.svg</td><td width="200">user-employee</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-admin-gear.png" alt="rrze-icons/categories/user-admin-gear.svg"/></td><td width="400">:/categories/user-admin-gear.svg</td><td width="400">rrze-icons/categories/user-admin-gear.svg</td><td width="200">user-admin-gear</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-business.png" alt="rrze-icons/categories/user-business.svg"/></td><td width="400">:/categories/user-business.svg</td><td width="400">rrze-icons/categories/user-business.svg</td><td width="200">user-business</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/mood-level-red.png" alt="rrze-icons/categories/mood-level-red.svg"/></td><td width="400">:/categories/mood-level-red.svg</td><td width="400">rrze-icons/categories/mood-level-red.svg</td><td width="200">mood-level-red</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-admin.png" alt="rrze-icons/categories/user-admin.svg"/></td><td width="400">:/categories/user-admin.svg</td><td width="400">rrze-icons/categories/user-admin.svg</td><td width="200">user-admin</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/alumni-group.png" alt="rrze-icons/categories/alumni-group.svg"/></td><td width="400">:/categories/alumni-group.svg</td><td width="400">rrze-icons/categories/alumni-group.svg</td><td width="200">alumni-group</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/book-marks.png" alt="rrze-icons/categories/book-marks.svg"/></td><td width="400">:/categories/book-marks.svg</td><td width="400">rrze-icons/categories/book-marks.svg</td><td width="200">book-marks</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-phd.png" alt="rrze-icons/categories/user-phd.svg"/></td><td width="400">:/categories/user-phd.svg</td><td width="400">rrze-icons/categories/user-phd.svg</td><td width="200">user-phd</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/book.png" alt="rrze-icons/categories/book.svg"/></td><td width="400">:/categories/book.svg</td><td width="400">rrze-icons/categories/book.svg</td><td width="200">book</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/bookmark.png" alt="rrze-icons/categories/bookmark.svg"/></td><td width="400">:/categories/bookmark.svg</td><td width="400">rrze-icons/categories/bookmark.svg</td><td width="200">bookmark</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-unknown.png" alt="rrze-icons/categories/user-unknown.svg"/></td><td width="400">:/categories/user-unknown.svg</td><td width="400">rrze-icons/categories/user-unknown.svg</td><td width="200">user-unknown</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-manager.png" alt="rrze-icons/categories/user-manager.svg"/></td><td width="400">:/categories/user-manager.svg</td><td width="400">rrze-icons/categories/user-manager.svg</td><td width="200">user-manager</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-group.png" alt="rrze-icons/categories/user-group.svg"/></td><td width="400">:/categories/user-group.svg</td><td width="400">rrze-icons/categories/user-group.svg</td><td width="200">user-group</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-examiner.png" alt="rrze-icons/categories/user-examiner.svg"/></td><td width="400">:/categories/user-examiner.svg</td><td width="400">rrze-icons/categories/user-examiner.svg</td><td width="200">user-examiner</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-student.png" alt="rrze-icons/categories/user-student.svg"/></td><td width="400">:/categories/user-student.svg</td><td width="400">rrze-icons/categories/user-student.svg</td><td width="200">user-student</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-endcustomer.png" alt="rrze-icons/categories/user-endcustomer.svg"/></td><td width="400">:/categories/user-endcustomer.svg</td><td width="400">rrze-icons/categories/user-endcustomer.svg</td><td width="200">user-endcustomer</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/icon-inspector.png" alt="rrze-icons/categories/icon-inspector.svg"/></td><td width="400">:/categories/icon-inspector.svg</td><td width="400">rrze-icons/categories/icon-inspector.svg</td><td width="200">icon-inspector</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/magnifying-glass.png" alt="rrze-icons/categories/magnifying-glass.svg"/></td><td width="400">:/categories/magnifying-glass.svg</td><td width="400">rrze-icons/categories/magnifying-glass.svg</td><td width="200">magnifying-glass</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/mood-level-green.png" alt="rrze-icons/categories/mood-level-green.svg"/></td><td width="400">:/categories/mood-level-green.svg</td><td width="400">rrze-icons/categories/mood-level-green.svg</td><td width="200">mood-level-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/mood-level-red.png" alt="rrze-icons/categories/mood-level-red.svg"/></td><td width="400">:/categories/mood-level-red.svg</td><td width="400">rrze-icons/categories/mood-level-red.svg</td><td width="200">mood-level-red</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/mood-level-yellow.png" alt="rrze-icons/categories/mood-level-yellow.svg"/></td><td width="400">:/categories/mood-level-yellow.svg</td><td width="400">rrze-icons/categories/mood-level-yellow.svg</td><td width="200">mood-level-yellow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-admin-gear.png" alt="rrze-icons/categories/user-admin-gear.svg"/></td><td width="400">:/categories/user-admin-gear.svg</td><td width="400">rrze-icons/categories/user-admin-gear.svg</td><td width="200">user-admin-gear</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-admin.png" alt="rrze-icons/categories/user-admin.svg"/></td><td width="400">:/categories/user-admin.svg</td><td width="400">rrze-icons/categories/user-admin.svg</td><td width="200">user-admin</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-business.png" alt="rrze-icons/categories/user-business.svg"/></td><td width="400">:/categories/user-business.svg</td><td width="400">rrze-icons/categories/user-business.svg</td><td width="200">user-business</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-customer.png" alt="rrze-icons/categories/user-customer.svg"/></td><td width="400">:/categories/user-customer.svg</td><td width="400">rrze-icons/categories/user-customer.svg</td><td width="200">user-customer</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-digital-person.png" alt="rrze-icons/categories/user-digital-person.svg"/></td><td width="400">:/categories/user-digital-person.svg</td><td width="400">rrze-icons/categories/user-digital-person.svg</td><td width="200">user-digital-person</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/icon-inspector.png" alt="rrze-icons/categories/icon-inspector.svg"/></td><td width="400">:/categories/icon-inspector.svg</td><td width="400">rrze-icons/categories/icon-inspector.svg</td><td width="200">icon-inspector</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-disabled.png" alt="rrze-icons/categories/user-disabled.svg"/></td><td width="400">:/categories/user-disabled.svg</td><td width="400">rrze-icons/categories/user-disabled.svg</td><td width="200">user-disabled</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-employee.png" alt="rrze-icons/categories/user-employee.svg"/></td><td width="400">:/categories/user-employee.svg</td><td width="400">rrze-icons/categories/user-employee.svg</td><td width="200">user-employee</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-endcustomer.png" alt="rrze-icons/categories/user-endcustomer.svg"/></td><td width="400">:/categories/user-endcustomer.svg</td><td width="400">rrze-icons/categories/user-endcustomer.svg</td><td width="200">user-endcustomer</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-enrolee.png" alt="rrze-icons/categories/user-enrolee.svg"/></td><td width="400">:/categories/user-enrolee.svg</td><td width="400">rrze-icons/categories/user-enrolee.svg</td><td width="200">user-enrolee</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-examiner-group.png" alt="rrze-icons/categories/user-examiner-group.svg"/></td><td width="400">:/categories/user-examiner-group.svg</td><td width="400">rrze-icons/categories/user-examiner-group.svg</td><td width="200">user-examiner-group</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-examiner.png" alt="rrze-icons/categories/user-examiner.svg"/></td><td width="400">:/categories/user-examiner.svg</td><td width="400">rrze-icons/categories/user-examiner.svg</td><td width="200">user-examiner</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-expert.png" alt="rrze-icons/categories/user-expert.svg"/></td><td width="400">:/categories/user-expert.svg</td><td width="400">rrze-icons/categories/user-expert.svg</td><td width="200">user-expert</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-group.png" alt="rrze-icons/categories/user-group.svg"/></td><td width="400">:/categories/user-group.svg</td><td width="400">rrze-icons/categories/user-group.svg</td><td width="200">user-group</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-helpdesk-faq.png" alt="rrze-icons/categories/user-helpdesk-faq.svg"/></td><td width="400">:/categories/user-helpdesk-faq.svg</td><td width="400">rrze-icons/categories/user-helpdesk-faq.svg</td><td width="200">user-helpdesk-faq</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-helpdesk.png" alt="rrze-icons/categories/user-helpdesk.svg"/></td><td width="400">:/categories/user-helpdesk.svg</td><td width="400">rrze-icons/categories/user-helpdesk.svg</td><td width="200">user-helpdesk</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-library.png" alt="rrze-icons/categories/user-library.svg"/></td><td width="400">:/categories/user-library.svg</td><td width="400">rrze-icons/categories/user-library.svg</td><td width="200">user-library</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-manager.png" alt="rrze-icons/categories/user-manager.svg"/></td><td width="400">:/categories/user-manager.svg</td><td width="400">rrze-icons/categories/user-manager.svg</td><td width="200">user-manager</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-other-business.png" alt="rrze-icons/categories/user-other-business.svg"/></td><td width="400">:/categories/user-other-business.svg</td><td width="400">rrze-icons/categories/user-other-business.svg</td><td width="200">user-other-business</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-other-female.png" alt="rrze-icons/categories/user-other-female.svg"/></td><td width="400">:/categories/user-other-female.svg</td><td width="400">rrze-icons/categories/user-other-female.svg</td><td width="200">user-other-female</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-other-new.png" alt="rrze-icons/categories/user-other-new.svg"/></td><td width="400">:/categories/user-other-new.svg</td><td width="400">rrze-icons/categories/user-other-new.svg</td><td width="200">user-other-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-other.png" alt="rrze-icons/categories/user-other.svg"/></td><td width="400">:/categories/user-other.svg</td><td width="400">rrze-icons/categories/user-other.svg</td><td width="200">user-other</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-partner.png" alt="rrze-icons/categories/user-partner.svg"/></td><td width="400">:/categories/user-partner.svg</td><td width="400">rrze-icons/categories/user-partner.svg</td><td width="200">user-partner</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-phd-group.png" alt="rrze-icons/categories/user-phd-group.svg"/></td><td width="400">:/categories/user-phd-group.svg</td><td width="400">rrze-icons/categories/user-phd-group.svg</td><td width="200">user-phd-group</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-phd.png" alt="rrze-icons/categories/user-phd.svg"/></td><td width="400">:/categories/user-phd.svg</td><td width="400">rrze-icons/categories/user-phd.svg</td><td width="200">user-phd</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-real-person.png" alt="rrze-icons/categories/user-real-person.svg"/></td><td width="400">:/categories/user-real-person.svg</td><td width="400">rrze-icons/categories/user-real-person.svg</td><td width="200">user-real-person</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-student-assistant.png" alt="rrze-icons/categories/user-student-assistant.svg"/></td><td width="400">:/categories/user-student-assistant.svg</td><td width="400">rrze-icons/categories/user-student-assistant.svg</td><td width="200">user-student-assistant</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-student.png" alt="rrze-icons/categories/user-student.svg"/></td><td width="400">:/categories/user-student.svg</td><td width="400">rrze-icons/categories/user-student.svg</td><td width="200">user-student</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/categories/user-unknown.png" alt="rrze-icons/categories/user-unknown.svg"/></td><td width="400">:/categories/user-unknown.svg</td><td width="400">rrze-icons/categories/user-unknown.svg</td><td width="200">user-unknown</td></tr>
 </table>
-<h2><a name="tango-icons/status">:/status/ (tango-icons/status)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/status/" Directory: "tango-icons/status"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-few-clouds.png" alt="tango-icons/status/weather-few-clouds.svg"/></td><td width="400">:/status/weather-few-clouds.svg</td><td width="400">tango-icons/status/weather-few-clouds.svg</td><td width="200">weather-few-clouds</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/user-trash-full.png" alt="tango-icons/status/user-trash-full.svg"/></td><td width="400">:/status/user-trash-full.svg</td><td width="400">tango-icons/status/user-trash-full.svg</td><td width="200">user-trash-full</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/mail-attachment.png" alt="tango-icons/status/mail-attachment.svg"/></td><td width="400">:/status/mail-attachment.svg</td><td width="400">tango-icons/status/mail-attachment.svg</td><td width="200">mail-attachment</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-transmit.png" alt="tango-icons/status/network-transmit.svg"/></td><td width="400">:/status/network-transmit.svg</td><td width="400">tango-icons/status/network-transmit.svg</td><td width="200">network-transmit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-overcast.png" alt="tango-icons/status/weather-overcast.svg"/></td><td width="400">:/status/weather-overcast.svg</td><td width="400">tango-icons/status/weather-overcast.svg</td><td width="200">weather-overcast</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-transmit-receive.png" alt="tango-icons/status/network-transmit-receive.svg"/></td><td width="400">:/status/network-transmit-receive.svg</td><td width="400">tango-icons/status/network-transmit-receive.svg</td><td width="200">network-transmit-receive</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/image-missing.png" alt="tango-icons/status/image-missing.svg"/></td><td width="400">:/status/image-missing.svg</td><td width="400">tango-icons/status/image-missing.svg</td><td width="200">image-missing</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/folder-drag-accept.png" alt="tango-icons/status/folder-drag-accept.svg"/></td><td width="400">:/status/folder-drag-accept.svg</td><td width="400">tango-icons/status/folder-drag-accept.svg</td><td width="200">folder-drag-accept</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-clear.png" alt="tango-icons/status/weather-clear.svg"/></td><td width="400">:/status/weather-clear.svg</td><td width="400">tango-icons/status/weather-clear.svg</td><td width="200">weather-clear</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/audio-volume-muted.png" alt="tango-icons/status/audio-volume-muted.svg"/></td><td width="400">:/status/audio-volume-muted.svg</td><td width="400">tango-icons/status/audio-volume-muted.svg</td><td width="200">audio-volume-muted</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/dialog-information.png" alt="tango-icons/status/dialog-information.svg"/></td><td width="400">:/status/dialog-information.svg</td><td width="400">tango-icons/status/dialog-information.svg</td><td width="200">dialog-information</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-showers-scattered.png" alt="tango-icons/status/weather-showers-scattered.svg"/></td><td width="400">:/status/weather-showers-scattered.svg</td><td width="400">tango-icons/status/weather-showers-scattered.svg</td><td width="200">weather-showers-scattered</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/image-loading.png" alt="tango-icons/status/image-loading.svg"/></td><td width="400">:/status/image-loading.svg</td><td width="400">tango-icons/status/image-loading.svg</td><td width="200">image-loading</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-clear-night.png" alt="tango-icons/status/weather-clear-night.svg"/></td><td width="400">:/status/weather-clear-night.svg</td><td width="400">tango-icons/status/weather-clear-night.svg</td><td width="200">weather-clear-night</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-storm.png" alt="tango-icons/status/weather-storm.svg"/></td><td width="400">:/status/weather-storm.svg</td><td width="400">tango-icons/status/weather-storm.svg</td><td width="200">weather-storm</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/audio-volume-medium.png" alt="tango-icons/status/audio-volume-medium.svg"/></td><td width="400">:/status/audio-volume-medium.svg</td><td width="400">tango-icons/status/audio-volume-medium.svg</td><td width="200">audio-volume-medium</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-snow.png" alt="tango-icons/status/weather-snow.svg"/></td><td width="400">:/status/weather-snow.svg</td><td width="400">tango-icons/status/weather-snow.svg</td><td width="200">weather-snow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-error.png" alt="tango-icons/status/network-error.svg"/></td><td width="400">:/status/network-error.svg</td><td width="400">tango-icons/status/network-error.svg</td><td width="200">network-error</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/folder-open.png" alt="tango-icons/status/folder-open.svg"/></td><td width="400">:/status/folder-open.svg</td><td width="400">tango-icons/status/folder-open.svg</td><td width="200">folder-open</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/audio-volume-high.png" alt="tango-icons/status/audio-volume-high.svg"/></td><td width="400">:/status/audio-volume-high.svg</td><td width="400">tango-icons/status/audio-volume-high.svg</td><td width="200">audio-volume-high</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/dialog-error.png" alt="tango-icons/status/dialog-error.svg"/></td><td width="400">:/status/dialog-error.svg</td><td width="400">tango-icons/status/dialog-error.svg</td><td width="200">dialog-error</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/printer-error.png" alt="tango-icons/status/printer-error.svg"/></td><td width="400">:/status/printer-error.svg</td><td width="400">tango-icons/status/printer-error.svg</td><td width="200">printer-error</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-wireless-encrypted.png" alt="tango-icons/status/network-wireless-encrypted.svg"/></td><td width="400">:/status/network-wireless-encrypted.svg</td><td width="400">tango-icons/status/network-wireless-encrypted.svg</td><td width="200">network-wireless-encrypted</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-idle.png" alt="tango-icons/status/network-idle.svg"/></td><td width="400">:/status/network-idle.svg</td><td width="400">tango-icons/status/network-idle.svg</td><td width="200">network-idle</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/software-update-urgent.png" alt="tango-icons/status/software-update-urgent.svg"/></td><td width="400">:/status/software-update-urgent.svg</td><td width="400">tango-icons/status/software-update-urgent.svg</td><td width="200">software-update-urgent</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-few-clouds-night.png" alt="tango-icons/status/weather-few-clouds-night.svg"/></td><td width="400">:/status/weather-few-clouds-night.svg</td><td width="400">tango-icons/status/weather-few-clouds-night.svg</td><td width="200">weather-few-clouds-night</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/folder-visiting.png" alt="tango-icons/status/folder-visiting.svg"/></td><td width="400">:/status/folder-visiting.svg</td><td width="400">tango-icons/status/folder-visiting.svg</td><td width="200">folder-visiting</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-severe-alert.png" alt="tango-icons/status/weather-severe-alert.svg"/></td><td width="400">:/status/weather-severe-alert.svg</td><td width="400">tango-icons/status/weather-severe-alert.svg</td><td width="200">weather-severe-alert</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-showers.png" alt="tango-icons/status/weather-showers.svg"/></td><td width="400">:/status/weather-showers.svg</td><td width="400">tango-icons/status/weather-showers.svg</td><td width="200">weather-showers</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/software-update-available.png" alt="tango-icons/status/software-update-available.svg"/></td><td width="400">:/status/software-update-available.svg</td><td width="400">tango-icons/status/software-update-available.svg</td><td width="200">software-update-available</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-receive.png" alt="tango-icons/status/network-receive.svg"/></td><td width="400">:/status/network-receive.svg</td><td width="400">tango-icons/status/network-receive.svg</td><td width="200">network-receive</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/battery-caution.png" alt="tango-icons/status/battery-caution.svg"/></td><td width="400">:/status/battery-caution.svg</td><td width="400">tango-icons/status/battery-caution.svg</td><td width="200">battery-caution</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/audio-volume-low.png" alt="tango-icons/status/audio-volume-low.svg"/></td><td width="400">:/status/audio-volume-low.svg</td><td width="400">tango-icons/status/audio-volume-low.svg</td><td width="200">audio-volume-low</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-offline.png" alt="tango-icons/status/network-offline.svg"/></td><td width="400">:/status/network-offline.svg</td><td width="400">tango-icons/status/network-offline.svg</td><td width="200">network-offline</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/dialog-warning.png" alt="tango-icons/status/dialog-warning.svg"/></td><td width="400">:/status/dialog-warning.svg</td><td width="400">tango-icons/status/dialog-warning.svg</td><td width="200">dialog-warning</td></tr>
-</table>
-<h2><a name="tango-icons/actions">:/actions/ (tango-icons/actions)</a></h2>
+<h2><a name="rrze-icons/devices">:/devices/ (rrze-icons/devices)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/actions/" Directory: "tango-icons/actions"</th>
+<th colspan="4">Resource: ":/devices/" Directory: "rrze-icons/devices"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/database-locked.png" alt="rrze-icons/devices/database-locked.svg"/></td><td width="400">:/devices/database-locked.svg</td><td width="400">rrze-icons/devices/database-locked.svg</td><td width="200">database-locked</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/modem.png" alt="rrze-icons/devices/modem.svg"/></td><td width="400">:/devices/modem.svg</td><td width="400">rrze-icons/devices/modem.svg</td><td width="200">modem</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/router.png" alt="rrze-icons/devices/router.svg"/></td><td width="400">:/devices/router.svg</td><td width="400">rrze-icons/devices/router.svg</td><td width="200">router</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-access.png" alt="rrze-icons/devices/server-access.svg"/></td><td width="400">:/devices/server-access.svg</td><td width="400">rrze-icons/devices/server-access.svg</td><td width="200">server-access</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-accounting.png" alt="rrze-icons/devices/server-accounting.svg"/></td><td width="400">:/devices/server-accounting.svg</td><td width="400">rrze-icons/devices/server-accounting.svg</td><td width="200">server-accounting</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-blades.png" alt="rrze-icons/devices/server-blades.svg"/></td><td width="400">:/devices/server-blades.svg</td><td width="400">rrze-icons/devices/server-blades.svg</td><td width="200">server-blades</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-book.png" alt="rrze-icons/devices/server-book.svg"/></td><td width="400">:/devices/server-book.svg</td><td width="400">rrze-icons/devices/server-book.svg</td><td width="200">server-book</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-firebird.png" alt="rrze-icons/devices/server-database-firebird.svg"/></td><td width="400">:/devices/server-database-firebird.svg</td><td width="400">rrze-icons/devices/server-database-firebird.svg</td><td width="200">server-database-firebird</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-green.png" alt="rrze-icons/devices/server-database-green.svg"/></td><td width="400">:/devices/server-database-green.svg</td><td width="400">rrze-icons/devices/server-database-green.svg</td><td width="200">server-database-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-mysql.png" alt="rrze-icons/devices/server-database-mysql.svg"/></td><td width="400">:/devices/server-database-mysql.svg</td><td width="400">rrze-icons/devices/server-database-mysql.svg</td><td width="200">server-database-mysql</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-otrs.png" alt="rrze-icons/devices/server-database-otrs.svg"/></td><td width="400">:/devices/server-database-otrs.svg</td><td width="400">rrze-icons/devices/server-database-otrs.svg</td><td width="200">server-database-otrs</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-postgres.png" alt="rrze-icons/devices/server-database-postgres.svg"/></td><td width="400">:/devices/server-database-postgres.svg</td><td width="400">rrze-icons/devices/server-database-postgres.svg</td><td width="200">server-database-postgres</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database-yellow.png" alt="rrze-icons/devices/server-database-yellow.svg"/></td><td width="400">:/devices/server-database-yellow.svg</td><td width="400">rrze-icons/devices/server-database-yellow.svg</td><td width="200">server-database-yellow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-database.png" alt="rrze-icons/devices/server-database.svg"/></td><td width="400">:/devices/server-database.svg</td><td width="400">rrze-icons/devices/server-database.svg</td><td width="200">server-database</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-directory-green.png" alt="rrze-icons/devices/server-directory-green.svg"/></td><td width="400">:/devices/server-directory-green.svg</td><td width="400">rrze-icons/devices/server-directory-green.svg</td><td width="200">server-directory-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-directory-yellow.png" alt="rrze-icons/devices/server-directory-yellow.svg"/></td><td width="400">:/devices/server-directory-yellow.svg</td><td width="400">rrze-icons/devices/server-directory-yellow.svg</td><td width="200">server-directory-yellow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-directory.png" alt="rrze-icons/devices/server-directory.svg"/></td><td width="400">:/devices/server-directory.svg</td><td width="400">rrze-icons/devices/server-directory.svg</td><td width="200">server-directory</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-email-relay.png" alt="rrze-icons/devices/server-email-relay.svg"/></td><td width="400">:/devices/server-email-relay.svg</td><td width="400">rrze-icons/devices/server-email-relay.svg</td><td width="200">server-email-relay</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-email.png" alt="rrze-icons/devices/server-email.svg"/></td><td width="400">:/devices/server-email.svg</td><td width="400">rrze-icons/devices/server-email.svg</td><td width="200">server-email</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-file.png" alt="rrze-icons/devices/server-file.svg"/></td><td width="400">:/devices/server-file.svg</td><td width="400">rrze-icons/devices/server-file.svg</td><td width="200">server-file</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-firewall.png" alt="rrze-icons/devices/server-firewall.svg"/></td><td width="400">:/devices/server-firewall.svg</td><td width="400">rrze-icons/devices/server-firewall.svg</td><td width="200">server-firewall</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-green.png" alt="rrze-icons/devices/server-green.svg"/></td><td width="400">:/devices/server-green.svg</td><td width="400">rrze-icons/devices/server-green.svg</td><td width="200">server-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-monitoring.png" alt="rrze-icons/devices/server-monitoring.svg"/></td><td width="400">:/devices/server-monitoring.svg</td><td width="400">rrze-icons/devices/server-monitoring.svg</td><td width="200">server-monitoring</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-multiple.png" alt="rrze-icons/devices/server-multiple.svg"/></td><td width="400">:/devices/server-multiple.svg</td><td width="400">rrze-icons/devices/server-multiple.svg</td><td width="200">server-multiple</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-print.png" alt="rrze-icons/devices/server-print.svg"/></td><td width="400">:/devices/server-print.svg</td><td width="400">rrze-icons/devices/server-print.svg</td><td width="200">server-print</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-radius.png" alt="rrze-icons/devices/server-radius.svg"/></td><td width="400">:/devices/server-radius.svg</td><td width="400">rrze-icons/devices/server-radius.svg</td><td width="200">server-radius</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-red.png" alt="rrze-icons/devices/server-red.svg"/></td><td width="400">:/devices/server-red.svg</td><td width="400">rrze-icons/devices/server-red.svg</td><td width="200">server-red</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-subversion.png" alt="rrze-icons/devices/server-subversion.svg"/></td><td width="400">:/devices/server-subversion.svg</td><td width="400">rrze-icons/devices/server-subversion.svg</td><td width="200">server-subversion</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-user.png" alt="rrze-icons/devices/server-user.svg"/></td><td width="400">:/devices/server-user.svg</td><td width="400">rrze-icons/devices/server-user.svg</td><td width="200">server-user</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-vpn.png" alt="rrze-icons/devices/server-vpn.svg"/></td><td width="400">:/devices/server-vpn.svg</td><td width="400">rrze-icons/devices/server-vpn.svg</td><td width="200">server-vpn</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-web-green.png" alt="rrze-icons/devices/server-web-green.svg"/></td><td width="400">:/devices/server-web-green.svg</td><td width="400">rrze-icons/devices/server-web-green.svg</td><td width="200">server-web-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-web-secure.png" alt="rrze-icons/devices/server-web-secure.svg"/></td><td width="400">:/devices/server-web-secure.svg</td><td width="400">rrze-icons/devices/server-web-secure.svg</td><td width="200">server-web-secure</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-web-yellow.png" alt="rrze-icons/devices/server-web-yellow.svg"/></td><td width="400">:/devices/server-web-yellow.svg</td><td width="400">rrze-icons/devices/server-web-yellow.svg</td><td width="200">server-web-yellow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-web.png" alt="rrze-icons/devices/server-web.svg"/></td><td width="400">:/devices/server-web.svg</td><td width="400">rrze-icons/devices/server-web.svg</td><td width="200">server-web</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server-yellow.png" alt="rrze-icons/devices/server-yellow.svg"/></td><td width="400">:/devices/server-yellow.svg</td><td width="400">rrze-icons/devices/server-yellow.svg</td><td width="200">server-yellow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/server.png" alt="rrze-icons/devices/server.svg"/></td><td width="400">:/devices/server.svg</td><td width="400">rrze-icons/devices/server.svg</td><td width="200">server</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/switch.png" alt="rrze-icons/devices/switch.svg"/></td><td width="400">:/devices/switch.svg</td><td width="400">rrze-icons/devices/switch.svg</td><td width="200">switch</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/wlan-access-point.png" alt="rrze-icons/devices/wlan-access-point.svg"/></td><td width="400">:/devices/wlan-access-point.svg</td><td width="400">rrze-icons/devices/wlan-access-point.svg</td><td width="200">wlan-access-point</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/wlan-controller.png" alt="rrze-icons/devices/wlan-controller.svg"/></td><td width="400">:/devices/wlan-controller.svg</td><td width="400">rrze-icons/devices/wlan-controller.svg</td><td width="200">wlan-controller</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/devices/workstation.png" alt="rrze-icons/devices/workstation.svg"/></td><td width="400">:/devices/workstation.svg</td><td width="400">rrze-icons/devices/workstation.svg</td><td width="200">workstation</td></tr>
+</table>
+<h2><a name="rrze-icons/emblems">:/emblems/ (rrze-icons/emblems)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/emblems/" Directory: "rrze-icons/emblems"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/account-delete.png" alt="rrze-icons/emblems/account-delete.svg"/></td><td width="400">:/emblems/account-delete.svg</td><td width="400">rrze-icons/emblems/account-delete.svg</td><td width="200">account-delete</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/account-edit.png" alt="rrze-icons/emblems/account-edit.svg"/></td><td width="400">:/emblems/account-edit.svg</td><td width="400">rrze-icons/emblems/account-edit.svg</td><td width="200">account-edit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/account-new.png" alt="rrze-icons/emblems/account-new.svg"/></td><td width="400">:/emblems/account-new.svg</td><td width="400">rrze-icons/emblems/account-new.svg</td><td width="200">account-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/affiliation-abstract.png" alt="rrze-icons/emblems/affiliation-abstract.svg"/></td><td width="400">:/emblems/affiliation-abstract.svg</td><td width="400">rrze-icons/emblems/affiliation-abstract.svg</td><td width="200">affiliation-abstract</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/affiliation.png" alt="rrze-icons/emblems/affiliation.svg"/></td><td width="400">:/emblems/affiliation.svg</td><td width="400">rrze-icons/emblems/affiliation.svg</td><td width="200">affiliation</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/affirmation.png" alt="rrze-icons/emblems/affirmation.svg"/></td><td width="400">:/emblems/affirmation.svg</td><td width="400">rrze-icons/emblems/affirmation.svg</td><td width="200">affirmation</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/all-per-page.png" alt="rrze-icons/emblems/all-per-page.svg"/></td><td width="400">:/emblems/all-per-page.svg</td><td width="400">rrze-icons/emblems/all-per-page.svg</td><td width="200">all-per-page</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/at.png" alt="rrze-icons/emblems/at.svg"/></td><td width="400">:/emblems/at.svg</td><td width="400">rrze-icons/emblems/at.svg</td><td width="200">at</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/audio-itunes-u.png" alt="rrze-icons/emblems/audio-itunes-u.svg"/></td><td width="400">:/emblems/audio-itunes-u.svg</td><td width="400">rrze-icons/emblems/audio-itunes-u.svg</td><td width="200">audio-itunes-u</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/audio-itunes.png" alt="rrze-icons/emblems/audio-itunes.svg"/></td><td width="400">:/emblems/audio-itunes.svg</td><td width="400">rrze-icons/emblems/audio-itunes.svg</td><td width="200">audio-itunes</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/audio-visual-slide.png" alt="rrze-icons/emblems/audio-visual-slide.svg"/></td><td width="400">:/emblems/audio-visual-slide.svg</td><td width="400">rrze-icons/emblems/audio-visual-slide.svg</td><td width="200">audio-visual-slide</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/bridge-stone-delete.png" alt="rrze-icons/emblems/bridge-stone-delete.svg"/></td><td width="400">:/emblems/bridge-stone-delete.svg</td><td width="400">rrze-icons/emblems/bridge-stone-delete.svg</td><td width="200">bridge-stone-delete</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/bridge-stone-new.png" alt="rrze-icons/emblems/bridge-stone-new.svg"/></td><td width="400">:/emblems/bridge-stone-new.svg</td><td width="400">rrze-icons/emblems/bridge-stone-new.svg</td><td width="200">bridge-stone-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/bridge-stone.png" alt="rrze-icons/emblems/bridge-stone.svg"/></td><td width="400">:/emblems/bridge-stone.svg</td><td width="400">rrze-icons/emblems/bridge-stone.svg</td><td width="200">bridge-stone</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-firebird.png" alt="rrze-icons/emblems/database-firebird.svg"/></td><td width="400">:/emblems/database-firebird.svg</td><td width="400">rrze-icons/emblems/database-firebird.svg</td><td width="200">database-firebird</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-mysql.png" alt="rrze-icons/emblems/database-mysql.svg"/></td><td width="400">:/emblems/database-mysql.svg</td><td width="400">rrze-icons/emblems/database-mysql.svg</td><td width="200">database-mysql</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-openldap.png" alt="rrze-icons/emblems/database-openldap.svg"/></td><td width="400">:/emblems/database-openldap.svg</td><td width="400">rrze-icons/emblems/database-openldap.svg</td><td width="200">database-openldap</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-otrs.png" alt="rrze-icons/emblems/database-otrs.svg"/></td><td width="400">:/emblems/database-otrs.svg</td><td width="400">rrze-icons/emblems/database-otrs.svg</td><td width="200">database-otrs</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-postgres.png" alt="rrze-icons/emblems/database-postgres.svg"/></td><td width="400">:/emblems/database-postgres.svg</td><td width="400">rrze-icons/emblems/database-postgres.svg</td><td width="200">database-postgres</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database-vcs-subversion.png" alt="rrze-icons/emblems/database-vcs-subversion.svg"/></td><td width="400">:/emblems/database-vcs-subversion.svg</td><td width="400">rrze-icons/emblems/database-vcs-subversion.svg</td><td width="200">database-vcs-subversion</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/database.png" alt="rrze-icons/emblems/database.svg"/></td><td width="400">:/emblems/database.svg</td><td width="400">rrze-icons/emblems/database.svg</td><td width="200">database</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-attribute.png" alt="rrze-icons/emblems/directory-attribute.svg"/></td><td width="400">:/emblems/directory-attribute.svg</td><td width="400">rrze-icons/emblems/directory-attribute.svg</td><td width="200">directory-attribute</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-object-class.png" alt="rrze-icons/emblems/directory-object-class.svg"/></td><td width="400">:/emblems/directory-object-class.svg</td><td width="400">rrze-icons/emblems/directory-object-class.svg</td><td width="200">directory-object-class</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-object.png" alt="rrze-icons/emblems/directory-object.svg"/></td><td width="400">:/emblems/directory-object.svg</td><td width="400">rrze-icons/emblems/directory-object.svg</td><td width="200">directory-object</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-schema.png" alt="rrze-icons/emblems/directory-schema.svg"/></td><td width="400">:/emblems/directory-schema.svg</td><td width="400">rrze-icons/emblems/directory-schema.svg</td><td width="200">directory-schema</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory-syntax.png" alt="rrze-icons/emblems/directory-syntax.svg"/></td><td width="400">:/emblems/directory-syntax.svg</td><td width="400">rrze-icons/emblems/directory-syntax.svg</td><td width="200">directory-syntax</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/directory.png" alt="rrze-icons/emblems/directory.svg"/></td><td width="400">:/emblems/directory.svg</td><td width="400">rrze-icons/emblems/directory.svg</td><td width="200">directory</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/doctoral-cap.png" alt="rrze-icons/emblems/doctoral-cap.svg"/></td><td width="400">:/emblems/doctoral-cap.svg</td><td width="400">rrze-icons/emblems/doctoral-cap.svg</td><td width="200">doctoral-cap</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/email.png" alt="rrze-icons/emblems/email.svg"/></td><td width="400">:/emblems/email.svg</td><td width="400">rrze-icons/emblems/email.svg</td><td width="200">email</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/entitlement.png" alt="rrze-icons/emblems/entitlement.svg"/></td><td width="400">:/emblems/entitlement.svg</td><td width="400">rrze-icons/emblems/entitlement.svg</td><td width="200">entitlement</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/export.png" alt="rrze-icons/emblems/export.svg"/></td><td width="400">:/emblems/export.svg</td><td width="400">rrze-icons/emblems/export.svg</td><td width="200">export</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/fifty-per-page.png" alt="rrze-icons/emblems/fifty-per-page.svg"/></td><td width="400">:/emblems/fifty-per-page.svg</td><td width="400">rrze-icons/emblems/fifty-per-page.svg</td><td width="200">fifty-per-page</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/firewall.png" alt="rrze-icons/emblems/firewall.svg"/></td><td width="400">:/emblems/firewall.svg</td><td width="400">rrze-icons/emblems/firewall.svg</td><td width="200">firewall</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/floppy-disc-green.png" alt="rrze-icons/emblems/floppy-disc-green.svg"/></td><td width="400">:/emblems/floppy-disc-green.svg</td><td width="400">rrze-icons/emblems/floppy-disc-green.svg</td><td width="200">floppy-disc-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/folder.png" alt="rrze-icons/emblems/folder.svg"/></td><td width="400">:/emblems/folder.svg</td><td width="400">rrze-icons/emblems/folder.svg</td><td width="200">folder</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/footnote-delete.png" alt="rrze-icons/emblems/footnote-delete.svg"/></td><td width="400">:/emblems/footnote-delete.svg</td><td width="400">rrze-icons/emblems/footnote-delete.svg</td><td width="200">footnote-delete</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/footnote-edit.png" alt="rrze-icons/emblems/footnote-edit.svg"/></td><td width="400">:/emblems/footnote-edit.svg</td><td width="400">rrze-icons/emblems/footnote-edit.svg</td><td width="200">footnote-edit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/footnote-new.png" alt="rrze-icons/emblems/footnote-new.svg"/></td><td width="400">:/emblems/footnote-new.svg</td><td width="400">rrze-icons/emblems/footnote-new.svg</td><td width="200">footnote-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/footnote.png" alt="rrze-icons/emblems/footnote.svg"/></td><td width="400">:/emblems/footnote.svg</td><td width="400">rrze-icons/emblems/footnote.svg</td><td width="200">footnote</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/for-free.png" alt="rrze-icons/emblems/for-free.svg"/></td><td width="400">:/emblems/for-free.svg</td><td width="400">rrze-icons/emblems/for-free.svg</td><td width="200">for-free</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/geo-id.png" alt="rrze-icons/emblems/geo-id.svg"/></td><td width="400">:/emblems/geo-id.svg</td><td width="400">rrze-icons/emblems/geo-id.svg</td><td width="200">geo-id</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/globe.png" alt="rrze-icons/emblems/globe.svg"/></td><td width="400">:/emblems/globe.svg</td><td width="400">rrze-icons/emblems/globe.svg</td><td width="200">globe</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/id.png" alt="rrze-icons/emblems/id.svg"/></td><td width="400">:/emblems/id.svg</td><td width="400">rrze-icons/emblems/id.svg</td><td width="200">id</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/index.png" alt="rrze-icons/emblems/index.svg"/></td><td width="400">:/emblems/index.svg</td><td width="400">rrze-icons/emblems/index.svg</td><td width="200">index</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/information.png" alt="rrze-icons/emblems/information.svg"/></td><td width="400">:/emblems/information.svg</td><td width="400">rrze-icons/emblems/information.svg</td><td width="200">information</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/inspector-hat.png" alt="rrze-icons/emblems/inspector-hat.svg"/></td><td width="400">:/emblems/inspector-hat.svg</td><td width="400">rrze-icons/emblems/inspector-hat.svg</td><td width="200">inspector-hat</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/lock.png" alt="rrze-icons/emblems/lock.svg"/></td><td width="400">:/emblems/lock.svg</td><td width="400">rrze-icons/emblems/lock.svg</td><td width="200">lock</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/mailbox.png" alt="rrze-icons/emblems/mailbox.svg"/></td><td width="400">:/emblems/mailbox.svg</td><td width="400">rrze-icons/emblems/mailbox.svg</td><td width="200">mailbox</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/media-film.png" alt="rrze-icons/emblems/media-film.svg"/></td><td width="400">:/emblems/media-film.svg</td><td width="400">rrze-icons/emblems/media-film.svg</td><td width="200">media-film</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/media-floppy-green.png" alt="rrze-icons/emblems/media-floppy-green.svg"/></td><td width="400">:/emblems/media-floppy-green.svg</td><td width="400">rrze-icons/emblems/media-floppy-green.svg</td><td width="200">media-floppy-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/message-new.png" alt="rrze-icons/emblems/message-new.svg"/></td><td width="400">:/emblems/message-new.svg</td><td width="400">rrze-icons/emblems/message-new.svg</td><td width="200">message-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/money.png" alt="rrze-icons/emblems/money.svg"/></td><td width="400">:/emblems/money.svg</td><td width="400">rrze-icons/emblems/money.svg</td><td width="200">money</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/movie-audio.png" alt="rrze-icons/emblems/movie-audio.svg"/></td><td width="400">:/emblems/movie-audio.svg</td><td width="400">rrze-icons/emblems/movie-audio.svg</td><td width="200">movie-audio</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/network-cloud.png" alt="rrze-icons/emblems/network-cloud.svg"/></td><td width="400">:/emblems/network-cloud.svg</td><td width="400">rrze-icons/emblems/network-cloud.svg</td><td width="200">network-cloud</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/note.png" alt="rrze-icons/emblems/note.svg"/></td><td width="400">:/emblems/note.svg</td><td width="400">rrze-icons/emblems/note.svg</td><td width="200">note</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/video-film.png" alt="rrze-icons/emblems/video-film.svg"/></td><td width="400">:/emblems/video-film.svg</td><td width="400">rrze-icons/emblems/video-film.svg</td><td width="200">video-film</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/office-excel.png" alt="rrze-icons/emblems/office-excel.svg"/></td><td width="400">:/emblems/office-excel.svg</td><td width="400">rrze-icons/emblems/office-excel.svg</td><td width="200">office-excel</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/office-word.png" alt="rrze-icons/emblems/office-word.svg"/></td><td width="400">:/emblems/office-word.svg</td><td width="400">rrze-icons/emblems/office-word.svg</td><td width="200">office-word</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/organisational-unit-tree.png" alt="rrze-icons/emblems/organisational-unit-tree.svg"/></td><td width="400">:/emblems/organisational-unit-tree.svg</td><td width="400">rrze-icons/emblems/organisational-unit-tree.svg</td><td width="200">organisational-unit-tree</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/organizational-unit.png" alt="rrze-icons/emblems/organizational-unit.svg"/></td><td width="400">:/emblems/organizational-unit.svg</td><td width="400">rrze-icons/emblems/organizational-unit.svg</td><td width="200">organizational-unit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/page-25.png" alt="rrze-icons/emblems/page-25.svg"/></td><td width="400">:/emblems/page-25.svg</td><td width="400">rrze-icons/emblems/page-25.svg</td><td width="200">page-25</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/page-50.png" alt="rrze-icons/emblems/page-50.svg"/></td><td width="400">:/emblems/page-50.svg</td><td width="400">rrze-icons/emblems/page-50.svg</td><td width="200">page-50</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/page-all.png" alt="rrze-icons/emblems/page-all.svg"/></td><td width="400">:/emblems/page-all.svg</td><td width="400">rrze-icons/emblems/page-all.svg</td><td width="200">page-all</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/peace-sign.png" alt="rrze-icons/emblems/peace-sign.svg"/></td><td width="400">:/emblems/peace-sign.svg</td><td width="400">rrze-icons/emblems/peace-sign.svg</td><td width="200">peace-sign</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/pen.png" alt="rrze-icons/emblems/pen.svg"/></td><td width="400">:/emblems/pen.svg</td><td width="400">rrze-icons/emblems/pen.svg</td><td width="200">pen</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/phone.png" alt="rrze-icons/emblems/phone.svg"/></td><td width="400">:/emblems/phone.svg</td><td width="400">rrze-icons/emblems/phone.svg</td><td width="200">phone</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/promotion-data.png" alt="rrze-icons/emblems/promotion-data.svg"/></td><td width="400">:/emblems/promotion-data.svg</td><td width="400">rrze-icons/emblems/promotion-data.svg</td><td width="200">promotion-data</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/relay.png" alt="rrze-icons/emblems/relay.svg"/></td><td width="400">:/emblems/relay.svg</td><td width="400">rrze-icons/emblems/relay.svg</td><td width="200">relay</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-delete.png" alt="rrze-icons/emblems/report-delete.svg"/></td><td width="400">:/emblems/report-delete.svg</td><td width="400">rrze-icons/emblems/report-delete.svg</td><td width="200">report-delete</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-edit.png" alt="rrze-icons/emblems/report-edit.svg"/></td><td width="400">:/emblems/report-edit.svg</td><td width="400">rrze-icons/emblems/report-edit.svg</td><td width="200">report-edit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-new.png" alt="rrze-icons/emblems/report-new.svg"/></td><td width="400">:/emblems/report-new.svg</td><td width="400">rrze-icons/emblems/report-new.svg</td><td width="200">report-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-run.png" alt="rrze-icons/emblems/report-run.svg"/></td><td width="400">:/emblems/report-run.svg</td><td width="400">rrze-icons/emblems/report-run.svg</td><td width="200">report-run</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report-upload.png" alt="rrze-icons/emblems/report-upload.svg"/></td><td width="400">:/emblems/report-upload.svg</td><td width="400">rrze-icons/emblems/report-upload.svg</td><td width="200">report-upload</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/report.png" alt="rrze-icons/emblems/report.svg"/></td><td width="400">:/emblems/report.svg</td><td width="400">rrze-icons/emblems/report.svg</td><td width="200">report</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/rss-feed.png" alt="rrze-icons/emblems/rss-feed.svg"/></td><td width="400">:/emblems/rss-feed.svg</td><td width="400">rrze-icons/emblems/rss-feed.svg</td><td width="200">rss-feed</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/single-sign-on.png" alt="rrze-icons/emblems/single-sign-on.svg"/></td><td width="400">:/emblems/single-sign-on.svg</td><td width="400">rrze-icons/emblems/single-sign-on.svg</td><td width="200">single-sign-on</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/slide-audio.png" alt="rrze-icons/emblems/slide-audio.svg"/></td><td width="400">:/emblems/slide-audio.svg</td><td width="400">rrze-icons/emblems/slide-audio.svg</td><td width="200">slide-audio</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/slide.png" alt="rrze-icons/emblems/slide.svg"/></td><td width="400">:/emblems/slide.svg</td><td width="400">rrze-icons/emblems/slide.svg</td><td width="200">slide</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/statistic.png" alt="rrze-icons/emblems/statistic.svg"/></td><td width="400">:/emblems/statistic.svg</td><td width="400">rrze-icons/emblems/statistic.svg</td><td width="200">statistic</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/structured-program-stay-abroad.png" alt="rrze-icons/emblems/structured-program-stay-abroad.svg"/></td><td width="400">:/emblems/structured-program-stay-abroad.svg</td><td width="400">rrze-icons/emblems/structured-program-stay-abroad.svg</td><td width="200">structured-program-stay-abroad</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/subversion-logo.png" alt="rrze-icons/emblems/subversion-logo.svg"/></td><td width="400">:/emblems/subversion-logo.svg</td><td width="400">rrze-icons/emblems/subversion-logo.svg</td><td width="200">subversion-logo</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/subversion.png" alt="rrze-icons/emblems/subversion.svg"/></td><td width="400">:/emblems/subversion.svg</td><td width="400">rrze-icons/emblems/subversion.svg</td><td width="200">subversion</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/table.png" alt="rrze-icons/emblems/table.svg"/></td><td width="400">:/emblems/table.svg</td><td width="400">rrze-icons/emblems/table.svg</td><td width="200">table</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/task.png" alt="rrze-icons/emblems/task.svg"/></td><td width="400">:/emblems/task.svg</td><td width="400">rrze-icons/emblems/task.svg</td><td width="200">task</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/template.png" alt="rrze-icons/emblems/template.svg"/></td><td width="400">:/emblems/template.svg</td><td width="400">rrze-icons/emblems/template.svg</td><td width="200">template</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/ten-per-page.png" alt="rrze-icons/emblems/ten-per-page.svg"/></td><td width="400">:/emblems/ten-per-page.svg</td><td width="400">rrze-icons/emblems/ten-per-page.svg</td><td width="200">ten-per-page</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tomcat.png" alt="rrze-icons/emblems/tomcat.svg"/></td><td width="400">:/emblems/tomcat.svg</td><td width="400">rrze-icons/emblems/tomcat.svg</td><td width="200">tomcat</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tree-diagramm-delete.png" alt="rrze-icons/emblems/tree-diagramm-delete.svg"/></td><td width="400">:/emblems/tree-diagramm-delete.svg</td><td width="400">rrze-icons/emblems/tree-diagramm-delete.svg</td><td width="200">tree-diagramm-delete</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tree-diagramm-move.png" alt="rrze-icons/emblems/tree-diagramm-move.svg"/></td><td width="400">:/emblems/tree-diagramm-move.svg</td><td width="400">rrze-icons/emblems/tree-diagramm-move.svg</td><td width="200">tree-diagramm-move</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tree-diagramm-new.png" alt="rrze-icons/emblems/tree-diagramm-new.svg"/></td><td width="400">:/emblems/tree-diagramm-new.svg</td><td width="400">rrze-icons/emblems/tree-diagramm-new.svg</td><td width="200">tree-diagramm-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/tree-diagramm.png" alt="rrze-icons/emblems/tree-diagramm.svg"/></td><td width="400">:/emblems/tree-diagramm.svg</td><td width="400">rrze-icons/emblems/tree-diagramm.svg</td><td width="200">tree-diagramm</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/twenty-five-per-page.png" alt="rrze-icons/emblems/twenty-five-per-page.svg"/></td><td width="400">:/emblems/twenty-five-per-page.svg</td><td width="400">rrze-icons/emblems/twenty-five-per-page.svg</td><td width="200">twenty-five-per-page</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/unix.png" alt="rrze-icons/emblems/unix.svg"/></td><td width="400">:/emblems/unix.svg</td><td width="400">rrze-icons/emblems/unix.svg</td><td width="200">unix</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/webview.png" alt="rrze-icons/emblems/webview.svg"/></td><td width="400">:/emblems/webview.svg</td><td width="400">rrze-icons/emblems/webview.svg</td><td width="200">webview</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/wide-area-network-connection.png" alt="rrze-icons/emblems/wide-area-network-connection.svg"/></td><td width="400">:/emblems/wide-area-network-connection.svg</td><td width="400">rrze-icons/emblems/wide-area-network-connection.svg</td><td width="200">wide-area-network-connection</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/wide-area-network-link.png" alt="rrze-icons/emblems/wide-area-network-link.svg"/></td><td width="400">:/emblems/wide-area-network-link.svg</td><td width="400">rrze-icons/emblems/wide-area-network-link.svg</td><td width="200">wide-area-network-link</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/wifi.png" alt="rrze-icons/emblems/wifi.svg"/></td><td width="400">:/emblems/wifi.svg</td><td width="400">rrze-icons/emblems/wifi.svg</td><td width="200">wifi</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/emblems/zipper.png" alt="rrze-icons/emblems/zipper.svg"/></td><td width="400">:/emblems/zipper.svg</td><td width="400">rrze-icons/emblems/zipper.svg</td><td width="200">zipper</td></tr>
+</table>
+<h2><a name="rrze-icons/mime-types">:/mime-types/ (rrze-icons/mime-types)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/mime-types/" Directory: "rrze-icons/mime-types"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/audio-mp3.png" alt="rrze-icons/mime-types/audio-mp3.svg"/></td><td width="400">:/mime-types/audio-mp3.svg</td><td width="400">rrze-icons/mime-types/audio-mp3.svg</td><td width="200">audio-mp3</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/audio-mp4.png" alt="rrze-icons/mime-types/audio-mp4.svg"/></td><td width="400">:/mime-types/audio-mp4.svg</td><td width="400">rrze-icons/mime-types/audio-mp4.svg</td><td width="200">audio-mp4</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/document-pdf.png" alt="rrze-icons/mime-types/document-pdf.svg"/></td><td width="400">:/mime-types/document-pdf.svg</td><td width="400">rrze-icons/mime-types/document-pdf.svg</td><td width="200">document-pdf</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-audio-itunes-u.png" alt="rrze-icons/mime-types/media-audio-itunes-u.svg"/></td><td width="400">:/mime-types/media-audio-itunes-u.svg</td><td width="400">rrze-icons/mime-types/media-audio-itunes-u.svg</td><td width="200">media-audio-itunes-u</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-audio-itunes.png" alt="rrze-icons/mime-types/media-audio-itunes.svg"/></td><td width="400">:/mime-types/media-audio-itunes.svg</td><td width="400">rrze-icons/mime-types/media-audio-itunes.svg</td><td width="200">media-audio-itunes</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-audio-visual-slide.png" alt="rrze-icons/mime-types/media-audio-visual-slide.svg"/></td><td width="400">:/mime-types/media-audio-visual-slide.svg</td><td width="400">rrze-icons/mime-types/media-audio-visual-slide.svg</td><td width="200">media-audio-visual-slide</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-movie-audio.png" alt="rrze-icons/mime-types/media-movie-audio.svg"/></td><td width="400">:/mime-types/media-movie-audio.svg</td><td width="400">rrze-icons/mime-types/media-movie-audio.svg</td><td width="200">media-movie-audio</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-movie.png" alt="rrze-icons/mime-types/media-movie.svg"/></td><td width="400">:/mime-types/media-movie.svg</td><td width="400">rrze-icons/mime-types/media-movie.svg</td><td width="200">media-movie</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-slide-audio.png" alt="rrze-icons/mime-types/media-slide-audio.svg"/></td><td width="400">:/mime-types/media-slide-audio.svg</td><td width="400">rrze-icons/mime-types/media-slide-audio.svg</td><td width="200">media-slide-audio</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/media-video-film.png" alt="rrze-icons/mime-types/media-video-film.svg"/></td><td width="400">:/mime-types/media-video-film.svg</td><td width="400">rrze-icons/mime-types/media-video-film.svg</td><td width="200">media-video-film</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/office-ms-excel.png" alt="rrze-icons/mime-types/office-ms-excel.svg"/></td><td width="400">:/mime-types/office-ms-excel.svg</td><td width="400">rrze-icons/mime-types/office-ms-excel.svg</td><td width="200">office-ms-excel</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/office-ms-word.png" alt="rrze-icons/mime-types/office-ms-word.svg"/></td><td width="400">:/mime-types/office-ms-word.svg</td><td width="400">rrze-icons/mime-types/office-ms-word.svg</td><td width="200">office-ms-word</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/text-csv-text.png" alt="rrze-icons/mime-types/text-csv-text.svg"/></td><td width="400">:/mime-types/text-csv-text.svg</td><td width="400">rrze-icons/mime-types/text-csv-text.svg</td><td width="200">text-csv-text</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/video-m4v.png" alt="rrze-icons/mime-types/video-m4v.svg"/></td><td width="400">:/mime-types/video-m4v.svg</td><td width="400">rrze-icons/mime-types/video-m4v.svg</td><td width="200">video-m4v</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/mime-types/video-mov.png" alt="rrze-icons/mime-types/video-mov.svg"/></td><td width="400">:/mime-types/video-mov.svg</td><td width="400">rrze-icons/mime-types/video-mov.svg</td><td width="200">video-mov</td></tr>
+</table>
+<h2><a name="rrze-icons/status">:/status/ (rrze-icons/status)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/status/" Directory: "rrze-icons/status"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/available.png" alt="rrze-icons/status/available.svg"/></td><td width="400">:/status/available.svg</td><td width="400">rrze-icons/status/available.svg</td><td width="200">available</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/awaiting-plus.png" alt="rrze-icons/status/awaiting-plus.svg"/></td><td width="400">:/status/awaiting-plus.svg</td><td width="400">rrze-icons/status/awaiting-plus.svg</td><td width="200">awaiting-plus</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/awaiting.png" alt="rrze-icons/status/awaiting.svg"/></td><td width="400">:/status/awaiting.svg</td><td width="400">rrze-icons/status/awaiting.svg</td><td width="200">awaiting</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/binational.png" alt="rrze-icons/status/binational.svg"/></td><td width="400">:/status/binational.svg</td><td width="400">rrze-icons/status/binational.svg</td><td width="200">binational</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/error.png" alt="rrze-icons/status/error.svg"/></td><td width="400">:/status/error.svg</td><td width="400">rrze-icons/status/error.svg</td><td width="200">error</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/exclamation-mark.png" alt="rrze-icons/status/exclamation-mark.svg"/></td><td width="400">:/status/exclamation-mark.svg</td><td width="400">rrze-icons/status/exclamation-mark.svg</td><td width="200">exclamation-mark</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/expired.png" alt="rrze-icons/status/expired.svg"/></td><td width="400">:/status/expired.svg</td><td width="400">rrze-icons/status/expired.svg</td><td width="200">expired</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/false.png" alt="rrze-icons/status/false.svg"/></td><td width="400">:/status/false.svg</td><td width="400">rrze-icons/status/false.svg</td><td width="200">false</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/female.png" alt="rrze-icons/status/female.svg"/></td><td width="400">:/status/female.svg</td><td width="400">rrze-icons/status/female.svg</td><td width="200">female</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-green-clock.png" alt="rrze-icons/status/flag-green-clock.svg"/></td><td width="400">:/status/flag-green-clock.svg</td><td width="400">rrze-icons/status/flag-green-clock.svg</td><td width="200">flag-green-clock</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-green-mail.png" alt="rrze-icons/status/flag-green-mail.svg"/></td><td width="400">:/status/flag-green-mail.svg</td><td width="400">rrze-icons/status/flag-green-mail.svg</td><td width="200">flag-green-mail</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-green.png" alt="rrze-icons/status/flag-green.svg"/></td><td width="400">:/status/flag-green.svg</td><td width="400">rrze-icons/status/flag-green.svg</td><td width="200">flag-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-red-clock.png" alt="rrze-icons/status/flag-red-clock.svg"/></td><td width="400">:/status/flag-red-clock.svg</td><td width="400">rrze-icons/status/flag-red-clock.svg</td><td width="200">flag-red-clock</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-red-mail.png" alt="rrze-icons/status/flag-red-mail.svg"/></td><td width="400">:/status/flag-red-mail.svg</td><td width="400">rrze-icons/status/flag-red-mail.svg</td><td width="200">flag-red-mail</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-red.png" alt="rrze-icons/status/flag-red.svg"/></td><td width="400">:/status/flag-red.svg</td><td width="400">rrze-icons/status/flag-red.svg</td><td width="200">flag-red</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-yellow-clock.png" alt="rrze-icons/status/flag-yellow-clock.svg"/></td><td width="400">:/status/flag-yellow-clock.svg</td><td width="400">rrze-icons/status/flag-yellow-clock.svg</td><td width="200">flag-yellow-clock</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-yellow-mail.png" alt="rrze-icons/status/flag-yellow-mail.svg"/></td><td width="400">:/status/flag-yellow-mail.svg</td><td width="400">rrze-icons/status/flag-yellow-mail.svg</td><td width="200">flag-yellow-mail</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/flag-yellow.png" alt="rrze-icons/status/flag-yellow.svg"/></td><td width="400">:/status/flag-yellow.svg</td><td width="400">rrze-icons/status/flag-yellow.svg</td><td width="200">flag-yellow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/hourglass.png" alt="rrze-icons/status/hourglass.svg"/></td><td width="400">:/status/hourglass.svg</td><td width="400">rrze-icons/status/hourglass.svg</td><td width="200">hourglass</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/important.png" alt="rrze-icons/status/important.svg"/></td><td width="400">:/status/important.svg</td><td width="400">rrze-icons/status/important.svg</td><td width="200">important</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/maintenance-time.png" alt="rrze-icons/status/maintenance-time.svg"/></td><td width="400">:/status/maintenance-time.svg</td><td width="400">rrze-icons/status/maintenance-time.svg</td><td width="200">maintenance-time</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/male.png" alt="rrze-icons/status/male.svg"/></td><td width="400">:/status/male.svg</td><td width="400">rrze-icons/status/male.svg</td><td width="200">male</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/not-available.png" alt="rrze-icons/status/not-available.svg"/></td><td width="400">:/status/not-available.svg</td><td width="400">rrze-icons/status/not-available.svg</td><td width="200">not-available</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/not-known.png" alt="rrze-icons/status/not-known.svg"/></td><td width="400">:/status/not-known.svg</td><td width="400">rrze-icons/status/not-known.svg</td><td width="200">not-known</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/not-specified.png" alt="rrze-icons/status/not-specified.svg"/></td><td width="400">:/status/not-specified.svg</td><td width="400">rrze-icons/status/not-specified.svg</td><td width="200">not-specified</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/not-synchronized.png" alt="rrze-icons/status/not-synchronized.svg"/></td><td width="400">:/status/not-synchronized.svg</td><td width="400">rrze-icons/status/not-synchronized.svg</td><td width="200">not-synchronized</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/synchronized.png" alt="rrze-icons/status/synchronized.svg"/></td><td width="400">:/status/synchronized.svg</td><td width="400">rrze-icons/status/synchronized.svg</td><td width="200">synchronized</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/temporarily-not-available-clock.png" alt="rrze-icons/status/temporarily-not-available-clock.svg"/></td><td width="400">:/status/temporarily-not-available-clock.svg</td><td width="400">rrze-icons/status/temporarily-not-available-clock.svg</td><td width="200">temporarily-not-available-clock</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/temporarily-not-available.png" alt="rrze-icons/status/temporarily-not-available.svg"/></td><td width="400">:/status/temporarily-not-available.svg</td><td width="400">rrze-icons/status/temporarily-not-available.svg</td><td width="200">temporarily-not-available</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/true-orange.png" alt="rrze-icons/status/true-orange.svg"/></td><td width="400">:/status/true-orange.svg</td><td width="400">rrze-icons/status/true-orange.svg</td><td width="200">true-orange</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/true.png" alt="rrze-icons/status/true.svg"/></td><td width="400">:/status/true.svg</td><td width="400">rrze-icons/status/true.svg</td><td width="200">true</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/unlocked.png" alt="rrze-icons/status/unlocked.svg"/></td><td width="400">:/status/unlocked.svg</td><td width="400">rrze-icons/status/unlocked.svg</td><td width="200">unlocked</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="rrze-icons/status/warning.png" alt="rrze-icons/status/warning.svg"/></td><td width="400">:/status/warning.svg</td><td width="400">rrze-icons/status/warning.svg</td><td width="200">warning</td></tr>
+</table>
+<h2><a name="tango-icons/actions">:/actions/ (tango-icons/actions)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/actions/" Directory: "tango-icons/actions"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-down.png" alt="tango-icons/actions/go-down.svg"/></td><td width="400">:/actions/go-down.svg</td><td width="400">tango-icons/actions/go-down.svg</td><td width="200">go-down</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-home.png" alt="tango-icons/actions/go-home.svg"/></td><td width="400">:/actions/go-home.svg</td><td width="400">tango-icons/actions/go-home.svg</td><td width="200">go-home</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-first.png" alt="tango-icons/actions/go-first.svg"/></td><td width="400">:/actions/go-first.svg</td><td width="400">tango-icons/actions/go-first.svg</td><td width="200">go-first</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-find-replace.png" alt="tango-icons/actions/edit-find-replace.svg"/></td><td width="400">:/actions/edit-find-replace.svg</td><td width="400">tango-icons/actions/edit-find-replace.svg</td><td width="200">edit-find-replace</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-cut.png" alt="tango-icons/actions/edit-cut.svg"/></td><td width="400">:/actions/edit-cut.svg</td><td width="400">tango-icons/actions/edit-cut.svg</td><td width="200">edit-cut</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-indent-more.png" alt="tango-icons/actions/format-indent-more.svg"/></td><td width="400">:/actions/format-indent-more.svg</td><td width="400">tango-icons/actions/format-indent-more.svg</td><td width="200">format-indent-more</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-justify-left.png" alt="tango-icons/actions/format-justify-left.svg"/></td><td width="400">:/actions/format-justify-left.svg</td><td width="400">tango-icons/actions/format-justify-left.svg</td><td width="200">format-justify-left</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-print-preview.png" alt="tango-icons/actions/document-print-preview.svg"/></td><td width="400">:/actions/document-print-preview.svg</td><td width="400">tango-icons/actions/document-print-preview.svg</td><td width="200">document-print-preview</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-text-bold.png" alt="tango-icons/actions/format-text-bold.svg"/></td><td width="400">:/actions/format-text-bold.svg</td><td width="400">tango-icons/actions/format-text-bold.svg</td><td width="200">format-text-bold</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-open.png" alt="tango-icons/actions/document-open.svg"/></td><td width="400">:/actions/document-open.svg</td><td width="400">tango-icons/actions/document-open.svg</td><td width="200">document-open</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-bottom.png" alt="tango-icons/actions/go-bottom.svg"/></td><td width="400">:/actions/go-bottom.svg</td><td width="400">tango-icons/actions/go-bottom.svg</td><td width="200">go-bottom</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-last.png" alt="tango-icons/actions/go-last.svg"/></td><td width="400">:/actions/go-last.svg</td><td width="400">tango-icons/actions/go-last.svg</td><td width="200">go-last</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-seek-backward.png" alt="tango-icons/actions/media-seek-backward.svg"/></td><td width="400">:/actions/media-seek-backward.svg</td><td width="400">tango-icons/actions/media-seek-backward.svg</td><td width="200">media-seek-backward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-justify-right.png" alt="tango-icons/actions/format-justify-right.svg"/></td><td width="400">:/actions/format-justify-right.svg</td><td width="400">tango-icons/actions/format-justify-right.svg</td><td width="200">format-justify-right</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/window-new.png" alt="tango-icons/actions/window-new.svg"/></td><td width="400">:/actions/window-new.svg</td><td width="400">tango-icons/actions/window-new.svg</td><td width="200">window-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-save.png" alt="tango-icons/actions/document-save.svg"/></td><td width="400">:/actions/document-save.svg</td><td width="400">tango-icons/actions/document-save.svg</td><td width="200">document-save</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/folder-new.png" alt="tango-icons/actions/folder-new.svg"/></td><td width="400">:/actions/folder-new.svg</td><td width="400">tango-icons/actions/folder-new.svg</td><td width="200">folder-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-eject.png" alt="tango-icons/actions/media-eject.svg"/></td><td width="400">:/actions/media-eject.svg</td><td width="400">tango-icons/actions/media-eject.svg</td><td width="200">media-eject</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-up.png" alt="tango-icons/actions/go-up.svg"/></td><td width="400">:/actions/go-up.svg</td><td width="400">tango-icons/actions/go-up.svg</td><td width="200">go-up</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-new.png" alt="tango-icons/actions/document-new.svg"/></td><td width="400">:/actions/document-new.svg</td><td width="400">tango-icons/actions/document-new.svg</td><td width="200">document-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-print.png" alt="tango-icons/actions/document-print.svg"/></td><td width="400">:/actions/document-print.svg</td><td width="400">tango-icons/actions/document-print.svg</td><td width="200">document-print</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-playback-pause.png" alt="tango-icons/actions/media-playback-pause.svg"/></td><td width="400">:/actions/media-playback-pause.svg</td><td width="400">tango-icons/actions/media-playback-pause.svg</td><td width="200">media-playback-pause</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/address-book-new.png" alt="tango-icons/actions/address-book-new.svg"/></td><td width="400">:/actions/address-book-new.svg</td><td width="400">tango-icons/actions/address-book-new.svg</td><td width="200">address-book-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-delete.png" alt="tango-icons/actions/edit-delete.svg"/></td><td width="400">:/actions/edit-delete.svg</td><td width="400">tango-icons/actions/edit-delete.svg</td><td width="200">edit-delete</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/appointment-new.png" alt="tango-icons/actions/appointment-new.svg"/></td><td width="400">:/actions/appointment-new.svg</td><td width="400">tango-icons/actions/appointment-new.svg</td><td width="200">appointment-new</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/bookmark-new.png" alt="tango-icons/actions/bookmark-new.svg"/></td><td width="400">:/actions/bookmark-new.svg</td><td width="400">tango-icons/actions/bookmark-new.svg</td><td width="200">bookmark-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-message-new.png" alt="tango-icons/actions/mail-message-new.svg"/></td><td width="400">:/actions/mail-message-new.svg</td><td width="400">tango-icons/actions/mail-message-new.svg</td><td width="200">mail-message-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/system-log-out.png" alt="tango-icons/actions/system-log-out.svg"/></td><td width="400">:/actions/system-log-out.svg</td><td width="400">tango-icons/actions/system-log-out.svg</td><td width="200">system-log-out</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/system-search.png" alt="tango-icons/actions/system-search.svg"/></td><td width="400">:/actions/system-search.svg</td><td width="400">tango-icons/actions/system-search.svg</td><td width="200">system-search</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-justify-center.png" alt="tango-icons/actions/format-justify-center.svg"/></td><td width="400">:/actions/format-justify-center.svg</td><td width="400">tango-icons/actions/format-justify-center.svg</td><td width="200">format-justify-center</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-justify-fill.png" alt="tango-icons/actions/format-justify-fill.svg"/></td><td width="400">:/actions/format-justify-fill.svg</td><td width="400">tango-icons/actions/format-justify-fill.svg</td><td width="200">format-justify-fill</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-redo.png" alt="tango-icons/actions/edit-redo.svg"/></td><td width="400">:/actions/edit-redo.svg</td><td width="400">tango-icons/actions/edit-redo.svg</td><td width="200">edit-redo</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-jump.png" alt="tango-icons/actions/go-jump.svg"/></td><td width="400">:/actions/go-jump.svg</td><td width="400">tango-icons/actions/go-jump.svg</td><td width="200">go-jump</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-text-underline.png" alt="tango-icons/actions/format-text-underline.svg"/></td><td width="400">:/actions/format-text-underline.svg</td><td width="400">tango-icons/actions/format-text-underline.svg</td><td width="200">format-text-underline</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/list-add.png" alt="tango-icons/actions/list-add.svg"/></td><td width="400">:/actions/list-add.svg</td><td width="400">tango-icons/actions/list-add.svg</td><td width="200">list-add</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-mark-not-junk.png" alt="tango-icons/actions/mail-mark-not-junk.svg"/></td><td width="400">:/actions/mail-mark-not-junk.svg</td><td width="400">tango-icons/actions/mail-mark-not-junk.svg</td><td width="200">mail-mark-not-junk</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-undo.png" alt="tango-icons/actions/edit-undo.svg"/></td><td width="400">:/actions/edit-undo.svg</td><td width="400">tango-icons/actions/edit-undo.svg</td><td width="200">edit-undo</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/list-remove.png" alt="tango-icons/actions/list-remove.svg"/></td><td width="400">:/actions/list-remove.svg</td><td width="400">tango-icons/actions/list-remove.svg</td><td width="200">list-remove</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-copy.png" alt="tango-icons/actions/edit-copy.svg"/></td><td width="400">:/actions/edit-copy.svg</td><td width="400">tango-icons/actions/edit-copy.svg</td><td width="200">edit-copy</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/view-fullscreen.png" alt="tango-icons/actions/view-fullscreen.svg"/></td><td width="400">:/actions/view-fullscreen.svg</td><td width="400">tango-icons/actions/view-fullscreen.svg</td><td width="200">view-fullscreen</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-paste.png" alt="tango-icons/actions/edit-paste.svg"/></td><td width="400">:/actions/edit-paste.svg</td><td width="400">tango-icons/actions/edit-paste.svg</td><td width="200">edit-paste</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-save-as.png" alt="tango-icons/actions/document-save-as.svg"/></td><td width="400">:/actions/document-save-as.svg</td><td width="400">tango-icons/actions/document-save-as.svg</td><td width="200">document-save-as</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-send-receive.png" alt="tango-icons/actions/mail-send-receive.svg"/></td><td width="400">:/actions/mail-send-receive.svg</td><td width="400">tango-icons/actions/mail-send-receive.svg</td><td width="200">mail-send-receive</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/contact-new.png" alt="tango-icons/actions/contact-new.svg"/></td><td width="400">:/actions/contact-new.svg</td><td width="400">tango-icons/actions/contact-new.svg</td><td width="200">contact-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-new.png" alt="tango-icons/actions/document-new.svg"/></td><td width="400">:/actions/document-new.svg</td><td width="400">tango-icons/actions/document-new.svg</td><td width="200">document-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-open.png" alt="tango-icons/actions/document-open.svg"/></td><td width="400">:/actions/document-open.svg</td><td width="400">tango-icons/actions/document-open.svg</td><td width="200">document-open</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-print-preview.png" alt="tango-icons/actions/document-print-preview.svg"/></td><td width="400">:/actions/document-print-preview.svg</td><td width="400">tango-icons/actions/document-print-preview.svg</td><td width="200">document-print-preview</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-print.png" alt="tango-icons/actions/document-print.svg"/></td><td width="400">:/actions/document-print.svg</td><td width="400">tango-icons/actions/document-print.svg</td><td width="200">document-print</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-properties.png" alt="tango-icons/actions/document-properties.svg"/></td><td width="400">:/actions/document-properties.svg</td><td width="400">tango-icons/actions/document-properties.svg</td><td width="200">document-properties</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-save-as.png" alt="tango-icons/actions/document-save-as.svg"/></td><td width="400">:/actions/document-save-as.svg</td><td width="400">tango-icons/actions/document-save-as.svg</td><td width="200">document-save-as</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-save.png" alt="tango-icons/actions/document-save.svg"/></td><td width="400">:/actions/document-save.svg</td><td width="400">tango-icons/actions/document-save.svg</td><td width="200">document-save</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-clear.png" alt="tango-icons/actions/edit-clear.svg"/></td><td width="400">:/actions/edit-clear.svg</td><td width="400">tango-icons/actions/edit-clear.svg</td><td width="200">edit-clear</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-copy.png" alt="tango-icons/actions/edit-copy.svg"/></td><td width="400">:/actions/edit-copy.svg</td><td width="400">tango-icons/actions/edit-copy.svg</td><td width="200">edit-copy</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-cut.png" alt="tango-icons/actions/edit-cut.svg"/></td><td width="400">:/actions/edit-cut.svg</td><td width="400">tango-icons/actions/edit-cut.svg</td><td width="200">edit-cut</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-delete.png" alt="tango-icons/actions/edit-delete.svg"/></td><td width="400">:/actions/edit-delete.svg</td><td width="400">tango-icons/actions/edit-delete.svg</td><td width="200">edit-delete</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-find-replace.png" alt="tango-icons/actions/edit-find-replace.svg"/></td><td width="400">:/actions/edit-find-replace.svg</td><td width="400">tango-icons/actions/edit-find-replace.svg</td><td width="200">edit-find-replace</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-find.png" alt="tango-icons/actions/edit-find.svg"/></td><td width="400">:/actions/edit-find.svg</td><td width="400">tango-icons/actions/edit-find.svg</td><td width="200">edit-find</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/system-shutdown.png" alt="tango-icons/actions/system-shutdown.svg"/></td><td width="400">:/actions/system-shutdown.svg</td><td width="400">tango-icons/actions/system-shutdown.svg</td><td width="200">system-shutdown</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-skip-forward.png" alt="tango-icons/actions/media-skip-forward.svg"/></td><td width="400">:/actions/media-skip-forward.svg</td><td width="400">tango-icons/actions/media-skip-forward.svg</td><td width="200">media-skip-forward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-paste.png" alt="tango-icons/actions/edit-paste.svg"/></td><td width="400">:/actions/edit-paste.svg</td><td width="400">tango-icons/actions/edit-paste.svg</td><td width="200">edit-paste</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-redo.png" alt="tango-icons/actions/edit-redo.svg"/></td><td width="400">:/actions/edit-redo.svg</td><td width="400">tango-icons/actions/edit-redo.svg</td><td width="200">edit-redo</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-select-all.png" alt="tango-icons/actions/edit-select-all.svg"/></td><td width="400">:/actions/edit-select-all.svg</td><td width="400">tango-icons/actions/edit-select-all.svg</td><td width="200">edit-select-all</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/view-refresh.png" alt="tango-icons/actions/view-refresh.svg"/></td><td width="400">:/actions/view-refresh.svg</td><td width="400">tango-icons/actions/view-refresh.svg</td><td width="200">view-refresh</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/tab-new.png" alt="tango-icons/actions/tab-new.svg"/></td><td width="400">:/actions/tab-new.svg</td><td width="400">tango-icons/actions/tab-new.svg</td><td width="200">tab-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-skip-backward.png" alt="tango-icons/actions/media-skip-backward.svg"/></td><td width="400">:/actions/media-skip-backward.svg</td><td width="400">tango-icons/actions/media-skip-backward.svg</td><td width="200">media-skip-backward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-reply-all.png" alt="tango-icons/actions/mail-reply-all.svg"/></td><td width="400">:/actions/mail-reply-all.svg</td><td width="400">tango-icons/actions/mail-reply-all.svg</td><td width="200">mail-reply-all</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-playback-start.png" alt="tango-icons/actions/media-playback-start.svg"/></td><td width="400">:/actions/media-playback-start.svg</td><td width="400">tango-icons/actions/media-playback-start.svg</td><td width="200">media-playback-start</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-playback-stop.png" alt="tango-icons/actions/media-playback-stop.svg"/></td><td width="400">:/actions/media-playback-stop.svg</td><td width="400">tango-icons/actions/media-playback-stop.svg</td><td width="200">media-playback-stop</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-undo.png" alt="tango-icons/actions/edit-undo.svg"/></td><td width="400">:/actions/edit-undo.svg</td><td width="400">tango-icons/actions/edit-undo.svg</td><td width="200">edit-undo</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/folder-new.png" alt="tango-icons/actions/folder-new.svg"/></td><td width="400">:/actions/folder-new.svg</td><td width="400">tango-icons/actions/folder-new.svg</td><td width="200">folder-new</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-indent-less.png" alt="tango-icons/actions/format-indent-less.svg"/></td><td width="400">:/actions/format-indent-less.svg</td><td width="400">tango-icons/actions/format-indent-less.svg</td><td width="200">format-indent-less</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/appointment-new.png" alt="tango-icons/actions/appointment-new.svg"/></td><td width="400">:/actions/appointment-new.svg</td><td width="400">tango-icons/actions/appointment-new.svg</td><td width="200">appointment-new</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-previous.png" alt="tango-icons/actions/go-previous.svg"/></td><td width="400">:/actions/go-previous.svg</td><td width="400">tango-icons/actions/go-previous.svg</td><td width="200">go-previous</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-mark-junk.png" alt="tango-icons/actions/mail-mark-junk.svg"/></td><td width="400">:/actions/mail-mark-junk.svg</td><td width="400">tango-icons/actions/mail-mark-junk.svg</td><td width="200">mail-mark-junk</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/process-stop.png" alt="tango-icons/actions/process-stop.svg"/></td><td width="400">:/actions/process-stop.svg</td><td width="400">tango-icons/actions/process-stop.svg</td><td width="200">process-stop</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-indent-more.png" alt="tango-icons/actions/format-indent-more.svg"/></td><td width="400">:/actions/format-indent-more.svg</td><td width="400">tango-icons/actions/format-indent-more.svg</td><td width="200">format-indent-more</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-justify-center.png" alt="tango-icons/actions/format-justify-center.svg"/></td><td width="400">:/actions/format-justify-center.svg</td><td width="400">tango-icons/actions/format-justify-center.svg</td><td width="200">format-justify-center</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-justify-fill.png" alt="tango-icons/actions/format-justify-fill.svg"/></td><td width="400">:/actions/format-justify-fill.svg</td><td width="400">tango-icons/actions/format-justify-fill.svg</td><td width="200">format-justify-fill</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-justify-left.png" alt="tango-icons/actions/format-justify-left.svg"/></td><td width="400">:/actions/format-justify-left.svg</td><td width="400">tango-icons/actions/format-justify-left.svg</td><td width="200">format-justify-left</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-justify-right.png" alt="tango-icons/actions/format-justify-right.svg"/></td><td width="400">:/actions/format-justify-right.svg</td><td width="400">tango-icons/actions/format-justify-right.svg</td><td width="200">format-justify-right</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-text-bold.png" alt="tango-icons/actions/format-text-bold.svg"/></td><td width="400">:/actions/format-text-bold.svg</td><td width="400">tango-icons/actions/format-text-bold.svg</td><td width="200">format-text-bold</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-text-italic.png" alt="tango-icons/actions/format-text-italic.svg"/></td><td width="400">:/actions/format-text-italic.svg</td><td width="400">tango-icons/actions/format-text-italic.svg</td><td width="200">format-text-italic</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-reply-sender.png" alt="tango-icons/actions/mail-reply-sender.svg"/></td><td width="400">:/actions/mail-reply-sender.svg</td><td width="400">tango-icons/actions/mail-reply-sender.svg</td><td width="200">mail-reply-sender</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-text-strikethrough.png" alt="tango-icons/actions/format-text-strikethrough.svg"/></td><td width="400">:/actions/format-text-strikethrough.svg</td><td width="400">tango-icons/actions/format-text-strikethrough.svg</td><td width="200">format-text-strikethrough</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/format-text-underline.png" alt="tango-icons/actions/format-text-underline.svg"/></td><td width="400">:/actions/format-text-underline.svg</td><td width="400">tango-icons/actions/format-text-underline.svg</td><td width="200">format-text-underline</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-bottom.png" alt="tango-icons/actions/go-bottom.svg"/></td><td width="400">:/actions/go-bottom.svg</td><td width="400">tango-icons/actions/go-bottom.svg</td><td width="200">go-bottom</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-down.png" alt="tango-icons/actions/go-down.svg"/></td><td width="400">:/actions/go-down.svg</td><td width="400">tango-icons/actions/go-down.svg</td><td width="200">go-down</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-first.png" alt="tango-icons/actions/go-first.svg"/></td><td width="400">:/actions/go-first.svg</td><td width="400">tango-icons/actions/go-first.svg</td><td width="200">go-first</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-home.png" alt="tango-icons/actions/go-home.svg"/></td><td width="400">:/actions/go-home.svg</td><td width="400">tango-icons/actions/go-home.svg</td><td width="200">go-home</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-jump.png" alt="tango-icons/actions/go-jump.svg"/></td><td width="400">:/actions/go-jump.svg</td><td width="400">tango-icons/actions/go-jump.svg</td><td width="200">go-jump</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-last.png" alt="tango-icons/actions/go-last.svg"/></td><td width="400">:/actions/go-last.svg</td><td width="400">tango-icons/actions/go-last.svg</td><td width="200">go-last</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-next.png" alt="tango-icons/actions/go-next.svg"/></td><td width="400">:/actions/go-next.svg</td><td width="400">tango-icons/actions/go-next.svg</td><td width="200">go-next</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-forward.png" alt="tango-icons/actions/mail-forward.svg"/></td><td width="400">:/actions/mail-forward.svg</td><td width="400">tango-icons/actions/mail-forward.svg</td><td width="200">mail-forward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-record.png" alt="tango-icons/actions/media-record.svg"/></td><td width="400">:/actions/media-record.svg</td><td width="400">tango-icons/actions/media-record.svg</td><td width="200">media-record</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-previous.png" alt="tango-icons/actions/go-previous.svg"/></td><td width="400">:/actions/go-previous.svg</td><td width="400">tango-icons/actions/go-previous.svg</td><td width="200">go-previous</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-top.png" alt="tango-icons/actions/go-top.svg"/></td><td width="400">:/actions/go-top.svg</td><td width="400">tango-icons/actions/go-top.svg</td><td width="200">go-top</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-seek-forward.png" alt="tango-icons/actions/media-seek-forward.svg"/></td><td width="400">:/actions/media-seek-forward.svg</td><td width="400">tango-icons/actions/media-seek-forward.svg</td><td width="200">media-seek-forward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/document-properties.png" alt="tango-icons/actions/document-properties.svg"/></td><td width="400">:/actions/document-properties.svg</td><td width="400">tango-icons/actions/document-properties.svg</td><td width="200">document-properties</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/system-lock-screen.png" alt="tango-icons/actions/system-lock-screen.svg"/></td><td width="400">:/actions/system-lock-screen.svg</td><td width="400">tango-icons/actions/system-lock-screen.svg</td><td width="200">system-lock-screen</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/edit-clear.png" alt="tango-icons/actions/edit-clear.svg"/></td><td width="400">:/actions/edit-clear.svg</td><td width="400">tango-icons/actions/edit-clear.svg</td><td width="200">edit-clear</td></tr>
-</table>
-<h2><a name="tango-icons/mimetypes">:/mimetypes/ (tango-icons/mimetypes)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/mimetypes/" Directory: "tango-icons/mimetypes"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/text-x-script.png" alt="tango-icons/mimetypes/text-x-script.svg"/></td><td width="400">:/mimetypes/text-x-script.svg</td><td width="400">tango-icons/mimetypes/text-x-script.svg</td><td width="200">text-x-script</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/video-x-generic.png" alt="tango-icons/mimetypes/video-x-generic.svg"/></td><td width="400">:/mimetypes/video-x-generic.svg</td><td width="400">tango-icons/mimetypes/video-x-generic.svg</td><td width="200">video-x-generic</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-spreadsheet-template.png" alt="tango-icons/mimetypes/x-office-spreadsheet-template.svg"/></td><td width="400">:/mimetypes/x-office-spreadsheet-template.svg</td><td width="400">tango-icons/mimetypes/x-office-spreadsheet-template.svg</td><td width="200">x-office-spreadsheet-template</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/text-html.png" alt="tango-icons/mimetypes/text-html.svg"/></td><td width="400">:/mimetypes/text-html.svg</td><td width="400">tango-icons/mimetypes/text-html.svg</td><td width="200">text-html</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-presentation.png" alt="tango-icons/mimetypes/x-office-presentation.svg"/></td><td width="400">:/mimetypes/x-office-presentation.svg</td><td width="400">tango-icons/mimetypes/x-office-presentation.svg</td><td width="200">x-office-presentation</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/package-x-generic.png" alt="tango-icons/mimetypes/package-x-generic.svg"/></td><td width="400">:/mimetypes/package-x-generic.svg</td><td width="400">tango-icons/mimetypes/package-x-generic.svg</td><td width="200">package-x-generic</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/application-x-executable.png" alt="tango-icons/mimetypes/application-x-executable.svg"/></td><td width="400">:/mimetypes/application-x-executable.svg</td><td width="400">tango-icons/mimetypes/application-x-executable.svg</td><td width="200">application-x-executable</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-drawing.png" alt="tango-icons/mimetypes/x-office-drawing.svg"/></td><td width="400">:/mimetypes/x-office-drawing.svg</td><td width="400">tango-icons/mimetypes/x-office-drawing.svg</td><td width="200">x-office-drawing</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/audio-x-generic.png" alt="tango-icons/mimetypes/audio-x-generic.svg"/></td><td width="400">:/mimetypes/audio-x-generic.svg</td><td width="400">tango-icons/mimetypes/audio-x-generic.svg</td><td width="200">audio-x-generic</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/application-certificate.png" alt="tango-icons/mimetypes/application-certificate.svg"/></td><td width="400">:/mimetypes/application-certificate.svg</td><td width="400">tango-icons/mimetypes/application-certificate.svg</td><td width="200">application-certificate</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/image-x-generic.png" alt="tango-icons/mimetypes/image-x-generic.svg"/></td><td width="400">:/mimetypes/image-x-generic.svg</td><td width="400">tango-icons/mimetypes/image-x-generic.svg</td><td width="200">image-x-generic</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-presentation-template.png" alt="tango-icons/mimetypes/x-office-presentation-template.svg"/></td><td width="400">:/mimetypes/x-office-presentation-template.svg</td><td width="400">tango-icons/mimetypes/x-office-presentation-template.svg</td><td width="200">x-office-presentation-template</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-calendar.png" alt="tango-icons/mimetypes/x-office-calendar.svg"/></td><td width="400">:/mimetypes/x-office-calendar.svg</td><td width="400">tango-icons/mimetypes/x-office-calendar.svg</td><td width="200">x-office-calendar</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-address-book.png" alt="tango-icons/mimetypes/x-office-address-book.svg"/></td><td width="400">:/mimetypes/x-office-address-book.svg</td><td width="400">tango-icons/mimetypes/x-office-address-book.svg</td><td width="200">x-office-address-book</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/text-x-generic.png" alt="tango-icons/mimetypes/text-x-generic.svg"/></td><td width="400">:/mimetypes/text-x-generic.svg</td><td width="400">tango-icons/mimetypes/text-x-generic.svg</td><td width="200">text-x-generic</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/font-x-generic.png" alt="tango-icons/mimetypes/font-x-generic.svg"/></td><td width="400">:/mimetypes/font-x-generic.svg</td><td width="400">tango-icons/mimetypes/font-x-generic.svg</td><td width="200">font-x-generic</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-spreadsheet.png" alt="tango-icons/mimetypes/x-office-spreadsheet.svg"/></td><td width="400">:/mimetypes/x-office-spreadsheet.svg</td><td width="400">tango-icons/mimetypes/x-office-spreadsheet.svg</td><td width="200">x-office-spreadsheet</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/text-x-generic-template.png" alt="tango-icons/mimetypes/text-x-generic-template.svg"/></td><td width="400">:/mimetypes/text-x-generic-template.svg</td><td width="400">tango-icons/mimetypes/text-x-generic-template.svg</td><td width="200">text-x-generic-template</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-document-template.png" alt="tango-icons/mimetypes/x-office-document-template.svg"/></td><td width="400">:/mimetypes/x-office-document-template.svg</td><td width="400">tango-icons/mimetypes/x-office-document-template.svg</td><td width="200">x-office-document-template</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-document.png" alt="tango-icons/mimetypes/x-office-document.svg"/></td><td width="400">:/mimetypes/x-office-document.svg</td><td width="400">tango-icons/mimetypes/x-office-document.svg</td><td width="200">x-office-document</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-drawing-template.png" alt="tango-icons/mimetypes/x-office-drawing-template.svg"/></td><td width="400">:/mimetypes/x-office-drawing-template.svg</td><td width="400">tango-icons/mimetypes/x-office-drawing-template.svg</td><td width="200">x-office-drawing-template</td></tr>
-</table>
-<h2><a name="tango-icons/emblems">:/emblems/ (tango-icons/emblems)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/emblems/" Directory: "tango-icons/emblems"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-unreadable.png" alt="tango-icons/emblems/emblem-unreadable.svg"/></td><td width="400">:/emblems/emblem-unreadable.svg</td><td width="400">tango-icons/emblems/emblem-unreadable.svg</td><td width="200">emblem-unreadable</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-important.png" alt="tango-icons/emblems/emblem-important.svg"/></td><td width="400">:/emblems/emblem-important.svg</td><td width="400">tango-icons/emblems/emblem-important.svg</td><td width="200">emblem-important</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-favorite.png" alt="tango-icons/emblems/emblem-favorite.svg"/></td><td width="400">:/emblems/emblem-favorite.svg</td><td width="400">tango-icons/emblems/emblem-favorite.svg</td><td width="200">emblem-favorite</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-readonly.png" alt="tango-icons/emblems/emblem-readonly.svg"/></td><td width="400">:/emblems/emblem-readonly.svg</td><td width="400">tango-icons/emblems/emblem-readonly.svg</td><td width="200">emblem-readonly</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-symbolic-link.png" alt="tango-icons/emblems/emblem-symbolic-link.svg"/></td><td width="400">:/emblems/emblem-symbolic-link.svg</td><td width="400">tango-icons/emblems/emblem-symbolic-link.svg</td><td width="200">emblem-symbolic-link</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-photos.png" alt="tango-icons/emblems/emblem-photos.svg"/></td><td width="400">:/emblems/emblem-photos.svg</td><td width="400">tango-icons/emblems/emblem-photos.svg</td><td width="200">emblem-photos</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-system.png" alt="tango-icons/emblems/emblem-system.svg"/></td><td width="400">:/emblems/emblem-system.svg</td><td width="400">tango-icons/emblems/emblem-system.svg</td><td width="200">emblem-system</td></tr>
-</table>
-<h2><a name="tango-icons/devices">:/devices/ (tango-icons/devices)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/devices/" Directory: "tango-icons/devices"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/multimedia-player.png" alt="tango-icons/devices/multimedia-player.svg"/></td><td width="400">:/devices/multimedia-player.svg</td><td width="400">tango-icons/devices/multimedia-player.svg</td><td width="200">multimedia-player</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/drive-harddisk.png" alt="tango-icons/devices/drive-harddisk.svg"/></td><td width="400">:/devices/drive-harddisk.svg</td><td width="400">tango-icons/devices/drive-harddisk.svg</td><td width="200">drive-harddisk</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/camera-video.png" alt="tango-icons/devices/camera-video.svg"/></td><td width="400">:/devices/camera-video.svg</td><td width="400">tango-icons/devices/camera-video.svg</td><td width="200">camera-video</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/network-wireless.png" alt="tango-icons/devices/network-wireless.svg"/></td><td width="400">:/devices/network-wireless.svg</td><td width="400">tango-icons/devices/network-wireless.svg</td><td width="200">network-wireless</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/audio-input-microphone.png" alt="tango-icons/devices/audio-input-microphone.svg"/></td><td width="400">:/devices/audio-input-microphone.svg</td><td width="400">tango-icons/devices/audio-input-microphone.svg</td><td width="200">audio-input-microphone</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/media-floppy.png" alt="tango-icons/devices/media-floppy.svg"/></td><td width="400">:/devices/media-floppy.svg</td><td width="400">tango-icons/devices/media-floppy.svg</td><td width="200">media-floppy</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/computer.png" alt="tango-icons/devices/computer.svg"/></td><td width="400">:/devices/computer.svg</td><td width="400">tango-icons/devices/computer.svg</td><td width="200">computer</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/video-display.png" alt="tango-icons/devices/video-display.svg"/></td><td width="400">:/devices/video-display.svg</td><td width="400">tango-icons/devices/video-display.svg</td><td width="200">video-display</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/input-keyboard.png" alt="tango-icons/devices/input-keyboard.svg"/></td><td width="400">:/devices/input-keyboard.svg</td><td width="400">tango-icons/devices/input-keyboard.svg</td><td width="200">input-keyboard</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/printer.png" alt="tango-icons/devices/printer.svg"/></td><td width="400">:/devices/printer.svg</td><td width="400">tango-icons/devices/printer.svg</td><td width="200">printer</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/camera-photo.png" alt="tango-icons/devices/camera-photo.svg"/></td><td width="400">:/devices/camera-photo.svg</td><td width="400">tango-icons/devices/camera-photo.svg</td><td width="200">camera-photo</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/input-gaming.png" alt="tango-icons/devices/input-gaming.svg"/></td><td width="400">:/devices/input-gaming.svg</td><td width="400">tango-icons/devices/input-gaming.svg</td><td width="200">input-gaming</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/input-mouse.png" alt="tango-icons/devices/input-mouse.svg"/></td><td width="400">:/devices/input-mouse.svg</td><td width="400">tango-icons/devices/input-mouse.svg</td><td width="200">input-mouse</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/network-wired.png" alt="tango-icons/devices/network-wired.svg"/></td><td width="400">:/devices/network-wired.svg</td><td width="400">tango-icons/devices/network-wired.svg</td><td width="200">network-wired</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/audio-card.png" alt="tango-icons/devices/audio-card.svg"/></td><td width="400">:/devices/audio-card.svg</td><td width="400">tango-icons/devices/audio-card.svg</td><td width="200">audio-card</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/media-optical.png" alt="tango-icons/devices/media-optical.svg"/></td><td width="400">:/devices/media-optical.svg</td><td width="400">tango-icons/devices/media-optical.svg</td><td width="200">media-optical</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/drive-removable-media.png" alt="tango-icons/devices/drive-removable-media.svg"/></td><td width="400">:/devices/drive-removable-media.svg</td><td width="400">tango-icons/devices/drive-removable-media.svg</td><td width="200">drive-removable-media</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/drive-optical.png" alt="tango-icons/devices/drive-optical.svg"/></td><td width="400">:/devices/drive-optical.svg</td><td width="400">tango-icons/devices/drive-optical.svg</td><td width="200">drive-optical</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/media-flash.png" alt="tango-icons/devices/media-flash.svg"/></td><td width="400">:/devices/media-flash.svg</td><td width="400">tango-icons/devices/media-flash.svg</td><td width="200">media-flash</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/battery.png" alt="tango-icons/devices/battery.svg"/></td><td width="400">:/devices/battery.svg</td><td width="400">tango-icons/devices/battery.svg</td><td width="200">battery</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/go-up.png" alt="tango-icons/actions/go-up.svg"/></td><td width="400">:/actions/go-up.svg</td><td width="400">tango-icons/actions/go-up.svg</td><td width="200">go-up</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/list-add.png" alt="tango-icons/actions/list-add.svg"/></td><td width="400">:/actions/list-add.svg</td><td width="400">tango-icons/actions/list-add.svg</td><td width="200">list-add</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/list-remove.png" alt="tango-icons/actions/list-remove.svg"/></td><td width="400">:/actions/list-remove.svg</td><td width="400">tango-icons/actions/list-remove.svg</td><td width="200">list-remove</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-forward.png" alt="tango-icons/actions/mail-forward.svg"/></td><td width="400">:/actions/mail-forward.svg</td><td width="400">tango-icons/actions/mail-forward.svg</td><td width="200">mail-forward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-mark-junk.png" alt="tango-icons/actions/mail-mark-junk.svg"/></td><td width="400">:/actions/mail-mark-junk.svg</td><td width="400">tango-icons/actions/mail-mark-junk.svg</td><td width="200">mail-mark-junk</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-mark-not-junk.png" alt="tango-icons/actions/mail-mark-not-junk.svg"/></td><td width="400">:/actions/mail-mark-not-junk.svg</td><td width="400">tango-icons/actions/mail-mark-not-junk.svg</td><td width="200">mail-mark-not-junk</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-message-new.png" alt="tango-icons/actions/mail-message-new.svg"/></td><td width="400">:/actions/mail-message-new.svg</td><td width="400">tango-icons/actions/mail-message-new.svg</td><td width="200">mail-message-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-reply-all.png" alt="tango-icons/actions/mail-reply-all.svg"/></td><td width="400">:/actions/mail-reply-all.svg</td><td width="400">tango-icons/actions/mail-reply-all.svg</td><td width="200">mail-reply-all</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-reply-sender.png" alt="tango-icons/actions/mail-reply-sender.svg"/></td><td width="400">:/actions/mail-reply-sender.svg</td><td width="400">tango-icons/actions/mail-reply-sender.svg</td><td width="200">mail-reply-sender</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/mail-send-receive.png" alt="tango-icons/actions/mail-send-receive.svg"/></td><td width="400">:/actions/mail-send-receive.svg</td><td width="400">tango-icons/actions/mail-send-receive.svg</td><td width="200">mail-send-receive</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-eject.png" alt="tango-icons/actions/media-eject.svg"/></td><td width="400">:/actions/media-eject.svg</td><td width="400">tango-icons/actions/media-eject.svg</td><td width="200">media-eject</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/window-new.png" alt="tango-icons/actions/window-new.svg"/></td><td width="400">:/actions/window-new.svg</td><td width="400">tango-icons/actions/window-new.svg</td><td width="200">window-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-playback-pause.png" alt="tango-icons/actions/media-playback-pause.svg"/></td><td width="400">:/actions/media-playback-pause.svg</td><td width="400">tango-icons/actions/media-playback-pause.svg</td><td width="200">media-playback-pause</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-playback-start.png" alt="tango-icons/actions/media-playback-start.svg"/></td><td width="400">:/actions/media-playback-start.svg</td><td width="400">tango-icons/actions/media-playback-start.svg</td><td width="200">media-playback-start</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-playback-stop.png" alt="tango-icons/actions/media-playback-stop.svg"/></td><td width="400">:/actions/media-playback-stop.svg</td><td width="400">tango-icons/actions/media-playback-stop.svg</td><td width="200">media-playback-stop</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-record.png" alt="tango-icons/actions/media-record.svg"/></td><td width="400">:/actions/media-record.svg</td><td width="400">tango-icons/actions/media-record.svg</td><td width="200">media-record</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-seek-backward.png" alt="tango-icons/actions/media-seek-backward.svg"/></td><td width="400">:/actions/media-seek-backward.svg</td><td width="400">tango-icons/actions/media-seek-backward.svg</td><td width="200">media-seek-backward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-seek-forward.png" alt="tango-icons/actions/media-seek-forward.svg"/></td><td width="400">:/actions/media-seek-forward.svg</td><td width="400">tango-icons/actions/media-seek-forward.svg</td><td width="200">media-seek-forward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-skip-backward.png" alt="tango-icons/actions/media-skip-backward.svg"/></td><td width="400">:/actions/media-skip-backward.svg</td><td width="400">tango-icons/actions/media-skip-backward.svg</td><td width="200">media-skip-backward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/media-skip-forward.png" alt="tango-icons/actions/media-skip-forward.svg"/></td><td width="400">:/actions/media-skip-forward.svg</td><td width="400">tango-icons/actions/media-skip-forward.svg</td><td width="200">media-skip-forward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/process-stop.png" alt="tango-icons/actions/process-stop.svg"/></td><td width="400">:/actions/process-stop.svg</td><td width="400">tango-icons/actions/process-stop.svg</td><td width="200">process-stop</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/system-lock-screen.png" alt="tango-icons/actions/system-lock-screen.svg"/></td><td width="400">:/actions/system-lock-screen.svg</td><td width="400">tango-icons/actions/system-lock-screen.svg</td><td width="200">system-lock-screen</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/system-log-out.png" alt="tango-icons/actions/system-log-out.svg"/></td><td width="400">:/actions/system-log-out.svg</td><td width="400">tango-icons/actions/system-log-out.svg</td><td width="200">system-log-out</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/system-search.png" alt="tango-icons/actions/system-search.svg"/></td><td width="400">:/actions/system-search.svg</td><td width="400">tango-icons/actions/system-search.svg</td><td width="200">system-search</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/system-shutdown.png" alt="tango-icons/actions/system-shutdown.svg"/></td><td width="400">:/actions/system-shutdown.svg</td><td width="400">tango-icons/actions/system-shutdown.svg</td><td width="200">system-shutdown</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/tab-new.png" alt="tango-icons/actions/tab-new.svg"/></td><td width="400">:/actions/tab-new.svg</td><td width="400">tango-icons/actions/tab-new.svg</td><td width="200">tab-new</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/view-fullscreen.png" alt="tango-icons/actions/view-fullscreen.svg"/></td><td width="400">:/actions/view-fullscreen.svg</td><td width="400">tango-icons/actions/view-fullscreen.svg</td><td width="200">view-fullscreen</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/actions/view-refresh.png" alt="tango-icons/actions/view-refresh.svg"/></td><td width="400">:/actions/view-refresh.svg</td><td width="400">tango-icons/actions/view-refresh.svg</td><td width="200">view-refresh</td></tr>
 </table>
 <h2><a name="tango-icons/apps">:/apps/ (tango-icons/apps)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/apps/" Directory: "tango-icons/apps"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-system-windows.png" alt="tango-icons/apps/preferences-system-windows.svg"/></td><td width="400">:/apps/preferences-system-windows.svg</td><td width="400">tango-icons/apps/preferences-system-windows.svg</td><td width="200">preferences-system-windows</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-theme.png" alt="tango-icons/apps/preferences-desktop-theme.svg"/></td><td width="400">:/apps/preferences-desktop-theme.svg</td><td width="400">tango-icons/apps/preferences-desktop-theme.svg</td><td width="200">preferences-desktop-theme</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/internet-group-chat.png" alt="tango-icons/apps/internet-group-chat.svg"/></td><td width="400">:/apps/internet-group-chat.svg</td><td width="400">tango-icons/apps/internet-group-chat.svg</td><td width="200">internet-group-chat</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-locale.png" alt="tango-icons/apps/preferences-desktop-locale.svg"/></td><td width="400">:/apps/preferences-desktop-locale.svg</td><td width="400">tango-icons/apps/preferences-desktop-locale.svg</td><td width="200">preferences-desktop-locale</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-remote-desktop.png" alt="tango-icons/apps/preferences-desktop-remote-desktop.svg"/></td><td width="400">:/apps/preferences-desktop-remote-desktop.svg</td><td width="400">tango-icons/apps/preferences-desktop-remote-desktop.svg</td><td width="200">preferences-desktop-remote-desktop</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/accessories-calculator.png" alt="tango-icons/apps/accessories-calculator.svg"/></td><td width="400">:/apps/accessories-calculator.svg</td><td width="400">tango-icons/apps/accessories-calculator.svg</td><td width="200">accessories-calculator</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/accessories-character-map.png" alt="tango-icons/apps/accessories-character-map.svg"/></td><td width="400">:/apps/accessories-character-map.svg</td><td width="400">tango-icons/apps/accessories-character-map.svg</td><td width="200">accessories-character-map</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/accessories-text-editor.png" alt="tango-icons/apps/accessories-text-editor.svg"/></td><td width="400">:/apps/accessories-text-editor.svg</td><td width="400">tango-icons/apps/accessories-text-editor.svg</td><td width="200">accessories-text-editor</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/help-browser.png" alt="tango-icons/apps/help-browser.svg"/></td><td width="400">:/apps/help-browser.svg</td><td width="400">tango-icons/apps/help-browser.svg</td><td width="200">help-browser</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-system-network-proxy.png" alt="tango-icons/apps/preferences-system-network-proxy.svg"/></td><td width="400">:/apps/preferences-system-network-proxy.svg</td><td width="400">tango-icons/apps/preferences-system-network-proxy.svg</td><td width="200">preferences-system-network-proxy</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/internet-group-chat.png" alt="tango-icons/apps/internet-group-chat.svg"/></td><td width="400">:/apps/internet-group-chat.svg</td><td width="400">tango-icons/apps/internet-group-chat.svg</td><td width="200">internet-group-chat</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/internet-mail.png" alt="tango-icons/apps/internet-mail.svg"/></td><td width="400">:/apps/internet-mail.svg</td><td width="400">tango-icons/apps/internet-mail.svg</td><td width="200">internet-mail</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/internet-news-reader.png" alt="tango-icons/apps/internet-news-reader.svg"/></td><td width="400">:/apps/internet-news-reader.svg</td><td width="400">tango-icons/apps/internet-news-reader.svg</td><td width="200">internet-news-reader</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/internet-web-browser.png" alt="tango-icons/apps/internet-web-browser.svg"/></td><td width="400">:/apps/internet-web-browser.svg</td><td width="400">tango-icons/apps/internet-web-browser.svg</td><td width="200">internet-web-browser</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/office-calendar.png" alt="tango-icons/apps/office-calendar.svg"/></td><td width="400">:/apps/office-calendar.svg</td><td width="400">tango-icons/apps/office-calendar.svg</td><td width="200">office-calendar</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-accessibility.png" alt="tango-icons/apps/preferences-desktop-accessibility.svg"/></td><td width="400">:/apps/preferences-desktop-accessibility.svg</td><td width="400">tango-icons/apps/preferences-desktop-accessibility.svg</td><td width="200">preferences-desktop-accessibility</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-font.png" alt="tango-icons/apps/preferences-desktop-font.svg"/></td><td width="400">:/apps/preferences-desktop-font.svg</td><td width="400">tango-icons/apps/preferences-desktop-font.svg</td><td width="200">preferences-desktop-font</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/system-users.png" alt="tango-icons/apps/system-users.svg"/></td><td width="400">:/apps/system-users.svg</td><td width="400">tango-icons/apps/system-users.svg</td><td width="200">system-users</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/internet-mail.png" alt="tango-icons/apps/internet-mail.svg"/></td><td width="400">:/apps/internet-mail.svg</td><td width="400">tango-icons/apps/internet-mail.svg</td><td width="200">internet-mail</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/system-file-manager.png" alt="tango-icons/apps/system-file-manager.svg"/></td><td width="400">:/apps/system-file-manager.svg</td><td width="400">tango-icons/apps/system-file-manager.svg</td><td width="200">system-file-manager</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/system-installer.png" alt="tango-icons/apps/system-installer.svg"/></td><td width="400">:/apps/system-installer.svg</td><td width="400">tango-icons/apps/system-installer.svg</td><td width="200">system-installer</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/system-software-update.png" alt="tango-icons/apps/system-software-update.svg"/></td><td width="400">:/apps/system-software-update.svg</td><td width="400">tango-icons/apps/system-software-update.svg</td><td width="200">system-software-update</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-assistive-technology.png" alt="tango-icons/apps/preferences-desktop-assistive-technology.svg"/></td><td width="400">:/apps/preferences-desktop-assistive-technology.svg</td><td width="400">tango-icons/apps/preferences-desktop-assistive-technology.svg</td><td width="200">preferences-desktop-assistive-technology</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-font.png" alt="tango-icons/apps/preferences-desktop-font.svg"/></td><td width="400">:/apps/preferences-desktop-font.svg</td><td width="400">tango-icons/apps/preferences-desktop-font.svg</td><td width="200">preferences-desktop-font</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-keyboard-shortcuts.png" alt="tango-icons/apps/preferences-desktop-keyboard-shortcuts.svg"/></td><td width="400">:/apps/preferences-desktop-keyboard-shortcuts.svg</td><td width="400">tango-icons/apps/preferences-desktop-keyboard-shortcuts.svg</td><td width="200">preferences-desktop-keyboard-shortcuts</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-locale.png" alt="tango-icons/apps/preferences-desktop-locale.svg"/></td><td width="400">:/apps/preferences-desktop-locale.svg</td><td width="400">tango-icons/apps/preferences-desktop-locale.svg</td><td width="200">preferences-desktop-locale</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-multimedia.png" alt="tango-icons/apps/preferences-desktop-multimedia.svg"/></td><td width="400">:/apps/preferences-desktop-multimedia.svg</td><td width="400">tango-icons/apps/preferences-desktop-multimedia.svg</td><td width="200">preferences-desktop-multimedia</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-remote-desktop.png" alt="tango-icons/apps/preferences-desktop-remote-desktop.svg"/></td><td width="400">:/apps/preferences-desktop-remote-desktop.svg</td><td width="400">tango-icons/apps/preferences-desktop-remote-desktop.svg</td><td width="200">preferences-desktop-remote-desktop</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-screensaver.png" alt="tango-icons/apps/preferences-desktop-screensaver.svg"/></td><td width="400">:/apps/preferences-desktop-screensaver.svg</td><td width="400">tango-icons/apps/preferences-desktop-screensaver.svg</td><td width="200">preferences-desktop-screensaver</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-theme.png" alt="tango-icons/apps/preferences-desktop-theme.svg"/></td><td width="400">:/apps/preferences-desktop-theme.svg</td><td width="400">tango-icons/apps/preferences-desktop-theme.svg</td><td width="200">preferences-desktop-theme</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-wallpaper.png" alt="tango-icons/apps/preferences-desktop-wallpaper.svg"/></td><td width="400">:/apps/preferences-desktop-wallpaper.svg</td><td width="400">tango-icons/apps/preferences-desktop-wallpaper.svg</td><td width="200">preferences-desktop-wallpaper</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/office-calendar.png" alt="tango-icons/apps/office-calendar.svg"/></td><td width="400">:/apps/office-calendar.svg</td><td width="400">tango-icons/apps/office-calendar.svg</td><td width="200">office-calendar</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-system-network-proxy.png" alt="tango-icons/apps/preferences-system-network-proxy.svg"/></td><td width="400">:/apps/preferences-system-network-proxy.svg</td><td width="400">tango-icons/apps/preferences-system-network-proxy.svg</td><td width="200">preferences-system-network-proxy</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-system-session.png" alt="tango-icons/apps/preferences-system-session.svg"/></td><td width="400">:/apps/preferences-system-session.svg</td><td width="400">tango-icons/apps/preferences-system-session.svg</td><td width="200">preferences-system-session</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-multimedia.png" alt="tango-icons/apps/preferences-desktop-multimedia.svg"/></td><td width="400">:/apps/preferences-desktop-multimedia.svg</td><td width="400">tango-icons/apps/preferences-desktop-multimedia.svg</td><td width="200">preferences-desktop-multimedia</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-desktop-keyboard-shortcuts.png" alt="tango-icons/apps/preferences-desktop-keyboard-shortcuts.svg"/></td><td width="400">:/apps/preferences-desktop-keyboard-shortcuts.svg</td><td width="400">tango-icons/apps/preferences-desktop-keyboard-shortcuts.svg</td><td width="200">preferences-desktop-keyboard-shortcuts</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/accessories-calculator.png" alt="tango-icons/apps/accessories-calculator.svg"/></td><td width="400">:/apps/accessories-calculator.svg</td><td width="400">tango-icons/apps/accessories-calculator.svg</td><td width="200">accessories-calculator</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/utilities-terminal.png" alt="tango-icons/apps/utilities-terminal.svg"/></td><td width="400">:/apps/utilities-terminal.svg</td><td width="400">tango-icons/apps/utilities-terminal.svg</td><td width="200">utilities-terminal</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/preferences-system-windows.png" alt="tango-icons/apps/preferences-system-windows.svg"/></td><td width="400">:/apps/preferences-system-windows.svg</td><td width="400">tango-icons/apps/preferences-system-windows.svg</td><td width="200">preferences-system-windows</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/system-file-manager.png" alt="tango-icons/apps/system-file-manager.svg"/></td><td width="400">:/apps/system-file-manager.svg</td><td width="400">tango-icons/apps/system-file-manager.svg</td><td width="200">system-file-manager</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/system-installer.png" alt="tango-icons/apps/system-installer.svg"/></td><td width="400">:/apps/system-installer.svg</td><td width="400">tango-icons/apps/system-installer.svg</td><td width="200">system-installer</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/system-software-update.png" alt="tango-icons/apps/system-software-update.svg"/></td><td width="400">:/apps/system-software-update.svg</td><td width="400">tango-icons/apps/system-software-update.svg</td><td width="200">system-software-update</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/system-users.png" alt="tango-icons/apps/system-users.svg"/></td><td width="400">:/apps/system-users.svg</td><td width="400">tango-icons/apps/system-users.svg</td><td width="200">system-users</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/utilities-system-monitor.png" alt="tango-icons/apps/utilities-system-monitor.svg"/></td><td width="400">:/apps/utilities-system-monitor.svg</td><td width="400">tango-icons/apps/utilities-system-monitor.svg</td><td width="200">utilities-system-monitor</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/accessories-text-editor.png" alt="tango-icons/apps/accessories-text-editor.svg"/></td><td width="400">:/apps/accessories-text-editor.svg</td><td width="400">tango-icons/apps/accessories-text-editor.svg</td><td width="200">accessories-text-editor</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/accessories-character-map.png" alt="tango-icons/apps/accessories-character-map.svg"/></td><td width="400">:/apps/accessories-character-map.svg</td><td width="400">tango-icons/apps/accessories-character-map.svg</td><td width="200">accessories-character-map</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/internet-news-reader.png" alt="tango-icons/apps/internet-news-reader.svg"/></td><td width="400">:/apps/internet-news-reader.svg</td><td width="400">tango-icons/apps/internet-news-reader.svg</td><td width="200">internet-news-reader</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/apps/utilities-terminal.png" alt="tango-icons/apps/utilities-terminal.svg"/></td><td width="400">:/apps/utilities-terminal.svg</td><td width="400">tango-icons/apps/utilities-terminal.svg</td><td width="200">utilities-terminal</td></tr>
 </table>
 <h2><a name="tango-icons/categories">:/categories/ (tango-icons/categories)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/categories/" Directory: "tango-icons/categories"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-accessories.png" alt="tango-icons/categories/applications-accessories.svg"/></td><td width="400">:/categories/applications-accessories.svg</td><td width="400">tango-icons/categories/applications-accessories.svg</td><td width="200">applications-accessories</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-development.png" alt="tango-icons/categories/applications-development.svg"/></td><td width="400">:/categories/applications-development.svg</td><td width="400">tango-icons/categories/applications-development.svg</td><td width="200">applications-development</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/preferences-system.png" alt="tango-icons/categories/preferences-system.svg"/></td><td width="400">:/categories/preferences-system.svg</td><td width="400">tango-icons/categories/preferences-system.svg</td><td width="200">preferences-system</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-system.png" alt="tango-icons/categories/applications-system.svg"/></td><td width="400">:/categories/applications-system.svg</td><td width="400">tango-icons/categories/applications-system.svg</td><td width="200">applications-system</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-games.png" alt="tango-icons/categories/applications-games.svg"/></td><td width="400">:/categories/applications-games.svg</td><td width="400">tango-icons/categories/applications-games.svg</td><td width="200">applications-games</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-office.png" alt="tango-icons/categories/applications-office.svg"/></td><td width="400">:/categories/applications-office.svg</td><td width="400">tango-icons/categories/applications-office.svg</td><td width="200">applications-office</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-graphics.png" alt="tango-icons/categories/applications-graphics.svg"/></td><td width="400">:/categories/applications-graphics.svg</td><td width="400">tango-icons/categories/applications-graphics.svg</td><td width="200">applications-graphics</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-multimedia.png" alt="tango-icons/categories/applications-multimedia.svg"/></td><td width="400">:/categories/applications-multimedia.svg</td><td width="400">tango-icons/categories/applications-multimedia.svg</td><td width="200">applications-multimedia</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-internet.png" alt="tango-icons/categories/applications-internet.svg"/></td><td width="400">:/categories/applications-internet.svg</td><td width="400">tango-icons/categories/applications-internet.svg</td><td width="200">applications-internet</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-accessories.png" alt="tango-icons/categories/applications-accessories.svg"/></td><td width="400">:/categories/applications-accessories.svg</td><td width="400">tango-icons/categories/applications-accessories.svg</td><td width="200">applications-accessories</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-multimedia.png" alt="tango-icons/categories/applications-multimedia.svg"/></td><td width="400">:/categories/applications-multimedia.svg</td><td width="400">tango-icons/categories/applications-multimedia.svg</td><td width="200">applications-multimedia</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-office.png" alt="tango-icons/categories/applications-office.svg"/></td><td width="400">:/categories/applications-office.svg</td><td width="400">tango-icons/categories/applications-office.svg</td><td width="200">applications-office</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-other.png" alt="tango-icons/categories/applications-other.svg"/></td><td width="400">:/categories/applications-other.svg</td><td width="400">tango-icons/categories/applications-other.svg</td><td width="200">applications-other</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-system.png" alt="tango-icons/categories/applications-system.svg"/></td><td width="400">:/categories/applications-system.svg</td><td width="400">tango-icons/categories/applications-system.svg</td><td width="200">applications-system</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/preferences-desktop-peripherals.png" alt="tango-icons/categories/preferences-desktop-peripherals.svg"/></td><td width="400">:/categories/preferences-desktop-peripherals.svg</td><td width="400">tango-icons/categories/preferences-desktop-peripherals.svg</td><td width="200">preferences-desktop-peripherals</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/preferences-desktop.png" alt="tango-icons/categories/preferences-desktop.svg"/></td><td width="400">:/categories/preferences-desktop.svg</td><td width="400">tango-icons/categories/preferences-desktop.svg</td><td width="200">preferences-desktop</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/applications-other.png" alt="tango-icons/categories/applications-other.svg"/></td><td width="400">:/categories/applications-other.svg</td><td width="400">tango-icons/categories/applications-other.svg</td><td width="200">applications-other</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/categories/preferences-system.png" alt="tango-icons/categories/preferences-system.svg"/></td><td width="400">:/categories/preferences-system.svg</td><td width="400">tango-icons/categories/preferences-system.svg</td><td width="200">preferences-system</td></tr>
 </table>
-<h2><a name="tango-icons/places">:/places/ (tango-icons/places)</a></h2>
+<h2><a name="tango-icons/devices">:/devices/ (tango-icons/devices)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/places/" Directory: "tango-icons/places"</th>
+<th colspan="4">Resource: ":/devices/" Directory: "tango-icons/devices"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/user-home.png" alt="tango-icons/places/user-home.svg"/></td><td width="400">:/places/user-home.svg</td><td width="400">tango-icons/places/user-home.svg</td><td width="200">user-home</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/start-here.png" alt="tango-icons/places/start-here.svg"/></td><td width="400">:/places/start-here.svg</td><td width="400">tango-icons/places/start-here.svg</td><td width="200">start-here</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/user-desktop.png" alt="tango-icons/places/user-desktop.svg"/></td><td width="400">:/places/user-desktop.svg</td><td width="400">tango-icons/places/user-desktop.svg</td><td width="200">user-desktop</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/network-workgroup.png" alt="tango-icons/places/network-workgroup.svg"/></td><td width="400">:/places/network-workgroup.svg</td><td width="400">tango-icons/places/network-workgroup.svg</td><td width="200">network-workgroup</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/user-trash.png" alt="tango-icons/places/user-trash.svg"/></td><td width="400">:/places/user-trash.svg</td><td width="400">tango-icons/places/user-trash.svg</td><td width="200">user-trash</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/network-server.png" alt="tango-icons/places/network-server.svg"/></td><td width="400">:/places/network-server.svg</td><td width="400">tango-icons/places/network-server.svg</td><td width="200">network-server</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/folder-remote.png" alt="tango-icons/places/folder-remote.svg"/></td><td width="400">:/places/folder-remote.svg</td><td width="400">tango-icons/places/folder-remote.svg</td><td width="200">folder-remote</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/folder.png" alt="tango-icons/places/folder.svg"/></td><td width="400">:/places/folder.svg</td><td width="400">tango-icons/places/folder.svg</td><td width="200">folder</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/folder-saved-search.png" alt="tango-icons/places/folder-saved-search.svg"/></td><td width="400">:/places/folder-saved-search.svg</td><td width="400">tango-icons/places/folder-saved-search.svg</td><td width="200">folder-saved-search</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/audio-card.png" alt="tango-icons/devices/audio-card.svg"/></td><td width="400">:/devices/audio-card.svg</td><td width="400">tango-icons/devices/audio-card.svg</td><td width="200">audio-card</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/audio-input-microphone.png" alt="tango-icons/devices/audio-input-microphone.svg"/></td><td width="400">:/devices/audio-input-microphone.svg</td><td width="400">tango-icons/devices/audio-input-microphone.svg</td><td width="200">audio-input-microphone</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/battery.png" alt="tango-icons/devices/battery.svg"/></td><td width="400">:/devices/battery.svg</td><td width="400">tango-icons/devices/battery.svg</td><td width="200">battery</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/camera-photo.png" alt="tango-icons/devices/camera-photo.svg"/></td><td width="400">:/devices/camera-photo.svg</td><td width="400">tango-icons/devices/camera-photo.svg</td><td width="200">camera-photo</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/camera-video.png" alt="tango-icons/devices/camera-video.svg"/></td><td width="400">:/devices/camera-video.svg</td><td width="400">tango-icons/devices/camera-video.svg</td><td width="200">camera-video</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/computer.png" alt="tango-icons/devices/computer.svg"/></td><td width="400">:/devices/computer.svg</td><td width="400">tango-icons/devices/computer.svg</td><td width="200">computer</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/drive-harddisk.png" alt="tango-icons/devices/drive-harddisk.svg"/></td><td width="400">:/devices/drive-harddisk.svg</td><td width="400">tango-icons/devices/drive-harddisk.svg</td><td width="200">drive-harddisk</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/drive-optical.png" alt="tango-icons/devices/drive-optical.svg"/></td><td width="400">:/devices/drive-optical.svg</td><td width="400">tango-icons/devices/drive-optical.svg</td><td width="200">drive-optical</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/drive-removable-media.png" alt="tango-icons/devices/drive-removable-media.svg"/></td><td width="400">:/devices/drive-removable-media.svg</td><td width="400">tango-icons/devices/drive-removable-media.svg</td><td width="200">drive-removable-media</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/input-gaming.png" alt="tango-icons/devices/input-gaming.svg"/></td><td width="400">:/devices/input-gaming.svg</td><td width="400">tango-icons/devices/input-gaming.svg</td><td width="200">input-gaming</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/input-keyboard.png" alt="tango-icons/devices/input-keyboard.svg"/></td><td width="400">:/devices/input-keyboard.svg</td><td width="400">tango-icons/devices/input-keyboard.svg</td><td width="200">input-keyboard</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/input-mouse.png" alt="tango-icons/devices/input-mouse.svg"/></td><td width="400">:/devices/input-mouse.svg</td><td width="400">tango-icons/devices/input-mouse.svg</td><td width="200">input-mouse</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/media-flash.png" alt="tango-icons/devices/media-flash.svg"/></td><td width="400">:/devices/media-flash.svg</td><td width="400">tango-icons/devices/media-flash.svg</td><td width="200">media-flash</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/media-floppy.png" alt="tango-icons/devices/media-floppy.svg"/></td><td width="400">:/devices/media-floppy.svg</td><td width="400">tango-icons/devices/media-floppy.svg</td><td width="200">media-floppy</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/media-optical.png" alt="tango-icons/devices/media-optical.svg"/></td><td width="400">:/devices/media-optical.svg</td><td width="400">tango-icons/devices/media-optical.svg</td><td width="200">media-optical</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/multimedia-player.png" alt="tango-icons/devices/multimedia-player.svg"/></td><td width="400">:/devices/multimedia-player.svg</td><td width="400">tango-icons/devices/multimedia-player.svg</td><td width="200">multimedia-player</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/network-wired.png" alt="tango-icons/devices/network-wired.svg"/></td><td width="400">:/devices/network-wired.svg</td><td width="400">tango-icons/devices/network-wired.svg</td><td width="200">network-wired</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/network-wireless.png" alt="tango-icons/devices/network-wireless.svg"/></td><td width="400">:/devices/network-wireless.svg</td><td width="400">tango-icons/devices/network-wireless.svg</td><td width="200">network-wireless</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/printer.png" alt="tango-icons/devices/printer.svg"/></td><td width="400">:/devices/printer.svg</td><td width="400">tango-icons/devices/printer.svg</td><td width="200">printer</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/devices/video-display.png" alt="tango-icons/devices/video-display.svg"/></td><td width="400">:/devices/video-display.svg</td><td width="400">tango-icons/devices/video-display.svg</td><td width="200">video-display</td></tr>
+</table>
+<h2><a name="tango-icons/emblems">:/emblems/ (tango-icons/emblems)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/emblems/" Directory: "tango-icons/emblems"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-favorite.png" alt="tango-icons/emblems/emblem-favorite.svg"/></td><td width="400">:/emblems/emblem-favorite.svg</td><td width="400">tango-icons/emblems/emblem-favorite.svg</td><td width="200">emblem-favorite</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-important.png" alt="tango-icons/emblems/emblem-important.svg"/></td><td width="400">:/emblems/emblem-important.svg</td><td width="400">tango-icons/emblems/emblem-important.svg</td><td width="200">emblem-important</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-photos.png" alt="tango-icons/emblems/emblem-photos.svg"/></td><td width="400">:/emblems/emblem-photos.svg</td><td width="400">tango-icons/emblems/emblem-photos.svg</td><td width="200">emblem-photos</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-readonly.png" alt="tango-icons/emblems/emblem-readonly.svg"/></td><td width="400">:/emblems/emblem-readonly.svg</td><td width="400">tango-icons/emblems/emblem-readonly.svg</td><td width="200">emblem-readonly</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-symbolic-link.png" alt="tango-icons/emblems/emblem-symbolic-link.svg"/></td><td width="400">:/emblems/emblem-symbolic-link.svg</td><td width="400">tango-icons/emblems/emblem-symbolic-link.svg</td><td width="200">emblem-symbolic-link</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-system.png" alt="tango-icons/emblems/emblem-system.svg"/></td><td width="400">:/emblems/emblem-system.svg</td><td width="400">tango-icons/emblems/emblem-system.svg</td><td width="200">emblem-system</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emblems/emblem-unreadable.png" alt="tango-icons/emblems/emblem-unreadable.svg"/></td><td width="400">:/emblems/emblem-unreadable.svg</td><td width="400">tango-icons/emblems/emblem-unreadable.svg</td><td width="200">emblem-unreadable</td></tr>
 </table>
 <h2><a name="tango-icons/emotes">:/emotes/ (tango-icons/emotes)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/emotes/" Directory: "tango-icons/emotes"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-cool.png" alt="tango-icons/emotes/face-cool.svg"/></td><td width="400">:/emotes/face-cool.svg</td><td width="400">tango-icons/emotes/face-cool.svg</td><td width="200">face-cool</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-angel.png" alt="tango-icons/emotes/face-angel.svg"/></td><td width="400">:/emotes/face-angel.svg</td><td width="400">tango-icons/emotes/face-angel.svg</td><td width="200">face-angel</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-smile.png" alt="tango-icons/emotes/face-smile.svg"/></td><td width="400">:/emotes/face-smile.svg</td><td width="400">tango-icons/emotes/face-smile.svg</td><td width="200">face-smile</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-smile-big.png" alt="tango-icons/emotes/face-smile-big.svg"/></td><td width="400">:/emotes/face-smile-big.svg</td><td width="400">tango-icons/emotes/face-smile-big.svg</td><td width="200">face-smile-big</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-grin.png" alt="tango-icons/emotes/face-grin.svg"/></td><td width="400">:/emotes/face-grin.svg</td><td width="400">tango-icons/emotes/face-grin.svg</td><td width="200">face-grin</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-cool.png" alt="tango-icons/emotes/face-cool.svg"/></td><td width="400">:/emotes/face-cool.svg</td><td width="400">tango-icons/emotes/face-cool.svg</td><td width="200">face-cool</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-crying.png" alt="tango-icons/emotes/face-crying.svg"/></td><td width="400">:/emotes/face-crying.svg</td><td width="400">tango-icons/emotes/face-crying.svg</td><td width="200">face-crying</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-devilish.png" alt="tango-icons/emotes/face-devilish.svg"/></td><td width="400">:/emotes/face-devilish.svg</td><td width="400">tango-icons/emotes/face-devilish.svg</td><td width="200">face-devilish</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-glasses.png" alt="tango-icons/emotes/face-glasses.svg"/></td><td width="400">:/emotes/face-glasses.svg</td><td width="400">tango-icons/emotes/face-glasses.svg</td><td width="200">face-glasses</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-grin.png" alt="tango-icons/emotes/face-grin.svg"/></td><td width="400">:/emotes/face-grin.svg</td><td width="400">tango-icons/emotes/face-grin.svg</td><td width="200">face-grin</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-kiss.png" alt="tango-icons/emotes/face-kiss.svg"/></td><td width="400">:/emotes/face-kiss.svg</td><td width="400">tango-icons/emotes/face-kiss.svg</td><td width="200">face-kiss</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-monkey.png" alt="tango-icons/emotes/face-monkey.svg"/></td><td width="400">:/emotes/face-monkey.svg</td><td width="400">tango-icons/emotes/face-monkey.svg</td><td width="200">face-monkey</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-plain.png" alt="tango-icons/emotes/face-plain.svg"/></td><td width="400">:/emotes/face-plain.svg</td><td width="400">tango-icons/emotes/face-plain.svg</td><td width="200">face-plain</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-sad.png" alt="tango-icons/emotes/face-sad.svg"/></td><td width="400">:/emotes/face-sad.svg</td><td width="400">tango-icons/emotes/face-sad.svg</td><td width="200">face-sad</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-devilish.png" alt="tango-icons/emotes/face-devilish.svg"/></td><td width="400">:/emotes/face-devilish.svg</td><td width="400">tango-icons/emotes/face-devilish.svg</td><td width="200">face-devilish</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-smile-big.png" alt="tango-icons/emotes/face-smile-big.svg"/></td><td width="400">:/emotes/face-smile-big.svg</td><td width="400">tango-icons/emotes/face-smile-big.svg</td><td width="200">face-smile-big</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-smile.png" alt="tango-icons/emotes/face-smile.svg"/></td><td width="400">:/emotes/face-smile.svg</td><td width="400">tango-icons/emotes/face-smile.svg</td><td width="200">face-smile</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-surprise.png" alt="tango-icons/emotes/face-surprise.svg"/></td><td width="400">:/emotes/face-surprise.svg</td><td width="400">tango-icons/emotes/face-surprise.svg</td><td width="200">face-surprise</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-kiss.png" alt="tango-icons/emotes/face-kiss.svg"/></td><td width="400">:/emotes/face-kiss.svg</td><td width="400">tango-icons/emotes/face-kiss.svg</td><td width="200">face-kiss</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-plain.png" alt="tango-icons/emotes/face-plain.svg"/></td><td width="400">:/emotes/face-plain.svg</td><td width="400">tango-icons/emotes/face-plain.svg</td><td width="200">face-plain</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-wink.png" alt="tango-icons/emotes/face-wink.svg"/></td><td width="400">:/emotes/face-wink.svg</td><td width="400">tango-icons/emotes/face-wink.svg</td><td width="200">face-wink</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/emotes/face-crying.png" alt="tango-icons/emotes/face-crying.svg"/></td><td width="400">:/emotes/face-crying.svg</td><td width="400">tango-icons/emotes/face-crying.svg</td><td width="200">face-crying</td></tr>
+</table>
+<h2><a name="tango-icons/mimetypes">:/mimetypes/ (tango-icons/mimetypes)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/mimetypes/" Directory: "tango-icons/mimetypes"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/application-certificate.png" alt="tango-icons/mimetypes/application-certificate.svg"/></td><td width="400">:/mimetypes/application-certificate.svg</td><td width="400">tango-icons/mimetypes/application-certificate.svg</td><td width="200">application-certificate</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/application-x-executable.png" alt="tango-icons/mimetypes/application-x-executable.svg"/></td><td width="400">:/mimetypes/application-x-executable.svg</td><td width="400">tango-icons/mimetypes/application-x-executable.svg</td><td width="200">application-x-executable</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/audio-x-generic.png" alt="tango-icons/mimetypes/audio-x-generic.svg"/></td><td width="400">:/mimetypes/audio-x-generic.svg</td><td width="400">tango-icons/mimetypes/audio-x-generic.svg</td><td width="200">audio-x-generic</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/font-x-generic.png" alt="tango-icons/mimetypes/font-x-generic.svg"/></td><td width="400">:/mimetypes/font-x-generic.svg</td><td width="400">tango-icons/mimetypes/font-x-generic.svg</td><td width="200">font-x-generic</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/image-x-generic.png" alt="tango-icons/mimetypes/image-x-generic.svg"/></td><td width="400">:/mimetypes/image-x-generic.svg</td><td width="400">tango-icons/mimetypes/image-x-generic.svg</td><td width="200">image-x-generic</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/package-x-generic.png" alt="tango-icons/mimetypes/package-x-generic.svg"/></td><td width="400">:/mimetypes/package-x-generic.svg</td><td width="400">tango-icons/mimetypes/package-x-generic.svg</td><td width="200">package-x-generic</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/text-html.png" alt="tango-icons/mimetypes/text-html.svg"/></td><td width="400">:/mimetypes/text-html.svg</td><td width="400">tango-icons/mimetypes/text-html.svg</td><td width="200">text-html</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/text-x-generic-template.png" alt="tango-icons/mimetypes/text-x-generic-template.svg"/></td><td width="400">:/mimetypes/text-x-generic-template.svg</td><td width="400">tango-icons/mimetypes/text-x-generic-template.svg</td><td width="200">text-x-generic-template</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/text-x-generic.png" alt="tango-icons/mimetypes/text-x-generic.svg"/></td><td width="400">:/mimetypes/text-x-generic.svg</td><td width="400">tango-icons/mimetypes/text-x-generic.svg</td><td width="200">text-x-generic</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/text-x-script.png" alt="tango-icons/mimetypes/text-x-script.svg"/></td><td width="400">:/mimetypes/text-x-script.svg</td><td width="400">tango-icons/mimetypes/text-x-script.svg</td><td width="200">text-x-script</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/video-x-generic.png" alt="tango-icons/mimetypes/video-x-generic.svg"/></td><td width="400">:/mimetypes/video-x-generic.svg</td><td width="400">tango-icons/mimetypes/video-x-generic.svg</td><td width="200">video-x-generic</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-address-book.png" alt="tango-icons/mimetypes/x-office-address-book.svg"/></td><td width="400">:/mimetypes/x-office-address-book.svg</td><td width="400">tango-icons/mimetypes/x-office-address-book.svg</td><td width="200">x-office-address-book</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-calendar.png" alt="tango-icons/mimetypes/x-office-calendar.svg"/></td><td width="400">:/mimetypes/x-office-calendar.svg</td><td width="400">tango-icons/mimetypes/x-office-calendar.svg</td><td width="200">x-office-calendar</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-document-template.png" alt="tango-icons/mimetypes/x-office-document-template.svg"/></td><td width="400">:/mimetypes/x-office-document-template.svg</td><td width="400">tango-icons/mimetypes/x-office-document-template.svg</td><td width="200">x-office-document-template</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-document.png" alt="tango-icons/mimetypes/x-office-document.svg"/></td><td width="400">:/mimetypes/x-office-document.svg</td><td width="400">tango-icons/mimetypes/x-office-document.svg</td><td width="200">x-office-document</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-drawing-template.png" alt="tango-icons/mimetypes/x-office-drawing-template.svg"/></td><td width="400">:/mimetypes/x-office-drawing-template.svg</td><td width="400">tango-icons/mimetypes/x-office-drawing-template.svg</td><td width="200">x-office-drawing-template</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-drawing.png" alt="tango-icons/mimetypes/x-office-drawing.svg"/></td><td width="400">:/mimetypes/x-office-drawing.svg</td><td width="400">tango-icons/mimetypes/x-office-drawing.svg</td><td width="200">x-office-drawing</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-presentation-template.png" alt="tango-icons/mimetypes/x-office-presentation-template.svg"/></td><td width="400">:/mimetypes/x-office-presentation-template.svg</td><td width="400">tango-icons/mimetypes/x-office-presentation-template.svg</td><td width="200">x-office-presentation-template</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-presentation.png" alt="tango-icons/mimetypes/x-office-presentation.svg"/></td><td width="400">:/mimetypes/x-office-presentation.svg</td><td width="400">tango-icons/mimetypes/x-office-presentation.svg</td><td width="200">x-office-presentation</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-spreadsheet-template.png" alt="tango-icons/mimetypes/x-office-spreadsheet-template.svg"/></td><td width="400">:/mimetypes/x-office-spreadsheet-template.svg</td><td width="400">tango-icons/mimetypes/x-office-spreadsheet-template.svg</td><td width="200">x-office-spreadsheet-template</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/mimetypes/x-office-spreadsheet.png" alt="tango-icons/mimetypes/x-office-spreadsheet.svg"/></td><td width="400">:/mimetypes/x-office-spreadsheet.svg</td><td width="400">tango-icons/mimetypes/x-office-spreadsheet.svg</td><td width="200">x-office-spreadsheet</td></tr>
+</table>
+<h2><a name="tango-icons/places">:/places/ (tango-icons/places)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/places/" Directory: "tango-icons/places"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/folder-remote.png" alt="tango-icons/places/folder-remote.svg"/></td><td width="400">:/places/folder-remote.svg</td><td width="400">tango-icons/places/folder-remote.svg</td><td width="200">folder-remote</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/folder-saved-search.png" alt="tango-icons/places/folder-saved-search.svg"/></td><td width="400">:/places/folder-saved-search.svg</td><td width="400">tango-icons/places/folder-saved-search.svg</td><td width="200">folder-saved-search</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/folder.png" alt="tango-icons/places/folder.svg"/></td><td width="400">:/places/folder.svg</td><td width="400">tango-icons/places/folder.svg</td><td width="200">folder</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/network-server.png" alt="tango-icons/places/network-server.svg"/></td><td width="400">:/places/network-server.svg</td><td width="400">tango-icons/places/network-server.svg</td><td width="200">network-server</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/network-workgroup.png" alt="tango-icons/places/network-workgroup.svg"/></td><td width="400">:/places/network-workgroup.svg</td><td width="400">tango-icons/places/network-workgroup.svg</td><td width="200">network-workgroup</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/start-here.png" alt="tango-icons/places/start-here.svg"/></td><td width="400">:/places/start-here.svg</td><td width="400">tango-icons/places/start-here.svg</td><td width="200">start-here</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/user-desktop.png" alt="tango-icons/places/user-desktop.svg"/></td><td width="400">:/places/user-desktop.svg</td><td width="400">tango-icons/places/user-desktop.svg</td><td width="200">user-desktop</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/user-home.png" alt="tango-icons/places/user-home.svg"/></td><td width="400">:/places/user-home.svg</td><td width="400">tango-icons/places/user-home.svg</td><td width="200">user-home</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/places/user-trash.png" alt="tango-icons/places/user-trash.svg"/></td><td width="400">:/places/user-trash.svg</td><td width="400">tango-icons/places/user-trash.svg</td><td width="200">user-trash</td></tr>
+</table>
+<h2><a name="tango-icons/status">:/status/ (tango-icons/status)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/status/" Directory: "tango-icons/status"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/audio-volume-high.png" alt="tango-icons/status/audio-volume-high.svg"/></td><td width="400">:/status/audio-volume-high.svg</td><td width="400">tango-icons/status/audio-volume-high.svg</td><td width="200">audio-volume-high</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/audio-volume-low.png" alt="tango-icons/status/audio-volume-low.svg"/></td><td width="400">:/status/audio-volume-low.svg</td><td width="400">tango-icons/status/audio-volume-low.svg</td><td width="200">audio-volume-low</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/audio-volume-medium.png" alt="tango-icons/status/audio-volume-medium.svg"/></td><td width="400">:/status/audio-volume-medium.svg</td><td width="400">tango-icons/status/audio-volume-medium.svg</td><td width="200">audio-volume-medium</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/audio-volume-muted.png" alt="tango-icons/status/audio-volume-muted.svg"/></td><td width="400">:/status/audio-volume-muted.svg</td><td width="400">tango-icons/status/audio-volume-muted.svg</td><td width="200">audio-volume-muted</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/battery-caution.png" alt="tango-icons/status/battery-caution.svg"/></td><td width="400">:/status/battery-caution.svg</td><td width="400">tango-icons/status/battery-caution.svg</td><td width="200">battery-caution</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/dialog-error.png" alt="tango-icons/status/dialog-error.svg"/></td><td width="400">:/status/dialog-error.svg</td><td width="400">tango-icons/status/dialog-error.svg</td><td width="200">dialog-error</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/dialog-information.png" alt="tango-icons/status/dialog-information.svg"/></td><td width="400">:/status/dialog-information.svg</td><td width="400">tango-icons/status/dialog-information.svg</td><td width="200">dialog-information</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/dialog-warning.png" alt="tango-icons/status/dialog-warning.svg"/></td><td width="400">:/status/dialog-warning.svg</td><td width="400">tango-icons/status/dialog-warning.svg</td><td width="200">dialog-warning</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/folder-drag-accept.png" alt="tango-icons/status/folder-drag-accept.svg"/></td><td width="400">:/status/folder-drag-accept.svg</td><td width="400">tango-icons/status/folder-drag-accept.svg</td><td width="200">folder-drag-accept</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/folder-open.png" alt="tango-icons/status/folder-open.svg"/></td><td width="400">:/status/folder-open.svg</td><td width="400">tango-icons/status/folder-open.svg</td><td width="200">folder-open</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/folder-visiting.png" alt="tango-icons/status/folder-visiting.svg"/></td><td width="400">:/status/folder-visiting.svg</td><td width="400">tango-icons/status/folder-visiting.svg</td><td width="200">folder-visiting</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/image-loading.png" alt="tango-icons/status/image-loading.svg"/></td><td width="400">:/status/image-loading.svg</td><td width="400">tango-icons/status/image-loading.svg</td><td width="200">image-loading</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/image-missing.png" alt="tango-icons/status/image-missing.svg"/></td><td width="400">:/status/image-missing.svg</td><td width="400">tango-icons/status/image-missing.svg</td><td width="200">image-missing</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/mail-attachment.png" alt="tango-icons/status/mail-attachment.svg"/></td><td width="400">:/status/mail-attachment.svg</td><td width="400">tango-icons/status/mail-attachment.svg</td><td width="200">mail-attachment</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-error.png" alt="tango-icons/status/network-error.svg"/></td><td width="400">:/status/network-error.svg</td><td width="400">tango-icons/status/network-error.svg</td><td width="200">network-error</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-idle.png" alt="tango-icons/status/network-idle.svg"/></td><td width="400">:/status/network-idle.svg</td><td width="400">tango-icons/status/network-idle.svg</td><td width="200">network-idle</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-offline.png" alt="tango-icons/status/network-offline.svg"/></td><td width="400">:/status/network-offline.svg</td><td width="400">tango-icons/status/network-offline.svg</td><td width="200">network-offline</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-receive.png" alt="tango-icons/status/network-receive.svg"/></td><td width="400">:/status/network-receive.svg</td><td width="400">tango-icons/status/network-receive.svg</td><td width="200">network-receive</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-transmit-receive.png" alt="tango-icons/status/network-transmit-receive.svg"/></td><td width="400">:/status/network-transmit-receive.svg</td><td width="400">tango-icons/status/network-transmit-receive.svg</td><td width="200">network-transmit-receive</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-transmit.png" alt="tango-icons/status/network-transmit.svg"/></td><td width="400">:/status/network-transmit.svg</td><td width="400">tango-icons/status/network-transmit.svg</td><td width="200">network-transmit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/network-wireless-encrypted.png" alt="tango-icons/status/network-wireless-encrypted.svg"/></td><td width="400">:/status/network-wireless-encrypted.svg</td><td width="400">tango-icons/status/network-wireless-encrypted.svg</td><td width="200">network-wireless-encrypted</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/printer-error.png" alt="tango-icons/status/printer-error.svg"/></td><td width="400">:/status/printer-error.svg</td><td width="400">tango-icons/status/printer-error.svg</td><td width="200">printer-error</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/software-update-available.png" alt="tango-icons/status/software-update-available.svg"/></td><td width="400">:/status/software-update-available.svg</td><td width="400">tango-icons/status/software-update-available.svg</td><td width="200">software-update-available</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/software-update-urgent.png" alt="tango-icons/status/software-update-urgent.svg"/></td><td width="400">:/status/software-update-urgent.svg</td><td width="400">tango-icons/status/software-update-urgent.svg</td><td width="200">software-update-urgent</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/user-trash-full.png" alt="tango-icons/status/user-trash-full.svg"/></td><td width="400">:/status/user-trash-full.svg</td><td width="400">tango-icons/status/user-trash-full.svg</td><td width="200">user-trash-full</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-clear-night.png" alt="tango-icons/status/weather-clear-night.svg"/></td><td width="400">:/status/weather-clear-night.svg</td><td width="400">tango-icons/status/weather-clear-night.svg</td><td width="200">weather-clear-night</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-clear.png" alt="tango-icons/status/weather-clear.svg"/></td><td width="400">:/status/weather-clear.svg</td><td width="400">tango-icons/status/weather-clear.svg</td><td width="200">weather-clear</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-few-clouds-night.png" alt="tango-icons/status/weather-few-clouds-night.svg"/></td><td width="400">:/status/weather-few-clouds-night.svg</td><td width="400">tango-icons/status/weather-few-clouds-night.svg</td><td width="200">weather-few-clouds-night</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-few-clouds.png" alt="tango-icons/status/weather-few-clouds.svg"/></td><td width="400">:/status/weather-few-clouds.svg</td><td width="400">tango-icons/status/weather-few-clouds.svg</td><td width="200">weather-few-clouds</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-overcast.png" alt="tango-icons/status/weather-overcast.svg"/></td><td width="400">:/status/weather-overcast.svg</td><td width="400">tango-icons/status/weather-overcast.svg</td><td width="200">weather-overcast</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-severe-alert.png" alt="tango-icons/status/weather-severe-alert.svg"/></td><td width="400">:/status/weather-severe-alert.svg</td><td width="400">tango-icons/status/weather-severe-alert.svg</td><td width="200">weather-severe-alert</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-showers-scattered.png" alt="tango-icons/status/weather-showers-scattered.svg"/></td><td width="400">:/status/weather-showers-scattered.svg</td><td width="400">tango-icons/status/weather-showers-scattered.svg</td><td width="200">weather-showers-scattered</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-showers.png" alt="tango-icons/status/weather-showers.svg"/></td><td width="400">:/status/weather-showers.svg</td><td width="400">tango-icons/status/weather-showers.svg</td><td width="200">weather-showers</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-snow.png" alt="tango-icons/status/weather-snow.svg"/></td><td width="400">:/status/weather-snow.svg</td><td width="400">tango-icons/status/weather-snow.svg</td><td width="200">weather-snow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="tango-icons/status/weather-storm.png" alt="tango-icons/status/weather-storm.svg"/></td><td width="400">:/status/weather-storm.svg</td><td width="400">tango-icons/status/weather-storm.svg</td><td width="200">weather-storm</td></tr>
+</table>
+<h2><a name="extra-icons/actions">:/actions/ (extra-icons/actions)</a></h2>
+<table border="1" cellspacing="0" cellpadding="2">
+<th colspan="4">Resource: ":/actions/" Directory: "extra-icons/actions"</th>
+<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/collapse-all.png" alt="extra-icons/actions/collapse-all.svg"/></td><td width="400">:/actions/collapse-all.svg</td><td width="400">extra-icons/actions/collapse-all.svg</td><td width="200">collapse-all</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/collapse-selection.png" alt="extra-icons/actions/collapse-selection.png"/></td><td width="400">:/actions/collapse-selection.png</td><td width="400">extra-icons/actions/collapse-selection.png</td><td width="200">collapse-selection</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/collapse.png" alt="extra-icons/actions/collapse.png"/></td><td width="400">:/actions/collapse.png</td><td width="400">extra-icons/actions/collapse.png</td><td width="200">collapse</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/expand-all.png" alt="extra-icons/actions/expand-all.svg"/></td><td width="400">:/actions/expand-all.svg</td><td width="400">extra-icons/actions/expand-all.svg</td><td width="200">expand-all</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/expand-selection.png" alt="extra-icons/actions/expand-selection.png"/></td><td width="400">:/actions/expand-selection.png</td><td width="400">extra-icons/actions/expand-selection.png</td><td width="200">expand-selection</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/expand.png" alt="extra-icons/actions/expand.png"/></td><td width="400">:/actions/expand.png</td><td width="400">extra-icons/actions/expand.png</td><td width="200">expand</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/go-backward.png" alt="extra-icons/actions/go-backward.svg"/></td><td width="400">:/actions/go-backward.svg</td><td width="400">extra-icons/actions/go-backward.svg</td><td width="200">go-backward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/go-forward.png" alt="extra-icons/actions/go-forward.svg"/></td><td width="400">:/actions/go-forward.svg</td><td width="400">extra-icons/actions/go-forward.svg</td><td width="200">go-forward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media-seek-backward-green.png" alt="extra-icons/actions/media-seek-backward-green.svg"/></td><td width="400">:/actions/media-seek-backward-green.svg</td><td width="400">extra-icons/actions/media-seek-backward-green.svg</td><td width="200">media-seek-backward-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media-seek-forward-green.png" alt="extra-icons/actions/media-seek-forward-green.svg"/></td><td width="400">:/actions/media-seek-forward-green.svg</td><td width="400">extra-icons/actions/media-seek-forward-green.svg</td><td width="200">media-seek-forward-green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_backward.png" alt="extra-icons/actions/media_playback_backward.svg"/></td><td width="400">:/actions/media_playback_backward.svg</td><td width="400">extra-icons/actions/media_playback_backward.svg</td><td width="200">media_playback_backward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_pause.png" alt="extra-icons/actions/media_playback_pause.svg"/></td><td width="400">:/actions/media_playback_pause.svg</td><td width="400">extra-icons/actions/media_playback_pause.svg</td><td width="200">media_playback_pause</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_start.png" alt="extra-icons/actions/media_playback_start.svg"/></td><td width="400">:/actions/media_playback_start.svg</td><td width="400">extra-icons/actions/media_playback_start.svg</td><td width="200">media_playback_start</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_stop.png" alt="extra-icons/actions/media_playback_stop.svg"/></td><td width="400">:/actions/media_playback_stop.svg</td><td width="400">extra-icons/actions/media_playback_stop.svg</td><td width="200">media_playback_stop</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_stop_green.png" alt="extra-icons/actions/media_playback_stop_green.svg"/></td><td width="400">:/actions/media_playback_stop_green.svg</td><td width="400">extra-icons/actions/media_playback_stop_green.svg</td><td width="200">media_playback_stop_green</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_seek_backward.png" alt="extra-icons/actions/media_seek_backward.svg"/></td><td width="400">:/actions/media_seek_backward.svg</td><td width="400">extra-icons/actions/media_seek_backward.svg</td><td width="200">media_seek_backward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_seek_forward.png" alt="extra-icons/actions/media_seek_forward.svg"/></td><td width="400">:/actions/media_seek_forward.svg</td><td width="400">extra-icons/actions/media_seek_forward.svg</td><td width="200">media_seek_forward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_skip_backward.png" alt="extra-icons/actions/media_skip_backward.svg"/></td><td width="400">:/actions/media_skip_backward.svg</td><td width="400">extra-icons/actions/media_skip_backward.svg</td><td width="200">media_skip_backward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_skip_forward.png" alt="extra-icons/actions/media_skip_forward.svg"/></td><td width="400">:/actions/media_skip_forward.svg</td><td width="400">extra-icons/actions/media_skip_forward.svg</td><td width="200">media_skip_forward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/stop.png" alt="extra-icons/actions/stop.svg"/></td><td width="400">:/actions/stop.svg</td><td width="400">extra-icons/actions/stop.svg</td><td width="200">stop</td></tr>
 </table>
 <h2><a name="extra-icons/designer">:/designer/ (extra-icons/designer)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/designer/" Directory: "extra-icons/designer"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/scheduler.png" alt="extra-icons/designer/scheduler.png"/></td><td width="400">:/designer/scheduler.png</td><td width="400">extra-icons/designer/scheduler.png</td><td width="200">scheduler</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/arrayedit.png" alt="extra-icons/designer/arrayedit.png"/></td><td width="400">:/designer/arrayedit.png</td><td width="400">extra-icons/designer/arrayedit.png</td><td width="200">arrayedit</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/back.png" alt="extra-icons/designer/back.png"/></td><td width="400">:/designer/back.png</td><td width="400">extra-icons/designer/back.png</td><td width="200">back</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/calendarwidget.png" alt="extra-icons/designer/calendarwidget.png"/></td><td width="400">:/designer/calendarwidget.png</td><td width="400">extra-icons/designer/calendarwidget.png</td><td width="200">calendarwidget</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/checkbox.png" alt="extra-icons/designer/checkbox.png"/></td><td width="400">:/designer/checkbox.png</td><td width="400">extra-icons/designer/checkbox.png</td><td width="200">checkbox</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/circular_gauge.png" alt="extra-icons/designer/circular_gauge.png"/></td><td width="400">:/designer/circular_gauge.png</td><td width="400">extra-icons/designer/circular_gauge.png</td><td width="200">circular_gauge</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/columnview.png" alt="extra-icons/designer/columnview.png"/></td><td width="400">:/designer/columnview.png</td><td width="400">extra-icons/designer/columnview.png</td><td width="200">columnview</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/combobox.png" alt="extra-icons/designer/combobox.png"/></td><td width="400">:/designer/combobox.png</td><td width="400">extra-icons/designer/combobox.png</td><td width="200">combobox</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/commandlinkbutton.png" alt="extra-icons/designer/commandlinkbutton.png"/></td><td width="400">:/designer/commandlinkbutton.png</td><td width="400">extra-icons/designer/commandlinkbutton.png</td><td width="200">commandlinkbutton</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/compression.png" alt="extra-icons/designer/compression.png"/></td><td width="400">:/designer/compression.png</td><td width="400">extra-icons/designer/compression.png</td><td width="200">compression</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/dateedit.png" alt="extra-icons/designer/dateedit.png"/></td><td width="400">:/designer/dateedit.png</td><td width="400">extra-icons/designer/dateedit.png</td><td width="200">dateedit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/datetimeedit.png" alt="extra-icons/designer/datetimeedit.png"/></td><td width="400">:/designer/datetimeedit.png</td><td width="400">extra-icons/designer/datetimeedit.png</td><td width="200">datetimeedit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/devs_table.png" alt="extra-icons/designer/devs_table.png"/></td><td width="400">:/designer/devs_table.png</td><td width="400">extra-icons/designer/devs_table.png</td><td width="200">devs_table</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/devs_tree.png" alt="extra-icons/designer/devs_tree.png"/></td><td width="400">:/designer/devs_tree.png</td><td width="400">extra-icons/designer/devs_tree.png</td><td width="200">devs_tree</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/dial.png" alt="extra-icons/designer/dial.png"/></td><td width="400">:/designer/dial.png</td><td width="400">extra-icons/designer/dial.png</td><td width="200">dial</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/dialogbuttonbox.png" alt="extra-icons/designer/dialogbuttonbox.png"/></td><td width="400">:/designer/dialogbuttonbox.png</td><td width="400">extra-icons/designer/dialogbuttonbox.png</td><td width="200">dialogbuttonbox</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/dockwidget.png" alt="extra-icons/designer/dockwidget.png"/></td><td width="400">:/designer/dockwidget.png</td><td width="400">extra-icons/designer/dockwidget.png</td><td width="200">dockwidget</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/doublespinbox.png" alt="extra-icons/designer/doublespinbox.png"/></td><td width="400">:/designer/doublespinbox.png</td><td width="400">extra-icons/designer/doublespinbox.png</td><td width="200">doublespinbox</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/down.png" alt="extra-icons/designer/down.png"/></td><td width="400">:/designer/down.png</td><td width="400">extra-icons/designer/down.png</td><td width="200">down</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/progress.png" alt="extra-icons/designer/progress.png"/></td><td width="400">:/designer/progress.png</td><td width="400">extra-icons/designer/progress.png</td><td width="200">progress</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/props_table.png" alt="extra-icons/designer/props_table.png"/></td><td width="400">:/designer/props_table.png</td><td width="400">extra-icons/designer/props_table.png</td><td width="200">props_table</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/listview.png" alt="extra-icons/designer/listview.png"/></td><td width="400">:/designer/listview.png</td><td width="400">extra-icons/designer/listview.png</td><td width="200">listview</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/editdelete.png" alt="extra-icons/designer/editdelete.png"/></td><td width="400">:/designer/editdelete.png</td><td width="400">extra-icons/designer/editdelete.png</td><td width="200">editdelete</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/extra_motor.png" alt="extra-icons/designer/extra_motor.png"/></td><td width="400">:/designer/extra_motor.png</td><td width="400">extra-icons/designer/extra_motor.png</td><td width="200">extra_motor</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/filereader.png" alt="extra-icons/designer/filereader.png"/></td><td width="400">:/designer/filereader.png</td><td width="400">extra-icons/designer/filereader.png</td><td width="200">filereader</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/fontcombobox.png" alt="extra-icons/designer/fontcombobox.png"/></td><td width="400">:/designer/fontcombobox.png</td><td width="400">extra-icons/designer/fontcombobox.png</td><td width="200">fontcombobox</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/forward.png" alt="extra-icons/designer/forward.png"/></td><td width="400">:/designer/forward.png</td><td width="400">extra-icons/designer/forward.png</td><td width="200">forward</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/frame.png" alt="extra-icons/designer/frame.png"/></td><td width="400">:/designer/frame.png</td><td width="400">extra-icons/designer/frame.png</td><td width="200">frame</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/graphicsview.png" alt="extra-icons/designer/graphicsview.png"/></td><td width="400">:/designer/graphicsview.png</td><td width="400">extra-icons/designer/graphicsview.png</td><td width="200">graphicsview</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/label.png" alt="extra-icons/designer/label.png"/></td><td width="400">:/designer/label.png</td><td width="400">extra-icons/designer/label.png</td><td width="200">label</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/grid.png" alt="extra-icons/designer/grid.png"/></td><td width="400">:/designer/grid.png</td><td width="400">extra-icons/designer/grid.png</td><td width="200">grid</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/groupbox.png" alt="extra-icons/designer/groupbox.png"/></td><td width="400">:/designer/groupbox.png</td><td width="400">extra-icons/designer/groupbox.png</td><td width="200">groupbox</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/toolbox.png" alt="extra-icons/designer/toolbox.png"/></td><td width="400">:/designer/toolbox.png</td><td width="400">extra-icons/designer/toolbox.png</td><td width="200">toolbox</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vline.png" alt="extra-icons/designer/vline.png"/></td><td width="400">:/designer/vline.png</td><td width="400">extra-icons/designer/vline.png</td><td width="200">vline</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/groupboxcollapsible.png" alt="extra-icons/designer/groupboxcollapsible.png"/></td><td width="400">:/designer/groupboxcollapsible.png</td><td width="400">extra-icons/designer/groupboxcollapsible.png</td><td width="200">groupboxcollapsible</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/dateedit.png" alt="extra-icons/designer/dateedit.png"/></td><td width="400">:/designer/dateedit.png</td><td width="400">extra-icons/designer/dateedit.png</td><td width="200">dateedit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/lineedit.png" alt="extra-icons/designer/lineedit.png"/></td><td width="400">:/designer/lineedit.png</td><td width="400">extra-icons/designer/lineedit.png</td><td width="200">lineedit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/listview.png" alt="extra-icons/designer/listview.png"/></td><td width="400">:/designer/listview.png</td><td width="400">extra-icons/designer/listview.png</td><td width="200">listview</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/dockwidget.png" alt="extra-icons/designer/dockwidget.png"/></td><td width="400">:/designer/dockwidget.png</td><td width="400">extra-icons/designer/dockwidget.png</td><td width="200">dockwidget</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/wizard.png" alt="extra-icons/designer/wizard.png"/></td><td width="400">:/designer/wizard.png</td><td width="400">extra-icons/designer/wizard.png</td><td width="200">wizard</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/groupwidget.png" alt="extra-icons/designer/groupwidget.png"/></td><td width="400">:/designer/groupwidget.png</td><td width="400">extra-icons/designer/groupwidget.png</td><td width="200">groupwidget</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/horizontal_linear_gauge.png" alt="extra-icons/designer/horizontal_linear_gauge.png"/></td><td width="400">:/designer/horizontal_linear_gauge.png</td><td width="400">extra-icons/designer/horizontal_linear_gauge.png</td><td width="200">horizontal_linear_gauge</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/hscrollbar.png" alt="extra-icons/designer/hscrollbar.png"/></td><td width="400">:/designer/hscrollbar.png</td><td width="400">extra-icons/designer/hscrollbar.png</td><td width="200">hscrollbar</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/hslider.png" alt="extra-icons/designer/hslider.png"/></td><td width="400">:/designer/hslider.png</td><td width="400">extra-icons/designer/hslider.png</td><td width="200">hslider</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/hsplit.png" alt="extra-icons/designer/hsplit.png"/></td><td width="400">:/designer/hsplit.png</td><td width="400">extra-icons/designer/hsplit.png</td><td width="200">hsplit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/widget.png" alt="extra-icons/designer/widget.png"/></td><td width="400">:/designer/widget.png</td><td width="400">extra-icons/designer/widget.png</td><td width="200">widget</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/devs_tree.png" alt="extra-icons/designer/devs_tree.png"/></td><td width="400">:/designer/devs_tree.png</td><td width="400">extra-icons/designer/devs_tree.png</td><td width="200">devs_tree</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/extra_motor.png" alt="extra-icons/designer/extra_motor.png"/></td><td width="400">:/designer/extra_motor.png</td><td width="400">extra-icons/designer/extra_motor.png</td><td width="200">extra_motor</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/toolbutton.png" alt="extra-icons/designer/toolbutton.png"/></td><td width="400">:/designer/toolbutton.png</td><td width="400">extra-icons/designer/toolbutton.png</td><td width="200">toolbutton</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/table.png" alt="extra-icons/designer/table.png"/></td><td width="400">:/designer/table.png</td><td width="400">extra-icons/designer/table.png</td><td width="200">table</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/tabwidget.png" alt="extra-icons/designer/tabwidget.png"/></td><td width="400">:/designer/tabwidget.png</td><td width="400">extra-icons/designer/tabwidget.png</td><td width="200">tabwidget</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/editdelete.png" alt="extra-icons/designer/editdelete.png"/></td><td width="400">:/designer/editdelete.png</td><td width="400">extra-icons/designer/editdelete.png</td><td width="200">editdelete</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/wheeledit.png" alt="extra-icons/designer/wheeledit.png"/></td><td width="400">:/designer/wheeledit.png</td><td width="400">extra-icons/designer/wheeledit.png</td><td width="200">wheeledit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/label.png" alt="extra-icons/designer/label.png"/></td><td width="400">:/designer/label.png</td><td width="400">extra-icons/designer/label.png</td><td width="200">label</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/lcdnumber.png" alt="extra-icons/designer/lcdnumber.png"/></td><td width="400">:/designer/lcdnumber.png</td><td width="400">extra-icons/designer/lcdnumber.png</td><td width="200">lcdnumber</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/ledred.png" alt="extra-icons/designer/ledred.png"/></td><td width="400">:/designer/ledred.png</td><td width="400">extra-icons/designer/ledred.png</td><td width="200">ledred</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/hscrollbar.png" alt="extra-icons/designer/hscrollbar.png"/></td><td width="400">:/designer/hscrollbar.png</td><td width="400">extra-icons/designer/hscrollbar.png</td><td width="200">hscrollbar</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/circular_gauge.png" alt="extra-icons/designer/circular_gauge.png"/></td><td width="400">:/designer/circular_gauge.png</td><td width="400">extra-icons/designer/circular_gauge.png</td><td width="200">circular_gauge</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/ledgreen.png" alt="extra-icons/designer/ledgreen.png"/></td><td width="400">:/designer/ledgreen.png</td><td width="400">extra-icons/designer/ledgreen.png</td><td width="200">ledgreen</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/line.png" alt="extra-icons/designer/line.png"/></td><td width="400">:/designer/line.png</td><td width="400">extra-icons/designer/line.png</td><td width="200">line</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/lineedit.png" alt="extra-icons/designer/lineedit.png"/></td><td width="400">:/designer/lineedit.png</td><td width="400">extra-icons/designer/lineedit.png</td><td width="200">lineedit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/listbox.png" alt="extra-icons/designer/listbox.png"/></td><td width="400">:/designer/listbox.png</td><td width="400">extra-icons/designer/listbox.png</td><td width="200">listbox</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/macroserver.png" alt="extra-icons/designer/macroserver.png"/></td><td width="400">:/designer/macroserver.png</td><td width="400">extra-icons/designer/macroserver.png</td><td width="200">macroserver</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/mdiarea.png" alt="extra-icons/designer/mdiarea.png"/></td><td width="400">:/designer/mdiarea.png</td><td width="400">extra-icons/designer/mdiarea.png</td><td width="200">mdiarea</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/minus.png" alt="extra-icons/designer/minus.png"/></td><td width="400">:/designer/minus.png</td><td width="400">extra-icons/designer/minus.png</td><td width="200">minus</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/plaintextedit.png" alt="extra-icons/designer/plaintextedit.png"/></td><td width="400">:/designer/plaintextedit.png</td><td width="400">extra-icons/designer/plaintextedit.png</td><td width="200">plaintextedit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/plus.png" alt="extra-icons/designer/plus.png"/></td><td width="400">:/designer/plus.png</td><td width="400">extra-icons/designer/plus.png</td><td width="200">plus</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/progress.png" alt="extra-icons/designer/progress.png"/></td><td width="400">:/designer/progress.png</td><td width="400">extra-icons/designer/progress.png</td><td width="200">progress</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/props_table.png" alt="extra-icons/designer/props_table.png"/></td><td width="400">:/designer/props_table.png</td><td width="400">extra-icons/designer/props_table.png</td><td width="200">props_table</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/pushbutton.png" alt="extra-icons/designer/pushbutton.png"/></td><td width="400">:/designer/pushbutton.png</td><td width="400">extra-icons/designer/pushbutton.png</td><td width="200">pushbutton</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/qwtplot.png" alt="extra-icons/designer/qwtplot.png"/></td><td width="400">:/designer/qwtplot.png</td><td width="400">extra-icons/designer/qwtplot.png</td><td width="200">qwtplot</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/tau.png" alt="extra-icons/designer/tau.png"/></td><td width="400">:/designer/tau.png</td><td width="400">extra-icons/designer/tau.png</td><td width="200">tau</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/spacer.png" alt="extra-icons/designer/spacer.png"/></td><td width="400">:/designer/spacer.png</td><td width="400">extra-icons/designer/spacer.png</td><td width="200">spacer</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/checkbox.png" alt="extra-icons/designer/checkbox.png"/></td><td width="400">:/designer/checkbox.png</td><td width="400">extra-icons/designer/checkbox.png</td><td width="200">checkbox</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/dial.png" alt="extra-icons/designer/dial.png"/></td><td width="400">:/designer/dial.png</td><td width="400">extra-icons/designer/dial.png</td><td width="200">dial</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/combobox.png" alt="extra-icons/designer/combobox.png"/></td><td width="400">:/designer/combobox.png</td><td width="400">extra-icons/designer/combobox.png</td><td width="200">combobox</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/radiobutton.png" alt="extra-icons/designer/radiobutton.png"/></td><td width="400">:/designer/radiobutton.png</td><td width="400">extra-icons/designer/radiobutton.png</td><td width="200">radiobutton</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/scheduler.png" alt="extra-icons/designer/scheduler.png"/></td><td width="400">:/designer/scheduler.png</td><td width="400">extra-icons/designer/scheduler.png</td><td width="200">scheduler</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/scrollarea.png" alt="extra-icons/designer/scrollarea.png"/></td><td width="400">:/designer/scrollarea.png</td><td width="400">extra-icons/designer/scrollarea.png</td><td width="200">scrollarea</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/spacer.png" alt="extra-icons/designer/spacer.png"/></td><td width="400">:/designer/spacer.png</td><td width="400">extra-icons/designer/spacer.png</td><td width="200">spacer</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/spinbox.png" alt="extra-icons/designer/spinbox.png"/></td><td width="400">:/designer/spinbox.png</td><td width="400">extra-icons/designer/spinbox.png</td><td width="200">spinbox</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/textedit.png" alt="extra-icons/designer/textedit.png"/></td><td width="400">:/designer/textedit.png</td><td width="400">extra-icons/designer/textedit.png</td><td width="200">textedit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vspacer.png" alt="extra-icons/designer/vspacer.png"/></td><td width="400">:/designer/vspacer.png</td><td width="400">extra-icons/designer/vspacer.png</td><td width="200">vspacer</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/dialogbuttonbox.png" alt="extra-icons/designer/dialogbuttonbox.png"/></td><td width="400">:/designer/dialogbuttonbox.png</td><td width="400">extra-icons/designer/dialogbuttonbox.png</td><td width="200">dialogbuttonbox</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/widgetstack.png" alt="extra-icons/designer/widgetstack.png"/></td><td width="400">:/designer/widgetstack.png</td><td width="400">extra-icons/designer/widgetstack.png</td><td width="200">widgetstack</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/state.png" alt="extra-icons/designer/state.png"/></td><td width="400">:/designer/state.png</td><td width="400">extra-icons/designer/state.png</td><td width="200">state</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/line.png" alt="extra-icons/designer/line.png"/></td><td width="400">:/designer/line.png</td><td width="400">extra-icons/designer/line.png</td><td width="200">line</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/columnview.png" alt="extra-icons/designer/columnview.png"/></td><td width="400">:/designer/columnview.png</td><td width="400">extra-icons/designer/columnview.png</td><td width="200">columnview</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/grid.png" alt="extra-icons/designer/grid.png"/></td><td width="400">:/designer/grid.png</td><td width="400">extra-icons/designer/grid.png</td><td width="200">grid</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/tabbar.png" alt="extra-icons/designer/tabbar.png"/></td><td width="400">:/designer/tabbar.png</td><td width="400">extra-icons/designer/tabbar.png</td><td width="200">tabbar</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/table.png" alt="extra-icons/designer/table.png"/></td><td width="400">:/designer/table.png</td><td width="400">extra-icons/designer/table.png</td><td width="200">table</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/tabwidget.png" alt="extra-icons/designer/tabwidget.png"/></td><td width="400">:/designer/tabwidget.png</td><td width="400">extra-icons/designer/tabwidget.png</td><td width="200">tabwidget</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/tau.png" alt="extra-icons/designer/tau.png"/></td><td width="400">:/designer/tau.png</td><td width="400">extra-icons/designer/tau.png</td><td width="200">tau</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/taurus.png" alt="extra-icons/designer/taurus.png"/></td><td width="400">:/designer/taurus.png</td><td width="400">extra-icons/designer/taurus.png</td><td width="200">taurus</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/textedit.png" alt="extra-icons/designer/textedit.png"/></td><td width="400">:/designer/textedit.png</td><td width="400">extra-icons/designer/textedit.png</td><td width="200">textedit</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/timeedit.png" alt="extra-icons/designer/timeedit.png"/></td><td width="400">:/designer/timeedit.png</td><td width="400">extra-icons/designer/timeedit.png</td><td width="200">timeedit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/zoomin.png" alt="extra-icons/designer/zoomin.png"/></td><td width="400">:/designer/zoomin.png</td><td width="400">extra-icons/designer/zoomin.png</td><td width="200">zoomin</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/toolbox.png" alt="extra-icons/designer/toolbox.png"/></td><td width="400">:/designer/toolbox.png</td><td width="400">extra-icons/designer/toolbox.png</td><td width="200">toolbox</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/toolbutton.png" alt="extra-icons/designer/toolbutton.png"/></td><td width="400">:/designer/toolbutton.png</td><td width="400">extra-icons/designer/toolbutton.png</td><td width="200">toolbutton</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/up.png" alt="extra-icons/designer/up.png"/></td><td width="400">:/designer/up.png</td><td width="400">extra-icons/designer/up.png</td><td width="200">up</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/arrayedit.png" alt="extra-icons/designer/arrayedit.png"/></td><td width="400">:/designer/arrayedit.png</td><td width="400">extra-icons/designer/arrayedit.png</td><td width="200">arrayedit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/minus.png" alt="extra-icons/designer/minus.png"/></td><td width="400">:/designer/minus.png</td><td width="400">extra-icons/designer/minus.png</td><td width="200">minus</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/calendarwidget.png" alt="extra-icons/designer/calendarwidget.png"/></td><td width="400">:/designer/calendarwidget.png</td><td width="400">extra-icons/designer/calendarwidget.png</td><td width="200">calendarwidget</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/filereader.png" alt="extra-icons/designer/filereader.png"/></td><td width="400">:/designer/filereader.png</td><td width="400">extra-icons/designer/filereader.png</td><td width="200">filereader</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/horizontal_linear_gauge.png" alt="extra-icons/designer/horizontal_linear_gauge.png"/></td><td width="400">:/designer/horizontal_linear_gauge.png</td><td width="400">extra-icons/designer/horizontal_linear_gauge.png</td><td width="200">horizontal_linear_gauge</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/ledgreen.png" alt="extra-icons/designer/ledgreen.png"/></td><td width="400">:/designer/ledgreen.png</td><td width="400">extra-icons/designer/ledgreen.png</td><td width="200">ledgreen</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/plaintextedit.png" alt="extra-icons/designer/plaintextedit.png"/></td><td width="400">:/designer/plaintextedit.png</td><td width="400">extra-icons/designer/plaintextedit.png</td><td width="200">plaintextedit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/mdiarea.png" alt="extra-icons/designer/mdiarea.png"/></td><td width="400">:/designer/mdiarea.png</td><td width="400">extra-icons/designer/mdiarea.png</td><td width="200">mdiarea</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vslider.png" alt="extra-icons/designer/vslider.png"/></td><td width="400">:/designer/vslider.png</td><td width="400">extra-icons/designer/vslider.png</td><td width="200">vslider</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/commandlinkbutton.png" alt="extra-icons/designer/commandlinkbutton.png"/></td><td width="400">:/designer/commandlinkbutton.png</td><td width="400">extra-icons/designer/commandlinkbutton.png</td><td width="200">commandlinkbutton</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/forward.png" alt="extra-icons/designer/forward.png"/></td><td width="400">:/designer/forward.png</td><td width="400">extra-icons/designer/forward.png</td><td width="200">forward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/lcdnumber.png" alt="extra-icons/designer/lcdnumber.png"/></td><td width="400">:/designer/lcdnumber.png</td><td width="400">extra-icons/designer/lcdnumber.png</td><td width="200">lcdnumber</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/frame.png" alt="extra-icons/designer/frame.png"/></td><td width="400">:/designer/frame.png</td><td width="400">extra-icons/designer/frame.png</td><td width="200">frame</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/taurus.png" alt="extra-icons/designer/taurus.png"/></td><td width="400">:/designer/taurus.png</td><td width="400">extra-icons/designer/taurus.png</td><td width="200">taurus</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/datetimeedit.png" alt="extra-icons/designer/datetimeedit.png"/></td><td width="400">:/designer/datetimeedit.png</td><td width="400">extra-icons/designer/datetimeedit.png</td><td width="200">datetimeedit</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/compression.png" alt="extra-icons/designer/compression.png"/></td><td width="400">:/designer/compression.png</td><td width="400">extra-icons/designer/compression.png</td><td width="200">compression</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/hslider.png" alt="extra-icons/designer/hslider.png"/></td><td width="400">:/designer/hslider.png</td><td width="400">extra-icons/designer/hslider.png</td><td width="200">hslider</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vscrollbar.png" alt="extra-icons/designer/vscrollbar.png"/></td><td width="400">:/designer/vscrollbar.png</td><td width="400">extra-icons/designer/vscrollbar.png</td><td width="200">vscrollbar</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/devs_table.png" alt="extra-icons/designer/devs_table.png"/></td><td width="400">:/designer/devs_table.png</td><td width="400">extra-icons/designer/devs_table.png</td><td width="200">devs_table</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/scrollarea.png" alt="extra-icons/designer/scrollarea.png"/></td><td width="400">:/designer/scrollarea.png</td><td width="400">extra-icons/designer/scrollarea.png</td><td width="200">scrollarea</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/groupwidget.png" alt="extra-icons/designer/groupwidget.png"/></td><td width="400">:/designer/groupwidget.png</td><td width="400">extra-icons/designer/groupwidget.png</td><td width="200">groupwidget</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/macroserver.png" alt="extra-icons/designer/macroserver.png"/></td><td width="400">:/designer/macroserver.png</td><td width="400">extra-icons/designer/macroserver.png</td><td width="200">macroserver</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/plus.png" alt="extra-icons/designer/plus.png"/></td><td width="400">:/designer/plus.png</td><td width="400">extra-icons/designer/plus.png</td><td width="200">plus</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vertical_linear_gauge.png" alt="extra-icons/designer/vertical_linear_gauge.png"/></td><td width="400">:/designer/vertical_linear_gauge.png</td><td width="400">extra-icons/designer/vertical_linear_gauge.png</td><td width="200">vertical_linear_gauge</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/listbox.png" alt="extra-icons/designer/listbox.png"/></td><td width="400">:/designer/listbox.png</td><td width="400">extra-icons/designer/listbox.png</td><td width="200">listbox</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/fontcombobox.png" alt="extra-icons/designer/fontcombobox.png"/></td><td width="400">:/designer/fontcombobox.png</td><td width="400">extra-icons/designer/fontcombobox.png</td><td width="200">fontcombobox</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/tabbar.png" alt="extra-icons/designer/tabbar.png"/></td><td width="400">:/designer/tabbar.png</td><td width="400">extra-icons/designer/tabbar.png</td><td width="200">tabbar</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/pushbutton.png" alt="extra-icons/designer/pushbutton.png"/></td><td width="400">:/designer/pushbutton.png</td><td width="400">extra-icons/designer/pushbutton.png</td><td width="200">pushbutton</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/doublespinbox.png" alt="extra-icons/designer/doublespinbox.png"/></td><td width="400">:/designer/doublespinbox.png</td><td width="400">extra-icons/designer/doublespinbox.png</td><td width="200">doublespinbox</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vline.png" alt="extra-icons/designer/vline.png"/></td><td width="400">:/designer/vline.png</td><td width="400">extra-icons/designer/vline.png</td><td width="200">vline</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vscrollbar.png" alt="extra-icons/designer/vscrollbar.png"/></td><td width="400">:/designer/vscrollbar.png</td><td width="400">extra-icons/designer/vscrollbar.png</td><td width="200">vscrollbar</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vslider.png" alt="extra-icons/designer/vslider.png"/></td><td width="400">:/designer/vslider.png</td><td width="400">extra-icons/designer/vslider.png</td><td width="200">vslider</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/vspacer.png" alt="extra-icons/designer/vspacer.png"/></td><td width="400">:/designer/vspacer.png</td><td width="400">extra-icons/designer/vspacer.png</td><td width="200">vspacer</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/wheeledit.png" alt="extra-icons/designer/wheeledit.png"/></td><td width="400">:/designer/wheeledit.png</td><td width="400">extra-icons/designer/wheeledit.png</td><td width="200">wheeledit</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/widget.png" alt="extra-icons/designer/widget.png"/></td><td width="400">:/designer/widget.png</td><td width="400">extra-icons/designer/widget.png</td><td width="200">widget</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/widgetstack.png" alt="extra-icons/designer/widgetstack.png"/></td><td width="400">:/designer/widgetstack.png</td><td width="400">extra-icons/designer/widgetstack.png</td><td width="200">widgetstack</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/wizard.png" alt="extra-icons/designer/wizard.png"/></td><td width="400">:/designer/wizard.png</td><td width="400">extra-icons/designer/wizard.png</td><td width="200">wizard</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/zoomin.png" alt="extra-icons/designer/zoomin.png"/></td><td width="400">:/designer/zoomin.png</td><td width="400">extra-icons/designer/zoomin.png</td><td width="200">zoomin</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/designer/zoomout.png" alt="extra-icons/designer/zoomout.png"/></td><td width="400">:/designer/zoomout.png</td><td width="400">extra-icons/designer/zoomout.png</td><td width="200">zoomout</td></tr>
 </table>
-<h2><a name="extra-icons/actions">:/actions/ (extra-icons/actions)</a></h2>
+<h2><a name="extra-icons/leds/images24">:/leds/images24/ (extra-icons/leds/images24)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/actions/" Directory: "extra-icons/actions"</th>
+<th colspan="4">Resource: ":/leds/images24/" Directory: "extra-icons/leds/images24"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_stop.png" alt="extra-icons/actions/media_playback_stop.svg"/></td><td width="400">:/actions/media_playback_stop.svg</td><td width="400">extra-icons/actions/media_playback_stop.svg</td><td width="200">media_playback_stop</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_seek_backward.png" alt="extra-icons/actions/media_seek_backward.svg"/></td><td width="400">:/actions/media_seek_backward.svg</td><td width="400">extra-icons/actions/media_seek_backward.svg</td><td width="200">media_seek_backward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_skip_forward.png" alt="extra-icons/actions/media_skip_forward.svg"/></td><td width="400">:/actions/media_skip_forward.svg</td><td width="400">extra-icons/actions/media_skip_forward.svg</td><td width="200">media_skip_forward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_stop_green.png" alt="extra-icons/actions/media_playback_stop_green.svg"/></td><td width="400">:/actions/media_playback_stop_green.svg</td><td width="400">extra-icons/actions/media_playback_stop_green.svg</td><td width="200">media_playback_stop_green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media-seek-backward-green.png" alt="extra-icons/actions/media-seek-backward-green.svg"/></td><td width="400">:/actions/media-seek-backward-green.svg</td><td width="400">extra-icons/actions/media-seek-backward-green.svg</td><td width="200">media-seek-backward-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_seek_forward.png" alt="extra-icons/actions/media_seek_forward.svg"/></td><td width="400">:/actions/media_seek_forward.svg</td><td width="400">extra-icons/actions/media_seek_forward.svg</td><td width="200">media_seek_forward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_backward.png" alt="extra-icons/actions/media_playback_backward.svg"/></td><td width="400">:/actions/media_playback_backward.svg</td><td width="400">extra-icons/actions/media_playback_backward.svg</td><td width="200">media_playback_backward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media-seek-forward-green.png" alt="extra-icons/actions/media-seek-forward-green.svg"/></td><td width="400">:/actions/media-seek-forward-green.svg</td><td width="400">extra-icons/actions/media-seek-forward-green.svg</td><td width="200">media-seek-forward-green</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/collapse.png" alt="extra-icons/actions/collapse.png"/></td><td width="400">:/actions/collapse.png</td><td width="400">extra-icons/actions/collapse.png</td><td width="200">collapse</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/go-backward.png" alt="extra-icons/actions/go-backward.svg"/></td><td width="400">:/actions/go-backward.svg</td><td width="400">extra-icons/actions/go-backward.svg</td><td width="200">go-backward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/stop.png" alt="extra-icons/actions/stop.svg"/></td><td width="400">:/actions/stop.svg</td><td width="400">extra-icons/actions/stop.svg</td><td width="200">stop</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/expand-selection.png" alt="extra-icons/actions/expand-selection.png"/></td><td width="400">:/actions/expand-selection.png</td><td width="400">extra-icons/actions/expand-selection.png</td><td width="200">expand-selection</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/expand-all.png" alt="extra-icons/actions/expand-all.svg"/></td><td width="400">:/actions/expand-all.svg</td><td width="400">extra-icons/actions/expand-all.svg</td><td width="200">expand-all</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/go-forward.png" alt="extra-icons/actions/go-forward.svg"/></td><td width="400">:/actions/go-forward.svg</td><td width="400">extra-icons/actions/go-forward.svg</td><td width="200">go-forward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/collapse-all.png" alt="extra-icons/actions/collapse-all.svg"/></td><td width="400">:/actions/collapse-all.svg</td><td width="400">extra-icons/actions/collapse-all.svg</td><td width="200">collapse-all</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_pause.png" alt="extra-icons/actions/media_playback_pause.svg"/></td><td width="400">:/actions/media_playback_pause.svg</td><td width="400">extra-icons/actions/media_playback_pause.svg</td><td width="200">media_playback_pause</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/expand.png" alt="extra-icons/actions/expand.png"/></td><td width="400">:/actions/expand.png</td><td width="400">extra-icons/actions/expand.png</td><td width="200">expand</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_playback_start.png" alt="extra-icons/actions/media_playback_start.svg"/></td><td width="400">:/actions/media_playback_start.svg</td><td width="400">extra-icons/actions/media_playback_start.svg</td><td width="200">media_playback_start</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/media_skip_backward.png" alt="extra-icons/actions/media_skip_backward.svg"/></td><td width="400">:/actions/media_skip_backward.svg</td><td width="400">extra-icons/actions/media_skip_backward.svg</td><td width="200">media_skip_backward</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/actions/collapse-selection.png" alt="extra-icons/actions/collapse-selection.png"/></td><td width="400">:/actions/collapse-selection.png</td><td width="400">extra-icons/actions/collapse-selection.png</td><td width="200">collapse-selection</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledblue.png" alt="extra-icons/leds/images24/ledblue.png"/></td><td width="400">:/leds/images24/ledblue.png</td><td width="400">extra-icons/leds/images24/ledblue.png</td><td width="200">ledblue</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledblueoff.png" alt="extra-icons/leds/images24/ledblueoff.png"/></td><td width="400">:/leds/images24/ledblueoff.png</td><td width="400">extra-icons/leds/images24/ledblueoff.png</td><td width="200">ledblueoff</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledgreen.png" alt="extra-icons/leds/images24/ledgreen.png"/></td><td width="400">:/leds/images24/ledgreen.png</td><td width="400">extra-icons/leds/images24/ledgreen.png</td><td width="200">ledgreen</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledgreenoff.png" alt="extra-icons/leds/images24/ledgreenoff.png"/></td><td width="400">:/leds/images24/ledgreenoff.png</td><td width="400">extra-icons/leds/images24/ledgreenoff.png</td><td width="200">ledgreenoff</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledorange.png" alt="extra-icons/leds/images24/ledorange.png"/></td><td width="400">:/leds/images24/ledorange.png</td><td width="400">extra-icons/leds/images24/ledorange.png</td><td width="200">ledorange</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledorangeoff.png" alt="extra-icons/leds/images24/ledorangeoff.png"/></td><td width="400">:/leds/images24/ledorangeoff.png</td><td width="400">extra-icons/leds/images24/ledorangeoff.png</td><td width="200">ledorangeoff</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledred.png" alt="extra-icons/leds/images24/ledred.png"/></td><td width="400">:/leds/images24/ledred.png</td><td width="400">extra-icons/leds/images24/ledred.png</td><td width="200">ledred</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledredoff.png" alt="extra-icons/leds/images24/ledredoff.png"/></td><td width="400">:/leds/images24/ledredoff.png</td><td width="400">extra-icons/leds/images24/ledredoff.png</td><td width="200">ledredoff</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledyellow.png" alt="extra-icons/leds/images24/ledyellow.png"/></td><td width="400">:/leds/images24/ledyellow.png</td><td width="400">extra-icons/leds/images24/ledyellow.png</td><td width="200">ledyellow</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledyellowoff.png" alt="extra-icons/leds/images24/ledyellowoff.png"/></td><td width="400">:/leds/images24/ledyellowoff.png</td><td width="400">extra-icons/leds/images24/ledyellowoff.png</td><td width="200">ledyellowoff</td></tr>
 </table>
 <h2><a name="extra-icons/leds/images256">:/leds/images256/ (extra-icons/leds/images256)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/leds/images256/" Directory: "extra-icons/leds/images256"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_yellow_off.png" alt="extra-icons/leds/images256/led_yellow_off.png"/></td><td width="400">:/leds/images256/led_yellow_off.png</td><td width="400">extra-icons/leds/images256/led_yellow_off.png</td><td width="200">led_yellow_off</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_red_on.png" alt="extra-icons/leds/images256/led_red_on.png"/></td><td width="400">:/leds/images256/led_red_on.png</td><td width="400">extra-icons/leds/images256/led_red_on.png</td><td width="200">led_red_on</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_white_on.png" alt="extra-icons/leds/images256/led_white_on.png"/></td><td width="400">:/leds/images256/led_white_on.png</td><td width="400">extra-icons/leds/images256/led_white_on.png</td><td width="200">led_white_on</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_green_on.png" alt="extra-icons/leds/images256/led_green_on.png"/></td><td width="400">:/leds/images256/led_green_on.png</td><td width="400">extra-icons/leds/images256/led_green_on.png</td><td width="200">led_green_on</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_blue_on.png" alt="extra-icons/leds/images256/led_blue_on.png"/></td><td width="400">:/leds/images256/led_blue_on.png</td><td width="400">extra-icons/leds/images256/led_blue_on.png</td><td width="200">led_blue_on</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_magenta_off.png" alt="extra-icons/leds/images256/led_magenta_off.png"/></td><td width="400">:/leds/images256/led_magenta_off.png</td><td width="400">extra-icons/leds/images256/led_magenta_off.png</td><td width="200">led_magenta_off</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_off.png" alt="extra-icons/leds/images256/led_off.png"/></td><td width="400">:/leds/images256/led_off.png</td><td width="400">extra-icons/leds/images256/led_off.png</td><td width="200">led_off</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_orange_on.png" alt="extra-icons/leds/images256/led_orange_on.png"/></td><td width="400">:/leds/images256/led_orange_on.png</td><td width="400">extra-icons/leds/images256/led_orange_on.png</td><td width="200">led_orange_on</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_blue_off.png" alt="extra-icons/leds/images256/led_blue_off.png"/></td><td width="400">:/leds/images256/led_blue_off.png</td><td width="400">extra-icons/leds/images256/led_blue_off.png</td><td width="200">led_blue_off</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_black_off.png" alt="extra-icons/leds/images256/led_black_off.png"/></td><td width="400">:/leds/images256/led_black_off.png</td><td width="400">extra-icons/leds/images256/led_black_off.png</td><td width="200">led_black_off</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_black_on.png" alt="extra-icons/leds/images256/led_black_on.png"/></td><td width="400">:/leds/images256/led_black_on.png</td><td width="400">extra-icons/leds/images256/led_black_on.png</td><td width="200">led_black_on</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_blue_off.png" alt="extra-icons/leds/images256/led_blue_off.png"/></td><td width="400">:/leds/images256/led_blue_off.png</td><td width="400">extra-icons/leds/images256/led_blue_off.png</td><td width="200">led_blue_off</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_blue_on.png" alt="extra-icons/leds/images256/led_blue_on.png"/></td><td width="400">:/leds/images256/led_blue_on.png</td><td width="400">extra-icons/leds/images256/led_blue_on.png</td><td width="200">led_blue_on</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_green_off.png" alt="extra-icons/leds/images256/led_green_off.png"/></td><td width="400">:/leds/images256/led_green_off.png</td><td width="400">extra-icons/leds/images256/led_green_off.png</td><td width="200">led_green_off</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_green_on.png" alt="extra-icons/leds/images256/led_green_on.png"/></td><td width="400">:/leds/images256/led_green_on.png</td><td width="400">extra-icons/leds/images256/led_green_on.png</td><td width="200">led_green_on</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_grenoble_off.png" alt="extra-icons/leds/images256/led_grenoble_off.png"/></td><td width="400">:/leds/images256/led_grenoble_off.png</td><td width="400">extra-icons/leds/images256/led_grenoble_off.png</td><td width="200">led_grenoble_off</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_grenoble_on.png" alt="extra-icons/leds/images256/led_grenoble_on.png"/></td><td width="400">:/leds/images256/led_grenoble_on.png</td><td width="400">extra-icons/leds/images256/led_grenoble_on.png</td><td width="200">led_grenoble_on</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_magenta_off.png" alt="extra-icons/leds/images256/led_magenta_off.png"/></td><td width="400">:/leds/images256/led_magenta_off.png</td><td width="400">extra-icons/leds/images256/led_magenta_off.png</td><td width="200">led_magenta_off</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_magenta_on.png" alt="extra-icons/leds/images256/led_magenta_on.png"/></td><td width="400">:/leds/images256/led_magenta_on.png</td><td width="400">extra-icons/leds/images256/led_magenta_on.png</td><td width="200">led_magenta_on</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_off.png" alt="extra-icons/leds/images256/led_off.png"/></td><td width="400">:/leds/images256/led_off.png</td><td width="400">extra-icons/leds/images256/led_off.png</td><td width="200">led_off</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_orange_off.png" alt="extra-icons/leds/images256/led_orange_off.png"/></td><td width="400">:/leds/images256/led_orange_off.png</td><td width="400">extra-icons/leds/images256/led_orange_off.png</td><td width="200">led_orange_off</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_orange_on.png" alt="extra-icons/leds/images256/led_orange_on.png"/></td><td width="400">:/leds/images256/led_orange_on.png</td><td width="400">extra-icons/leds/images256/led_orange_on.png</td><td width="200">led_orange_on</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_red_off.png" alt="extra-icons/leds/images256/led_red_off.png"/></td><td width="400">:/leds/images256/led_red_off.png</td><td width="400">extra-icons/leds/images256/led_red_off.png</td><td width="200">led_red_off</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_yellow_on.png" alt="extra-icons/leds/images256/led_yellow_on.png"/></td><td width="400">:/leds/images256/led_yellow_on.png</td><td width="400">extra-icons/leds/images256/led_yellow_on.png</td><td width="200">led_yellow_on</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_green_off.png" alt="extra-icons/leds/images256/led_green_off.png"/></td><td width="400">:/leds/images256/led_green_off.png</td><td width="400">extra-icons/leds/images256/led_green_off.png</td><td width="200">led_green_off</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_red_on.png" alt="extra-icons/leds/images256/led_red_on.png"/></td><td width="400">:/leds/images256/led_red_on.png</td><td width="400">extra-icons/leds/images256/led_red_on.png</td><td width="200">led_red_on</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_white_off.png" alt="extra-icons/leds/images256/led_white_off.png"/></td><td width="400">:/leds/images256/led_white_off.png</td><td width="400">extra-icons/leds/images256/led_white_off.png</td><td width="200">led_white_off</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_black_off.png" alt="extra-icons/leds/images256/led_black_off.png"/></td><td width="400">:/leds/images256/led_black_off.png</td><td width="400">extra-icons/leds/images256/led_black_off.png</td><td width="200">led_black_off</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_white_on.png" alt="extra-icons/leds/images256/led_white_on.png"/></td><td width="400">:/leds/images256/led_white_on.png</td><td width="400">extra-icons/leds/images256/led_white_on.png</td><td width="200">led_white_on</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_yellow_off.png" alt="extra-icons/leds/images256/led_yellow_off.png"/></td><td width="400">:/leds/images256/led_yellow_off.png</td><td width="400">extra-icons/leds/images256/led_yellow_off.png</td><td width="200">led_yellow_off</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images256/led_yellow_on.png" alt="extra-icons/leds/images256/led_yellow_on.png"/></td><td width="400">:/leds/images256/led_yellow_on.png</td><td width="400">extra-icons/leds/images256/led_yellow_on.png</td><td width="200">led_yellow_on</td></tr>
 </table>
 <h2><a name="extra-icons/leds/images48">:/leds/images48/ (extra-icons/leds/images48)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/leds/images48/" Directory: "extra-icons/leds/images48"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledblue.png" alt="extra-icons/leds/images48/ledblue.png"/></td><td width="400">:/leds/images48/ledblue.png</td><td width="400">extra-icons/leds/images48/ledblue.png</td><td width="200">ledblue</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledorange.png" alt="extra-icons/leds/images48/ledorange.png"/></td><td width="400">:/leds/images48/ledorange.png</td><td width="400">extra-icons/leds/images48/ledorange.png</td><td width="200">ledorange</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledblueoff.png" alt="extra-icons/leds/images48/ledblueoff.png"/></td><td width="400">:/leds/images48/ledblueoff.png</td><td width="400">extra-icons/leds/images48/ledblueoff.png</td><td width="200">ledblueoff</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledgreen.png" alt="extra-icons/leds/images48/ledgreen.png"/></td><td width="400">:/leds/images48/ledgreen.png</td><td width="400">extra-icons/leds/images48/ledgreen.png</td><td width="200">ledgreen</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledgreenoff.png" alt="extra-icons/leds/images48/ledgreenoff.png"/></td><td width="400">:/leds/images48/ledgreenoff.png</td><td width="400">extra-icons/leds/images48/ledgreenoff.png</td><td width="200">ledgreenoff</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledyellowoff.png" alt="extra-icons/leds/images48/ledyellowoff.png"/></td><td width="400">:/leds/images48/ledyellowoff.png</td><td width="400">extra-icons/leds/images48/ledyellowoff.png</td><td width="200">ledyellowoff</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledorange.png" alt="extra-icons/leds/images48/ledorange.png"/></td><td width="400">:/leds/images48/ledorange.png</td><td width="400">extra-icons/leds/images48/ledorange.png</td><td width="200">ledorange</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledorangeoff.png" alt="extra-icons/leds/images48/ledorangeoff.png"/></td><td width="400">:/leds/images48/ledorangeoff.png</td><td width="400">extra-icons/leds/images48/ledorangeoff.png</td><td width="200">ledorangeoff</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledred.png" alt="extra-icons/leds/images48/ledred.png"/></td><td width="400">:/leds/images48/ledred.png</td><td width="400">extra-icons/leds/images48/ledred.png</td><td width="200">ledred</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledredoff.png" alt="extra-icons/leds/images48/ledredoff.png"/></td><td width="400">:/leds/images48/ledredoff.png</td><td width="400">extra-icons/leds/images48/ledredoff.png</td><td width="200">ledredoff</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledyellow.png" alt="extra-icons/leds/images48/ledyellow.png"/></td><td width="400">:/leds/images48/ledyellow.png</td><td width="400">extra-icons/leds/images48/ledyellow.png</td><td width="200">ledyellow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledred.png" alt="extra-icons/leds/images48/ledred.png"/></td><td width="400">:/leds/images48/ledred.png</td><td width="400">extra-icons/leds/images48/ledred.png</td><td width="200">ledred</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledorangeoff.png" alt="extra-icons/leds/images48/ledorangeoff.png"/></td><td width="400">:/leds/images48/ledorangeoff.png</td><td width="400">extra-icons/leds/images48/ledorangeoff.png</td><td width="200">ledorangeoff</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledgreen.png" alt="extra-icons/leds/images48/ledgreen.png"/></td><td width="400">:/leds/images48/ledgreen.png</td><td width="400">extra-icons/leds/images48/ledgreen.png</td><td width="200">ledgreen</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledblueoff.png" alt="extra-icons/leds/images48/ledblueoff.png"/></td><td width="400">:/leds/images48/ledblueoff.png</td><td width="400">extra-icons/leds/images48/ledblueoff.png</td><td width="200">ledblueoff</td></tr>
-</table>
-<h2><a name="extra-icons/leds/images24">:/leds/images24/ (extra-icons/leds/images24)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/leds/images24/" Directory: "extra-icons/leds/images24"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledgreen.png" alt="extra-icons/leds/images24/ledgreen.png"/></td><td width="400">:/leds/images24/ledgreen.png</td><td width="400">extra-icons/leds/images24/ledgreen.png</td><td width="200">ledgreen</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledorangeoff.png" alt="extra-icons/leds/images24/ledorangeoff.png"/></td><td width="400">:/leds/images24/ledorangeoff.png</td><td width="400">extra-icons/leds/images24/ledorangeoff.png</td><td width="200">ledorangeoff</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledorange.png" alt="extra-icons/leds/images24/ledorange.png"/></td><td width="400">:/leds/images24/ledorange.png</td><td width="400">extra-icons/leds/images24/ledorange.png</td><td width="200">ledorange</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledblueoff.png" alt="extra-icons/leds/images24/ledblueoff.png"/></td><td width="400">:/leds/images24/ledblueoff.png</td><td width="400">extra-icons/leds/images24/ledblueoff.png</td><td width="200">ledblueoff</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledgreenoff.png" alt="extra-icons/leds/images24/ledgreenoff.png"/></td><td width="400">:/leds/images24/ledgreenoff.png</td><td width="400">extra-icons/leds/images24/ledgreenoff.png</td><td width="200">ledgreenoff</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledyellowoff.png" alt="extra-icons/leds/images24/ledyellowoff.png"/></td><td width="400">:/leds/images24/ledyellowoff.png</td><td width="400">extra-icons/leds/images24/ledyellowoff.png</td><td width="200">ledyellowoff</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledred.png" alt="extra-icons/leds/images24/ledred.png"/></td><td width="400">:/leds/images24/ledred.png</td><td width="400">extra-icons/leds/images24/ledred.png</td><td width="200">ledred</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledblue.png" alt="extra-icons/leds/images24/ledblue.png"/></td><td width="400">:/leds/images24/ledblue.png</td><td width="400">extra-icons/leds/images24/ledblue.png</td><td width="200">ledblue</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledyellow.png" alt="extra-icons/leds/images24/ledyellow.png"/></td><td width="400">:/leds/images24/ledyellow.png</td><td width="400">extra-icons/leds/images24/ledyellow.png</td><td width="200">ledyellow</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images24/ledredoff.png" alt="extra-icons/leds/images24/ledredoff.png"/></td><td width="400">:/leds/images24/ledredoff.png</td><td width="400">extra-icons/leds/images24/ledredoff.png</td><td width="200">ledredoff</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/leds/images48/ledyellowoff.png" alt="extra-icons/leds/images48/ledyellowoff.png"/></td><td width="400">:/leds/images48/ledyellowoff.png</td><td width="400">extra-icons/leds/images48/ledyellowoff.png</td><td width="200">ledyellowoff</td></tr>
 </table>
 <h2><a name="extra-icons">:/ (extra-icons)</a></h2>
 <table border="1" cellspacing="0" cellpadding="2">
 <th colspan="4">Resource: ":/" Directory: "extra-icons"</th>
 <tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/arrow01.png" alt="extra-icons/arrow01.svg"/></td><td width="400">:/arrow01.svg</td><td width="400">extra-icons/arrow01.svg</td><td width="200">arrow01</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/lock_unknown.png" alt="extra-icons/lock_unknown.svg"/></td><td width="400">:/lock_unknown.svg</td><td width="400">extra-icons/lock_unknown.svg</td><td width="200">lock_unknown</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_close_white.png" alt="extra-icons/titlebar_close_white.png"/></td><td width="400">:/titlebar_close_white.png</td><td width="400">extra-icons/titlebar_close_white.png</td><td width="200">titlebar_close_white</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_close.png" alt="extra-icons/titlebar_close.png"/></td><td width="400">:/titlebar_close.png</td><td width="400">extra-icons/titlebar_close.png</td><td width="200">titlebar_close</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/color-fill.png" alt="extra-icons/color-fill.svg"/></td><td width="400">:/color-fill.svg</td><td width="400">extra-icons/color-fill.svg</td><td width="200">color-fill</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/lock_locked.png" alt="extra-icons/lock_locked.svg"/></td><td width="400">:/lock_locked.svg</td><td width="400">extra-icons/lock_locked.svg</td><td width="200">lock_locked</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/lock_unlocked.png" alt="extra-icons/lock_unlocked.svg"/></td><td width="400">:/lock_unlocked.svg</td><td width="400">extra-icons/lock_unlocked.svg</td><td width="200">lock_unlocked</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/lock_locked_unpreviledged.png" alt="extra-icons/lock_locked_unpreviledged.svg"/></td><td width="400">:/lock_locked_unpreviledged.svg</td><td width="400">extra-icons/lock_locked_unpreviledged.svg</td><td width="200">lock_locked_unpreviledged</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/lock_unknown.png" alt="extra-icons/lock_unknown.svg"/></td><td width="400">:/lock_unknown.svg</td><td width="400">extra-icons/lock_unknown.svg</td><td width="200">lock_unknown</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/lock_unlocked.png" alt="extra-icons/lock_unlocked.svg"/></td><td width="400">:/lock_unlocked.svg</td><td width="400">extra-icons/lock_unlocked.svg</td><td width="200">lock_unlocked</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_close.png" alt="extra-icons/titlebar_close.png"/></td><td width="400">:/titlebar_close.png</td><td width="400">extra-icons/titlebar_close.png</td><td width="200">titlebar_close</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_close_black.png" alt="extra-icons/titlebar_close_black.png"/></td><td width="400">:/titlebar_close_black.png</td><td width="400">extra-icons/titlebar_close_black.png</td><td width="200">titlebar_close_black</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_undock_gray.png" alt="extra-icons/titlebar_undock_gray.png"/></td><td width="400">:/titlebar_undock_gray.png</td><td width="400">extra-icons/titlebar_undock_gray.png</td><td width="200">titlebar_undock_gray</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_undock.png" alt="extra-icons/titlebar_undock.png"/></td><td width="400">:/titlebar_undock.png</td><td width="400">extra-icons/titlebar_undock.png</td><td width="200">titlebar_undock</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_undock_white.png" alt="extra-icons/titlebar_undock_white.png"/></td><td width="400">:/titlebar_undock_white.png</td><td width="400">extra-icons/titlebar_undock_white.png</td><td width="200">titlebar_undock_white</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/color-fill.png" alt="extra-icons/color-fill.svg"/></td><td width="400">:/color-fill.svg</td><td width="400">extra-icons/color-fill.svg</td><td width="200">color-fill</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_close_gray.png" alt="extra-icons/titlebar_close_gray.png"/></td><td width="400">:/titlebar_close_gray.png</td><td width="400">extra-icons/titlebar_close_gray.png</td><td width="200">titlebar_close_gray</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_close_white.png" alt="extra-icons/titlebar_close_white.png"/></td><td width="400">:/titlebar_close_white.png</td><td width="400">extra-icons/titlebar_close_white.png</td><td width="200">titlebar_close_white</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_undock.png" alt="extra-icons/titlebar_undock.png"/></td><td width="400">:/titlebar_undock.png</td><td width="400">extra-icons/titlebar_undock.png</td><td width="200">titlebar_undock</td></tr>
 <tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_undock_black.png" alt="extra-icons/titlebar_undock_black.png"/></td><td width="400">:/titlebar_undock_black.png</td><td width="400">extra-icons/titlebar_undock_black.png</td><td width="200">titlebar_undock_black</td></tr>
-</table>
-<h2><a name="external/jive">:/jive/ (external/jive)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/jive/" Directory: "external/jive"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/jive/device.png" alt="external/jive/device.png"/></td><td width="400">:/jive/device.png</td><td width="400">external/jive/device.png</td><td width="200">device</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/jive/class.png" alt="external/jive/class.png"/></td><td width="400">:/jive/class.png</td><td width="400">external/jive/class.png</td><td width="200">class</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/jive/server.png" alt="external/jive/server.png"/></td><td width="400">:/jive/server.png</td><td width="400">external/jive/server.png</td><td width="200">server</td></tr>
-</table>
-<h2><a name="external">:/ (external)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/" Directory: "external"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/class.png" alt="external/class.png"/></td><td width="400">:/class.png</td><td width="400">external/class.png</td><td width="200">class</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/python-file.png" alt="external/python-file.png"/></td><td width="400">:/python-file.png</td><td width="400">external/python-file.png</td><td width="200">python-file</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/python-package.png" alt="external/python-package.png"/></td><td width="400">:/python-package.png</td><td width="400">external/python-package.png</td><td width="200">python-package</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/tango.png" alt="external/tango.png"/></td><td width="400">:/tango.png</td><td width="400">external/tango.png</td><td width="200">tango</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/ipython.png" alt="external/ipython.png"/></td><td width="400">:/ipython.png</td><td width="400">external/ipython.png</td><td width="200">ipython</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/pythonw-console.png" alt="external/pythonw-console.png"/></td><td width="400">:/pythonw-console.png</td><td width="400">external/pythonw-console.png</td><td width="200">pythonw-console</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/python-console.png" alt="external/python-console.png"/></td><td width="400">:/python-console.png</td><td width="400">external/python-console.png</td><td width="200">python-console</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/python-module.png" alt="external/python-module.png"/></td><td width="400">:/python-module.png</td><td width="400">external/python-module.png</td><td width="200">python-module</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/function.png" alt="external/function.png"/></td><td width="400">:/function.png</td><td width="400">external/function.png</td><td width="200">function</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="external/python.png" alt="external/python.png"/></td><td width="400">:/python.png</td><td width="400">external/python.png</td><td width="200">python</td></tr>
-</table>
-<h2><a name="large/snapshot">:/snapshot/ (large/snapshot)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/snapshot/" Directory: "large/snapshot"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusShell.png" alt="large/snapshot/TaurusShell.png"/></td><td width="400">:/snapshot/TaurusShell.png</td><td width="400">large/snapshot/TaurusShell.png</td><td width="200">TaurusShell</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusForm.png" alt="large/snapshot/TaurusForm.png"/></td><td width="400">:/snapshot/TaurusForm.png</td><td width="400">large/snapshot/TaurusForm.png</td><td width="200">TaurusForm</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusTrend2DDialog.png" alt="large/snapshot/TaurusTrend2DDialog.png"/></td><td width="400">:/snapshot/TaurusTrend2DDialog.png</td><td width="400">large/snapshot/TaurusTrend2DDialog.png</td><td width="200">TaurusTrend2DDialog</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusDevicePanel.png" alt="large/snapshot/TaurusDevicePanel.png"/></td><td width="400">:/snapshot/TaurusDevicePanel.png</td><td width="400">large/snapshot/TaurusDevicePanel.png</td><td width="200">TaurusDevicePanel</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusArrayEditor.png" alt="large/snapshot/TaurusArrayEditor.png"/></td><td width="400">:/snapshot/TaurusArrayEditor.png</td><td width="400">large/snapshot/TaurusArrayEditor.png</td><td width="200">TaurusArrayEditor</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusJDrawSynopticsView.png" alt="large/snapshot/TaurusJDrawSynopticsView.png"/></td><td width="400">:/snapshot/TaurusJDrawSynopticsView.png</td><td width="400">large/snapshot/TaurusJDrawSynopticsView.png</td><td width="200">TaurusJDrawSynopticsView</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusImageDialog.png" alt="large/snapshot/TaurusImageDialog.png"/></td><td width="400">:/snapshot/TaurusImageDialog.png</td><td width="400">large/snapshot/TaurusImageDialog.png</td><td width="200">TaurusImageDialog</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusNeXusBrowser.png" alt="large/snapshot/TaurusNeXusBrowser.png"/></td><td width="400">:/snapshot/TaurusNeXusBrowser.png</td><td width="400">large/snapshot/TaurusNeXusBrowser.png</td><td width="200">TaurusNeXusBrowser</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusQubDataImageDisplay.png" alt="large/snapshot/TaurusQubDataImageDisplay.png"/></td><td width="400">:/snapshot/TaurusQubDataImageDisplay.png</td><td width="400">large/snapshot/TaurusQubDataImageDisplay.png</td><td width="200">TaurusQubDataImageDisplay</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/SardanaEditor.png" alt="large/snapshot/SardanaEditor.png"/></td><td width="400">:/snapshot/SardanaEditor.png</td><td width="400">large/snapshot/SardanaEditor.png</td><td width="200">SardanaEditor</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusDbTreeWidget.png" alt="large/snapshot/TaurusDbTreeWidget.png"/></td><td width="400">:/snapshot/TaurusDbTreeWidget.png</td><td width="400">large/snapshot/TaurusDbTreeWidget.png</td><td width="200">TaurusDbTreeWidget</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusPlot.png" alt="large/snapshot/TaurusPlot.png"/></td><td width="400">:/snapshot/TaurusPlot.png</td><td width="400">large/snapshot/TaurusPlot.png</td><td width="200">TaurusPlot</td></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/snapshot/TaurusTrend.png" alt="large/snapshot/TaurusTrend.png"/></td><td width="400">:/snapshot/TaurusTrend.png</td><td width="400">large/snapshot/TaurusTrend.png</td><td width="200">TaurusTrend</td></tr>
-</table>
-<h2><a name="large">:/ (large)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/" Directory: "large"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="30"><td width="30" align="center"><img width="24" src="large/TaurusSplash.png" alt="large/TaurusSplash.png"/></td><td width="400">:/TaurusSplash.png</td><td width="400">large/TaurusSplash.png</td><td width="200">TaurusSplash</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_undock_gray.png" alt="extra-icons/titlebar_undock_gray.png"/></td><td width="400">:/titlebar_undock_gray.png</td><td width="400">extra-icons/titlebar_undock_gray.png</td><td width="200">titlebar_undock_gray</td></tr>
+<tr height="30"><td width="30" align="center"><img width="24" src="extra-icons/titlebar_undock_white.png" alt="extra-icons/titlebar_undock_white.png"/></td><td width="400">:/titlebar_undock_white.png</td><td width="400">extra-icons/titlebar_undock_white.png</td><td width="200">titlebar_undock_white</td></tr>
 </table>
 </body></html>
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/designer/devs_tree.png b/lib/taurus/qt/qtgui/resource/extra-icons/designer/devs_tree.png
old mode 100755
new mode 100644
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/designer/ledgreen.png b/lib/taurus/qt/qtgui/resource/extra-icons/designer/ledgreen.png
index f89f5f7..85297eb 100644
Binary files a/lib/taurus/qt/qtgui/resource/extra-icons/designer/ledgreen.png and b/lib/taurus/qt/qtgui/resource/extra-icons/designer/ledgreen.png differ
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/designer/ledred.png b/lib/taurus/qt/qtgui/resource/extra-icons/designer/ledred.png
index 46dd165..24b2f84 100644
Binary files a/lib/taurus/qt/qtgui/resource/extra-icons/designer/ledred.png and b/lib/taurus/qt/qtgui/resource/extra-icons/designer/ledred.png differ
diff --git a/lib/taurus/qt/qtgui/resource/rrze-icons/emblems/inspector-hat.svg b/lib/taurus/qt/qtgui/resource/rrze-icons/emblems/inspector-hat.svg
old mode 100755
new mode 100644
diff --git a/lib/taurus/qt/qtgui/resource/taurus_resource_utils.py b/lib/taurus/qt/qtgui/resource/taurus_resource_utils.py
index 5aad067..e278886 100644
--- a/lib/taurus/qt/qtgui/resource/taurus_resource_utils.py
+++ b/lib/taurus/qt/qtgui/resource/taurus_resource_utils.py
@@ -35,7 +35,7 @@ __docformat__ = 'restructuredtext'
 
 import os
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 from taurus.core.taurusbasetypes import TaurusElementType, TaurusSWDevHealth
 from taurus.core.util.log import Logger
diff --git a/lib/taurus/qt/qtgui/style/__init__.py b/lib/taurus/qt/qtgui/style/__init__.py
index b4d6b45..f2f5f2e 100644
--- a/lib/taurus/qt/qtgui/style/__init__.py
+++ b/lib/taurus/qt/qtgui/style/__init__.py
@@ -31,7 +31,7 @@ __docformat__ = 'restructuredtext'
 
 import imp
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 def setTaurusStyle(newStyle):
 
diff --git a/lib/taurus/qt/qtgui/style/nebula.py b/lib/taurus/qt/qtgui/style/nebula.py
index 2f6a569..346a892 100644
--- a/lib/taurus/qt/qtgui/style/nebula.py
+++ b/lib/taurus/qt/qtgui/style/nebula.py
@@ -29,7 +29,7 @@ __all__ = ["getStyle", "getStyleSheet"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 _NEBULA_KEYS = {
     'border_radius' : '4px',
diff --git a/lib/taurus/qt/qtgui/table/qdictionary.py b/lib/taurus/qt/qtgui/table/qdictionary.py
index c8b841a..4bcaad7 100644
--- a/lib/taurus/qt/qtgui/table/qdictionary.py
+++ b/lib/taurus/qt/qtgui/table/qdictionary.py
@@ -33,7 +33,7 @@ import sys
 import taurus
 import numpy
 from taurus.core.util.containers import SortedDict
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.container import TaurusBaseContainer,TaurusWidget
 from taurus.qt.qtcore.util.properties import join,djoin
 
diff --git a/lib/taurus/qt/qtgui/table/qlogtable.py b/lib/taurus/qt/qtgui/table/qlogtable.py
index 2dd9eb8..d2b20c2 100644
--- a/lib/taurus/qt/qtgui/table/qlogtable.py
+++ b/lib/taurus/qt/qtgui/table/qlogtable.py
@@ -42,7 +42,7 @@ from taurus.core.util.remotelogmonitor import LogRecordStreamHandler, \
     LogRecordSocketReceiver
 from taurus.core.util.decorator.memoize import memoized
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.model import FilterToolBar
 from taurus.qt.qtgui.util import ActionFactory
 from taurus.qt.qtgui.resource import getThemeIcon
diff --git a/lib/taurus/qt/qtgui/table/qtable.py b/lib/taurus/qt/qtgui/table/qtable.py
index cb59607..3ee46f9 100644
--- a/lib/taurus/qt/qtgui/table/qtable.py
+++ b/lib/taurus/qt/qtgui/table/qtable.py
@@ -29,7 +29,7 @@ __all__ = ["QBaseTableWidget"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.model import QBaseModelWidget
 
 
@@ -43,6 +43,7 @@ class QBaseTableWidget(QBaseModelWidget):
             klass = Qt.QTableView
         table = klass()
         table.setSortingEnabled(True)
+        table.sortByColumn(0, Qt.Qt.AscendingOrder)
         table.setAlternatingRowColors(True)
         table.setSelectionBehavior(Qt.QAbstractItemView.SelectRows)
         table.setSelectionMode(Qt.QAbstractItemView.ExtendedSelection)
diff --git a/lib/taurus/qt/qtgui/table/taurusdbtable.py b/lib/taurus/qt/qtgui/table/taurusdbtable.py
index a19c31e..a596612 100644
--- a/lib/taurus/qt/qtgui/table/taurusdbtable.py
+++ b/lib/taurus/qt/qtgui/table/taurusdbtable.py
@@ -30,7 +30,7 @@ __all__ = ["TaurusDbTableWidget"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.core.taurusbasetypes import TaurusElementType
 from taurus.core.taurusdatabase import TaurusDatabase
 from taurus.qt.qtcore.model import *
diff --git a/lib/taurus/qt/qtgui/table/taurusdevicepropertytable.py b/lib/taurus/qt/qtgui/table/taurusdevicepropertytable.py
index 2e294a4..417d1c1 100644
--- a/lib/taurus/qt/qtgui/table/taurusdevicepropertytable.py
+++ b/lib/taurus/qt/qtgui/table/taurusdevicepropertytable.py
@@ -29,7 +29,7 @@ taurusdevicepropertytable.py:
 
 __all__ = ["TaurusPropTable"]
 
-from taurus.qt import Qt, QtCore, QtGui
+from taurus.external.qt import Qt, QtCore, QtGui
 from taurus.qt.qtgui.base import TaurusBaseWidget
 import taurus.core
 import PyTango
diff --git a/lib/taurus/qt/qtgui/table/taurusgrid.py b/lib/taurus/qt/qtgui/table/taurusgrid.py
index a31307f..18ecfe6 100644
--- a/lib/taurus/qt/qtgui/table/taurusgrid.py
+++ b/lib/taurus/qt/qtgui/table/taurusgrid.py
@@ -40,7 +40,7 @@ import traceback
 import Queue
 from functools import partial
 
-from taurus.qt import Qt, QtGui, QtCore
+from taurus.external.qt import Qt, QtGui, QtCore
 
 import taurus
 from taurus.qt.qtcore.util.emitter import modelSetter,TaurusEmitterThread,SingletonWorker,MethodModel
@@ -220,9 +220,20 @@ class TaurusGrid(QtGui.QFrame, TaurusBaseWidget):
         
         self.defineStyle()
         self.modelsQueue = Queue.Queue()
-        #self.modelsThread = TaurusEmitterThread(parent=self,queue=self.modelsQueue,method=modelSetter )
-        self.modelsThread = SingletonWorker(parent=self,name='TaurusGrid',queue=self.modelsQueue,method=modelSetter,cursor=True)
-        
+        self.__modelsThread = None
+        if not designMode:
+            self.modelsThread
+
+    @property
+    def modelsThread(self):
+        modelsThread = self.__modelsThread
+        if modelsThread is None:
+            modelsThread = SingletonWorker(parent=self, name='TaurusGrid',
+                                           queue=self.modelsQueue,
+                                           method=modelSetter, cursor=True)
+            self.__modelsThread = modelsThread
+        return modelsThread
+
     def save(self,filename):
         import pickle
         d = {
diff --git a/lib/taurus/qt/qtgui/table/taurusvaluestable.py b/lib/taurus/qt/qtgui/table/taurusvaluestable.py
index eb23442..0af423a 100644
--- a/lib/taurus/qt/qtgui/table/taurusvaluestable.py
+++ b/lib/taurus/qt/qtgui/table/taurusvaluestable.py
@@ -27,7 +27,7 @@ __all__ = ["TaurusValuesTable"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 import numpy
 
 import sys
diff --git a/lib/taurus/qt/qtgui/table/taurusvaluestable_ro.py b/lib/taurus/qt/qtgui/table/taurusvaluestable_ro.py
index 27e7a3a..5508fca 100644
--- a/lib/taurus/qt/qtgui/table/taurusvaluestable_ro.py
+++ b/lib/taurus/qt/qtgui/table/taurusvaluestable_ro.py
@@ -33,7 +33,7 @@ __docformat__ = 'restructuredtext'
 
 import numpy
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 import PyTango
 
diff --git a/lib/taurus/qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py b/lib/taurus/qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py
index bb8829e..41df27d 100644
--- a/lib/taurus/qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py
+++ b/lib/taurus/qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py
@@ -28,7 +28,7 @@
 PermanentCustomPanelDlg.py: 
 """
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 class PermanentCustomPanelsDlg(object):
     '''
diff --git a/lib/taurus/qt/qtgui/taurusgui/__init__.py b/lib/taurus/qt/qtgui/taurusgui/__init__.py
index ac6a7e0..2dbf96f 100644
--- a/lib/taurus/qt/qtgui/taurusgui/__init__.py
+++ b/lib/taurus/qt/qtgui/taurusgui/__init__.py
@@ -27,13 +27,27 @@
 This package provides TaurusGui, a generic framework for creating GUIs without
 actual coding (just configuration files).
 
-See the examples provided in the conf directory.
+See the examples provided in the conf subdirectory directory as well as the 
+documentation of the :class:`TaurusGui` class.
+
+    
+The "new GUI wizard" and XML configuration files
+------------------------------------------------
+    
+Note that the configuration files can either be written by hand or by 
+launching the "new GUI" wizard with `taurusgui --new-gui`, which will create
+a new directory containing configuration, resource and launcher files.
+
+The new GUI wizard stores all the options in xml format in a file called
+`config.xml` and creates a simple `config.py` file containing the following
+line::
+
+    XML_CONFIG = 'config.xml'
+    
+This line indicates that `config.xml` should also be used as a source of 
+configuration options (in case of conflict, the options set in `config.py` 
+prevail). 
 
-.. note:: 
-    Please be aware that TaurusGui has only recently being developed and it
-    is still under intense development. The syntax of the configuration files
-    may change at some point and more features and bug fixes are likely to
-    be added in the near future. 
 """
 
 __docformat__ = 'restructuredtext'
@@ -42,4 +56,7 @@ import utils
 from paneldescriptionwizard import *
 from taurusgui import *
 from appsettingswizard import *
-from macrolistener import *
\ No newline at end of file
+try:
+    from macrolistener import *
+except ImportError:
+    pass #allow for sardana not being installed
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/taurusgui/appsettingswizard.py b/lib/taurus/qt/qtgui/taurusgui/appsettingswizard.py
index 6f7c830..b40c52f 100644
--- a/lib/taurus/qt/qtgui/taurusgui/appsettingswizard.py
+++ b/lib/taurus/qt/qtgui/taurusgui/appsettingswizard.py
@@ -3,21 +3,21 @@
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
@@ -33,32 +33,40 @@ time and those customizations will also be stored, this file defines what a
 user will find when launching the GUI for the first time.
 """
 
-__all__=["AppSettingsWizard", "ExternalAppEditor"]
+__all__ = ["AppSettingsWizard", "ExternalAppEditor"]
 
-import os, sys, shutil,re
+import os
+import re
+import sys
+import shutil
+import copy
 import datetime
-from taurus.qt import Qt
+from lxml import etree
+
+from taurus.external.qt import Qt
 import taurus.qt.qtgui.resource
-import taurus.qt.qtgui.extra_macroexecutor.common
 import taurus.qt.qtgui.panel
 import taurus.qt.qtgui.taurusgui.paneldescriptionwizard
 import taurus.qt.qtgui.input
-import copy
-from lxml import etree
-from taurus.core.util import Enumeration
+from taurus.core.util.enumeration import Enumeration
 from taurus.qt.qtgui.util import ExternalAppAction
-        
 
-        
+try:
+    from sardana.taurus.qt.qtgui.extra_macroexecutor.common import \
+        TaurusMacroConfigurationDialog
+    SARDANA_INSTALLED = True
+except:
+    SARDANA_INSTALLED = False
+    
 class BooleanWidget(Qt.QWidget):
     """
     This class represents the simple boolean widget with two RadioButtons
     true and false. The default value of the widget is true.
     It change the value by using getValue and setValue methods
     """
-    
+
     def __init__(self, parent=None):
-        Qt.QWidget.__init__(self,parent)
+        Qt.QWidget.__init__(self, parent)
         self._formLayout = Qt.QHBoxLayout(self)
         self.trueButton = Qt.QRadioButton(self)
         self._formLayout.addWidget(self.trueButton)
@@ -72,20 +80,20 @@ class BooleanWidget(Qt.QWidget):
 
     def valueChanged(self):
         if not (self.trueButton.isChecked() == self._actualValue):
-            self.emit(Qt.SIGNAL("valueChanged"),self._actualValue,not self._actualValue)
+            self.emit(Qt.SIGNAL("valueChanged"), self._actualValue, not self._actualValue)
         self._actualValue = self.trueButton.isChecked()
-    
+
     def setValue(self, value):
         if value is None:
             value = self.getDefaultValue()
         self.trueButton.setChecked(value)
         self.falseButton.setChecked(not value)
         self._actualValue = value
-       
+
     def getValue(self):
         return self.trueButton.isChecked()
-    
-    @classmethod 
+
+    @classmethod
     def getDefaultValue(self):
         return False
 
@@ -94,37 +102,31 @@ class BasePage(Qt.QWizardPage):
     """
         This class represents the base page for all of the pages in the wizard
     """
-    
-    def __init__(self, parent = None):
+
+    def __init__(self, parent=None):
         Qt.QWizardPage.__init__(self, parent)
         self._item_funcs = {}
-        self._layout = Qt.QGridLayout()  
+        self._layout = Qt.QGridLayout()
         self.setLayout(self._layout)
         self._setupUI()
-        
+
     def initializePage(self):
         Qt.QWizardPage.initializePage(self)
         self.checkData()
-        
+
     def fromXml(self, xml):
         """
         :param xml: (etree.Element) root node
         """
         pass
-    
+
     def _setupUI(self):
         pass
-        
-    def __setitem__(self, name, value):
-        self._item_funcs[name] = value
 
-    def __getitem__(self, name):
-        return self._item_funcs[name]
-        
     def checkData(self):
         self._valid = True
         self.emit(Qt.SIGNAL('completeChanged()'))
-        
+
     def isComplete(self):
         return self._valid
 
@@ -135,7 +137,7 @@ class BasePage(Qt.QWizardPage):
         palette = label.palette()
         palette.setBrush(Qt.QPalette.WindowText, Qt.Qt.red)
         label.update()
-        
+
     def _markBlack(self, label):
         """
             Set the color of the given label to black
@@ -151,9 +153,9 @@ class BasePage(Qt.QWizardPage):
         label.setAutoFillBackground(True)
         palette = label.palette()
         gradient = Qt.QLinearGradient(0, 0, 0, 15)
-        gradient.setColorAt(0.0, Qt.QColor.fromRgb( 60, 150, 255))
-        gradient.setColorAt(0.5, Qt.QColor.fromRgb(  0,  85, 227))
-        gradient.setColorAt(1.0, Qt.QColor.fromRgb( 60, 150, 255))
+        gradient.setColorAt(0.0, Qt.QColor.fromRgb(60, 150, 255))
+        gradient.setColorAt(0.5, Qt.QColor.fromRgb(0, 85, 227))
+        gradient.setColorAt(1.0, Qt.QColor.fromRgb(60, 150, 255))
         gradient.setSpread(Qt.QGradient.RepeatSpread)
         palette.setBrush(Qt.QPalette.Window, Qt.QBrush(gradient))
         palette.setBrush(Qt.QPalette.WindowText, Qt.Qt.white)
@@ -163,10 +165,10 @@ class BasePage(Qt.QWizardPage):
 
     def __getitem__(self, name):
         return self._item_funcs[name]
-  
+
     def setNextPageId(self, id):
         self._nextPageId = id
-        
+
     def nextId(self):
         return self._nextPageId
 
@@ -175,39 +177,39 @@ class IntroPage(BasePage):
     """
         Introduction page
     """
-    
-    def __init__(self, parent = None):
+
+    def __init__(self, parent=None):
         BasePage.__init__(self, parent)
-        
-    def _setupUI(self): 
+
+    def _setupUI(self):
         self.setTitle('Introduction')
-        self.setPixmap(Qt.QWizard.WatermarkPixmap, taurus.qt.qtgui.resource.getThemeIcon("document-properties").pixmap(120,120))
+        self.setPixmap(Qt.QWizard.WatermarkPixmap, taurus.qt.qtgui.resource.getThemeIcon("document-properties").pixmap(120, 120))
         label = Qt.QLabel(self.getIntroText())
         label.setWordWrap(True)
-        self._layout.addWidget(label,0,0)
-        self._spacerItem1 = Qt.QSpacerItem(10, 200, Qt.QSizePolicy.Minimum, Qt.QSizePolicy.Fixed)  
-        self._layout.addItem(self._spacerItem1,1,0)
+        self._layout.addWidget(label, 0, 0)
+        self._spacerItem1 = Qt.QSpacerItem(10, 200, Qt.QSizePolicy.Minimum, Qt.QSizePolicy.Fixed)
+        self._layout.addItem(self._spacerItem1, 1, 0)
         self.setLayout(self._layout)
-        
+
     def getIntroText(self):
-        text = 'This wizard will guide you through the process of creating a '+\
-               'GUI based on TaurusGUI.\n' +\
-               'TaurusGui-based applications are very customizable. The user can ' +\
-               'add/remove elements at run time and store those customizations. So ' +\
-               'with this wizard you will define just the default contents of the GUI.' 
+        text = 'This wizard will guide you through the process of creating a ' + \
+               'GUI based on TaurusGUI.\n' + \
+               'TaurusGui-based applications are very customizable. The user can ' + \
+               'add/remove elements at run time and store those customizations. So ' + \
+               'with this wizard you will define just the default contents of the GUI.'
         return text
-    
+
     def setNextPageId(self, id):
         self._nextPageId = id
-        
+
 class ProjectPage(BasePage):
-    
-    def __init__(self, parent = None):
+
+    def __init__(self, parent=None):
         BasePage.__init__(self, parent)
         self.setTitle('Project')
         self.setSubTitle('Choose a location for the application files (i.e., the "project directory")')
         self.__setitem__('projectDir', self._getProjectDir)
-        
+
 
     def _setupUI(self):
         BasePage._setupUI(self)
@@ -216,114 +218,114 @@ class ProjectPage(BasePage):
         self._projectDirLE.setMinimumSize(150, 30)
         self._projectDirLE.setToolTip('This directory will be used to store all files needed by the application.')
         self._projectDirBT = Qt.QPushButton(taurus.qt.qtgui.resource.getThemeIcon("document-properties"), '...')
-        self._layout.addWidget(self._projectDirLabel,1,0)
-        self._layout.addWidget(self._projectDirLE,1,1)
-        self._layout.addWidget(self._projectDirBT,1,2)
-                
-        Qt.QObject.connect(self._projectDirBT, Qt.SIGNAL("clicked()"), self.onSelectDir)       
-        
+        self._layout.addWidget(self._projectDirLabel, 1, 0)
+        self._layout.addWidget(self._projectDirLE, 1, 1)
+        self._layout.addWidget(self._projectDirBT, 1, 2)
+
+        Qt.QObject.connect(self._projectDirBT, Qt.SIGNAL("clicked()"), self.onSelectDir)
+
     def onSelectDir(self):
         dirname = unicode(Qt.QFileDialog.getExistingDirectory(self, 'Choose the project directory', self._projectDirLE.text()))
         if not dirname: return
         self._projectDirLE.setText(dirname)
-        
+
     def validatePage(self):
         dirname = unicode(self._projectDirLE.text())
-        
+
         if not os.path.exists(dirname):
             try:
                 os.makedirs(dirname)
             except Exception, e:
-                Qt.QMessageBox.warning(self, 'Error creating project directory', 
-                                    'Could not create the project directory.\nReason:%s'%repr(e),
+                Qt.QMessageBox.warning(self, 'Error creating project directory',
+                                    'Could not create the project directory.\nReason:%s' % repr(e),
                                      Qt.QMessageBox.Cancel)
                 return False
         fname = os.path.join(dirname, self.wizard().getXmlConfigFileName())
         if os.path.exists(fname):
-            option = Qt.QMessageBox.question(self, 'Overwrite project?', 
-                                    'The "%s" file already exists in the project directory.\n Do you want to edit the existing project?'%(os.path.basename(fname)),
-                                     Qt.QMessageBox.Yes|Qt.QMessageBox.Cancel)
+            option = Qt.QMessageBox.question(self, 'Overwrite project?',
+                                    'The "%s" file already exists in the project directory.\n Do you want to edit the existing project?' % (os.path.basename(fname)),
+                                     Qt.QMessageBox.Yes | Qt.QMessageBox.Cancel)
             if option == Qt.QMessageBox.Yes:
                 try:
                     self.wizard().loadXml(fname)
                 except Exception, e:
-                    Qt.QMessageBox.warning(self, 'Error loading project configuration', 
-                                    'Could not load the existing configuration.\nReason:%s'%repr(e),
+                    Qt.QMessageBox.warning(self, 'Error loading project configuration',
+                                    'Could not load the existing configuration.\nReason:%s' % repr(e),
                                      Qt.QMessageBox.Cancel)
                     return False
             else:
                 return False
         elif len(os.listdir(dirname)):
-            option = Qt.QMessageBox.question(self, 'Non empty project dir', 
-                                    'The project directory ("%s") is not empty.\nAre you sure you want to use it?'%(os.path.basename(dirname)),
-                                     Qt.QMessageBox.Yes|Qt.QMessageBox.No)
+            option = Qt.QMessageBox.question(self, 'Non empty project dir',
+                                    'The project directory ("%s") is not empty.\nAre you sure you want to use it?' % (os.path.basename(dirname)),
+                                     Qt.QMessageBox.Yes | Qt.QMessageBox.No)
             if option != Qt.QMessageBox.Yes:
                 return False
         #if all went ok...
         return True
-    
+
     def _getProjectDir(self):
         return unicode(self._projectDirLE.text())
-        
-           
+
+
 class GeneralSettings(BasePage):
-    
-    def __init__(self, parent = None):
+
+    def __init__(self, parent=None):
         BasePage.__init__(self, parent)
         self.setTitle('General settings')
 
     def initializePage(self):
         BasePage.initializePage(self)
-        self.wizard().__setitem__("guiName",self._getGUIName)
-        self.wizard().__setitem__("organizationName",self._getOrganizationName)
-        
+        self.wizard().__setitem__("guiName", self._getGUIName)
+        self.wizard().__setitem__("organizationName", self._getOrganizationName)
+
     def fromXml(self, xml):
         self._guiNameLineEdit.setText(AppSettingsWizard.getValueFromNode(xml, "GUI_NAME", ''))
         self._organizationCombo.setEditText(AppSettingsWizard.getValueFromNode(xml, "ORGANIZATION", default='Taurus'))
-        
+
     def _getGUIName(self):
         return str(self._guiNameLineEdit.text())
-    
+
     def _getOrganizationName(self):
-        if len(self._organizationCombo.currentText())>0:
+        if len(self._organizationCombo.currentText()) > 0:
             return str(self._organizationCombo.currentText())
         else:
             return None
-        
+
     def _setupUI(self):
         BasePage._setupUI(self)
         self._guiNameLabel = Qt.QLabel("GUI name:")
-        font = Qt.QFont() #set bigger font 
+        font = Qt.QFont()  #set bigger font
         font.setPointSize(14)
-        
+
         self._label = Qt.QLabel()
-        self._layout.addWidget(self._label,0,0,1,2,Qt.Qt.AlignRight)
+        self._layout.addWidget(self._label, 0, 0, 1, 2, Qt.Qt.AlignRight)
         self._guiNameLineEdit = Qt.QLineEdit()
         self._guiNameLineEdit.setFont(font)
         self._guiNameLineEdit.setMinimumSize(150, 30)
-        self._layout.addWidget(self._guiNameLabel,1,0,1,1,Qt.Qt.AlignRight)
-        self._layout.addWidget(self._guiNameLineEdit,1,1,1,1,Qt.Qt.AlignRight)
+        self._layout.addWidget(self._guiNameLabel, 1, 0, 1, 1, Qt.Qt.AlignRight)
+        self._layout.addWidget(self._guiNameLineEdit, 1, 1, 1, 1, Qt.Qt.AlignRight)
         self._organizationNameLabel = Qt.QLabel("Organization name:")
         self._organizationCombo = Qt.QComboBox()
         self._organizationCombo.addItems(self._getOrganizationNames())
         self._organizationCombo.setMinimumSize(150, 25)
         self._organizationCombo.setEditable(True)
-        self._layout.addWidget(self._organizationNameLabel,2,0,1,1,Qt.Qt.AlignRight)
-        self._layout.addWidget(self._organizationCombo,2,1,1,1,Qt.Qt.AlignRight)
+        self._layout.addWidget(self._organizationNameLabel, 2, 0, 1, 1, Qt.Qt.AlignRight)
+        self._layout.addWidget(self._organizationCombo, 2, 1, 1, 1, Qt.Qt.AlignRight)
+
 
-        
         self._spacerItem1 = Qt.QSpacerItem(10, 0, Qt.QSizePolicy.Fixed, Qt.QSizePolicy.Expanding)
-        self._layout.addItem(self._spacerItem1,8,0,1,1,Qt.Qt.AlignCenter)
+        self._layout.addItem(self._spacerItem1, 8, 0, 1, 1, Qt.Qt.AlignCenter)
         self._status_label = Qt.QLabel()
         self.setStatusLabelPalette(self._status_label)
-        self._layout.addWidget(self._status_label,9,0,1,3)
-        
+        self._layout.addWidget(self._status_label, 9, 0, 1, 3)
+
         Qt.QObject.connect(self._guiNameLineEdit, Qt.SIGNAL("textChanged(const QString&)"), self.checkData)
         Qt.QObject.connect(self._organizationCombo, Qt.SIGNAL("editTextChanged(const QString&)"), self.checkData)
         Qt.QObject.connect(self._organizationCombo, Qt.SIGNAL("currentIndexChanged(const QString&)"), self.checkData)
-        
+
     def _getOrganizationNames(self):
-        return ["TAURUS","ALBA", "DESY", "Elettra", "ESRF", "MAX-lab", "SOLEIL", "XFEL"]         
+        return ["TAURUS", "ALBA", "DESY", "Elettra", "ESRF", "MAX-lab", "SOLEIL", "XFEL"]
 
     def checkData(self):
         self._valid = True
@@ -332,35 +334,35 @@ class GeneralSettings(BasePage):
             self._markRed(self._guiNameLabel)
         else:
             self._markBlack(self._guiNameLabel)
-            
+
         self.emit(Qt.SIGNAL('completeChanged()'))
-        
+
         if not self._valid:
             self._setStatus("Please type the name of the GUI")
         else:
-            self._setStatus("Press next button to continue")   
+            self._setStatus("Press next button to continue")
 
-    def _setStatus(self,text):
+    def _setStatus(self, text):
         self._status_label.setText(text)
-        
+
 
 class CustomLogoPage(BasePage):
-    def __init__(self, parent = None):
+    def __init__(self, parent=None):
         BasePage.__init__(self, parent)
-        self._customLogoDefaultPath=":/logo.png"
-        self._customLogoPath=self._customLogoDefaultPath
-        
+        self._customLogoDefaultPath = ":/logo.png"
+        self._customLogoPath = self._customLogoDefaultPath
+
     def initializePage(self):
         BasePage.initializePage(self)
-        self.wizard().__setitem__("customLogo",self._getCustomLogo)
+        self.wizard().__setitem__("customLogo", self._getCustomLogo)
         self._changeImage()
-    
+
     def _setupUI(self):
         BasePage._setupUI(self)
         self.setTitle('Custom logo')
         self._label = Qt.QLabel("\nIf you want to have a custom logo inside your application panel, please select the image file. \n")
         self._label.setWordWrap(True)
-        self._layout.addWidget(self._label,0,0,1,4) 
+        self._layout.addWidget(self._label, 0, 0, 1, 4)
         self._customLogoLabel = Qt.QLabel("Custom logo:")
         self._customLogoLineEdit = Qt.QLineEdit()
         self._customLogoLineEdit.setMinimumSize(250, 25)
@@ -369,7 +371,7 @@ class CustomLogoPage(BasePage):
         self._customLogoButton.setToolTip("Browse...")
         self._customLogoButton.setIcon(taurus.qt.qtgui.resource.getThemeIcon("folder-open"))
         self._customLogoButton.setMaximumSize(80, 25)
-        self._spacerItem1 = Qt.QSpacerItem(30, 30, Qt.QSizePolicy.Fixed, Qt.QSizePolicy.Fixed)  
+        self._spacerItem1 = Qt.QSpacerItem(30, 30, Qt.QSizePolicy.Fixed, Qt.QSizePolicy.Fixed)
         self._customLogo = Qt.QLabel(self)
         self._customLogo.setAlignment(Qt.Qt.AlignCenter)
         self._customLogo.setMinimumSize(120, 120)
@@ -381,65 +383,65 @@ class CustomLogoPage(BasePage):
         self._customLogoRemoveButton.setToolTip("Remove")
         self._customLogoRemoveButton.setMaximumSize(80, 25)
         self._customLogoRemoveButton.setIcon(taurus.qt.qtgui.resource.getIcon(":/emblems/emblem-unreadable.svg"))
-        self._spacerItem2 = Qt.QSpacerItem(30, 30, Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Fixed)  
-
-        self._layout.addWidget(self._customLogoLabel,2,0,Qt.Qt.AlignRight)
-        self._layout.addWidget(self._customLogoLineEdit,2,1,Qt.Qt.AlignRight)
-        self._layout.addWidget(self._customLogoButton,2,2,Qt.Qt.AlignLeft)
-        self._layout.addWidget(self._customLogoDefaultButton,2,3,Qt.Qt.AlignLeft)
-        self._layout.addWidget(self._customLogoRemoveButton,2,4,Qt.Qt.AlignLeft) 
-        self._layout.addItem(self._spacerItem2,2,5)
-        self._layout.addItem(self._spacerItem1,3,2)
-        self._layout.addWidget(self._customLogo,4,1,1,1,Qt.Qt.AlignHCenter)
-             
+        self._spacerItem2 = Qt.QSpacerItem(30, 30, Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Fixed)
+
+        self._layout.addWidget(self._customLogoLabel, 2, 0, Qt.Qt.AlignRight)
+        self._layout.addWidget(self._customLogoLineEdit, 2, 1, Qt.Qt.AlignRight)
+        self._layout.addWidget(self._customLogoButton, 2, 2, Qt.Qt.AlignLeft)
+        self._layout.addWidget(self._customLogoDefaultButton, 2, 3, Qt.Qt.AlignLeft)
+        self._layout.addWidget(self._customLogoRemoveButton, 2, 4, Qt.Qt.AlignLeft)
+        self._layout.addItem(self._spacerItem2, 2, 5)
+        self._layout.addItem(self._spacerItem1, 3, 2)
+        self._layout.addWidget(self._customLogo, 4, 1, 1, 1, Qt.Qt.AlignHCenter)
+
         Qt.QObject.connect(self._customLogoButton, Qt.SIGNAL("clicked()"), self._selectImage)
         Qt.QObject.connect(self._customLogoDefaultButton, Qt.SIGNAL("clicked()"), self._setDefaultImage)
         Qt.QObject.connect(self._customLogoRemoveButton, Qt.SIGNAL("clicked()"), self._removeImage)
         Qt.QObject.connect(self._customLogoLineEdit, Qt.SIGNAL("textChanged(const QString&)"), self._changeImage)
-        
+
         self._spacerItem1 = Qt.QSpacerItem(10, 0, Qt.QSizePolicy.Fixed, Qt.QSizePolicy.Expanding)
-        self._layout.addItem(self._spacerItem1,8,0,1,1,Qt.Qt.AlignCenter)
+        self._layout.addItem(self._spacerItem1, 8, 0, 1, 1, Qt.Qt.AlignCenter)
         self._status_label = Qt.QLabel("Press next button to continue")
         self.setStatusLabelPalette(self._status_label)
-        self._layout.addWidget(self._status_label,9,0,1,6)
+        self._layout.addWidget(self._status_label, 9, 0, 1, 6)
         self._setNoImage()
-    
+
     def fromXml(self, xml):
         customLogo = AppSettingsWizard.getValueFromNode(xml, "CUSTOM_LOGO", None)
         if customLogo is None:
             self._setDefaultImage()
         else:
             self._customLogoLineEdit.setText(customLogo)
-        
+
     def _setDefaultImage(self):
         self._customLogoLineEdit.setText(self._customLogoDefaultPath)
-        
+
     def _setNoImage(self):
-        self._customLogo.setPixmap(taurus.qt.qtgui.resource.getThemePixmap("image-missing").scaled(50,50))
-        self._customLogoPath=None
+        self._customLogo.setPixmap(taurus.qt.qtgui.resource.getThemePixmap("image-missing").scaled(50, 50))
+        self._customLogoPath = None
         self._customLogoRemoveButton.hide()
-    
+
     def _removeImage(self):
         self._customLogoLineEdit.setText("")
         self._setNoImage()
-    
+
     def _getCustomLogo(self):
         if (self._customLogoPath is not None):
             return str(self._customLogoPath)
         else:
             return None
-                
+
     def _selectImage(self):
             fileName = Qt.QFileDialog.getOpenFileName(self, self.tr("Open File"), Qt.QDir.homePath() , self.tr("Images (*.png *.xpm *.jpg *.jpeg *.svg)"))
             self._customLogoLineEdit.setText(fileName)
             self._changeImage()
-        
+
     def _changeImage(self):
         fileName = str(self._customLogoLineEdit.text())
         if (len(fileName)):
-            if  fileName[0]==":":
-                pixmap =taurus.qt.qtgui.resource.getPixmap(fileName)
-                if ( pixmap.height()):
+            if  fileName[0] == ":":
+                pixmap = taurus.qt.qtgui.resource.getPixmap(fileName)
+                if (pixmap.height()):
                     image = pixmap.toImage()
                     self._setImage(image)
                     self._customLogoPath = fileName
@@ -447,7 +449,7 @@ class CustomLogoPage(BasePage):
                     self._customLogoRemoveButton.show()
                 else:
                     self._setNoImage()
-                    self._setStatus("The resource is invalid")    
+                    self._setStatus("The resource is invalid")
             else:
                 if (os.path.exists(fileName)):
                     image = Qt.QImage()
@@ -455,7 +457,7 @@ class CustomLogoPage(BasePage):
                         self._setImage(image)
                         self._customLogoPath = fileName
                         self._setStatus("Press next button to continue")
-                        self._customLogoRemoveButton.show() 
+                        self._customLogoRemoveButton.show()
                     else:
                         self._setNoImage()
                         self._setStatus("The file is invalid")
@@ -465,50 +467,50 @@ class CustomLogoPage(BasePage):
         else:
             self._setNoImage()
             self._setStatus("No image")
-        
-        
-    def _setImage(self, image):     
-        if type(image)==Qt.QPixmap:
-            self._customLogo.setPixmap(image.scaled(60,200,Qt.Qt.KeepAspectRatio))
-        elif type(image)==Qt.QImage:
-            self._customLogo.setPixmap(Qt.QPixmap().fromImage(image).scaled(60,200,Qt.Qt.KeepAspectRatio))
+
+
+    def _setImage(self, image):
+        if type(image) == Qt.QPixmap:
+            self._customLogo.setPixmap(image.scaled(60, 200, Qt.Qt.KeepAspectRatio))
+        elif type(image) == Qt.QImage:
+            self._customLogo.setPixmap(Qt.QPixmap().fromImage(image).scaled(60, 200, Qt.Qt.KeepAspectRatio))
         else:
-            self._customLogo.setPixmap(taurus.qt.qtgui.resource.getThemePixmap("image-missing").scaled(50,50))
+            self._customLogo.setPixmap(taurus.qt.qtgui.resource.getThemePixmap("image-missing").scaled(50, 50))
             self._customLogoPath = None
-            
-    def _setStatus(self,text):
+
+    def _setStatus(self, text):
         self._status_label.setText(text)
-        
 
-class SynopticPage(BasePage):  
-    def __init__(self, parent = None):
+
+class SynopticPage(BasePage):
+    def __init__(self, parent=None):
         BasePage.__init__(self, parent)
         self._synoptics = []
-        
+
     def fromXml(self, xml):
-        self._synoptics=[]
+        self._synoptics = []
         synopticNodes = AppSettingsWizard.getArrayFromNode(xml, "SYNOPTIC", default=[])
         for child in synopticNodes:
             if child.get("str") is not None and len(child.get("str")):
                     self._synoptics.append(child.get("str"))
-        
+
     def initializePage(self):
         BasePage.initializePage(self)
-        self.wizard().__setitem__("synoptics",self._getSynoptics)
+        self.wizard().__setitem__("synoptics", self._getSynoptics)
         self._refreshSynopticList()
-        
+
     def _setupUI(self):
         BasePage._setupUI(self)
         self.setTitle('Synoptics')
         self._label = Qt.QLabel("If you want to add one or more synoptic panels (graphical views of instruments) select the corresponding JDRAW files here\n")
         self._label.setWordWrap(True)
-        self._layout.addWidget(self._label,0,0)
+        self._layout.addWidget(self._label, 0, 0)
         self.setLayout(self._layout)
         self._synopticGroupBox = Qt.QGroupBox()
         self._synopticGroupBox.setCheckable(False)
         self._synopticGroupBox.setAlignment(Qt.Qt.AlignLeft)
         self._synopticGroupBox.setStyleSheet(" QGroupBox::title {  subcontrol-position: top left; padding: 5 5px; }")
-        self._layout.addWidget(self._synopticGroupBox,2,0,1,1)
+        self._layout.addWidget(self._synopticGroupBox, 2, 0, 1, 1)
         self._horizontalLayout = Qt.QHBoxLayout(self._synopticGroupBox)
         self._synopticList = Qt.QListWidget(self._synopticGroupBox)
         self._horizontalLayout.addWidget(self._synopticList)
@@ -534,82 +536,83 @@ class SynopticPage(BasePage):
         Qt.QObject.connect(self._removeButton, Qt.SIGNAL("clicked()"), self._removeSynoptic)
         Qt.QObject.connect(self._upButton, Qt.SIGNAL("clicked()"), self._moveUp)
         Qt.QObject.connect(self._downButton, Qt.SIGNAL("clicked()"), self._moveDown)
-        #Qt.QObject.connect(self._synopticList, Qt.SIGNAL("itemDoubleClicked(QListWidgetItem*)"), self._editSynoptic) 
+        #Qt.QObject.connect(self._synopticList, Qt.SIGNAL("itemDoubleClicked(QListWidgetItem*)"), self._editSynoptic)
         self._spacerItem1 = Qt.QSpacerItem(10, 0, Qt.QSizePolicy.Fixed, Qt.QSizePolicy.Expanding)
-        self._layout.addItem(self._spacerItem1,8,0,1,1,Qt.Qt.AlignCenter)
+        self._layout.addItem(self._spacerItem1, 8, 0, 1, 1, Qt.Qt.AlignCenter)
         self._status_label = Qt.QLabel("Press next button to continue")
         self.setStatusLabelPalette(self._status_label)
-        self._layout.addWidget(self._status_label,9,0,1,1)
-        
-    
+        self._layout.addWidget(self._status_label, 9, 0, 1, 1)
+
+
     def _addSynoptic (self):
         pdir = self.wizard().__getitem__('projectDir')
-        fileNames = Qt.QFileDialog.getOpenFileNames(self, self.tr("Open File"), pdir, self.tr("JDW (*.jdw );; All files (*)")  )
+        fileNames = Qt.QFileDialog.getOpenFileNames(self, self.tr("Open File"), pdir, self.tr("JDW (*.jdw );; All files (*)"))
         for fileName in fileNames:
             fileName = unicode(fileName)
             if not fileName in self._synoptics:
                 self._synoptics.append(fileName)
         self._refreshSynopticList()
-        
+
     def _editSynoptic (self):
         # edit
         self._refreshSynopticList()
-            
+
     def _removeSynoptic(self):
-        if len(self._synopticList.selectedIndexes())>0:
-            self._synoptic_id=self._synopticList.selectedIndexes()[0].row()
+        if len(self._synopticList.selectedIndexes()) > 0:
+            self._synoptic_id = self._synopticList.selectedIndexes()[0].row()
             self._synoptics.remove(self._synoptics[self._synoptic_id])
             self._refreshSynopticList()
-            
+
     def _moveUp(self):
-        if len(self._synopticList.selectedIndexes())>0:
-            self._synoptic_id=self._synopticList.selectedIndexes()[0].row()
+        if len(self._synopticList.selectedIndexes()) > 0:
+            self._synoptic_id = self._synopticList.selectedIndexes()[0].row()
             if self._synoptic_id > 0:
-                tmp =  self._synoptics[self._synoptic_id]
-                self._synoptics[self._synoptic_id]=self._synoptics[self._synoptic_id-1]
-                self._synoptics[self._synoptic_id-1]=tmp
+                tmp = self._synoptics[self._synoptic_id]
+                self._synoptics[self._synoptic_id] = self._synoptics[self._synoptic_id - 1]
+                self._synoptics[self._synoptic_id - 1] = tmp
                 self._refreshSynopticList()
-                self._synopticList.setCurrentIndex(self._synopticList.indexFromItem(self._synopticList.item(self._synoptic_id-1) ))
-                
+                self._synopticList.setCurrentIndex(self._synopticList.indexFromItem(self._synopticList.item(self._synoptic_id - 1)))
+
     def _moveDown(self):
-        if len(self._synopticList.selectedIndexes())>0:
-            self._synoptic_id=self._synopticList.selectedIndexes()[0].row()
-            if self._synoptic_id < self._synopticList.count()-1:
-                tmp =  self._synoptics[self._synoptic_id]
-                self._synoptics[self._synoptic_id]=self._synoptics[self._synoptic_id+1]
-                self._synoptics[self._synoptic_id+1]=tmp
+        if len(self._synopticList.selectedIndexes()) > 0:
+            self._synoptic_id = self._synopticList.selectedIndexes()[0].row()
+            if self._synoptic_id < self._synopticList.count() - 1:
+                tmp = self._synoptics[self._synoptic_id]
+                self._synoptics[self._synoptic_id] = self._synoptics[self._synoptic_id + 1]
+                self._synoptics[self._synoptic_id + 1] = tmp
                 self._refreshSynopticList()
-                self._synopticList.setCurrentIndex(self._synopticList.indexFromItem(self._synopticList.item(self._synoptic_id+1) ))
-              
+                self._synopticList.setCurrentIndex(self._synopticList.indexFromItem(self._synopticList.item(self._synoptic_id + 1)))
+
     def _refreshSynopticList(self):
         self._synopticList.clear()
         for name in self._synoptics:
             self._synopticList.addItem(name)
-            
+
     def _getSynoptics(self):
-        if len(self._synoptics)<=0:
+        if len(self._synoptics) <= 0:
             return None
         else:
             return self._synoptics
-        
+
     def checkData(self):
-        BasePage.checkData(self)          
-        self._valid=True
-    
-    def _setStatus(self,text):
+        BasePage.checkData(self)
+        self._valid = True
+
+    def _setStatus(self, text):
         self._status_label.setText(text)
-        
+
+
 class MacroServerInfoPage(BasePage):
-    
-    def __init__(self, parent = None):
+
+    def __init__(self, parent=None):
         BasePage.__init__(self, parent)
-    
+
     def initializePage(self):
         BasePage.initializePage(self)
         self._label.setText("\n <b>%s</b> can communicate with a Sardana's Macro Server and Pool.\nYou can enable and configure them here:\n" % self.wizard().__getitem__("guiName"))
-        self.wizard().__setitem__("macroServerName",self._getMacroServerName)
-        self.wizard().__setitem__("doorName",self._getDoorName)
-        
+        self.wizard().__setitem__("macroServerName", self._getMacroServerName)
+        self.wizard().__setitem__("doorName", self._getDoorName)
+
     def _setupUI(self):
         BasePage._setupUI(self)
         self.setTitle('Macro Server Info')
@@ -622,132 +625,133 @@ class MacroServerInfoPage(BasePage):
         self._macroGroupBox.setAlignment(Qt.Qt.AlignLeft)
         self._macroGroupBox.setStyleSheet(" QGroupBox::title {  subcontrol-position: top left; padding: 5 5px; }")
         self._horizontalLayout = Qt.QHBoxLayout(self._macroGroupBox)
-        self._confWidget = taurus.qt.qtgui.extra_macroexecutor.common.TaurusMacroConfigurationDialog(self)
+        self._confWidget = TaurusMacroConfigurationDialog(self)
         self._confWidget.setWindowFlags(Qt.Qt.Widget)
         self._confWidget.setModal(False)
         self._confWidget.setVisible(True)
         self._confWidget.buttonBox.setVisible(False)
         self._horizontalLayout.addWidget(self._confWidget)
-        
-        self._layout.addWidget(self._label,0,0,1,1)
-        self._layout.addWidget(self._macroGroupBox,1,0,1,1) 
-        
+
+        self._layout.addWidget(self._label, 0, 0, 1, 1)
+        self._layout.addWidget(self._macroGroupBox, 1, 0, 1, 1)
+
         self._spacerItem1 = Qt.QSpacerItem(10, 0, Qt.QSizePolicy.Fixed, Qt.QSizePolicy.Expanding)
-        self._layout.addItem(self._spacerItem1,8,0,1,1,Qt.Qt.AlignCenter)
+        self._layout.addItem(self._spacerItem1, 8, 0, 1, 1, Qt.Qt.AlignCenter)
         self._status_label = Qt.QLabel("Press next button to continue")
         self.setStatusLabelPalette(self._status_label)
-        self._layout.addWidget(self._status_label,9,0,1,1)
-        
+        self._layout.addWidget(self._status_label, 9, 0, 1, 1)
+
         Qt.QObject.connect(self._confWidget.macroServerComboBox, Qt.SIGNAL("currentIndexChanged(const QString&)"), self.checkData)
         Qt.QObject.connect(self._confWidget.doorComboBox, Qt.SIGNAL("currentIndexChanged(const QString&)"), self.checkData)
         Qt.QObject.connect(self._macroGroupBox, Qt.SIGNAL("toggled(bool)"), self.checkData)
-    
+
     def fromXml(self, xml):
         macroserverName = AppSettingsWizard.getValueFromNode(xml, "MACROSERVER_NAME", default="")
         doorName = AppSettingsWizard.getValueFromNode(xml, "DOOR_NAME", default="")
         macroEditorsPath = AppSettingsWizard.getValueFromNode(xml, "MACROEDITORS_PATH", default="")
-        
-        id = self._confWidget.macroServerComboBox.findText( macroserverName, Qt.Qt.MatchExactly)
-        if id >=0:
+
+        id = self._confWidget.macroServerComboBox.findText(macroserverName, Qt.Qt.MatchExactly)
+        if id >= 0:
             self._confWidget.macroServerComboBox.setCurrentIndex(id)
             self._macroGroupBox.setChecked(True)
         else:
             self._macroGroupBox.setChecked(False)
             return
-            
-        id = self._confWidget.doorComboBox.findText( doorName, Qt.Qt.MatchExactly)
-        if id >=0:
+
+        id = self._confWidget.doorComboBox.findText(doorName, Qt.Qt.MatchExactly)
+        if id >= 0:
             self._confWidget.doorComboBox.setCurrentIndex(id)
 
     def checkData(self):
         BasePage.checkData(self)
         if (self._macroGroupBox.isChecked()) and len(self._confWidget.macroServerComboBox.currentText()):
-            self.setNextPageId(self.wizard().currentId()+1)
+            self.setNextPageId(self.wizard().currentId() + 1)
         else:
-            self.setNextPageId(self.wizard().currentId()+2)
-          
+            self.setNextPageId(self.wizard().currentId() + 2)
+
     def _getMacroServerName(self):
         if (self._macroGroupBox.isChecked()) and len(self._confWidget.macroServerComboBox.currentText()):
             return str(self._confWidget.macroServerComboBox.currentText())
         else:
             return None
-    
+
     def _getDoorName(self):
         if (self._macroGroupBox.isChecked()) and len(self._confWidget.macroServerComboBox.currentText()):
             return str(self._confWidget.doorComboBox.currentText())
         else:
             return None
 
-    def _setStatus(self,text):
-        self._status_label.setText(text)        
-           
+    def _setStatus(self, text):
+        self._status_label.setText(text)
+
+
 class InstrumentsPage(BasePage):
-    def __init__(self, parent = None):
+    def __init__(self, parent=None):
         BasePage.__init__(self, parent)
-        
+
     def initializePage(self):
         BasePage.initializePage(self)
-        self.wizard().__setitem__("instruments",self._getInstruments)
+        self.wizard().__setitem__("instruments", self._getInstruments)
         self._label.setText("<b>%s</b> can use instrument information stored in the Sardana's Pool to create instrument panels." % self.wizard().__getitem__("guiName"))
-        
+
     def _setupUI(self):
         BasePage._setupUI(self)
         self.setTitle('Instruments from Pool:')
         self._label = Qt.QLabel()
         self._label.setWordWrap(True)
-        self._layout.addWidget(self._label,0,0,1,3)
-        
+        self._layout.addWidget(self._label, 0, 0, 1, 3)
+
         self._instrumentsLabel = Qt.QLabel("Generate panels from Pool Info?")
         self._intstrumentsBoolean = BooleanWidget()
         self._intstrumentsBoolean.setMinimumSize(150, 25)
-        self._layout.addWidget(self._instrumentsLabel,5,0,1,1,Qt.Qt.AlignRight)
-        self._layout.addWidget(self._intstrumentsBoolean,5,1,1,1,Qt.Qt.AlignRight)
-        
+        self._layout.addWidget(self._instrumentsLabel, 5, 0, 1, 1, Qt.Qt.AlignRight)
+        self._layout.addWidget(self._intstrumentsBoolean, 5, 1, 1, 1, Qt.Qt.AlignRight)
+
         self._spacerItem1 = Qt.QSpacerItem(10, 0, Qt.QSizePolicy.Fixed, Qt.QSizePolicy.Expanding)
-        self._layout.addItem(self._spacerItem1,8,0,1,1,Qt.Qt.AlignCenter)
+        self._layout.addItem(self._spacerItem1, 8, 0, 1, 1, Qt.Qt.AlignCenter)
         self._status_label = Qt.QLabel("Press next button to continue")
         self.setStatusLabelPalette(self._status_label)
-        self._layout.addWidget(self._status_label,9,0,1,3)
-        
+        self._layout.addWidget(self._status_label, 9, 0, 1, 3)
+
     def fromXml(self, xml):
         instruments = AppSettingsWizard.getValueFromNode(xml, "INSTRUMENTS_FROM_POOL", default="False")
         if str(instruments).lower() == "true":
             self._intstrumentsBoolean.setValue(True)
         else:
             self._intstrumentsBoolean.setValue(False)
-            
+
     def _getInstruments(self):
         return str(self._intstrumentsBoolean.getValue())
-        
+
     def checkData(self):
-        self._valid=True
-    
-    def _setStatus(self,text):
+        self._valid = True
+
+    def _setStatus(self, text):
         self._status_label.setText(text)
-        
-    
+
+
 class PanelsPage(BasePage):
-    
-    def __init__(self, parent = None):
+
+    def __init__(self, parent=None):
         BasePage.__init__(self, parent)
         self._panels = []
-        
+
     def initializePage(self):
         BasePage.initializePage(self)
-        self.wizard().__setitem__("panels",self._getPanels)
+        self.wizard().__setitem__("panels", self._getPanels)
         self._refreshPanelList()
-        
+
     def _setupUI(self):
         BasePage._setupUI(self)
         self.setTitle('Panels editor')
         self._label = Qt.QLabel("If you want extra panels add them to this list\n")
-        self._layout.addWidget(self._label,0,0)
+        self._layout.addWidget(self._label, 0, 0)
         self.setLayout(self._layout)
         self._panelGroupBox = Qt.QGroupBox()
         self._panelGroupBox.setCheckable(False)
         self._panelGroupBox.setAlignment(Qt.Qt.AlignLeft)
         self._panelGroupBox.setStyleSheet(" QGroupBox::title {  subcontrol-position: top left; padding: 5 5px; }")
-        self._layout.addWidget(self._panelGroupBox,2,0,1,1)
+        self._layout.addWidget(self._panelGroupBox, 2, 0, 1, 1)
         self._horizontalLayout = Qt.QHBoxLayout(self._panelGroupBox)
         self._panelList = Qt.QListWidget(self._panelGroupBox)
         self._horizontalLayout.addWidget(self._panelList)
@@ -773,91 +777,91 @@ class PanelsPage(BasePage):
         Qt.QObject.connect(self._removeButton, Qt.SIGNAL("clicked()"), self._removePanel)
         Qt.QObject.connect(self._upButton, Qt.SIGNAL("clicked()"), self._moveUp)
         Qt.QObject.connect(self._downButton, Qt.SIGNAL("clicked()"), self._moveDown)
-        Qt.QObject.connect(self._panelList, Qt.SIGNAL("itemDoubleClicked(QListWidgetItem*)"), self._editPanel) 
+        Qt.QObject.connect(self._panelList, Qt.SIGNAL("itemDoubleClicked(QListWidgetItem*)"), self._editPanel)
         self._spacerItem1 = Qt.QSpacerItem(10, 0, Qt.QSizePolicy.Fixed, Qt.QSizePolicy.Expanding)
-        self._layout.addItem(self._spacerItem1,8,0,1,1,Qt.Qt.AlignCenter)
+        self._layout.addItem(self._spacerItem1, 8, 0, 1, 1, Qt.Qt.AlignCenter)
         self._status_label = Qt.QLabel("Press next button to continue")
         self.setStatusLabelPalette(self._status_label)
-        self._layout.addWidget(self._status_label,9,0,1,1)
-        
+        self._layout.addWidget(self._status_label, 9, 0, 1, 1)
+
     def fromXml(self, xml):
         self._panels = []
         panelNodes = AppSettingsWizard.getArrayFromNode(xml, "PanelDescriptions", default=[])
         for child in panelNodes:
             name = AppSettingsWizard.getValueFromNode(child, "name", default=None)
             if name:
-                self._panels.append( ( name, etree.tostring(child) ) )
-        
+                self._panels.append((name, etree.tostring(child)))
+
     def _addPanel (self):
-        paneldesc,ok = taurus.qt.qtgui.taurusgui.paneldescriptionwizard.PanelDescriptionWizard.getDialog(self)
+        paneldesc, ok = taurus.qt.qtgui.taurusgui.paneldescriptionwizard.PanelDescriptionWizard.getDialog(self)
         if ok:
             w = paneldesc.getWidget()
-            self._panels.append((paneldesc.name,paneldesc.toXml()))
-            
+            self._panels.append((paneldesc.name, paneldesc.toXml()))
+
         self._refreshPanelList()
-        
+
     def _editPanel (self):
         # edit
         self._refreshPanelList()
-            
+
     def _removePanel(self):
-        if len(self._panelList.selectedIndexes())>0:
-            self._panel_id=self._panelList.selectedIndexes()[0].row()
+        if len(self._panelList.selectedIndexes()) > 0:
+            self._panel_id = self._panelList.selectedIndexes()[0].row()
             self._panels.remove(self._panels[self._panel_id])
             self._refreshPanelList()
-            
+
     def _moveUp(self):
-        if len(self._panelList.selectedIndexes())>0:
-            self._panel_id=self._panelList.selectedIndexes()[0].row()
+        if len(self._panelList.selectedIndexes()) > 0:
+            self._panel_id = self._panelList.selectedIndexes()[0].row()
             if self._panel_id > 0:
-                tmp =  self._panels[self._panel_id]
-                self._panels[self._panel_id]=self._panels[self._panel_id-1]
-                self._panels[self._panel_id-1]=tmp
+                tmp = self._panels[self._panel_id]
+                self._panels[self._panel_id] = self._panels[self._panel_id - 1]
+                self._panels[self._panel_id - 1] = tmp
                 self._refreshPanelList()
-                self._panelList.setCurrentIndex(self._panelList.indexFromItem(self._panelList.item(self._panel_id-1) ))
-                
+                self._panelList.setCurrentIndex(self._panelList.indexFromItem(self._panelList.item(self._panel_id - 1)))
+
     def _moveDown(self):
-        if len(self._panelList.selectedIndexes())>0:
-            self._panel_id=self._panelList.selectedIndexes()[0].row()
-            if self._panel_id < self._panelList.count()-1:
-                tmp =  self._panels[self._panel_id]
-                self._panels[self._panel_id]=self._panels[self._panel_id+1]
-                self._panels[self._panel_id+1]=tmp
+        if len(self._panelList.selectedIndexes()) > 0:
+            self._panel_id = self._panelList.selectedIndexes()[0].row()
+            if self._panel_id < self._panelList.count() - 1:
+                tmp = self._panels[self._panel_id]
+                self._panels[self._panel_id] = self._panels[self._panel_id + 1]
+                self._panels[self._panel_id + 1] = tmp
                 self._refreshPanelList()
-                self._panelList.setCurrentIndex(self._panelList.indexFromItem(self._panelList.item(self._panel_id+1) ))
-              
+                self._panelList.setCurrentIndex(self._panelList.indexFromItem(self._panelList.item(self._panel_id + 1)))
+
     def _refreshPanelList(self):
         self._panelList.clear()
         for panel in self._panels:
-            name,xml = panel
+            name, xml = panel
             self._panelList.addItem(name)
-            
+
     def _getPanels(self):
-        if len(self._panels)<=0:
+        if len(self._panels) <= 0:
             return None
         else:
             return self._panels
-        
+
     def checkData(self):
-        BasePage.checkData(self)          
-        self._valid=True
-    
-    def _setStatus(self,text):
+        BasePage.checkData(self)
+        self._valid = True
+
+    def _setStatus(self, text):
         self._status_label.setText(text)
-        
-        
-class ExternalAppEditor(Qt.QDialog): 
+
+
+class ExternalAppEditor(Qt.QDialog):
     '''
     A dialog for configuring an external appaction for a TaurusMainWindow.
     '''
     #@todo: this class should be made more generic (e.g. provide a getter for an ExternalAppAction) and then moved elsewhere
-    def __init__(self, parent = None):
+    def __init__(self, parent=None):
         Qt.QDialog.__init__(self, parent)
         self.setModal(True)
         self.setWindowTitle('External Application Editor')
-        
-        self._dlgBox = Qt.QDialogButtonBox(Qt.QDialogButtonBox.Ok| Qt.QDialogButtonBox.Cancel)
-        
+
+        self._dlgBox = Qt.QDialogButtonBox(Qt.QDialogButtonBox.Ok | Qt.QDialogButtonBox.Cancel)
+
         self._layout = Qt.QVBoxLayout()
         self._layout1 = Qt.QGridLayout()
         self._layout2 = Qt.QHBoxLayout()
@@ -865,11 +869,11 @@ class ExternalAppEditor(Qt.QDialog):
         self._layout.addLayout(self._layout2)
         self._layout.addWidget(self._dlgBox)
         self.setLayout(self._layout)
-        
+
         self._icon = None
         self._label = Qt.QLabel("\n On this page you can define an external application. \n")
         self._label.setWordWrap(True)
-        self._layout1.addWidget(self._label,0,0,1,4) 
+        self._layout1.addWidget(self._label, 0, 0, 1, 4)
         self._execFileLabel = Qt.QLabel("Command:")
         self._execFileLineEdit = Qt.QLineEdit()
         self._execFileLineEdit.setMinimumSize(150, 25)
@@ -878,128 +882,125 @@ class ExternalAppEditor(Qt.QDialog):
         self._execFileButton.setIcon(taurus.qt.qtgui.resource.getThemeIcon("folder-open"))
         self._execFileButton.setToolTip("Browse...")
         self._execFileButton.setMaximumSize(80, 25)
-        self._layout1.addWidget(self._execFileLabel,2,0,Qt.Qt.AlignRight)
-        self._layout1.addWidget(self._execFileLineEdit,2,1,Qt.Qt.AlignRight)
-        self._layout1.addWidget(self._execFileButton,2,2,Qt.Qt.AlignLeft)
+        self._layout1.addWidget(self._execFileLabel, 2, 0, Qt.Qt.AlignRight)
+        self._layout1.addWidget(self._execFileLineEdit, 2, 1, Qt.Qt.AlignRight)
+        self._layout1.addWidget(self._execFileButton, 2, 2, Qt.Qt.AlignLeft)
         self._paramsLabel = Qt.QLabel("Parameters:")
         self._paramsLineEdit = Qt.QLineEdit()
         self._paramsLineEdit.setMinimumSize(150, 25)
-        self._layout1.addWidget(self._paramsLabel,3,0,Qt.Qt.AlignRight)
-        self._layout1.addWidget(self._paramsLineEdit,3,1,Qt.Qt.AlignRight)
+        self._layout1.addWidget(self._paramsLabel, 3, 0, Qt.Qt.AlignRight)
+        self._layout1.addWidget(self._paramsLineEdit, 3, 1, Qt.Qt.AlignRight)
         self._textLabel = Qt.QLabel("Text:")
         self._textLineEdit = Qt.QLineEdit()
         self._textLineEdit.setMinimumSize(150, 25)
-        self._layout1.addWidget(self._textLabel,4,0,Qt.Qt.AlignRight)
-        self._layout1.addWidget(self._textLineEdit,4,1,Qt.Qt.AlignRight)
-        
+        self._layout1.addWidget(self._textLabel, 4, 0, Qt.Qt.AlignRight)
+        self._layout1.addWidget(self._textLineEdit, 4, 1, Qt.Qt.AlignRight)
+
         self._iconLabel = Qt.QLabel("Icon:")
         self._iconLogo = Qt.QPushButton()
-        self._iconLogo.setIcon(Qt.QIcon(taurus.qt.qtgui.resource.getThemePixmap("image-missing") ) )
-        self._iconLogo.setIconSize(Qt.QSize(60,60))
+        self._iconLogo.setIcon(Qt.QIcon(taurus.qt.qtgui.resource.getThemePixmap("image-missing")))
+        self._iconLogo.setIconSize(Qt.QSize(60, 60))
         self._iconLogo.setStyleSheet(" QPushButton:flat { border: none; /* no border for a flat push button */} ")
         self._iconLogo.setFlat(True)
-        self._layout1.addWidget(self._iconLabel,5,0,Qt.Qt.AlignRight)
-        self._layout1.addWidget(self._iconLogo,5,1,Qt.Qt.AlignCenter)
+        self._layout1.addWidget(self._iconLabel, 5, 0, Qt.Qt.AlignRight)
+        self._layout1.addWidget(self._iconLogo, 5, 1, Qt.Qt.AlignCenter)
         self._spacerItem1 = Qt.QSpacerItem(10, 0, Qt.QSizePolicy.Fixed, Qt.QSizePolicy.Expanding)
-        self._layout1.addItem(self._spacerItem1,8,0,1,1,Qt.Qt.AlignCenter)
-             
+        self._layout1.addItem(self._spacerItem1, 8, 0, 1, 1, Qt.Qt.AlignCenter)
+
         #connections
         Qt.QObject.connect(self._execFileButton, Qt.SIGNAL("clicked()"), self._selectExecFile)
         Qt.QObject.connect(self._execFileLineEdit, Qt.SIGNAL("textChanged(const QString&)"), self._setDefaultText)
         Qt.QObject.connect(self._iconLogo, Qt.SIGNAL("clicked()"), self._selectIcon)
-        self.connect(self._dlgBox,Qt.SIGNAL('accepted()'), self.accept)
-        self.connect(self._dlgBox,Qt.SIGNAL('rejected()'), self.reject)
+        self.connect(self._dlgBox, Qt.SIGNAL('accepted()'), self.accept)
+        self.connect(self._dlgBox, Qt.SIGNAL('rejected()'), self.reject)
         self.checkData()
         self._setIcon(ExternalAppAction.DEFAULT_ICON_NAME)
-        
-    def _getExecFile(self):
-        return self._execFileLineEdit.text()
-    
+
+
     def checkData(self):
-        if len(self._execFileLineEdit.text())>0:
+        if len(self._execFileLineEdit.text()) > 0:
             self._dlgBox.button(Qt.QDialogButtonBox.Ok).setEnabled(True)
         else:
             self._dlgBox.button(Qt.QDialogButtonBox.Ok).setEnabled(False)
-    
+
     def _setDefaultText(self):
         fileName = self._execFileLineEdit.text().split('/')[-1]
         index = str(fileName).rfind(".")
-        if (index>0):
-            self._textLineEdit.setText ( str(fileName)[0:index] )
+        if (index > 0):
+            self._textLineEdit.setText (str(fileName)[0:index])
         else:
             self._textLineEdit.setText(fileName)
         self.checkData()
-        
+
     def _selectExecFile(self):
-        filePath = Qt.QFileDialog.getOpenFileName(self, self.tr("Open File"),Qt.QDir.homePath(), self.tr("All files (*)")  )
+        filePath = Qt.QFileDialog.getOpenFileName(self, self.tr("Open File"), Qt.QDir.homePath(), self.tr("All files (*)"))
         if len(filePath):
             self._execFileLineEdit.setText(filePath)
             self._setDefaultText()
-             
+            
+    def _getExecFile(self):
+        return str(self._execFileLineEdit.text())
+
     def _selectIcon(self):
-        iconNameList=[]
-        pixmapList={}
+        iconNameList = []
+        pixmapList = {}
         rowIconName = []
         #rowPixmap=[]
         rowSize = 7
-        r=0
-        i=0
-        
+        r = 0
+        i = 0
+
         progressBar = Qt.QProgressDialog  ("Loading icons...", "Abort", 0, len(taurus.qt.qtgui.resource.getThemeMembers().items()), self)
         progressBar.setModal(True)
         progressBar.setMinimumDuration(0)
-                
-        for k,v in taurus.qt.qtgui.resource.getThemeMembers().items():
-            progressBar.setValue(progressBar.value()+1)
+
+        for k, v in taurus.qt.qtgui.resource.getThemeMembers().items():
+            progressBar.setValue(progressBar.value() + 1)
             progressBar.setLabelText(k)
             for iconName in v:
                 if (not progressBar.wasCanceled()):
                     p = taurus.qt.qtgui.resource.getThemePixmap(iconName)
                     rowIconName.append(iconName)
                     pixmapList[iconName] = p
-                    i=i+1
-                    if r == rowSize-1:
-                        r=0
+                    i = i + 1
+                    if r == rowSize - 1:
+                        r = 0
                         iconNameList.append(rowIconName)
-                        rowIconName=[]
+                        rowIconName = []
                     else:
-                        r=r+1
-                    
-        if (len (rowIconName)>0) and not (progressBar.wasCanceled()):
+                        r = r + 1
+
+        if (len (rowIconName) > 0) and not (progressBar.wasCanceled()):
             iconNameList.append(rowIconName)
-        
+
         if not progressBar.wasCanceled():
             progressBar.close()
-            name,ok = taurus.qt.qtgui.input.GraphicalChoiceDlg.getChoice(parent=None, title= 'Panel chooser', msg='Choose the type of Panel:', choices=iconNameList, pixmaps=pixmapList, iconSize=60)            
+            name, ok = taurus.qt.qtgui.input.GraphicalChoiceDlg.getChoice(parent=None, title='Panel chooser', msg='Choose the type of Panel:', choices=iconNameList, pixmaps=pixmapList, iconSize=60)
             if ok:
                 self._setIcon(name)
         else:
             progressBar.close()
-            
+
     def _setIcon(self , name):
-        if taurus.qt.qtgui.resource.getThemePixmap(name).width()!=0:
-            self._iconLogo.setIcon(Qt.QIcon(taurus.qt.qtgui.resource.getThemePixmap(name) ) )
-            self._iconLogo.setIconSize(Qt.QSize(60,60))
+        if taurus.qt.qtgui.resource.getThemePixmap(name).width() != 0:
+            self._iconLogo.setIcon(Qt.QIcon(taurus.qt.qtgui.resource.getThemePixmap(name)))
+            self._iconLogo.setIconSize(Qt.QSize(60, 60))
             self._iconLogo.setText("")
             self._icon = name
         else:
             self._iconLogo.setText(name)
             self._icon = name
-        
-    
-    def _getExecFile(self):
-        return str(self._execFileLineEdit.text())
-    
+
     def _getParams(self):
         return str(self._paramsLineEdit.text())
         #return str(self._paramsLineEdit.text()).split()
-    
+
     def _getText(self):
         return str(self._textLineEdit.text())
-    
+
     def _getIcon(self):
         return str(self._icon)
-      
+
     def _toXml(self):
         root = etree.Element("ExternalApp")
         command = etree.SubElement(root, "command")
@@ -1010,37 +1011,37 @@ class ExternalAppEditor(Qt.QDialog):
         text.text = self._getText()
         icon = etree.SubElement(root, "icon")
         icon.text = self._getIcon()
-        
+
         return etree.tostring(root)
 
-    @staticmethod    
+    @staticmethod
     def getDialog():
         dlg = ExternalAppEditor()
         dlg.exec_()
-        return dlg._getExecFile(), dlg._toXml() , (dlg.result() == dlg.Accepted)   
-    
-        
+        return dlg._getExecFile(), dlg._toXml() , (dlg.result() == dlg.Accepted)
+
+
 class ExternalAppPage(BasePage):
-    def __init__(self, parent = None):
+    def __init__(self, parent=None):
         BasePage.__init__(self, parent)
         self._externalApps = []
-        
+
     def initializePage(self):
         BasePage.initializePage(self)
-        self.wizard().__setitem__("externalApps",self._getExternalApps)
+        self.wizard().__setitem__("externalApps", self._getExternalApps)
         self._refreshApplicationList()
-        
+
     def _setupUI(self):
         BasePage._setupUI(self)
         self.setTitle('External Applications')
         self._label = Qt.QLabel("The GUI may include shortcuts to external applications. You can add them now.\n")
-        self._layout.addWidget(self._label,0,0)
+        self._layout.addWidget(self._label, 0, 0)
         self.setLayout(self._layout)
         self._externalAppGroupBox = Qt.QGroupBox()
         self._externalAppGroupBox.setCheckable(False)
         self._externalAppGroupBox.setAlignment(Qt.Qt.AlignLeft)
         self._externalAppGroupBox.setStyleSheet(" QGroupBox::title {  subcontrol-position: top left; padding: 5 5px; }")
-        self._layout.addWidget(self._externalAppGroupBox,2,0,1,1)
+        self._layout.addWidget(self._externalAppGroupBox, 2, 0, 1, 1)
         self._horizontalLayout = Qt.QHBoxLayout(self._externalAppGroupBox)
         self._externalAppList = Qt.QListWidget(self._externalAppGroupBox)
         self._horizontalLayout.addWidget(self._externalAppList)
@@ -1066,263 +1067,263 @@ class ExternalAppPage(BasePage):
         Qt.QObject.connect(self._removeButton, Qt.SIGNAL("clicked()"), self._removeApplication)
         Qt.QObject.connect(self._upButton, Qt.SIGNAL("clicked()"), self._moveUp)
         Qt.QObject.connect(self._downButton, Qt.SIGNAL("clicked()"), self._moveDown)
-        Qt.QObject.connect(self._externalAppList, Qt.SIGNAL("itemDoubleClicked(QListWidgetItem*)"), self._editApplication) 
+        Qt.QObject.connect(self._externalAppList, Qt.SIGNAL("itemDoubleClicked(QListWidgetItem*)"), self._editApplication)
         self._spacerItem1 = Qt.QSpacerItem(10, 0, Qt.QSizePolicy.Fixed, Qt.QSizePolicy.Expanding)
-        self._layout.addItem(self._spacerItem1,8,0,1,1,Qt.Qt.AlignCenter)
+        self._layout.addItem(self._spacerItem1, 8, 0, 1, 1, Qt.Qt.AlignCenter)
         self._status_label = Qt.QLabel("Press next button to continue")
         self.setStatusLabelPalette(self._status_label)
-        self._layout.addWidget(self._status_label,9,0,1,1)
-        
+        self._layout.addWidget(self._status_label, 9, 0, 1, 1)
+
     def fromXml(self, xml):
         self._externalApps = []
         panelNodes = AppSettingsWizard.getArrayFromNode(xml, "ExternalApps", default=[])
         for child in panelNodes:
             name = AppSettingsWizard.getValueFromNode(child, "command", default=None)
             if name:
-                self._externalApps.append( ( name, etree.tostring(child) ) )
-    
+                self._externalApps.append((name, etree.tostring(child)))
+
     def _addApplication (self):
         name, xml, ok = ExternalAppEditor.getDialog()
         if ok:
-            self._externalApps.append((name,xml))
-            
+            self._externalApps.append((name, xml))
+
         self._refreshApplicationList()
-        
+
     def _editApplication (self):
         # edit
         self._refreshApplicationList()
-            
+
     def _removeApplication(self):
-        if len(self._externalAppList.selectedIndexes())>0:
-            self._app_id=self._externalAppList.selectedIndexes()[0].row()
+        if len(self._externalAppList.selectedIndexes()) > 0:
+            self._app_id = self._externalAppList.selectedIndexes()[0].row()
             self._externalApps.remove(self._externalApps[self._app_id])
             self._refreshApplicationList()
-            
+
     def _moveUp(self):
-        if len(self._externalAppList.selectedIndexes())>0:
-            self._app_id=self._externalAppList.selectedIndexes()[0].row()
+        if len(self._externalAppList.selectedIndexes()) > 0:
+            self._app_id = self._externalAppList.selectedIndexes()[0].row()
             if self._app_id > 0:
-                tmp =  self._externalApps[self._app_id]
-                self._externalApps[self._app_id]=self._externalApps[self._app_id-1]
-                self._externalApps[self._app_id-1]=tmp
+                tmp = self._externalApps[self._app_id]
+                self._externalApps[self._app_id] = self._externalApps[self._app_id - 1]
+                self._externalApps[self._app_id - 1] = tmp
                 self._refreshApplicationList()
-                self._externalAppList.setCurrentIndex(self._externalAppList.indexFromItem(self._externalAppList.item(self._app_id-1) ))
-                
+                self._externalAppList.setCurrentIndex(self._externalAppList.indexFromItem(self._externalAppList.item(self._app_id - 1)))
+
     def _moveDown(self):
-        if len(self._externalAppList.selectedIndexes())>0:
-            self._app_id=self._externalAppList.selectedIndexes()[0].row()
-            if self._app_id < self._externalAppList.count()-1:
-                tmp =  self._externalApps[self._app_id]
-                self._externalApps[self._app_id]=self._externalApps[self._app_id+1]
-                self._externalApps[self._app_id+1]=tmp
+        if len(self._externalAppList.selectedIndexes()) > 0:
+            self._app_id = self._externalAppList.selectedIndexes()[0].row()
+            if self._app_id < self._externalAppList.count() - 1:
+                tmp = self._externalApps[self._app_id]
+                self._externalApps[self._app_id] = self._externalApps[self._app_id + 1]
+                self._externalApps[self._app_id + 1] = tmp
                 self._refreshApplicationList()
-                self._externalAppList.setCurrentIndex(self._externalAppList.indexFromItem(self._externalAppList.item(self._app_id+1) ))
-              
+                self._externalAppList.setCurrentIndex(self._externalAppList.indexFromItem(self._externalAppList.item(self._app_id + 1)))
+
     def _refreshApplicationList(self):
         self._externalAppList.clear()
         for panel in self._externalApps:
-            name,xml = panel
+            name, xml = panel
             self._externalAppList.addItem(name)
-            
+
     def _getExternalApps(self):
-        if len(self._externalApps)<=0:
+        if len(self._externalApps) <= 0:
             return None
         else:
             return self._externalApps
-        
+
     def checkData(self):
-        BasePage.checkData(self)          
-        self._valid=True
-    
-    def _setStatus(self,text):
-        self._status_label.setText(text)     
-        
+        BasePage.checkData(self)
+        self._valid = True
+
+    def _setStatus(self, text):
+        self._status_label.setText(text)
+
 class MonitorPage(BasePage):
-    def __init__(self, parent = None):
+    def __init__(self, parent=None):
         BasePage.__init__(self, parent)
-    
+
     def initializePage(self):
         BasePage.initializePage(self)
-        self.wizard().__setitem__("monitor",self._getMonitor)
-    
+        self.wizard().__setitem__("monitor", self._getMonitor)
+
     def _setupUI(self):
         BasePage._setupUI(self)
         self.setTitle('Monitor List')
         self._label = Qt.QLabel("\nIf you want to monitor some attributes, add them to the monitor list. \n")
         self._label.setWordWrap(True)
-        self._layout.addWidget(self._label,0,0,1,4) 
+        self._layout.addWidget(self._label, 0, 0, 1, 4)
         self._monitorLabel = Qt.QLabel("Monitor List:")
         self._monitorLineEdit = Qt.QLineEdit()
         self._monitorLineEdit.setToolTip("Comma-separated list of attribute names")
         self._monitorLineEdit.setMinimumSize(400, 25)
         self._monitorLineEdit.setReadOnly(False)
         self._monitorButton = Qt.QPushButton()
-        self._monitorButton.setToolTip("Browse...") 
+        self._monitorButton.setToolTip("Browse...")
         #self._monitorButton.setIcon(taurus.qt.qtgui.resource.getThemeIcon("system-search"))
-        self._monitorButton.setIcon(taurus.qt.qtgui.resource.getIcon(":/designer/devs_tree.png"))     
+        self._monitorButton.setIcon(taurus.qt.qtgui.resource.getIcon(":/designer/devs_tree.png"))
         self._monitorButton.setMaximumSize(80, 25)
         self._monitorClearButton = Qt.QPushButton()
         self._monitorClearButton.setToolTip("Clear")
         self._monitorClearButton.setMaximumSize(80, 25)
-        self._monitorClearButton.setIcon(taurus.qt.qtgui.resource.getIcon(":/actions/edit-clear.svg"))     
-        self._layout.addWidget(self._monitorLabel,2,0,Qt.Qt.AlignRight)
-        self._layout.addWidget(self._monitorLineEdit,2,1,Qt.Qt.AlignRight)
-        self._layout.addWidget(self._monitorButton,2,2,Qt.Qt.AlignLeft)
-        self._layout.addWidget(self._monitorClearButton,2,3,Qt.Qt.AlignLeft)
+        self._monitorClearButton.setIcon(taurus.qt.qtgui.resource.getIcon(":/actions/edit-clear.svg"))
+        self._layout.addWidget(self._monitorLabel, 2, 0, Qt.Qt.AlignRight)
+        self._layout.addWidget(self._monitorLineEdit, 2, 1, Qt.Qt.AlignRight)
+        self._layout.addWidget(self._monitorButton, 2, 2, Qt.Qt.AlignLeft)
+        self._layout.addWidget(self._monitorClearButton, 2, 3, Qt.Qt.AlignLeft)
         Qt.QObject.connect(self._monitorButton, Qt.SIGNAL("clicked()"), self._selectMonitor)
         Qt.QObject.connect(self._monitorClearButton, Qt.SIGNAL("clicked()"), self._clearMonitor)
         #self._synopticClear.hide()
 
         self._spacerItem1 = Qt.QSpacerItem(10, 0, Qt.QSizePolicy.Fixed, Qt.QSizePolicy.Expanding)
-        self._layout.addItem(self._spacerItem1,8,0,1,1,Qt.Qt.AlignCenter)
+        self._layout.addItem(self._spacerItem1, 8, 0, 1, 1, Qt.Qt.AlignCenter)
         self._status_label = Qt.QLabel("Press next button to continue")
         self.setStatusLabelPalette(self._status_label)
-        self._layout.addWidget(self._status_label,9,0,1,4)
-        
-    def fromXml(self, xml): 
+        self._layout.addWidget(self._status_label, 9, 0, 1, 4)
+
+    def fromXml(self, xml):
         self._monitorLineEdit.setText(AppSettingsWizard.getValueFromNode(xml, "MONITOR", default=""))
-    
+
     def _clearMonitor(self):
         self._monitorLineEdit.clear()
         #self._monitorClearButton.hide()
-    
+
     def _getMonitor(self):
         return str(self._monitorLineEdit.text())
-        
+
     def _selectMonitor(self):
             models, ok = taurus.qt.qtgui.panel.TaurusModelChooser.modelChooserDlg(host=None)
             if ok:
                 self._monitorLineEdit.setText(",".join(models))
-            self.checkData()      
-    
-    def _setStatus(self,text):
+            self.checkData()
+
+    def _setStatus(self, text):
         self._status_label.setText(text)
 
-        
+
 class OutroPage(BasePage):
-    
-    def __init__(self, parent = None):
+
+    def __init__(self, parent=None):
         BasePage.__init__(self, parent)
         self._valid = True
         self.setTitle('Confirmation Page')
         self._label1 = Qt.QLabel("XML configuration file:")
-        self._layout.addWidget(self._label1,0,0)
+        self._layout.addWidget(self._label1, 0, 0)
         self._xml = Qt.QTextEdit()
         self._xml.setSizePolicy(Qt.QSizePolicy(Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Expanding))
-        self._layout.addWidget(self._xml,1,0)
+        self._layout.addWidget(self._xml, 1, 0)
         self._label2 = Qt.QLabel("Files copied")
-        self._layout.addWidget(self._label2,2,0)
+        self._layout.addWidget(self._label2, 2, 0)
         self._substTable = Qt.QTableWidget()
         self._substTable.setColumnCount(2)
         self._substTable.setEditTriggers(self._substTable.NoEditTriggers)
         self._substTable.setHorizontalHeaderLabels (('Original file', 'File in Project dir'))
         self._substTable.setSizePolicy(Qt.QSizePolicy(Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Expanding))
-        self._layout.addWidget(self._substTable,3,0)
+        self._layout.addWidget(self._substTable, 3, 0)
+
 
-        
     def _getXml(self):
         return str(self._xml.toPlainText())
-        
-  
+
+
     def saveFile(self, fileName):
         file = Qt.QFile(fileName)
-        
+
         if not file.open(Qt.QFile.WriteOnly | Qt.QFile.Text):
             Qt.QMessageBox.warning(self, self.tr("Saving XML..."),
                     self.tr("Cannot write file %1:\n%2.")
                     .arg(fileName)
                     .arg(file.errorString()))
             return False
-        
+
         file.write(str(self._xml.toPlainText()))
         self._valid = True
         self.checkData()
         file.close()
-  
+
         return True
-        
+
     def initializePage(self):
         xml, substitutions = self.wizard().generateXml()
         self._xml.setText(xml)
-        self.wizard().__setitem__("xml",self._getXml)
+        self.wizard().__setitem__("xml", self._getXml)
         self._substTable.clearContents()
         self._substTable.setRowCount(len(substitutions))
-        for i,(dst,src) in enumerate(substitutions.items()):
+        for i, (dst, src) in enumerate(substitutions.items()):
             item0, item1 = Qt.QTableWidgetItem(src), Qt.QTableWidgetItem(dst)
             self._substTable.setItem(i, 0, item0)
             self._substTable.setItem(i, 1, item1)
         self._substTable.resizeColumnsToContents()
-    
+
     def validatePage(self):
         try:
             self.createProject()
-        except Exception,e:
-            Qt.QMessageBox.warning(self, 'Error creating project', 
-                                    'Could not create project files. \nReason:%s'%repr(e),
+        except Exception, e:
+            Qt.QMessageBox.warning(self, 'Error creating project',
+                                    'Could not create project files. \nReason:%s' % repr(e),
                                      Qt.QMessageBox.Cancel)
             import traceback
             traceback.print_exc()
             return False
         return True
-        
+
     def createProject(self):
         #prepare a log file
         pdir = self.wizard().__getitem__('projectDir')
         logfilename = os.path.join(pdir, 'wizard.log')
         logfile = open(logfilename, 'w')
-        logfile.write('Project created by AppSettingsWizard on %s\n'%datetime.datetime.now().isoformat())
+        logfile.write('Project created by AppSettingsWizard on %s\n' % datetime.datetime.now().isoformat())
         #copy files
         for i in range(self._substTable.rowCount()):
-            src = unicode(self._substTable.item(i,0).text())
-            dst = os.path.join(pdir, unicode(self._substTable.item(i,1).text()))
+            src = unicode(self._substTable.item(i, 0).text())
+            dst = os.path.join(pdir, unicode(self._substTable.item(i, 1).text()))
             if os.path.normpath(src) != os.path.normpath(dst):
                 shutil.copy(src, dst)
-                logfile.write('File copied: %s --> %s\n'%(src, dst))
+                logfile.write('File copied: %s --> %s\n' % (src, dst))
         #write xml config file
         xmlcfgfilename = os.path.join(pdir, self.wizard().getXmlConfigFileName())
         f = open(xmlcfgfilename, 'w')
         f.write(unicode(self._xml.toPlainText()))
         f.close()
-        logfile.write('XML Config file created: "%s"\n'%xmlcfgfilename)
+        logfile.write('XML Config file created: "%s"\n' % xmlcfgfilename)
         #write python config file
-        pycfgfilename = os.path.join(pdir, '%s.py'%self.wizard().getConfigFilePrefix())
+        pycfgfilename = os.path.join(pdir, '%s.py' % self.wizard().getConfigFilePrefix())
         f = open(pycfgfilename, 'w')
-        f.write("XML_CONFIG = '%s'"%self.wizard().getXmlConfigFileName())
+        f.write("XML_CONFIG = '%s'" % self.wizard().getXmlConfigFileName())
         f.close()
-        logfile.write('Python config file created: "%s"\n'%pycfgfilename)        
+        logfile.write('Python config file created: "%s"\n' % pycfgfilename)
         #write __init__.py config file
         initfilename = os.path.join(pdir, '__init__.py')
         f = open(initfilename, 'w')
         f.write('from config import *')
         f.close()
-        logfile.write('python init file created: "%s"\n'%initfilename)
+        logfile.write('python init file created: "%s"\n' % initfilename)
         #write launcher script
         try:
             launcherfilename = os.path.join(pdir, self.wizard().__getitem__("guiName"))
             f = open(launcherfilename, 'w')
             f.write(('#!/bin/sh\n'
                      '#Make sure to give this file execution permisions\n'
-                     'taurusgui %s $*')%os.path.basename(pdir.rstrip('/')))
+                     'taurusgui %s $*') % os.path.basename(pdir.rstrip('/')))
             f.close()
-            os.chmod(launcherfilename,0755)
-            logfile.write('Unix launcher created: "%s"\n'%launcherfilename)
+            os.chmod(launcherfilename, 0755)
+            logfile.write('Unix launcher created: "%s"\n' % launcherfilename)
         except:
-            logfile.write('Error creating Unix launcher: "%s"\n'%launcherfilename)
+            logfile.write('Error creating Unix launcher: "%s"\n' % launcherfilename)
         #if all went ok...
-        msg = 'Application project was successfully created. You can find the files in: "%s"'%pdir
+        msg = 'Application project was successfully created. You can find the files in: "%s"' % pdir
         msg += '\nTip: copy this directory into a directory that is in your Python path.'
         details = ''
         warnings = self.wizard().getProjectWarnings()
         if warnings:
             msg += '\n\nHowever, some fine-tuning may be needed. Please check the details:\n'
-            for short,long in warnings:
-                details +='- %s: %s\n\n'%(short, long)        
-        logfile.write(msg+details)
-        logfile.close()    
-        dlg = Qt.QMessageBox(Qt.QMessageBox.Information,'Application project created', msg, Qt.QMessageBox.Ok, self)
+            for short, long in warnings:
+                details += '- %s: %s\n\n' % (short, long)
+        logfile.write(msg + details)
+        logfile.close()
+        dlg = Qt.QMessageBox(Qt.QMessageBox.Information, 'Application project created', msg, Qt.QMessageBox.Ok, self)
         dlg.setDetailedText(details)
         dlg.exec_()
-         
+
 
 class AppSettingsWizard(Qt.QWizard):
     """
@@ -1334,7 +1335,7 @@ class AppSettingsWizard(Qt.QWizard):
     time and those customizations will also be stored, this file defines what a
     user will find when launching the GUI for the first time.
     """
-    Pages = Enumeration('Pages', ('IntroPage', 'ProjectPage', 'GeneralSettings', 'CustomLogoPage','SynopticPage','MacroServerInfo','InstrumentsPage', 'PanelsPage','ExternalAppPage','MonitorPage','OutroPage'))
+    Pages = Enumeration('Pages', ('IntroPage', 'ProjectPage', 'GeneralSettings', 'CustomLogoPage', 'SynopticPage', 'MacroServerInfo', 'InstrumentsPage', 'PanelsPage', 'ExternalAppPage', 'MonitorPage', 'OutroPage'))
     def __init__(self, parent=None, jdrawCommand='jdraw', configFilePrefix='config'):
         Qt.QWizard.__init__(self, parent)
         self.installEventFilter(self)
@@ -1345,16 +1346,16 @@ class AppSettingsWizard(Qt.QWizard):
         self._loadPages()
         self._substitutions = {}
         self._projectWarnings = []
-    
+
     def getProjectWarnings(self):
         return self._projectWarnings
-    
+
     def getConfigFilePrefix(self):
         return self._configFilePrefix
-        
+
     def getXmlConfigFileName(self):
-        return "%s.xml"%self._configFilePrefix
-     
+        return "%s.xml" % self._configFilePrefix
+
     @staticmethod
     def getValueFromNode(rootNode, nodeName, default=None):
         '''
@@ -1368,7 +1369,7 @@ class AppSettingsWizard(Qt.QWizard):
             return node.text
         else:
             return default
-        
+
     @staticmethod
     def getArrayFromNode(rootNode, nodeName, default=None):
         '''
@@ -1385,7 +1386,7 @@ class AppSettingsWizard(Qt.QWizard):
             return array
         else:
             return default
-            
+
     def loadXml(self, fname):
         '''
         parses xml code and sets all pages according to its contents. It
@@ -1397,30 +1398,30 @@ class AppSettingsWizard(Qt.QWizard):
         f = open(fname, 'r')
         xml = f.read()
         root = etree.fromstring(xml)
-        
+
         #print self.Pages
         for pageNumber in range(len(self.Pages.keys())):
             self.page(pageNumber).fromXml(root)
-    
+
     def getXml(self):
         try:
             return self.__getitem__("xml")
-        except Exception,e:
+        except Exception, e:
             return None
 
     def __setitem__(self, name, value):
         self._item_funcs[name] = value
-        
+
     def __getitem__(self, name):
         for id in self.getPages():
             p = self.page(id)
             if isinstance(p, BasePage):
                 try:
                     return p[name]()
-                except Exception,e:
+                except Exception, e:
                     pass
         return self._item_funcs[name]()
-    
+
     def addPage(self, page):
         id = Qt.QWizard.addPage(self, page)
         self._pages[id] = page
@@ -1428,57 +1429,62 @@ class AppSettingsWizard(Qt.QWizard):
     def setPage(self, id, page):
         Qt.QWizard.setPage(self, id, page)
         self._pages[id] = page
-        
+
     def getPages(self):
         return self._pages
-    
+
     def _loadPages(self):
         intro = IntroPage()
         self.setPage(self.Pages.IntroPage, intro)
         intro.setNextPageId(self.Pages.ProjectPage)
-        
+
         project_page = ProjectPage()
         self.setPage(self.Pages.ProjectPage, project_page)
         project_page.setNextPageId(self.Pages.GeneralSettings)
-        
+
         general_settings_page = GeneralSettings()
         self.setPage(self.Pages.GeneralSettings, general_settings_page)
         general_settings_page.setNextPageId(self.Pages.CustomLogoPage)
-        
+
         custom_logo_page = CustomLogoPage()
         self.setPage(self.Pages.CustomLogoPage, custom_logo_page)
         custom_logo_page.setNextPageId(self.Pages.SynopticPage)
-        
+
         synoptic_page = SynopticPage()
         self.setPage(self.Pages.SynopticPage, synoptic_page)
-        synoptic_page.setNextPageId(self.Pages.MacroServerInfo)
-        
-        macroserver_page = MacroServerInfoPage()
-        self.setPage(self.Pages.MacroServerInfo, macroserver_page)
-        macroserver_page.setNextPageId(self.Pages.InstrumentsPage) 
-        
-        instruments_page = InstrumentsPage()
-        self.setPage(self.Pages.InstrumentsPage, instruments_page)
-        instruments_page.setNextPageId(self.Pages.PanelsPage)
         
+        if SARDANA_INSTALLED:
+            synoptic_page.setNextPageId(self.Pages.MacroServerInfo)
+            
+            macroserver_page = MacroServerInfoPage()
+            self.setPage(self.Pages.MacroServerInfo, macroserver_page)
+            macroserver_page.setNextPageId(self.Pages.InstrumentsPage)
+            
+            instruments_page = InstrumentsPage()
+            self.setPage(self.Pages.InstrumentsPage, instruments_page)
+            instruments_page.setNextPageId(self.Pages.PanelsPage) 
+            
+        else:
+            synoptic_page.setNextPageId(self.Pages.PanelsPage)
+
         panels_page = PanelsPage()
         self.setPage(self.Pages.PanelsPage, panels_page)
         panels_page.setNextPageId(self.Pages.ExternalAppPage)
-        
+
         external_app_page = ExternalAppPage()
         self.setPage(self.Pages.ExternalAppPage, external_app_page)
         external_app_page.setNextPageId(self.Pages.MonitorPage)
-          
+
         monitor_page = MonitorPage()
         self.setPage(self.Pages.MonitorPage, monitor_page)
-        monitor_page.setNextPageId(self.Pages.OutroPage)   
-        
+        monitor_page.setNextPageId(self.Pages.OutroPage)
+
         outro_page = OutroPage()
         self.setPage(self.Pages.OutroPage, outro_page)
         outro_page.setNextPageId(-1)
-    
+
         self.setOption (Qt.QWizard.CancelButtonOnLeft , True)
-        
+
     def generateXml(self):
         '''returns the xml code corresponding to the options selected in the wizard
         and a dictionary representing the paths that have been substituted.
@@ -1496,11 +1502,11 @@ class AppSettingsWizard(Qt.QWizard):
         organizationName.text = self.__getitem__("organizationName")
         #custom logo page
         customLogo = etree.SubElement(root, "CUSTOM_LOGO")
-        src = self.__getitem__("customLogo")       
+        src = self.__getitem__("customLogo")
         if src is None or src.startswith(":"):
             dst = src
         else:
-            src = os.path.join(pdir,src) #if src is absolute, it stays so, and if it is relative, we assume pdir as the root dir
+            src = os.path.join(pdir, src)  #if src is absolute, it stays so, and if it is relative, we assume pdir as the root dir
             dst = self.substitutionName(src)
         customLogo.text = dst
         #synoptic page
@@ -1508,26 +1514,26 @@ class AppSettingsWizard(Qt.QWizard):
         if synopticList:
             synoptics = etree.SubElement(root, "SYNOPTIC")
             for src in synopticList:
-                src = os.path.join(pdir,src)
+                src = os.path.join(pdir, src)
                 #substitute the jdw files
                 dst = self.substitutionName(src)
-                child = etree.SubElement(synoptics, "synoptic", str = dst)
+                child = etree.SubElement(synoptics, "synoptic", str=dst)
                 #substitute any referenced files within the jdrawfiles
-                f = open(src,'r')
+                f = open(src, 'r')
                 contents = f.read()
                 f.close()
-                for ref in re.findall(r'file_name:\"(.+?)\"',contents):
-                    refsrc = os.path.join(os.path.dirname(src),ref) #this is ok for both relative and absolute references
+                for ref in re.findall(r'file_name:\"(.+?)\"', contents):
+                    refsrc = os.path.join(os.path.dirname(src), ref)  #this is ok for both relative and absolute references
                     refdst = self.substitutionName(refsrc)
                     if ref != refdst:
-                        short = 'Manual editing needed in "%s"'%dst
+                        short = 'Manual editing needed in "%s"' % dst
                         long = ('The synoptic file "%s" references a file that '
                                'has been copied to the project dir in order to make the project portable. '
-                               'Please edit "%s" and replace "%s" by "%s"')%(dst, dst, ref, refdst)
-                        self._projectWarnings.append((short,long))
-                        
-        #macroserver page        
-        if self.__getitem__("macroServerName"):
+                               'Please edit "%s" and replace "%s" by "%s"') % (dst, dst, ref, refdst)
+                        self._projectWarnings.append((short, long))
+
+        #macroserver page
+        if SARDANA_INSTALLED and self.__getitem__("macroServerName"):
             macroServerName = etree.SubElement(root, "MACROSERVER_NAME")
             macroServerName.text = self.__getitem__("macroServerName")
             doorName = etree.SubElement(root, "DOOR_NAME")
@@ -1539,42 +1545,42 @@ class AppSettingsWizard(Qt.QWizard):
         if panelList:
             panels = etree.SubElement(root, "PanelDescriptions")
             for panel in panelList:
-                name,xml = panel
+                name, xml = panel
                 item = etree.fromstring(xml)
                 panels.append(item)
-        #external apps page   
+        #external apps page
         externalAppList = self.__getitem__("externalApps")
         if externalAppList:
             externalApps = etree.SubElement(root, "ExternalApps")
             for externalApp in externalAppList:
-                name,xml = externalApp
+                name, xml = externalApp
                 item = etree.fromstring(xml)
                 externalApps.append(item)
        #monitor page
         monitor = etree.SubElement(root, "MONITOR")
         monitor.text = self.__getitem__("monitor")
-        
+
         return  etree.tostring(root, pretty_print=True), copy.copy(self._substitutions)
-        
+
     def substitutionName(self, src):
         name = os.path.basename(src)
-        i=2
+        i = 2
         while name in self._substitutions:
-            root,ext = os.path.splitext(name)
-            name = "%s_%i%s"%(root,i,ext)
+            root, ext = os.path.splitext(name)
+            name = "%s_%i%s" % (root, i, ext)
             i += 1
         self._substitutions[name] = src
         return name
-                    
-        
+
+
 def main():
     app = Qt.QApplication([])
     wizard = AppSettingsWizard()
     wizard.show()
     sys.exit(app.exec_())
-  
+
 if __name__ == "__main__":
     main()
 
-        
-    
+
+
diff --git a/lib/taurus/qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py b/lib/taurus/qt/qtgui/taurusgui/conf/gui_noconf.py
old mode 100644
new mode 100755
similarity index 64%
copy from lib/taurus/qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py
copy to lib/taurus/qt/qtgui/taurusgui/conf/gui_noconf.py
index bb8829e..2f8d7af
--- a/lib/taurus/qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py
+++ b/lib/taurus/qt/qtgui/taurusgui/conf/gui_noconf.py
@@ -23,19 +23,17 @@
 ##
 ###########################################################################
 
+'''An example of usage of TaurusGui in which no configuration file is used
+(everything is done programmatically) 
+This can be launched directly as a stand-alone python script'''
 
-"""
-PermanentCustomPanelDlg.py: 
-"""
-
-from taurus.qt import Qt
-
-class PermanentCustomPanelsDlg(object):
-    '''
-    .. warning:: This class is deprecated. Use class:`taurus.qt.qtgui.panel.QDoubleList` instead
-    '''
-    def __init__(self, *args, **kwargs):
-        raise DeprecationWarning('PermanentCustomPanelsDlg is deprecated. Use taurus.qt.qtgui.panel.QDoubleList instead')
-        
-        
-        
\ No newline at end of file
+if __name__ == '__main__':
+    from taurus.qt.qtgui.application import TaurusApplication
+    from taurus.qt.qtgui.taurusgui import TaurusGui
+    from taurus.external.qt import Qt
+    app = TaurusApplication(app_name='MyGui') #if app_name name not given, it uses the file name
+    gui = TaurusGui()
+    panel = Qt.QWidget()
+    gui.createPanel(panel, 'Foo')
+    gui.show()
+    app.exec_()
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py b/lib/taurus/qt/qtgui/taurusgui/conf/gui_pureconf.py
similarity index 68%
copy from lib/taurus/qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py
copy to lib/taurus/qt/qtgui/taurusgui/conf/gui_pureconf.py
index bb8829e..f0b9173 100644
--- a/lib/taurus/qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py
+++ b/lib/taurus/qt/qtgui/taurusgui/conf/gui_pureconf.py
@@ -23,19 +23,17 @@
 ##
 ###########################################################################
 
+'''An example of usage of TaurusGui in which the current file is a pure 
+declarative configuration file that should be interpreted by the tarusgui 
+script by running `taurusgui gui_pureconf` (if gui_pureconf.py is in the 
+PYTHONPATH) or `taurusgui <full_path_to_gui_pureconf.py>` (if it is not 
+in the PYTHONPATH)'''
+
+
+from taurus.qt.qtgui.taurusgui.utils import PanelDescription
+
+GUI_NAME = 'MyGui'
+panel = PanelDescription('Foo', classname='taurus.external.qt.Qt.QWidget')
+
+
 
-"""
-PermanentCustomPanelDlg.py: 
-"""
-
-from taurus.qt import Qt
-
-class PermanentCustomPanelsDlg(object):
-    '''
-    .. warning:: This class is deprecated. Use class:`taurus.qt.qtgui.panel.QDoubleList` instead
-    '''
-    def __init__(self, *args, **kwargs):
-        raise DeprecationWarning('PermanentCustomPanelsDlg is deprecated. Use taurus.qt.qtgui.panel.QDoubleList instead')
-        
-        
-        
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py b/lib/taurus/qt/qtgui/taurusgui/conf/gui_selfconf.py
old mode 100644
new mode 100755
similarity index 64%
copy from lib/taurus/qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py
copy to lib/taurus/qt/qtgui/taurusgui/conf/gui_selfconf.py
index bb8829e..1d639cd
--- a/lib/taurus/qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py
+++ b/lib/taurus/qt/qtgui/taurusgui/conf/gui_selfconf.py
@@ -23,19 +23,20 @@
 ##
 ###########################################################################
 
+'''An example of usage of TaurusGui in which the specific GUI is set up both 
+programmatically and using the same file as the configuration file.
+This can be launched directly as a stand-alone python script'''
 
-"""
-PermanentCustomPanelDlg.py: 
-"""
 
-from taurus.qt import Qt
+GUI_NAME = 'MyGui' 
 
-class PermanentCustomPanelsDlg(object):
-    '''
-    .. warning:: This class is deprecated. Use class:`taurus.qt.qtgui.panel.QDoubleList` instead
-    '''
-    def __init__(self, *args, **kwargs):
-        raise DeprecationWarning('PermanentCustomPanelsDlg is deprecated. Use taurus.qt.qtgui.panel.QDoubleList instead')
-        
-        
-        
\ No newline at end of file
+if __name__ == '__main__':
+    from taurus.qt.qtgui.application import TaurusApplication
+    from taurus.qt.qtgui.taurusgui import TaurusGui
+    from taurus.external.qt import Qt
+    app = TaurusApplication()
+    gui = TaurusGui(confname=__file__)
+    panel = Qt.QWidget()
+    gui.createPanel(panel, 'Foo')
+    gui.show()
+    app.exec_()
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/taurusgui/macrolistener.py b/lib/taurus/qt/qtgui/taurusgui/macrolistener.py
index c0a4b47..eb02a97 100644
--- a/lib/taurus/qt/qtgui/taurusgui/macrolistener.py
+++ b/lib/taurus/qt/qtgui/taurusgui/macrolistener.py
@@ -3,283 +3,172 @@
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
 ###########################################################################
 
 """
-This module provides an object that can be added to a TaurusGui manage the
-widgets for: 
+This module provides objects to manage macro-related tasks. Its primary use is 
+to be used within a TaurusGui for managing panels for: 
 - setting preferences in the sardana control system for data I/O 
 - displaying results of macro executions, including creating/removing panels for
   plotting results of scans
+- editing macros
 """
 
-__all__=['MacroBroker']
+__all__ = ['MacroBroker', 'DynamicPlotManager']
 __docformat__ = 'restructuredtext'
 
-
 #import os, sys
 import datetime
-import taurus
-from taurus.qt import Qt
+
+from taurus.core.util.containers import CaselessList
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.base import TaurusBaseComponent
 from taurus.qt.qtgui.resource import getThemeIcon, getIcon
 #from taurus.qt.qtgui.taurusgui.utils import PanelDescription
-from taurus.core.tango.sardana import PlotType
-from taurus.core.tango.sardana.pool import getChannelConfigs
-from taurus.core.util.containers import CaselessList
+from sardana.taurus.core.tango.sardana import PlotType
+from sardana.taurus.core.tango.sardana.pool import getChannelConfigs
+
 
 class ChannelFilter(object):
-    def __init__(self,chlist):
+    def __init__(self, chlist):
         self.chlist = tuple(chlist)
     def __call__(self, x):
         return x in self.chlist
 
-class MacroBroker(Qt.QObject, TaurusBaseComponent):
-    def __init__(self, parent):
-        '''Passing the parent object (the main window) is mandatory'''
+
+class DynamicPlotManager(Qt.QObject, TaurusBaseComponent):
+    '''This is a manager of plots related to the execution of macros.
+    It dynamically creates/removes plots according to the configuration made by 
+    an ExperimentConfiguration widget.
+     
+    Currently it supports only 1D scan trends (2D scans are only half-baked)
+    
+    To use it simply instantiate it and pass it a door name as a model. You may 
+    want to call :meth:`onExpConfChanged` to update the configuration being 
+    used.
+    '''
+    def __init__(self, parent=None):
         Qt.QObject.__init__(self, parent)
         TaurusBaseComponent.__init__(self, self.__class__.__name__)
-        
-        self._createPermanentPanels()
-        self._trends1d={}
-        self._trends2d={}
-        #connect the broker to shared data
-        Qt.qApp.SDM.connectReader("doorName", self.setModel)
-        Qt.qApp.SDM.connectReader("expConfChanged", self.onExpConfChanged)
-        Qt.qApp.SDM.connectWriter("shortMessage", self, 'newShortMessage')
-        
+
+        self.__panels = {}
+
+        self._trends1d = {}
+        self._trends2d = {}
+
     def setModel(self, doorname):
-        TaurusBaseComponent.setModel(self, doorname)
-        self._onDoorChanged(doorname)
+        '''reimplemented from :meth:`TaurusBaseComponent`
         
-    def _onDoorChanged(self, doorname):
-        ''' Slot to be called when the door has changed. It updates connections of the door.
-        
-        :param doorname: (str) the tango name of the door device 
+        :param doorname: (str) device name corresponding to a Door device.
         '''
-        if getattr(self, '__qdoor',None) is not None: #disconnect it from *all* shared data providing
-            Qt.qApp.SDM.disconnectWriter("macroStatus", self.__qdoor, "macroStatusUpdated")
-            Qt.qApp.SDM.disconnectWriter("doorOutputChanged", self.__qdoor, "outputUpdated")
-            Qt.qApp.SDM.disconnectWriter("doorInfoChanged", self.__qdoor, "infoUpdated")
-            Qt.qApp.SDM.disconnectWriter("doorWarningChanged", self.__qdoor, "warningUpdated")
-            Qt.qApp.SDM.disconnectWriter("doorErrorChanged", self.__qdoor, "errorUpdated")
-            Qt.qApp.SDM.disconnectWriter("doorDebugChanged", self.__qdoor, "debugUpdated")
-            Qt.qApp.SDM.disconnectWriter("doorResultChanged", self.__qdoor, "resultUpdated")
-            Qt.qApp.SDM.disconnectWriter("expConfChanged", self.__qdoor, "experimentConfigurationChanged")
-             
-        if doorname == "": return #@todo send signal with doorName to macroExecutorWidget in case of "" also send it to disconnect doorstateled
-        door = taurus.Device(doorname)
+        TaurusBaseComponent.setModel(self, doorname)
+        #self._onDoorChanged(doorname)
+        if not doorname:
+            return
+        door = self.getModelObj()
         if not isinstance(door, Qt.QObject):
-            msg= "cannot connect to door %s"%doorname
-            Qt.QMessageBox.critical(self.parent(),'Door connection error', msg)
+            msg = "Unexpected type (%s) for %s" % (repr(type(door)), doorname)
+            Qt.QMessageBox.critical(self.parent(), 'Door connection error', msg)
             return
-        self.__qdoor = door
-        Qt.qApp.SDM.connectWriter("macroStatus", self.__qdoor, "macroStatusUpdated")
-        Qt.qApp.SDM.connectWriter("doorOutputChanged", self.__qdoor, "outputUpdated")
-        Qt.qApp.SDM.connectWriter("doorInfoChanged", self.__qdoor, "infoUpdated")
-        Qt.qApp.SDM.connectWriter("doorWarningChanged", self.__qdoor, "warningUpdated")
-        Qt.qApp.SDM.connectWriter("doorErrorChanged", self.__qdoor, "errorUpdated")
-        Qt.qApp.SDM.connectWriter("doorDebugChanged", self.__qdoor, "debugUpdated")
-        Qt.qApp.SDM.connectWriter("doorResultChanged", self.__qdoor, "resultUpdated")
-        Qt.qApp.SDM.connectWriter("expConfChanged", self.__qdoor, "experimentConfigurationChanged")
         
-        expconf = self.__qdoor.getExperimentConfiguration()
-        self.onExpConfChanged(expconf) 
+        self._checkJsonRecorder()
         
-        #check if JsonRecorder env var is set
-        if 'JsonRecorder' not in self.__qdoor.getEnvironment():
-            msg = 'JsonRecorder environment variable is not set, but it is needed for displaying trend plots. \nEnable it globally for %s?'%doorname
-            result = Qt.QMessageBox.question(self.parent(),'JsonRecorder not set', msg, Qt.QMessageBox.Yes|Qt.QMessageBox.No)
+        #read the expconf
+        expconf = door.getExperimentConfiguration()
+        self.onExpConfChanged(expconf)
+    
+    def _checkJsonRecorder(self): 
+        '''Checks if JsonRecorder env var is set and offers to set it'''
+        door = self.getModelObj()
+        if 'JsonRecorder' not in door.getEnvironment():
+            msg = ('JsonRecorder environment variable is not set, but it ' + \
+                   'is needed for displaying trend plots.\n' + \
+                   'Enable it globally for %s?') % door.name()
+            result = Qt.QMessageBox.question(self.parent(), 
+                        'JsonRecorder not set', msg, 
+                        Qt.QMessageBox.Yes | Qt.QMessageBox.No)
             if result == Qt.QMessageBox.Yes:
-                self.__qdoor.putEnvironment('JsonRecorder',True)
-                self.info('JsonRecorder Enabled for %s'%doorname)
-                
-        #@todo: connect as a writer of other data as well
-        
-    def _createPermanentPanels(self):
-        '''creates panels on the main window'''
-        from taurus.qt.qtgui.extra_macroexecutor import TaurusMacroExecutorWidget, TaurusSequencerWidget,  TaurusMacroConfigurationDialog, \
-                                                     TaurusMacroDescriptionViewer, DoorOutput, DoorDebug, DoorResult
-
-        from taurus.qt.qtgui.extra_sardana import ExpDescriptionEditor, SardanaEditor
-        
-        mainwindow = self.parent()
-        
-        #Create macroconfiguration dialog & action
-        self.__macroConfigurationDialog = TaurusMacroConfigurationDialog(mainwindow)
-        self.macroConfigurationAction = mainwindow.taurusMenu.addAction(getThemeIcon("preferences-system-session"), "Macro execution configuration...", self.__macroConfigurationDialog.show)
-        Qt.qApp.SDM.connectReader("macroserverName", self.__macroConfigurationDialog.selectMacroServer)
-        Qt.qApp.SDM.connectReader("doorName", self.__macroConfigurationDialog.selectDoor)
-        Qt.qApp.SDM.connectWriter("macroserverName", self.__macroConfigurationDialog, 'macroserverNameChanged')
-        Qt.qApp.SDM.connectWriter("doorName", self.__macroConfigurationDialog, 'doorNameChanged')
-        
-        #Create ExpDescriptionEditor dialog
-        self.__expDescriptionEditor = ExpDescriptionEditor()
-        Qt.qApp.SDM.connectReader("doorName", self.__expDescriptionEditor.setModel)
-        mainwindow.createPanel(self.__expDescriptionEditor, 'Experiment Config', registerconfig=True,
-                               icon = getThemeIcon('preferences-system'), permanent=True)
-        ###############################
-        #@todo: These lines can be removed once the door does emit "experimentConfigurationChanged" signals
-        Qt.qApp.SDM.connectWriter("expConfChanged", self.__expDescriptionEditor, "experimentConfigurationChanged")
-        ################################
-        
-        #put a Macro Executor
-        self.__macroExecutor = TaurusMacroExecutorWidget()
-        Qt.qApp.SDM.connectReader("macroserverName", self.__macroExecutor.setModel)
-        Qt.qApp.SDM.connectReader("doorName", self.__macroExecutor.onDoorChanged)
-        Qt.qApp.SDM.connectReader("macroStatus", self.__macroExecutor.onMacroStatusUpdated)
-        Qt.qApp.SDM.connectWriter("macroName", self.__macroExecutor, "macroNameChanged")
-        Qt.qApp.SDM.connectWriter("executionStarted", self.__macroExecutor, "macroStarted")
-        Qt.qApp.SDM.connectWriter("plotablesFilter", self.__macroExecutor, "plotablesFilterChanged")
-        Qt.qApp.SDM.connectWriter("shortMessage", self.__macroExecutor, "shortMessageEmitted")
-        mainwindow.createPanel(self.__macroExecutor, 'Macros', registerconfig=True, permanent=True)
-        
-        #put a Sequencer
-        self.__sequencer = TaurusSequencerWidget()
-        Qt.qApp.SDM.connectReader("macroserverName", self.__sequencer.setModel)
-        Qt.qApp.SDM.connectReader("doorName", self.__sequencer.onDoorChanged)
-        Qt.qApp.SDM.connectReader("macroStatus", self.__sequencer.onMacroStatusUpdated)
-        Qt.qApp.SDM.connectWriter("macroName", self.__sequencer.tree, "macroNameChanged")
-        Qt.qApp.SDM.connectWriter("macroName", self.__sequencer, "macroNameChanged")
-        Qt.qApp.SDM.connectWriter("executionStarted", self.__sequencer, "macroStarted")
-        Qt.qApp.SDM.connectWriter("plotablesFilter", self.__sequencer, "plotablesFilterChanged")
-        Qt.qApp.SDM.connectWriter("shortMessage", self.__sequencer, "shortMessageEmitted")
-        mainwindow.createPanel(self.__sequencer, 'Sequences', registerconfig=True, permanent=True)
-        
-        #puts a macrodescriptionviewer
-        self.__macroDescriptionViewer = TaurusMacroDescriptionViewer()
-        Qt.qApp.SDM.connectReader("macroserverName", self.__macroDescriptionViewer.setModel)
-        Qt.qApp.SDM.connectReader("macroName", self.__macroDescriptionViewer.onMacroNameChanged)
-        mainwindow.createPanel(self.__macroDescriptionViewer, 'MacroDescription', registerconfig=True, permanent=True)
-        
-        #puts a doorOutput
-        self.__doorOutput = DoorOutput()
-        Qt.qApp.SDM.connectReader("doorOutputChanged", self.__doorOutput.onDoorOutputChanged)
-        Qt.qApp.SDM.connectReader("doorInfoChanged", self.__doorOutput.onDoorInfoChanged)
-        Qt.qApp.SDM.connectReader("doorWarningChanged", self.__doorOutput.onDoorWarningChanged)
-        Qt.qApp.SDM.connectReader("doorErrorChanged", self.__doorOutput.onDoorErrorChanged)
-        mainwindow.createPanel(self.__doorOutput, 'DoorOutput', registerconfig=False, permanent=True)
-        
-        #puts doorDebug
-        self.__doorDebug = DoorDebug()
-        Qt.qApp.SDM.connectReader("doorDebugChanged", self.__doorDebug.onDoorDebugChanged)
-        mainwindow.createPanel(self.__doorDebug, 'DoorDebug', registerconfig=False, permanent=True)
-        
-        #puts doorResult
-        self.__doorResult = DoorResult(mainwindow)
-        Qt.qApp.SDM.connectReader("doorResultChanged", self.__doorResult.onDoorResultChanged)
-        mainwindow.createPanel(self.__doorResult, 'DoorResult', registerconfig=False, permanent=True)
-        
-        #puts sardanaEditor
-        self.__sardanaEditor = SardanaEditor()
-        Qt.qApp.SDM.connectReader("macroserverName", self.__sardanaEditor.setModel)
-        mainwindow.createPanel(self.__sardanaEditor, 'SardanaEditor', registerconfig=False, permanent=True)
-
-        #add panic button for aborting the door
-        self.doorAbortAction = mainwindow.jorgsBar.addAction(getIcon(":/actions/process-stop.svg"), "Panic Button: stops the pool (double-click for abort)", self.__onDoorAbort)
-        self.__lastAbortTime = datetime.datetime(1,1,1) #beginning of times
-        self.__doubleclickInterval = datetime.timedelta(0,0,1000*Qt.qApp.doubleClickInterval()) #doubleclick interval translated into a timedelta
-        
-    def __onDoorAbort(self):
-        '''slot to be called when the abort action is triggered. 
-        It sends stop command to the pools (or abort if the action
-        has been triggered twice in less than self.__doubleclickInterval
-        
-        .. note:: An abort command is always preceded by an stop command 
-        '''
-        #decide whether to send stop or abort
-        now = datetime.datetime.now()
-        if now-self.__lastAbortTime < self.__doubleclickInterval:
-            cmd = 'abort'
-        else:
-            cmd = 'stop'
-        #abort the door
-        self.__qdoor.command_inout('abort')
-        #send stop/abort to all pools
-        pools = self.__qdoor.macro_server.getElementsOfType('Pool')
-        for pool in pools.values():
-            self.info('Sending %s command to %s'%(cmd,pool.getFullName()))
-            try:
-                pool.getObj().command_inout(cmd)
-            except:
-                self.info('%s command failed on %s',cmd,pool.getFullName(), exc_info=1)
-        self.emit(Qt.SIGNAL("newShortMessage"),"%s command sent to all pools"%cmd)      
-        self.__lastAbortTime = now
+                door.putEnvironment('JsonRecorder', True)
+                self.info('JsonRecorder Enabled for %s' % door.name())       
         
     def onExpConfChanged(self, expconf):
         '''
-        slot to be called when experimental configuration changes. It should
+        Slot to be called when experimental configuration changes. It should
         remove the temporary panels and create the new ones needed.
         
         :param expconf: (dict) An Experiment Description dictionary. See 
-                        :meth:`taurus.qt.qtcore.tango.sardana.QDoor.getExperimentDescription` 
+                        :meth:`sardana.taurus.qt.qtcore.tango.sardana.
+                        QDoor.getExperimentDescription` 
                         for more details 
         '''
-        #print "@@@@@@@@", expconf
-        if expconf['ActiveMntGrp'] is None: 
+        if expconf['ActiveMntGrp'] is None:
             return
         mgconfig = expconf['MntGrpConfigs'][expconf['ActiveMntGrp']]
         channels = dict(getChannelConfigs(mgconfig, sort=False))
+        
         #classify by type of plot:
         trends1d = {}
         trends2d = {}
         plots1d = {}
         images = {}
-        
-        for chname,chdata in channels.items():
+
+        for chname, chdata in channels.items():
             ptype = chdata['plot_type']
             if ptype == PlotType.No:
                 continue
             elif ptype == PlotType.Spectrum:
                 axes = tuple(chdata['plot_axes'])
-                ndim = chdata.get('ndim',0) #@todo: hardcoded default for testing, but it should be obtained from the channel.
-                if ndim == 0: #this is a trend
+                ndim = chdata.get('ndim', 0)  #TODO: get default value from the channel.
+                if ndim == 0:  #this is a trend
                     if axes in trends1d:
                         trends1d[axes].append(chname)
                     else:
                         trends1d[axes] = CaselessList([chname])
-                elif ndim == 1:
-                    pass
+                elif ndim == 1: #a 1D plot (e.g. a spectrum)
+                    pass # TODO: implement
                 else:
                     self.warning('Cannot create plot for %s', chname)
-                    
+
             elif ptype == PlotType.Image:
                 axes = tuple(chdata['plot_axes'])
-                ndim = chdata.get('ndim',1) #@todo: hardcoded default for testing, but it should be obtained from the channel.
-                if ndim == 0:
-                    pass
-                elif ndim == 1: #a 2d trend
+                ndim = chdata.get('ndim', 1)  #TODO: get default value from the channel.
+                if ndim == 0: #a mesh-like plot?
+                    pass # TODO implement
+                elif ndim == 1:  #a 2D trend
                     if axes in trends2d:
                         trends2d[axes].append(chname)
                     else:
                         trends2d[axes] = CaselessList([chname])
-                elif ndim == 2:
-                    pass
+                elif ndim == 2: #a 2D plot (e.g. an image)
+                    pass #TODO: implement
                 else:
                     self.warning('Cannot create plot for %s', chname)
-                    
-        new1d,removed1d = self._updateTemporaryTrends1D(trends1d)
-        self.emit(Qt.SIGNAL("newShortMessage"),"Changed panels (%i new, %i removed)"%(len(new1d),len(removed1d)))
+
+        new1d, removed1d = self._updateTemporaryTrends1D(trends1d)
+        self.emit(Qt.SIGNAL("newShortMessage"), 
+                  "Changed panels (%i new, %i removed)" % (len(new1d), 
+                                                           len(removed1d))
+                  )
 #        self._updateTemporaryTrends2D(trends2d)
-        
+
     def _updateTemporaryTrends1D(self, trends1d):
         '''adds necessary trend1D panels and removes no longer needed ones
         
@@ -288,66 +177,385 @@ class MacroBroker(Qt.QObject, TaurusBaseComponent):
         
         :returns: (tuple) two lists new,rm:new contains the names of the new
                   panels and rm contains the names of the removed panels  
-        '''
-        
+        '''        
         from taurus.qt.qtgui.plot import TaurusTrend
-        mainwindow = self.parent()
-        newpanels = []                
-        for axes,plotables in trends1d.items():
+        newpanels = []
+        for axes, plotables in trends1d.items():
             if not axes:
                 continue
-            if axes not in self._trends1d:     
+            if axes not in self._trends1d:
                 w = TaurusTrend()
                 w.setXIsTime(False)
-                w.setScanDoor(self.__qdoor.name())
-                w.setScansXDataKey(axes[0]) #@todo: use a standard key for <idx> and <mov>
-                pname = u'Trend1D - %s'%":".join(axes)
-                panel = mainwindow.createPanel(w, pname, registerconfig=False, permanent=False)
-                panel.raise_()
+                w.setScanDoor(self.getModelObj().name())
+                #TODO: use a standard key for <idx> and <mov>
+                w.setScansXDataKey(axes[0])  
+                pname = u'Trend1D - %s' % ":".join(axes)
+                panel = self.createPanel(w, pname, registerconfig=False, 
+                                 permanent=False)
+                try: #if the panel is a dockwidget, raise it
+                    panel.raise_()
+                except:
+                    pass
                 self._trends1d[axes] = pname
                 newpanels.append(pname)
-            else:
-                panel = mainwindow.getPanel(self._trends1d[axes])
+            
+            widget = self.getPanelWidget(self._trends1d[axes])
             flt = ChannelFilter(plotables)
-            panel.widget().onScanPlotablesFilterChanged(flt)
+            widget.onScanPlotablesFilterChanged(flt)
+
+        #remove trends that are no longer configured
+        removedpanels = []   
+        olditems = list(self._trends1d.items())
+        for axes,name in olditems:
+            if axes not in trends1d:
+                removedpanels.append(name)
+                self.removePanel(name)
+                self._trends1d.pop(axes)  
         
-        #remove trends that aren no longer configured 
-        removedpanels = [name for axes,name in self._trends1d.items() if axes not in trends1d]
-        self.removeTemporaryPanels(removedpanels)
-        return newpanels,removedpanels
-         
-            
-    def _updateTemporaryTrends2D(self, trends2d):
+        return newpanels, removedpanels
+
+    def _updateTemporaryTrends2D(self, trends2d):        
+        '''adds necessary trend2D panels and removes no longer needed ones
+        
+        :param trends2d: (dict) A dict whose keys are tuples of axes and 
+                         whose values are list of model names to plot
+        
+        :returns: (tuple) two lists new,rm:new contains the names of the new
+                  panels and rm contains the names of the removed panels
+        
+        ..note:: Not fully implemented yet 
+        '''
         try:
-            from taurus.qt.qtgui.extra_guiqwt.taurustrend2d import TaurusTrend2DDialog
+            from taurus.qt.qtgui.extra_guiqwt.taurustrend2d import \
+                 TaurusTrend2DDialog
             from taurus.qt.qtgui.extra_guiqwt.image import TaurusTrend2DScanItem
         except:
-            self.info('guiqwt extension cannot be loaded. 2D Trends will not be created')
+            self.info('guiqwt extension cannot be loaded. ' + \
+                      '2D Trends will not be created')
             raise
             return
-        mainwindow = self.parent()
-        for axes,plotables in trends2d.items():
+        
+        for axes, plotables in trends2d.items():
             for chname in plotables:
-                pname =  u'Trend2D - %s'%chname
+                pname = u'Trend2D - %s' % chname
                 if pname in self._trends2d:
                     self._trends2d[pname].widget().trendItem.clearTrend()
                 else:
                     axis = axes[0]
                     w = TaurusTrend2DDialog(stackMode='event')
                     plot = w.get_plot()
-                    t2d = TaurusTrend2DScanItem(chname, axis, self.__qdoor.name())
+                    t2d = TaurusTrend2DScanItem(chname, axis, 
+                                                self.getModelObj().name())
                     plot.add_item(t2d)
-                    mainwindow.createPanel(w, pname, registerconfig=False, permanent=False)
-                    self._trends2d[(axes,chname)] = pname
+                    self.createPanel(w, pname, registerconfig=False, 
+                                           permanent=False)
+                    self._trends2d[(axes, chname)] = pname
     
-    def removeTemporaryPanels(self, names=None):
-        if names is None: 
-            names = self._trends1d.values() + self._trends2d.values()#@todo: the same for other temporary panels
-        mainwindow = self.parent()
+    def createPanel(self, widget, name, **kwargs):
+        '''Creates a "panel" from a widget. In this basic implementation this 
+        means that the widgets is shown as a non-modal top window
+        
+        :param widget: (QWidget) widget to be used for the panel
+        :param name: (str) name of the panel. Must be unique.
+        
+        Note: for backawards compatibility, this implementation accepts 
+        arbitrary keyword arguments which are just ignored
+        ''' 
+        widget.setWindowTitle(name)
+        widget.show()
+        self.__panels[name] = widget
+    
+    def getPanelWidget(self,name):        
+        '''Returns the widget associated to a panel name
+        
+        :param name: (str) name of the panel. KeyError is raised if not found
+        
+        :return: (QWidget)
+        ''' 
+        return self.__panels[name]
+    
+    def removePanel(self, name):
+        '''stop managing the given panel
+        
+        :param name: (str) name of the panel'''
+        widget = self.__panels.pop(name)
+        if hasattr(widget, 'setModel'):
+            widget.setModel(None)
+        widget.setParent(None)
+        widget.close()
+    
+    def removePanels(self, names=None):
+        '''removes panels.
+        
+        :param names: (seq<str>) names of the panels to be removed. If None is 
+                      given (default), all the panels are removed.
+        ''' 
+        if names is None:
+            names = self._trends1d.values() + self._trends2d.values()  
+            #TODO: do the same for other temporary panels
         for pname in names:
-            mainwindow.removePanel(pname)
+            self.removePanel(pname)
+
+
+class MacroBroker(DynamicPlotManager):
+    '''A manager of all macro-related panels of a TaurusGui.
+    
+    It creates, destroys and manages connections for the following objects:
+    
+        - Macro Configuration dialog
+        - Experiment Configuration panel
+        - Macro Executor panel
+        - Sequencer panel
+        - Macro description viewer
+        - Door output, result and debug panels
+        - Macro editor
+        - Macro "panic" button (to abort macros)
+        - Dynamic plots (see :class:`DynamicPlotManager`) 
+    '''
+    def __init__(self, parent):
+        '''Passing the parent object (the main window) is mandatory'''
+        DynamicPlotManager.__init__(self, parent)
+
+        self._createPermanentPanels()
+        
+        #connect the broker to shared data
+        Qt.qApp.SDM.connectReader("doorName", self.setModel)
+        Qt.qApp.SDM.connectReader("expConfChanged", self.onExpConfChanged)
+        Qt.qApp.SDM.connectWriter("shortMessage", self, 'newShortMessage')
+   
+    def setModel(self, doorname):
+        ''' Reimplemented from :class:`DynamicPlotManager`.'''
+        #disconnect the previous door
+        door = self.getModelObj()
+        if door is not None:  #disconnect it from *all* shared data providing
+            SDM = Qt.qApp.SDM
+            SDM.disconnectWriter("macroStatus", door, "macroStatusUpdated")
+            SDM.disconnectWriter("doorOutputChanged", door, "outputUpdated")
+            SDM.disconnectWriter("doorInfoChanged", door, "infoUpdated")
+            SDM.disconnectWriter("doorWarningChanged", door, "warningUpdated")
+            SDM.disconnectWriter("doorErrorChanged", door, "errorUpdated")
+            SDM.disconnectWriter("doorDebugChanged", door, "debugUpdated")
+            SDM.disconnectWriter("doorResultChanged", door, "resultUpdated")
+            SDM.disconnectWriter("expConfChanged", door, 
+                                 "experimentConfigurationChanged")
+        
+        #set the model     
+        DynamicPlotManager.setModel(self, doorname)
+        
+        #connect the new door
+        door = self.getModelObj()
+        if door is not None:
+            SDM = Qt.qApp.SDM
+            SDM.connectWriter("macroStatus", door, "macroStatusUpdated")
+            SDM.connectWriter("doorOutputChanged", door, "outputUpdated")
+            SDM.connectWriter("doorInfoChanged", door, "infoUpdated")
+            SDM.connectWriter("doorWarningChanged", door, "warningUpdated")
+            SDM.connectWriter("doorErrorChanged", door, "errorUpdated")
+            SDM.connectWriter("doorDebugChanged", door, "debugUpdated")
+            SDM.connectWriter("doorResultChanged", door, "resultUpdated")
+            SDM.connectWriter("expConfChanged", door, 
+                              "experimentConfigurationChanged")
+
+    def _createPermanentPanels(self):
+        '''creates panels on the main window'''
+        from sardana.taurus.qt.qtgui.extra_macroexecutor import \
+            TaurusMacroExecutorWidget, TaurusSequencerWidget, \
+            TaurusMacroConfigurationDialog, TaurusMacroDescriptionViewer, \
+            DoorOutput, DoorDebug, DoorResult
+
+        from sardana.taurus.qt.qtgui.extra_sardana import \
+            ExpDescriptionEditor, SardanaEditor
+
+        mainwindow = self.parent()
+
+        #Create macroconfiguration dialog & action
+        self.__macroConfigurationDialog = \
+            TaurusMacroConfigurationDialog(mainwindow)
+        self.macroConfigurationAction = mainwindow.taurusMenu.addAction( \
+                getThemeIcon("preferences-system-session"), 
+                "Macro execution configuration...", 
+                self.__macroConfigurationDialog.show)
+        
+        SDM = Qt.qApp.SDM
+        SDM.connectReader("macroserverName", 
+                          self.__macroConfigurationDialog.selectMacroServer)
+        SDM.connectReader("doorName", 
+                          self.__macroConfigurationDialog.selectDoor)
+        SDM.connectWriter("macroserverName", self.__macroConfigurationDialog, 
+                          'macroserverNameChanged')
+        SDM.connectWriter("doorName", self.__macroConfigurationDialog, 
+                          'doorNameChanged')
+
+        #Create ExpDescriptionEditor dialog
+        self.__expDescriptionEditor = ExpDescriptionEditor(plotsButton=False)
+        SDM.connectReader("doorName", self.__expDescriptionEditor.setModel)
+        mainwindow.createPanel(self.__expDescriptionEditor, 
+                               'Experiment Config',
+                               registerconfig=True, 
+                               icon=getThemeIcon('preferences-system'), 
+                               permanent=True)
+        ###############################
+        #TODO: These lines can be removed once the door does emit 
+        # "experimentConfigurationChanged" signals
+        SDM.connectWriter("expConfChanged", self.__expDescriptionEditor, 
+                          "experimentConfigurationChanged")
+        ################################
+
+        #put a Macro Executor
+        self.__macroExecutor = TaurusMacroExecutorWidget()
+        SDM.connectReader("macroserverName", self.__macroExecutor.setModel)
+        SDM.connectReader("doorName", self.__macroExecutor.onDoorChanged)
+        SDM.connectReader("macroStatus", 
+                          self.__macroExecutor.onMacroStatusUpdated)
+        SDM.connectWriter("macroName", self.__macroExecutor, "macroNameChanged")
+        SDM.connectWriter("executionStarted", self.__macroExecutor, 
+                          "macroStarted")
+        SDM.connectWriter("plotablesFilter", self.__macroExecutor, 
+                          "plotablesFilterChanged")
+        SDM.connectWriter("shortMessage", self.__macroExecutor, 
+                          "shortMessageEmitted")
+        mainwindow.createPanel(self.__macroExecutor, 'Macros', 
+                               registerconfig=True, permanent=True)
+
+        #put a Sequencer
+        self.__sequencer = TaurusSequencerWidget()
+        SDM.connectReader("macroserverName", self.__sequencer.setModel)
+        SDM.connectReader("doorName", self.__sequencer.onDoorChanged)
+        SDM.connectReader("macroStatus", self.__sequencer.onMacroStatusUpdated)
+        SDM.connectWriter("macroName", self.__sequencer.tree, 
+                          "macroNameChanged")
+        SDM.connectWriter("macroName", self.__sequencer, 
+                          "macroNameChanged")
+        SDM.connectWriter("executionStarted", self.__sequencer, 
+                          "macroStarted")
+        SDM.connectWriter("plotablesFilter", self.__sequencer, 
+                          "plotablesFilterChanged")
+        SDM.connectWriter("shortMessage", self.__sequencer, 
+                          "shortMessageEmitted")
+        mainwindow.createPanel(self.__sequencer, 'Sequences', 
+                               registerconfig=True, permanent=True)
+
+        #puts a macrodescriptionviewer
+        self.__macroDescriptionViewer = TaurusMacroDescriptionViewer()
+        SDM.connectReader("macroserverName", 
+                          self.__macroDescriptionViewer.setModel)
+        SDM.connectReader("macroName", 
+                          self.__macroDescriptionViewer.onMacroNameChanged)
+        mainwindow.createPanel(self.__macroDescriptionViewer, 
+                               'MacroDescription', registerconfig=True, 
+                               permanent=True)
+
+        #puts a doorOutput
+        self.__doorOutput = DoorOutput()
+        SDM.connectReader("doorOutputChanged", 
+                          self.__doorOutput.onDoorOutputChanged)
+        SDM.connectReader("doorInfoChanged", 
+                          self.__doorOutput.onDoorInfoChanged)
+        SDM.connectReader("doorWarningChanged", 
+                          self.__doorOutput.onDoorWarningChanged)
+        SDM.connectReader("doorErrorChanged", 
+                          self.__doorOutput.onDoorErrorChanged)
+        mainwindow.createPanel(self.__doorOutput, 'DoorOutput', 
+                               registerconfig=False, permanent=True)
+
+        #puts doorDebug
+        self.__doorDebug = DoorDebug()
+        SDM.connectReader("doorDebugChanged", 
+                          self.__doorDebug.onDoorDebugChanged)
+        mainwindow.createPanel(self.__doorDebug, 'DoorDebug', 
+                               registerconfig=False, permanent=True)
+
+        #puts doorResult
+        self.__doorResult = DoorResult(mainwindow)
+        SDM.connectReader("doorResultChanged", 
+                          self.__doorResult.onDoorResultChanged)
+        mainwindow.createPanel(self.__doorResult, 'DoorResult', 
+                               registerconfig=False, permanent=True)
+
+        #puts sardanaEditor
+        self.__sardanaEditor = SardanaEditor()
+        SDM.connectReader("macroserverName", self.__sardanaEditor.setModel)
+        mainwindow.createPanel(self.__sardanaEditor, 'SardanaEditor', 
+                               registerconfig=False, permanent=True)
+
+        #add panic button for aborting the door
+        text = "Panic Button: stops the pool (double-click for abort)"
+        self.doorAbortAction = mainwindow.jorgsBar.addAction(
+                                getIcon(":/actions/process-stop.svg"), 
+                                text, self.__onDoorAbort)
+        
+        #store beginning of times as a datetime
+        self.__lastAbortTime = datetime.datetime(1, 1, 1)  
+        
+        #store doubleclick interval as a timedelta
+        td = datetime.timedelta(0, 0, 1000 * Qt.qApp.doubleClickInterval())
+        self.__doubleclickInterval = td
+
+    def __onDoorAbort(self):
+        '''slot to be called when the abort action is triggered. 
+        It sends stop command to the pools (or abort if the action
+        has been triggered twice in less than self.__doubleclickInterval
+        
+        .. note:: An abort command is always preceded by an stop command 
+        '''
+        #decide whether to send stop or abort
+        now = datetime.datetime.now()
+        if now - self.__lastAbortTime < self.__doubleclickInterval:
+            cmd = 'abort'
+        else:
+            cmd = 'stop'
             
-                
+        door =self.getModelObj()
+        
+        #abort the door
+        door.command_inout('abort')
+        #send stop/abort to all pools
+        pools = door.macro_server.getElementsOfType('Pool')
+        for pool in pools.values():
+            self.info('Sending %s command to %s' % (cmd, pool.getFullName()))
+            try:
+                pool.getObj().command_inout(cmd)
+            except:
+                self.info('%s command failed on %s', cmd, pool.getFullName(), 
+                          exc_info=1)
+        self.emit(Qt.SIGNAL("newShortMessage"), "%s command sent to all pools" %
+                   cmd)
+        self.__lastAbortTime = now
+
+    def createPanel(self, widget, name, **kwargs):
+        ''' Reimplemented from :class:`DynamicPlotManager` to delegate panel 
+        management to the parent widget (a TaurusGui)'''
+        mainwindow = self.parent()
+        return mainwindow.createPanel(widget, name, **kwargs)
+    
+    def getPanelWidget(self,name):
+        ''' Reimplemented from :class:`DynamicPlotManager` to delegate panel 
+        management to the parent widget (a TaurusGui)'''
+        mainwindow = self.parent()
+        return mainwindow.getPanel(name).widget() 
+    
+    def removePanel(self, name):
+        ''' Reimplemented from :class:`DynamicPlotManager` to delegate panel 
+        management to the parent widget (a TaurusGui)'''
+        mainwindow = self.parent()
+        mainwindow.removePanel(name)
         
-#class Trend1DDescription(PanelDescription):
-#    def __init__(self, ):      
+    def removeTemporaryPanels(self, names=None):
+        '''Remove temporary panels managed by this widget'''
+        #for now, the only temporary panels are the plots
+        DynamicPlotManager.removePanels(self, names=names)
+
+
+if __name__ == "__main__":
+    import sys
+    from taurus.qt.qtgui.application import TaurusApplication
+        
+    app = TaurusApplication()
+    
+    b = DynamicPlotManager(None)
+    
+    b.setModel('door/cp1/1')
+    
+    print '...'    
+    sys.exit(app.exec_())
+    
diff --git a/lib/taurus/qt/qtgui/taurusgui/paneldescriptionwizard.py b/lib/taurus/qt/qtgui/taurusgui/paneldescriptionwizard.py
index f770069..3e09576 100644
--- a/lib/taurus/qt/qtgui/taurusgui/paneldescriptionwizard.py
+++ b/lib/taurus/qt/qtgui/taurusgui/paneldescriptionwizard.py
@@ -28,7 +28,7 @@ __all__=["PanelDescriptionWizard"]
 paneldescriptionwizard.py: 
 """
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 import sys
 import weakref
 from taurus.qt.qtgui.taurusgui.utils import PanelDescription
diff --git a/lib/taurus/qt/qtgui/taurusgui/taurusgui.py b/lib/taurus/qt/qtgui/taurusgui/taurusgui.py
index 03b4849..f1be49d 100644
--- a/lib/taurus/qt/qtgui/taurusgui/taurusgui.py
+++ b/lib/taurus/qt/qtgui/taurusgui/taurusgui.py
@@ -3,21 +3,21 @@
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
@@ -25,60 +25,68 @@
 
 """This package provides the TaurusGui class"""
 
-__all__=["DockWidgetPanel", "TaurusGui"]
+__all__ = ["DockWidgetPanel", "TaurusGui"]
 
 __docformat__ = 'restructuredtext'
 
 
-import os, sys
-import weakref, inspect, copy
-from taurus.qt import Qt
+import os
+import sys
+import copy
+import weakref
+import inspect
+
+from lxml import etree
 
+import taurus
+from taurus.external.qt import Qt
+from taurus.qt.qtgui.resource import getIcon, getThemeIcon
 from taurus.qt.qtcore.configuration import BaseConfigurableClass
 from taurus.qt.qtcore.communication import SharedDataManager
 from taurus.qt.qtgui.util import TaurusWidgetFactory
 from taurus.qt.qtgui.base import TaurusBaseWidget, TaurusBaseComponent
 from taurus.qt.qtgui.container import TaurusMainWindow
-from taurus.qt.qtgui.taurusgui.utils import ExternalApp, PanelDescription, ToolBarDescription, AppletDescription
+from taurus.qt.qtgui.taurusgui.utils import ExternalApp, PanelDescription, \
+    ToolBarDescription, AppletDescription
 from taurus.qt.qtgui.panel import QDoubleListDlg
-import taurus.qt.qtgui.resource
-from lxml import etree
+from taurus.qt.qtgui.util.ui import UILoadable
 
 
+ at UILoadable(with_ui='ui')
 class AssociationDialog(Qt.QDialog):
-    '''A dialog for viewing and editing the associations between instruments and panels''' 
-    def __init__(self, parent, flags= None):
-        if flags is None: flags = Qt.Qt.Widget
+    '''A dialog for viewing and editing the associations between instruments
+    and panels'''
+
+    def __init__(self, parent, flags=None):
+        if flags is None:
+            flags = Qt.Qt.Widget
         Qt.QDialog.__init__(self, parent, flags)
-        
-        from ui.ui_PanelAssociationsDlg import Ui_PanelAssociationsDlg
-        self.ui = Ui_PanelAssociationsDlg()
-        self.ui.setupUi(self)
-        
+        self.loadUi()
+
         self.refresh()
         self.connect(self.ui.instrumentCB, Qt.SIGNAL('activated (QString)'), self.onInstrumentChanged)
         self.connect(self.ui.buttonBox, Qt.SIGNAL("clicked(QAbstractButton *)"), self.onDialogButtonClicked)
         self.connect(self.ui.refreshBT, Qt.SIGNAL("clicked()"), self.refresh)
-        
+
     def refresh(self):
         currentinstrument = self.ui.instrumentCB.currentText()
         mainwindow = self.parent()
-        
+
         self.associations = mainwindow.getAllInstrumentAssociations()
-        
+
         #fill the comboboxes
         self.ui.instrumentCB.clear()
         self.ui.panelCB.clear()
         self.ui.instrumentCB.addItems(sorted(self.associations.keys()))
-        self.ui.panelCB.addItems(['__[None]__']+mainwindow.getPanelNames())
-        
+        self.ui.panelCB.addItems(['__[None]__'] + mainwindow.getPanelNames())
+
         #restore the index
         idx = self.ui.instrumentCB.findText(currentinstrument)
-        if idx == -1 and self.ui.instrumentCB.count()>0:
+        if idx == -1 and self.ui.instrumentCB.count() > 0:
             idx = 0
         self.ui.instrumentCB.setCurrentIndex(idx)
         self.onInstrumentChanged(self.ui.instrumentCB.currentText())
-    
+
     def onInstrumentChanged(self, instrumentname):
         instrumentname = unicode(instrumentname)
         panelname = self.associations.get(instrumentname)
@@ -88,18 +96,18 @@ class AssociationDialog(Qt.QDialog):
         else:
             idx = self.ui.panelCB.findText(panelname)
             self.ui.panelCB.setCurrentIndex(idx)
-        
+
     def onDialogButtonClicked(self, button):
         role = self.ui.buttonBox.buttonRole(button)
-        if role in (Qt.QDialogButtonBox.AcceptRole,Qt.QDialogButtonBox.ApplyRole) :
+        if role in (Qt.QDialogButtonBox.AcceptRole, Qt.QDialogButtonBox.ApplyRole) :
             if self.ui.panelCB.currentIndex() > 0:
                 panelname = unicode(self.ui.panelCB.currentText())
             else:
                 panelname = None
             instrumentname = unicode(self.ui.instrumentCB.currentText())
             self.associations[instrumentname] = panelname
-            self.parent().setInstrumentAssociation(instrumentname,panelname)
-        
+            self.parent().setInstrumentAssociation(instrumentname, panelname)
+
 
 class DockWidgetPanel(Qt.QDockWidget, TaurusBaseWidget):
     '''
@@ -110,31 +118,31 @@ class DockWidgetPanel(Qt.QDockWidget, TaurusBaseWidget):
     def __init__(self, parent, widget, name, mainwindow):
         Qt.QDockWidget.__init__(self, None)
         TaurusBaseWidget.__init__(self, name, parent=parent)
-        
+
         self.setAllowedAreas(Qt.Qt.TopDockWidgetArea)
-        
+
         self.setWidget(widget)
         #self._widget = self.widget()  #keep a pointer that may change if the widget changes
         name = unicode(name)
         self.setWindowTitle(name)
         self.setObjectName(name)
         self._custom = False
-        
+
         #store a weakref of the main window
-        self._mainwindow =  weakref.proxy(mainwindow)
-    
+        self._mainwindow = weakref.proxy(mainwindow)
+
     def isCustom(self):
         return self._custom
-    
+
     def setCustom(self, custom):
         self._custom = custom
-        
+
     def isPermanent(self):
         return self._permanent
-    
+
     def setPermanent(self, permanent):
         self._permanent = permanent
-    
+
     def setWidgetFromClassName(self, classname, modulename=None):
         if self.getWidgetClassName() != classname:
             try:
@@ -143,142 +151,188 @@ class DockWidgetPanel(Qt.QDockWidget, TaurusBaseWidget):
             except:
                 try:
                     if classname is not None and '.' in classname:
-                        mn,classname = classname.rsplit('.',1)
-                        modulename = ("%s.%s"%(modulename or '',mn)).strip('. ')
+                        mn, classname = classname.rsplit('.', 1)
+                        modulename = ("%s.%s" % (modulename or '', mn)).strip('. ')
                     module = __import__(modulename, fromlist=[''])
                     klass = getattr(module, classname)
                     w = klass()
                 except Exception, e:
-                    raise RuntimeError('Cannot create widget from classname "%s". Reason: %s'%(classname, repr(e)))
+                    raise RuntimeError('Cannot create widget from classname "%s". Reason: %s' % (classname, repr(e)))
             #set customwidgetmap if necessary
-            if hasattr(w,'setCustomWidgetMap'):
+            if hasattr(w, 'setCustomWidgetMap'):
                 w.setCustomWidgetMap(self._mainwindow.getCustomWidgetMap())
             self.setWidget(w)
-            wname="%s-%s"%(str(self.objectName()), str(classname))
+            wname = "%s-%s" % (str(self.objectName()), str(classname))
             w.setObjectName(wname)
-            
+
     def getWidgetModuleName(self):
         w = self.widget()
         if w is None:
             return ''
         return w.__module__
-            
+
     def getWidgetClassName(self):
         w = self.widget()
         if w is None:
             return ''
         return w.__class__.__name__
-        
+
     def applyConfig(self, configdict, depth=-1):
         #create the widget
         try:
-            self.setWidgetFromClassName(configdict.get('widgetClassName'), modulename=configdict.get('widgetModuleName',None))
-            if isinstance(self.widget(),BaseConfigurableClass):
+            self.setWidgetFromClassName(configdict.get('widgetClassName'), modulename=configdict.get('widgetModuleName', None))
+            if isinstance(self.widget(), BaseConfigurableClass):
                 self.widget().applyConfig(configdict['widget'])
-        except Exception,e:
-            self.info('Failed to set the widget for this panel. Reason: %s'%repr(e))
+        except Exception, e:
+            self.info('Failed to set the widget for this panel. Reason: %s' % repr(e))
             self.traceback(self.Debug)
             return
         TaurusBaseWidget.applyConfig(self, configdict, depth)
-        
+
     def createConfig(self, *args, **kwargs):
         configdict = TaurusBaseWidget.createConfig(self, *args, **kwargs)
         configdict['widgetClassName'] = self.getWidgetClassName()
         configdict['widgetModuleName'] = self.getWidgetModuleName()
-        if isinstance(self.widget(),BaseConfigurableClass):
+        if isinstance(self.widget(), BaseConfigurableClass):
             configdict['widget'] = self.widget().createConfig()
         return configdict
-    
+
 
 class TaurusGui(TaurusMainWindow):
     '''
-    This is main class for constructing the dynamic GUIs. Specific GUIs are
-    supposed to be created by providing a configuration file which is loaded by
-    this class (instead of subclassing it). TaurusGui is a specialised
-    TaurusMainWindow which is able to handle "panels" and load configuration
-    files.
+    This is main class for constructing the dynamic GUIs. TaurusGui is a 
+    specialised TaurusMainWindow which is able to handle "panels" and load 
+    configuration files.
+    There are several ways of using TaurusGui. In the following we will give 
+    3 examples on how to create a simple GUI called "MyGui" which contains one 
+    panel called "Foo" and consisting of a `QWidget`:
     
-    .. note:: 
-        Please be aware that TaurusGui has only recently being developed and it
-        is still under intense development. The syntax of the configuration files
-        may change at some point and more features and bug fixes are likely to
-        be added in the near future.
-    '''
+    **Example 1: use declarative configuration files.**
     
-    IMPLICIT_ASSOCIATION = '__[IMPLICIT]__'
+    You can create a purely declarative configuration file to be interpreted by 
+    the standard `taurusgui` script::
+    
+        from taurus.qt.qtgui.taurusgui.utils import PanelDescription
+
+        GUI_NAME = 'MyGui'
+        panel = PanelDescription('Foo', 
+                                 classname='taurus.external.qt.Qt.QWidget')   
+    
+    Note that this just a very simple example. For a much richer one, see the
+    :mod:`taurus.qt.qtgui.taurusgui.conf.tgconf_example01`
+      
+    **Example 2: do everything programmatically.**
+    
+    A stand-alone python script that launches the gui when executed. No 
+    configuration file is used here. Panels and other components are added 
+    programatically::
     
+        if __name__ == '__main__':
+            from taurus.qt.qtgui.application import TaurusApplication
+            from taurus.qt.qtgui.taurusgui import TaurusGui
+            from taurus.external.qt import Qt
+            app = TaurusApplication(app_name='MyGui') 
+            gui = TaurusGui()
+            panel = Qt.QWidget()
+            gui.createPanel(panel, 'Foo')
+            gui.show()
+            app.exec_()
+            
+            
+    **Example 3: mixing declarative and programmatic ways**
+    
+    It is also possible to create a stand-alone python script which loads itself
+    as a configuration file. In this way you can add things programmatically and 
+    at the same time use the declarative way::
+    
+        GUI_NAME = 'MyGui' # <-- declarative! 
+        if __name__ == '__main__':
+            from taurus.qt.qtgui.application import TaurusApplication
+            from taurus.qt.qtgui.taurusgui import TaurusGui
+            from taurus.external.qt import Qt
+            app = TaurusApplication()
+            gui = TaurusGui(confname=__file__)
+            panel = Qt.QWidget()
+            gui.createPanel(panel, 'Foo')  # <-- programmatic!
+            gui.show()
+            app.exec_()
+    
+    '''
+
+    IMPLICIT_ASSOCIATION = '__[IMPLICIT]__'
+
     def __init__(self, parent=None, confname=None, configRecursionDepth=None):
         TaurusMainWindow.__init__(self, parent, False, True)
-        
+
         if configRecursionDepth is not None:
             self.defaultConfigRecursionDepth = configRecursionDepth
-            
-        self.__panels = {}   
+
+        self.__panels = {}
         self.__synoptics = []
         self.__instrumentToPanelMap = {}
         self.__panelToInstrumentMap = {}
         self.setDockNestingEnabled(True)
-        
+
         self.registerConfigProperty(self._getPermanentCustomPanels, self._setPermanentCustomPanels, 'permanentCustomPanels')
         self.registerConfigProperty(self.getAllInstrumentAssociations, self.setAllInstrumentAssociations, 'instrumentAssociation')
-                
+
         from taurus import tauruscustomsettings
-        self.setCustomWidgetMap(getattr(tauruscustomsettings,'T_FORM_CUSTOM_WIDGET_MAP',{}))
-        
+        self.setCustomWidgetMap(getattr(tauruscustomsettings, 'T_FORM_CUSTOM_WIDGET_MAP', {}))
+
         #Create a global SharedDataManager
-        Qt.qApp.SDM =  SharedDataManager(self)
-                
+        Qt.qApp.SDM = SharedDataManager(self)
+
         self.__initPanelsMenu()
         self.__initViewMenu()
         self.__initPanelsToolBar()
         self.__initQuickAccessToolBar()
-        self.__initJorgBar()  
+        self.__initJorgBar()
         self.__initSharedDataConnections()
         self.__initToolsMenu()
-                    
+
         self.loadConfiguration(confname)
-                
+
         #connect the main window itself as a reader/writer of "short messages"
-        Qt.qApp.SDM.connectReader("shortMessage", self.onShortMessage) 
+        Qt.qApp.SDM.connectReader("shortMessage", self.onShortMessage)
         Qt.qApp.SDM.connectWriter("shortMessage", self, 'newShortMessage')
-        
+
         #emit a short message informing that we are ready to go
-        msg = '%s is ready'%Qt.qApp.applicationName()
+        msg = '%s is ready' % Qt.qApp.applicationName()
         self.emit(Qt.SIGNAL('newShortMessage'), msg)
-        
-        if self.defaultConfigRecursionDepth >=0:
-            Qt.QMessageBox.information(self, "Fail-proof mode", 
-                                   ('Running in fail-proof mode.'+
-                                    '\nLoading of potentially problematic settings is disabled.'+ 
-                                    '\nSome panels may not be loaded or may ignore previous user configuration'+
-                                    '\nThis will also apply when loading perspectives'), 
+
+        if self.defaultConfigRecursionDepth >= 0:
+            Qt.QMessageBox.information(self, "Fail-proof mode",
+                                   ('Running in fail-proof mode.' +
+                                    '\nLoading of potentially problematic settings is disabled.' +
+                                    '\nSome panels may not be loaded or may ignore previous user configuration' +
+                                    '\nThis will also apply when loading perspectives'),
                                    Qt.QMessageBox.Ok, Qt.QMessageBox.NoButton)
-        
+
     def closeEvent(self, event):
         try:
             self.__macroBroker.removeTemporaryPanels()
         except:
             pass
-        TaurusMainWindow.closeEvent(self,event)
-        
+        TaurusMainWindow.closeEvent(self, event)
+
     def __updatePanelsMenu(self):
         '''dynamically fill the panels menus'''
         panelsmenu = self.sender()
         permanent = (panelsmenu == self.__permPanelsMenu)
         panelsmenu.clear()
-        panelnames =  sorted([n for n,p in self.__panels.items() if (p.isPermanent() == permanent)])
+        panelnames = sorted([n for n, p in self.__panels.items() if (p.isPermanent() == permanent)])
         for name in panelnames:
-            panelsmenu.addAction(self.__panels[name].toggleViewAction())        
-            
-    def __initPanelsMenu(self):        
+            panelsmenu.addAction(self.__panels[name].toggleViewAction())
+
+    def __initPanelsMenu(self):
         #Panels menu
-        self.__panelsMenu =  Qt.QMenu('Panels', self)
+        self.__panelsMenu = Qt.QMenu('Panels', self)
         self.menuBar().insertMenu(self.helpMenu.menuAction(), self.__panelsMenu)
-        self.hideAllPanelsAction = self.__panelsMenu.addAction(taurus.qt.qtgui.resource.getIcon(':/actions/hide.svg'),"Hide all panels", self.hideAllPanels)
-        self.showAllPanelsAction = self.__panelsMenu.addAction(taurus.qt.qtgui.resource.getIcon(':/actions/show.svg'),"Show all panels", self.showAllPanels)
-        self.newPanelAction = self.__panelsMenu.addAction(taurus.qt.qtgui.resource.getThemeIcon("window-new"),"New Panel...", self.createCustomPanel)
-        self.removePanelAction = self.__panelsMenu.addAction(taurus.qt.qtgui.resource.getThemeIcon("edit-clear"), "Remove Panel...", self.removePanel)
-        self.__panelsMenu.addAction(taurus.qt.qtgui.resource.getThemeIcon("preferences-desktop-personal"),"Switch temporary/permanent status...", self.updatePermanentCustomPanels)
+        self.hideAllPanelsAction = self.__panelsMenu.addAction(getIcon(':/actions/hide.svg'), "Hide all panels", self.hideAllPanels)
+        self.showAllPanelsAction = self.__panelsMenu.addAction(getIcon(':/actions/show.svg'), "Show all panels", self.showAllPanels)
+        self.newPanelAction = self.__panelsMenu.addAction(getThemeIcon("window-new"), "New Panel...", self.createCustomPanel)
+        self.removePanelAction = self.__panelsMenu.addAction(getThemeIcon("edit-clear"), "Remove Panel...", self.removePanel)
+        self.__panelsMenu.addAction(getThemeIcon("preferences-desktop-personal"), "Switch temporary/permanent status...", self.updatePermanentCustomPanels)
         #temporary and permanent panels submenus
         self.__panelsMenu.addSeparator()
         self.__permPanelsMenu = Qt.QMenu('Permanent Panels', self)
@@ -288,24 +342,24 @@ class TaurusGui(TaurusMainWindow):
         self.__panelsMenu.addMenu(self.__tempPanelsMenu)
         self.connect(self.__tempPanelsMenu, Qt.SIGNAL('aboutToShow()'), self.__updatePanelsMenu)
         self.__panelsMenu.addSeparator()
-        
+
     def __initViewMenu(self):
-        self.viewMenu.addSeparator() #the superclass may already have added stuff to the viewMenu
+        self.viewMenu.addSeparator()  #the superclass may already have added stuff to the viewMenu
         #view locking
         self.viewMenu.addSeparator()
-        self._lockviewAction = Qt.QAction(taurus.qt.qtgui.resource.getThemeIcon("system-lock-screen"),"Lock View", self)
+        self._lockviewAction = Qt.QAction(getThemeIcon("system-lock-screen"), "Lock View", self)
         self._lockviewAction.setCheckable(True)
-        self.connect(self._lockviewAction,Qt.SIGNAL("toggled(bool)"), self.setLockView)
+        self.connect(self._lockviewAction, Qt.SIGNAL("toggled(bool)"), self.setLockView)
         self._lockviewAction.setChecked(not self.isModifiableByUser())
         self.viewMenu.addAction(self._lockviewAction)
-             
+
     def __initPanelsToolBar(self):
-        #Panels toolbar  
+        #Panels toolbar
         self.panelsToolBar = self.addToolBar("Panels")
         self.panelsToolBar.setObjectName("PanelsToolbar")
         self.panelsToolBar.addAction(self.newPanelAction)
         self.viewToolBarsMenu.addAction(self.panelsToolBar.toggleViewAction())
-    
+
     def __initQuickAccessToolBar(self):
         self.quickAccessToolBar = self.addToolBar("Quick Access")
         self.quickAccessToolBar.setObjectName("quickAccessToolbar")
@@ -317,10 +371,10 @@ class TaurusGui(TaurusMainWindow):
         self.jorgsBar = Qt.QToolBar('Fancy ToolBar')
         self.jorgsBar.setObjectName('jorgsToolBar')
         self.addToolBar(Qt.Qt.RightToolBarArea, self.jorgsBar)
-        self.jorgsBar.setIconSize(Qt.QSize(60,60))
+        self.jorgsBar.setIconSize(Qt.QSize(60, 60))
         self.jorgsBar.setMovable(False)
-        
-    def __initSharedDataConnections(self):        
+
+    def __initSharedDataConnections(self):
         #register the TAURUSGUI itself as a writer/reader for several shared data items
         splashScreen = self.splashScreen()
         if splashScreen is not None:
@@ -332,14 +386,14 @@ class TaurusGui(TaurusMainWindow):
         Qt.qApp.SDM.connectReader("executionStarted", self.setFocusToPanel)
         Qt.qApp.SDM.connectReader("selectedPerspective", self.loadPerspective)
         Qt.qApp.SDM.connectWriter("perspectiveChanged", self, 'perspectiveChanged')
-        
+
     def __initToolsMenu(self):
         if self.toolsMenu is None:
             self.toolsMenu = Qt.QMenu("Tools")
-        self.toolsMenu.addAction(taurus.qt.qtgui.resource.getIcon(":/apps/preferences-system-session.svg"),"manage instrument-panel associations", self.onShowAssociationDialog)
-        self.toolsMenu.addAction(taurus.qt.qtgui.resource.getThemeIcon("document-save"),"Export current Panel configuration to XML", self.onExportCurrentPanelConfiguration)
-        self.toolsMenu.addAction(taurus.qt.qtgui.resource.getIcon(":/actions/data-transfer.svg"),"Show Shared Data Manager connections", self.showSDMInfo)
-        
+        self.toolsMenu.addAction(getIcon(":/apps/preferences-system-session.svg"), "manage instrument-panel associations", self.onShowAssociationDialog)
+        self.toolsMenu.addAction(getThemeIcon("document-save"), "Export current Panel configuration to XML", self.onExportCurrentPanelConfiguration)
+        self.toolsMenu.addAction(getIcon(":/actions/data-transfer.svg"), "Show Shared Data Manager connections", self.showSDMInfo)
+
     def setCustomWidgetMap(self, map):
         '''
         Sets the widget map that is used application-wide. This widget map will
@@ -352,7 +406,7 @@ class TaurusGui(TaurusMainWindow):
         .. seealso:: :meth:`TaurusForm.setCustomWidgetMap`, :meth:`getCustomWidgetMap`
         '''
         self._customWidgetMap = map
-        
+
     def getCustomWidgetMap(self):
         '''
         Returns the default map used to create custom widgets by the TaurusForms
@@ -364,13 +418,13 @@ class TaurusGui(TaurusMainWindow):
         
         .. seealso:: :meth:`setCustomWidgetMap`
         '''
-        return self._customWidgetMap   
-       
+        return self._customWidgetMap
+
     def createConfig(self, *args, **kwargs):
         '''reimplemented from TaurusMainWindow.createConfig'''
         self.updatePermanentCustomPanels(showAlways=False)
-        return TaurusMainWindow.createConfig(self, *args, **kwargs)   
-    
+        return TaurusMainWindow.createConfig(self, *args, **kwargs)
+
     def removePanel(self, name=None):
         ''' remove the given panel from the GUI.
         
@@ -382,29 +436,29 @@ class TaurusGui(TaurusMainWindow):
                      If None given, the user will be prompted
         '''
         if name is None:
-            items = sorted([n for n,p in self.__panels.iteritems() if p.isCustom()])
-            name,ok = Qt.QInputDialog.getItem (self, "Remove Panel", 
+            items = sorted([n for n, p in self.__panels.iteritems() if p.isCustom()])
+            name, ok = Qt.QInputDialog.getItem (self, "Remove Panel",
                                                "Panel to be removed (only custom panels can be removed).\n Important: you may want to save the perspective afterwards,\n and maybe remove the panel from other perspectives as well", items, 0, False)
             if not ok:
                 return
         name = unicode(name)
-        if name not in self.__panels: 
-            self.debug('Cannot remove panel "%s" (not found)'%name)
+        if name not in self.__panels:
+            self.debug('Cannot remove panel "%s" (not found)' % name)
             return
         panel = self.__panels.pop(name)
         try:
-            panel.widget().setModel(None) #in case the widget is a Taurus one and does some cleaning when setting model to None
+            panel.widget().setModel(None)  #in case the widget is a Taurus one and does some cleaning when setting model to None
         except:
             pass
-        
+
         self.unregisterConfigurableItem(name, raiseOnError=False)
         self.removeDockWidget(panel)
         panel.setParent(None)
         panel.setAttribute(Qt.Qt.WA_DeleteOnClose)
         panel.close()
-        self.debug('Panel "%s" removed'%name)
-        
-    def createPanel(self, widget, name, floating=False, registerconfig=True, custom=False, 
+        self.debug('Panel "%s" removed' % name)
+
+    def createPanel(self, widget, name, floating=False, registerconfig=True, custom=False,
                     permanent=False, icon=None, instrumentkey=None):
         '''
         Creates a panel containing the given widget.
@@ -429,26 +483,25 @@ class TaurusGui(TaurusMainWindow):
                   value is given, it will be interpreted as floating=True (while if
                   `None` is passed, it will be interpreted as floating=False.
         '''
-        
+
         #backwards compatibility:
         if not isinstance(floating, bool):
             self.info('Deprecation warning: please note that the "area" argument is deprecated. See TaurusGui.createPanel doc')
             floating = not(floating)
-        
+
         name = unicode(name)
         if name in self.__panels:
-            self.info('Panel with name "%s" already exists. Reusing.'%name)
-            return self.__panels[name]  
-        
+            self.info('Panel with name "%s" already exists. Reusing.' % name)
+            return self.__panels[name]
+
         # create a panel
         panel = DockWidgetPanel(None, widget, name, self)
-        if len(self.__panels)== 0:
-            self.addDockWidget(Qt.Qt.TopDockWidgetArea, panel) #we will only place panels in this area
-        else:
+        self.addDockWidget(Qt.Qt.TopDockWidgetArea, panel)  #we will only place panels in this area
+        if len(self.__panels) != 0:
             self.tabifyDockWidget(self.__panels.values()[-1], panel)
-            
+
         panel.setFloating(floating)
-        
+
         #associate this panel with an instrument
         if instrumentkey is not None:
             if instrumentkey == self.IMPLICIT_ASSOCIATION:
@@ -459,31 +512,31 @@ class TaurusGui(TaurusMainWindow):
                         break
             else:
                 self.setInstrumentAssociation(instrumentkey, name)
-        
+
         if icon is not None:
             panel.toggleViewAction().setIcon(icon)
-        
+
         #set flags
         panel.setCustom(custom)
-        panel.setPermanent(permanent)    
-                       
+        panel.setPermanent(permanent)
+
         #register the panel for configuration
-        if registerconfig: 
+        if registerconfig:
             self.registerConfigDelegate(panel, name=name)
         self.__panels[name] = panel
-        
+
         #connect the panel visibility changes
-        self.connect(panel,Qt.SIGNAL('visibilityChanged(bool)'),self._onPanelVisibilityChanged)
+        self.connect(panel, Qt.SIGNAL('visibilityChanged(bool)'), self._onPanelVisibilityChanged)
 
         return panel
-    
-    def getPanel(self,name):
+
+    def getPanel(self, name):
         '''get a panel object by name
         
         :return: (DockWidgetPanel)
         '''
         return self.__panels[unicode(name)]
-    
+
     def getPanelNames(self):
         '''returns the names of existing panels
         
@@ -495,12 +548,12 @@ class TaurusGui(TaurusMainWindow):
         '''creates empty panels for restoring custom panels.
         
         :param permCustomPanels: (list<str>) list of names of custom panels
-        '''  
+        '''
         #first create the panels if they don't actually exist
         for name in permCustomPanels:
             if name not in self.__panels:
-                self.createPanel(None, name, custom=True, permanent=True) 
-        
+                self.createPanel(None, name, custom=True, permanent=True)
+
     def _getPermanentCustomPanels(self):
         ''' 
         returns a list of panel names for which the custom and permanent flags
@@ -508,9 +561,9 @@ class TaurusGui(TaurusMainWindow):
         configuration and/or perspectives)
         
         :return: (list<str>) 
-        '''        
-        return [n for n,p in self.__panels.iteritems() if (p.isCustom() and  p.isPermanent())]
-        
+        '''
+        return [n for n, p in self.__panels.iteritems() if (p.isCustom() and  p.isPermanent())]
+
     def updatePermanentCustomPanels(self, showAlways=True):
         '''
         Shows a dialog for selecting which custom panels should be permanently
@@ -520,12 +573,12 @@ class TaurusGui(TaurusMainWindow):
         '''
         #check if there are some newly created panels that may be made permanent
         perm = self._getPermanentCustomPanels()
-        temp = [n for n,p in self.__panels.iteritems() if (p.isCustom() and not p.isPermanent())]
-        if len(temp)>0 or showAlways:
-            dlg = QDoubleListDlg(winTitle='Stored panels', 
+        temp = [n for n, p in self.__panels.iteritems() if (p.isCustom() and not p.isPermanent())]
+        if len(temp) > 0 or showAlways:
+            dlg = QDoubleListDlg(winTitle='Stored panels',
                      mainLabel='Select which of the panels should be stored',
-                     label1='Temporary (to be discarded)', label2='Permanent (to be stored)', 
-                     list1=temp, list2=perm )
+                     label1='Temporary (to be discarded)', label2='Permanent (to be stored)',
+                     list1=temp, list2=perm)
             result = dlg.exec_()
             if result == Qt.QDialog.Accepted:
                 #update the permanent Custom Panels
@@ -538,7 +591,7 @@ class TaurusGui(TaurusMainWindow):
                 for name in dlg.getAll1():
                     self.__panels[name].setPermanent(False)
                     self.unregisterConfigurableItem(name, raiseOnError=False)
-            
+
     def createCustomPanel(self, paneldesc=None):
         '''
         Creates a panel from a Panel Description and sets it as "custom panel".
@@ -550,24 +603,24 @@ class TaurusGui(TaurusMainWindow):
 
         if paneldesc is None:
             from taurus.qt.qtgui.taurusgui import PanelDescriptionWizard
-            paneldesc,ok = PanelDescriptionWizard.getDialog(self, extraWidgets=self._extraCatalogWidgets)
-            if not ok: 
+            paneldesc, ok = PanelDescriptionWizard.getDialog(self, extraWidgets=self._extraCatalogWidgets)
+            if not ok:
                 return
         w = paneldesc.getWidget(sdm=Qt.qApp.SDM, setModel=False)
-        if hasattr(w,'setCustomWidgetMap'):
+        if hasattr(w, 'setCustomWidgetMap'):
             w.setCustomWidgetMap(self.getCustomWidgetMap())
         if paneldesc.model is not None:
             w.setModel(paneldesc.model)
         if isinstance(w, TaurusBaseComponent):
             w.setModifiableByUser(True)
             w.setModelInConfig(True)
-        
-        self.createPanel(w, paneldesc.name, floating=paneldesc.floating, custom=True, 
+
+        self.createPanel(w, paneldesc.name, floating=paneldesc.floating, custom=True,
                          registerconfig=False, instrumentkey=paneldesc.instrumentkey,
                          permanent=False)
-        msg = 'Panel %s created. Drag items to it or use the context menu to customize it'%w.name
+        msg = 'Panel %s created. Drag items to it or use the context menu to customize it' % w.name
         self.emit(Qt.SIGNAL('newShortMessage'), msg)
-        
+
     def createMainSynoptic(self, synopticname):
         '''
         Creates a synoptic panel and registers it as "SelectedInstrument" 
@@ -579,33 +632,33 @@ class TaurusGui(TaurusMainWindow):
             synoptic = TaurusJDrawSynopticsView()
             synoptic.setModel(jdwFileName)
             self.__synoptics.append(synoptic)
-        except Exception,e:
+        except Exception, e:
             #print repr(e)
-            msg='Error loading synoptic file "%s".\nSynoptic won\'t be available'%jdwFileName
+            msg = 'Error loading synoptic file "%s".\nSynoptic won\'t be available' % jdwFileName
             self.error(msg)
             self.traceback(level=taurus.Info)
-            result = Qt.QMessageBox.critical(self,'Initialization error', '%s\n\n%s'%(msg,repr(e)) , Qt.QMessageBox.Abort|Qt.QMessageBox.Ignore)
+            result = Qt.QMessageBox.critical(self, 'Initialization error', '%s\n\n%s' % (msg, repr(e)) , Qt.QMessageBox.Abort | Qt.QMessageBox.Ignore)
             if result == Qt.QMessageBox.Abort:
                 sys.exit()
-            
+
         Qt.qApp.SDM.connectWriter("SelectedInstrument", synoptic, "graphicItemSelected(QString)")
         Qt.qApp.SDM.connectReader("SelectedInstrument", synoptic.selectGraphicItem)
-        
+
         #find an unique (and short) name
         name = os.path.splitext(os.path.basename(synopticname))[0]
         if len(name) > 10:
             name = 'Syn'
-        i=2
+        i = 2
         prefix = name
         while name in self.__panels:
-            name = '%s_%i'%(prefix, i)
-            i+=1
-            
+            name = '%s_%i' % (prefix, i)
+            i += 1
+
         synopticpanel = self.createPanel(synoptic, name, permanent=True,
-                                         icon=taurus.qt.qtgui.resource.getThemeIcon('image-x-generic'))
+                                         icon=getThemeIcon('image-x-generic'))
         toggleSynopticAction = synopticpanel.toggleViewAction()
         self.quickAccessToolBar.addAction(toggleSynopticAction)
-    
+
     def createConsole(self, kernels):
         try:
             from taurus.qt.qtgui.console import TaurusConsole
@@ -614,10 +667,10 @@ class TaurusGui(TaurusMainWindow):
             return
         console = TaurusConsole(kernels=kernels)
         consolePanel = self.createPanel(console, "Console", permanent=True,
-            icon=taurus.qt.qtgui.resource.getThemeIcon('utilities-terminal'))
+            icon=getThemeIcon('utilities-terminal'))
         toggleConsoleAction = consolePanel.toggleViewAction()
         self.quickAccessToolBar.addAction(toggleConsoleAction)
-    
+
     def createInstrumentsFromPool(self, macroservername):
         '''
         Creates a list of instrument panel descriptions by gathering the info
@@ -625,27 +678,27 @@ class TaurusGui(TaurusMainWindow):
         elements that belong to the same instrument according to the Pool info
         
         :return: (list<PanelDescription>)                 
-        '''      
+        '''
         instrument_dict = {}
         try:
             ms = taurus.Device(macroservername)
             instruments = ms.getElementsOfType('Instrument')
             if instruments is None: raise
-        except Exception,e:
-            msg = 'Could not fetch Instrument list from "%s"'%macroservername
+        except Exception, e:
+            msg = 'Could not fetch Instrument list from "%s"' % macroservername
             self.error(msg)
-            result = Qt.QMessageBox.critical(self,'Initialization error', '%s\n\n%s'%(msg,repr(e)), Qt.QMessageBox.Abort|Qt.QMessageBox.Ignore)
+            result = Qt.QMessageBox.critical(self, 'Initialization error', '%s\n\n%s' % (msg, repr(e)), Qt.QMessageBox.Abort | Qt.QMessageBox.Ignore)
             if result == Qt.QMessageBox.Abort:
                 sys.exit()
             return []
         for i in instruments.values():
             i_name = i.full_name
             #i_name, i_unknown, i_type, i_pools = i.split()
-            i_view = PanelDescription(i_name,classname='TaurusForm', floating=False, model=[])
+            i_view = PanelDescription(i_name, classname='TaurusForm', floating=False, model=[])
             instrument_dict[i_name] = i_view
-        
+
         from operator import attrgetter
-        pool_elements =  sorted(ms.getElementsWithInterface('Moveable').values(), key=attrgetter('name'))
+        pool_elements = sorted(ms.getElementsWithInterface('Moveable').values(), key=attrgetter('name'))
         pool_elements += sorted(ms.getElementsWithInterface('ExpChannel').values(), key=attrgetter('name'))
         pool_elements += sorted(ms.getElementsWithInterface('IORegister').values(), key=attrgetter('name'))
         for elem in pool_elements:
@@ -655,7 +708,7 @@ class TaurusGui(TaurusMainWindow):
                 e_name = elem.full_name
                 instrument_dict[i_name].model.append(e_name)
         #filter out empty panels
-        ret =  [instrument for instrument in instrument_dict.values() if len(instrument.model)>0]
+        ret = [instrument for instrument in instrument_dict.values() if len(instrument.model) > 0]
         return ret
 
     def __getVarFromXML(self, root, nodename, default=None):
@@ -664,63 +717,85 @@ class TaurusGui(TaurusMainWindow):
             return default
         else:
             return name.text
-    
+        
+    def _importConfiguration(self, confname):
+        '''returns the module corresponding to `confname` or to 
+        `tgconf_<confname>`. Note: the `conf` subdirectory of the directory in 
+        which taurusgui.py file is installed is temporally prepended to sys.path
+        '''
+        confsubdir = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'conf')  #the path to a conf subdirectory of the place where taurusgui.py is
+        oldpath = sys.path
+        try:
+            sys.path = [confsubdir] + sys.path  #add the conf subdirectory dir to the pythonpath
+            conf = __import__(confname)
+        except ImportError:
+            altconfname = "tgconf_%s" % confname
+            try:
+                conf = __import__(altconfname)
+            except ImportError:
+                msg = 'cannot import %s or %s' % (confname, altconfname)
+                self.error(msg)
+                Qt.QMessageBox.critical(self, 'Initialization error', msg, Qt.QMessageBox.Abort)
+                sys.exit()
+        finally:
+            sys.path = oldpath  #restore the previous sys.path
+        return conf
+        
+
     def loadConfiguration(self, confname):
         '''Reads a configuration file
         
-        :param confname: (str) the  name of module located in the PYTHONPATH
-                         or in the conf subdirectory of the directory in which 
-                         taurusgui.py file is installed.
-                         This method will try to import <confname>.  If that fails, 
-                         it will try to import "tgconf_<confname>.
-                         Alternatively, confname can be the path to the configuration 
-                         directory (not necessarily in the python path).
+        :param confname: (str or None) the  name of module located in the 
+                         PYTHONPATH or in the conf subdirectory of the directory
+                         in which taurusgui.py file is installed.
+                         This method will try to import <confname>.  
+                         If that fails, it will try to import 
+                         `tgconf_<confname>`.
+                         Alternatively, `confname` can be the path to the 
+                         configuration module (not necessarily in the 
+                         PYTHONPATH).
+                         `confname` can also be None, in which case a dummy
+                         empty module will be used.
         '''
-        
+
         #import the python config file
         try:
-            if os.path.isdir(confname): #if confname is a dir name
+            if confname is None:
+                import types
+                conf = types.ModuleType('__dummy_conf_module__') #dummy module
+                confname = str(Qt.qApp.applicationName())
+                self._confDirectory = ''
+            elif os.path.exists(confname):  #if confname is a dir or file name
                 import imp
                 path, name = os.path.split(confname)
-                name, ext = os.path.splitext(name) 
-                f, filename, data = imp.find_module(name, [path])
-                conf = imp.load_module(name, f, filename, data)
-            else: #if confname is not a dir name, we assume it is a module name in the python path
-                confsubdir = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'conf') #the path to a conf subdirectory of the place where taurusgui.py is
-                oldpath = sys.path
-                sys.path = [confsubdir] + sys.path #add the conf subdirectory dir to the pythonpath
-                try: 
-                    conf = __import__(confname)
+                name, _ = os.path.splitext(name)
+                try:
+                    f, filename, data = imp.find_module(name, [path])
+                    conf = imp.load_module(name, f, filename, data)
+                    confname = name
                 except ImportError:
-                    altconfname = "tgconf_%s"%confname
-                    try:
-                        conf = __import__(altconfname)
-                    except ImportError:
-                        msg = 'cannot import %s or %s'%(confname, altconfname)
-                        self.error(msg)
-                        Qt.QMessageBox.critical(self,'Initialization error', msg, Qt.QMessageBox.Abort)
-                        sys.exit()
-                sys.path = oldpath #restore the previous sys.path
+                    conf =  self._importConfiguration(confname)
+                self._confDirectory = os.path.dirname(conf.__file__)
+            else:  #if confname is not a dir name, we assume it is a module name in the python path
+                conf =  self._importConfiguration(confname)
+                self._confDirectory = os.path.dirname(conf.__file__)   
         except Exception, e:
             import traceback
-            msg = 'Error loading configuration: %s'%traceback.format_exc() #repr(e)
+            msg = 'Error loading configuration: %s' % traceback.format_exc()  #repr(e)
             self.error(msg)
-            Qt.QMessageBox.critical(self,'Initialization error', msg, Qt.QMessageBox.Abort)
+            Qt.QMessageBox.critical(self, 'Initialization error', msg, Qt.QMessageBox.Abort)
             sys.exit()
-            
-        #In any case, once we have imported it we can get the configuration directory:
-        self._confDirectory = os.path.dirname(conf.__file__)
-        
-        #Get the xml root node from the xml configuration file 
-        XML_CONFIG = getattr(conf,'XML_CONFIG', None)
+
+        #Get the xml root node from the xml configuration file
+        XML_CONFIG = getattr(conf, 'XML_CONFIG', None)
         if XML_CONFIG is None:
             self._xmlConfigFileName = None
         else:
             self._xmlConfigFileName = os.path.join(self._confDirectory, XML_CONFIG)
-        xmlroot = etree.fromstring('<root></root>') #default fallback (in case of I/O or parse errors)
+        xmlroot = etree.fromstring('<root></root>')  #default fallback (in case of I/O or parse errors)
         if XML_CONFIG is not None:
             try:
-                xmlfname = os.path.join(self._confDirectory, XML_CONFIG) # If a relative name was given, the conf directory will be used as base path
+                xmlfname = os.path.join(self._confDirectory, XML_CONFIG)  # If a relative name was given, the conf directory will be used as base path
                 xmlFile = open(xmlfname, 'r')
                 xmlstring = xmlFile.read()
                 xmlFile.close()
@@ -729,112 +804,112 @@ class TaurusGui(TaurusMainWindow):
                 msg = 'Error reading the XML file: "%s"' % xmlfname
                 self.error(msg)
                 self.traceback(level=taurus.Info)
-                result = Qt.QMessageBox.critical(self,'Initialization error', '%s\nReason:"%s"'% (msg,repr(e)), Qt.QMessageBox.Abort|Qt.QMessageBox.Ignore)
+                result = Qt.QMessageBox.critical(self, 'Initialization error', '%s\nReason:"%s"' % (msg, repr(e)), Qt.QMessageBox.Abort | Qt.QMessageBox.Ignore)
                 if result == Qt.QMessageBox.Abort:
                     sys.exit()
-                    
+
         #General Qt application settings and jorgs bar logos
-        APPNAME = getattr(conf,'GUI_NAME', self.__getVarFromXML(xmlroot,"GUI_NAME", confname))
-        ORGNAME = getattr(conf,'ORGANIZATION', self.__getVarFromXML(xmlroot,"ORGANIZATION", 'Taurus'))
-        CUSTOMLOGO =  getattr(conf, 'CUSTOM_LOGO', getattr(conf,'LOGO', self.__getVarFromXML(xmlroot,"CUSTOM_LOGO", ':/taurus.png')))
+        APPNAME = getattr(conf, 'GUI_NAME', self.__getVarFromXML(xmlroot, "GUI_NAME", confname))
+        ORGNAME = getattr(conf, 'ORGANIZATION', self.__getVarFromXML(xmlroot, "ORGANIZATION", str(Qt.qApp.organizationName()) or 'Taurus'))
+        CUSTOMLOGO = getattr(conf, 'CUSTOM_LOGO', getattr(conf, 'LOGO', self.__getVarFromXML(xmlroot, "CUSTOM_LOGO", ':/taurus.png')))
         if CUSTOMLOGO.startswith(':'):
-            customIcon = taurus.qt.qtgui.resource.getIcon(CUSTOMLOGO)
+            customIcon = getIcon(CUSTOMLOGO)
         else:
             customIcon = Qt.QIcon(os.path.join(self._confDirectory, CUSTOMLOGO))
         Qt.qApp.setApplicationName(APPNAME)
         Qt.qApp.setOrganizationName(ORGNAME)
         Qt.QApplication.instance().basicConfig()
 
-        ORGANIZATIONLOGO =  getattr(conf, 'ORGANIZATION_LOGO', self.__getVarFromXML(xmlroot,"ORGANIZATION_LOGO", ':/logo.png'))
+        ORGANIZATIONLOGO = getattr(conf, 'ORGANIZATION_LOGO', self.__getVarFromXML(xmlroot, "ORGANIZATION_LOGO", ':/logo.png'))
         ##
         if ORGANIZATIONLOGO.startswith(':'):
-            organizationIcon = taurus.qt.qtgui.resource.getIcon(ORGANIZATIONLOGO)
+            organizationIcon = getIcon(ORGANIZATIONLOGO)
         else:
             organizationIcon = Qt.QIcon(os.path.join(self._confDirectory, ORGANIZATIONLOGO))
-        
+
         #if required, enforce that only one instance of this GUI can be run
-        SINGLEINSTANCE = getattr(conf,'SINGLE_INSTANCE', (self.__getVarFromXML(xmlroot,"SINGLE_INSTANCE", 'True').lower() == 'true') )
+        SINGLEINSTANCE = getattr(conf, 'SINGLE_INSTANCE', (self.__getVarFromXML(xmlroot, "SINGLE_INSTANCE", 'True').lower() == 'true'))
         if SINGLEINSTANCE:
             if not self.checkSingleInstance():
-                msg = 'Only one istance of %s is allowed to run the same time'%(APPNAME)
+                msg = 'Only one istance of %s is allowed to run the same time' % (APPNAME)
                 self.error(msg)
-                Qt.QMessageBox.critical(self,'Multiple copies', msg, Qt.QMessageBox.Abort)
+                Qt.QMessageBox.critical(self, 'Multiple copies', msg, Qt.QMessageBox.Abort)
                 sys.exit(1)
-        
-        #some initialization 
-        self.resetQSettings() 
+
+        #some initialization
+        self.resetQSettings()
         self.setWindowTitle(APPNAME)
         self.setWindowIcon(customIcon)
-        self.jorgsBar.addAction(organizationIcon,ORGNAME)
-        self.jorgsBar.addAction(customIcon,APPNAME)
-        
+        self.jorgsBar.addAction(organizationIcon, ORGNAME)
+        self.jorgsBar.addAction(customIcon, APPNAME)
+
         #get custom widget catalog entries
-        EXTRA_CATALOG_WIDGETS = getattr(conf,'EXTRA_CATALOG_WIDGETS', []) #@todo: support also loading from xml
+        EXTRA_CATALOG_WIDGETS = getattr(conf, 'EXTRA_CATALOG_WIDGETS', [])  #@todo: support also loading from xml
         self._extraCatalogWidgets = []
-        for classname,pixmapname in EXTRA_CATALOG_WIDGETS:
-            if pixmapname and not pixmapname.startswith(":"): # If a relative file name is given, the conf directory will be used as base path
-                pixmapname = os.path.join(self._confDirectory,pixmapname)
+        for classname, pixmapname in EXTRA_CATALOG_WIDGETS:
+            if pixmapname and not pixmapname.startswith(":"):  # If a relative file name is given, the conf directory will be used as base path
+                pixmapname = os.path.join(self._confDirectory, pixmapname)
             self._extraCatalogWidgets.append((classname, pixmapname))
-                
-        
+
+
         #manual panel
-        MANUAL_URI = getattr(conf,'MANUAL_URI', self.__getVarFromXML(xmlroot,"MANUAL_URI", None))
+        MANUAL_URI = getattr(conf, 'MANUAL_URI', self.__getVarFromXML(xmlroot, "MANUAL_URI", None))
         if MANUAL_URI is not None:
             self.setHelpManualURI(MANUAL_URI)
-            self.createPanel(self.helpManualBrowser, 'Manual', permanent=True, 
-                             icon = taurus.qt.qtgui.resource.getThemeIcon('help-browser'))
-                    
-        #configure the macro infrastructure       
-        MACROSERVER_NAME = getattr(conf,'MACROSERVER_NAME', self.__getVarFromXML(xmlroot,"MACROSERVER_NAME", None))
-        MACRO_PANELS = getattr(conf,'MACRO_PANELS', self.__getVarFromXML(xmlroot,"MACRO_PANELS", True))
-        if MACRO_PANELS and MACROSERVER_NAME is not None:# macro infrastructure will only be created if MACROSERVER_NAME is set
+            self.createPanel(self.helpManualBrowser, 'Manual', permanent=True,
+                             icon=getThemeIcon('help-browser'))
+
+        #configure the macro infrastructure
+        MACROSERVER_NAME = getattr(conf, 'MACROSERVER_NAME', self.__getVarFromXML(xmlroot, "MACROSERVER_NAME", None))
+        MACRO_PANELS = getattr(conf, 'MACRO_PANELS', self.__getVarFromXML(xmlroot, "MACRO_PANELS", True))
+        if MACRO_PANELS and MACROSERVER_NAME is not None:  # macro infrastructure will only be created if MACROSERVER_NAME is set
             from taurus.qt.qtgui.taurusgui import MacroBroker
-            self.__macroBroker =  MacroBroker(self)
-        if MACROSERVER_NAME: 
+            self.__macroBroker = MacroBroker(self)
+        if MACROSERVER_NAME:
             self.emit(Qt.SIGNAL("macroserverNameChanged"), MACROSERVER_NAME)
-        
-        DOOR_NAME = getattr(conf,'DOOR_NAME', self.__getVarFromXML(xmlroot,"DOOR_NAME", ''))
+
+        DOOR_NAME = getattr(conf, 'DOOR_NAME', self.__getVarFromXML(xmlroot, "DOOR_NAME", ''))
         if DOOR_NAME:
             self.emit(Qt.SIGNAL("doorNameChanged"), DOOR_NAME)
-        
-        MACROEDITORS_PATH = getattr(conf,'MACROEDITORS_PATH', self.__getVarFromXML(xmlroot,"MACROEDITORS_PATH", ''))
+
+        MACROEDITORS_PATH = getattr(conf, 'MACROEDITORS_PATH', self.__getVarFromXML(xmlroot, "MACROEDITORS_PATH", ''))
         if MACROEDITORS_PATH:
-            from taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.macroparameterseditor import ParamEditorManager
+            from sardana.taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.macroparameterseditor import ParamEditorManager
             ParamEditorManager().parsePaths(MACROEDITORS_PATH)
             ParamEditorManager().browsePaths()
-        
-        #Synoptics          
+
+        #Synoptics
         SYNOPTIC = getattr(conf, 'SYNOPTIC', None)
-        if isinstance(SYNOPTIC, basestring): #old config file style
-            self.warning('Deprecated usage of SYNOPTIC keyword (now it expects a list of paths). Please update your configuration file to: "SYNOPTIC=[\'%s\']".'%SYNOPTIC)
+        if isinstance(SYNOPTIC, basestring):  #old config file style
+            self.warning('Deprecated usage of SYNOPTIC keyword (now it expects a list of paths). Please update your configuration file to: "SYNOPTIC=[\'%s\']".' % SYNOPTIC)
             SYNOPTIC = [SYNOPTIC]
-        if SYNOPTIC is None: #we look in the xml config file if not present in the python config
+        if SYNOPTIC is None:  #we look in the xml config file if not present in the python config
             SYNOPTIC = []
             node = xmlroot.find("SYNOPTIC")
             if (node is not None) and (node.text is not None):
                 for child in node:
                     s = child.get("str")
-                    if s is not None and len(s): #we do not append empty strings
+                    if s is not None and len(s):  #we do not append empty strings
                         SYNOPTIC.append(s)
         for s in SYNOPTIC:
             self.createMainSynoptic(s)
-            
-        #Get panel descriptions from pool if required            
-        INSTRUMENTS_FROM_POOL = getattr(conf,'INSTRUMENTS_FROM_POOL', (self.__getVarFromXML(xmlroot,"INSTRUMENTS_FROM_POOL", 'False').lower() == 'true') )                   
+
+        #Get panel descriptions from pool if required
+        INSTRUMENTS_FROM_POOL = getattr(conf, 'INSTRUMENTS_FROM_POOL', (self.__getVarFromXML(xmlroot, "INSTRUMENTS_FROM_POOL", 'False').lower() == 'true'))
         if INSTRUMENTS_FROM_POOL:
             try: self.splashScreen().showMessage("Gathering Instrument info from Pool")
-            except AttributeError: pass            
-            POOLINSTRUMENTS = self.createInstrumentsFromPool(MACROSERVER_NAME) #auto create instruments from pool 
+            except AttributeError: pass
+            POOLINSTRUMENTS = self.createInstrumentsFromPool(MACROSERVER_NAME)  #auto create instruments from pool
         else:
             POOLINSTRUMENTS = []
 
-        CONSOLE = getattr(conf,'CONSOLE', self.__getVarFromXML(xmlroot,"CONSOLE", ['ipython']))
+        CONSOLE = getattr(conf, 'CONSOLE', self.__getVarFromXML(xmlroot, "CONSOLE", ['ipython']))
         if CONSOLE:
             self.createConsole(CONSOLE)
-       
-        #get custom panel descriptions from the python config file      
-        CUSTOM_PANELS = [obj for name,obj in inspect.getmembers(conf) if isinstance(obj, PanelDescription)]
-        
+
+        #get custom panel descriptions from the python config file
+        CUSTOM_PANELS = [obj for name, obj in inspect.getmembers(conf) if isinstance(obj, PanelDescription)]
+
         #add custom panel descriptions from xml config
         panelDescriptions = xmlroot.find("PanelDescriptions")
         if (panelDescriptions is not None):
@@ -843,33 +918,33 @@ class TaurusGui(TaurusMainWindow):
                     pd = PanelDescription.fromXml(etree.tostring(child))
                     if pd is not None:
                         CUSTOM_PANELS.append(pd)
-        
+
         #create panels based on the panel descriptions gathered before
         for p in CUSTOM_PANELS + POOLINSTRUMENTS:
             try:
-                try: self.splashScreen().showMessage("Creating panel %s"%p.name)
-                except AttributeError: pass 
+                try: self.splashScreen().showMessage("Creating panel %s" % p.name)
+                except AttributeError: pass
                 w = p.getWidget(sdm=Qt.qApp.SDM, setModel=False)
-                if hasattr(w,'setCustomWidgetMap'):
+                if hasattr(w, 'setCustomWidgetMap'):
                     w.setCustomWidgetMap(self.getCustomWidgetMap())
                 if p.model is not None:
                     w.setModel(p.model)
                 if p.instrumentkey is None:
-                    instrumentkey = self.IMPLICIT_ASSOCIATION 
-                registerconfig = p not in POOLINSTRUMENTS #the pool instruments may change when the pool config changes, so we do not store their config
+                    instrumentkey = self.IMPLICIT_ASSOCIATION
+                registerconfig = p not in POOLINSTRUMENTS  #the pool instruments may change when the pool config changes, so we do not store their config
                 #create a panel
                 self.createPanel(w, p.name, floating=p.floating, registerconfig=registerconfig, instrumentkey=instrumentkey, permanent=True)
-            except Exception,e:
-                msg='Cannot create panel %s'%getattr(p,'name','__Unknown__')
+            except Exception, e:
+                msg = 'Cannot create panel %s' % getattr(p, 'name', '__Unknown__')
                 self.error(msg)
                 self.traceback(level=taurus.Info)
-                result = Qt.QMessageBox.critical(self,'Initialization error', '%s\n\n%s'%(msg,repr(e)), Qt.QMessageBox.Abort|Qt.QMessageBox.Ignore)
+                result = Qt.QMessageBox.critical(self, 'Initialization error', '%s\n\n%s' % (msg, repr(e)), Qt.QMessageBox.Abort | Qt.QMessageBox.Ignore)
                 if result == Qt.QMessageBox.Abort:
                     sys.exit()
-        
-        #get custom toolbars descriptions from the python config file      
-        CUSTOM_TOOLBARS = [obj for name,obj in inspect.getmembers(conf) if isinstance(obj, ToolBarDescription)]
-        
+
+        #get custom toolbars descriptions from the python config file
+        CUSTOM_TOOLBARS = [obj for name, obj in inspect.getmembers(conf) if isinstance(obj, ToolBarDescription)]
+
         #add custom toolbar descriptions from xml config
         toolBarDescriptions = xmlroot.find("ToolBarDescriptions")
         if (toolBarDescriptions is not None):
@@ -878,12 +953,12 @@ class TaurusGui(TaurusMainWindow):
                     d = ToolBarDescription.fromXml(etree.tostring(child))
                     if d is not None:
                         CUSTOM_TOOLBARS.append(d)
-        
+
         #create toolbars based on the descriptions gathered before
         for d in CUSTOM_TOOLBARS:
             try:
-                try: self.splashScreen().showMessage("Creating Toolbar %s"%d.name)
-                except AttributeError: pass 
+                try: self.splashScreen().showMessage("Creating Toolbar %s" % d.name)
+                except AttributeError: pass
                 w = d.getWidget(sdm=Qt.qApp.SDM, setModel=False)
                 if d.model is not None:
                     w.setModel(d.model)
@@ -893,26 +968,26 @@ class TaurusGui(TaurusMainWindow):
                 #add the toggleview action to the view menu
                 self.viewToolBarsMenu.addAction(w.toggleViewAction())
                 #register the toolbar as delegate if it supports it
-                if isinstance(w,BaseConfigurableClass):
+                if isinstance(w, BaseConfigurableClass):
                     self.registerConfigDelegate(w, d.name)
-                
-            except Exception,e:
-                msg='Cannot add toolbar %s'%getattr(d,'name','__Unknown__')
+
+            except Exception, e:
+                msg = 'Cannot add toolbar %s' % getattr(d, 'name', '__Unknown__')
                 self.error(msg)
                 self.traceback(level=taurus.Info)
-                result = Qt.QMessageBox.critical(self,'Initialization error', '%s\n\n%s'%(msg,repr(e)), Qt.QMessageBox.Abort|Qt.QMessageBox.Ignore)
+                result = Qt.QMessageBox.critical(self, 'Initialization error', '%s\n\n%s' % (msg, repr(e)), Qt.QMessageBox.Abort | Qt.QMessageBox.Ignore)
                 if result == Qt.QMessageBox.Abort:
                     sys.exit()
 
         CUSTOM_APPLETS = []
         #for backwards compatibility
-        MONITOR = getattr(conf, 'MONITOR', self.__getVarFromXML(xmlroot,"MONITOR", []))
+        MONITOR = getattr(conf, 'MONITOR', self.__getVarFromXML(xmlroot, "MONITOR", []))
         if MONITOR:
-            CUSTOM_APPLETS.append(AppletDescription('monitor', classname='TaurusMonitorTiny', model=MONITOR) )
-        
-        #get custom applet descriptions from the python config file      
-        CUSTOM_APPLETS += [obj for name,obj in inspect.getmembers(conf) if isinstance(obj, AppletDescription)]
-        
+            CUSTOM_APPLETS.append(AppletDescription('monitor', classname='TaurusMonitorTiny', model=MONITOR))
+
+        #get custom applet descriptions from the python config file
+        CUSTOM_APPLETS += [obj for name, obj in inspect.getmembers(conf) if isinstance(obj, AppletDescription)]
+
         #add applet descriptions from xml config
         appletDescriptions = xmlroot.find("AppletDescriptions")
         if (appletDescriptions is not None):
@@ -921,31 +996,31 @@ class TaurusGui(TaurusMainWindow):
                     d = AppletDescription.fromXml(etree.tostring(child))
                     if d is not None:
                         CUSTOM_APPLETS.append(d)
-        
+
         #create applet based on the descriptions gathered before
         for d in CUSTOM_APPLETS:
             try:
-                try: self.splashScreen().showMessage("Creating applet %s"%d.name)
-                except AttributeError: pass 
+                try: self.splashScreen().showMessage("Creating applet %s" % d.name)
+                except AttributeError: pass
                 w = d.getWidget(sdm=Qt.qApp.SDM, setModel=False)
                 if d.model is not None:
                     w.setModel(d.model)
                 #add the widget to the applets toolbar
                 self.jorgsBar.addWidget(w)
                 #register the toolbar as delegate if it supports it
-                if isinstance(w,BaseConfigurableClass):
-                    self.registerConfigDelegate(w, d.name)                
-            except Exception,e:
-                msg='Cannot add applet %s'%getattr(d,'name','__Unknown__')
+                if isinstance(w, BaseConfigurableClass):
+                    self.registerConfigDelegate(w, d.name)
+            except Exception, e:
+                msg = 'Cannot add applet %s' % getattr(d, 'name', '__Unknown__')
                 self.error(msg)
                 self.traceback(level=taurus.Info)
-                result = Qt.QMessageBox.critical(self,'Initialization error', '%s\n\n%s'%(msg,repr(e)), Qt.QMessageBox.Abort|Qt.QMessageBox.Ignore)
+                result = Qt.QMessageBox.critical(self, 'Initialization error', '%s\n\n%s' % (msg, repr(e)), Qt.QMessageBox.Abort | Qt.QMessageBox.Ignore)
                 if result == Qt.QMessageBox.Abort:
                     sys.exit()
 
         #add external applications from both the python and the xml config files
-        EXTERNAL_APPS = [obj for name,obj in inspect.getmembers(conf) if isinstance(obj, ExternalApp)]
-                
+        EXTERNAL_APPS = [obj for name, obj in inspect.getmembers(conf) if isinstance(obj, ExternalApp)]
+
         externalAppsNode = xmlroot.find("ExternalApps")
         if (externalAppsNode is not None):
             for child in externalAppsNode:
@@ -953,29 +1028,29 @@ class TaurusGui(TaurusMainWindow):
                     ea = ExternalApp.fromXml(etree.tostring(child))
                     if ea is not None:
                         EXTERNAL_APPS.append(ea)
-        
+
         for a in EXTERNAL_APPS:
             self.addExternalAppLauncher(a.getAction())
-        
-        
-        
+
+
+
         #get the "factory settings" filename. By default, it is called "default.ini" and resides in the configuration dir
-        INIFILE = getattr(conf, 'INIFILE', self.__getVarFromXML(xmlroot,"INIFILE", "default.ini")) 
-        iniFileName = os.path.join(self._confDirectory, INIFILE) #if a relative name is given, the conf dir is used as the root path
-        
+        INIFILE = getattr(conf, 'INIFILE', self.__getVarFromXML(xmlroot, "INIFILE", "default.ini"))
+        iniFileName = os.path.join(self._confDirectory, INIFILE)  #if a relative name is given, the conf dir is used as the root path
+
         #read the settings (or the factory settings if the regular file is not found)
         msg = "Loading previous state"
-        if self.defaultConfigRecursionDepth >=0:
+        if self.defaultConfigRecursionDepth >= 0:
             msg += " in Fail Proof mode"
         try: self.splashScreen().showMessage(msg)
         except AttributeError: pass
         self.loadSettings(factorySettingsFileName=iniFileName)
-            
+
     def setLockView(self, locked):
         self.setModifiableByUser(not locked)
-                
+
     def setModifiableByUser(self, modifiable):
-        if modifiable: 
+        if modifiable:
             dwfeat = Qt.QDockWidget.AllDockWidgetFeatures
         else:
             dwfeat = Qt.QDockWidget.NoDockWidgetFeatures
@@ -984,9 +1059,9 @@ class TaurusGui(TaurusMainWindow):
             panel.setFeatures(dwfeat)
         for action in (self.newPanelAction, self.showAllPanelsAction, self.hideAllPanelsAction):
             action.setEnabled(modifiable)
-        
+
         self._lockviewAction.setChecked(not modifiable)
-        TaurusMainWindow.setModifiableByUser(self, modifiable)                      
+        TaurusMainWindow.setModifiableByUser(self, modifiable)
 
     def onShortMessage(self, msg):
         ''' Slot to be called when there is a new short message. Currently, the only action 
@@ -995,24 +1070,24 @@ class TaurusGui(TaurusMainWindow):
         :param msg: (str) the short descriptive message to be handled 
         '''
         self.statusBar().showMessage(msg)
-    
+
     def hideAllPanels(self):
         '''hides all current panels'''
         for panel in self.__panels.itervalues():
             panel.hide()
-            
+
     def showAllPanels(self):
         '''shows all current panels'''
         for panel in self.__panels.itervalues():
             panel.show()
-    
+
     def onShowAssociationDialog(self):
         '''launches the instrument-panel association dialog (modal)'''
         dlg = AssociationDialog(self)
         Qt.qApp.SDM.connectWriter("SelectedInstrument", dlg.ui.instrumentCB, "activated(QString)")
         dlg.exec_()
         Qt.qApp.SDM.disconnectWriter("SelectedInstrument", dlg.ui.instrumentCB, "activated(QString)")
-            
+
     def getInstrumentAssociation(self, instrumentname):
         '''
         Returns the panel name associated to an instrument name 
@@ -1022,7 +1097,7 @@ class TaurusGui(TaurusMainWindow):
         :return: (str or None) the associated panel name (or None).
         '''
         return self.__instrumentToPanelMap.get(instrumentname, None)
-    
+
     def setInstrumentAssociation(self, instrumentname, panelname):
         '''
         Sets the panel name associated to an instrument 
@@ -1034,14 +1109,14 @@ class TaurusGui(TaurusMainWindow):
         '''
         instrumentname = unicode(instrumentname)
         #remove a previous association if it exists
-        oldpanelname = self.__instrumentToPanelMap.get(instrumentname,None)
+        oldpanelname = self.__instrumentToPanelMap.get(instrumentname, None)
         self.__panelToInstrumentMap.pop(oldpanelname, None)
-                
+
         #create the new association
         self.__instrumentToPanelMap[instrumentname] = panelname
         if panelname is not None:
             self.__panelToInstrumentMap[panelname] = instrumentname
-    
+
     def getAllInstrumentAssociations(self):
         '''
         Returns the dictionary of instrument-panel associations
@@ -1049,8 +1124,8 @@ class TaurusGui(TaurusMainWindow):
         :return: (dict<str,str>) a dict whose keys are the instruments known to the gui 
                  and whose values are the corresponding associated panels (or None).
         '''
-        return copy.deepcopy(self.__instrumentToPanelMap) 
-    
+        return copy.deepcopy(self.__instrumentToPanelMap)
+
     def setAllInstrumentAssociations(self, associationsdict, clearExisting=False):
         '''
         Sets the dictionary of instrument-panel associations. 
@@ -1063,20 +1138,20 @@ class TaurusGui(TaurusMainWindow):
                               updated with those in associationsdict
         '''
         if clearExisting:
-            self.__instrumentToPanelMap=copy.deepcopy(associationsdict)
+            self.__instrumentToPanelMap = copy.deepcopy(associationsdict)
         else:
             self.__instrumentToPanelMap.update(copy.deepcopy(associationsdict))
         self.__panelToInstrumentMap = {}
-        for k,v in self.__instrumentToPanelMap.iteritems():
-            self.__panelToInstrumentMap[v]=k
-    
-    def _onPanelVisibilityChanged(self,visible):
+        for k, v in self.__instrumentToPanelMap.iteritems():
+            self.__panelToInstrumentMap[v] = k
+
+    def _onPanelVisibilityChanged(self, visible):
         if visible:
             panelname = unicode(self.sender().objectName())
             instrumentname = self.__panelToInstrumentMap.get(panelname)
             if instrumentname is not None:
                 self.emit(Qt.SIGNAL('SelectedInstrument'), instrumentname)
-          
+
     def onSelectedInstrument(self, instrumentname):
         ''' Slot to be called when the selected instrument has changed (e.g. by user
         clicking in the synoptic)
@@ -1086,14 +1161,14 @@ class TaurusGui(TaurusMainWindow):
         instrumentname = unicode(instrumentname)
         panelname = self.getInstrumentAssociation(instrumentname)
         self.setFocusToPanel(panelname)
-         
+
     def setFocusToPanel(self, panelname):
         ''' Method that sets a focus for panel passed via an argument
         
         :param panelname: (str) The name that identifies the panel.
                                This name must be unique within the panels in the GUI.
         '''
-        panelname=unicode(panelname)
+        panelname = unicode(panelname)
         try:
             panel = self.__panels[panelname]
             panel.show()
@@ -1101,7 +1176,7 @@ class TaurusGui(TaurusMainWindow):
             panel.raise_()
         except KeyError:
             pass
-     
+
     def tabifyArea(self, area):
         ''' tabifies all panels in a given area.
         
@@ -1111,11 +1186,11 @@ class TaurusGui(TaurusMainWindow):
         '''
         raise DeprecationWarning('tabifyArea is no longer supported (now all panels reside in the same DockWidget Area)')
         panels = self.findPanelsInArea(area)
-        if len(panels)<2: return
+        if len(panels) < 2: return
         p0 = panels[0]
         for p in panels[1:]:
             self.tabifyDockWidget(p0, p)
-            
+
     def findPanelsInArea(self, area):
         ''' returns all panels in the given area
         
@@ -1130,48 +1205,48 @@ class TaurusGui(TaurusMainWindow):
         if area == 'FLOATING':
             return [p for p in self.__panels.values() if p.isFloating()]
         else:
-            return [p for p in self.__panels.values() if self.dockWidgetArea(p)==area]
-        
+            return [p for p in self.__panels.values() if self.dockWidgetArea(p) == area]
+
     @classmethod
     def getQtDesignerPluginInfo(cls):
         '''TaurusGui is not to be in designer '''
         return None
-    
+
     def onShowManual(self, anchor=None):
         '''reimplemented from :class:`TaurusMainWindow` to show the manual in a panel (not just a dockwidget)'''
         self.setFocusToPanel('Manual')
 
     def onExportCurrentPanelConfiguration(self, fname=None):
-        
+
         if fname is None:
             fname = self._xmlConfigFileName
-                
+
         if self._xmlConfigFileName is None:
             xmlroot = etree.Element("taurusgui_config")
         else:
             try:
-                f = open(self._xmlConfigFileName,'r')
+                f = open(self._xmlConfigFileName, 'r')
                 xmlroot = etree.fromstring(f.read())
                 f.close()
-            except Exception,e:
-                self.error('Cannot parse file "%s": %s',self._xmlConfigFileName, str(e))
+            except Exception, e:
+                self.error('Cannot parse file "%s": %s', self._xmlConfigFileName, str(e))
                 return
-        
+
         #retrieve/create the PanelDescriptions node
         panelDescriptionsNode = xmlroot.find("PanelDescriptions")
         if panelDescriptionsNode is None:
             panelDescriptionsNode = etree.SubElement(xmlroot, "PanelDescriptions")
-        
+
         #Get all custom panels
-        dlg = QDoubleListDlg(winTitle='Export Panels to XML', 
+        dlg = QDoubleListDlg(winTitle='Export Panels to XML',
                              mainLabel='Select which of the custom panels you want to export as xml configuration',
-                             label1='Not Exported', label2='Exported', 
-                             list1=[n for n,p in self.__panels.iteritems() if p.isCustom()], list2=[] )
+                             label1='Not Exported', label2='Exported',
+                             list1=[n for n, p in self.__panels.iteritems() if p.isCustom()], list2=[])
         result = dlg.exec_()
         if result != Qt.QDialog.Accepted:
             return
         exportlist = dlg.getAll2()
-        
+
         #create xml for those to be exported
         registered = self.getConfigurableItemNames()
         for name in exportlist:
@@ -1182,65 +1257,65 @@ class TaurusGui(TaurusMainWindow):
             panelxml = PanelDescription.fromPanel(panel).toXml()
             panelDescriptionsNode.append(etree.fromstring(panelxml))
         xml = etree.tostring(xmlroot, pretty_print=True)
-        
+
         #write to file
-        while True: 
+        while True:
             if fname is None:
-                fname = Qt.QFileDialog.getOpenFileName(self, "Open File", fname or self._confDirectory, self.tr("XML files (*.xml)"))
+                fname = Qt.QFileDialog.getSaveFileName(self, "Open File", fname or self._confDirectory, self.tr("XML files (*.xml)"))
                 if not fname:
                     return
             fname = str(fname)
-            #backup the file   
+            #backup the file
             if os.path.exists(fname):
                 import shutil
                 try:
-                    bckname = "%s.orig"%fname
-                    shutil.copy(fname,bckname)
+                    bckname = "%s.orig" % fname
+                    shutil.copy(fname, bckname)
                 except:
-                    self.warning("%s will be overwritten but I could not create a backup in %s", fname,bckname)
+                    self.warning("%s will be overwritten but I could not create a backup in %s", fname, bckname)
             #write the data
-            try:     
-                f = open(fname,'w')
+            try:
+                f = open(fname, 'w')
                 f.write(xml)
                 f.close()
                 break
-            except Exception,e:
-                msg = 'Cannot write to %s: %s'%(fname,str(e))
+            except Exception, e:
+                msg = 'Cannot write to %s: %s' % (fname, str(e))
                 self.error(msg)
-                Qt.QMessageBox.warning(self, "I/O problem", msg+'\nChoose a different location.', Qt.QMessageBox.Ok, Qt.QMessageBox.NoButton)
+                Qt.QMessageBox.warning(self, "I/O problem", msg + '\nChoose a different location.', Qt.QMessageBox.Ok, Qt.QMessageBox.NoButton)
                 fname = None
-        
-        
-        hint = "XML_CONFIG = %s"%os.path.relpath(fname, self._confDirectory)
-        msg = 'Configuration written in %s'%fname 
+
+
+        hint = "XML_CONFIG = %s" % os.path.relpath(fname, self._confDirectory)
+        msg = 'Configuration written in %s' % fname
         self.info(msg)
-        Qt.QMessageBox.information(self, "Configuration updated", 
-                                   msg+'\nMake sure that the .py configuration file in %s contains\n%s'%(self._confDirectory, hint), 
+        Qt.QMessageBox.information(self, "Configuration updated",
+                                   msg + '\nMake sure that the .py configuration file in %s contains\n%s' % (self._confDirectory, hint),
                                    Qt.QMessageBox.Ok, Qt.QMessageBox.NoButton)
-        
+
         return
-    
+
     def showSDMInfo(self):
         '''pops up a dialog showing the current information from the Shared Data Manager'''
         #w = Qt.QMessageBox( self)
-        text = 'Currently managing %i shared data objects:\n%s'%(len(Qt.qApp.SDM.activeDataUIDs()),', '.join(Qt.qApp.SDM.activeDataUIDs()) )
+        text = 'Currently managing %i shared data objects:\n%s' % (len(Qt.qApp.SDM.activeDataUIDs()), ', '.join(Qt.qApp.SDM.activeDataUIDs()))
         nfo = Qt.qApp.SDM.info()
-        w = Qt.QMessageBox ( Qt.QMessageBox.Information, 'Shared Data Manager Information', text, 
-                             buttons = Qt.QMessageBox.Close, parent = self )
+        w = Qt.QMessageBox (Qt.QMessageBox.Information, 'Shared Data Manager Information', text,
+                             buttons=Qt.QMessageBox.Close, parent=self)
         w.setDetailedText(nfo)
         w.show()
         self.info(nfo)
-        
-        
-#------------------------------------------------------------------------------ 
+
+
+#------------------------------------------------------------------------------
 def main():
     import sys
     import taurus
     from taurus.core.util import argparse
     from taurus.qt.qtgui.application import TaurusApplication
-    
+
     taurus.info('Starting execution of TaurusGui')
-        
+
     parser = argparse.get_taurus_parser()
     parser.set_usage("%prog [options] confname")
     parser.set_description("The taurus GUI application")
@@ -1256,36 +1331,36 @@ def main():
     args = app.get_command_line_args()
     options = app.get_command_line_options()
 
-    if options.new_gui: #launch app settings wizard instead of taurusgui
+    if options.new_gui:  #launch app settings wizard instead of taurusgui
         from taurus.qt.qtgui.taurusgui import AppSettingsWizard
         wizard = AppSettingsWizard()
         wizard.show()
         sys.exit(app.exec_())
-        
+
     confname = options.config_dir
     if confname is None:
-        if len(args) == 1: #for backwards compat, we allow to specify the confname without the "--config-dir" parameter
+        if len(args) == 1:  #for backwards compat, we allow to specify the confname without the "--config-dir" parameter
             confname = args[0]
         else:
             parser.print_help(sys.stderr)
             sys.exit(1)
-    
+
     if options.fail_proof:
         configRecursionDepth = 0
     else:
         configRecursionDepth = None
-        
+
     gui = TaurusGui(None, confname=confname, configRecursionDepth=configRecursionDepth)
-    
+
     gui.show()
     ret = app.exec_()
-    
+
     taurus.info('Finished execution of TaurusGui')
     sys.exit(ret)
-   
-       
+
+
 if __name__ == "__main__":
     main()
     #xmlTest()
-    
+
 
diff --git a/lib/taurus/qt/qtgui/taurusgui/ui/PanelAssociationsDlg.ui b/lib/taurus/qt/qtgui/taurusgui/ui/AssociationDialog.ui
similarity index 100%
rename from lib/taurus/qt/qtgui/taurusgui/ui/PanelAssociationsDlg.ui
rename to lib/taurus/qt/qtgui/taurusgui/ui/AssociationDialog.ui
diff --git a/lib/taurus/qt/qtgui/taurusgui/ui/ui_PanelAssociationsDlg.py b/lib/taurus/qt/qtgui/taurusgui/ui/ui_PanelAssociationsDlg.py
deleted file mode 100644
index cc2ed60..0000000
--- a/lib/taurus/qt/qtgui/taurusgui/ui/ui_PanelAssociationsDlg.py
+++ /dev/null
@@ -1,90 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file '/tmp/tmpfQKVhW.ui'
-#
-# Created: Fri Nov  4 17:03:41 2011
-#      by: PyQt4 UI code generator 4.4.3
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_PanelAssociationsDlg(object):
-    def setupUi(self, PanelAssociationsDlg):
-        PanelAssociationsDlg.setObjectName("PanelAssociationsDlg")
-        PanelAssociationsDlg.resize(402, 122)
-        self.verticalLayout = QtGui.QVBoxLayout(PanelAssociationsDlg)
-        self.verticalLayout.setObjectName("verticalLayout")
-        self.gridLayout = QtGui.QGridLayout()
-        self.gridLayout.setObjectName("gridLayout")
-        spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.gridLayout.addItem(spacerItem, 0, 0, 1, 1)
-        self.label = QtGui.QLabel(PanelAssociationsDlg)
-        self.label.setAlignment(QtCore.Qt.AlignCenter)
-        self.label.setObjectName("label")
-        self.gridLayout.addWidget(self.label, 1, 0, 1, 1)
-        self.label_2 = QtGui.QLabel(PanelAssociationsDlg)
-        self.label_2.setAlignment(QtCore.Qt.AlignCenter)
-        self.label_2.setObjectName("label_2")
-        self.gridLayout.addWidget(self.label_2, 1, 2, 1, 1)
-        self.instrumentCB = QtGui.QComboBox(PanelAssociationsDlg)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.instrumentCB.sizePolicy().hasHeightForWidth())
-        self.instrumentCB.setSizePolicy(sizePolicy)
-        self.instrumentCB.setEditable(False)
-        self.instrumentCB.setObjectName("instrumentCB")
-        self.gridLayout.addWidget(self.instrumentCB, 2, 0, 1, 1)
-        self.label_3 = QtGui.QLabel(PanelAssociationsDlg)
-        self.label_3.setAlignment(QtCore.Qt.AlignCenter)
-        self.label_3.setObjectName("label_3")
-        self.gridLayout.addWidget(self.label_3, 2, 1, 1, 1)
-        self.panelCB = QtGui.QComboBox(PanelAssociationsDlg)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Fixed)
-        sizePolicy.setHorizontalStretch(0)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.panelCB.sizePolicy().hasHeightForWidth())
-        self.panelCB.setSizePolicy(sizePolicy)
-        self.panelCB.setEditable(False)
-        self.panelCB.setObjectName("panelCB")
-        self.gridLayout.addWidget(self.panelCB, 2, 2, 1, 1)
-        spacerItem1 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
-        self.gridLayout.addItem(spacerItem1, 3, 0, 1, 1)
-        self.verticalLayout.addLayout(self.gridLayout)
-        self.horizontalLayout = QtGui.QHBoxLayout()
-        self.horizontalLayout.setObjectName("horizontalLayout")
-        self.refreshBT = QtGui.QPushButton(PanelAssociationsDlg)
-        self.refreshBT.setObjectName("refreshBT")
-        self.horizontalLayout.addWidget(self.refreshBT)
-        spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
-        self.horizontalLayout.addItem(spacerItem2)
-        self.buttonBox = QtGui.QDialogButtonBox(PanelAssociationsDlg)
-        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
-        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Apply|QtGui.QDialogButtonBox.Close|QtGui.QDialogButtonBox.Ok)
-        self.buttonBox.setObjectName("buttonBox")
-        self.horizontalLayout.addWidget(self.buttonBox)
-        self.verticalLayout.addLayout(self.horizontalLayout)
-
-        self.retranslateUi(PanelAssociationsDlg)
-        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), PanelAssociationsDlg.accept)
-        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("rejected()"), PanelAssociationsDlg.reject)
-        QtCore.QMetaObject.connectSlotsByName(PanelAssociationsDlg)
-
-    def retranslateUi(self, PanelAssociationsDlg):
-        PanelAssociationsDlg.setWindowTitle(QtGui.QApplication.translate("PanelAssociationsDlg", "Panel-Instrument associations", None, QtGui.QApplication.UnicodeUTF8))
-        self.label.setText(QtGui.QApplication.translate("PanelAssociationsDlg", "Instrument", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_2.setText(QtGui.QApplication.translate("PanelAssociationsDlg", "Panel", None, QtGui.QApplication.UnicodeUTF8))
-        self.label_3.setText(QtGui.QApplication.translate("PanelAssociationsDlg", "<->", None, QtGui.QApplication.UnicodeUTF8))
-        self.refreshBT.setText(QtGui.QApplication.translate("PanelAssociationsDlg", "Refresh", None, QtGui.QApplication.UnicodeUTF8))
-
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    PanelAssociationsDlg = QtGui.QDialog()
-    ui = Ui_PanelAssociationsDlg()
-    ui.setupUi(PanelAssociationsDlg)
-    PanelAssociationsDlg.show()
-    sys.exit(app.exec_())
-
diff --git a/lib/taurus/qt/qtgui/taurusgui/utils.py b/lib/taurus/qt/qtgui/taurusgui/utils.py
index ca48c56..fcb2c0b 100644
--- a/lib/taurus/qt/qtgui/taurusgui/utils.py
+++ b/lib/taurus/qt/qtgui/taurusgui/utils.py
@@ -252,7 +252,7 @@ class TaurusGuiComponentDescription(object):
         model = etree.SubElement(root, "model")
         model.text = self._model
         
-        return  etree.tostring(root)
+        return  etree.tostring(root, pretty_print=True)
     
     @staticmethod
     def fromXml(xmlstring):
@@ -367,18 +367,21 @@ class PanelDescription(TaurusGuiComponentDescription):
         floating = panel.isFloating()
         sharedDataWrite = None
         sharedDataRead = None
-        model = getattr(panel.widget(),'model',None)
-        # check if model is not None and is a sequence but not a string,
-        # and convert it to a space-separated string
-        if model is not None and not hasattr(model,'__iter__'):
+        model = getattr(panel.widget(),'model',None)   
+        if model is None or isinstance(model, basestring):
+            pass
+        elif hasattr(model,'__iter__'):
+            # if model is a sequence, convert to space-separated string
             try:
                 model = " ".join(model)
             except Exception, e:
-                msg = 'Could not compose a string representation ' + \
-                      'of a model from a sequence: %s' % e
+                msg = ('Cannot convert %s to a space-separated string: %s' % 
+                       (model, e))
                 Logger().debug(msg)
                 model = None
-            
+        else:
+            # ignore other "model" attributes (they are not from Taurus)
+            model = None
         return PanelDescription(name, classname=classname, 
                                 modulename=modulename, widgetname=widgetname,
                                 floating=floating, 
diff --git a/scripts/macroexecutor b/lib/taurus/qt/qtgui/test/__init__.py
old mode 100755
new mode 100644
similarity index 92%
rename from scripts/macroexecutor
rename to lib/taurus/qt/qtgui/test/__init__.py
index b3acfd2..6c69e43
--- a/scripts/macroexecutor
+++ b/lib/taurus/qt/qtgui/test/__init__.py
@@ -3,25 +3,24 @@
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
 #############################################################################
 
-from taurus.qt.qtgui.extra_macroexecutor.macroexecutor import main
-main()
\ No newline at end of file
+from .base import BaseWidgetTestCase, GenericWidgetTestCase
diff --git a/lib/taurus/qt/qtgui/test/base.py b/lib/taurus/qt/qtgui/test/base.py
new file mode 100644
index 0000000..314da23
--- /dev/null
+++ b/lib/taurus/qt/qtgui/test/base.py
@@ -0,0 +1,158 @@
+#!/usr/bin/env python
+#############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+##
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+##
+## Taurus 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.
+##
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+
+"""Utilities for creating generic tests for Taurus widgets"""
+
+import taurus.core
+from taurus.external import unittest
+from taurus.qt.qtgui.application import TaurusApplication
+from taurus.test import skipUnlessGui
+
+
+ at skipUnlessGui()
+class BaseWidgetTestCase(object):
+
+    '''
+    A base class for tests that need a widget instance
+
+    To use it, simply inherit from BaseWidgetTestCase *and* unittest.TestCase
+    and provide the following class members:
+
+      - _klass (typeobject) the widget class to test (mandatory)
+      - initargs (list) a list of arguments for the klass init method
+                 (default=[])
+      - initkwargs (dict) a dict of keyword arguments for the klass init method
+                   (default={})
+    '''
+    _klass = None
+    initargs = []
+    initkwargs = {}
+
+    def setUp(self):
+        """
+        Preconditions:
+        
+          - A TaurusApplication must be initialized.
+          - The widget must be instantiated
+        
+        """
+        if self._klass is None:
+            self.skipTest('klass is None')
+            return
+
+        unittest.TestCase.setUp(self)
+        
+        app = TaurusApplication.instance()
+        if app is None:
+            app = TaurusApplication([])
+        self._app = app
+
+        self._widget = self._klass(*self.initargs, **self.initkwargs)
+
+
+class GenericWidgetTestCase(BaseWidgetTestCase):
+
+    '''a base class for testing common cases of arbitrary Taurus widget classes
+
+    To use it, simply inherit from GenericWidgetTestCase *and* unittest.TestCase
+    and provide the following class members:
+
+      - _klass (typeobject) the widget class to test (mandatory)
+      - initargs (list) a list of arguments for the klass init method
+                 (default=[])
+      - initkwargs (dict) a dict of keyword arguments for the klass init method
+                   (default={})
+      - modelnames (list) a list of model names which the widget should be able
+                   to handle (default=[])
+    '''
+    modelnames = []
+
+    def setUp(self):
+        """
+        Preconditions:
+        
+          - Those from :class:`BaseWidgetTestCase`
+          - A list of models corresponding to the modelnames list
+            should be created without using the widget being tested
+            (e.g. by using taurusManager.findObject()).
+            None should be used as a placeholder when a model cannot be created
+            for a given modelname.
+        """
+        #Make sure the basics are taken care of (QApplication, etc)
+        BaseWidgetTestCase.setUp(self)
+
+        #construct a list of models corresponding to the test model names
+        # provided by the widget
+        taurusManager = taurus.core.TaurusManager()
+        self._models = []
+        for n in self.modelnames:
+            if not n:
+                # an empty string or None are "valid" modelnames which should
+                # lead to a reset in the model
+                self._models.append(None)
+            else:
+                try:
+                    # note, an unsupported model name will result in a None,
+                    # which will be caught later on
+                    model = taurusManager.findObject(n)
+                except:
+                    model = None
+                self._models.append(model)
+
+    def test00_Instantiation(self):
+        '''Check that the widget instantiates correctly'''
+        self.assertIsInstance(self._widget, self._klass)
+
+    def test10_SetModelsSequentially(self):
+        '''Check that we can set several models sequentially'''
+
+        for name, model in zip(self.modelnames, self._models):
+            self._widget.setModel(name)
+            modelobj = self._widget.getModelObj()
+            if model is None and name:
+                # the modelname is not supported by the manager (we cannot test
+                # it apart from the fact that setModel does not raise an
+                # exception
+                continue
+            else:
+                self.assertIs(modelobj, model,
+                              'failed to set model "%s" for %s' %
+                             (name, self._klass.__name__))
+
+#    def test10_ModelProperty(self):
+#        pass
+
+
+if __name__ == "__main__":
+    from taurus.qt.qtgui.display import TaurusLabel
+
+    class TaurusLabelTest(GenericWidgetTestCase, unittest.TestCase):
+        _klass = TaurusLabel
+        modelnames = ['sys/tg_test/1/wave', '', 'eval://1', None]
+
+    suite = unittest.defaultTestLoader.loadTestsFromTestCase(TaurusLabelTest)
+    unittest.TextTestRunner(descriptions=True, verbosity=2).run(suite)
+    #unittest.main()
+    #TaurusLabelTest().run()
diff --git a/lib/taurus/qt/qtgui/tree/qtree.py b/lib/taurus/qt/qtgui/tree/qtree.py
index 14cf443..d50cddd 100644
--- a/lib/taurus/qt/qtgui/tree/qtree.py
+++ b/lib/taurus/qt/qtgui/tree/qtree.py
@@ -29,7 +29,7 @@ __all__ = ["QBaseTreeWidget"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.model import QBaseModelWidget, BaseToolBar
 from taurus.qt.qtgui.util import ActionFactory
 from taurus.qt.qtgui.resource import getIcon, getThemeIcon
@@ -212,6 +212,7 @@ class QBaseTreeWidget(QBaseModelWidget):
             klass = Qt.QTreeView
         tree = klass()
         tree.setSortingEnabled(True)
+        tree.sortByColumn(0, Qt.Qt.AscendingOrder)
         tree.setUniformRowHeights(True)
         tree.setAlternatingRowColors(True)
         tree.setSelectionBehavior(Qt.QAbstractItemView.SelectRows)
diff --git a/lib/taurus/qt/qtgui/tree/taurusdbtree.py b/lib/taurus/qt/qtgui/tree/taurusdbtree.py
index 0667b44..ff35f39 100644
--- a/lib/taurus/qt/qtgui/tree/taurusdbtree.py
+++ b/lib/taurus/qt/qtgui/tree/taurusdbtree.py
@@ -29,7 +29,7 @@ __all__ = ["TaurusDbTreeWidget"]
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.core.taurusbasetypes import TaurusElementType
 from taurus.core.taurusdatabase import TaurusDatabase
 from taurus.qt.qtcore.model import *
diff --git a/lib/taurus/qt/qtgui/tree/taurusdevicetree.py b/lib/taurus/qt/qtgui/tree/taurusdevicetree.py
old mode 100755
new mode 100644
index 308f95b..c00ef68
--- a/lib/taurus/qt/qtgui/tree/taurusdevicetree.py
+++ b/lib/taurus/qt/qtgui/tree/taurusdevicetree.py
@@ -36,7 +36,7 @@ import PyTango # to change!!
 try:import icons_dev_tree
 except:icons_dev_tree = None
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 import taurus.core
 from taurus.core.util.colors import DEVICE_STATE_PALETTE,ATTRIBUTE_QUALITY_PALETTE
@@ -323,10 +323,14 @@ class TaurusDevTree(TaurusTreeNodeContainer,Qt.QTreeWidget, TaurusBaseWidget):
         
         self.ContextMenu=[]
         self.ExpertMenu=[]
-        
+
         #The SingletonWorker Threads are used for expanding nodes and also for loading a new tree; both objects are the same thread, but read from different queues
-        self.Loader = SingletonWorker(parent=self,name='TreeLoader',cursor=True,start=True )
-        self.Expander = SingletonWorker(parent=self,name='NodeExpander',method=lambda node,expand:node.setExpanded(expand),cursor=True,start=True )
+        self.__loader = None
+        self.__expander = None
+
+        if not designMode:
+            self.Loader
+            self.Expander
         
         self.initConfig()
         
@@ -344,9 +348,28 @@ class TaurusDevTree(TaurusTreeNodeContainer,Qt.QTreeWidget, TaurusBaseWidget):
             TAURUS_MODEL_LIST_MIME_TYPE, TAURUS_DEV_MIME_TYPE, TAURUS_ATTR_MIME_TYPE, 
             TAURUS_MODEL_MIME_TYPE, TREE_ITEM_MIME_TYPE, 'text/plain'])
         
-        self.setTangoHost(os.environ['TANGO_HOST'])
+        self.setTangoHost()
         self.defineStyle()
-            
+
+    @property
+    def Loader(self):
+        loader = self.__loader
+        if loader is None:
+            loader = SingletonWorker(parent=self, name='TreeLoader',
+                                     cursor=True, start=True)
+            self.__loader = loader
+        return loader
+
+    @property
+    def Expander(self):
+        expander = self.__expander
+        if expander is None:
+            expander = SingletonWorker(parent=self, name='NodeExpander',
+                                       method=lambda node, expand : node.setExpanded(expand),
+                                       cursor=True, start=True)
+            self.__expander = expander
+        return expander
+
     def getConfig(self,name): 
         properties.get_property(self,name)
     
@@ -472,7 +495,7 @@ class TaurusDevTree(TaurusTreeNodeContainer,Qt.QTreeWidget, TaurusBaseWidget):
         if self.TRACE_ALL or self.getLogLevel() in ('DEBUG',40,):
             print 'TaurusDevTree.%s: %s'%(self.getLogLevel(),msg) #@TODO: use the taurus logger instead! ~~cpascual 20121121
         
-    def setTangoHost(self,tango_host):
+    def setTangoHost(self,tango_host=None):
         self.db = taurus.Database(tango_host)
         
     #model = Qt.pyqtProperty("QString", TaurusBaseWidget.getModel, 
@@ -1509,4 +1532,4 @@ def taurusDevTreeMain():
     sys.exit(app.exec_())
 
 if __name__ == "__main__":
-    taurusDevTreeMain()
\ No newline at end of file
+    taurusDevTreeMain()
diff --git a/lib/taurus/qt/qtgui/ui/ui_TaurusDevPanel.py b/lib/taurus/qt/qtgui/ui/ui_TaurusDevPanel.py
deleted file mode 100644
index d097522..0000000
--- a/lib/taurus/qt/qtgui/ui/ui_TaurusDevPanel.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Form implementation generated from reading ui file 'TaurusDevPanel.ui'
-#
-# Created: Fri Aug 20 17:59:11 2010
-#      by: PyQt4 UI code generator 4.7.2
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore, QtGui
-
-class Ui_TaurusDevPanel(object):
-    def setupUi(self, TaurusDevPanel):
-        TaurusDevPanel.setObjectName("TaurusDevPanel")
-        TaurusDevPanel.resize(484, 615)
-        self.centralwidget = QtGui.QWidget(TaurusDevPanel)
-        self.centralwidget.setObjectName("centralwidget")
-        self.hboxlayout = QtGui.QHBoxLayout(self.centralwidget)
-        self.hboxlayout.setObjectName("hboxlayout")
-        TaurusDevPanel.setCentralWidget(self.centralwidget)
-        self.statusbar = QtGui.QStatusBar(TaurusDevPanel)
-        self.statusbar.setObjectName("statusbar")
-        TaurusDevPanel.setStatusBar(self.statusbar)
-        self.attrDW = QtGui.QDockWidget(TaurusDevPanel)
-        self.attrDW.setAllowedAreas(QtCore.Qt.AllDockWidgetAreas)
-        self.attrDW.setObjectName("attrDW")
-        self.dockWidgetContents = QtGui.QWidget()
-        self.dockWidgetContents.setObjectName("dockWidgetContents")
-        self.vboxlayout = QtGui.QVBoxLayout(self.dockWidgetContents)
-        self.vboxlayout.setObjectName("vboxlayout")
-        self.taurusAttrForm = TaurusAttrForm(self.dockWidgetContents)
-        self.taurusAttrForm.setUseParentModel(True)
-        self.taurusAttrForm.setObjectName("taurusAttrForm")
-        self.vboxlayout.addWidget(self.taurusAttrForm)
-        self.attrDW.setWidget(self.dockWidgetContents)
-        TaurusDevPanel.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.attrDW)
-        self.commandsDW = QtGui.QDockWidget(TaurusDevPanel)
-        self.commandsDW.setAllowedAreas(QtCore.Qt.AllDockWidgetAreas)
-        self.commandsDW.setObjectName("commandsDW")
-        self.dockWidgetContents_2 = QtGui.QWidget()
-        self.dockWidgetContents_2.setObjectName("dockWidgetContents_2")
-        self.vboxlayout1 = QtGui.QVBoxLayout(self.dockWidgetContents_2)
-        self.vboxlayout1.setObjectName("vboxlayout1")
-        self.taurusCommandsForm = TaurusCommandsForm(self.dockWidgetContents_2)
-        self.taurusCommandsForm.setUseParentModel(True)
-        self.taurusCommandsForm.setObjectName("taurusCommandsForm")
-        self.vboxlayout1.addWidget(self.taurusCommandsForm)
-        self.commandsDW.setWidget(self.dockWidgetContents_2)
-        TaurusDevPanel.addDockWidget(QtCore.Qt.DockWidgetArea(2), self.commandsDW)
-        self.trendDW = QtGui.QDockWidget(TaurusDevPanel)
-        self.trendDW.setObjectName("trendDW")
-        self.dockWidgetContents_3 = QtGui.QWidget()
-        self.dockWidgetContents_3.setObjectName("dockWidgetContents_3")
-        self.vboxlayout2 = QtGui.QVBoxLayout(self.dockWidgetContents_3)
-        self.vboxlayout2.setObjectName("vboxlayout2")
-        self.taurusTrend = TaurusTrend(self.dockWidgetContents_3)
-        self.taurusTrend.setObjectName("taurusTrend")
-        self.vboxlayout2.addWidget(self.taurusTrend)
-        self.trendDW.setWidget(self.dockWidgetContents_3)
-        TaurusDevPanel.addDockWidget(QtCore.Qt.DockWidgetArea(8), self.trendDW)
-
-        self.retranslateUi(TaurusDevPanel)
-        QtCore.QMetaObject.connectSlotsByName(TaurusDevPanel)
-
-    def retranslateUi(self, TaurusDevPanel):
-        TaurusDevPanel.setWindowTitle(QtGui.QApplication.translate("TaurusDevPanel", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
-        self.attrDW.setWindowTitle(QtGui.QApplication.translate("TaurusDevPanel", "Attributes", None, QtGui.QApplication.UnicodeUTF8))
-        self.commandsDW.setWindowTitle(QtGui.QApplication.translate("TaurusDevPanel", "Commands", None, QtGui.QApplication.UnicodeUTF8))
-        self.trendDW.setWindowTitle(QtGui.QApplication.translate("TaurusDevPanel", "Trends", None, QtGui.QApplication.UnicodeUTF8))
-
-from taurus.qt.qtgui.plot import TaurusTrend
-from taurus.qt.qtgui.panel import TaurusCommandsForm, TaurusAttrForm
-
-if __name__ == "__main__":
-    import sys
-    app = QtGui.QApplication(sys.argv)
-    TaurusDevPanel = QtGui.QMainWindow()
-    ui = Ui_TaurusDevPanel()
-    ui.setupUi(TaurusDevPanel)
-    TaurusDevPanel.show()
-    sys.exit(app.exec_())
-
diff --git a/lib/taurus/qt/qtgui/util/__init__.py b/lib/taurus/qt/qtgui/util/__init__.py
index 805208e..cc1d7b2 100644
--- a/lib/taurus/qt/qtgui/util/__init__.py
+++ b/lib/taurus/qt/qtgui/util/__init__.py
@@ -33,4 +33,5 @@ from .taurusaction import *
 from .tauruscolor import *
 from .tauruswidgetfactory import *
 from .taurusscreenshot import *
-from .qdraganddropdebug import *
\ No newline at end of file
+from .qdraganddropdebug import *
+from .ui import *
diff --git a/lib/taurus/qt/qtgui/util/qdraganddropdebug.py b/lib/taurus/qt/qtgui/util/qdraganddropdebug.py
index 86c9e93..cbf1a12 100644
--- a/lib/taurus/qt/qtgui/util/qdraganddropdebug.py
+++ b/lib/taurus/qt/qtgui/util/qdraganddropdebug.py
@@ -26,7 +26,7 @@
 __all__ = ["DropDebugger"]
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 class DropDebugger(Qt.QLabel):
     '''A simple utility for debugging drag&drop. 
diff --git a/lib/taurus/qt/qtgui/util/taurusaction.py b/lib/taurus/qt/qtgui/util/taurusaction.py
index 461a349..c61359c 100644
--- a/lib/taurus/qt/qtgui/util/taurusaction.py
+++ b/lib/taurus/qt/qtgui/util/taurusaction.py
@@ -32,7 +32,7 @@ __docformat__ = 'restructuredtext'
 import os
 import xml.dom.minidom
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtcore.configuration import BaseConfigurableClass
 from taurus.qt.qtgui.resource import getThemeIcon
 
diff --git a/lib/taurus/qt/qtgui/util/taurusactionfactory.py b/lib/taurus/qt/qtgui/util/taurusactionfactory.py
index 88e35e1..686d98d 100644
--- a/lib/taurus/qt/qtgui/util/taurusactionfactory.py
+++ b/lib/taurus/qt/qtgui/util/taurusactionfactory.py
@@ -31,7 +31,7 @@ __docformat__ = 'restructuredtext'
 
 from taurus.core.util.log import Logger
 from taurus.core.util.singleton import Singleton
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtgui.resource import getThemeIcon
 
 import taurusaction
diff --git a/lib/taurus/qt/qtgui/util/tauruscolor.py b/lib/taurus/qt/qtgui/util/tauruscolor.py
index 13f8b6b..fd2a2eb 100644
--- a/lib/taurus/qt/qtgui/util/tauruscolor.py
+++ b/lib/taurus/qt/qtgui/util/tauruscolor.py
@@ -27,7 +27,7 @@
 
 __docformat__ = 'restructuredtext'
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 from taurus.core.util.colors import ColorPalette, \
     DEVICE_STATE_DATA, ATTRIBUTE_QUALITY_DATA
diff --git a/lib/taurus/qt/qtgui/util/taurusscreenshot.py b/lib/taurus/qt/qtgui/util/taurusscreenshot.py
index 7f1ba02..0d8e96e 100644
--- a/lib/taurus/qt/qtgui/util/taurusscreenshot.py
+++ b/lib/taurus/qt/qtgui/util/taurusscreenshot.py
@@ -33,7 +33,7 @@ import time
 import threading
 import os.path
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.core.util.log import Logger
 
 _LOGGER = None
@@ -87,8 +87,8 @@ class Grabber(Qt.QObject, Logger):
         try:
             pixmap = Qt.QPixmap.grabWidget(widget)
             if fileName.endswith('.svg'):
-                import taurus.qt.QtSvg
-                generator = taurus.qt.QtSvg.QSvgGenerator()
+                from taurus.external.qt import QtSvg
+                generator = QtSvg.QSvgGenerator()
                 generator.setFileName(fileName)
                 generator.setSize(pixmap.size());
                 if hasattr(generator, 'setViewBox'):
@@ -133,4 +133,4 @@ class Grabber(Qt.QObject, Logger):
 def grabWidget(widget, fileName, period=None):
     return Grabber.grabWidget(widget, fileName, period=period)
     
-grabWidget.__doc__ = Grabber.grabWidget.__doc__
\ No newline at end of file
+grabWidget.__doc__ = Grabber.grabWidget.__doc__
diff --git a/lib/taurus/qt/qtgui/util/tauruswidgetfactory.py b/lib/taurus/qt/qtgui/util/tauruswidgetfactory.py
index 2acb237..6ec4822 100644
--- a/lib/taurus/qt/qtgui/util/tauruswidgetfactory.py
+++ b/lib/taurus/qt/qtgui/util/tauruswidgetfactory.py
@@ -34,7 +34,7 @@ __docformat__ = 'restructuredtext'
 import imp
 import os.path
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 from taurus.core.util.log import Logger
 from taurus.core.util.singleton import Singleton
diff --git a/lib/taurus/qt/qtgui/util/tauruswidgettree.py b/lib/taurus/qt/qtgui/util/tauruswidgettree.py
index d963451..f451c35 100644
--- a/lib/taurus/qt/qtgui/util/tauruswidgettree.py
+++ b/lib/taurus/qt/qtgui/util/tauruswidgettree.py
@@ -33,7 +33,7 @@ __docformat__ = 'restructuredtext'
 
 import weakref
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 from taurus.core.util.enumeration import Enumeration
 
diff --git a/lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py b/lib/taurus/qt/qtgui/util/test/__init__.py
similarity index 98%
rename from lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py
rename to lib/taurus/qt/qtgui/util/test/__init__.py
index 810fb34..d36d30e 100644
--- a/lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py
+++ b/lib/taurus/qt/qtgui/util/test/__init__.py
@@ -3,21 +3,21 @@
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py b/lib/taurus/qt/qtgui/util/test/test_ui/__init__.py
similarity index 88%
rename from lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
rename to lib/taurus/qt/qtgui/util/test/test_ui/__init__.py
index 17d48a1..bd93378 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
+++ b/lib/taurus/qt/qtgui/util/test/test_ui/__init__.py
@@ -23,8 +23,7 @@
 ##
 #############################################################################
 
-"""
-__init__.py: 
-"""
+"""This package provides a set of taurus wiget utilities like color management, 
+configuration, actions."""
 
-from sequenceeditor import TaurusSequencer, TaurusSequencerWidget, main
\ No newline at end of file
+from .test_ui import *
diff --git a/lib/taurus/qt/qtgui/util/test/test_ui/test_ui.py b/lib/taurus/qt/qtgui/util/test/test_ui/test_ui.py
new file mode 100644
index 0000000..3c0ee31
--- /dev/null
+++ b/lib/taurus/qt/qtgui/util/test/test_ui/test_ui.py
@@ -0,0 +1,87 @@
+# -*- coding: utf-8 -*-
+
+#############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+##
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+##
+## Taurus 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.
+##
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+"""Unit tests for UILoadable decorator"""
+
+import os.path
+
+from taurus.external import unittest
+from taurus.external.qt import Qt
+from taurus.qt.qtgui.util.ui import UILoadable
+
+
+class UILoadableTestCase(unittest.TestCase):
+    """
+    Test cases for UILoadable decorator
+    """
+    
+    @UILoadable
+    class MyWidget1(Qt.QWidget):
+        
+        def __init__(self, parent=None):
+            Qt.QWidget.__init__(self, parent)
+            self.loadUi()
+            self.my_button.setText("This is MY1 button")
+
+    @UILoadable(with_ui="ui")
+    class MyWidget2(Qt.QWidget):
+
+        def __init__(self, parent=None):
+            Qt.QWidget.__init__(self, parent)
+            path = os.path.join(os.path.dirname(__file__), "ui", "mywidget2")
+            self.loadUi(filename="mywidget2_custom.ui", path=path)
+            self.ui.my_button.setText("This is MY2 button")
+        
+    def setUp(self):
+        app = Qt.QApplication.instance()
+        if app is None:
+            app = Qt.QApplication([])
+        self.__app = app
+        
+    def test_uiloadable_default(self):
+        """Test UILoadable with default arguments"""
+        widget = self.MyWidget1()
+        self.assertEquals(widget.my_button.text(), "This is MY1 button",
+                          "button text differs from expected")
+
+    def test_uiloadable_customized(self):
+        """Test UILoadable with customized filename and path"""
+        widget = self.MyWidget2()
+        self.assertTrue(hasattr(widget, "ui"),
+                        "widget doesn't have 'ui' member")
+        self.assertTrue(hasattr(widget.ui, "my_button"),
+                        "widget.ui doesn't have a 'my_button' member")
+        self.assertFalse(hasattr(widget, "my_button"),
+                         "widget has a my_button member")
+        self.assertEquals(widget.ui.my_button.text(), "This is MY2 button",
+                          "button text differs from expected")
+        
+
+def main():
+    unittest.main()
+
+
+if __name__ == "__main__":
+    main()
diff --git a/lib/taurus/qt/qtgui/util/test/test_ui/ui/MyWidget1.ui b/lib/taurus/qt/qtgui/util/test/test_ui/ui/MyWidget1.ui
new file mode 100644
index 0000000..7dcbbfa
--- /dev/null
+++ b/lib/taurus/qt/qtgui/util/test/test_ui/ui/MyWidget1.ui
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <widget class="QPushButton" name="my_button">
+   <property name="geometry">
+    <rect>
+     <x>120</x>
+     <y>80</y>
+     <width>91</width>
+     <height>27</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>PushButton</string>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/lib/taurus/qt/qtgui/util/test/test_ui/ui/mywidget2/mywidget2_custom.ui b/lib/taurus/qt/qtgui/util/test/test_ui/ui/mywidget2/mywidget2_custom.ui
new file mode 100644
index 0000000..7dcbbfa
--- /dev/null
+++ b/lib/taurus/qt/qtgui/util/test/test_ui/ui/mywidget2/mywidget2_custom.ui
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Form</class>
+ <widget class="QWidget" name="Form">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Form</string>
+  </property>
+  <widget class="QPushButton" name="my_button">
+   <property name="geometry">
+    <rect>
+     <x>120</x>
+     <y>80</y>
+     <width>91</width>
+     <height>27</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>PushButton</string>
+   </property>
+  </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/lib/taurus/qt/qtgui/util/ui.py b/lib/taurus/qt/qtgui/util/ui.py
new file mode 100644
index 0000000..89378b0
--- /dev/null
+++ b/lib/taurus/qt/qtgui/util/ui.py
@@ -0,0 +1,175 @@
+# -*- coding: utf-8 -*-
+
+#############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+##
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+##
+## Taurus 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.
+##
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+"""utilities to load ui files for widgets"""
+
+import os
+import sys
+import functools
+
+from taurus.external.qt import Qt
+from taurus.external.qt import uic
+
+
+class __UI(object):
+    pass
+
+
+def loadUi(obj, filename=None, path=None, with_ui=None):
+    """
+    Loads a QtDesigner .ui file into the given widget.
+    If no filename is given, it tries to load from a file name which is the
+    widget class name plus the extension ".ui" (example: if your
+    widget class is called MyWidget it tries to find a MyWidget.ui).
+    If path is not given it uses the directory where the python file which
+    defines the widget is located plus a *ui* directory (example: if your widget
+    is defined in a file /home/homer/workspace/taurusgui/my_widget.py then it uses
+    the path /home/homer/workspace/taurusgui/ui)
+
+    :param filename: the QtDesigner .ui file name [default: None, meaning
+                      calculate file name with the algorithm explained before]
+    :type filename: str
+    :param path: directory where the QtDesigner .ui file is located
+                 [default: None, meaning calculate path with algorithm explained
+                 before]
+    :type path: str
+    """
+    if path is None:
+        obj_file = sys.modules[obj.__module__].__file__
+        path = os.path.join(os.path.dirname(obj_file), 'ui')
+    if filename is None:
+        filename = obj.__class__.__name__ + os.path.extsep + 'ui'
+    full_name = os.path.join(path, filename)
+
+    if with_ui is not None:
+        ui_obj = __UI()
+        setattr(obj, with_ui, ui_obj)
+        previous_members = set(dir(obj))
+
+        uic.loadUi(full_name, baseinstance=obj)
+
+        post_members = set(dir(obj))
+        new_members = post_members.difference(previous_members)
+        for member_name in new_members:
+            member = getattr(obj, member_name)
+            setattr(ui_obj, member_name, member)
+            delattr(obj, member_name)
+    else:
+        uic.loadUi(full_name, baseinstance=obj)
+        
+def UILoadable(klass=None, with_ui=None):
+    """
+    A class decorator intended to be used in a Qt.QWidget to make its UI
+    loadable from a predefined QtDesigner UI file.
+    This decorator will add a :func:`loadUi` method to the decorated class and
+    optionaly a property with a name given by *with_ui* parameter.
+
+    The folowing example assumes the existence of the ui file 
+    :file:`<my_widget_dir>/ui/MyWidget.ui` which is a QWidget panel with *at
+    least* a QPushButton with objectName *my_button* ::
+
+        from taurus.external.qt import Qt
+        from taurus.qt.qtgui.util.ui import UILoadable
+        
+        @UILoadable
+        class MyWidget(Qt.QWidget):
+
+            def __init__(self, parent=None):
+                Qt.QWidget.__init__(self, parent)
+                self.loadUi()
+                self.my_button.setText("This is MY button")
+
+    Another example using a :file:`superUI.ui` file in the same directory as
+    the widget. The widget UI components can be accessed through the widget
+    member *_ui* ::
+
+        import os.path
+        
+        from taurus.external.qt import Qt
+        from taurus.qt.qtgui.util.ui import UILoadable
+        
+        @UILoadable(with_ui="_ui")
+        class MyWidget(Qt.QWidget):
+
+            def __init__(self, parent=None):
+                Qt.QWidget.__init__(self, parent)
+                self.loadUi(filename="superUI.ui", path=os.path.dirname(__file__))
+                self._ui.my_button.setText("This is MY button")
+
+    :param with_ui: assigns a member to the decorated class from which you
+                    can access all UI components [default: None, meaning no
+                    member is created]
+    :type with_ui: str
+
+    .. warning::
+        the current implementation (Jul14) doesn't prevent Qt from overloading
+        any members you might have defined previously by the widget object names
+        from the UI file. This happens even if *with_ui* parameter is given.
+        For example, if the UI contains a QPushButton with objectName
+        *my_button*::
+
+            @UILoadable(with_ui="_ui")
+            class MyWidget(Qt.QWidget):
+ 
+                def __init__(self, parent=None):
+                    Qt.QWidget.__init__(self, parent)
+                    self.my_button = "hello"
+                    self.loadUi()
+            widget = MyWidget()
+            print widget.my_button
+            <PyQt4.QtGui.QPushButton object at 0x159e2f8>
+
+        This little problem should be solved in the next taurus version.
+    """
+    if klass is None:
+        return functools.partial(UILoadable, with_ui=with_ui)
+
+    def _loadUi(self, filename=None, path=None):
+        return loadUi(self, filename=filename, path=path, with_ui=with_ui)
+    
+    klass.loadUi = _loadUi
+    return klass
+
+
+def main():
+    from taurus.qt.qtgui.application import TaurusApplication
+    
+    app = TaurusApplication([])
+    
+    @UILoadable(with_ui="ui")
+    class A(Qt.QWidget):
+
+        def __init__(self, parent=None):
+            Qt.QWidget.__init__(self, parent)
+            import taurus.qt.qtgui.panel.ui
+            path = os.path.dirname(taurus.qt.qtgui.panel.ui.__file__)
+            self.loadUi(filename='TaurusMessagePanel.ui', path=path)
+    
+    gui = A()
+    gui.show()
+    app.exec_()
+    
+if __name__ == "__main__":
+    main()
diff --git a/lib/taurus/qt/taurusqtoptions.py b/lib/taurus/qt/taurusqtoptions.py
deleted file mode 100644
index 8bbe04b..0000000
--- a/lib/taurus/qt/taurusqtoptions.py
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/env python
-
-#############################################################################
-##
-## This file is part of Taurus, a Tango User Interface Library
-##
-## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
-##
-## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-##
-## Taurus 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.
-##
-## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
-##
-#############################################################################
-
-"""The taurus.qt options submodule. It contains qt-specific part of taurus"""
-
-__all__ = ["QT_API", "QT_USE_API2", "QT_API_PYQT", "QT_API_PYSIDE"]
-
-__docformat__ = 'restructuredtext'
-
-import os
-import imp
-
-QT_API_PYQT = 'pyqt'
-QT_API_PYSIDE = 'pyside'
-QT_USE_API2 = True
-
-
-def get_logger():
-    import taurus.core.util.log
-    return taurus.core.util.log.Logger('TaurusQt')
-
-
-def prepare_pyqt():
-    if not QT_USE_API2:
-        return
-    # For PySide compatibility, use the new-style string API that
-    # automatically converts QStrings to Unicode Python strings. Also,
-    # automatically unpack QVariants to their underlying objects.
-    import sip
-    if sip.SIP_VERSION >= 0x040900:
-        try:
-            sip.setapi("QString", 2)
-        except ValueError, e:
-            get_logger().info("SIP: %s", e)
-        try:
-            sip.setapi('QVariant', 2)
-        except ValueError, e:
-            get_logger().info("SIP: %s", e)
-    else:
-        sip_ver = sip.SIP_VERSION_STR
-        get_logger().debug("Using old SIP %s (advised >= 4.9)", sip_ver)
-
-
-def prepare_pyside():
-    pass
-
-QT_APIs = {
-    QT_API_PYQT: ('PyQt4', prepare_pyqt),
-    QT_API_PYSIDE: ('PySide', prepare_pyside),
-}
-
-QT_PREFERED_APIs = QT_API_PYQT, QT_API_PYSIDE
-#QT_PREFERED_APIs = (QT_API_PYSIDE,)
-
-def init():
-    # Select Qt binding, using the QT_API environment variable if available.
-    ret_api = os.environ.get('QT_API')
-    if ret_api is None:
-        for api in QT_PREFERED_APIs:
-            try:
-                imp.find_module(QT_APIs[api][0])
-                ret_api = api
-                if ret_api is not None:
-                    break
-            except ImportError:
-                pass
-        if ret_api is None:
-            raise ImportError('No Qt API available (known APIs : %s)'
-                              % ", ".join(QT_PREFERED_APIs))
-
-    prepare = QT_APIs[ret_api][1]
-    prepare()
-    return ret_api
-
-QT_API = init()
-get_logger().info('Using "%s" as Qt python binding', QT_API)
diff --git a/lib/taurus/qt/uic/__init__.py b/lib/taurus/qt/uic/__init__.py
index e474b3d..a4eff0e 100644
--- a/lib/taurus/qt/uic/__init__.py
+++ b/lib/taurus/qt/uic/__init__.py
@@ -35,7 +35,7 @@ import optparse
 import lxml.etree
 
 import taurus.qt.qtgui.util
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 import tau2taurus_map
 
diff --git a/lib/taurus/tauruscustomsettings.py b/lib/taurus/tauruscustomsettings.py
index 9c3686b..1950ace 100644
--- a/lib/taurus/tauruscustomsettings.py
+++ b/lib/taurus/tauruscustomsettings.py
@@ -3,21 +3,21 @@
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
@@ -31,26 +31,84 @@ aspects of Taurus.
 """
 
 # A map for using custom widgets for certain devices in TaurusForms. It is a
-# dictionary with the following structure: 
+# dictionary with the following structure:
 # device_class_name:(classname_with_full_module_path, args, kwargs)
 # where the args and kwargs will be passed to the constructor of the class
 T_FORM_CUSTOM_WIDGET_MAP = \
-    {'SimuMotor':('taurus.qt.qtgui.extra_pool.PoolMotorTV',(),{}),
-     'Motor':('taurus.qt.qtgui.extra_pool.PoolMotorTV',(),{}),
-     'PseudoMotor':('taurus.qt.qtgui.extra_pool.PoolMotorTV',(),{}),
-     'PseudoCounter':('taurus.qt.qtgui.extra_pool.PoolChannelTV',(),{}),
-     'CTExpChannel':('taurus.qt.qtgui.extra_pool.PoolChannelTV',(),{}),
-     'ZeroDExpChannel':('taurus.qt.qtgui.extra_pool.PoolChannelTV',(),{}),
-     'OneDExpChannel':('taurus.qt.qtgui.extra_pool.PoolChannelTV',(),{}),
-     'TwoDExpChannel':('taurus.qt.qtgui.extra_pool.PoolChannelTV',(),{}),
-     'IORegister':('taurus.qt.qtgui.extra_pool.PoolIORegisterTV',(),{})
+    {'SimuMotor':('taurus.qt.qtgui.extra_pool.PoolMotorTV', (), {}),
+     'Motor':('taurus.qt.qtgui.extra_pool.PoolMotorTV', (), {}),
+     'PseudoMotor':('taurus.qt.qtgui.extra_pool.PoolMotorTV', (), {}),
+     'PseudoCounter':('taurus.qt.qtgui.extra_pool.PoolChannelTV', (), {}),
+     'CTExpChannel':('taurus.qt.qtgui.extra_pool.PoolChannelTV', (), {}),
+     'ZeroDExpChannel':('taurus.qt.qtgui.extra_pool.PoolChannelTV', (), {}),
+     'OneDExpChannel':('taurus.qt.qtgui.extra_pool.PoolChannelTV', (), {}),
+     'TwoDExpChannel':('taurus.qt.qtgui.extra_pool.PoolChannelTV', (), {}),
+     'IORegister':('taurus.qt.qtgui.extra_pool.PoolIORegisterTV', (), {})
     }
 
+# Compact mode for widgets
+# True sets the preferred mode of TaurusForms to use "compact" widgets
+T_FORM_COMPACT = False
+
 # Lightweight imports:
-# True enables delayed imports (may break older code). 
+# True enables delayed imports (may break older code).
 # False (or commented out) for backwards compatibility
-LIGHTWEIGHT_IMPORTS = False     
+LIGHTWEIGHT_IMPORTS = False
 
-# Extra Taurus schemes. You can add a list of modules to be loaded for 
+# Extra Taurus schemes. You can add a list of modules to be loaded for
 # providing support to new schemes
-# EXTRA_SCHEME_MODULES = ['myownschememodule']
\ No newline at end of file
+# EXTRA_SCHEME_MODULES = ['myownschememodule']
+
+# ----------------------------------------------------------------------------
+# PLY (lex/yacc) optimization: 1=Active (default) , 0=disabled. 
+# Set PLY_OPTIMIZE = 0 if you are getting yacc exceptions while loading 
+# synoptics   
+# ----------------------------------------------------------------------------
+
+PLY_OPTIMIZE = 1
+
+# ----------------------------------------------------------------------------
+# Taurus namespace
+# ----------------------------------------------------------------------------
+
+NAMESPACE = 'taurus'
+
+# ----------------------------------------------------------------------------
+# Qt configuration
+# ----------------------------------------------------------------------------
+
+#: Auto initialize Qt
+DEFAULT_QT_AUTO_INIT = True
+
+#: Set preffered API if not is already loaded
+DEFAULT_QT_AUTO_API = 'PyQt4'
+
+#: Whether or not should be strict in choosing Qt API
+DEFAULT_QT_AUTO_STRICT = False
+
+#: Auto initialize Qt logging to python logging
+DEFAULT_QT_AUTO_INIT_LOG = True
+
+#: Auto initialize taurus resources (icons)
+DEFAULT_QT_AUTO_INIT_RES = True
+
+#: Remove input hook (only valid for PyQt4)
+DEFAULT_QT_AUTO_REMOVE_INPUTHOOK = True
+
+#: Auto initialize Qt
+QT_AUTO_INIT = DEFAULT_QT_AUTO_INIT
+
+#: Set preffered API if not is already loaded
+QT_AUTO_API = DEFAULT_QT_AUTO_API
+
+#: Whether or not should be strict in choosing Qt API
+QT_AUTO_STRICT = DEFAULT_QT_AUTO_STRICT
+
+#: Auto initialize Qt logging to python logging
+QT_AUTO_INIT_LOG = DEFAULT_QT_AUTO_INIT_LOG
+
+#: Auto initialize taurus resources (icons)
+QT_AUTO_INIT_RES = DEFAULT_QT_AUTO_INIT_RES
+
+#: Remove input hook (only valid for PyQt4)
+QT_AUTO_REMOVE_INPUTHOOK = DEFAULT_QT_AUTO_REMOVE_INPUTHOOK
diff --git a/lib/taurus/test/__init__.py b/lib/taurus/test/__init__.py
new file mode 100644
index 0000000..2f4ae9b
--- /dev/null
+++ b/lib/taurus/test/__init__.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+##
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+##
+## Taurus 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.
+##
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+"""
+Taurus provides a framework for testing.
+This framework intends to facilitate evaluation, bug finding and integration of
+contributed code/patches, as well as to promote test driven development in
+Taurus.
+
+The first implementation of this Framework is an outcome of the [Sardana
+Enhancement Proposal 5 (SEP5)](http://sourceforge.net/p/sardana/wiki/SEP5/)
+
+Ideally, bug reports should be accompanied by a test revealing the bug,
+whenever possible.
+
+The first tests implemented are focused on Unit Tests, but the same framework
+should be used for integration and system tests as well.
+
+The taurus.test.testsuite module provides an autodiscovered suite for all
+tests implemented in Taurus.
+
+The following are some key points to keep in mind when using this framework:
+
+- The Taurus test framework is based on :mod:`unittest` which should be imported
+  from :mod:`taurus.external` in order to be compatible with all versions of
+  python supported by Taurus.
+
+- all test-related code is contained in submodules named `test` which appear
+  in any module of taurus.
+
+- test-related code falls in one of these three categories:
+
+  - actual test code (classes that derive from unittest.TestCase)
+
+  - utility classes/functions (code to simplify development of test code)
+
+  - resources (accessory files required by some test). They are located in
+    subdirectories named `res`
+
+For a more complete description of the conventions on how to write tests with
+the Taurus testing framework, please refer to the
+[SEP5](http://sourceforge.net/p/sardana/wiki/SEP5/).
+"""
+
+from .moduleexplorer import ModuleExplorer
+from .resource import getResourcePath
+from .skip import GUI_TESTS_ENABLED, skipUnlessGui
+from .base import insertTest
+from .fuzzytest import calculateTestFuzziness, loopSubprocess, loopTest
diff --git a/lib/taurus/test/base.py b/lib/taurus/test/base.py
new file mode 100644
index 0000000..be378ff
--- /dev/null
+++ b/lib/taurus/test/base.py
@@ -0,0 +1,137 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+## 
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+## 
+## Taurus 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.
+## 
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+"""This module provides basic utilities for usage in any test"""
+
+__docformat__ = 'restructuredtext'
+
+import functools
+
+
+def insertTest(klass=None, helper_name=None, test_method_name=None,
+               test_method_doc=None, tested_name=None, **helper_kwargs):
+    """Decorator that inserts test methods from a helper method that accepts
+    arguments.
+    `insertTest` provides a very economic API for creating new tests for a given
+    class based on a helper method.
+    `insertTest` accepts the following arguments:
+    
+      - helper_name (str): the name of the helper method. `insertTest` will
+                           insert a test method which calls the helper with
+                           any the helper_kwargs (see below).
+      - test_method_name (str): Optional. Name of the test method to be used.
+                                If None given, one will be generated from the
+                                tested class and helper names.
+      - test_method_doc (str): Optional. The docstring for the inserted test 
+                               method (this shows in the unit test output). 
+                               If None given, a default one is generated which
+                               includes the input parameters and the helper
+                               name.
+      - tested_name (str): Optional. The name of the class or feature being 
+                           tested (if given, it will be used in default method 
+                           names and docstrings).
+      - \*\*helper_kwargs: All remaining keyword arguments are passed to the
+                           helper.
+    
+    This decorator can be considered a "base" decorator. It is often used to
+    create other decorators in which the helper method is pre-set, as in 
+    the following example::
+        
+        isPos = functools.partial(insertTest, helper_name='isPositive')
+        
+        @isPos(x=2)
+        @isPos(x=10)
+        class Foo(unittest.TestCase):
+            def isPositive(self, x):
+                self.assertTrue(x > 0)
+    
+    """
+    # Recipe to support decorating with and without arguments
+    if klass is None: 
+        return functools.partial(insertTest, helper_name=helper_name,
+                                 test_method_name=test_method_name,
+                                 test_method_doc=test_method_doc,
+                                 tested_name=tested_name, **helper_kwargs)
+    
+    # Check arguments and provide defaults
+    if helper_name is None:
+        raise ValueError('helper_name argument is not optional')
+    
+    if test_method_name is None:
+        test_method_name = 'test_'
+        if tested_name:
+            test_method_name += '%s_' % tested_name
+        test_method_name += helper_name
+    # Append an index if necessary to avoid overwriting existing test methods
+    name, i = test_method_name, 1
+    while (hasattr(klass, name)):
+        i += 1
+        name = "%s_%i" % (test_method_name, i)
+    test_method_name = name
+    
+    if test_method_doc is None:
+        argsrep = ', '.join(['%s=%s' % (k, repr(v))
+                             for k, v in helper_kwargs.items()])
+        if tested_name:
+            test_method_doc = 'Testing %s with %s(%s)' % (tested_name,
+                                                          helper_name, argsrep)
+        else:
+            test_method_doc = 'Testing %s(%s)' % (helper_name, argsrep)
+    
+    # New test implementation
+    def newTest(obj):
+        helper = getattr(obj, helper_name)
+        return helper(**helper_kwargs)
+    
+    # Add the custom docstring
+    newTest.__doc__ = test_method_doc
+    
+    # Add the new test method with the new implementation
+    setattr(klass, test_method_name, newTest)
+    
+    return klass
+    
+
+if __name__ == '__main__':
+    
+    # a demo of use of insertTest
+
+    from taurus.external import unittest
+
+    isPos = functools.partial(insertTest, helper_name='isPositive')
+    isNeg = functools.partial(insertTest, helper_name='isPositive', 
+                              expected=False)
+
+    @isPos
+    @isPos(x=2)
+    @isPos(x=10)
+    @isPos(x=5)
+    @isNeg(x=-1)
+    class FooTest(unittest.TestCase):
+        def isPositive(self, x=1, expected=True):
+            self.assertEqual(x > 0, expected)
+   
+    unittest.main(verbosity=2)
+    
diff --git a/lib/taurus/test/fuzzytest.py b/lib/taurus/test/fuzzytest.py
new file mode 100644
index 0000000..f18c998
--- /dev/null
+++ b/lib/taurus/test/fuzzytest.py
@@ -0,0 +1,134 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+##
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+##
+## Taurus 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.
+##
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+'''Utility functions to deal with non-ideal (fuzzy) tests'''
+
+def loopTest(testname, maxtries=100, maxfails=10):
+    '''Run a test `maxtries` times or until it fails `maxfails` times and 
+    report the number of tries and failures.
+    
+    :param testname: (str) test name. see: 
+                     :meth:`unittest.TestLoader.loadTestsFromName`
+    :param maxtries: (int) maximum number of runs
+    :param maxfails: (int) maximum number of failed runs
+    
+    :return: (tuple) a tuple of ints: tries, failures
+    '''
+    from taurus.external import unittest
+    suite = unittest.defaultTestLoader.loadTestsFromName(testname)
+    runner = unittest.TextTestRunner(verbosity=0)
+    i, f = 0, 0
+    while f < maxfails and i < maxtries:
+        i += 1
+        result = runner.run(suite)
+        if not result.wasSuccessful():
+            f += 1
+    return i, f
+
+def loopSubprocess(target, maxtries=100, maxfails=10, okvalues=(0,), args=(), 
+                   kwargs=None):
+    '''Run a callable as a subprocess `maxtries` times or until it fails 
+    `maxfails` times and report the number of tries and failures.
+    The callable is run as a subprocess and it is considered to run fine if 
+    the subprocess exit code is in the okValues list.
+    
+    :param target: (callable) a callable test 
+    :param maxtries: (int) maximum number of runs
+    :param maxfails: (int) maximum number of failed runs
+    :param okvalues: (seq) a sequence containing exit values of cmd which
+                     are considered to be successful runs.
+    :param args: (seq) arguments for running the target function
+    :param kwargs: (dict) keyword arguments for running the target function
+                     
+                     
+    :return: (tuple) a tuple of ints: tries, failures
+    '''
+    if kwargs is None:
+        kwargs = {}
+    from multiprocessing import Process
+    i, f = 0, 0
+    while f < maxfails and i < maxtries:
+        i += 1
+        p = Process(target=target, args=args, kwargs=kwargs)
+        p.start()
+        p.join()
+        if p.exitcode not in okvalues:
+            f += 1
+    return i, f
+    
+def calculateTestFuzziness(test, maxtries=100, maxfails=10, **kwargs):
+    '''Estimate the fuzziness of a test by running it many times and counting
+    the failures. In this context, we assume that there is an underlying 
+    problem and but that the test is not perfect and only fails (triggers the 
+    problem) with a certain failure rate. 
+    
+    :param testname: (str) test name. see: 
+                     :meth:`unittest.TestLoader.loadTestsFromName`
+    :param maxtries: (int) maximum number of runs
+    :param maxfails: (int) maximum number of failed runs
+    
+    :return: (tuple) a tuple (f,df,n) where f is the failure rate, df is its 
+             standard deviation, and n is the number of consecutive 
+             times that the test should be passed to have a confidence>99%% 
+             that the bug is fixed'
+    '''
+    print ("Running the test %i times (or until it fails %i times)" + 
+           "to estimate the failure rate") % (maxtries, maxfails)
+    import numpy
+    
+    if isinstance(test, str): 
+        tries, fails = loopTest(test, maxtries=maxtries, maxfails=maxfails)
+    else:
+        tries, fails = loopSubprocess(test, maxtries=maxtries, 
+                                      maxfails=maxfails, **kwargs)
+    r = float(fails)/tries
+    dr = numpy.sqrt(fails)/tries
+    print 'Failure rate = %g +/- %g  (%i/%i)'%(r, dr, fails, tries)
+    #calculating n using p-value=1% and failure rate with -1 sigma
+    n = numpy.ceil(numpy.log(.01)/numpy.log(1-(r-dr)))
+    print ('Number of consecutive times that the test should be passed ' +
+           'to have a confidence>99%% that the bug is fixed: %g') % n
+    return r, dr, n
+
+
+if __name__ == "__main__":
+
+    def kk():
+        #exits with fail 1/3 of the times
+        from numpy.random import randint, seed
+        seed()
+        k =  randint(3)
+        if not k:
+            exit(1)
+        return
+     
+    print calculateTestFuzziness(kk)
+    
+#     print calculateTestFuzziness('test_pytango_bug659.TestPyTango_Bug659')
+# 
+#   _, f = loopTest('test_pytango_bug659.TestPyTango_Bug659', 
+#                  maxtries=100, maxfails=1)
+
+    
\ No newline at end of file
diff --git a/tests/moduleexplorer.py b/lib/taurus/test/moduleexplorer.py
similarity index 59%
rename from tests/moduleexplorer.py
rename to lib/taurus/test/moduleexplorer.py
index fb341d5..f3f7353 100644
--- a/tests/moduleexplorer.py
+++ b/lib/taurus/test/moduleexplorer.py
@@ -4,189 +4,208 @@
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
 ###########################################################################
 
-''' Returns info about a module'''
+'''Utility code for returning info about a module'''
+
+import sys
+import os
+import inspect
+import glob
+import re
 
-import sys, os, inspect, glob, re
 
 class ModuleExplorer(object):
-    
+
     def __init__(self, exclude_patterns=(), verbose=True):
         '''
         :param exclude_patterns: (seq<str>) sequence of strings containing regexp
-                                 patterns. Each candidate to be explored will be 
+                                 patterns. Each candidate to be explored will be
                                  matched against these patterns and will be excluded
                                  if it matches any of them.
         :param verbose: (bool) If True (default) status messages will be printed to stdout
         '''
         self.exclude_patterns = [re.compile(p) for p in exclude_patterns]
         self.verbose = verbose
-    
+
     def _matchesAnyPattern(self, name, paterns):
         for p in paterns:
-            if re.match(p,name) is not None:
-                if self.verbose: print 'excluding "%s"'%name
+            if re.match(p, name) is not None:
+                if self.verbose:
+                    print 'excluding "%s"' % name
                 return True
         return False
-    
+
     def _getlocalmembernames(self, module, predicate=None):
-        ret =[]
+        ret = []
         modulepath, tail = os.path.split(inspect.getabsfile(module))
-        for n,v in inspect.getmembers(module, predicate):
-            if inspect.isbuiltin(v): 
-                continue #ignore builtin functions
-            try: 
+        for n, v in inspect.getmembers(module, predicate):
+            if inspect.isbuiltin(v):
+                continue  # ignore builtin functions
+            try:
                 memberpath, tail = os.path.split(inspect.getabsfile(v))
-            except TypeError: 
-                continue #ignore builtin modules
-            if memberpath == modulepath: 
+            except TypeError:
+                continue  # ignore builtin modules
+            if memberpath == modulepath:
                 ret.append(n)
         return ret
-    
+
     def _getSubmodulesFromPath(self, modulepath):
-        g = glob.glob(os.path.join(modulepath,'*','__init__.py'))
+        g = glob.glob(os.path.join(modulepath, '*', '__init__.py'))
         ret = [re.findall(r".+\/(.*)\/__init__.py", s)[0] for s in g]
         return ret
-    
+
     def _isclass_with_init(self, obj):
-        return inspect.isclass(obj) and hasattr(obj,'__init__')
-    
+        return inspect.isclass(obj) and hasattr(obj, '__init__')
+
     def _isenumeration(self, obj):
 #        return isinstance(obj, taurus.core.util)
-        return False #@todo
-            
+        return False  # @todo
+
     def exploreModule(self, modulename):
         '''Recursive function that gathers info on a module and all its submodules.
-        
+
         :param modulename: the name of the module to explore
-        
-        :return: (dict<str,object>) a dictionary containing submodulenames, 
+
+        :return: (dict<str,object>) a dictionary containing submodulenames,
                  localclassnames, localfunctionnames, localenumerationnames,
                  externalmembernames, submodules, warnings
         '''
-        if self.verbose: print "Exploring %s..."%modulename  
+        if self.verbose:
+            print "Exploring %s..." % modulename
         warnings = []
         try:
-          module = __import__(modulename, fromlist = [''])
-        except Exception,e:
-          msg = 'exploreModule: WARNING: Cannot import %s. Reason: %s'%(modulename,repr(e))
-          warnings.append(msg)
-          if self.verbose: print msg
-          return dict(modulename = modulename,
-                    basemodulename = modulename.split('.')[-1],
-                    modulepath = None,
-                    submodulenames = [], 
-                    localclassnames = [], 
-                    localfunctionnames = [],
-                    localenumerationnames = [],
-                    externalmembernames = [],
-                    submodules = {},
-                    warnings = warnings)
+            module = __import__(modulename, fromlist=[''])
+        except Exception as e:
+            msg = 'exploreModule: WARNING: Cannot import %s. Reason: %s' % (
+                modulename, repr(e))
+            warnings.append(msg)
+            if self.verbose:
+                print msg
+            return dict(modulename=modulename,
+                        basemodulename=modulename.split('.')[-1],
+                        modulepath=None,
+                        submodulenames=[],
+                        localclassnames=[],
+                        localfunctionnames=[],
+                        localenumerationnames=[],
+                        externalmembernames=[],
+                        submodules={},
+                        warnings=warnings)
         modulepath, tail = os.path.split(inspect.getabsfile(module))
-        
+
         submodulenames = sorted(self._getSubmodulesFromPath(modulepath))
-        localclassnames =  sorted(self._getlocalmembernames(module, self._isclass_with_init)) 
-        localfunctionnames = sorted(self._getlocalmembernames(module, inspect.isfunction))
-        localenumerationnames = sorted([])#@todo
-        externalmembernames = sorted([]) #@todo
+        localclassnames = sorted(
+            self._getlocalmembernames(module, self._isclass_with_init))
+        localfunctionnames = sorted(
+            self._getlocalmembernames(module, inspect.isfunction))
+        localenumerationnames = sorted([])  # @todo
+        externalmembernames = sorted([])  # @todo
 #        localmembers = list(submodules) + localfunctionnames + localclassnames + localenumerationnames
-#        externalmembers = [n for n,v in inspect.getmembers(object) if (n not in localmembers and not n.startswith('_'))]
-        
+# externalmembers = [n for n,v in inspect.getmembers(object) if (n not in
+# localmembers and not n.startswith('_'))]
+
         #filter out excluded members
-        submodulenames = [n for n in submodulenames if not self._matchesAnyPattern(os.path.join(modulename,n), self.exclude_patterns)]
-        localclassnames = [n for n in localclassnames if not self._matchesAnyPattern(os.path.join(modulename,n), self.exclude_patterns)]
-        localfunctionnames = [n for n in localfunctionnames if not self._matchesAnyPattern(os.path.join(modulename,n), self.exclude_patterns)]
-        localenumerationnames = [n for n in localenumerationnames if not self._matchesAnyPattern(os.path.join(modulename,n), self.exclude_patterns)]
-        externalmembernames = [n for n in externalmembernames if not self._matchesAnyPattern(os.path.join(modulename,n), self.exclude_patterns)]
-        
+        submodulenames = [n for n in submodulenames if not self._matchesAnyPattern(
+            os.path.join(modulename, n), self.exclude_patterns)]
+        localclassnames = [n for n in localclassnames if not self._matchesAnyPattern(
+            os.path.join(modulename, n), self.exclude_patterns)]
+        localfunctionnames = [n for n in localfunctionnames if not self._matchesAnyPattern(
+            os.path.join(modulename, n), self.exclude_patterns)]
+        localenumerationnames = [n for n in localenumerationnames if not self._matchesAnyPattern(
+            os.path.join(modulename, n), self.exclude_patterns)]
+        externalmembernames = [n for n in externalmembernames if not self._matchesAnyPattern(
+            os.path.join(modulename, n), self.exclude_patterns)]
+
         #recurse
         submodules = {}
         for n in submodulenames:
             sm_name = '.'.join((modulename, n))
             submodules[n] = self.exploreModule(sm_name)
-        
-        return dict(modulename = modulename,
-                    basemodulename = modulename.split('.')[-1],
-                    modulepath = modulepath,
-                    submodulenames = submodulenames, 
-                    localclassnames = localclassnames, 
-                    localfunctionnames = localfunctionnames,
-                    localenumerationnames = localenumerationnames,
-                    externalmembernames = externalmembernames,
-                    submodules = submodules,
-                    warnings = warnings)
-        
+
+        return dict(modulename=modulename,
+                    basemodulename=modulename.split('.')[-1],
+                    modulepath=modulepath,
+                    submodulenames=submodulenames,
+                    localclassnames=localclassnames,
+                    localfunctionnames=localfunctionnames,
+                    localenumerationnames=localenumerationnames,
+                    externalmembernames=externalmembernames,
+                    submodules=submodules,
+                    warnings=warnings)
+
     @staticmethod
     def getAll(info, key):
         '''
         append all values for a given key in a nested "moduleinfo" dictionary
-        
+
         :param info: (dict) a moduleinfo dictionary like the one returned by :meth:`exploreModule`
         :param key: (str) a key of a moduleinfo dictionary
-        
+
         :return: (list<tuple>) a list that concatenates tuples where the first element is  the (sub)module name
-                 and the second element is the value for the given key. 
+                 and the second element is the value for the given key.
                  If for a certain submodule, the value is empty, it is not included in the list at all.
         '''
         mname = info['modulename']
         try:
-            ret = [(mname,el) for el in info[key]]
+            ret = [(mname, el) for el in info[key]]
         except KeyError:
             return []
         for sminfo in info['submodules'].itervalues():
-            ret += ModuleExplorer.getAll(sminfo,key)
+            ret += ModuleExplorer.getAll(sminfo, key)
         return ret
-        
+
     @staticmethod
     def explore(modulename, exclude_patterns=(), verbose=True):
         '''convenience to explore a module
-        
+
         :param modulename: the name of the module to explore
         :param exclude_patterns: (seq<str>) sequence of strings containing regexp
-                                 patterns. Each candidate to be explored will be 
+                                 patterns. Each candidate to be explored will be
                                  matched against these patterns and will be excluded
                                  if it matches any of them.
         :param verbose: (bool) If True (default) status messages will be printed to stdout
-        
+
         :return: (dict<str,object>, allwarnings) a tuple whose first member is a dictionary
                  containing submodulenames, localclassnames, localfunctionnames, localenumerationnames,
                  externalmembernames, submodules, warnings. The second member of the tuple is a list
                  containing all the warnings accummulated.
         '''
-        explorer = ModuleExplorer(exclude_patterns=exclude_patterns, verbose=verbose)
+        explorer = ModuleExplorer(
+            exclude_patterns=exclude_patterns, verbose=verbose)
         minfo = explorer.exploreModule(modulename)
         return minfo, ModuleExplorer.getAll(minfo, 'warnings')
 
 
-        
-def main(modulename='taurus', exclude_patterns = ('.*/ui',)):
-    moduleinfo, allw = ModuleExplorer.explore(modulename, exclude_patterns=exclude_patterns, verbose=True)
-    print '\n\n'+'*'*50
-    print "Exploration finished with %i warnings:"%(len(allw))
-    for m,w in allw: print w
-    print '*'*50+'\n'
-    print 
+def main(modulename='taurus', exclude_patterns=('.*/ui')):
+    moduleinfo, allw = ModuleExplorer.explore(
+        modulename, exclude_patterns=exclude_patterns, verbose=True)
+    print '\n\n' + '*' * 50
+    print "Exploration finished with %i warnings:" % (len(allw))
+    for m, w in allw:
+        print w
+    print '*' * 50 + '\n'
+    print
     assert len(allw) == 0
- 
-    
+
+
 if __name__ == "__main__":
-    main() 
\ No newline at end of file
+    main()
diff --git a/lib/taurus/test/resource.py b/lib/taurus/test/resource.py
new file mode 100644
index 0000000..fd2c328
--- /dev/null
+++ b/lib/taurus/test/resource.py
@@ -0,0 +1,69 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+##
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+##
+## Taurus 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.
+##
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+###########################################################################
+
+'''Utility code for working with test resources'''
+
+import os
+import sys
+
+
+def getResourcePath(resmodule, fname=''):
+    '''
+    Returns the absolute path to the directory in which the
+    resource module named `resmodule` is implemented.
+    If filename is passed, the path to the filename in such directory is
+    returned, e.g.:
+
+    getResourcePath('foo.test.res', 'bar.txt') -->
+     absolute path to <taurus>/foo/test/res/bar.txt
+
+
+    It raises ImportError if resmodule does not exist and
+    RuntimeError if fname does not exist)
+
+    :param resmodule: (str) name of a resource module
+    :param fname: (str) the name of a resource file present in the
+                  resmodule directory
+
+    :return: (str) absolute path to the resource file
+             (or to the resource directory if fname is not passed)
+
+    '''
+    __import__(resmodule)
+    module = sys.modules[resmodule]  # We use this because __import__('x.y')
+                                    #returns x instead of y !!
+    dirpath = os.path.abspath(os.path.dirname(module.__file__))
+    path = os.path.join(dirpath, fname)
+    if not os.path.exists(path):
+        raise RuntimeError('File "%s" does not exist' % path)
+    return path
+
+
+if __name__ == "__main__":
+    print getResourcePath('taurus.test')
+    print getResourcePath('taurus.test', 'resource.py')
+    #print getResourcePath('taurus.qt.qtgui.plot', 'taurusplot.py')
+    #print getResourcePath('taurus.test', 'kk.py')
+    #print getResourcePath('taurus.kk', 'resource.py')
diff --git a/lib/taurus/test/skip.py b/lib/taurus/test/skip.py
new file mode 100644
index 0000000..a71a7bf
--- /dev/null
+++ b/lib/taurus/test/skip.py
@@ -0,0 +1,75 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+##
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+##
+## Taurus 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.
+##
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+"""This module provides utilities for skipping certain sets of tests"""
+
+#__all__ = []
+
+__docformat__ = 'restructuredtext'
+
+from taurus.external import unittest
+from taurus import tauruscustomsettings
+
+
+def skipUnlessGui():
+    '''Decorator to indicate that the given test should be skipped if GUI
+    Tests are not enabled.
+
+    It can be applied both to :class:`unittest.TestCase` classes and to
+    test methods::
+
+        class FooTest(unittest.TestCase):
+            def test_something_which_does_not_need_gui()
+                (...)
+
+            @skipUnlessGui()
+            def test_something_that requires_gui()
+                (...)
+
+        @skipUnlessGui()
+        class GUITest(unittest.TestCase):
+            (...)
+
+    Note: using skipUnlessGui is equivalent to:
+
+        @skipunless(taurus.test.GUI_TESTS_ENABLED, 'requires GUI')
+
+    '''
+    return unittest.skipUnless(GUI_TESTS_ENABLED, 'requires GUI')
+
+
+def _hasgui():
+    '''Returns True if GUI is available. False otherwise
+    The current implementation is not very robust: it just looks for the
+    'DISPLAY' environment variable on posix systems and assumes True
+    for other systems'''
+    import os
+    if os.name == 'posix' and not os.getenv('DISPLAY'):
+        return False
+    else:
+        return True
+
+GUI_TESTS_ENABLED = getattr(
+    tauruscustomsettings, 'ENABLE_GUI_TESTS', _hasgui())
diff --git a/tests/taurustest.py b/lib/taurus/test/test_import.py
similarity index 73%
rename from tests/taurustest.py
rename to lib/taurus/test/test_import.py
index cc0b8fe..f1eb16b 100644
--- a/tests/taurustest.py
+++ b/lib/taurus/test/test_import.py
@@ -2,45 +2,56 @@
 #############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
 #############################################################################
 
 
-"""Unit tests for Taurus"""
+"""Taurus import tests"""
+
+from taurus.external import unittest
 
-import unittest
 
 class TaurusImportTestCase(unittest.TestCase):
+
+    '''
+    Test if all the submodules can be imported
+    '''
+
     def setUp(self):
+        """Preconditions: moduleexplorer utility has to be available """
         from moduleexplorer import ModuleExplorer
         self.explore = ModuleExplorer.explore
-    
+
     def testImportSubmodules(self):
-        """All submodules should import without problems"""
+        """
+        Check that all taurus submodules import without problems
+
+        Expected Results: It is expected to get no warning message
+        on module importing
+        """
         moduleinfo, wrn = self.explore('taurus', verbose=False)
         msg = None
         if wrn:
-            msg = '\n%s'%'\n'.join(zip(*wrn)[1]) 
-        self.assertEqual(len(wrn),0, msg=msg)
-        
-        
-       
+            msg = '\n%s' % '\n'.join(zip(*wrn)[1])
+        self.assertEqual(len(wrn), 0, msg=msg)
+
+
 if __name__ == "__main__":
     unittest.main()
diff --git a/lib/taurus/test/testsuite.py b/lib/taurus/test/testsuite.py
new file mode 100644
index 0000000..c819fe4
--- /dev/null
+++ b/lib/taurus/test/testsuite.py
@@ -0,0 +1,67 @@
+#!/usr/bin/env python
+
+#############################################################################
+##
+## This file is part of Taurus, a Tango User Interface Library
+##
+## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
+##
+## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
+##
+## Taurus 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.
+##
+## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
+##
+#############################################################################
+
+"""
+This module defines the test suite for the whole Taurus package
+Usage::
+
+  from taurus.test import testsuite
+  testsuite.run()
+
+"""
+
+__docformat__ = 'restructuredtext'
+
+import os
+from taurus.external import unittest
+import taurus
+
+
+def run(disableLogger=True):
+    '''Runs all tests for the taurus package'''
+    # disable logging messages
+    if disableLogger:
+        taurus.disableLogOutput()
+    # discover all tests within the taurus/lib directory
+    loader = unittest.defaultTestLoader
+    suite = loader.discover(os.path.dirname(taurus.__file__))
+    # use the basic text test runner that outputs to sys.stderr
+    runner = unittest.TextTestRunner(descriptions=True, verbosity=2)
+    # run the test suite
+    runner.run(suite)
+
+if __name__ == '__main__':
+    from taurus.external import argparse
+    parser = argparse.ArgumentParser(description=
+                                     'Main test suite for Taurus')
+    parser.add_argument('--skip-gui-tests', dest='skip_gui',
+                        action='store_true', default=False,
+                        help='Do not perform tests requiring GUI')
+    args = parser.parse_args()
+
+    if args.skip_gui:
+        import taurus.test
+        taurus.test.GUI_TESTS_ENABLED = False
+    run()
diff --git a/scripts/taurusdemo b/scripts/taurusdemo
index 4560edf..27f0be1 100755
--- a/scripts/taurusdemo
+++ b/scripts/taurusdemo
@@ -30,7 +30,7 @@ import taurus.core.util
 import taurus.qt.qtgui.util
 import taurus.qt.qtgui.application
 
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 
 class TaurusDemoPanel(Qt.QWidget):
 
diff --git a/scripts/taurusdesigner b/scripts/taurusdesigner
index 01a9493..54a7ec6 100755
--- a/scripts/taurusdesigner
+++ b/scripts/taurusdesigner
@@ -28,7 +28,7 @@ import os.path
 import optparse 
 
 import taurus
-from taurus.qt import Qt
+from taurus.external.qt import Qt
 from taurus.qt.qtdesigner.taurusdesigner import main
 
 if __name__ == "__main__":
diff --git a/scripts/taurusuic4 b/scripts/taurusuic4
index 3173088..ba630a5 100755
--- a/scripts/taurusuic4
+++ b/scripts/taurusuic4
@@ -294,7 +294,14 @@ def generate_with_old_pyuic4():
     
     os.remove(new_ui_filename)
 
+msg = ('taurusuic4 is deprecated since SEP11 ' + 
+       '(http://sf.net/p/sardana/wiki/SEP11)\n' +
+       'Consider using the taurus.qt.qtgui.util.UILoadable decorator instead')
+
 def main():
+    print "*"*79
+    print msg
+    print "*"*79
     try:
         if is_pyuic4_recent():
             go = generate
diff --git a/setup.cfg b/setup.cfg
deleted file mode 100644
index 3251fea..0000000
--- a/setup.cfg
+++ /dev/null
@@ -1,3 +0,0 @@
-[bdist_wininst]
-title=Taurus
-bitmap=taurus.bmp
diff --git a/setup.py b/setup.py
index e8a4bf6..88bf8ff 100644
--- a/setup.py
+++ b/setup.py
@@ -3,21 +3,21 @@
 ##############################################################################
 ##
 ## This file is part of Taurus, a Tango User Interface Library
-## 
+##
 ## http://www.tango-controls.org/static/taurus/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## Taurus 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.
-## 
+##
 ## Taurus 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 Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
@@ -66,23 +66,36 @@ package_dir = { 'taurus' : abspath('lib', 'taurus') }
 
 packages = [
     'taurus',
+    'taurus.test',
+
+    'taurus.external',
+    'taurus.external.argparse',
+    'taurus.external.enum',
+    'taurus.external.ordereddict',
+    'taurus.external.pint',
+    'taurus.external.qt',
+    'taurus.external.unittest',
+    'taurus.external.test',
+
     'taurus.core',
     'taurus.core.util',
     'taurus.core.util.argparse',
     'taurus.core.util.decorator',
     'taurus.core.util.report',
-    'taurus.core.utils',        # old, deprecated: maintain for compatibility
+    'taurus.core.utils',  # old, deprecated: maintain for compatibility
+
     'taurus.core.resource',
+
     'taurus.core.simulation',
+
     'taurus.core.evaluation',
+
     'taurus.core.tango',
-    'taurus.core.tango.sardana',
     'taurus.core.tango.img',
-    'taurus.core.tango.sardana',
-    
+
     'taurus.console',
     'taurus.console.util',
-    
+
     'taurus.qt',
 
     'taurus.qt.qtcore',
@@ -91,20 +104,24 @@ packages = [
     'taurus.qt.qtcore.mimetypes',
     'taurus.qt.qtcore.model',
     'taurus.qt.qtcore.tango',
-    'taurus.qt.qtcore.tango.sardana',
+
     'taurus.qt.qtcore.util',
 
     'taurus.qt.qtdesigner',
     'taurus.qt.qtdesigner.taurusplugin',
-    
+
     'taurus.qt.qtgui',
+    'taurus.qt.qtgui.test',
     'taurus.qt.qtgui.application',
     'taurus.qt.qtgui.base',
     'taurus.qt.qtgui.button',
+    'taurus.qt.qtgui.button.test',
+    'taurus.qt.qtgui.compact',
 #    'taurus.qt.qtgui.console',
     'taurus.qt.qtgui.container',
     'taurus.qt.qtgui.dialog',
     'taurus.qt.qtgui.display',
+    'taurus.qt.qtgui.display.test',
     'taurus.qt.qtgui.display.demo',
     'taurus.qt.qtgui.editor',
     'taurus.qt.qtgui.gauge',
@@ -115,6 +132,7 @@ packages = [
     'taurus.qt.qtgui.input',
     'taurus.qt.qtgui.model',
     'taurus.qt.qtgui.panel',
+    'taurus.qt.qtgui.panel.test',
     'taurus.qt.qtgui.panel.report',
     'taurus.qt.qtgui.panel.report.ui',
     'taurus.qt.qtgui.panel.ui',
@@ -130,32 +148,31 @@ packages = [
     'taurus.qt.qtgui.tree',
     'taurus.qt.qtgui.ui',
     'taurus.qt.qtgui.util',
-    
+
     'taurus.qt.uic',
 ]
 
+# check if local implementations of enum and pint are here (debian removes them
+# before running setup to avoid license issues)
+if os.path.isdir(abspath('lib', 'taurus', 'external', 'enum', 'enum')):
+    packages.append('taurus.external.enum.enum')
+if os.path.isdir(abspath('lib', 'taurus', 'external', 'pint', 'pint')):
+    packages.append('taurus.external.pint.pint')
+
+
 extra_packages = [
-    'taurus.qt.qtgui.extra_macroexecutor',
-    'taurus.qt.qtgui.extra_macroexecutor.favouriteseditor',
-    'taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor',
-    'taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.customeditors',
-    'taurus.qt.qtgui.extra_macroexecutor.sequenceeditor',
-    
-    'taurus.qt.qtgui.extra_sardana',
-    'taurus.qt.qtgui.extra_sardana.ui',
-    
     'taurus.qt.qtgui.extra_nexus',
-    
-    'taurus.qt.qtgui.extra_pool',
-    
     'taurus.qt.qtgui.extra_xterm',
-    
     'taurus.qt.qtgui.extra_guiqwt',
     'taurus.qt.qtgui.extra_guiqwt.ui',
-    
+
     'taurus.qt.qtgui.taurusgui.conf.tgconf_example01',
-    #'taurus.qt.qtgui.taurusgui.conf.tgconf_example01.images',
     'taurus.qt.qtgui.taurusgui.conf.tgconf_macrogui',
+    
+    #For backwards compat. They may be removed later on:
+    'taurus.qt.qtgui.extra_macroexecutor',
+    'taurus.qt.qtgui.extra_sardana',
+    'taurus.qt.qtgui.extra_pool',
 ]
 
 provides = [
@@ -171,10 +188,10 @@ requires = [
     'PyQt4.Qwt5 (>=5.2.0)',   # plotting
     'ply (>=2.3)',            # jdraw parser
     'lxml (>=2.1)',           # tau2taurus, taurusuic4
-    'spyder (>=2.1)',         # shell, editor
+    'spyder (>=2.2)',         # shell, editor
 ]
 
-package_data = { 
+package_data = {
     'taurus.core.epics'        : ['__taurus_plugin__'],
     'taurus.core.evaluation'   : ['__taurus_plugin__'],
     'taurus.core.resource'     : ['__taurus_plugin__'],
@@ -182,7 +199,7 @@ package_data = {
     'taurus.core.tango'        : ['__taurus_plugin__'],
 
     'taurus.qt.qtgui.resource' : ['*.rcc'],
-    'taurus.qt.qtgui.util'     : ['tauruswidget_template', 
+    'taurus.qt.qtgui.util'     : ['tauruswidget_template',
                                   'tauruswidget_qtdesignerplugin_template'],
     'taurus.qt.uic'            : ['pyuic4/*'],
     'taurus.qt.qtgui.taurusgui.conf.tgconf_example01' : ['images/*'],
@@ -201,7 +218,7 @@ def get_script_files():
             continue
         # avoid files that have any extension
         if len(os.path.splitext(abs_item)[1]) > 0:
-            continue 
+            continue
         scripts.append('scripts/' + item)
     return scripts
 
@@ -234,15 +251,13 @@ classifiers = [
 class build_resources(Command):
 
     description = "\"build\" Qt resource files"
-    
     user_options = [('logo=', None, "alternative logo file (default is taurus.png)")]
-    
     AllowedExt = ('svg', 'png', 'jpg', 'jpeg', 'gif')
-    
+
     def initialize_options (self):
         self.resource_dir = abspath('lib', 'taurus', 'qt', 'qtgui', 'resource')
         self.taurus = os.path.join(self.resource_dir, 'taurus.png')
-        self.logo = None #os.path.join(self.resource_dir,'taurus.png')
+        self.logo = None  #os.path.join(self.resource_dir,'taurus.png')
         if self.distribution.verbose:
             self.out = sys.stdout
         else:
@@ -277,21 +292,21 @@ class build_resources(Command):
                     raise Exception(msg)
         else:
             self.rcc_exec = 'rcc'
-    
+
     def run(self):
         orig_dir = os.path.abspath(os.curdir)
         os.chdir(self.resource_dir)
         try:
             cur_dir = os.path.abspath(os.curdir)
-            
+
             result = self._build_general_res()
             result2 = self._build_res(cur_dir)
-            
+
             result[0].extend(result2[0])
             result[1].extend(result2[1])
         finally:
             os.chdir(orig_dir)
-    
+
     def _build_general_res(self):
         qrc_filename = 'general.qrc'
         rcc_filename = 'qrc_general.rcc'
@@ -313,8 +328,9 @@ class build_resources(Command):
         finally:
             f.close()
         print("[DONE]", file=out)
-        
+
         # Generate binary rcc file
+
         if self.rcc_exec:
             print("Generating %s... " % rcc_filename, file=out, end='')
             out.flush()
@@ -323,9 +339,9 @@ class build_resources(Command):
                 print("[FAILED]", file=out)
             else:
                 print("[DONE]", file=out)
-        
+
         return [ [qrc_filename], [rcc_filename]]
-    
+
     def _build_res(self, abs_dir, bases=list()):
         """Builds the resources in the abs_dir recursively.
         The result is a list of 2 items:
@@ -346,14 +362,14 @@ class build_resources(Command):
                 result[1].extend(ret[1])
             elif os.path.splitext(abs_elem)[1][1:].lower() in build_resources.AllowedExt:
                 local_elems.append(elem)
-        
+
         if local_elems and local_bases[1:]:
             base_dir = os.path.join(*local_bases[1:])
             base_filename = "_".join(local_bases[1:])
-            base_filename = base_filename.replace('-','_')
+            base_filename = base_filename.replace('-', '_')
             qrc_filename = base_filename + ".qrc"
             rcc_filename = 'qrc_' + base_filename + ".rcc"
-            
+
             # Generate qrc file
             print("Generating %s... " % qrc_filename, file=out, end='')
             out.flush()
@@ -378,7 +394,7 @@ class build_resources(Command):
                 f.close()
             result[0].append(qrc_filename)
             print("[DONE]", file=out)
-            
+
             # Generate binary rcc file
             if self.rcc_exec:
                 print("Generating %s... " % rcc_filename, file=out, end='')
@@ -389,7 +405,7 @@ class build_resources(Command):
                 else:
                     result[1].append(rcc_filename)
                     print("[DONE]", file=out)
-            
+
         return result
 
 
@@ -414,14 +430,41 @@ class build(dftbuild):
     def finalize_options (self):
         dftbuild.finalize_options(self)
         if self.logo is None:
-            self.logo = abspath('lib','taurus','qt','qtgui','resource','taurus.png')
-      
+            self.logo = abspath('lib', 'taurus', 'qt', 'qtgui', 'resource', 'taurus.png')
+
     def run(self):
-        if self.with_extra_widgets:
-            self.distribution.packages.extend(extra_packages)
-        self.distribution.package_data['taurus.qt.qtgui.resource'].extend(self.get_extra_resource_package_data())
+        self.build_package_data()
+        self.build_jdraw()
         dftbuild.run(self)
 
+    def build_package_data(self):
+        packages = self.distribution.packages
+        package_data = self.distribution.package_data
+        if self.with_extra_widgets:
+            packages.extend(extra_packages)
+        resource_package_data = self.get_extra_resource_package_data()
+        package_data['taurus.qt.qtgui.resource'].extend(resource_package_data)
+
+        for package in packages:
+            if package.endswith(".ui"):
+                pdata = package_data.get(package)
+                if pdata is None:
+                    package_data[package] = pdata = []
+                pdata.append("*.ui")
+
+    def build_jdraw(self):
+        print("Building jdraw grammar...", end='')
+        taurus_dir = abspath('lib')
+        sys.path.insert(0, taurus_dir)
+        try:
+            from taurus.qt.qtgui.graphic.jdraw import jdraw_parser
+            jdraw_parser.new_parser()
+            print(" [DONE]")
+        except:
+            print("[ERROR]")
+        finally:
+            sys.path.pop(0)
+        
     def has_doc(self):
         if self.no_doc:
             return False
@@ -431,8 +474,8 @@ class build(dftbuild):
         return os.path.isdir(abspath('doc'))
 
     def has_resources(self):
-        return os.path.isdir(abspath('lib','taurus','qt','qtgui','resource'))
-    
+        return os.path.isdir(abspath('lib', 'taurus', 'qt', 'qtgui', 'resource'))
+
     def get_extra_resource_package_data(self):
         data = []
         import PyQt4.Qt
@@ -454,32 +497,32 @@ class build(dftbuild):
 
 
 class install_man(Command):
-    
+
     user_options = [
         ('install-dir=', 'd', 'base directory for installing man page files')]
-    
+
     def initialize_options(self):
         self.install_dir = None
-        
+
     def finalize_options(self):
         self.set_undefined_options('install',
                                    ('install_man', 'install_dir'))
-                                   
+
     def run(self):
         src_man_dir = abspath('doc', 'man')
         man_elems = os.listdir(src_man_dir)
         man_pages = []
         for f in man_elems:
-            f = os.path.join(src_man_dir,f)
+            f = os.path.join(src_man_dir, f)
             if not os.path.isfile(f): continue
             if not f.endswith(".1"): continue
             man_pages.append(f)
-        
+
         install_dir = os.path.join(self.install_dir, 'man1')
-        
+
         if not os.path.isdir(install_dir):
             os.makedirs(install_dir)
-        
+
         for man_page in man_pages:
             self.copy_file(man_page, install_dir)
 
@@ -488,14 +531,14 @@ class install_html(Command):
 
     user_options = [
         ('install-dir=', 'd', 'base directory for installing HTML documentation files')]
-    
+
     def initialize_options(self):
         self.install_dir = None
-        
+
     def finalize_options(self):
         self.set_undefined_options('install',
                                    ('install_html', 'install_dir'))
-                                   
+
     def run(self):
         build_doc = self.get_finalized_command('build_doc')
         src_html_dir = abspath(build_doc.build_dir, 'html')
@@ -510,15 +553,15 @@ class install_scripts(dftinstall_scripts):
     See rationale in: 
     http://matthew-brett.github.io/pydagogue/installing_scripts.html
     '''
-    
+
     user_options = list(dftinstall_scripts.user_options)
     user_options.extend(
             [
              ('wrappers', None, 'Install .bat wrappers for windows (enabled by default on windows)'),
              ('ignore-shebang', None, 'Use "python" as the interpreter in .bat wrappers (instead of using the interpreter found in the shebang line of the scripts). Note: this only affects to windows .bat wrappers!'),
              ])
-    
-    
+
+
     BAT_TEMPLATE_SHEBANG = \
 r"""@echo off
 REM wrapper to use shebang first line of {FNAME}
@@ -545,8 +588,8 @@ call %py_exe% %pyscript% %*
         self.ignore_shebang = None
         self.wrappers = (os.name == "nt")
         dftinstall_scripts.initialize_options(self)
-        
-    def run(self):    
+
+    def run(self):
         dftinstall_scripts.run(self)
         if self.wrappers:
             for filepath in self.get_outputs():
@@ -574,7 +617,7 @@ call %py_exe% %pyscript% %*
 
 
 class install(dftinstall):
-    
+
     user_options = list(dftinstall.user_options)
     user_options.extend([
             ('install-man=', None, 'installation directory for Unix man pages'),
@@ -586,19 +629,19 @@ class install(dftinstall):
         self.install_html = None
         self.no_doc = None
         dftinstall.initialize_options(self)
-    
+
     def 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 
+        # 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.
-        
+
         dftinstall.finalize_options(self)
         if os.name != "posix":
             if self.install_man is not None:
@@ -619,21 +662,21 @@ class install(dftinstall):
 
     def has_man(self):
         return os.name == "posix"
-    
+
     def has_html(self):
         if self.no_doc:
             return False
         return sphinx is not None
-        
+
     sub_commands = list(dftinstall.sub_commands)
     sub_commands.append(('install_man', has_man))
     sub_commands.append(('install_html', has_html))
 
 
 class build_doc_api(Command):
-    
+
     user_options = []
-    
+
     description = "\"build\" sphinx RST files for API"
 
     def initialize_options (self):
@@ -644,28 +687,36 @@ class build_doc_api(Command):
 
 
     def finalize_options (self):
-        pass 
-        
+        pass
+
     def run(self):
         #print("SKIPPING API");return
         buildcmd = self.get_finalized_command('build_doc')
         name = "auto_rst4api"
         data = imp.find_module(name, [abspath('doc')])
         auto_rst4api = imp.load_module(name, *data)
-        
+
         docpreffix = abspath('doc', 'source', 'devel', 'api')
         templatespath = abspath('doc')
-        rstCreator = auto_rst4api.Auto_rst4API_Creator(exclude_patterns=['.*\.ui', '_[^\.]*[^_]'],
+        excl = ['.*\.ui', '_[^\.]*[^_]', '.*.extra_sardana', '.*.extra_pool', 
+                '.*.extra_macroexecutor', 'taurus.external']
+        rstCreator = auto_rst4api.Auto_rst4API_Creator(exclude_patterns=excl,
                                                        templatespath=templatespath,
                                                        overwrite_old=buildcmd.all_files,
                                                        verbose=self.distribution.verbose)
         if buildcmd.all_files:
-            rstCreator.cleanAutogenerated(docpreffix) #@todo: This may need to be called *only* if --fres-env or --all-files options are given
+            rstCreator.cleanAutogenerated(docpreffix)  #@todo: This may need to be called *only* if --fres-env or --all-files options are given
+
+        # import taurus module from the source to autogenerate the api docs
+        name = 'taurus'
+        data = imp.find_module(name, [abspath('lib')])
+        taurus = imp.load_module(name, *data)
+
         r = rstCreator.documentModule('taurus', docpreffix)
-        out=self.out
-        print("Auto Creation of API docs Finished with %i warnings:"%len(r),file=out)
+        out = self.out
+        print("Auto Creation of API docs Finished with %i warnings:" % len(r), file=out)
         for i in r:
-            print(i,file=out)
+            print(i, file=out)
 
 
 cmdclass = { 'build' : build,
@@ -682,28 +733,28 @@ if sphinx:
     class build_catalog(object):
 
         AllowedExt = build_resources.AllowedExt
-        
+
         HTML_IL = """<tr height="30"><td width="30" align="center"><img width="24" src="%s" alt="%s"/></td><td width="400">%s%s</td><td width="400">%s</td><td width="200">%s</td></tr>\n"""
         HTML_T = '<table border="1" cellspacing="0" cellpadding="2">\n' \
                  '<th colspan="4">Resource: "%s" Directory: "%s"</th>\n' \
                  '<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>\n'
-        
+
         def run(self):
             self.resource_dir = abspath('lib', 'taurus', 'qt', 'qtgui', 'resource')
             self.taurus = os.path.join(self.resource_dir, 'taurus.png')
             orig_dir = os.path.abspath(os.curdir)
             os.chdir(self.resource_dir)
-            
+
             catalog = file('catalog.html', 'w')
             catalog.write("<html><head>\n<title>taurus Icon Catalog</title>\n" \
             "<style>table { border-collapse: collapse; }</style>\n</head>\n<body>\n")
-            
+
             try:
                 cur_dir = os.path.abspath(os.curdir)
-                
+
                 result = self._build_general_res()
                 result2 = self._build_res(cur_dir)
-                
+
                 result[0].extend(result2[0])
                 result[1].extend(result2[1])
 
@@ -723,7 +774,7 @@ if sphinx:
                 if not hasattr(PyQt4.Qt.QIcon, "hasThemeIcon"):
                     return "Unknown"
                 i = resource.rfind("/")
-                if i >= 0: resource = resource[i+1:]
+                if i >= 0: resource = resource[i + 1:]
                 i = resource.rfind(".")
                 if i >= 0: resource = resource[:i]
                 if PyQt4.Qt.QIcon.hasThemeIcon(resource):
@@ -735,7 +786,7 @@ if sphinx:
         def _build_general_res(self):
             out = self.out
             html = '<h2><a name="_base">Base icons</a></h2>\n'
-            html += self.HTML_T % (':/','')
+            html += self.HTML_T % (':/', '')
             anchor = '<a href="#_base">Base icons</a>'
             try:
                 taurus_relpath = os.path.relpath(self.taurus)
@@ -747,9 +798,9 @@ if sphinx:
                 raise e
             finally:
                 html += '</table>\n'
-            
+
             return [ [html], [anchor] ]
-        
+
         def _build_res(self, abs_dir, bases=list()):
             """Builds the resources in the abs_dir recursively.
             The result is a list of 5 items:
@@ -770,12 +821,12 @@ if sphinx:
                     result[1].extend(ret[1])
                 elif os.path.splitext(abs_elem)[1][1:].lower() in build_resources.AllowedExt:
                     local_elems.append(elem)
-            
+
             if local_elems and local_bases[1:]:
                 base_dir = os.path.join(*local_bases[1:])
                 base_filename = "_".join(local_bases[1:])
-                base_filename = base_filename.replace('-','_')
-                
+                base_filename = base_filename.replace('-', '_')
+
                 html = ''
                 anchor = ''
                 try:
@@ -804,25 +855,25 @@ if sphinx:
 
     class build_doc(BuildDoc):
         user_options = BuildDoc.user_options + \
-                     [('external-img-tools', None, 
+                     [('external-img-tools', None,
                        "Use external tools for converting the icon catalog (useful if QApplication cannot be used while building, but requires inkscape and imagemagick)")]
         boolean_options = BuildDoc.boolean_options + ['external-img-tools']
-        
+
         def initialize_options (self):
             BuildDoc.initialize_options(self)
             self.external_img_tools = False
-        
+
         def has_doc_api(self):
             return True
 
         sub_commands = BuildDoc.sub_commands + [(('build_doc_api', has_doc_api))]
-        
+
         def run(self):
             try:
                 return self.doit()
-            except Exception,e:
+            except Exception, e:
                 self.warn("Failed to build doc. Reason: %s" % str(e))
-        
+
         def doit(self):
             if self.distribution.verbose:
                 out = sys.stdout
@@ -833,19 +884,19 @@ if sphinx:
             catalog.verbose = self.distribution.verbose
             catalog.out = out
             catalog.run()
-            
-            resource = abspath('lib','taurus','qt','qtgui','resource')
+
+            resource = abspath('lib', 'taurus', 'qt', 'qtgui', 'resource')
             tango_catalog = os.path.join(resource, 'catalog.html')
             build_dir = os.path.abspath(self.builder_target_dir)
             target = abspath('doc', 'source', 'devel')
             target_catalog = os.path.join(target, 'catalog.html')
-            
+
             # copy the icon catalog.html to the doc directory
             refresh = self.fresh_env or self.all_files
             if not os.path.isfile(target_catalog) or refresh:
-                print("copying",tango_catalog,'->',target_catalog,file=out)
+                print("copying", tango_catalog, '->', target_catalog, file=out)
                 shutil.copyfile(tango_catalog, target_catalog)
-            
+
             # make sure the python path is pointing to the newly built
             # code so that the documentation is built on this and not a
             # previously installed version
@@ -858,19 +909,19 @@ if sphinx:
                 BuildDoc.run(self)
             finally:
                 sys.path.pop(0)
-            
+
             # copy the tango icons to the build directory of documentation
             target = os.path.join(build_dir, 'devel')
-            
+
             if not self.external_img_tools:
                 import PyQt4.Qt
                 if PyQt4.Qt.qApp.instance() is None:
                     self.app = PyQt4.Qt.QApplication([])
-            
-            print("\tBuilding PNGs for icon catalog")   
+
+            print("\tBuilding PNGs for icon catalog")
             os.path.walk(resource, svg_to_png, (resource, target, self.external_img_tools))
             return
-    
+
     cmdclass['build_doc'] = build_doc
 
 def svg_to_png(arg, dirname, fnames):
@@ -882,47 +933,47 @@ def svg_to_png(arg, dirname, fnames):
     if not os.path.isdir(path):
         os.makedirs(path)
     for fname in fnames:
-        fbase, f_ext  = os.path.splitext(fname)
+        fbase, f_ext = os.path.splitext(fname)
         if f_ext[1:] in build_catalog.AllowedExt:
             full_source_fname = os.path.join(dirname, fname)
             target_fname = fbase + ".png"
             full_target_fname = os.path.join(path, target_fname)
             if not os.path.isfile(full_target_fname):
                 if external_img_tools:
-                    cmd = "inkscape -z '%s' -e '%s' -w 24 >/dev/null 2>/dev/null"%(full_source_fname, full_target_fname)
+                    cmd = "inkscape -z '%s' -e '%s' -w 24 >/dev/null 2>/dev/null" % (full_source_fname, full_target_fname)
                     ok = not(os.system(cmd))
                     if not ok:
-                        cmd = "convert -resize 24 '%s' '%s' >/dev/null 2>/dev/null"%(full_source_fname, full_target_fname)
+                        cmd = "convert -resize 24 '%s' '%s' >/dev/null 2>/dev/null" % (full_source_fname, full_target_fname)
                         ok = not(os.system(cmd))
                 else:
                     pixmap = PyQt4.Qt.QPixmap(full_source_fname)
                     pix = pixmap.scaledToWidth(24, PyQt4.Qt.Qt.SmoothTransformation)
                     ok = pix.save(full_target_fname)
-                print(ok and "[OK]" or "[FAIL]", full_source_fname,'->',full_target_fname)
-                
+                print(ok and "[OK]" or "[FAIL]", full_source_fname, '->', full_target_fname)
+
 def main():
-    setup(name             = 'taurus',
-          version          = Release.version,
-          description      = Release.description,
-          long_description = Release.long_description,
-          author           = author[0],
-          author_email     = author[1],
-          maintainer       = maintainer[0],
-          maintainer_email = maintainer[1],
-          url              = Release.url,
-          download_url     = Release.download_url,
-          platforms        = Release.platforms,
-          license          = Release.license,
-          packages         = packages,
-          package_dir      = package_dir,
-          classifiers      = classifiers,
-          package_data     = package_data,
-          data_files       = data_files,
-          scripts          = scripts,
-          provides         = provides,
-          keywords         = Release.keywords,
-          requires         = requires,
-          cmdclass         = cmdclass)
+    setup(name='taurus',
+          version=Release.version,
+          description=Release.description,
+          long_description=Release.long_description,
+          author=author[0],
+          author_email=author[1],
+          maintainer=maintainer[0],
+          maintainer_email=maintainer[1],
+          url=Release.url,
+          download_url=Release.download_url,
+          platforms=Release.platforms,
+          license=Release.license,
+          packages=packages,
+          package_dir=package_dir,
+          classifiers=classifiers,
+          package_data=package_data,
+          data_files=data_files,
+          scripts=scripts,
+          provides=provides,
+          keywords=Release.keywords,
+          requires=requires,
+          cmdclass=cmdclass)
 
 if __name__ == "__main__":
     try:

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



More information about the debian-science-commits mailing list