[taurus] 01/01: Imported Upstream version 2.2.0

Frédéric-Emmanuel Picca picca at moszumanska.debian.org
Wed Aug 6 12:47:16 UTC 2014


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

picca pushed a commit to annotated tag upstream/2.2.0
in repository taurus.

commit 615e568656255ca4e984f8b1b4df25467967fb78
Author: Frédéric-Emmanuel PICCA <picca at synchrotron-soleil.fr>
Date:   Fri Dec 2 18:06:53 2011 +0100

    Imported Upstream version 2.2.0
---
 PKG-INFO                                           |    2 +-
 doc/api_class.rst                                  |    3 +-
 doc/api_class_simple.rst                           |    3 +-
 doc/source/_static/forms-pendingops01.png          |  Bin 0 -> 32098 bytes
 doc/source/_static/forms03.png                     |  Bin 0 -> 36541 bytes
 doc/source/_static/macrogui01.png                  |  Bin 0 -> 119855 bytes
 doc/source/_static/macros/Thumbs.db                |  Bin 0 -> 83968 bytes
 doc/source/_static/macros/favouriteeditor01.png    |  Bin 0 -> 12205 bytes
 doc/source/_static/macros/macroexecutor01.odg      |  Bin 0 -> 42236 bytes
 doc/source/_static/macros/macroexecutor01.png      |  Bin 0 -> 1111166 bytes
 doc/source/_static/macros/macroexecutor01_raw.png  |  Bin 0 -> 21869 bytes
 .../_static/macros/macroparameterseditor01.png     |  Bin 0 -> 8124 bytes
 .../_static/macros/macroparameterseditor02.png     |  Bin 0 -> 7635 bytes
 .../_static/macros/macroparameterseditor03.odg     |  Bin 0 -> 20268 bytes
 .../_static/macros/macroparameterseditor03.png     |  Bin 0 -> 604944 bytes
 .../_static/macros/macroparameterseditor03_raw.png |  Bin 0 -> 7773 bytes
 .../_static/macros/macroparameterseditor04.odg     |  Bin 0 -> 23179 bytes
 .../_static/macros/macroparameterseditor04.png     |  Bin 0 -> 604944 bytes
 .../_static/macros/macroparameterseditor04_raw.png |  Bin 0 -> 10110 bytes
 .../_static/macros/macroparameterseditor05.odg     |  Bin 0 -> 22524 bytes
 .../_static/macros/macroparameterseditor05.png     |  Bin 0 -> 604944 bytes
 doc/source/_static/macros/sequenceeditor01.png     |  Bin 0 -> 13687 bytes
 doc/source/_static/macros/sequenceeditor02.odg     |  Bin 0 -> 27793 bytes
 doc/source/_static/macros/sequenceeditor02.png     |  Bin 0 -> 672669 bytes
 doc/source/_static/macros/sequenceeditor02_raw.png |  Bin 0 -> 13687 bytes
 doc/source/_static/macros/sequenceeditor03.odg     |  Bin 0 -> 30108 bytes
 doc/source/_static/macros/sequenceeditor03.png     |  Bin 0 -> 628299 bytes
 doc/source/_static/macros/sequenceeditor03_raw.png |  Bin 0 -> 15806 bytes
 doc/source/_static/macros/sequenceeditor04.odg     |  Bin 0 -> 29610 bytes
 doc/source/_static/macros/sequenceeditor04.png     |  Bin 0 -> 628299 bytes
 doc/source/_static/macros/sequenceeditor05_raw.png |  Bin 0 -> 19830 bytes
 doc/source/_static/macros/sequencer01.odg          |  Bin 0 -> 47998 bytes
 doc/source/_static/macros/sequencer01.png          |  Bin 0 -> 1233154 bytes
 doc/source/_static/macros/sequencer01_raw.png      |  Bin 0 -> 29047 bytes
 doc/source/_static/perspectives-toolbar01.png      |  Bin 0 -> 4841 bytes
 doc/source/_static/synoptic01.png                  |  Bin 0 -> 65788 bytes
 doc/source/_static/taurusgui-newpanel01.png        |  Bin 0 -> 88874 bytes
 doc/source/_static/taurusgui-permanentpanels01.png |  Bin 0 -> 30721 bytes
 doc/source/_static/taurusgui01.png                 |  Bin 0 -> 308329 bytes
 doc/source/_static/taurusimage01.png               |  Bin 0 -> 34376 bytes
 doc/source/_templates/layout.html                  |    4 +-
 doc/source/devel/api/taurus.rst                    |   29 -
 doc/source/devel/api/taurus/core.rst               |  257 --
 .../api/taurus/core/_AbstractTangoValidator.rst    |   13 -
 .../api/taurus/core/_AttributeNameValidator.rst    |   13 -
 .../taurus/core/_ConfigurationNameValidator.rst    |   13 -
 .../api/taurus/core/_DatabaseNameValidator.rst     |   13 -
 .../devel/api/taurus/core/_DeviceNameValidator.rst |   13 -
 doc/source/devel/api/taurus/core/_TauAttrInfo.rst  |   13 -
 doc/source/devel/api/taurus/core/_TauAttrValue.rst |   13 -
 doc/source/devel/api/taurus/core/_TauAttribute.rst |   13 -
 .../devel/api/taurus/core/_TauConfigValue.rst      |   13 -
 .../devel/api/taurus/core/_TauConfiguration.rst    |   13 -
 .../api/taurus/core/_TauConfigurationProxy.rst     |   13 -
 doc/source/devel/api/taurus/core/_TauDatabase.rst  |   13 -
 .../devel/api/taurus/core/_TauDatabaseCache.rst    |   13 -
 .../devel/api/taurus/core/_TauDevClassInfo.rst     |   13 -
 doc/source/devel/api/taurus/core/_TauDevInfo.rst   |   13 -
 doc/source/devel/api/taurus/core/_TauDevTree.rst   |   13 -
 doc/source/devel/api/taurus/core/_TauDevice.rst    |   13 -
 doc/source/devel/api/taurus/core/_TauException.rst |   13 -
 .../api/taurus/core/_TauExceptionListener.rst      |   13 -
 doc/source/devel/api/taurus/core/_TauFactory.rst   |   13 -
 doc/source/devel/api/taurus/core/_TauInfo.rst      |   13 -
 doc/source/devel/api/taurus/core/_TauListener.rst  |   13 -
 doc/source/devel/api/taurus/core/_TauManager.rst   |   13 -
 doc/source/devel/api/taurus/core/_TauOperation.rst |   13 -
 .../devel/api/taurus/core/_TauPollingTimer.rst     |   13 -
 doc/source/devel/api/taurus/core/_TauServInfo.rst  |   13 -
 .../devel/api/taurus/core/_TauServerTree.rst       |   13 -
 .../devel/api/taurus/core/_TauStateAttribute.rst   |   13 -
 .../devel/api/taurus/core/_TaurusAttrInfo.rst      |   13 -
 .../devel/api/taurus/core/_TaurusAttrValue.rst     |   13 -
 .../devel/api/taurus/core/_TaurusAttribute.rst     |   13 -
 .../devel/api/taurus/core/_TaurusConfigValue.rst   |   13 -
 .../devel/api/taurus/core/_TaurusConfiguration.rst |   13 -
 .../api/taurus/core/_TaurusConfigurationProxy.rst  |   13 -
 .../devel/api/taurus/core/_TaurusDatabase.rst      |   13 -
 .../devel/api/taurus/core/_TaurusDatabaseCache.rst |   13 -
 .../devel/api/taurus/core/_TaurusDevClassInfo.rst  |   13 -
 .../devel/api/taurus/core/_TaurusDevInfo.rst       |   13 -
 .../devel/api/taurus/core/_TaurusDevTree.rst       |   13 -
 doc/source/devel/api/taurus/core/_TaurusDevice.rst |   13 -
 .../devel/api/taurus/core/_TaurusException.rst     |   13 -
 .../api/taurus/core/_TaurusExceptionListener.rst   |   13 -
 .../devel/api/taurus/core/_TaurusFactory.rst       |   13 -
 doc/source/devel/api/taurus/core/_TaurusInfo.rst   |   13 -
 .../devel/api/taurus/core/_TaurusListener.rst      |   13 -
 .../devel/api/taurus/core/_TaurusManager.rst       |   13 -
 doc/source/devel/api/taurus/core/_TaurusModel.rst  |   13 -
 .../devel/api/taurus/core/_TaurusOperation.rst     |   13 -
 .../devel/api/taurus/core/_TaurusPollingTimer.rst  |   13 -
 .../devel/api/taurus/core/_TaurusServInfo.rst      |   13 -
 .../devel/api/taurus/core/_TaurusServerTree.rst    |   13 -
 .../api/taurus/core/_TaurusStateAttribute.rst      |   13 -
 .../devel/api/taurus/core/_WriteAttrOperation.rst  |   13 -
 doc/source/devel/api/taurus/core/resource.rst      |   35 -
 .../devel/api/taurus/core/resource/_ModuleDict.rst |   13 -
 .../api/taurus/core/resource/_ResourcesFactory.rst |   13 -
 doc/source/devel/api/taurus/core/simulation.rst    |   47 -
 .../core/simulation/_SimulationAttribute.rst       |   13 -
 .../core/simulation/_SimulationConfiguration.rst   |   13 -
 .../taurus/core/simulation/_SimulationDatabase.rst |   13 -
 .../taurus/core/simulation/_SimulationDevice.rst   |   13 -
 .../taurus/core/simulation/_SimulationFactory.rst  |   13 -
 doc/source/devel/api/taurus/core/tango.rst         |   79 -
 .../api/taurus/core/tango/_TangoAttribute.rst      |   13 -
 .../core/tango/_TangoAttributeEventListener.rst    |   13 -
 .../api/taurus/core/tango/_TangoConfiguration.rst  |   13 -
 .../devel/api/taurus/core/tango/_TangoDatabase.rst |   13 -
 .../api/taurus/core/tango/_TangoDatabaseCache.rst  |   13 -
 .../devel/api/taurus/core/tango/_TangoDevInfo.rst  |   13 -
 .../devel/api/taurus/core/tango/_TangoDevice.rst   |   13 -
 .../devel/api/taurus/core/tango/_TangoFactory.rst  |   13 -
 .../devel/api/taurus/core/tango/_TangoServInfo.rst |   13 -
 .../api/taurus/core/tango/_TangoStateAttribute.rst |   13 -
 doc/source/devel/api/taurus/core/tango/img.rst     |   57 -
 .../devel/api/taurus/core/tango/img/_CCDPVCAM.rst  |   13 -
 .../taurus/core/tango/img/_ImageCounterDevice.rst  |   13 -
 .../api/taurus/core/tango/img/_ImageDevice.rst     |   13 -
 .../api/taurus/core/tango/img/_ImgBeamAnalyzer.rst |   13 -
 .../api/taurus/core/tango/img/_ImgGrabber.rst      |   13 -
 .../api/taurus/core/tango/img/_PyImageViewer.rst   |   13 -
 .../devel/api/taurus/core/tango/macroserver.rst    |   53 -
 .../taurus/core/tango/macroserver/_BaseDoor.rst    |   13 -
 .../core/tango/macroserver/_BaseMacroServer.rst    |   13 -
 .../api/taurus/core/tango/macroserver/_Macro.rst   |   13 -
 .../taurus/core/tango/macroserver/_MacroInfo.rst   |   13 -
 .../taurus/core/tango/macroserver/_MacroNode.rst   |   13 -
 doc/source/devel/api/taurus/core/tango/sardana.rst |   55 -
 .../core/tango/sardana/_ControllerClassInfo.rst    |   13 -
 .../taurus/core/tango/sardana/_ControllerInfo.rst  |   13 -
 .../devel/api/taurus/core/tango/sardana/_Door.rst  |   13 -
 .../api/taurus/core/tango/sardana/_MacroServer.rst |   13 -
 .../devel/api/taurus/core/tango/sardana/_Pool.rst  |   13 -
 .../api/taurus/core/tango/sardana/_Sardana.rst     |   13 -
 .../taurus/core/tango/sardana/_SardanaManager.rst  |   13 -
 doc/source/devel/api/taurus/core/tauv1.rst         |   17 -
 doc/source/devel/api/taurus/core/util.rst          |  239 --
 .../devel/api/taurus/core/util/_ArrayBuffer.rst    |   13 -
 .../api/taurus/core/util/_AttributeEventWait.rst   |   13 -
 .../devel/api/taurus/core/util/_BZ2Codec.rst       |   13 -
 .../api/taurus/core/util/_BoundMethodWeakref.rst   |   13 -
 .../api/taurus/core/util/_CaselessDefaultDict.rst  |   13 -
 .../devel/api/taurus/core/util/_CaselessDict.rst   |   13 -
 .../devel/api/taurus/core/util/_CaselessList.rst   |   13 -
 .../taurus/core/util/_CaselessWeakValueDict.rst    |   13 -
 doc/source/devel/api/taurus/core/util/_CircBuf.rst |   13 -
 doc/source/devel/api/taurus/core/util/_Codec.rst   |   13 -
 .../devel/api/taurus/core/util/_CodecFactory.rst   |   13 -
 .../devel/api/taurus/core/util/_CodecPipeline.rst  |   13 -
 .../devel/api/taurus/core/util/_ColorPalette.rst   |   13 -
 .../api/taurus/core/util/_ConfigEventGenerator.rst |   13 -
 .../devel/api/taurus/core/util/_CriticalIt.rst     |   13 -
 doc/source/devel/api/taurus/core/util/_DebugIt.rst |   13 -
 .../api/taurus/core/util/_DefaultThreadDict.rst    |   13 -
 .../devel/api/taurus/core/util/_EnumException.rst  |   13 -
 .../devel/api/taurus/core/util/_Enumeration.rst    |   13 -
 doc/source/devel/api/taurus/core/util/_ErrorIt.rst |   13 -
 .../devel/api/taurus/core/util/_EventGenerator.rst |   13 -
 .../devel/api/taurus/core/util/_EventListener.rst  |   13 -
 .../devel/api/taurus/core/util/_FunctionCodec.rst  |   13 -
 doc/source/devel/api/taurus/core/util/_InfoIt.rst  |   13 -
 .../devel/api/taurus/core/util/_JSONCodec.rst      |   13 -
 doc/source/devel/api/taurus/core/util/_LIFO.rst    |   13 -
 .../api/taurus/core/util/_ListEventGenerator.rst   |   13 -
 .../devel/api/taurus/core/util/_LogFilter.rst      |   13 -
 doc/source/devel/api/taurus/core/util/_LogIt.rst   |   13 -
 doc/source/devel/api/taurus/core/util/_Logger.rst  |   13 -
 .../devel/api/taurus/core/util/_LoopList.rst       |   13 -
 .../api/taurus/core/util/_MemoryLogHandler.rst     |   13 -
 .../devel/api/taurus/core/util/_NullCodec.rst      |   13 -
 doc/source/devel/api/taurus/core/util/_Object.rst  |   13 -
 .../devel/api/taurus/core/util/_PlotCodec.rst      |   13 -
 .../devel/api/taurus/core/util/_SafeEvaluator.rst  |   13 -
 .../devel/api/taurus/core/util/_Singleton.rst      |   13 -
 .../devel/api/taurus/core/util/_ThreadDict.rst     |   13 -
 .../devel/api/taurus/core/util/_ThreadPool.rst     |   13 -
 .../devel/api/taurus/core/util/_TimedQueue.rst     |   13 -
 doc/source/devel/api/taurus/core/util/_Timer.rst   |   13 -
 doc/source/devel/api/taurus/core/util/_TraceIt.rst |   13 -
 doc/source/devel/api/taurus/core/util/_WarnIt.rst  |   13 -
 doc/source/devel/api/taurus/core/util/_Worker.rst  |   13 -
 .../devel/api/taurus/core/util/_ZIPCodec.rst       |   13 -
 .../api/taurus/core/util/_defaultdict_fromkey.rst  |   13 -
 doc/source/devel/api/taurus/core/util/argparse.rst |   27 -
 doc/source/devel/api/taurus/core/utils.rst         |   17 -
 doc/source/devel/api/taurus/qt.rst                 |   33 -
 doc/source/devel/api/taurus/qt/qtcore.rst          |   35 -
 .../devel/api/taurus/qt/qtcore/communication.rst   |   35 -
 .../taurus/qt/qtcore/communication/_DataModel.rst  |   13 -
 .../qt/qtcore/communication/_SharedDataManager.rst |   13 -
 .../devel/api/taurus/qt/qtcore/configuration.rst   |   35 -
 .../configuration/_BaseConfigurableClass.rst       |   13 -
 .../qtcore/configuration/_configurableProperty.rst |   13 -
 .../devel/api/taurus/qt/qtcore/mimetypes.rst       |   17 -
 doc/source/devel/api/taurus/qt/qtcore/model.rst    |  111 -
 .../taurus/qt/qtcore/model/_TaurusDbBaseModel.rst  |   13 -
 .../qt/qtcore/model/_TaurusDbBaseProxyModel.rst    |   13 -
 .../qt/qtcore/model/_TaurusDbDeviceClassModel.rst  |   13 -
 .../model/_TaurusDbDeviceClassProxyModel.rst       |   13 -
 .../qt/qtcore/model/_TaurusDbDeviceModel.rst       |   13 -
 .../qt/qtcore/model/_TaurusDbDeviceProxyModel.rst  |   13 -
 .../qt/qtcore/model/_TaurusDbPlainDeviceModel.rst  |   13 -
 .../qt/qtcore/model/_TaurusDbServerModel.rst       |   13 -
 .../qt/qtcore/model/_TaurusDbServerProxyModel.rst  |   13 -
 .../qt/qtcore/model/_TaurusDbSimpleDeviceModel.rst |   13 -
 .../qt/qtcore/model/_TaurusTreeAttributeItem.rst   |   13 -
 .../qt/qtcore/model/_TaurusTreeDeviceClassItem.rst |   13 -
 .../qtcore/model/_TaurusTreeDeviceDomainItem.rst   |   13 -
 .../qtcore/model/_TaurusTreeDeviceFamilyItem.rst   |   13 -
 .../qt/qtcore/model/_TaurusTreeDeviceItem.rst      |   13 -
 .../qtcore/model/_TaurusTreeDeviceMemberItem.rst   |   13 -
 .../qt/qtcore/model/_TaurusTreeDevicePartItem.rst  |   13 -
 .../api/taurus/qt/qtcore/model/_TaurusTreeItem.rst |   13 -
 .../qt/qtcore/model/_TaurusTreeServerItem.rst      |   13 -
 .../qt/qtcore/model/_TaurusTreeServerNameItem.rst  |   13 -
 .../qtcore/model/_TaurusTreeSimpleDeviceItem.rst   |   13 -
 doc/source/devel/api/taurus/qt/qtcore/tango.rst    |   25 -
 .../api/taurus/qt/qtcore/tango/macroserver.rst     |   41 -
 .../taurus/qt/qtcore/tango/macroserver/_QDoor.rst  |   13 -
 .../qt/qtcore/tango/macroserver/_QMacroServer.rst  |   13 -
 doc/source/devel/api/taurus/qt/qtcore/util.rst     |   25 -
 doc/source/devel/api/taurus/qt/qtdesigner.rst      |   25 -
 .../api/taurus/qt/qtdesigner/taurusplugin.rst      |   37 -
 .../taurusplugin/_TaurusWidgetPlugin.rst           |   13 -
 doc/source/devel/api/taurus/qt/qtgui.rst           |   73 -
 .../devel/api/taurus/qt/qtgui/application.rst      |   31 -
 .../qt/qtgui/application/_TaurusApplication.rst    |   13 -
 doc/source/devel/api/taurus/qt/qtgui/base.rst      |   69 -
 .../base/_TaurusAttributeControllerHelper.rst      |   13 -
 .../taurus/qt/qtgui/base/_TaurusBaseComponent.rst  |   13 -
 .../taurus/qt/qtgui/base/_TaurusBaseController.rst |   13 -
 .../api/taurus/qt/qtgui/base/_TaurusBaseWidget.rst |   13 -
 .../qt/qtgui/base/_TaurusBaseWritableWidget.rst    |   13 -
 .../base/_TaurusConfigurationControllerHelper.rst  |   13 -
 .../api/taurus/qt/qtgui/base/_TaurusQAttribute.rst |   13 -
 .../qt/qtgui/base/_TaurusQAttributeFactory.rst     |   13 -
 .../_TaurusScalarAttributeControllerHelper.rst     |   13 -
 doc/source/devel/api/taurus/qt/qtgui/button.rst    |   39 -
 .../api/taurus/qt/qtgui/button/_QButtonBox.rst     |   13 -
 .../qt/qtgui/button/_TaurusCommandButton.rst       |   13 -
 .../qt/qtgui/button/_TaurusLauncherButton.rst      |   13 -
 doc/source/devel/api/taurus/qt/qtgui/container.rst |   59 -
 .../taurus/qt/qtgui/container/_QGroupWidget.rst    |   13 -
 .../qt/qtgui/container/_TaurusBaseContainer.rst    |   13 -
 .../api/taurus/qt/qtgui/container/_TaurusFrame.rst |   13 -
 .../taurus/qt/qtgui/container/_TaurusGroupBox.rst  |   13 -
 .../qt/qtgui/container/_TaurusGroupWidget.rst      |   13 -
 .../qt/qtgui/container/_TaurusMainWindow.rst       |   13 -
 .../qt/qtgui/container/_TaurusScrollArea.rst       |   13 -
 .../taurus/qt/qtgui/container/_TaurusWidget.rst    |   13 -
 doc/source/devel/api/taurus/qt/qtgui/dialog.rst    |   31 -
 .../taurus/qt/qtgui/dialog/_TaurusMessageBox.rst   |   13 -
 doc/source/devel/api/taurus/qt/qtgui/display.rst   |   91 -
 .../api/taurus/qt/qtgui/display/_Q7SegDigit.rst    |   13 -
 .../devel/api/taurus/qt/qtgui/display/_QLed.rst    |   13 -
 .../devel/api/taurus/qt/qtgui/display/_QLedOld.rst |   13 -
 .../devel/api/taurus/qt/qtgui/display/_QLogo.rst   |   13 -
 .../api/taurus/qt/qtgui/display/_QPixmapWidget.rst |   13 -
 .../api/taurus/qt/qtgui/display/_TaurusBoolLed.rst |   13 -
 .../taurus/qt/qtgui/display/_TaurusConfigLabel.rst |   13 -
 .../api/taurus/qt/qtgui/display/_TaurusLCD.rst     |   13 -
 .../taurus/qt/qtgui/display/_TaurusLCDValue.rst    |   13 -
 .../api/taurus/qt/qtgui/display/_TaurusLabel.rst   |   13 -
 .../api/taurus/qt/qtgui/display/_TaurusLed.rst     |   13 -
 .../taurus/qt/qtgui/display/_TaurusStateLabel.rst  |   13 -
 .../taurus/qt/qtgui/display/_TaurusStateLed.rst    |   13 -
 .../taurus/qt/qtgui/display/_TaurusValueLabel.rst  |   13 -
 .../devel/api/taurus/qt/qtgui/display/demo.rst     |   17 -
 .../api/taurus/qt/qtgui/extra_macroexecutor.rst    |   67 -
 .../qt/qtgui/extra_macroexecutor/_DoorDebug.rst    |   13 -
 .../qt/qtgui/extra_macroexecutor/_DoorOutput.rst   |   13 -
 .../qt/qtgui/extra_macroexecutor/_DoorResult.rst   |   13 -
 .../_TaurusMacroConfigurationDialog.rst            |   13 -
 .../_TaurusMacroDescriptionViewer.rst              |   13 -
 .../extra_macroexecutor/_TaurusMacroExecutor.rst   |   13 -
 .../_TaurusMacroExecutorWidget.rst                 |   13 -
 .../qtgui/extra_macroexecutor/favouriteseditor.rst |   31 -
 .../favouriteseditor/_FavouritesMacrosEditor.rst   |   13 -
 .../extra_macroexecutor/macroparameterseditor.rst  |   47 -
 .../macroparameterseditor/_ParamEditorManager.rst  |   13 -
 .../macroparameterseditor/_ParamEditorModel.rst    |   13 -
 .../_StandardMacroParametersEditor.rst             |   13 -
 .../macroparameterseditor/customeditors.rst        |   31 -
 .../customeditors/_SenvEditor.rst                  |   13 -
 .../qtgui/extra_macroexecutor/sequenceeditor.rst   |   35 -
 .../sequenceeditor/_TaurusSequencer.rst            |   13 -
 .../sequenceeditor/_TaurusSequencerWidget.rst      |   13 -
 .../devel/api/taurus/qt/qtgui/extra_nexus.rst      |   31 -
 .../qt/qtgui/extra_nexus/_TaurusNeXusBrowser.rst   |   13 -
 .../devel/api/taurus/qt/qtgui/extra_pool.rst       |   51 -
 .../taurus/qt/qtgui/extra_pool/_PoolChannel.rst    |   13 -
 .../taurus/qt/qtgui/extra_pool/_PoolMotorSlim.rst  |   13 -
 .../taurus/qt/qtgui/extra_pool/_TaurusMotorH.rst   |   13 -
 .../taurus/qt/qtgui/extra_pool/_TaurusMotorH2.rst  |   13 -
 .../taurus/qt/qtgui/extra_pool/_TaurusMotorV.rst   |   13 -
 .../taurus/qt/qtgui/extra_pool/_TaurusMotorV2.rst  |   13 -
 .../devel/api/taurus/qt/qtgui/extra_sardana.rst    |   35 -
 .../qt/qtgui/extra_sardana/_SardanaShell.rst       |   13 -
 .../qt/qtgui/extra_sardana/_SardanaShellWidget.rst |   13 -
 .../api/taurus/qt/qtgui/extra_taurusservers.rst    |   17 -
 .../devel/api/taurus/qt/qtgui/extra_xterm.rst      |   31 -
 .../taurus/qt/qtgui/extra_xterm/_QXTermWidget.rst  |   13 -
 doc/source/devel/api/taurus/qt/qtgui/gauge.rst     |   49 -
 .../api/taurus/qt/qtgui/gauge/_QBaseMeter.rst      |   13 -
 .../api/taurus/qt/qtgui/gauge/_QManoMeter.rst      |   13 -
 .../devel/api/taurus/qt/qtgui/gauge/demo.rst       |   17 -
 doc/source/devel/api/taurus/qt/qtgui/graphic.rst   |   95 -
 .../qtgui/graphic/_TaurusBaseGraphicsFactory.rst   |   13 -
 .../qt/qtgui/graphic/_TaurusEllipseStateItem.rst   |   13 -
 .../qtgui/graphic/_TaurusGraphicsAttributeItem.rst |   13 -
 .../qt/qtgui/graphic/_TaurusGraphicsItem.rst       |   13 -
 .../qt/qtgui/graphic/_TaurusGraphicsScene.rst      |   13 -
 .../qt/qtgui/graphic/_TaurusGraphicsStateItem.rst  |   13 -
 .../qt/qtgui/graphic/_TaurusGraphicsStateItem2.rst |   13 -
 .../qtgui/graphic/_TaurusGraphicsUpdateThread.rst  |   13 -
 .../qt/qtgui/graphic/_TaurusGraphicsView.rst       |   13 -
 .../qt/qtgui/graphic/_TaurusGroupStateItem.rst     |   13 -
 .../qt/qtgui/graphic/_TaurusPolygonStateItem.rst   |   13 -
 .../qt/qtgui/graphic/_TaurusRectStateItem.rst      |   13 -
 .../qt/qtgui/graphic/_TaurusTextAttributeItem.rst  |   13 -
 .../qt/qtgui/graphic/_TaurusTextStateItem.rst      |   13 -
 .../api/taurus/qt/qtgui/graphic/_newDialog.rst     |   13 -
 .../devel/api/taurus/qt/qtgui/graphic/jdraw.rst    |   35 -
 .../graphic/jdraw/_TaurusJDrawGraphicsFactory.rst  |   13 -
 .../graphic/jdraw/_TaurusJDrawSynopticsView.rst    |   13 -
 doc/source/devel/api/taurus/qt/qtgui/image.rst     |   17 -
 doc/source/devel/api/taurus/qt/qtgui/input.rst     |   67 -
 .../taurus/qt/qtgui/input/_GraphicalChoiceDlg.rst  |   13 -
 .../qt/qtgui/input/_GraphicalChoiceWidget.rst      |   13 -
 .../api/taurus/qt/qtgui/input/_QWheelEdit.rst      |   13 -
 .../qt/qtgui/input/_TaurusAttrListComboBox.rst     |   13 -
 .../qt/qtgui/input/_TaurusConfigLineEdit.rst       |   13 -
 .../taurus/qt/qtgui/input/_TaurusValueCheckBox.rst |   13 -
 .../taurus/qt/qtgui/input/_TaurusValueComboBox.rst |   13 -
 .../taurus/qt/qtgui/input/_TaurusValueLineEdit.rst |   13 -
 .../taurus/qt/qtgui/input/_TaurusValueSpinBox.rst  |   13 -
 .../api/taurus/qt/qtgui/input/_TaurusWheelEdit.rst |   13 -
 doc/source/devel/api/taurus/qt/qtgui/panel.rst     |  133 -
 .../taurus/qt/qtgui/panel/_DefaultLabelWidget.rst  |   13 -
 .../qt/qtgui/panel/_DefaultTaurusValueCheckBox.rst |   13 -
 .../taurus/qt/qtgui/panel/_DefaultUnitsWidget.rst  |   13 -
 .../taurus/qt/qtgui/panel/_QDataExportDialog.rst   |   13 -
 .../api/taurus/qt/qtgui/panel/_QRawDataWidget.rst  |   13 -
 .../qt/qtgui/panel/_TangoMessageErrorHandler.rst   |   13 -
 .../qt/qtgui/panel/_TaurusArrayEditorButton.rst    |   13 -
 .../api/taurus/qt/qtgui/panel/_TaurusAttrForm.rst  |   13 -
 .../qt/qtgui/panel/_TaurusAttributeChooser.rst     |   13 -
 .../qt/qtgui/panel/_TaurusAttributeChooserOLD.rst  |   13 -
 .../taurus/qt/qtgui/panel/_TaurusCommandsForm.rst  |   13 -
 .../api/taurus/qt/qtgui/panel/_TaurusDevButton.rst |   13 -
 .../api/taurus/qt/qtgui/panel/_TaurusDevPanel.rst  |   13 -
 .../api/taurus/qt/qtgui/panel/_TaurusForm.rst      |   13 -
 .../qt/qtgui/panel/_TaurusMessageErrorHandler.rst  |   13 -
 .../taurus/qt/qtgui/panel/_TaurusMessagePanel.rst  |   13 -
 .../taurus/qt/qtgui/panel/_TaurusModelChooser.rst  |   13 -
 .../qt/qtgui/panel/_TaurusModelSelectorTree.rst    |   13 -
 .../taurus/qt/qtgui/panel/_TaurusPlotButton.rst    |   13 -
 .../taurus/qt/qtgui/panel/_TaurusStatusLabel.rst   |   13 -
 .../api/taurus/qt/qtgui/panel/_TaurusValue.rst     |   13 -
 .../taurus/qt/qtgui/panel/_TaurusValuesFrame.rst   |   13 -
 .../qt/qtgui/panel/_TaurusValuesTableButton.rst    |   13 -
 doc/source/devel/api/taurus/qt/qtgui/panel/ui.rst  |   17 -
 doc/source/devel/api/taurus/qt/qtgui/plot.rst      |  117 -
 .../api/taurus/qt/qtgui/plot/_ArrayEditor.rst      |   13 -
 .../qt/qtgui/plot/_CurveAppearanceProperties.rst   |   13 -
 .../taurus/qt/qtgui/plot/_CurvePropertiesView.rst  |   13 -
 .../qt/qtgui/plot/_CurvesAppearanceChooser.rst     |   13 -
 .../taurus/qt/qtgui/plot/_DateTimeScaleEngine.rst  |   13 -
 .../api/taurus/qt/qtgui/plot/_FancyScaleDraw.rst   |   13 -
 .../taurus/qt/qtgui/plot/_FixedLabelsScaleDraw.rst |   13 -
 .../qt/qtgui/plot/_FixedLabelsScaleEngine.rst      |   13 -
 .../api/taurus/qt/qtgui/plot/_ScanTrendsSet.rst    |   13 -
 .../taurus/qt/qtgui/plot/_TaurusArrayEditor.rst    |   13 -
 .../api/taurus/qt/qtgui/plot/_TaurusCurve.rst      |   13 -
 .../taurus/qt/qtgui/plot/_TaurusCurveMarker.rst    |   13 -
 .../taurus/qt/qtgui/plot/_TaurusMonitorTiny.rst    |   13 -
 .../devel/api/taurus/qt/qtgui/plot/_TaurusPlot.rst |   13 -
 .../qt/qtgui/plot/_TaurusPlotConfigDialog.rst      |   13 -
 .../taurus/qt/qtgui/plot/_TaurusTimeScaleDraw.rst  |   13 -
 .../api/taurus/qt/qtgui/plot/_TaurusTrend.rst      |   13 -
 .../api/taurus/qt/qtgui/plot/_TaurusTrendsSet.rst  |   13 -
 .../api/taurus/qt/qtgui/plot/_TaurusXValues.rst    |   13 -
 doc/source/devel/api/taurus/qt/qtgui/plot/ui.rst   |   17 -
 doc/source/devel/api/taurus/qt/qtgui/resource.rst  |   47 -
 doc/source/devel/api/taurus/qt/qtgui/shell.rst     |   47 -
 .../api/taurus/qt/qtgui/shell/_SpockShell.rst      |   13 -
 .../taurus/qt/qtgui/shell/_SpockShellWidget.rst    |   13 -
 .../taurus/qt/qtgui/shell/_TaurusPythonShell.rst   |   13 -
 .../qt/qtgui/shell/_TaurusPythonShellWidget.rst    |   13 -
 .../api/taurus/qt/qtgui/shell/_TaurusShell.rst     |   13 -
 doc/source/devel/api/taurus/qt/qtgui/table.rst     |   51 -
 .../api/taurus/qt/qtgui/table/_QLoggingTable.rst   |   13 -
 .../taurus/qt/qtgui/table/_QLoggingTableModel.rst  |   13 -
 .../api/taurus/qt/qtgui/table/_QLoggingWidget.rst  |   13 -
 .../api/taurus/qt/qtgui/table/_TaurusGrid.rst      |   13 -
 .../api/taurus/qt/qtgui/table/_TaurusPropTable.rst |   13 -
 .../taurus/qt/qtgui/table/_TaurusValuesTable.rst   |   13 -
 doc/source/devel/api/taurus/qt/qtgui/taurusgui.rst |   67 -
 .../taurus/qt/qtgui/taurusgui/_DockWidgetPanel.rst |   13 -
 .../api/taurus/qt/qtgui/taurusgui/_ExternalApp.rst |   13 -
 .../qt/qtgui/taurusgui/_PanelDescription.rst       |   13 -
 .../qt/qtgui/taurusgui/_PanelDescriptionWizard.rst |   13 -
 .../qtgui/taurusgui/_PermanentCustomPanelsDlg.rst  |   13 -
 .../api/taurus/qt/qtgui/taurusgui/_TaurusGui.rst   |   13 -
 .../devel/api/taurus/qt/qtgui/taurusgui/conf.rst   |   27 -
 .../qt/qtgui/taurusgui/conf/tgconf_example01.rst   |   17 -
 .../qt/qtgui/taurusgui/conf/tgconf_macrogui.rst    |   17 -
 .../devel/api/taurus/qt/qtgui/taurusgui/ui.rst     |   17 -
 doc/source/devel/api/taurus/qt/qtgui/tree.rst      |   39 -
 .../api/taurus/qt/qtgui/tree/_QDbTreeWidget.rst    |   13 -
 .../taurus/qt/qtgui/tree/_TaurusDbTreeWidget.rst   |   13 -
 .../api/taurus/qt/qtgui/tree/_TaurusDevTree.rst    |   13 -
 doc/source/devel/api/taurus/qt/qtgui/ui.rst        |   17 -
 doc/source/devel/api/taurus/qt/qtgui/util.rst      |   91 -
 .../api/taurus/qt/qtgui/util/_ActionFactory.rst    |   13 -
 .../qt/qtgui/util/_AttributeAllConfigAction.rst    |   13 -
 .../qt/qtgui/util/_AttributeDisplayAction.rst      |   13 -
 .../qt/qtgui/util/_AttributeHistoryAction.rst      |   13 -
 .../qt/qtgui/util/_AttributeImageDisplayAction.rst |   13 -
 .../api/taurus/qt/qtgui/util/_AttributeMenu.rst    |   13 -
 .../qtgui/util/_AttributeMonitorDeviceAction.rst   |   13 -
 .../qt/qtgui/util/_AttributeRangesAction.rst       |   13 -
 .../taurus/qt/qtgui/util/_AttributeUnitsAction.rst |   13 -
 .../taurus/qt/qtgui/util/_ConfigurationMenu.rst    |   13 -
 .../taurus/qt/qtgui/util/_ExternalAppAction.rst    |   13 -
 .../api/taurus/qt/qtgui/util/_QtColorPalette.rst   |   13 -
 .../api/taurus/qt/qtgui/util/_SeparatorAction.rst  |   13 -
 .../api/taurus/qt/qtgui/util/_TaurusAction.rst     |   13 -
 .../devel/api/taurus/qt/qtgui/util/_TaurusMenu.rst |   13 -
 .../taurus/qt/qtgui/util/_TaurusWidgetFactory.rst  |   13 -
 doc/source/devel/api/taurus/qt/qtopengl.rst        |   17 -
 doc/source/devel/api/taurus/qt/uic.rst             |   17 -
 doc/source/devel/api/taurus/widget.rst             |   17 -
 doc/source/devel/api/taurus_AllClasses.rst         |  667 -----
 doc/source/devel/catalog.html                      |  835 ------
 doc/source/index.rst                               |    8 +-
 doc/source/sphinxext/taurusextension.py            |    4 +-
 doc/source/users/ui/arrayeditor.rst                |   27 +-
 doc/source/users/ui/forms.rst                      |  224 +-
 doc/source/users/ui/index.rst                      |    2 +
 doc/source/users/ui/macros/index.rst               |   11 +
 doc/source/users/ui/macros/macroexecutor.rst       |  152 +
 doc/source/users/ui/macros/sequencer.rst           |  123 +
 doc/source/users/ui/plot.rst                       |   23 +-
 doc/source/users/ui/synoptics.rst                  |   12 +
 doc/source/users/ui/taurusgui.rst                  |  320 ++
 doc/source/users/ui/taurusimage.rst                |   63 +-
 doc/source/users/ui/trend.rst                      |   33 +
 lib/taurus/TaurusCustomSettings.py                 |   48 +
 .../taurusgui => lib/taurus/console/__init__.py    |    5 +-
 .../macroserver/__init__.py => console/enums.py}   |   27 +-
 lib/taurus/console/list.py                         |  188 ++
 lib/taurus/console/table.py                        |  164 +
 .../taurus/console/util/__init__.py                |    3 +-
 lib/taurus/core/__init__.py                        |    1 +
 lib/taurus/core/enums.py                           |   74 +-
 lib/taurus/core/evaluation/__init__.py             |  155 +
 lib/taurus/core/evaluation/dev_example.py          |   81 +
 lib/taurus/core/evaluation/evalfactory.py          |  930 ++++++
 lib/taurus/core/evaluation/ipap_example.py         |   97 +
 lib/taurus/core/release.py                         |    6 +-
 lib/taurus/core/simulation/__init__.py             |    2 +-
 lib/taurus/core/simulation/simfactory.py           |    7 +-
 lib/taurus/core/tango/enums.py                     |    6 +-
 lib/taurus/core/tango/img/__init__.py              |    3 +-
 lib/taurus/core/tango/img/img.py                   |   30 +-
 lib/taurus/core/tango/macroserver/__init__.py      |   37 -
 lib/taurus/core/tango/sardana/__init__.py          |    9 +-
 .../core/tango/{macroserver => sardana}/macro.py   |   15 +-
 .../tango/{macroserver => sardana}/macroserver.py  |  593 ++--
 lib/taurus/core/tango/sardana/motion.py            |  494 ++++
 lib/taurus/core/tango/sardana/pool.py              | 1531 ++++++++++
 lib/taurus/core/tango/sardana/sardana.py           |  210 +-
 lib/taurus/core/tango/tangoattribute.py            |   60 +-
 lib/taurus/core/tango/tangoconfiguration.py        |  165 +-
 lib/taurus/core/tango/tangodatabase.py             |    5 +-
 lib/taurus/core/tango/tangodevice.py               |   58 +-
 lib/taurus/core/tango/tangofactory.py              |  223 +-
 lib/taurus/core/taurusattribute.py                 |    6 +-
 lib/taurus/core/taurusbasetypes.py                 |  149 +
 lib/taurus/core/taurusconfiguration.py             |  105 +-
 lib/taurus/core/taurusdatabase.py                  |    5 +-
 lib/taurus/core/taurusdevice.py                    |   35 +-
 lib/taurus/core/taurusexception.py                 |    6 +-
 lib/taurus/core/taurusfactory.py                   |   69 +-
 lib/taurus/core/taurushelper.py                    |   50 +-
 lib/taurus/core/taurusmanager.py                   |   52 +-
 lib/taurus/core/taurusmodel.py                     |   37 +-
 lib/taurus/core/tauruspollingtimer.py              |   22 +-
 lib/taurus/core/taurusvalidator.py                 |    8 +-
 lib/taurus/core/util/__init__.py                   |    1 +
 lib/taurus/core/util/argparse/taurusargparse.py    |   17 +-
 lib/taurus/core/util/codecs.py                     |  169 +-
 lib/taurus/core/util/console.py                    |  103 +-
 lib/taurus/core/util/containers.py                 |    6 +-
 lib/taurus/core/util/enumeration.py                |   26 +-
 lib/taurus/core/util/event.py                      |   63 +-
 .../core/{__init__.py => util/excepthook.py}       |   43 +-
 lib/taurus/core/util/lock.py                       |  102 +
 lib/taurus/core/util/log.py                        |  103 +-
 lib/taurus/core/util/safeeval.py                   |   10 +-
 lib/taurus/core/util/sourcecode.py                 |   66 +
 lib/taurus/core/util/threadpool.py                 |   53 +-
 .../qt/{qtgui/extra_sardana/__init__.py => Qt.py}  |   12 +-
 .../tango/macroserver/__init__.py => QtCore.py}    |   28 +-
 .../{qtgui/extra_sardana/__init__.py => QtGui.py}  |   11 +-
 .../{qtgui/extra_sardana/__init__.py => QtSvg.py}  |   11 +-
 lib/taurus/qt/__init__.py                          |   11 +
 .../qt/qtcore/communication/communication.py       |    3 +-
 .../qt/qtcore/configuration/configuration.py       |   27 +-
 lib/taurus/qt/qtcore/model/__init__.py             |    1 +
 lib/taurus/qt/qtcore/model/taurusdatabasemodel.py  |  445 +--
 lib/taurus/qt/qtcore/model/taurusmodel.py          |  393 +++
 .../tango/sardana}/__init__.py                     |   13 +-
 .../tango/{macroserver => sardana}/macroserver.py  |   84 +-
 lib/taurus/qt/qtcore/tango/sardana/model.py        |  313 ++
 lib/taurus/qt/qtcore/tango/sardana/pool.py         |   93 +
 lib/taurus/qt/qtcore/util/tauruslog.py             |   15 +-
 .../extraguiqwtplugin.py}                          |   11 +-
 .../qt/qtdesigner/taurusplugin/taurusplugin.py     |    3 +-
 lib/taurus/qt/qtdesigner/tauruspluginplugin.py     |    8 +-
 .../qt/qtgui/application/taurusapplication.py      |  144 +-
 lib/taurus/qt/qtgui/base/taurusbase.py             |  117 +-
 lib/taurus/qt/qtgui/base/tauruscontroller.py       |   66 +-
 lib/taurus/qt/qtgui/base/taurusqattribute.py       |    9 +-
 lib/taurus/qt/qtgui/button/qbuttonbox.py           |    2 +-
 lib/taurus/qt/qtgui/button/taurusbutton.py         |  137 +-
 .../qtgui/{extra_sardana => console}/__init__.py   |    9 +-
 lib/taurus/qt/qtgui/console/taurusconsole.py       |   70 +
 lib/taurus/qt/qtgui/container/qcontainer.py        |   19 +-
 .../qt/qtgui/container/taurusbasecontainer.py      |    2 +-
 lib/taurus/qt/qtgui/container/taurusframe.py       |    3 +-
 lib/taurus/qt/qtgui/container/taurusgroupbox.py    |    3 +-
 lib/taurus/qt/qtgui/container/taurusgroupwidget.py |    3 +-
 lib/taurus/qt/qtgui/container/taurusmainwindow.py  |  398 ++-
 lib/taurus/qt/qtgui/container/taurusscrollarea.py  |    3 +-
 lib/taurus/qt/qtgui/container/tauruswidget.py      |    3 +-
 lib/taurus/qt/qtgui/dialog/taurusmessagebox.py     |  194 +-
 lib/taurus/qt/qtgui/display/__init__.py            |    1 +
 .../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           |   69 +
 lib/taurus/qt/qtgui/display/qled.py                |    4 +-
 lib/taurus/qt/qtgui/display/qlogo.py               |    3 +-
 lib/taurus/qt/qtgui/display/qpixmapwidget.py       |    5 +-
 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         |   88 +-
 lib/taurus/qt/qtgui/display/tauruslcd.py           |    2 +-
 lib/taurus/qt/qtgui/display/tauruslcdvalue.py      |    2 +-
 lib/taurus/qt/qtgui/display/taurusled.py           |    4 +-
 lib/taurus/qt/qtgui/display/taurusstateled.py      |    3 +-
 lib/taurus/qt/qtgui/display/taurusvaluelabel.py    |   10 +-
 .../qt/qtgui/{extra_sardana => editor}/__init__.py |    9 +-
 lib/taurus/qt/qtgui/editor/tauruseditor.py         |  244 ++
 .../{extra_sardana => extra_guiqwt}/__init__.py    |    6 +-
 lib/taurus/qt/qtgui/extra_guiqwt/builder.py        |  171 ++
 lib/taurus/qt/qtgui/extra_guiqwt/curve.py          |  353 +++
 lib/taurus/qt/qtgui/extra_guiqwt/curvesmodel.py    |  440 +++
 lib/taurus/qt/qtgui/extra_guiqwt/image.py          |  440 +++
 lib/taurus/qt/qtgui/extra_guiqwt/plot.py           |  577 ++++
 lib/taurus/qt/qtgui/extra_guiqwt/styles.py         |   72 +
 lib/taurus/qt/qtgui/extra_guiqwt/taurustrend2d.py  |  248 ++
 lib/taurus/qt/qtgui/extra_guiqwt/tools.py          |  247 ++
 .../qt/qtgui/extra_guiqwt/ui/CurveItemConfDlg.ui   |  156 +
 .../taurus/qt/qtgui/extra_guiqwt/ui/__init__.py    |    6 +-
 .../qtgui/extra_guiqwt/ui/ui_CurveItemConfDlg.py   |  100 +
 .../qt/qtgui/extra_macroexecutor/__init__.py       |    3 +-
 lib/taurus/qt/qtgui/extra_macroexecutor/common.py  |   62 +-
 .../qt/qtgui/extra_macroexecutor/dooroutput.py     |  279 +-
 .../favouriteseditor/favouriteseditor.py           |    2 +-
 .../extra_macroexecutor/favouriteseditor/model.py  |    5 +-
 .../qt/qtgui/extra_macroexecutor/macrobutton.py    |  247 ++
 .../extra_macroexecutor/macrodescriptionviewer.py  |    5 +-
 .../qt/qtgui/extra_macroexecutor/macroeditor.py    |    3 +-
 .../qt/qtgui/extra_macroexecutor/macroexecutor.py  |  134 +-
 .../macroparameterseditor/customeditors/senv.py    |   37 +-
 .../macroparameterseditor/delegate.py              |    7 +-
 .../macroparameterseditor/macroparameterseditor.py |    5 +-
 .../macroparameterseditor/model.py                 |    4 +-
 .../macroparameterseditor/parameditors.py          |    3 +-
 .../qt/qtgui/extra_macroexecutor/scanplotter.py    |    5 +-
 .../extra_macroexecutor/sequenceeditor/__init__.py |    2 +-
 .../extra_macroexecutor/sequenceeditor/delegate.py |    4 +-
 .../extra_macroexecutor/sequenceeditor/model.py    |    4 +-
 .../sequenceeditor/sequenceeditor.py               |  131 +-
 .../qt/qtgui/extra_macroexecutor/ui/compile_UIs.sh |    3 +
 .../qt/qtgui/extra_macroexecutor/ui/macrobutton.ui |   93 +
 .../qt/qtgui/extra_macroexecutor/ui_macrobutton.py |   61 +
 .../qt/qtgui/extra_nexus/taurusnexuswidget.py      |   47 +-
 lib/taurus/qt/qtgui/extra_pool/__init__.py         |    7 +-
 lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh      |    1 +
 lib/taurus/qt/qtgui/extra_pool/motor.py            |    2 +-
 lib/taurus/qt/qtgui/extra_pool/poolchannel.py      |   56 +-
 lib/taurus/qt/qtgui/extra_pool/poolioregister.py   |  295 ++
 lib/taurus/qt/qtgui/extra_pool/poolmotor.py        |  887 +++++-
 lib/taurus/qt/qtgui/extra_pool/poolmotor.py.tests  |    2 +-
 .../qtgui/extra_pool/ui/poolioregisterbuttons.ui   |   49 +
 .../qtgui/extra_pool/ui_poolioregisterbuttons.py   |   50 +
 lib/taurus/qt/qtgui/extra_sardana/__init__.py      |    4 +-
 lib/taurus/qt/qtgui/extra_sardana/cmdline.py       |    2 +-
 .../qt/qtgui/extra_sardana/controllertree.py       |  346 +++
 lib/taurus/qt/qtgui/extra_sardana/elementtree.py   |   91 +
 .../qt/qtgui/extra_sardana/expdescription.py       |  243 ++
 lib/taurus/qt/qtgui/extra_sardana/macrotree.py     |  320 ++
 .../qt/qtgui/extra_sardana/measurementgroup.py     |  808 +++++
 .../qt/qtgui/extra_sardana/sardanabasewizard.py    |   82 +
 lib/taurus/qt/qtgui/extra_sardana/sardanaeditor.py |  431 +++
 .../qtgui/extra_sardana/ui/ExpDescriptionEditor.ui |  151 +
 .../taurus/qt/qtgui/extra_sardana/ui/__init__.py   |    3 -
 .../extra_sardana/ui/ui_ExpDescriptionEditor.py    |  102 +
 .../extra_taurusservers/taurusserverswidget.py     |    2 +-
 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                |    4 +-
 lib/taurus/qt/qtgui/gauge/taurusgauge.py           |    2 +-
 lib/taurus/qt/qtgui/graphic/jdraw/jdraw.py         |    2 +-
 lib/taurus/qt/qtgui/graphic/jdraw/jdraw_view.py    |    6 +-
 lib/taurus/qt/qtgui/graphic/taurusgraphic.py       |    6 +-
 lib/taurus/qt/qtgui/graphic/taurusgraphicview.py   |    2 +-
 lib/taurus/qt/qtgui/image/__init__.py              |    7 +-
 lib/taurus/qt/qtgui/image/taurusimage.py           |  101 -
 lib/taurus/qt/qtgui/image/taurusqub.py             |    2 +-
 lib/taurus/qt/qtgui/input/choicedlg.py             |    2 +-
 lib/taurus/qt/qtgui/input/qwheel.py                |    4 +-
 lib/taurus/qt/qtgui/input/tauruscheckbox.py        |    2 +-
 lib/taurus/qt/qtgui/input/tauruscombobox.py        |    8 +-
 lib/taurus/qt/qtgui/input/tauruslineedit.py        |  278 +-
 lib/taurus/qt/qtgui/input/taurusspinbox.py         |   79 +-
 lib/taurus/qt/qtgui/input/tauruswheel.py           |    2 +-
 .../tango/sardana => qt/qtgui/model}/__init__.py   |    4 +-
 lib/taurus/qt/qtgui/model/qbasemodel.py            |  504 ++++
 lib/taurus/qt/qtgui/panel/__init__.py              |    1 +
 lib/taurus/qt/qtgui/panel/qdataexportdialog.py     |    2 +-
 lib/taurus/qt/qtgui/panel/qrawdatachooser.py       |    2 +-
 .../qt/qtgui/panel/taurusattributechooser.py       |    3 +-
 lib/taurus/qt/qtgui/panel/taurusconfigbrowser.py   |    2 +-
 lib/taurus/qt/qtgui/panel/taurusdevicepanel.py     |    2 +-
 lib/taurus/qt/qtgui/panel/taurusfilterpanel.py     |    2 +-
 lib/taurus/qt/qtgui/panel/taurusform.py            |  156 +-
 lib/taurus/qt/qtgui/panel/taurusmessagepanel.py    |  118 +-
 lib/taurus/qt/qtgui/panel/taurusmodelchooser.py    |  136 +-
 lib/taurus/qt/qtgui/panel/taurusmodellist.py       |  330 +++
 lib/taurus/qt/qtgui/panel/taurusvalue.py           |  289 +-
 lib/taurus/qt/qtgui/panel/ui/TaurusMessagePanel.ui |   51 +-
 .../qt/qtgui/panel/ui/ui_TaurusMessagePanel.py     |   50 +-
 lib/taurus/qt/qtgui/plot/arrayedit.py              |    3 +-
 lib/taurus/qt/qtgui/plot/curveprops.py             |   13 +-
 .../qt/qtgui/plot/curvesAppearanceChooserDlg.py    |   10 +-
 lib/taurus/qt/qtgui/plot/monitor.py                |    5 +-
 lib/taurus/qt/qtgui/plot/qwtdialog.py              |   26 +-
 lib/taurus/qt/qtgui/plot/scales.py                 |  232 ++
 lib/taurus/qt/qtgui/plot/taurusarrayedit.py        |    2 +-
 lib/taurus/qt/qtgui/plot/taurusplot.py             |  124 +-
 lib/taurus/qt/qtgui/plot/taurusplotNG.py           |  101 -
 lib/taurus/qt/qtgui/plot/taurusplotconf.py         |   13 +-
 lib/taurus/qt/qtgui/plot/taurustrend.py            |  418 ++-
 lib/taurus/qt/qtgui/resource/catalog.html          |  835 ------
 lib/taurus/qt/qtgui/resource/external/class.png    |  Bin 0 -> 377 bytes
 lib/taurus/qt/qtgui/resource/external/function.png |  Bin 0 -> 407 bytes
 .../qt/qtgui/resource/external/python-module.png   |  Bin 0 -> 654 bytes
 .../qt/qtgui/resource/external/python-package.png  |  Bin 0 -> 226347 bytes
 .../extra-icons/actions/collapse-selection.png     |  Bin 0 -> 712 bytes
 .../resource/extra-icons/actions/collapse.png      |  Bin 0 -> 596 bytes
 .../extra-icons/actions/expand-selection.png       |  Bin 0 -> 728 bytes
 .../qtgui/resource/extra-icons/actions/expand.png  |  Bin 0 -> 607 bytes
 .../extra-icons/actions/media_playback_stop.svg    |  868 ++++--
 .../extra-icons/leds/images256/led_white_off.png   |  Bin 0 -> 262963 bytes
 .../extra-icons/leds/images256/led_white_on.png    |  Bin 0 -> 29566 bytes
 .../qt/qtgui/resource/extra-icons/lock_locked.svg  | 2874 ++++++++++++++++++
 .../extra-icons/lock_locked_unpreviledged.svg      | 2985 +++++++++++++++++++
 .../qt/qtgui/resource/extra-icons/lock_unknown.svg | 3023 +++++++++++++++++++
 .../qtgui/resource/extra-icons/lock_unlocked.svg   | 3117 ++++++++++++++++++++
 .../qtgui/resource/extra-icons/titlebar_close.png  |  Bin 0 -> 690 bytes
 .../resource/extra-icons/titlebar_close_black.png  |  Bin 0 -> 724 bytes
 .../resource/extra-icons/titlebar_close_gray.png   |  Bin 0 -> 724 bytes
 .../resource/extra-icons/titlebar_close_white.png  |  Bin 0 -> 219 bytes
 .../qtgui/resource/extra-icons/titlebar_undock.png |  Bin 0 -> 690 bytes
 .../resource/extra-icons/titlebar_undock_black.png |  Bin 0 -> 724 bytes
 .../resource/extra-icons/titlebar_undock_gray.png  |  Bin 0 -> 724 bytes
 .../resource/extra-icons/titlebar_undock_white.png |  Bin 0 -> 214 bytes
 .../qt/qtgui/resource/taurus_resource_utils.py     |   37 +-
 lib/taurus/qt/qtgui/shell/__init__.py              |    9 +-
 lib/taurus/qt/qtgui/shell/taurusshell.py           |    2 +-
 .../{core/tango/img => qt/qtgui/style}/__init__.py |   34 +-
 lib/taurus/qt/qtgui/style/nebula.py                |  185 ++
 lib/taurus/qt/qtgui/table/__init__.py              |    3 +
 lib/taurus/qt/qtgui/table/qlogtable.py             |   12 +-
 .../img/__init__.py => qt/qtgui/table/qtable.py}   |   29 +-
 lib/taurus/qt/qtgui/table/taurusdbtable.py         |  122 +
 .../qt/qtgui/table/taurusdevicepropertytable.py    |    3 +-
 lib/taurus/qt/qtgui/table/taurusgrid.py            |    3 +-
 .../__init__.py => qtgui/table/taurustable.py}     |   44 +-
 lib/taurus/qt/qtgui/table/taurusvaluestable.py     |    2 +-
 .../qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py |    2 +-
 lib/taurus/qt/qtgui/taurusgui/__init__.py          |    2 +
 .../{app_settings_wizard => }/appsettingswizard.py |   73 +-
 .../taurusgui/conf/tgconf_example01/config.py      |   48 +-
 lib/taurus/qt/qtgui/taurusgui/macrolistener.py     |  228 ++
 .../qt/qtgui/taurusgui/paneldescriptionwizard.py   |  134 +-
 lib/taurus/qt/qtgui/taurusgui/parser.out           |  762 -----
 lib/taurus/qt/qtgui/taurusgui/parsetab.py          |   62 -
 lib/taurus/qt/qtgui/taurusgui/taurusgui.py         |  991 ++++---
 .../qt/qtgui/taurusgui/ui/PanelAssociationsDlg.ui  |  174 ++
 .../qtgui/taurusgui/ui/ui_PanelAssociationsDlg.py  |   90 +
 lib/taurus/qt/qtgui/taurusgui/utils.py             |   69 +-
 lib/taurus/qt/qtgui/tree/__init__.py               |    2 +
 lib/taurus/qt/qtgui/tree/qtree.py                  |  379 +++
 lib/taurus/qt/qtgui/tree/taurusdbtree.py           |  553 +---
 lib/taurus/qt/qtgui/tree/taurusdevicetree.py       |    3 +-
 .../taurusgraphicview.py => tree/taurustree.py}    |   45 +-
 lib/taurus/qt/qtgui/util/__init__.py               |    3 +-
 lib/taurus/qt/qtgui/util/taurusaction.py           |    3 +-
 lib/taurus/qt/qtgui/util/taurusactionfactory.py    |   32 +-
 lib/taurus/qt/qtgui/util/tauruscolor.py            |    2 +-
 lib/taurus/qt/qtgui/util/taurusropepatch.py        |   95 +
 lib/taurus/qt/qtgui/util/taurusscreenshot.py       |  135 +
 lib/taurus/qt/qtgui/util/tauruswidget_template     |    2 +-
 lib/taurus/qt/qtgui/util/tauruswidgetfactory.py    |   30 +-
 lib/taurus/qt/taurusqtoptions.py                   |   93 +
 lib/taurus/qt/uic/__init__.py                      |   54 +-
 scripts/{taurusgui => macroexecutor}               |    4 +-
 scripts/{taurusgui => sequencer}                   |    4 +-
 .../__init__.py => scripts/tauruscurve             |   10 +-
 scripts/taurusgui                                  |    2 +-
 .../__init__.py => scripts/taurusimage             |   10 +-
 .../__init__.py => scripts/taurustrend1d           |   10 +-
 .../__init__.py => scripts/taurustrend2d           |   10 +-
 setup.py                                           |   57 +-
 734 files changed, 34183 insertions(+), 14800 deletions(-)

diff --git a/PKG-INFO b/PKG-INFO
index 80cf44e..ae66aeb 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: taurus
-Version: 2.1.1
+Version: 2.2.0
 Summary: A library designed to provide an abstraction layer over PyTango.
 Home-page: http://packages.python.org/taurus
 Author: Tiago Coutinho
diff --git a/doc/api_class.rst b/doc/api_class.rst
index a248baf..f34c117 100644
--- a/doc/api_class.rst
+++ b/doc/api_class.rst
@@ -8,4 +8,5 @@
     
 .. autoclass:: {{ classname }}
     :members:
-    :undoc-members:
\ No newline at end of file
+    :undoc-members:
+    :show-inheritance:
\ No newline at end of file
diff --git a/doc/api_class_simple.rst b/doc/api_class_simple.rst
index 92174dc..c45afc8 100644
--- a/doc/api_class_simple.rst
+++ b/doc/api_class_simple.rst
@@ -9,4 +9,5 @@ It may differ from the final documentation.
 
 .. autoclass:: {{ classname }}
     :members:
-    :undoc-members:
\ No newline at end of file
+    :undoc-members:
+    :show-inheritance:
diff --git a/doc/source/_static/forms-pendingops01.png b/doc/source/_static/forms-pendingops01.png
new file mode 100644
index 0000000..0cd3a20
Binary files /dev/null and b/doc/source/_static/forms-pendingops01.png differ
diff --git a/doc/source/_static/forms03.png b/doc/source/_static/forms03.png
new file mode 100644
index 0000000..256571d
Binary files /dev/null and b/doc/source/_static/forms03.png differ
diff --git a/doc/source/_static/macrogui01.png b/doc/source/_static/macrogui01.png
new file mode 100644
index 0000000..733075e
Binary files /dev/null and b/doc/source/_static/macrogui01.png differ
diff --git a/doc/source/_static/macros/Thumbs.db b/doc/source/_static/macros/Thumbs.db
new file mode 100755
index 0000000..0fe85de
Binary files /dev/null and b/doc/source/_static/macros/Thumbs.db differ
diff --git a/doc/source/_static/macros/favouriteeditor01.png b/doc/source/_static/macros/favouriteeditor01.png
new file mode 100644
index 0000000..808e060
Binary files /dev/null and b/doc/source/_static/macros/favouriteeditor01.png differ
diff --git a/doc/source/_static/macros/macroexecutor01.odg b/doc/source/_static/macros/macroexecutor01.odg
new file mode 100644
index 0000000..75113e2
Binary files /dev/null and b/doc/source/_static/macros/macroexecutor01.odg differ
diff --git a/doc/source/_static/macros/macroexecutor01.png b/doc/source/_static/macros/macroexecutor01.png
new file mode 100644
index 0000000..055b58f
Binary files /dev/null and b/doc/source/_static/macros/macroexecutor01.png differ
diff --git a/doc/source/_static/macros/macroexecutor01_raw.png b/doc/source/_static/macros/macroexecutor01_raw.png
new file mode 100644
index 0000000..a244370
Binary files /dev/null and b/doc/source/_static/macros/macroexecutor01_raw.png differ
diff --git a/doc/source/_static/macros/macroparameterseditor01.png b/doc/source/_static/macros/macroparameterseditor01.png
new file mode 100644
index 0000000..69ba02a
Binary files /dev/null and b/doc/source/_static/macros/macroparameterseditor01.png differ
diff --git a/doc/source/_static/macros/macroparameterseditor02.png b/doc/source/_static/macros/macroparameterseditor02.png
new file mode 100644
index 0000000..8847a38
Binary files /dev/null and b/doc/source/_static/macros/macroparameterseditor02.png differ
diff --git a/doc/source/_static/macros/macroparameterseditor03.odg b/doc/source/_static/macros/macroparameterseditor03.odg
new file mode 100644
index 0000000..1002357
Binary files /dev/null and b/doc/source/_static/macros/macroparameterseditor03.odg differ
diff --git a/doc/source/_static/macros/macroparameterseditor03.png b/doc/source/_static/macros/macroparameterseditor03.png
new file mode 100644
index 0000000..10ed847
Binary files /dev/null and b/doc/source/_static/macros/macroparameterseditor03.png differ
diff --git a/doc/source/_static/macros/macroparameterseditor03_raw.png b/doc/source/_static/macros/macroparameterseditor03_raw.png
new file mode 100644
index 0000000..db86a09
Binary files /dev/null and b/doc/source/_static/macros/macroparameterseditor03_raw.png differ
diff --git a/doc/source/_static/macros/macroparameterseditor04.odg b/doc/source/_static/macros/macroparameterseditor04.odg
new file mode 100644
index 0000000..244c2a5
Binary files /dev/null and b/doc/source/_static/macros/macroparameterseditor04.odg differ
diff --git a/doc/source/_static/macros/macroparameterseditor04.png b/doc/source/_static/macros/macroparameterseditor04.png
new file mode 100644
index 0000000..c908572
Binary files /dev/null and b/doc/source/_static/macros/macroparameterseditor04.png differ
diff --git a/doc/source/_static/macros/macroparameterseditor04_raw.png b/doc/source/_static/macros/macroparameterseditor04_raw.png
new file mode 100644
index 0000000..86c2a57
Binary files /dev/null and b/doc/source/_static/macros/macroparameterseditor04_raw.png differ
diff --git a/doc/source/_static/macros/macroparameterseditor05.odg b/doc/source/_static/macros/macroparameterseditor05.odg
new file mode 100644
index 0000000..8007ac6
Binary files /dev/null and b/doc/source/_static/macros/macroparameterseditor05.odg differ
diff --git a/doc/source/_static/macros/macroparameterseditor05.png b/doc/source/_static/macros/macroparameterseditor05.png
new file mode 100644
index 0000000..ab65c57
Binary files /dev/null and b/doc/source/_static/macros/macroparameterseditor05.png differ
diff --git a/doc/source/_static/macros/sequenceeditor01.png b/doc/source/_static/macros/sequenceeditor01.png
new file mode 100644
index 0000000..34dbcfa
Binary files /dev/null and b/doc/source/_static/macros/sequenceeditor01.png differ
diff --git a/doc/source/_static/macros/sequenceeditor02.odg b/doc/source/_static/macros/sequenceeditor02.odg
new file mode 100644
index 0000000..5f4cedb
Binary files /dev/null and b/doc/source/_static/macros/sequenceeditor02.odg differ
diff --git a/doc/source/_static/macros/sequenceeditor02.png b/doc/source/_static/macros/sequenceeditor02.png
new file mode 100644
index 0000000..89b9db3
Binary files /dev/null and b/doc/source/_static/macros/sequenceeditor02.png differ
diff --git a/doc/source/_static/macros/sequenceeditor02_raw.png b/doc/source/_static/macros/sequenceeditor02_raw.png
new file mode 100644
index 0000000..34dbcfa
Binary files /dev/null and b/doc/source/_static/macros/sequenceeditor02_raw.png differ
diff --git a/doc/source/_static/macros/sequenceeditor03.odg b/doc/source/_static/macros/sequenceeditor03.odg
new file mode 100644
index 0000000..497a5f6
Binary files /dev/null and b/doc/source/_static/macros/sequenceeditor03.odg differ
diff --git a/doc/source/_static/macros/sequenceeditor03.png b/doc/source/_static/macros/sequenceeditor03.png
new file mode 100644
index 0000000..b51ab80
Binary files /dev/null and b/doc/source/_static/macros/sequenceeditor03.png differ
diff --git a/doc/source/_static/macros/sequenceeditor03_raw.png b/doc/source/_static/macros/sequenceeditor03_raw.png
new file mode 100644
index 0000000..06acb0b
Binary files /dev/null and b/doc/source/_static/macros/sequenceeditor03_raw.png differ
diff --git a/doc/source/_static/macros/sequenceeditor04.odg b/doc/source/_static/macros/sequenceeditor04.odg
new file mode 100644
index 0000000..3493675
Binary files /dev/null and b/doc/source/_static/macros/sequenceeditor04.odg differ
diff --git a/doc/source/_static/macros/sequenceeditor04.png b/doc/source/_static/macros/sequenceeditor04.png
new file mode 100644
index 0000000..cada20e
Binary files /dev/null and b/doc/source/_static/macros/sequenceeditor04.png differ
diff --git a/doc/source/_static/macros/sequenceeditor05_raw.png b/doc/source/_static/macros/sequenceeditor05_raw.png
new file mode 100644
index 0000000..abc285c
Binary files /dev/null and b/doc/source/_static/macros/sequenceeditor05_raw.png differ
diff --git a/doc/source/_static/macros/sequencer01.odg b/doc/source/_static/macros/sequencer01.odg
new file mode 100644
index 0000000..37868ec
Binary files /dev/null and b/doc/source/_static/macros/sequencer01.odg differ
diff --git a/doc/source/_static/macros/sequencer01.png b/doc/source/_static/macros/sequencer01.png
new file mode 100644
index 0000000..8a563d8
Binary files /dev/null and b/doc/source/_static/macros/sequencer01.png differ
diff --git a/doc/source/_static/macros/sequencer01_raw.png b/doc/source/_static/macros/sequencer01_raw.png
new file mode 100644
index 0000000..a14b78c
Binary files /dev/null and b/doc/source/_static/macros/sequencer01_raw.png differ
diff --git a/doc/source/_static/perspectives-toolbar01.png b/doc/source/_static/perspectives-toolbar01.png
new file mode 100644
index 0000000..6669eb5
Binary files /dev/null and b/doc/source/_static/perspectives-toolbar01.png differ
diff --git a/doc/source/_static/synoptic01.png b/doc/source/_static/synoptic01.png
new file mode 100644
index 0000000..3e28922
Binary files /dev/null and b/doc/source/_static/synoptic01.png differ
diff --git a/doc/source/_static/taurusgui-newpanel01.png b/doc/source/_static/taurusgui-newpanel01.png
new file mode 100644
index 0000000..3474caa
Binary files /dev/null and b/doc/source/_static/taurusgui-newpanel01.png differ
diff --git a/doc/source/_static/taurusgui-permanentpanels01.png b/doc/source/_static/taurusgui-permanentpanels01.png
new file mode 100644
index 0000000..4af432f
Binary files /dev/null and b/doc/source/_static/taurusgui-permanentpanels01.png differ
diff --git a/doc/source/_static/taurusgui01.png b/doc/source/_static/taurusgui01.png
new file mode 100644
index 0000000..b5497a5
Binary files /dev/null and b/doc/source/_static/taurusgui01.png differ
diff --git a/doc/source/_static/taurusimage01.png b/doc/source/_static/taurusimage01.png
new file mode 100644
index 0000000..b43fde1
Binary files /dev/null and b/doc/source/_static/taurusimage01.png differ
diff --git a/doc/source/_templates/layout.html b/doc/source/_templates/layout.html
index 6caffd0..0243cb9 100644
--- a/doc/source/_templates/layout.html
+++ b/doc/source/_templates/layout.html
@@ -13,11 +13,11 @@
         <tr>
             <td align='left'>
                 <a href="{{ pathto('index') }}">
-                    <img src="{{ pathto("_static/logo.png", 1) }}" border="0" alt="tau"/>
+                    <img src="{{ pathto("_static/logo.png", 1) }}" border="0" alt="taurus"/>
                 </a>
             </td>
             <td align='right'>
-                <img src="{{ pathto("_static/taurus_codelogo01.png", 1) }}" border="0" alt="tau"/>
+                <img src="{{ pathto("_static/taurus_codelogo01.png", 1) }}" border="0" alt="taurus"/>
             </td>
         </tr>
     </table>
diff --git a/doc/source/devel/api/taurus.rst b/doc/source/devel/api/taurus.rst
deleted file mode 100644
index 6fb6ec2..0000000
--- a/doc/source/devel/api/taurus.rst
+++ /dev/null
@@ -1,29 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus
-
-:mod:`taurus`
-=============
-
-.. automodule:: taurus
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    core <taurus/core>
-
-    qt <taurus/qt>
-
-    widget <taurus/widget>
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/core.rst b/doc/source/devel/api/taurus/core.rst
deleted file mode 100644
index c1242fa..0000000
--- a/doc/source/devel/api/taurus/core.rst
+++ /dev/null
@@ -1,257 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:mod:`taurus.core`
-==================
-
-.. automodule:: taurus.core
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    resource <core/resource>
-
-    simulation <core/simulation>
-
-    tango <core/tango>
-
-    tauv1 <core/tauv1>
-
-    util <core/util>
-
-    utils <core/utils>
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    core/_AbstractTangoValidator.rst
-
-    core/_AttributeNameValidator.rst
-
-    core/_ConfigurationNameValidator.rst
-
-    core/_DatabaseNameValidator.rst
-
-    core/_DeviceNameValidator.rst
-
-    core/_TauAttrInfo.rst
-
-    core/_TauAttrValue.rst
-
-    core/_TauAttribute.rst
-
-    core/_TauConfigValue.rst
-
-    core/_TauConfiguration.rst
-
-    core/_TauConfigurationProxy.rst
-
-    core/_TauDatabase.rst
-
-    core/_TauDatabaseCache.rst
-
-    core/_TauDevClassInfo.rst
-
-    core/_TauDevInfo.rst
-
-    core/_TauDevTree.rst
-
-    core/_TauDevice.rst
-
-    core/_TauException.rst
-
-    core/_TauExceptionListener.rst
-
-    core/_TauFactory.rst
-
-    core/_TauInfo.rst
-
-    core/_TauListener.rst
-
-    core/_TauManager.rst
-
-    core/_TauOperation.rst
-
-    core/_TauPollingTimer.rst
-
-    core/_TauServInfo.rst
-
-    core/_TauServerTree.rst
-
-    core/_TauStateAttribute.rst
-
-    core/_TaurusAttrInfo.rst
-
-    core/_TaurusAttrValue.rst
-
-    core/_TaurusAttribute.rst
-
-    core/_TaurusConfigValue.rst
-
-    core/_TaurusConfiguration.rst
-
-    core/_TaurusConfigurationProxy.rst
-
-    core/_TaurusDatabase.rst
-
-    core/_TaurusDatabaseCache.rst
-
-    core/_TaurusDevClassInfo.rst
-
-    core/_TaurusDevInfo.rst
-
-    core/_TaurusDevTree.rst
-
-    core/_TaurusDevice.rst
-
-    core/_TaurusException.rst
-
-    core/_TaurusExceptionListener.rst
-
-    core/_TaurusFactory.rst
-
-    core/_TaurusInfo.rst
-
-    core/_TaurusListener.rst
-
-    core/_TaurusManager.rst
-
-    core/_TaurusModel.rst
-
-    core/_TaurusOperation.rst
-
-    core/_TaurusPollingTimer.rst
-
-    core/_TaurusServInfo.rst
-
-    core/_TaurusServerTree.rst
-
-    core/_TaurusStateAttribute.rst
-
-    core/_WriteAttrOperation.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`AbstractTangoValidator`
-
-    * :class:`AttributeNameValidator`
-
-    * :class:`ConfigurationNameValidator`
-
-    * :class:`DatabaseNameValidator`
-
-    * :class:`DeviceNameValidator`
-
-    * :class:`TauAttrInfo`
-
-    * :class:`TauAttrValue`
-
-    * :class:`TauAttribute`
-
-    * :class:`TauConfigValue`
-
-    * :class:`TauConfiguration`
-
-    * :class:`TauConfigurationProxy`
-
-    * :class:`TauDatabase`
-
-    * :class:`TauDatabaseCache`
-
-    * :class:`TauDevClassInfo`
-
-    * :class:`TauDevInfo`
-
-    * :class:`TauDevTree`
-
-    * :class:`TauDevice`
-
-    * :class:`TauException`
-
-    * :class:`TauExceptionListener`
-
-    * :class:`TauFactory`
-
-    * :class:`TauInfo`
-
-    * :class:`TauListener`
-
-    * :class:`TauManager`
-
-    * :class:`TauOperation`
-
-    * :class:`TauPollingTimer`
-
-    * :class:`TauServInfo`
-
-    * :class:`TauServerTree`
-
-    * :class:`TauStateAttribute`
-
-    * :class:`TaurusAttrInfo`
-
-    * :class:`TaurusAttrValue`
-
-    * :class:`TaurusAttribute`
-
-    * :class:`TaurusConfigValue`
-
-    * :class:`TaurusConfiguration`
-
-    * :class:`TaurusConfigurationProxy`
-
-    * :class:`TaurusDatabase`
-
-    * :class:`TaurusDatabaseCache`
-
-    * :class:`TaurusDevClassInfo`
-
-    * :class:`TaurusDevInfo`
-
-    * :class:`TaurusDevTree`
-
-    * :class:`TaurusDevice`
-
-    * :class:`TaurusException`
-
-    * :class:`TaurusExceptionListener`
-
-    * :class:`TaurusFactory`
-
-    * :class:`TaurusInfo`
-
-    * :class:`TaurusListener`
-
-    * :class:`TaurusManager`
-
-    * :class:`TaurusModel`
-
-    * :class:`TaurusOperation`
-
-    * :class:`TaurusPollingTimer`
-
-    * :class:`TaurusServInfo`
-
-    * :class:`TaurusServerTree`
-
-    * :class:`TaurusStateAttribute`
-
-    * :class:`WriteAttrOperation`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/core/_AbstractTangoValidator.rst b/doc/source/devel/api/taurus/core/_AbstractTangoValidator.rst
deleted file mode 100644
index 14b8725..0000000
--- a/doc/source/devel/api/taurus/core/_AbstractTangoValidator.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`AbstractTangoValidator`
-===============================
-
-.. inheritance-diagram:: AbstractTangoValidator
-    :parts: 1
-    
-.. autoclass:: AbstractTangoValidator
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_AttributeNameValidator.rst b/doc/source/devel/api/taurus/core/_AttributeNameValidator.rst
deleted file mode 100644
index c9ec0e4..0000000
--- a/doc/source/devel/api/taurus/core/_AttributeNameValidator.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`AttributeNameValidator`
-===============================
-
-.. inheritance-diagram:: AttributeNameValidator
-    :parts: 1
-    
-.. autoclass:: AttributeNameValidator
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_ConfigurationNameValidator.rst b/doc/source/devel/api/taurus/core/_ConfigurationNameValidator.rst
deleted file mode 100644
index ea20b7e..0000000
--- a/doc/source/devel/api/taurus/core/_ConfigurationNameValidator.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`ConfigurationNameValidator`
-===================================
-
-.. inheritance-diagram:: ConfigurationNameValidator
-    :parts: 1
-    
-.. autoclass:: ConfigurationNameValidator
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_DatabaseNameValidator.rst b/doc/source/devel/api/taurus/core/_DatabaseNameValidator.rst
deleted file mode 100644
index 6d2987b..0000000
--- a/doc/source/devel/api/taurus/core/_DatabaseNameValidator.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`DatabaseNameValidator`
-==============================
-
-.. inheritance-diagram:: DatabaseNameValidator
-    :parts: 1
-    
-.. autoclass:: DatabaseNameValidator
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_DeviceNameValidator.rst b/doc/source/devel/api/taurus/core/_DeviceNameValidator.rst
deleted file mode 100644
index edf44c4..0000000
--- a/doc/source/devel/api/taurus/core/_DeviceNameValidator.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`DeviceNameValidator`
-============================
-
-.. inheritance-diagram:: DeviceNameValidator
-    :parts: 1
-    
-.. autoclass:: DeviceNameValidator
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauAttrInfo.rst b/doc/source/devel/api/taurus/core/_TauAttrInfo.rst
deleted file mode 100644
index cf5583a..0000000
--- a/doc/source/devel/api/taurus/core/_TauAttrInfo.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauAttrInfo`
-====================
-
-.. inheritance-diagram:: TauAttrInfo
-    :parts: 1
-    
-.. autoclass:: TauAttrInfo
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauAttrValue.rst b/doc/source/devel/api/taurus/core/_TauAttrValue.rst
deleted file mode 100644
index 3d259b6..0000000
--- a/doc/source/devel/api/taurus/core/_TauAttrValue.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauAttrValue`
-=====================
-
-.. inheritance-diagram:: TauAttrValue
-    :parts: 1
-    
-.. autoclass:: TauAttrValue
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauAttribute.rst b/doc/source/devel/api/taurus/core/_TauAttribute.rst
deleted file mode 100644
index 564dc7b..0000000
--- a/doc/source/devel/api/taurus/core/_TauAttribute.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauAttribute`
-=====================
-
-.. inheritance-diagram:: TauAttribute
-    :parts: 1
-    
-.. autoclass:: TauAttribute
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauConfigValue.rst b/doc/source/devel/api/taurus/core/_TauConfigValue.rst
deleted file mode 100644
index 379ca8f..0000000
--- a/doc/source/devel/api/taurus/core/_TauConfigValue.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauConfigValue`
-=======================
-
-.. inheritance-diagram:: TauConfigValue
-    :parts: 1
-    
-.. autoclass:: TauConfigValue
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauConfiguration.rst b/doc/source/devel/api/taurus/core/_TauConfiguration.rst
deleted file mode 100644
index ae1dbd6..0000000
--- a/doc/source/devel/api/taurus/core/_TauConfiguration.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauConfiguration`
-=========================
-
-.. inheritance-diagram:: TauConfiguration
-    :parts: 1
-    
-.. autoclass:: TauConfiguration
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauConfigurationProxy.rst b/doc/source/devel/api/taurus/core/_TauConfigurationProxy.rst
deleted file mode 100644
index e14438f..0000000
--- a/doc/source/devel/api/taurus/core/_TauConfigurationProxy.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauConfigurationProxy`
-==============================
-
-.. inheritance-diagram:: TauConfigurationProxy
-    :parts: 1
-    
-.. autoclass:: TauConfigurationProxy
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauDatabase.rst b/doc/source/devel/api/taurus/core/_TauDatabase.rst
deleted file mode 100644
index d7c337c..0000000
--- a/doc/source/devel/api/taurus/core/_TauDatabase.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauDatabase`
-====================
-
-.. inheritance-diagram:: TauDatabase
-    :parts: 1
-    
-.. autoclass:: TauDatabase
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauDatabaseCache.rst b/doc/source/devel/api/taurus/core/_TauDatabaseCache.rst
deleted file mode 100644
index b211c82..0000000
--- a/doc/source/devel/api/taurus/core/_TauDatabaseCache.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauDatabaseCache`
-=========================
-
-.. inheritance-diagram:: TauDatabaseCache
-    :parts: 1
-    
-.. autoclass:: TauDatabaseCache
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauDevClassInfo.rst b/doc/source/devel/api/taurus/core/_TauDevClassInfo.rst
deleted file mode 100644
index 3a2ba73..0000000
--- a/doc/source/devel/api/taurus/core/_TauDevClassInfo.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauDevClassInfo`
-========================
-
-.. inheritance-diagram:: TauDevClassInfo
-    :parts: 1
-    
-.. autoclass:: TauDevClassInfo
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauDevInfo.rst b/doc/source/devel/api/taurus/core/_TauDevInfo.rst
deleted file mode 100644
index 9e7cbbb..0000000
--- a/doc/source/devel/api/taurus/core/_TauDevInfo.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauDevInfo`
-===================
-
-.. inheritance-diagram:: TauDevInfo
-    :parts: 1
-    
-.. autoclass:: TauDevInfo
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauDevTree.rst b/doc/source/devel/api/taurus/core/_TauDevTree.rst
deleted file mode 100644
index 9a41ef2..0000000
--- a/doc/source/devel/api/taurus/core/_TauDevTree.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauDevTree`
-===================
-
-.. inheritance-diagram:: TauDevTree
-    :parts: 1
-    
-.. autoclass:: TauDevTree
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauDevice.rst b/doc/source/devel/api/taurus/core/_TauDevice.rst
deleted file mode 100644
index 83031ad..0000000
--- a/doc/source/devel/api/taurus/core/_TauDevice.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauDevice`
-==================
-
-.. inheritance-diagram:: TauDevice
-    :parts: 1
-    
-.. autoclass:: TauDevice
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauException.rst b/doc/source/devel/api/taurus/core/_TauException.rst
deleted file mode 100644
index 8b8a067..0000000
--- a/doc/source/devel/api/taurus/core/_TauException.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauException`
-=====================
-
-.. inheritance-diagram:: TauException
-    :parts: 1
-    
-.. autoclass:: TauException
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauExceptionListener.rst b/doc/source/devel/api/taurus/core/_TauExceptionListener.rst
deleted file mode 100644
index 5780bbf..0000000
--- a/doc/source/devel/api/taurus/core/_TauExceptionListener.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauExceptionListener`
-=============================
-
-.. inheritance-diagram:: TauExceptionListener
-    :parts: 1
-    
-.. autoclass:: TauExceptionListener
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauFactory.rst b/doc/source/devel/api/taurus/core/_TauFactory.rst
deleted file mode 100644
index 521beb6..0000000
--- a/doc/source/devel/api/taurus/core/_TauFactory.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauFactory`
-===================
-
-.. inheritance-diagram:: TauFactory
-    :parts: 1
-    
-.. autoclass:: TauFactory
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauInfo.rst b/doc/source/devel/api/taurus/core/_TauInfo.rst
deleted file mode 100644
index dab2ea8..0000000
--- a/doc/source/devel/api/taurus/core/_TauInfo.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauInfo`
-================
-
-.. inheritance-diagram:: TauInfo
-    :parts: 1
-    
-.. autoclass:: TauInfo
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauListener.rst b/doc/source/devel/api/taurus/core/_TauListener.rst
deleted file mode 100644
index f7bea63..0000000
--- a/doc/source/devel/api/taurus/core/_TauListener.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauListener`
-====================
-
-.. inheritance-diagram:: TauListener
-    :parts: 1
-    
-.. autoclass:: TauListener
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauManager.rst b/doc/source/devel/api/taurus/core/_TauManager.rst
deleted file mode 100644
index 241d4f4..0000000
--- a/doc/source/devel/api/taurus/core/_TauManager.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauManager`
-===================
-
-.. inheritance-diagram:: TauManager
-    :parts: 1
-    
-.. autoclass:: TauManager
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauOperation.rst b/doc/source/devel/api/taurus/core/_TauOperation.rst
deleted file mode 100644
index 32b30f6..0000000
--- a/doc/source/devel/api/taurus/core/_TauOperation.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauOperation`
-=====================
-
-.. inheritance-diagram:: TauOperation
-    :parts: 1
-    
-.. autoclass:: TauOperation
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauPollingTimer.rst b/doc/source/devel/api/taurus/core/_TauPollingTimer.rst
deleted file mode 100644
index da07f4a..0000000
--- a/doc/source/devel/api/taurus/core/_TauPollingTimer.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauPollingTimer`
-========================
-
-.. inheritance-diagram:: TauPollingTimer
-    :parts: 1
-    
-.. autoclass:: TauPollingTimer
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauServInfo.rst b/doc/source/devel/api/taurus/core/_TauServInfo.rst
deleted file mode 100644
index 6cb79a6..0000000
--- a/doc/source/devel/api/taurus/core/_TauServInfo.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauServInfo`
-====================
-
-.. inheritance-diagram:: TauServInfo
-    :parts: 1
-    
-.. autoclass:: TauServInfo
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauServerTree.rst b/doc/source/devel/api/taurus/core/_TauServerTree.rst
deleted file mode 100644
index 4bd3f59..0000000
--- a/doc/source/devel/api/taurus/core/_TauServerTree.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauServerTree`
-======================
-
-.. inheritance-diagram:: TauServerTree
-    :parts: 1
-    
-.. autoclass:: TauServerTree
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TauStateAttribute.rst b/doc/source/devel/api/taurus/core/_TauStateAttribute.rst
deleted file mode 100644
index 546820b..0000000
--- a/doc/source/devel/api/taurus/core/_TauStateAttribute.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TauStateAttribute`
-==========================
-
-.. inheritance-diagram:: TauStateAttribute
-    :parts: 1
-    
-.. autoclass:: TauStateAttribute
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusAttrInfo.rst b/doc/source/devel/api/taurus/core/_TaurusAttrInfo.rst
deleted file mode 100644
index 98a0ea9..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusAttrInfo.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusAttrInfo`
-=======================
-
-.. inheritance-diagram:: TaurusAttrInfo
-    :parts: 1
-    
-.. autoclass:: TaurusAttrInfo
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusAttrValue.rst b/doc/source/devel/api/taurus/core/_TaurusAttrValue.rst
deleted file mode 100644
index 7cd59d4..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusAttrValue.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusAttrValue`
-========================
-
-.. inheritance-diagram:: TaurusAttrValue
-    :parts: 1
-    
-.. autoclass:: TaurusAttrValue
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusAttribute.rst b/doc/source/devel/api/taurus/core/_TaurusAttribute.rst
deleted file mode 100644
index e71f933..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusAttribute.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusAttribute`
-========================
-
-.. inheritance-diagram:: TaurusAttribute
-    :parts: 1
-    
-.. autoclass:: TaurusAttribute
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusConfigValue.rst b/doc/source/devel/api/taurus/core/_TaurusConfigValue.rst
deleted file mode 100644
index f3b4ce5..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusConfigValue.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusConfigValue`
-==========================
-
-.. inheritance-diagram:: TaurusConfigValue
-    :parts: 1
-    
-.. autoclass:: TaurusConfigValue
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusConfiguration.rst b/doc/source/devel/api/taurus/core/_TaurusConfiguration.rst
deleted file mode 100644
index 739a01f..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusConfiguration.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusConfiguration`
-============================
-
-.. inheritance-diagram:: TaurusConfiguration
-    :parts: 1
-    
-.. autoclass:: TaurusConfiguration
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusConfigurationProxy.rst b/doc/source/devel/api/taurus/core/_TaurusConfigurationProxy.rst
deleted file mode 100644
index 4fd57eb..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusConfigurationProxy.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusConfigurationProxy`
-=================================
-
-.. inheritance-diagram:: TaurusConfigurationProxy
-    :parts: 1
-    
-.. autoclass:: TaurusConfigurationProxy
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusDatabase.rst b/doc/source/devel/api/taurus/core/_TaurusDatabase.rst
deleted file mode 100644
index 12f305b..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusDatabase.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusDatabase`
-=======================
-
-.. inheritance-diagram:: TaurusDatabase
-    :parts: 1
-    
-.. autoclass:: TaurusDatabase
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusDatabaseCache.rst b/doc/source/devel/api/taurus/core/_TaurusDatabaseCache.rst
deleted file mode 100644
index 828839b..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusDatabaseCache.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusDatabaseCache`
-============================
-
-.. inheritance-diagram:: TaurusDatabaseCache
-    :parts: 1
-    
-.. autoclass:: TaurusDatabaseCache
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusDevClassInfo.rst b/doc/source/devel/api/taurus/core/_TaurusDevClassInfo.rst
deleted file mode 100644
index 1180be6..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusDevClassInfo.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusDevClassInfo`
-===========================
-
-.. inheritance-diagram:: TaurusDevClassInfo
-    :parts: 1
-    
-.. autoclass:: TaurusDevClassInfo
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusDevInfo.rst b/doc/source/devel/api/taurus/core/_TaurusDevInfo.rst
deleted file mode 100644
index 3f5a220..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusDevInfo.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusDevInfo`
-======================
-
-.. inheritance-diagram:: TaurusDevInfo
-    :parts: 1
-    
-.. autoclass:: TaurusDevInfo
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusDevTree.rst b/doc/source/devel/api/taurus/core/_TaurusDevTree.rst
deleted file mode 100644
index 0164054..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusDevTree.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusDevTree`
-======================
-
-.. inheritance-diagram:: TaurusDevTree
-    :parts: 1
-    
-.. autoclass:: TaurusDevTree
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusDevice.rst b/doc/source/devel/api/taurus/core/_TaurusDevice.rst
deleted file mode 100644
index cd3e052..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusDevice.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusDevice`
-=====================
-
-.. inheritance-diagram:: TaurusDevice
-    :parts: 1
-    
-.. autoclass:: TaurusDevice
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusException.rst b/doc/source/devel/api/taurus/core/_TaurusException.rst
deleted file mode 100644
index 608e41b..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusException.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusException`
-========================
-
-.. inheritance-diagram:: TaurusException
-    :parts: 1
-    
-.. autoclass:: TaurusException
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusExceptionListener.rst b/doc/source/devel/api/taurus/core/_TaurusExceptionListener.rst
deleted file mode 100644
index a9e2713..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusExceptionListener.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusExceptionListener`
-================================
-
-.. inheritance-diagram:: TaurusExceptionListener
-    :parts: 1
-    
-.. autoclass:: TaurusExceptionListener
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusFactory.rst b/doc/source/devel/api/taurus/core/_TaurusFactory.rst
deleted file mode 100644
index e69f3d1..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusFactory.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusFactory`
-======================
-
-.. inheritance-diagram:: TaurusFactory
-    :parts: 1
-    
-.. autoclass:: TaurusFactory
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusInfo.rst b/doc/source/devel/api/taurus/core/_TaurusInfo.rst
deleted file mode 100644
index 711dfcb..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusInfo.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusInfo`
-===================
-
-.. inheritance-diagram:: TaurusInfo
-    :parts: 1
-    
-.. autoclass:: TaurusInfo
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusListener.rst b/doc/source/devel/api/taurus/core/_TaurusListener.rst
deleted file mode 100644
index b8e535d..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusListener.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusListener`
-=======================
-
-.. inheritance-diagram:: TaurusListener
-    :parts: 1
-    
-.. autoclass:: TaurusListener
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusManager.rst b/doc/source/devel/api/taurus/core/_TaurusManager.rst
deleted file mode 100644
index 4ed6502..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusManager.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusManager`
-======================
-
-.. inheritance-diagram:: TaurusManager
-    :parts: 1
-    
-.. autoclass:: TaurusManager
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusModel.rst b/doc/source/devel/api/taurus/core/_TaurusModel.rst
deleted file mode 100644
index 8b5470f..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusModel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusModel`
-====================
-
-.. inheritance-diagram:: TaurusModel
-    :parts: 1
-    
-.. autoclass:: TaurusModel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusOperation.rst b/doc/source/devel/api/taurus/core/_TaurusOperation.rst
deleted file mode 100644
index 6566e43..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusOperation.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusOperation`
-========================
-
-.. inheritance-diagram:: TaurusOperation
-    :parts: 1
-    
-.. autoclass:: TaurusOperation
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusPollingTimer.rst b/doc/source/devel/api/taurus/core/_TaurusPollingTimer.rst
deleted file mode 100644
index 355e112..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusPollingTimer.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusPollingTimer`
-===========================
-
-.. inheritance-diagram:: TaurusPollingTimer
-    :parts: 1
-    
-.. autoclass:: TaurusPollingTimer
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusServInfo.rst b/doc/source/devel/api/taurus/core/_TaurusServInfo.rst
deleted file mode 100644
index 8d6e966..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusServInfo.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusServInfo`
-=======================
-
-.. inheritance-diagram:: TaurusServInfo
-    :parts: 1
-    
-.. autoclass:: TaurusServInfo
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusServerTree.rst b/doc/source/devel/api/taurus/core/_TaurusServerTree.rst
deleted file mode 100644
index 05bd10f..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusServerTree.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusServerTree`
-=========================
-
-.. inheritance-diagram:: TaurusServerTree
-    :parts: 1
-    
-.. autoclass:: TaurusServerTree
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_TaurusStateAttribute.rst b/doc/source/devel/api/taurus/core/_TaurusStateAttribute.rst
deleted file mode 100644
index ab135e1..0000000
--- a/doc/source/devel/api/taurus/core/_TaurusStateAttribute.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`TaurusStateAttribute`
-=============================
-
-.. inheritance-diagram:: TaurusStateAttribute
-    :parts: 1
-    
-.. autoclass:: TaurusStateAttribute
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/_WriteAttrOperation.rst b/doc/source/devel/api/taurus/core/_WriteAttrOperation.rst
deleted file mode 100644
index bb1d1eb..0000000
--- a/doc/source/devel/api/taurus/core/_WriteAttrOperation.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core
-
-:class:`WriteAttrOperation`
-===========================
-
-.. inheritance-diagram:: WriteAttrOperation
-    :parts: 1
-    
-.. autoclass:: WriteAttrOperation
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/resource.rst b/doc/source/devel/api/taurus/core/resource.rst
deleted file mode 100644
index 5d9ed33..0000000
--- a/doc/source/devel/api/taurus/core/resource.rst
+++ /dev/null
@@ -1,35 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.resource
-
-:mod:`taurus.core.resource`
-===========================
-
-.. automodule:: taurus.core.resource
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    resource/_ModuleDict.rst
-
-    resource/_ResourcesFactory.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`ModuleDict`
-
-    * :class:`ResourcesFactory`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/core/resource/_ModuleDict.rst b/doc/source/devel/api/taurus/core/resource/_ModuleDict.rst
deleted file mode 100644
index 7ae2ae9..0000000
--- a/doc/source/devel/api/taurus/core/resource/_ModuleDict.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.resource
-
-:class:`ModuleDict`
-===================
-
-.. inheritance-diagram:: ModuleDict
-    :parts: 1
-    
-.. autoclass:: ModuleDict
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/resource/_ResourcesFactory.rst b/doc/source/devel/api/taurus/core/resource/_ResourcesFactory.rst
deleted file mode 100644
index 5411469..0000000
--- a/doc/source/devel/api/taurus/core/resource/_ResourcesFactory.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.resource
-
-:class:`ResourcesFactory`
-=========================
-
-.. inheritance-diagram:: ResourcesFactory
-    :parts: 1
-    
-.. autoclass:: ResourcesFactory
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/simulation.rst b/doc/source/devel/api/taurus/core/simulation.rst
deleted file mode 100644
index a861847..0000000
--- a/doc/source/devel/api/taurus/core/simulation.rst
+++ /dev/null
@@ -1,47 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.simulation
-
-:mod:`taurus.core.simulation`
-=============================
-
-.. automodule:: taurus.core.simulation
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    simulation/_SimulationAttribute.rst
-
-    simulation/_SimulationConfiguration.rst
-
-    simulation/_SimulationDatabase.rst
-
-    simulation/_SimulationDevice.rst
-
-    simulation/_SimulationFactory.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`SimulationAttribute`
-
-    * :class:`SimulationConfiguration`
-
-    * :class:`SimulationDatabase`
-
-    * :class:`SimulationDevice`
-
-    * :class:`SimulationFactory`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/core/simulation/_SimulationAttribute.rst b/doc/source/devel/api/taurus/core/simulation/_SimulationAttribute.rst
deleted file mode 100644
index 7fa32e1..0000000
--- a/doc/source/devel/api/taurus/core/simulation/_SimulationAttribute.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.simulation
-
-:class:`SimulationAttribute`
-============================
-
-.. inheritance-diagram:: SimulationAttribute
-    :parts: 1
-    
-.. autoclass:: SimulationAttribute
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/simulation/_SimulationConfiguration.rst b/doc/source/devel/api/taurus/core/simulation/_SimulationConfiguration.rst
deleted file mode 100644
index 76cb0ad..0000000
--- a/doc/source/devel/api/taurus/core/simulation/_SimulationConfiguration.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.simulation
-
-:class:`SimulationConfiguration`
-================================
-
-.. inheritance-diagram:: SimulationConfiguration
-    :parts: 1
-    
-.. autoclass:: SimulationConfiguration
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/simulation/_SimulationDatabase.rst b/doc/source/devel/api/taurus/core/simulation/_SimulationDatabase.rst
deleted file mode 100644
index 78db422..0000000
--- a/doc/source/devel/api/taurus/core/simulation/_SimulationDatabase.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.simulation
-
-:class:`SimulationDatabase`
-===========================
-
-.. inheritance-diagram:: SimulationDatabase
-    :parts: 1
-    
-.. autoclass:: SimulationDatabase
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/simulation/_SimulationDevice.rst b/doc/source/devel/api/taurus/core/simulation/_SimulationDevice.rst
deleted file mode 100644
index ff15946..0000000
--- a/doc/source/devel/api/taurus/core/simulation/_SimulationDevice.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.simulation
-
-:class:`SimulationDevice`
-=========================
-
-.. inheritance-diagram:: SimulationDevice
-    :parts: 1
-    
-.. autoclass:: SimulationDevice
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/simulation/_SimulationFactory.rst b/doc/source/devel/api/taurus/core/simulation/_SimulationFactory.rst
deleted file mode 100644
index be340b5..0000000
--- a/doc/source/devel/api/taurus/core/simulation/_SimulationFactory.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.simulation
-
-:class:`SimulationFactory`
-==========================
-
-.. inheritance-diagram:: SimulationFactory
-    :parts: 1
-    
-.. autoclass:: SimulationFactory
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango.rst b/doc/source/devel/api/taurus/core/tango.rst
deleted file mode 100644
index 4076e7f..0000000
--- a/doc/source/devel/api/taurus/core/tango.rst
+++ /dev/null
@@ -1,79 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango
-
-:mod:`taurus.core.tango`
-========================
-
-.. automodule:: taurus.core.tango
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    img <tango/img>
-
-    macroserver <tango/macroserver>
-
-    sardana <tango/sardana>
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    tango/_TangoAttribute.rst
-
-    tango/_TangoAttributeEventListener.rst
-
-    tango/_TangoConfiguration.rst
-
-    tango/_TangoDatabase.rst
-
-    tango/_TangoDatabaseCache.rst
-
-    tango/_TangoDevInfo.rst
-
-    tango/_TangoDevice.rst
-
-    tango/_TangoFactory.rst
-
-    tango/_TangoServInfo.rst
-
-    tango/_TangoStateAttribute.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`TangoAttribute`
-
-    * :class:`TangoAttributeEventListener`
-
-    * :class:`TangoConfiguration`
-
-    * :class:`TangoDatabase`
-
-    * :class:`TangoDatabaseCache`
-
-    * :class:`TangoDevInfo`
-
-    * :class:`TangoDevice`
-
-    * :class:`TangoFactory`
-
-    * :class:`TangoServInfo`
-
-    * :class:`TangoStateAttribute`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/core/tango/_TangoAttribute.rst b/doc/source/devel/api/taurus/core/tango/_TangoAttribute.rst
deleted file mode 100644
index 4be643d..0000000
--- a/doc/source/devel/api/taurus/core/tango/_TangoAttribute.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango
-
-:class:`TangoAttribute`
-=======================
-
-.. inheritance-diagram:: TangoAttribute
-    :parts: 1
-    
-.. autoclass:: TangoAttribute
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/_TangoAttributeEventListener.rst b/doc/source/devel/api/taurus/core/tango/_TangoAttributeEventListener.rst
deleted file mode 100644
index 1a84acb..0000000
--- a/doc/source/devel/api/taurus/core/tango/_TangoAttributeEventListener.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango
-
-:class:`TangoAttributeEventListener`
-====================================
-
-.. inheritance-diagram:: TangoAttributeEventListener
-    :parts: 1
-    
-.. autoclass:: TangoAttributeEventListener
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/_TangoConfiguration.rst b/doc/source/devel/api/taurus/core/tango/_TangoConfiguration.rst
deleted file mode 100644
index b42b81b..0000000
--- a/doc/source/devel/api/taurus/core/tango/_TangoConfiguration.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango
-
-:class:`TangoConfiguration`
-===========================
-
-.. inheritance-diagram:: TangoConfiguration
-    :parts: 1
-    
-.. autoclass:: TangoConfiguration
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/_TangoDatabase.rst b/doc/source/devel/api/taurus/core/tango/_TangoDatabase.rst
deleted file mode 100644
index 1ba4299..0000000
--- a/doc/source/devel/api/taurus/core/tango/_TangoDatabase.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango
-
-:class:`TangoDatabase`
-======================
-
-.. inheritance-diagram:: TangoDatabase
-    :parts: 1
-    
-.. autoclass:: TangoDatabase
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/_TangoDatabaseCache.rst b/doc/source/devel/api/taurus/core/tango/_TangoDatabaseCache.rst
deleted file mode 100644
index 3046e6f..0000000
--- a/doc/source/devel/api/taurus/core/tango/_TangoDatabaseCache.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango
-
-:class:`TangoDatabaseCache`
-===========================
-
-.. inheritance-diagram:: TangoDatabaseCache
-    :parts: 1
-    
-.. autoclass:: TangoDatabaseCache
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/_TangoDevInfo.rst b/doc/source/devel/api/taurus/core/tango/_TangoDevInfo.rst
deleted file mode 100644
index c9701d5..0000000
--- a/doc/source/devel/api/taurus/core/tango/_TangoDevInfo.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango
-
-:class:`TangoDevInfo`
-=====================
-
-.. inheritance-diagram:: TangoDevInfo
-    :parts: 1
-    
-.. autoclass:: TangoDevInfo
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/_TangoDevice.rst b/doc/source/devel/api/taurus/core/tango/_TangoDevice.rst
deleted file mode 100644
index 0ccb507..0000000
--- a/doc/source/devel/api/taurus/core/tango/_TangoDevice.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango
-
-:class:`TangoDevice`
-====================
-
-.. inheritance-diagram:: TangoDevice
-    :parts: 1
-    
-.. autoclass:: TangoDevice
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/_TangoFactory.rst b/doc/source/devel/api/taurus/core/tango/_TangoFactory.rst
deleted file mode 100644
index 9add768..0000000
--- a/doc/source/devel/api/taurus/core/tango/_TangoFactory.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango
-
-:class:`TangoFactory`
-=====================
-
-.. inheritance-diagram:: TangoFactory
-    :parts: 1
-    
-.. autoclass:: TangoFactory
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/_TangoServInfo.rst b/doc/source/devel/api/taurus/core/tango/_TangoServInfo.rst
deleted file mode 100644
index 24f1a5b..0000000
--- a/doc/source/devel/api/taurus/core/tango/_TangoServInfo.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango
-
-:class:`TangoServInfo`
-======================
-
-.. inheritance-diagram:: TangoServInfo
-    :parts: 1
-    
-.. autoclass:: TangoServInfo
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/_TangoStateAttribute.rst b/doc/source/devel/api/taurus/core/tango/_TangoStateAttribute.rst
deleted file mode 100644
index 977def5..0000000
--- a/doc/source/devel/api/taurus/core/tango/_TangoStateAttribute.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango
-
-:class:`TangoStateAttribute`
-============================
-
-.. inheritance-diagram:: TangoStateAttribute
-    :parts: 1
-    
-.. autoclass:: TangoStateAttribute
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/img.rst b/doc/source/devel/api/taurus/core/tango/img.rst
deleted file mode 100644
index 0795ad0..0000000
--- a/doc/source/devel/api/taurus/core/tango/img.rst
+++ /dev/null
@@ -1,57 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.img
-
-:mod:`taurus.core.tango.img`
-============================
-
-.. automodule:: taurus.core.tango.img
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    img/_CCDPVCAM.rst
-
-    img/_ImageCounterDevice.rst
-
-    img/_ImageDevice.rst
-
-    img/_ImgBeamAnalyzer.rst
-
-    img/_ImgGrabber.rst
-
-    img/_PyImageViewer.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`CCDPVCAM`
-
-    * :class:`ImageCounterDevice`
-
-    * :class:`ImageDevice`
-
-    * :class:`ImgBeamAnalyzer`
-
-    * :class:`ImgGrabber`
-
-    * :class:`PyImageViewer`
-
-
-
-
-.. rubric:: Functions
-
-
-.. autofunction:: registerExtensions
-
-
-
diff --git a/doc/source/devel/api/taurus/core/tango/img/_CCDPVCAM.rst b/doc/source/devel/api/taurus/core/tango/img/_CCDPVCAM.rst
deleted file mode 100644
index 6edc74f..0000000
--- a/doc/source/devel/api/taurus/core/tango/img/_CCDPVCAM.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.img
-
-:class:`CCDPVCAM`
-=================
-
-.. inheritance-diagram:: CCDPVCAM
-    :parts: 1
-    
-.. autoclass:: CCDPVCAM
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/img/_ImageCounterDevice.rst b/doc/source/devel/api/taurus/core/tango/img/_ImageCounterDevice.rst
deleted file mode 100644
index bdfbbfd..0000000
--- a/doc/source/devel/api/taurus/core/tango/img/_ImageCounterDevice.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.img
-
-:class:`ImageCounterDevice`
-===========================
-
-.. inheritance-diagram:: ImageCounterDevice
-    :parts: 1
-    
-.. autoclass:: ImageCounterDevice
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/img/_ImageDevice.rst b/doc/source/devel/api/taurus/core/tango/img/_ImageDevice.rst
deleted file mode 100644
index 8b5ab1b..0000000
--- a/doc/source/devel/api/taurus/core/tango/img/_ImageDevice.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.img
-
-:class:`ImageDevice`
-====================
-
-.. inheritance-diagram:: ImageDevice
-    :parts: 1
-    
-.. autoclass:: ImageDevice
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/img/_ImgBeamAnalyzer.rst b/doc/source/devel/api/taurus/core/tango/img/_ImgBeamAnalyzer.rst
deleted file mode 100644
index 13ecb33..0000000
--- a/doc/source/devel/api/taurus/core/tango/img/_ImgBeamAnalyzer.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.img
-
-:class:`ImgBeamAnalyzer`
-========================
-
-.. inheritance-diagram:: ImgBeamAnalyzer
-    :parts: 1
-    
-.. autoclass:: ImgBeamAnalyzer
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/img/_ImgGrabber.rst b/doc/source/devel/api/taurus/core/tango/img/_ImgGrabber.rst
deleted file mode 100644
index 51ef8d7..0000000
--- a/doc/source/devel/api/taurus/core/tango/img/_ImgGrabber.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.img
-
-:class:`ImgGrabber`
-===================
-
-.. inheritance-diagram:: ImgGrabber
-    :parts: 1
-    
-.. autoclass:: ImgGrabber
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/img/_PyImageViewer.rst b/doc/source/devel/api/taurus/core/tango/img/_PyImageViewer.rst
deleted file mode 100644
index 65cd4e2..0000000
--- a/doc/source/devel/api/taurus/core/tango/img/_PyImageViewer.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.img
-
-:class:`PyImageViewer`
-======================
-
-.. inheritance-diagram:: PyImageViewer
-    :parts: 1
-    
-.. autoclass:: PyImageViewer
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/macroserver.rst b/doc/source/devel/api/taurus/core/tango/macroserver.rst
deleted file mode 100644
index 7cd157b..0000000
--- a/doc/source/devel/api/taurus/core/tango/macroserver.rst
+++ /dev/null
@@ -1,53 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.macroserver
-
-:mod:`taurus.core.tango.macroserver`
-====================================
-
-.. automodule:: taurus.core.tango.macroserver
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    macroserver/_BaseDoor.rst
-
-    macroserver/_BaseMacroServer.rst
-
-    macroserver/_Macro.rst
-
-    macroserver/_MacroInfo.rst
-
-    macroserver/_MacroNode.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`BaseDoor`
-
-    * :class:`BaseMacroServer`
-
-    * :class:`Macro`
-
-    * :class:`MacroInfo`
-
-    * :class:`MacroNode`
-
-
-
-
-.. rubric:: Functions
-
-
-.. autofunction:: registerExtensions
-
-
-
diff --git a/doc/source/devel/api/taurus/core/tango/macroserver/_BaseDoor.rst b/doc/source/devel/api/taurus/core/tango/macroserver/_BaseDoor.rst
deleted file mode 100644
index eee38a3..0000000
--- a/doc/source/devel/api/taurus/core/tango/macroserver/_BaseDoor.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.macroserver
-
-:class:`BaseDoor`
-=================
-
-.. inheritance-diagram:: BaseDoor
-    :parts: 1
-    
-.. autoclass:: BaseDoor
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/macroserver/_BaseMacroServer.rst b/doc/source/devel/api/taurus/core/tango/macroserver/_BaseMacroServer.rst
deleted file mode 100644
index 8a51de1..0000000
--- a/doc/source/devel/api/taurus/core/tango/macroserver/_BaseMacroServer.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.macroserver
-
-:class:`BaseMacroServer`
-========================
-
-.. inheritance-diagram:: BaseMacroServer
-    :parts: 1
-    
-.. autoclass:: BaseMacroServer
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/macroserver/_Macro.rst b/doc/source/devel/api/taurus/core/tango/macroserver/_Macro.rst
deleted file mode 100644
index cf7f7e8..0000000
--- a/doc/source/devel/api/taurus/core/tango/macroserver/_Macro.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.macroserver
-
-:class:`Macro`
-==============
-
-.. inheritance-diagram:: Macro
-    :parts: 1
-    
-.. autoclass:: Macro
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/macroserver/_MacroInfo.rst b/doc/source/devel/api/taurus/core/tango/macroserver/_MacroInfo.rst
deleted file mode 100644
index 8027246..0000000
--- a/doc/source/devel/api/taurus/core/tango/macroserver/_MacroInfo.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.macroserver
-
-:class:`MacroInfo`
-==================
-
-.. inheritance-diagram:: MacroInfo
-    :parts: 1
-    
-.. autoclass:: MacroInfo
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/macroserver/_MacroNode.rst b/doc/source/devel/api/taurus/core/tango/macroserver/_MacroNode.rst
deleted file mode 100644
index 5ba2142..0000000
--- a/doc/source/devel/api/taurus/core/tango/macroserver/_MacroNode.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.macroserver
-
-:class:`MacroNode`
-==================
-
-.. inheritance-diagram:: MacroNode
-    :parts: 1
-    
-.. autoclass:: MacroNode
-    :members:
-    :undoc-members:
\ No newline at end of file
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 5a42422..0000000
--- a/doc/source/devel/api/taurus/core/tango/sardana.rst
+++ /dev/null
@@ -1,55 +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/_ControllerClassInfo.rst
-
-    sardana/_ControllerInfo.rst
-
-    sardana/_Door.rst
-
-    sardana/_MacroServer.rst
-
-    sardana/_Pool.rst
-
-    sardana/_Sardana.rst
-
-    sardana/_SardanaManager.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`ControllerClassInfo`
-
-    * :class:`ControllerInfo`
-
-    * :class:`Door`
-
-    * :class:`MacroServer`
-
-    * :class:`Pool`
-
-    * :class:`Sardana`
-
-    * :class:`SardanaManager`
-
-
-
-
-
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 f04ccad..0000000
--- a/doc/source/devel/api/taurus/core/tango/sardana/_ControllerClassInfo.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 5f96a90..0000000
--- a/doc/source/devel/api/taurus/core/tango/sardana/_ControllerInfo.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 723acd5..0000000
--- a/doc/source/devel/api/taurus/core/tango/sardana/_Door.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 746ed41..0000000
--- a/doc/source/devel/api/taurus/core/tango/sardana/_MacroServer.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 c704950..0000000
--- a/doc/source/devel/api/taurus/core/tango/sardana/_Pool.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 cc5947e..0000000
--- a/doc/source/devel/api/taurus/core/tango/sardana/_Sardana.rst
+++ /dev/null
@@ -1,13 +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:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tango/sardana/_SardanaManager.rst b/doc/source/devel/api/taurus/core/tango/sardana/_SardanaManager.rst
deleted file mode 100644
index f226d98..0000000
--- a/doc/source/devel/api/taurus/core/tango/sardana/_SardanaManager.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tango.sardana
-
-:class:`SardanaManager`
-=======================
-
-.. inheritance-diagram:: SardanaManager
-    :parts: 1
-    
-.. autoclass:: SardanaManager
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/tauv1.rst b/doc/source/devel/api/taurus/core/tauv1.rst
deleted file mode 100644
index f0acdb9..0000000
--- a/doc/source/devel/api/taurus/core/tauv1.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.tauv1
-
-:mod:`taurus.core.tauv1`
-========================
-
-.. automodule:: taurus.core.tauv1
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/core/util.rst b/doc/source/devel/api/taurus/core/util.rst
deleted file mode 100644
index a8779b7..0000000
--- a/doc/source/devel/api/taurus/core/util.rst
+++ /dev/null
@@ -1,239 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:mod:`taurus.core.util`
-=======================
-
-.. automodule:: taurus.core.util
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    argparse <util/argparse>
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    util/_ArrayBuffer.rst
-
-    util/_AttributeEventWait.rst
-
-    util/_BZ2Codec.rst
-
-    util/_BoundMethodWeakref.rst
-
-    util/_CaselessDefaultDict.rst
-
-    util/_CaselessDict.rst
-
-    util/_CaselessList.rst
-
-    util/_CaselessWeakValueDict.rst
-
-    util/_CircBuf.rst
-
-    util/_Codec.rst
-
-    util/_CodecFactory.rst
-
-    util/_CodecPipeline.rst
-
-    util/_ColorPalette.rst
-
-    util/_ConfigEventGenerator.rst
-
-    util/_CriticalIt.rst
-
-    util/_DebugIt.rst
-
-    util/_DefaultThreadDict.rst
-
-    util/_EnumException.rst
-
-    util/_Enumeration.rst
-
-    util/_ErrorIt.rst
-
-    util/_EventGenerator.rst
-
-    util/_EventListener.rst
-
-    util/_FunctionCodec.rst
-
-    util/_InfoIt.rst
-
-    util/_JSONCodec.rst
-
-    util/_LIFO.rst
-
-    util/_ListEventGenerator.rst
-
-    util/_LogFilter.rst
-
-    util/_LogIt.rst
-
-    util/_Logger.rst
-
-    util/_LoopList.rst
-
-    util/_MemoryLogHandler.rst
-
-    util/_NullCodec.rst
-
-    util/_Object.rst
-
-    util/_PlotCodec.rst
-
-    util/_SafeEvaluator.rst
-
-    util/_Singleton.rst
-
-    util/_ThreadDict.rst
-
-    util/_ThreadPool.rst
-
-    util/_TimedQueue.rst
-
-    util/_Timer.rst
-
-    util/_TraceIt.rst
-
-    util/_WarnIt.rst
-
-    util/_Worker.rst
-
-    util/_ZIPCodec.rst
-
-    util/_defaultdict_fromkey.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`ArrayBuffer`
-
-    * :class:`AttributeEventWait`
-
-    * :class:`BZ2Codec`
-
-    * :class:`BoundMethodWeakref`
-
-    * :class:`CaselessDefaultDict`
-
-    * :class:`CaselessDict`
-
-    * :class:`CaselessList`
-
-    * :class:`CaselessWeakValueDict`
-
-    * :class:`CircBuf`
-
-    * :class:`Codec`
-
-    * :class:`CodecFactory`
-
-    * :class:`CodecPipeline`
-
-    * :class:`ColorPalette`
-
-    * :class:`ConfigEventGenerator`
-
-    * :class:`CriticalIt`
-
-    * :class:`DebugIt`
-
-    * :class:`DefaultThreadDict`
-
-    * :class:`EnumException`
-
-    * :class:`Enumeration`
-
-    * :class:`ErrorIt`
-
-    * :class:`EventGenerator`
-
-    * :class:`EventListener`
-
-    * :class:`FunctionCodec`
-
-    * :class:`InfoIt`
-
-    * :class:`JSONCodec`
-
-    * :class:`LIFO`
-
-    * :class:`ListEventGenerator`
-
-    * :class:`LogFilter`
-
-    * :class:`LogIt`
-
-    * :class:`Logger`
-
-    * :class:`LoopList`
-
-    * :class:`MemoryLogHandler`
-
-    * :class:`NullCodec`
-
-    * :class:`Object`
-
-    * :class:`PlotCodec`
-
-    * :class:`SafeEvaluator`
-
-    * :class:`Singleton`
-
-    * :class:`ThreadDict`
-
-    * :class:`ThreadPool`
-
-    * :class:`TimedQueue`
-
-    * :class:`Timer`
-
-    * :class:`TraceIt`
-
-    * :class:`WarnIt`
-
-    * :class:`Worker`
-
-    * :class:`ZIPCodec`
-
-    * :class:`defaultdict_fromkey`
-
-
-
-
-.. rubric:: Functions
-
-
-.. autofunction:: CallableRef
-
-.. autofunction:: dictFromSequence
-
-.. autofunction:: getDictAsTree
-
-.. autofunction:: getSystemUserName
-
-.. autofunction:: print_DevFailed
-
-.. autofunction:: propertx
-
-.. autofunction:: self_locked
-
-.. autofunction:: str_DevFailed
-
-
-
diff --git a/doc/source/devel/api/taurus/core/util/_ArrayBuffer.rst b/doc/source/devel/api/taurus/core/util/_ArrayBuffer.rst
deleted file mode 100644
index 27beabd..0000000
--- a/doc/source/devel/api/taurus/core/util/_ArrayBuffer.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`ArrayBuffer`
-====================
-
-.. inheritance-diagram:: ArrayBuffer
-    :parts: 1
-    
-.. autoclass:: ArrayBuffer
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_AttributeEventWait.rst b/doc/source/devel/api/taurus/core/util/_AttributeEventWait.rst
deleted file mode 100644
index cb9949a..0000000
--- a/doc/source/devel/api/taurus/core/util/_AttributeEventWait.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`AttributeEventWait`
-===========================
-
-.. inheritance-diagram:: AttributeEventWait
-    :parts: 1
-    
-.. autoclass:: AttributeEventWait
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_BZ2Codec.rst b/doc/source/devel/api/taurus/core/util/_BZ2Codec.rst
deleted file mode 100644
index f55390a..0000000
--- a/doc/source/devel/api/taurus/core/util/_BZ2Codec.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`BZ2Codec`
-=================
-
-.. inheritance-diagram:: BZ2Codec
-    :parts: 1
-    
-.. autoclass:: BZ2Codec
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_BoundMethodWeakref.rst b/doc/source/devel/api/taurus/core/util/_BoundMethodWeakref.rst
deleted file mode 100644
index a6c23ee..0000000
--- a/doc/source/devel/api/taurus/core/util/_BoundMethodWeakref.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`BoundMethodWeakref`
-===========================
-
-.. inheritance-diagram:: BoundMethodWeakref
-    :parts: 1
-    
-.. autoclass:: BoundMethodWeakref
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_CaselessDefaultDict.rst b/doc/source/devel/api/taurus/core/util/_CaselessDefaultDict.rst
deleted file mode 100644
index a465a08..0000000
--- a/doc/source/devel/api/taurus/core/util/_CaselessDefaultDict.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`CaselessDefaultDict`
-============================
-
-.. inheritance-diagram:: CaselessDefaultDict
-    :parts: 1
-    
-.. autoclass:: CaselessDefaultDict
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_CaselessDict.rst b/doc/source/devel/api/taurus/core/util/_CaselessDict.rst
deleted file mode 100644
index 0aa992e..0000000
--- a/doc/source/devel/api/taurus/core/util/_CaselessDict.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`CaselessDict`
-=====================
-
-.. inheritance-diagram:: CaselessDict
-    :parts: 1
-    
-.. autoclass:: CaselessDict
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_CaselessList.rst b/doc/source/devel/api/taurus/core/util/_CaselessList.rst
deleted file mode 100644
index fc8021a..0000000
--- a/doc/source/devel/api/taurus/core/util/_CaselessList.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`CaselessList`
-=====================
-
-.. inheritance-diagram:: CaselessList
-    :parts: 1
-    
-.. autoclass:: CaselessList
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_CaselessWeakValueDict.rst b/doc/source/devel/api/taurus/core/util/_CaselessWeakValueDict.rst
deleted file mode 100644
index 6ab1c80..0000000
--- a/doc/source/devel/api/taurus/core/util/_CaselessWeakValueDict.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`CaselessWeakValueDict`
-==============================
-
-.. inheritance-diagram:: CaselessWeakValueDict
-    :parts: 1
-    
-.. autoclass:: CaselessWeakValueDict
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_CircBuf.rst b/doc/source/devel/api/taurus/core/util/_CircBuf.rst
deleted file mode 100644
index 797de08..0000000
--- a/doc/source/devel/api/taurus/core/util/_CircBuf.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`CircBuf`
-================
-
-.. inheritance-diagram:: CircBuf
-    :parts: 1
-    
-.. autoclass:: CircBuf
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_Codec.rst b/doc/source/devel/api/taurus/core/util/_Codec.rst
deleted file mode 100644
index 161cc2f..0000000
--- a/doc/source/devel/api/taurus/core/util/_Codec.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`Codec`
-==============
-
-.. inheritance-diagram:: Codec
-    :parts: 1
-    
-.. autoclass:: Codec
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_CodecFactory.rst b/doc/source/devel/api/taurus/core/util/_CodecFactory.rst
deleted file mode 100644
index 97ccc43..0000000
--- a/doc/source/devel/api/taurus/core/util/_CodecFactory.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`CodecFactory`
-=====================
-
-.. inheritance-diagram:: CodecFactory
-    :parts: 1
-    
-.. autoclass:: CodecFactory
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_CodecPipeline.rst b/doc/source/devel/api/taurus/core/util/_CodecPipeline.rst
deleted file mode 100644
index 5361b8c..0000000
--- a/doc/source/devel/api/taurus/core/util/_CodecPipeline.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`CodecPipeline`
-======================
-
-.. inheritance-diagram:: CodecPipeline
-    :parts: 1
-    
-.. autoclass:: CodecPipeline
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_ColorPalette.rst b/doc/source/devel/api/taurus/core/util/_ColorPalette.rst
deleted file mode 100644
index 4b67267..0000000
--- a/doc/source/devel/api/taurus/core/util/_ColorPalette.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`ColorPalette`
-=====================
-
-.. inheritance-diagram:: ColorPalette
-    :parts: 1
-    
-.. autoclass:: ColorPalette
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_ConfigEventGenerator.rst b/doc/source/devel/api/taurus/core/util/_ConfigEventGenerator.rst
deleted file mode 100644
index 25619d4..0000000
--- a/doc/source/devel/api/taurus/core/util/_ConfigEventGenerator.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`ConfigEventGenerator`
-=============================
-
-.. inheritance-diagram:: ConfigEventGenerator
-    :parts: 1
-    
-.. autoclass:: ConfigEventGenerator
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_CriticalIt.rst b/doc/source/devel/api/taurus/core/util/_CriticalIt.rst
deleted file mode 100644
index a970812..0000000
--- a/doc/source/devel/api/taurus/core/util/_CriticalIt.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`CriticalIt`
-===================
-
-.. inheritance-diagram:: CriticalIt
-    :parts: 1
-    
-.. autoclass:: CriticalIt
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_DebugIt.rst b/doc/source/devel/api/taurus/core/util/_DebugIt.rst
deleted file mode 100644
index e3726bc..0000000
--- a/doc/source/devel/api/taurus/core/util/_DebugIt.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`DebugIt`
-================
-
-.. inheritance-diagram:: DebugIt
-    :parts: 1
-    
-.. autoclass:: DebugIt
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_DefaultThreadDict.rst b/doc/source/devel/api/taurus/core/util/_DefaultThreadDict.rst
deleted file mode 100644
index 428d41c..0000000
--- a/doc/source/devel/api/taurus/core/util/_DefaultThreadDict.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`DefaultThreadDict`
-==========================
-
-.. inheritance-diagram:: DefaultThreadDict
-    :parts: 1
-    
-.. autoclass:: DefaultThreadDict
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_EnumException.rst b/doc/source/devel/api/taurus/core/util/_EnumException.rst
deleted file mode 100644
index a5e5e53..0000000
--- a/doc/source/devel/api/taurus/core/util/_EnumException.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`EnumException`
-======================
-
-.. inheritance-diagram:: EnumException
-    :parts: 1
-    
-.. autoclass:: EnumException
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_Enumeration.rst b/doc/source/devel/api/taurus/core/util/_Enumeration.rst
deleted file mode 100644
index 8c91111..0000000
--- a/doc/source/devel/api/taurus/core/util/_Enumeration.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`Enumeration`
-====================
-
-.. inheritance-diagram:: Enumeration
-    :parts: 1
-    
-.. autoclass:: Enumeration
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_ErrorIt.rst b/doc/source/devel/api/taurus/core/util/_ErrorIt.rst
deleted file mode 100644
index ad2dd8a..0000000
--- a/doc/source/devel/api/taurus/core/util/_ErrorIt.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`ErrorIt`
-================
-
-.. inheritance-diagram:: ErrorIt
-    :parts: 1
-    
-.. autoclass:: ErrorIt
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_EventGenerator.rst b/doc/source/devel/api/taurus/core/util/_EventGenerator.rst
deleted file mode 100644
index 1790aba..0000000
--- a/doc/source/devel/api/taurus/core/util/_EventGenerator.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`EventGenerator`
-=======================
-
-.. inheritance-diagram:: EventGenerator
-    :parts: 1
-    
-.. autoclass:: EventGenerator
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_EventListener.rst b/doc/source/devel/api/taurus/core/util/_EventListener.rst
deleted file mode 100644
index 5a18c14..0000000
--- a/doc/source/devel/api/taurus/core/util/_EventListener.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`EventListener`
-======================
-
-.. inheritance-diagram:: EventListener
-    :parts: 1
-    
-.. autoclass:: EventListener
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_FunctionCodec.rst b/doc/source/devel/api/taurus/core/util/_FunctionCodec.rst
deleted file mode 100644
index 2300765..0000000
--- a/doc/source/devel/api/taurus/core/util/_FunctionCodec.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`FunctionCodec`
-======================
-
-.. inheritance-diagram:: FunctionCodec
-    :parts: 1
-    
-.. autoclass:: FunctionCodec
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_InfoIt.rst b/doc/source/devel/api/taurus/core/util/_InfoIt.rst
deleted file mode 100644
index 32f3441..0000000
--- a/doc/source/devel/api/taurus/core/util/_InfoIt.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`InfoIt`
-===============
-
-.. inheritance-diagram:: InfoIt
-    :parts: 1
-    
-.. autoclass:: InfoIt
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_JSONCodec.rst b/doc/source/devel/api/taurus/core/util/_JSONCodec.rst
deleted file mode 100644
index a0f93d7..0000000
--- a/doc/source/devel/api/taurus/core/util/_JSONCodec.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`JSONCodec`
-==================
-
-.. inheritance-diagram:: JSONCodec
-    :parts: 1
-    
-.. autoclass:: JSONCodec
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_LIFO.rst b/doc/source/devel/api/taurus/core/util/_LIFO.rst
deleted file mode 100644
index 3cb6a70..0000000
--- a/doc/source/devel/api/taurus/core/util/_LIFO.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`LIFO`
-=============
-
-.. inheritance-diagram:: LIFO
-    :parts: 1
-    
-.. autoclass:: LIFO
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_ListEventGenerator.rst b/doc/source/devel/api/taurus/core/util/_ListEventGenerator.rst
deleted file mode 100644
index b5b8a1f..0000000
--- a/doc/source/devel/api/taurus/core/util/_ListEventGenerator.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`ListEventGenerator`
-===========================
-
-.. inheritance-diagram:: ListEventGenerator
-    :parts: 1
-    
-.. autoclass:: ListEventGenerator
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_LogFilter.rst b/doc/source/devel/api/taurus/core/util/_LogFilter.rst
deleted file mode 100644
index 9ccfe88..0000000
--- a/doc/source/devel/api/taurus/core/util/_LogFilter.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`LogFilter`
-==================
-
-.. inheritance-diagram:: LogFilter
-    :parts: 1
-    
-.. autoclass:: LogFilter
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_LogIt.rst b/doc/source/devel/api/taurus/core/util/_LogIt.rst
deleted file mode 100644
index 8938d4f..0000000
--- a/doc/source/devel/api/taurus/core/util/_LogIt.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`LogIt`
-==============
-
-.. inheritance-diagram:: LogIt
-    :parts: 1
-    
-.. autoclass:: LogIt
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_Logger.rst b/doc/source/devel/api/taurus/core/util/_Logger.rst
deleted file mode 100644
index fe5cd18..0000000
--- a/doc/source/devel/api/taurus/core/util/_Logger.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`Logger`
-===============
-
-.. inheritance-diagram:: Logger
-    :parts: 1
-    
-.. autoclass:: Logger
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_LoopList.rst b/doc/source/devel/api/taurus/core/util/_LoopList.rst
deleted file mode 100644
index 15f543e..0000000
--- a/doc/source/devel/api/taurus/core/util/_LoopList.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`LoopList`
-=================
-
-.. inheritance-diagram:: LoopList
-    :parts: 1
-    
-.. autoclass:: LoopList
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_MemoryLogHandler.rst b/doc/source/devel/api/taurus/core/util/_MemoryLogHandler.rst
deleted file mode 100644
index f8bac99..0000000
--- a/doc/source/devel/api/taurus/core/util/_MemoryLogHandler.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`MemoryLogHandler`
-=========================
-
-.. inheritance-diagram:: MemoryLogHandler
-    :parts: 1
-    
-.. autoclass:: MemoryLogHandler
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_NullCodec.rst b/doc/source/devel/api/taurus/core/util/_NullCodec.rst
deleted file mode 100644
index 5a49a5c..0000000
--- a/doc/source/devel/api/taurus/core/util/_NullCodec.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`NullCodec`
-==================
-
-.. inheritance-diagram:: NullCodec
-    :parts: 1
-    
-.. autoclass:: NullCodec
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_Object.rst b/doc/source/devel/api/taurus/core/util/_Object.rst
deleted file mode 100644
index 4f60977..0000000
--- a/doc/source/devel/api/taurus/core/util/_Object.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`Object`
-===============
-
-.. inheritance-diagram:: Object
-    :parts: 1
-    
-.. autoclass:: Object
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_PlotCodec.rst b/doc/source/devel/api/taurus/core/util/_PlotCodec.rst
deleted file mode 100644
index 7223eeb..0000000
--- a/doc/source/devel/api/taurus/core/util/_PlotCodec.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`PlotCodec`
-==================
-
-.. inheritance-diagram:: PlotCodec
-    :parts: 1
-    
-.. autoclass:: PlotCodec
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_SafeEvaluator.rst b/doc/source/devel/api/taurus/core/util/_SafeEvaluator.rst
deleted file mode 100644
index c86b236..0000000
--- a/doc/source/devel/api/taurus/core/util/_SafeEvaluator.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`SafeEvaluator`
-======================
-
-.. inheritance-diagram:: SafeEvaluator
-    :parts: 1
-    
-.. autoclass:: SafeEvaluator
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_Singleton.rst b/doc/source/devel/api/taurus/core/util/_Singleton.rst
deleted file mode 100644
index e3160aa..0000000
--- a/doc/source/devel/api/taurus/core/util/_Singleton.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`Singleton`
-==================
-
-.. inheritance-diagram:: Singleton
-    :parts: 1
-    
-.. autoclass:: Singleton
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_ThreadDict.rst b/doc/source/devel/api/taurus/core/util/_ThreadDict.rst
deleted file mode 100644
index cc58bff..0000000
--- a/doc/source/devel/api/taurus/core/util/_ThreadDict.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`ThreadDict`
-===================
-
-.. inheritance-diagram:: ThreadDict
-    :parts: 1
-    
-.. autoclass:: ThreadDict
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_ThreadPool.rst b/doc/source/devel/api/taurus/core/util/_ThreadPool.rst
deleted file mode 100644
index 2eff4eb..0000000
--- a/doc/source/devel/api/taurus/core/util/_ThreadPool.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`ThreadPool`
-===================
-
-.. inheritance-diagram:: ThreadPool
-    :parts: 1
-    
-.. autoclass:: ThreadPool
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_TimedQueue.rst b/doc/source/devel/api/taurus/core/util/_TimedQueue.rst
deleted file mode 100644
index d2be26e..0000000
--- a/doc/source/devel/api/taurus/core/util/_TimedQueue.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`TimedQueue`
-===================
-
-.. inheritance-diagram:: TimedQueue
-    :parts: 1
-    
-.. autoclass:: TimedQueue
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_Timer.rst b/doc/source/devel/api/taurus/core/util/_Timer.rst
deleted file mode 100644
index 43b0ea1..0000000
--- a/doc/source/devel/api/taurus/core/util/_Timer.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`Timer`
-==============
-
-.. inheritance-diagram:: Timer
-    :parts: 1
-    
-.. autoclass:: Timer
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_TraceIt.rst b/doc/source/devel/api/taurus/core/util/_TraceIt.rst
deleted file mode 100644
index e8be407..0000000
--- a/doc/source/devel/api/taurus/core/util/_TraceIt.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`TraceIt`
-================
-
-.. inheritance-diagram:: TraceIt
-    :parts: 1
-    
-.. autoclass:: TraceIt
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_WarnIt.rst b/doc/source/devel/api/taurus/core/util/_WarnIt.rst
deleted file mode 100644
index ea76d10..0000000
--- a/doc/source/devel/api/taurus/core/util/_WarnIt.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`WarnIt`
-===============
-
-.. inheritance-diagram:: WarnIt
-    :parts: 1
-    
-.. autoclass:: WarnIt
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_Worker.rst b/doc/source/devel/api/taurus/core/util/_Worker.rst
deleted file mode 100644
index 8dba5e2..0000000
--- a/doc/source/devel/api/taurus/core/util/_Worker.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`Worker`
-===============
-
-.. inheritance-diagram:: Worker
-    :parts: 1
-    
-.. autoclass:: Worker
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_ZIPCodec.rst b/doc/source/devel/api/taurus/core/util/_ZIPCodec.rst
deleted file mode 100644
index 527cd36..0000000
--- a/doc/source/devel/api/taurus/core/util/_ZIPCodec.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`ZIPCodec`
-=================
-
-.. inheritance-diagram:: ZIPCodec
-    :parts: 1
-    
-.. autoclass:: ZIPCodec
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/_defaultdict_fromkey.rst b/doc/source/devel/api/taurus/core/util/_defaultdict_fromkey.rst
deleted file mode 100644
index 6f7ce17..0000000
--- a/doc/source/devel/api/taurus/core/util/_defaultdict_fromkey.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util
-
-:class:`defaultdict_fromkey`
-============================
-
-.. inheritance-diagram:: defaultdict_fromkey
-    :parts: 1
-    
-.. autoclass:: defaultdict_fromkey
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/core/util/argparse.rst b/doc/source/devel/api/taurus/core/util/argparse.rst
deleted file mode 100644
index fef8923..0000000
--- a/doc/source/devel/api/taurus/core/util/argparse.rst
+++ /dev/null
@@ -1,27 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.util.argparse
-
-:mod:`taurus.core.util.argparse`
-================================
-
-.. automodule:: taurus.core.util.argparse
-
-
-    
-
-
-
-
-
-.. rubric:: Functions
-
-
-.. autofunction:: get_taurus_parser
-
-.. autofunction:: init_taurus_args
-
-.. autofunction:: parse_taurus_args
-
-
-
diff --git a/doc/source/devel/api/taurus/core/utils.rst b/doc/source/devel/api/taurus/core/utils.rst
deleted file mode 100644
index ad03fe4..0000000
--- a/doc/source/devel/api/taurus/core/utils.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.core.utils
-
-:mod:`taurus.core.utils`
-========================
-
-.. automodule:: taurus.core.utils
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt.rst b/doc/source/devel/api/taurus/qt.rst
deleted file mode 100644
index 006cbfe..0000000
--- a/doc/source/devel/api/taurus/qt.rst
+++ /dev/null
@@ -1,33 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt
-
-:mod:`taurus.qt`
-================
-
-.. automodule:: taurus.qt
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    qtcore <qt/qtcore>
-
-    qtdesigner <qt/qtdesigner>
-
-    qtgui <qt/qtgui>
-
-    qtopengl <qt/qtopengl>
-
-    uic <qt/uic>
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtcore.rst b/doc/source/devel/api/taurus/qt/qtcore.rst
deleted file mode 100644
index 34554f1..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore.rst
+++ /dev/null
@@ -1,35 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore
-
-:mod:`taurus.qt.qtcore`
-=======================
-
-.. automodule:: taurus.qt.qtcore
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    communication <qtcore/communication>
-
-    configuration <qtcore/configuration>
-
-    mimetypes <qtcore/mimetypes>
-
-    model <qtcore/model>
-
-    tango <qtcore/tango>
-
-    util <qtcore/util>
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtcore/communication.rst b/doc/source/devel/api/taurus/qt/qtcore/communication.rst
deleted file mode 100644
index ce0e419..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/communication.rst
+++ /dev/null
@@ -1,35 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.communication
-
-:mod:`taurus.qt.qtcore.communication`
-=====================================
-
-.. automodule:: taurus.qt.qtcore.communication
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    communication/_DataModel.rst
-
-    communication/_SharedDataManager.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`DataModel`
-
-    * :class:`SharedDataManager`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtcore/communication/_DataModel.rst b/doc/source/devel/api/taurus/qt/qtcore/communication/_DataModel.rst
deleted file mode 100644
index cf1f853..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/communication/_DataModel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.communication
-
-:class:`DataModel`
-==================
-
-.. inheritance-diagram:: DataModel
-    :parts: 1
-    
-.. autoclass:: DataModel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/communication/_SharedDataManager.rst b/doc/source/devel/api/taurus/qt/qtcore/communication/_SharedDataManager.rst
deleted file mode 100644
index fadeb02..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/communication/_SharedDataManager.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.communication
-
-:class:`SharedDataManager`
-==========================
-
-.. inheritance-diagram:: SharedDataManager
-    :parts: 1
-    
-.. autoclass:: SharedDataManager
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/configuration.rst b/doc/source/devel/api/taurus/qt/qtcore/configuration.rst
deleted file mode 100644
index 4af19f8..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/configuration.rst
+++ /dev/null
@@ -1,35 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.configuration
-
-:mod:`taurus.qt.qtcore.configuration`
-=====================================
-
-.. automodule:: taurus.qt.qtcore.configuration
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    configuration/_BaseConfigurableClass.rst
-
-    configuration/_configurableProperty.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`BaseConfigurableClass`
-
-    * :class:`configurableProperty`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtcore/configuration/_BaseConfigurableClass.rst b/doc/source/devel/api/taurus/qt/qtcore/configuration/_BaseConfigurableClass.rst
deleted file mode 100644
index aa0ea9e..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/configuration/_BaseConfigurableClass.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.configuration
-
-:class:`BaseConfigurableClass`
-==============================
-
-.. inheritance-diagram:: BaseConfigurableClass
-    :parts: 1
-    
-.. autoclass:: BaseConfigurableClass
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/configuration/_configurableProperty.rst b/doc/source/devel/api/taurus/qt/qtcore/configuration/_configurableProperty.rst
deleted file mode 100644
index 527645d..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/configuration/_configurableProperty.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.configuration
-
-:class:`configurableProperty`
-=============================
-
-.. inheritance-diagram:: configurableProperty
-    :parts: 1
-    
-.. autoclass:: configurableProperty
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/mimetypes.rst b/doc/source/devel/api/taurus/qt/qtcore/mimetypes.rst
deleted file mode 100644
index 5b81532..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/mimetypes.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.mimetypes
-
-:mod:`taurus.qt.qtcore.mimetypes`
-=================================
-
-.. automodule:: taurus.qt.qtcore.mimetypes
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model.rst b/doc/source/devel/api/taurus/qt/qtcore/model.rst
deleted file mode 100644
index adbdd28..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model.rst
+++ /dev/null
@@ -1,111 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:mod:`taurus.qt.qtcore.model`
-=============================
-
-.. automodule:: taurus.qt.qtcore.model
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    model/_TaurusDbBaseModel.rst
-
-    model/_TaurusDbBaseProxyModel.rst
-
-    model/_TaurusDbDeviceClassModel.rst
-
-    model/_TaurusDbDeviceClassProxyModel.rst
-
-    model/_TaurusDbDeviceModel.rst
-
-    model/_TaurusDbDeviceProxyModel.rst
-
-    model/_TaurusDbPlainDeviceModel.rst
-
-    model/_TaurusDbServerModel.rst
-
-    model/_TaurusDbServerProxyModel.rst
-
-    model/_TaurusDbSimpleDeviceModel.rst
-
-    model/_TaurusTreeAttributeItem.rst
-
-    model/_TaurusTreeDeviceClassItem.rst
-
-    model/_TaurusTreeDeviceDomainItem.rst
-
-    model/_TaurusTreeDeviceFamilyItem.rst
-
-    model/_TaurusTreeDeviceItem.rst
-
-    model/_TaurusTreeDeviceMemberItem.rst
-
-    model/_TaurusTreeDevicePartItem.rst
-
-    model/_TaurusTreeItem.rst
-
-    model/_TaurusTreeServerItem.rst
-
-    model/_TaurusTreeServerNameItem.rst
-
-    model/_TaurusTreeSimpleDeviceItem.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`TaurusDbBaseModel`
-
-    * :class:`TaurusDbBaseProxyModel`
-
-    * :class:`TaurusDbDeviceClassModel`
-
-    * :class:`TaurusDbDeviceClassProxyModel`
-
-    * :class:`TaurusDbDeviceModel`
-
-    * :class:`TaurusDbDeviceProxyModel`
-
-    * :class:`TaurusDbPlainDeviceModel`
-
-    * :class:`TaurusDbServerModel`
-
-    * :class:`TaurusDbServerProxyModel`
-
-    * :class:`TaurusDbSimpleDeviceModel`
-
-    * :class:`TaurusTreeAttributeItem`
-
-    * :class:`TaurusTreeDeviceClassItem`
-
-    * :class:`TaurusTreeDeviceDomainItem`
-
-    * :class:`TaurusTreeDeviceFamilyItem`
-
-    * :class:`TaurusTreeDeviceItem`
-
-    * :class:`TaurusTreeDeviceMemberItem`
-
-    * :class:`TaurusTreeDevicePartItem`
-
-    * :class:`TaurusTreeItem`
-
-    * :class:`TaurusTreeServerItem`
-
-    * :class:`TaurusTreeServerNameItem`
-
-    * :class:`TaurusTreeSimpleDeviceItem`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbBaseModel.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbBaseModel.rst
deleted file mode 100644
index 59384e1..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbBaseModel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusDbBaseModel`
-==========================
-
-.. inheritance-diagram:: TaurusDbBaseModel
-    :parts: 1
-    
-.. autoclass:: TaurusDbBaseModel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbBaseProxyModel.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbBaseProxyModel.rst
deleted file mode 100644
index cb8a3c2..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbBaseProxyModel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusDbBaseProxyModel`
-===============================
-
-.. inheritance-diagram:: TaurusDbBaseProxyModel
-    :parts: 1
-    
-.. autoclass:: TaurusDbBaseProxyModel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbDeviceClassModel.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbDeviceClassModel.rst
deleted file mode 100644
index c82c818..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbDeviceClassModel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusDbDeviceClassModel`
-=================================
-
-.. inheritance-diagram:: TaurusDbDeviceClassModel
-    :parts: 1
-    
-.. autoclass:: TaurusDbDeviceClassModel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbDeviceClassProxyModel.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbDeviceClassProxyModel.rst
deleted file mode 100644
index 3121e3e..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbDeviceClassProxyModel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusDbDeviceClassProxyModel`
-======================================
-
-.. inheritance-diagram:: TaurusDbDeviceClassProxyModel
-    :parts: 1
-    
-.. autoclass:: TaurusDbDeviceClassProxyModel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbDeviceModel.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbDeviceModel.rst
deleted file mode 100644
index 951b434..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbDeviceModel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusDbDeviceModel`
-============================
-
-.. inheritance-diagram:: TaurusDbDeviceModel
-    :parts: 1
-    
-.. autoclass:: TaurusDbDeviceModel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbDeviceProxyModel.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbDeviceProxyModel.rst
deleted file mode 100644
index 7c307ca..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbDeviceProxyModel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusDbDeviceProxyModel`
-=================================
-
-.. inheritance-diagram:: TaurusDbDeviceProxyModel
-    :parts: 1
-    
-.. autoclass:: TaurusDbDeviceProxyModel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbPlainDeviceModel.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbPlainDeviceModel.rst
deleted file mode 100644
index 713e0ae..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbPlainDeviceModel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusDbPlainDeviceModel`
-=================================
-
-.. inheritance-diagram:: TaurusDbPlainDeviceModel
-    :parts: 1
-    
-.. autoclass:: TaurusDbPlainDeviceModel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbServerModel.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbServerModel.rst
deleted file mode 100644
index cc547c6..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbServerModel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusDbServerModel`
-============================
-
-.. inheritance-diagram:: TaurusDbServerModel
-    :parts: 1
-    
-.. autoclass:: TaurusDbServerModel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbServerProxyModel.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbServerProxyModel.rst
deleted file mode 100644
index 2a641e4..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbServerProxyModel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusDbServerProxyModel`
-=================================
-
-.. inheritance-diagram:: TaurusDbServerProxyModel
-    :parts: 1
-    
-.. autoclass:: TaurusDbServerProxyModel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbSimpleDeviceModel.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbSimpleDeviceModel.rst
deleted file mode 100644
index 0ea3ca9..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusDbSimpleDeviceModel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusDbSimpleDeviceModel`
-==================================
-
-.. inheritance-diagram:: TaurusDbSimpleDeviceModel
-    :parts: 1
-    
-.. autoclass:: TaurusDbSimpleDeviceModel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeAttributeItem.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeAttributeItem.rst
deleted file mode 100644
index fa2aa23..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeAttributeItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusTreeAttributeItem`
-================================
-
-.. inheritance-diagram:: TaurusTreeAttributeItem
-    :parts: 1
-    
-.. autoclass:: TaurusTreeAttributeItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDeviceClassItem.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDeviceClassItem.rst
deleted file mode 100644
index dc6675c..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDeviceClassItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusTreeDeviceClassItem`
-==================================
-
-.. inheritance-diagram:: TaurusTreeDeviceClassItem
-    :parts: 1
-    
-.. autoclass:: TaurusTreeDeviceClassItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDeviceDomainItem.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDeviceDomainItem.rst
deleted file mode 100644
index 7d45a75..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDeviceDomainItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusTreeDeviceDomainItem`
-===================================
-
-.. inheritance-diagram:: TaurusTreeDeviceDomainItem
-    :parts: 1
-    
-.. autoclass:: TaurusTreeDeviceDomainItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDeviceFamilyItem.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDeviceFamilyItem.rst
deleted file mode 100644
index ca05b44..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDeviceFamilyItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusTreeDeviceFamilyItem`
-===================================
-
-.. inheritance-diagram:: TaurusTreeDeviceFamilyItem
-    :parts: 1
-    
-.. autoclass:: TaurusTreeDeviceFamilyItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDeviceItem.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDeviceItem.rst
deleted file mode 100644
index 0337d0e..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDeviceItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusTreeDeviceItem`
-=============================
-
-.. inheritance-diagram:: TaurusTreeDeviceItem
-    :parts: 1
-    
-.. autoclass:: TaurusTreeDeviceItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDeviceMemberItem.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDeviceMemberItem.rst
deleted file mode 100644
index 787e78e..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDeviceMemberItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusTreeDeviceMemberItem`
-===================================
-
-.. inheritance-diagram:: TaurusTreeDeviceMemberItem
-    :parts: 1
-    
-.. autoclass:: TaurusTreeDeviceMemberItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDevicePartItem.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDevicePartItem.rst
deleted file mode 100644
index 70d6709..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeDevicePartItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusTreeDevicePartItem`
-=================================
-
-.. inheritance-diagram:: TaurusTreeDevicePartItem
-    :parts: 1
-    
-.. autoclass:: TaurusTreeDevicePartItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeItem.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeItem.rst
deleted file mode 100644
index 6c7562a..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusTreeItem`
-=======================
-
-.. inheritance-diagram:: TaurusTreeItem
-    :parts: 1
-    
-.. autoclass:: TaurusTreeItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeServerItem.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeServerItem.rst
deleted file mode 100644
index 187453e..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeServerItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusTreeServerItem`
-=============================
-
-.. inheritance-diagram:: TaurusTreeServerItem
-    :parts: 1
-    
-.. autoclass:: TaurusTreeServerItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeServerNameItem.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeServerNameItem.rst
deleted file mode 100644
index ba613a9..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeServerNameItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusTreeServerNameItem`
-=================================
-
-.. inheritance-diagram:: TaurusTreeServerNameItem
-    :parts: 1
-    
-.. autoclass:: TaurusTreeServerNameItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeSimpleDeviceItem.rst b/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeSimpleDeviceItem.rst
deleted file mode 100644
index 53bfa05..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/model/_TaurusTreeSimpleDeviceItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.model
-
-:class:`TaurusTreeSimpleDeviceItem`
-===================================
-
-.. inheritance-diagram:: TaurusTreeSimpleDeviceItem
-    :parts: 1
-    
-.. autoclass:: TaurusTreeSimpleDeviceItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/tango.rst b/doc/source/devel/api/taurus/qt/qtcore/tango.rst
deleted file mode 100644
index 010336a..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/tango.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.tango
-
-:mod:`taurus.qt.qtcore.tango`
-=============================
-
-.. automodule:: taurus.qt.qtcore.tango
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    macroserver <tango/macroserver>
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtcore/tango/macroserver.rst b/doc/source/devel/api/taurus/qt/qtcore/tango/macroserver.rst
deleted file mode 100644
index 04b0b88..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/tango/macroserver.rst
+++ /dev/null
@@ -1,41 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.tango.macroserver
-
-:mod:`taurus.qt.qtcore.tango.macroserver`
-=========================================
-
-.. automodule:: taurus.qt.qtcore.tango.macroserver
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    macroserver/_QDoor.rst
-
-    macroserver/_QMacroServer.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`QDoor`
-
-    * :class:`QMacroServer`
-
-
-
-
-.. rubric:: Functions
-
-
-.. autofunction:: registerExtensions
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtcore/tango/macroserver/_QDoor.rst b/doc/source/devel/api/taurus/qt/qtcore/tango/macroserver/_QDoor.rst
deleted file mode 100644
index 80ea153..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/tango/macroserver/_QDoor.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.tango.macroserver
-
-:class:`QDoor`
-==============
-
-.. inheritance-diagram:: QDoor
-    :parts: 1
-    
-.. autoclass:: QDoor
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/tango/macroserver/_QMacroServer.rst b/doc/source/devel/api/taurus/qt/qtcore/tango/macroserver/_QMacroServer.rst
deleted file mode 100644
index 57d6dbb..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/tango/macroserver/_QMacroServer.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.tango.macroserver
-
-:class:`QMacroServer`
-=====================
-
-.. inheritance-diagram:: QMacroServer
-    :parts: 1
-    
-.. autoclass:: QMacroServer
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtcore/util.rst b/doc/source/devel/api/taurus/qt/qtcore/util.rst
deleted file mode 100644
index 9554c5f..0000000
--- a/doc/source/devel/api/taurus/qt/qtcore/util.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtcore.util
-
-:mod:`taurus.qt.qtcore.util`
-============================
-
-.. automodule:: taurus.qt.qtcore.util
-
-
-    
-
-
-
-
-
-.. rubric:: Functions
-
-
-.. autofunction:: getQtLogger
-
-.. autofunction:: initTaurusQtLogger
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtdesigner.rst b/doc/source/devel/api/taurus/qt/qtdesigner.rst
deleted file mode 100644
index 662cc56..0000000
--- a/doc/source/devel/api/taurus/qt/qtdesigner.rst
+++ /dev/null
@@ -1,25 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtdesigner
-
-:mod:`taurus.qt.qtdesigner`
-===========================
-
-.. automodule:: taurus.qt.qtdesigner
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    taurusplugin <qtdesigner/taurusplugin>
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtdesigner/taurusplugin.rst b/doc/source/devel/api/taurus/qt/qtdesigner/taurusplugin.rst
deleted file mode 100644
index 4618bd1..0000000
--- a/doc/source/devel/api/taurus/qt/qtdesigner/taurusplugin.rst
+++ /dev/null
@@ -1,37 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtdesigner.taurusplugin
-
-:mod:`taurus.qt.qtdesigner.taurusplugin`
-========================================
-
-.. automodule:: taurus.qt.qtdesigner.taurusplugin
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    taurusplugin/_TaurusWidgetPlugin.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`TaurusWidgetPlugin`
-
-
-
-
-.. rubric:: Functions
-
-
-.. autofunction:: Q_TYPEID
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtdesigner/taurusplugin/_TaurusWidgetPlugin.rst b/doc/source/devel/api/taurus/qt/qtdesigner/taurusplugin/_TaurusWidgetPlugin.rst
deleted file mode 100644
index 075bb0d..0000000
--- a/doc/source/devel/api/taurus/qt/qtdesigner/taurusplugin/_TaurusWidgetPlugin.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtdesigner.taurusplugin
-
-:class:`TaurusWidgetPlugin`
-===========================
-
-.. inheritance-diagram:: TaurusWidgetPlugin
-    :parts: 1
-    
-.. autoclass:: TaurusWidgetPlugin
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui.rst b/doc/source/devel/api/taurus/qt/qtgui.rst
deleted file mode 100644
index 66d76da..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui.rst
+++ /dev/null
@@ -1,73 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui
-
-:mod:`taurus.qt.qtgui`
-======================
-
-.. automodule:: taurus.qt.qtgui
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    application <qtgui/application>
-
-    base <qtgui/base>
-
-    button <qtgui/button>
-
-    container <qtgui/container>
-
-    dialog <qtgui/dialog>
-
-    display <qtgui/display>
-
-    extra_macroexecutor <qtgui/extra_macroexecutor>
-
-    extra_nexus <qtgui/extra_nexus>
-
-    extra_pool <qtgui/extra_pool>
-
-    extra_sardana <qtgui/extra_sardana>
-
-    extra_taurusservers <qtgui/extra_taurusservers>
-
-    extra_xterm <qtgui/extra_xterm>
-
-    gauge <qtgui/gauge>
-
-    graphic <qtgui/graphic>
-
-    image <qtgui/image>
-
-    input <qtgui/input>
-
-    panel <qtgui/panel>
-
-    plot <qtgui/plot>
-
-    resource <qtgui/resource>
-
-    shell <qtgui/shell>
-
-    table <qtgui/table>
-
-    taurusgui <qtgui/taurusgui>
-
-    tree <qtgui/tree>
-
-    ui <qtgui/ui>
-
-    util <qtgui/util>
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/application.rst b/doc/source/devel/api/taurus/qt/qtgui/application.rst
deleted file mode 100644
index 4954bc7..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/application.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.application
-
-:mod:`taurus.qt.qtgui.application`
-==================================
-
-.. automodule:: taurus.qt.qtgui.application
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    application/_TaurusApplication.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`TaurusApplication`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/application/_TaurusApplication.rst b/doc/source/devel/api/taurus/qt/qtgui/application/_TaurusApplication.rst
deleted file mode 100644
index 7f893a6..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/application/_TaurusApplication.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.application
-
-:class:`TaurusApplication`
-==========================
-
-.. inheritance-diagram:: TaurusApplication
-    :parts: 1
-    
-.. autoclass:: TaurusApplication
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/base.rst b/doc/source/devel/api/taurus/qt/qtgui/base.rst
deleted file mode 100644
index d974455..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/base.rst
+++ /dev/null
@@ -1,69 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.base
-
-:mod:`taurus.qt.qtgui.base`
-===========================
-
-.. automodule:: taurus.qt.qtgui.base
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    base/_TaurusAttributeControllerHelper.rst
-
-    base/_TaurusBaseComponent.rst
-
-    base/_TaurusBaseController.rst
-
-    base/_TaurusBaseWidget.rst
-
-    base/_TaurusBaseWritableWidget.rst
-
-    base/_TaurusConfigurationControllerHelper.rst
-
-    base/_TaurusQAttribute.rst
-
-    base/_TaurusQAttributeFactory.rst
-
-    base/_TaurusScalarAttributeControllerHelper.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`TaurusAttributeControllerHelper`
-
-    * :class:`TaurusBaseComponent`
-
-    * :class:`TaurusBaseController`
-
-    * :class:`TaurusBaseWidget`
-
-    * :class:`TaurusBaseWritableWidget`
-
-    * :class:`TaurusConfigurationControllerHelper`
-
-    * :class:`TaurusQAttribute`
-
-    * :class:`TaurusQAttributeFactory`
-
-    * :class:`TaurusScalarAttributeControllerHelper`
-
-
-
-
-.. rubric:: Functions
-
-
-.. autofunction:: updateLabelBackground
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusAttributeControllerHelper.rst b/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusAttributeControllerHelper.rst
deleted file mode 100644
index e2b1a4e..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusAttributeControllerHelper.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.base
-
-:class:`TaurusAttributeControllerHelper`
-========================================
-
-.. inheritance-diagram:: TaurusAttributeControllerHelper
-    :parts: 1
-    
-.. autoclass:: TaurusAttributeControllerHelper
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusBaseComponent.rst b/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusBaseComponent.rst
deleted file mode 100644
index bf9eae5..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusBaseComponent.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.base
-
-:class:`TaurusBaseComponent`
-============================
-
-.. inheritance-diagram:: TaurusBaseComponent
-    :parts: 1
-    
-.. autoclass:: TaurusBaseComponent
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusBaseController.rst b/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusBaseController.rst
deleted file mode 100644
index ac8c749..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusBaseController.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.base
-
-:class:`TaurusBaseController`
-=============================
-
-.. inheritance-diagram:: TaurusBaseController
-    :parts: 1
-    
-.. autoclass:: TaurusBaseController
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusBaseWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusBaseWidget.rst
deleted file mode 100644
index 121733d..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusBaseWidget.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.base
-
-:class:`TaurusBaseWidget`
-=========================
-
-.. inheritance-diagram:: TaurusBaseWidget
-    :parts: 1
-    
-.. autoclass:: TaurusBaseWidget
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusBaseWritableWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusBaseWritableWidget.rst
deleted file mode 100644
index 1ac549d..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusBaseWritableWidget.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.base
-
-:class:`TaurusBaseWritableWidget`
-=================================
-
-.. inheritance-diagram:: TaurusBaseWritableWidget
-    :parts: 1
-    
-.. autoclass:: TaurusBaseWritableWidget
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusConfigurationControllerHelper.rst b/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusConfigurationControllerHelper.rst
deleted file mode 100644
index d86781f..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusConfigurationControllerHelper.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.base
-
-:class:`TaurusConfigurationControllerHelper`
-============================================
-
-.. inheritance-diagram:: TaurusConfigurationControllerHelper
-    :parts: 1
-    
-.. autoclass:: TaurusConfigurationControllerHelper
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusQAttribute.rst b/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusQAttribute.rst
deleted file mode 100644
index 14ccba1..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusQAttribute.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.base
-
-:class:`TaurusQAttribute`
-=========================
-
-.. inheritance-diagram:: TaurusQAttribute
-    :parts: 1
-    
-.. autoclass:: TaurusQAttribute
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusQAttributeFactory.rst b/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusQAttributeFactory.rst
deleted file mode 100644
index 78d16ad..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusQAttributeFactory.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.base
-
-:class:`TaurusQAttributeFactory`
-================================
-
-.. inheritance-diagram:: TaurusQAttributeFactory
-    :parts: 1
-    
-.. autoclass:: TaurusQAttributeFactory
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusScalarAttributeControllerHelper.rst b/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusScalarAttributeControllerHelper.rst
deleted file mode 100644
index 45fa56f..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/base/_TaurusScalarAttributeControllerHelper.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.base
-
-:class:`TaurusScalarAttributeControllerHelper`
-==============================================
-
-.. inheritance-diagram:: TaurusScalarAttributeControllerHelper
-    :parts: 1
-    
-.. autoclass:: TaurusScalarAttributeControllerHelper
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/button.rst b/doc/source/devel/api/taurus/qt/qtgui/button.rst
deleted file mode 100644
index 081bb46..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/button.rst
+++ /dev/null
@@ -1,39 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.button
-
-:mod:`taurus.qt.qtgui.button`
-=============================
-
-.. automodule:: taurus.qt.qtgui.button
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    button/_QButtonBox.rst
-
-    button/_TaurusCommandButton.rst
-
-    button/_TaurusLauncherButton.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`QButtonBox`
-
-    * :class:`TaurusCommandButton`
-
-    * :class:`TaurusLauncherButton`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/button/_QButtonBox.rst b/doc/source/devel/api/taurus/qt/qtgui/button/_QButtonBox.rst
deleted file mode 100644
index e64eb31..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/button/_QButtonBox.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.button
-
-:class:`QButtonBox`
-===================
-
-.. inheritance-diagram:: QButtonBox
-    :parts: 1
-    
-.. autoclass:: QButtonBox
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/button/_TaurusCommandButton.rst b/doc/source/devel/api/taurus/qt/qtgui/button/_TaurusCommandButton.rst
deleted file mode 100644
index 42b5ae8..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/button/_TaurusCommandButton.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.button
-
-:class:`TaurusCommandButton`
-============================
-
-.. inheritance-diagram:: TaurusCommandButton
-    :parts: 1
-    
-.. autoclass:: TaurusCommandButton
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/button/_TaurusLauncherButton.rst b/doc/source/devel/api/taurus/qt/qtgui/button/_TaurusLauncherButton.rst
deleted file mode 100644
index 7a2827e..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/button/_TaurusLauncherButton.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.button
-
-:class:`TaurusLauncherButton`
-=============================
-
-.. inheritance-diagram:: TaurusLauncherButton
-    :parts: 1
-    
-.. autoclass:: TaurusLauncherButton
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/container.rst b/doc/source/devel/api/taurus/qt/qtgui/container.rst
deleted file mode 100644
index 611d5ae..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/container.rst
+++ /dev/null
@@ -1,59 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.container
-
-:mod:`taurus.qt.qtgui.container`
-================================
-
-.. automodule:: taurus.qt.qtgui.container
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    container/_QGroupWidget.rst
-
-    container/_TaurusBaseContainer.rst
-
-    container/_TaurusFrame.rst
-
-    container/_TaurusGroupBox.rst
-
-    container/_TaurusGroupWidget.rst
-
-    container/_TaurusMainWindow.rst
-
-    container/_TaurusScrollArea.rst
-
-    container/_TaurusWidget.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`QGroupWidget`
-
-    * :class:`TaurusBaseContainer`
-
-    * :class:`TaurusFrame`
-
-    * :class:`TaurusGroupBox`
-
-    * :class:`TaurusGroupWidget`
-
-    * :class:`TaurusMainWindow`
-
-    * :class:`TaurusScrollArea`
-
-    * :class:`TaurusWidget`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/container/_QGroupWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/container/_QGroupWidget.rst
deleted file mode 100644
index 5047acf..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/container/_QGroupWidget.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.container
-
-:class:`QGroupWidget`
-=====================
-
-.. inheritance-diagram:: QGroupWidget
-    :parts: 1
-    
-.. autoclass:: QGroupWidget
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusBaseContainer.rst b/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusBaseContainer.rst
deleted file mode 100644
index e89fb83..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusBaseContainer.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.container
-
-:class:`TaurusBaseContainer`
-============================
-
-.. inheritance-diagram:: TaurusBaseContainer
-    :parts: 1
-    
-.. autoclass:: TaurusBaseContainer
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusFrame.rst b/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusFrame.rst
deleted file mode 100644
index 26e572a..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusFrame.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.container
-
-:class:`TaurusFrame`
-====================
-
-.. inheritance-diagram:: TaurusFrame
-    :parts: 1
-    
-.. autoclass:: TaurusFrame
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusGroupBox.rst b/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusGroupBox.rst
deleted file mode 100644
index b3276e9..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusGroupBox.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.container
-
-:class:`TaurusGroupBox`
-=======================
-
-.. inheritance-diagram:: TaurusGroupBox
-    :parts: 1
-    
-.. autoclass:: TaurusGroupBox
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusGroupWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusGroupWidget.rst
deleted file mode 100644
index 10e847f..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusGroupWidget.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.container
-
-:class:`TaurusGroupWidget`
-==========================
-
-.. inheritance-diagram:: TaurusGroupWidget
-    :parts: 1
-    
-.. autoclass:: TaurusGroupWidget
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusMainWindow.rst b/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusMainWindow.rst
deleted file mode 100644
index 7540b3c..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusMainWindow.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.container
-
-:class:`TaurusMainWindow`
-=========================
-
-.. inheritance-diagram:: TaurusMainWindow
-    :parts: 1
-    
-.. autoclass:: TaurusMainWindow
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusScrollArea.rst b/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusScrollArea.rst
deleted file mode 100644
index 3349488..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusScrollArea.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.container
-
-:class:`TaurusScrollArea`
-=========================
-
-.. inheritance-diagram:: TaurusScrollArea
-    :parts: 1
-    
-.. autoclass:: TaurusScrollArea
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusWidget.rst
deleted file mode 100644
index 9302dc5..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/container/_TaurusWidget.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.container
-
-:class:`TaurusWidget`
-=====================
-
-.. inheritance-diagram:: TaurusWidget
-    :parts: 1
-    
-.. autoclass:: TaurusWidget
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/dialog.rst b/doc/source/devel/api/taurus/qt/qtgui/dialog.rst
deleted file mode 100644
index 5ebedb7..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/dialog.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.dialog
-
-:mod:`taurus.qt.qtgui.dialog`
-=============================
-
-.. automodule:: taurus.qt.qtgui.dialog
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    dialog/_TaurusMessageBox.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`TaurusMessageBox`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/dialog/_TaurusMessageBox.rst b/doc/source/devel/api/taurus/qt/qtgui/dialog/_TaurusMessageBox.rst
deleted file mode 100644
index 1238c82..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/dialog/_TaurusMessageBox.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.dialog
-
-:class:`TaurusMessageBox`
-=========================
-
-.. inheritance-diagram:: TaurusMessageBox
-    :parts: 1
-    
-.. autoclass:: TaurusMessageBox
-    :members:
-    :undoc-members:
\ 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
deleted file mode 100644
index 99b5109..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/display.rst
+++ /dev/null
@@ -1,91 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.display
-
-:mod:`taurus.qt.qtgui.display`
-==============================
-
-.. automodule:: taurus.qt.qtgui.display
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    demo <display/demo>
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    display/_Q7SegDigit.rst
-
-    display/_QLed.rst
-
-    display/_QLedOld.rst
-
-    display/_QLogo.rst
-
-    display/_QPixmapWidget.rst
-
-    display/_TaurusBoolLed.rst
-
-    display/_TaurusConfigLabel.rst
-
-    display/_TaurusLCD.rst
-
-    display/_TaurusLCDValue.rst
-
-    display/_TaurusLabel.rst
-
-    display/_TaurusLed.rst
-
-    display/_TaurusStateLabel.rst
-
-    display/_TaurusStateLed.rst
-
-    display/_TaurusValueLabel.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`Q7SegDigit`
-
-    * :class:`QLed`
-
-    * :class:`QLedOld`
-
-    * :class:`QLogo`
-
-    * :class:`QPixmapWidget`
-
-    * :class:`TaurusBoolLed`
-
-    * :class:`TaurusConfigLabel`
-
-    * :class:`TaurusLCD`
-
-    * :class:`TaurusLCDValue`
-
-    * :class:`TaurusLabel`
-
-    * :class:`TaurusLed`
-
-    * :class:`TaurusStateLabel`
-
-    * :class:`TaurusStateLed`
-
-    * :class:`TaurusValueLabel`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/display/_Q7SegDigit.rst b/doc/source/devel/api/taurus/qt/qtgui/display/_Q7SegDigit.rst
deleted file mode 100644
index 6833977..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/display/_Q7SegDigit.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.display
-
-:class:`Q7SegDigit`
-===================
-
-.. inheritance-diagram:: Q7SegDigit
-    :parts: 1
-    
-.. autoclass:: Q7SegDigit
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/display/_QLed.rst b/doc/source/devel/api/taurus/qt/qtgui/display/_QLed.rst
deleted file mode 100644
index 8bc1a02..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/display/_QLed.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.display
-
-:class:`QLed`
-=============
-
-.. inheritance-diagram:: QLed
-    :parts: 1
-    
-.. autoclass:: QLed
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/display/_QLedOld.rst b/doc/source/devel/api/taurus/qt/qtgui/display/_QLedOld.rst
deleted file mode 100644
index 1f5b703..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/display/_QLedOld.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.display
-
-:class:`QLedOld`
-================
-
-.. inheritance-diagram:: QLedOld
-    :parts: 1
-    
-.. autoclass:: QLedOld
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/display/_QLogo.rst b/doc/source/devel/api/taurus/qt/qtgui/display/_QLogo.rst
deleted file mode 100644
index 6ac1e22..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/display/_QLogo.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.display
-
-:class:`QLogo`
-==============
-
-.. inheritance-diagram:: QLogo
-    :parts: 1
-    
-.. autoclass:: QLogo
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/display/_QPixmapWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/display/_QPixmapWidget.rst
deleted file mode 100644
index f242948..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/display/_QPixmapWidget.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.display
-
-:class:`QPixmapWidget`
-======================
-
-.. inheritance-diagram:: QPixmapWidget
-    :parts: 1
-    
-.. autoclass:: QPixmapWidget
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusBoolLed.rst b/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusBoolLed.rst
deleted file mode 100644
index 0244a7a..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusBoolLed.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.display
-
-:class:`TaurusBoolLed`
-======================
-
-.. inheritance-diagram:: TaurusBoolLed
-    :parts: 1
-    
-.. autoclass:: TaurusBoolLed
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusConfigLabel.rst b/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusConfigLabel.rst
deleted file mode 100644
index 0421082..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusConfigLabel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.display
-
-:class:`TaurusConfigLabel`
-==========================
-
-.. inheritance-diagram:: TaurusConfigLabel
-    :parts: 1
-    
-.. autoclass:: TaurusConfigLabel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusLCD.rst b/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusLCD.rst
deleted file mode 100644
index a044e78..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusLCD.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.display
-
-:class:`TaurusLCD`
-==================
-
-.. inheritance-diagram:: TaurusLCD
-    :parts: 1
-    
-.. autoclass:: TaurusLCD
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusLCDValue.rst b/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusLCDValue.rst
deleted file mode 100644
index 883f3c1..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusLCDValue.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.display
-
-:class:`TaurusLCDValue`
-=======================
-
-.. inheritance-diagram:: TaurusLCDValue
-    :parts: 1
-    
-.. autoclass:: TaurusLCDValue
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusLabel.rst b/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusLabel.rst
deleted file mode 100644
index 3e13af2..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusLabel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.display
-
-:class:`TaurusLabel`
-====================
-
-.. inheritance-diagram:: TaurusLabel
-    :parts: 1
-    
-.. autoclass:: TaurusLabel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusLed.rst b/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusLed.rst
deleted file mode 100644
index 1c0e37e..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusLed.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.display
-
-:class:`TaurusLed`
-==================
-
-.. inheritance-diagram:: TaurusLed
-    :parts: 1
-    
-.. autoclass:: TaurusLed
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusStateLabel.rst b/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusStateLabel.rst
deleted file mode 100644
index d80ccfe..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusStateLabel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.display
-
-:class:`TaurusStateLabel`
-=========================
-
-.. inheritance-diagram:: TaurusStateLabel
-    :parts: 1
-    
-.. autoclass:: TaurusStateLabel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusStateLed.rst b/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusStateLed.rst
deleted file mode 100644
index 060aff9..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusStateLed.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.display
-
-:class:`TaurusStateLed`
-=======================
-
-.. inheritance-diagram:: TaurusStateLed
-    :parts: 1
-    
-.. autoclass:: TaurusStateLed
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusValueLabel.rst b/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusValueLabel.rst
deleted file mode 100644
index e8e2ef5..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/display/_TaurusValueLabel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.display
-
-:class:`TaurusValueLabel`
-=========================
-
-.. inheritance-diagram:: TaurusValueLabel
-    :parts: 1
-    
-.. autoclass:: TaurusValueLabel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/display/demo.rst b/doc/source/devel/api/taurus/qt/qtgui/display/demo.rst
deleted file mode 100644
index c7d8499..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/display/demo.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.display.demo
-
-:mod:`taurus.qt.qtgui.display.demo`
-===================================
-
-.. automodule:: taurus.qt.qtgui.display.demo
-
-
-    
-
-
-
-
-
-
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 93376c3..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor.rst
+++ /dev/null
@@ -1,67 +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/_TaurusMacroConfigurationDialog.rst
-
-    extra_macroexecutor/_TaurusMacroDescriptionViewer.rst
-
-    extra_macroexecutor/_TaurusMacroExecutor.rst
-
-    extra_macroexecutor/_TaurusMacroExecutorWidget.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`DoorDebug`
-
-    * :class:`DoorOutput`
-
-    * :class:`DoorResult`
-
-    * :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 b26c710..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_DoorDebug.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 81c8c71..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_DoorOutput.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 07ad311..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_DoorResult.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 98c8f2f..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_TaurusMacroConfigurationDialog.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 83ac7b7..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_TaurusMacroDescriptionViewer.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 4956012..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_TaurusMacroExecutor.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 2bd2bdf..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/_TaurusMacroExecutorWidget.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 ef25f4a..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor.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.favouriteseditor
-
-:mod:`taurus.qt.qtgui.extra_macroexecutor.favouriteseditor`
-===========================================================
-
-.. automodule:: taurus.qt.qtgui.extra_macroexecutor.favouriteseditor
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    favouriteseditor/_FavouritesMacrosEditor.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`FavouritesMacrosEditor`
-
-
-
-
-
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 c57aba5..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/_FavouritesMacrosEditor.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 7d4faa4..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/_ParamEditorManager.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 f58a5b7..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/_ParamEditorModel.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 55cbbee..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/_StandardMacroParametersEditor.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 5528af0..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors/_SenvEditor.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 f56a2aa..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor.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.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`
-
-
-
-
-
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 57c2561..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/_TaurusSequencer.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 2cdba2b..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/_TaurusSequencerWidget.rst
+++ /dev/null
@@ -1,13 +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:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_nexus.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_nexus.rst
deleted file mode 100644
index af290e6..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_nexus.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_nexus
-
-:mod:`taurus.qt.qtgui.extra_nexus`
-==================================
-
-.. automodule:: taurus.qt.qtgui.extra_nexus
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    extra_nexus/_TaurusNeXusBrowser.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`TaurusNeXusBrowser`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_nexus/_TaurusNeXusBrowser.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_nexus/_TaurusNeXusBrowser.rst
deleted file mode 100644
index 8d22b2b..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_nexus/_TaurusNeXusBrowser.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_nexus
-
-:class:`TaurusNeXusBrowser`
-===========================
-
-.. inheritance-diagram:: TaurusNeXusBrowser
-    :parts: 1
-    
-.. autoclass:: TaurusNeXusBrowser
-    :members:
-    :undoc-members:
\ 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 ba0f526..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool.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_pool
-
-:mod:`taurus.qt.qtgui.extra_pool`
-=================================
-
-.. automodule:: taurus.qt.qtgui.extra_pool
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    extra_pool/_PoolChannel.rst
-
-    extra_pool/_PoolMotorSlim.rst
-
-    extra_pool/_TaurusMotorH.rst
-
-    extra_pool/_TaurusMotorH2.rst
-
-    extra_pool/_TaurusMotorV.rst
-
-    extra_pool/_TaurusMotorV2.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`PoolChannel`
-
-    * :class:`PoolMotorSlim`
-
-    * :class:`TaurusMotorH`
-
-    * :class:`TaurusMotorH2`
-
-    * :class:`TaurusMotorV`
-
-    * :class:`TaurusMotorV2`
-
-
-
-
-
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 3f0ff44..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolChannel.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 d22e7b9..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_PoolMotorSlim.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 751afcf..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_TaurusMotorH.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 f4ed9fe..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_TaurusMotorH2.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 15a18fa..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_TaurusMotorV.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 dd848c0..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_pool/_TaurusMotorV2.rst
+++ /dev/null
@@ -1,13 +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:
\ 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 a3e2670..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_sardana.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_sardana
-
-:mod:`taurus.qt.qtgui.extra_sardana`
-====================================
-
-.. automodule:: taurus.qt.qtgui.extra_sardana
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    extra_sardana/_SardanaShell.rst
-
-    extra_sardana/_SardanaShellWidget.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`SardanaShell`
-
-    * :class:`SardanaShellWidget`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_SardanaShell.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_SardanaShell.rst
deleted file mode 100644
index e6ec790..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_SardanaShell.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_sardana
-
-:class:`SardanaShell`
-=====================
-
-.. inheritance-diagram:: SardanaShell
-    :parts: 1
-    
-.. autoclass:: SardanaShell
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_SardanaShellWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_SardanaShellWidget.rst
deleted file mode 100644
index f9d4ecf..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_sardana/_SardanaShellWidget.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_sardana
-
-:class:`SardanaShellWidget`
-===========================
-
-.. inheritance-diagram:: SardanaShellWidget
-    :parts: 1
-    
-.. autoclass:: SardanaShellWidget
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_taurusservers.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_taurusservers.rst
deleted file mode 100644
index 99bd07a..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_taurusservers.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_taurusservers
-
-:mod:`taurus.qt.qtgui.extra_taurusservers`
-==========================================
-
-.. automodule:: taurus.qt.qtgui.extra_taurusservers
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_xterm.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_xterm.rst
deleted file mode 100644
index 11f0542..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_xterm.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_xterm
-
-:mod:`taurus.qt.qtgui.extra_xterm`
-==================================
-
-.. automodule:: taurus.qt.qtgui.extra_xterm
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    extra_xterm/_QXTermWidget.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`QXTermWidget`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/extra_xterm/_QXTermWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/extra_xterm/_QXTermWidget.rst
deleted file mode 100644
index a7d4765..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/extra_xterm/_QXTermWidget.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.extra_xterm
-
-:class:`QXTermWidget`
-=====================
-
-.. inheritance-diagram:: QXTermWidget
-    :parts: 1
-    
-.. autoclass:: QXTermWidget
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/gauge.rst b/doc/source/devel/api/taurus/qt/qtgui/gauge.rst
deleted file mode 100644
index c7765b2..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/gauge.rst
+++ /dev/null
@@ -1,49 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.gauge
-
-:mod:`taurus.qt.qtgui.gauge`
-============================
-
-.. automodule:: taurus.qt.qtgui.gauge
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    demo <gauge/demo>
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    gauge/_QBaseMeter.rst
-
-    gauge/_QManoMeter.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`QBaseMeter`
-
-    * :class:`QManoMeter`
-
-
-
-
-.. rubric:: Functions
-
-
-.. autofunction:: main
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/gauge/_QBaseMeter.rst b/doc/source/devel/api/taurus/qt/qtgui/gauge/_QBaseMeter.rst
deleted file mode 100644
index dbc082d..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/gauge/_QBaseMeter.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.gauge
-
-:class:`QBaseMeter`
-===================
-
-.. inheritance-diagram:: QBaseMeter
-    :parts: 1
-    
-.. autoclass:: QBaseMeter
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/gauge/_QManoMeter.rst b/doc/source/devel/api/taurus/qt/qtgui/gauge/_QManoMeter.rst
deleted file mode 100644
index d682dde..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/gauge/_QManoMeter.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.gauge
-
-:class:`QManoMeter`
-===================
-
-.. inheritance-diagram:: QManoMeter
-    :parts: 1
-    
-.. autoclass:: QManoMeter
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/gauge/demo.rst b/doc/source/devel/api/taurus/qt/qtgui/gauge/demo.rst
deleted file mode 100644
index 3d4cc48..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/gauge/demo.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.gauge.demo
-
-:mod:`taurus.qt.qtgui.gauge.demo`
-=================================
-
-.. automodule:: taurus.qt.qtgui.gauge.demo
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic.rst
deleted file mode 100644
index 0e623eb..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic.rst
+++ /dev/null
@@ -1,95 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic
-
-:mod:`taurus.qt.qtgui.graphic`
-==============================
-
-.. automodule:: taurus.qt.qtgui.graphic
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    jdraw <graphic/jdraw>
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    graphic/_TaurusBaseGraphicsFactory.rst
-
-    graphic/_TaurusEllipseStateItem.rst
-
-    graphic/_TaurusGraphicsAttributeItem.rst
-
-    graphic/_TaurusGraphicsItem.rst
-
-    graphic/_TaurusGraphicsScene.rst
-
-    graphic/_TaurusGraphicsStateItem.rst
-
-    graphic/_TaurusGraphicsStateItem2.rst
-
-    graphic/_TaurusGraphicsUpdateThread.rst
-
-    graphic/_TaurusGraphicsView.rst
-
-    graphic/_TaurusGroupStateItem.rst
-
-    graphic/_TaurusPolygonStateItem.rst
-
-    graphic/_TaurusRectStateItem.rst
-
-    graphic/_TaurusTextAttributeItem.rst
-
-    graphic/_TaurusTextStateItem.rst
-
-    graphic/_newDialog.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`TaurusBaseGraphicsFactory`
-
-    * :class:`TaurusEllipseStateItem`
-
-    * :class:`TaurusGraphicsAttributeItem`
-
-    * :class:`TaurusGraphicsItem`
-
-    * :class:`TaurusGraphicsScene`
-
-    * :class:`TaurusGraphicsStateItem`
-
-    * :class:`TaurusGraphicsStateItem2`
-
-    * :class:`TaurusGraphicsUpdateThread`
-
-    * :class:`TaurusGraphicsView`
-
-    * :class:`TaurusGroupStateItem`
-
-    * :class:`TaurusPolygonStateItem`
-
-    * :class:`TaurusRectStateItem`
-
-    * :class:`TaurusTextAttributeItem`
-
-    * :class:`TaurusTextStateItem`
-
-    * :class:`newDialog`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusBaseGraphicsFactory.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusBaseGraphicsFactory.rst
deleted file mode 100644
index bd11b32..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusBaseGraphicsFactory.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic
-
-:class:`TaurusBaseGraphicsFactory`
-==================================
-
-.. inheritance-diagram:: TaurusBaseGraphicsFactory
-    :parts: 1
-    
-.. autoclass:: TaurusBaseGraphicsFactory
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusEllipseStateItem.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusEllipseStateItem.rst
deleted file mode 100644
index 921666c..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusEllipseStateItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic
-
-:class:`TaurusEllipseStateItem`
-===============================
-
-.. inheritance-diagram:: TaurusEllipseStateItem
-    :parts: 1
-    
-.. autoclass:: TaurusEllipseStateItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsAttributeItem.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsAttributeItem.rst
deleted file mode 100644
index da85a25..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsAttributeItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic
-
-:class:`TaurusGraphicsAttributeItem`
-====================================
-
-.. inheritance-diagram:: TaurusGraphicsAttributeItem
-    :parts: 1
-    
-.. autoclass:: TaurusGraphicsAttributeItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsItem.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsItem.rst
deleted file mode 100644
index 8ef5850..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic
-
-:class:`TaurusGraphicsItem`
-===========================
-
-.. inheritance-diagram:: TaurusGraphicsItem
-    :parts: 1
-    
-.. autoclass:: TaurusGraphicsItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsScene.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsScene.rst
deleted file mode 100644
index 9b42d9a..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsScene.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic
-
-:class:`TaurusGraphicsScene`
-============================
-
-.. inheritance-diagram:: TaurusGraphicsScene
-    :parts: 1
-    
-.. autoclass:: TaurusGraphicsScene
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsStateItem.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsStateItem.rst
deleted file mode 100644
index 739ad62..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsStateItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic
-
-:class:`TaurusGraphicsStateItem`
-================================
-
-.. inheritance-diagram:: TaurusGraphicsStateItem
-    :parts: 1
-    
-.. autoclass:: TaurusGraphicsStateItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsStateItem2.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsStateItem2.rst
deleted file mode 100644
index e3b48a2..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsStateItem2.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic
-
-:class:`TaurusGraphicsStateItem2`
-=================================
-
-.. inheritance-diagram:: TaurusGraphicsStateItem2
-    :parts: 1
-    
-.. autoclass:: TaurusGraphicsStateItem2
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsUpdateThread.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsUpdateThread.rst
deleted file mode 100644
index 823ff28..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsUpdateThread.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic
-
-:class:`TaurusGraphicsUpdateThread`
-===================================
-
-.. inheritance-diagram:: TaurusGraphicsUpdateThread
-    :parts: 1
-    
-.. autoclass:: TaurusGraphicsUpdateThread
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsView.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsView.rst
deleted file mode 100644
index 0f1c227..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGraphicsView.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic
-
-:class:`TaurusGraphicsView`
-===========================
-
-.. inheritance-diagram:: TaurusGraphicsView
-    :parts: 1
-    
-.. autoclass:: TaurusGraphicsView
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGroupStateItem.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGroupStateItem.rst
deleted file mode 100644
index 44aff64..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusGroupStateItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic
-
-:class:`TaurusGroupStateItem`
-=============================
-
-.. inheritance-diagram:: TaurusGroupStateItem
-    :parts: 1
-    
-.. autoclass:: TaurusGroupStateItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusPolygonStateItem.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusPolygonStateItem.rst
deleted file mode 100644
index ffda664..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusPolygonStateItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic
-
-:class:`TaurusPolygonStateItem`
-===============================
-
-.. inheritance-diagram:: TaurusPolygonStateItem
-    :parts: 1
-    
-.. autoclass:: TaurusPolygonStateItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusRectStateItem.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusRectStateItem.rst
deleted file mode 100644
index 2134da8..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusRectStateItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic
-
-:class:`TaurusRectStateItem`
-============================
-
-.. inheritance-diagram:: TaurusRectStateItem
-    :parts: 1
-    
-.. autoclass:: TaurusRectStateItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusTextAttributeItem.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusTextAttributeItem.rst
deleted file mode 100644
index cc1017b..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusTextAttributeItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic
-
-:class:`TaurusTextAttributeItem`
-================================
-
-.. inheritance-diagram:: TaurusTextAttributeItem
-    :parts: 1
-    
-.. autoclass:: TaurusTextAttributeItem
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusTextStateItem.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusTextStateItem.rst
deleted file mode 100644
index 053a2a2..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_TaurusTextStateItem.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic
-
-:class:`TaurusTextStateItem`
-============================
-
-.. inheritance-diagram:: TaurusTextStateItem
-    :parts: 1
-    
-.. autoclass:: TaurusTextStateItem
-    :members:
-    :undoc-members:
\ 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/_newDialog.rst
deleted file mode 100644
index c90019d..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/_newDialog.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic
-
-:class:`newDialog`
-==================
-
-.. inheritance-diagram:: newDialog
-    :parts: 1
-    
-.. autoclass:: newDialog
-    :members:
-    :undoc-members:
\ 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
deleted file mode 100644
index a07021b..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/jdraw.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.graphic.jdraw
-
-:mod:`taurus.qt.qtgui.graphic.jdraw`
-====================================
-
-.. automodule:: taurus.qt.qtgui.graphic.jdraw
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    jdraw/_TaurusJDrawGraphicsFactory.rst
-
-    jdraw/_TaurusJDrawSynopticsView.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`TaurusJDrawGraphicsFactory`
-
-    * :class:`TaurusJDrawSynopticsView`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/jdraw/_TaurusJDrawGraphicsFactory.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/jdraw/_TaurusJDrawGraphicsFactory.rst
deleted file mode 100644
index eda191b..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/jdraw/_TaurusJDrawGraphicsFactory.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic.jdraw
-
-:class:`TaurusJDrawGraphicsFactory`
-===================================
-
-.. inheritance-diagram:: TaurusJDrawGraphicsFactory
-    :parts: 1
-    
-.. autoclass:: TaurusJDrawGraphicsFactory
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/graphic/jdraw/_TaurusJDrawSynopticsView.rst b/doc/source/devel/api/taurus/qt/qtgui/graphic/jdraw/_TaurusJDrawSynopticsView.rst
deleted file mode 100644
index c9d6b93..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/graphic/jdraw/_TaurusJDrawSynopticsView.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.graphic.jdraw
-
-:class:`TaurusJDrawSynopticsView`
-=================================
-
-.. inheritance-diagram:: TaurusJDrawSynopticsView
-    :parts: 1
-    
-.. autoclass:: TaurusJDrawSynopticsView
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/image.rst b/doc/source/devel/api/taurus/qt/qtgui/image.rst
deleted file mode 100644
index 5cb5a02..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/image.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.image
-
-:mod:`taurus.qt.qtgui.image`
-============================
-
-.. automodule:: taurus.qt.qtgui.image
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/input.rst b/doc/source/devel/api/taurus/qt/qtgui/input.rst
deleted file mode 100644
index d69d36d..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/input.rst
+++ /dev/null
@@ -1,67 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.input
-
-:mod:`taurus.qt.qtgui.input`
-============================
-
-.. automodule:: taurus.qt.qtgui.input
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    input/_GraphicalChoiceDlg.rst
-
-    input/_GraphicalChoiceWidget.rst
-
-    input/_QWheelEdit.rst
-
-    input/_TaurusAttrListComboBox.rst
-
-    input/_TaurusConfigLineEdit.rst
-
-    input/_TaurusValueCheckBox.rst
-
-    input/_TaurusValueComboBox.rst
-
-    input/_TaurusValueLineEdit.rst
-
-    input/_TaurusValueSpinBox.rst
-
-    input/_TaurusWheelEdit.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`GraphicalChoiceDlg`
-
-    * :class:`GraphicalChoiceWidget`
-
-    * :class:`QWheelEdit`
-
-    * :class:`TaurusAttrListComboBox`
-
-    * :class:`TaurusConfigLineEdit`
-
-    * :class:`TaurusValueCheckBox`
-
-    * :class:`TaurusValueComboBox`
-
-    * :class:`TaurusValueLineEdit`
-
-    * :class:`TaurusValueSpinBox`
-
-    * :class:`TaurusWheelEdit`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/input/_GraphicalChoiceDlg.rst b/doc/source/devel/api/taurus/qt/qtgui/input/_GraphicalChoiceDlg.rst
deleted file mode 100644
index ce2e6b4..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/input/_GraphicalChoiceDlg.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.input
-
-:class:`GraphicalChoiceDlg`
-===========================
-
-.. inheritance-diagram:: GraphicalChoiceDlg
-    :parts: 1
-    
-.. autoclass:: GraphicalChoiceDlg
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/input/_GraphicalChoiceWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/input/_GraphicalChoiceWidget.rst
deleted file mode 100644
index 0e6e853..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/input/_GraphicalChoiceWidget.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.input
-
-:class:`GraphicalChoiceWidget`
-==============================
-
-.. inheritance-diagram:: GraphicalChoiceWidget
-    :parts: 1
-    
-.. autoclass:: GraphicalChoiceWidget
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/input/_QWheelEdit.rst b/doc/source/devel/api/taurus/qt/qtgui/input/_QWheelEdit.rst
deleted file mode 100644
index 24e5459..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/input/_QWheelEdit.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.input
-
-:class:`QWheelEdit`
-===================
-
-.. inheritance-diagram:: QWheelEdit
-    :parts: 1
-    
-.. autoclass:: QWheelEdit
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusAttrListComboBox.rst b/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusAttrListComboBox.rst
deleted file mode 100644
index c1ca98f..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusAttrListComboBox.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.input
-
-:class:`TaurusAttrListComboBox`
-===============================
-
-.. inheritance-diagram:: TaurusAttrListComboBox
-    :parts: 1
-    
-.. autoclass:: TaurusAttrListComboBox
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusConfigLineEdit.rst b/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusConfigLineEdit.rst
deleted file mode 100644
index bf57f95..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusConfigLineEdit.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.input
-
-:class:`TaurusConfigLineEdit`
-=============================
-
-.. inheritance-diagram:: TaurusConfigLineEdit
-    :parts: 1
-    
-.. autoclass:: TaurusConfigLineEdit
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusValueCheckBox.rst b/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusValueCheckBox.rst
deleted file mode 100644
index ee09be0..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusValueCheckBox.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.input
-
-:class:`TaurusValueCheckBox`
-============================
-
-.. inheritance-diagram:: TaurusValueCheckBox
-    :parts: 1
-    
-.. autoclass:: TaurusValueCheckBox
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusValueComboBox.rst b/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusValueComboBox.rst
deleted file mode 100644
index d9e9886..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusValueComboBox.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.input
-
-:class:`TaurusValueComboBox`
-============================
-
-.. inheritance-diagram:: TaurusValueComboBox
-    :parts: 1
-    
-.. autoclass:: TaurusValueComboBox
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusValueLineEdit.rst b/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusValueLineEdit.rst
deleted file mode 100644
index e01f4ae..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusValueLineEdit.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.input
-
-:class:`TaurusValueLineEdit`
-============================
-
-.. inheritance-diagram:: TaurusValueLineEdit
-    :parts: 1
-    
-.. autoclass:: TaurusValueLineEdit
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusValueSpinBox.rst b/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusValueSpinBox.rst
deleted file mode 100644
index c2813d9..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusValueSpinBox.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.input
-
-:class:`TaurusValueSpinBox`
-===========================
-
-.. inheritance-diagram:: TaurusValueSpinBox
-    :parts: 1
-    
-.. autoclass:: TaurusValueSpinBox
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusWheelEdit.rst b/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusWheelEdit.rst
deleted file mode 100644
index 71c983e..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/input/_TaurusWheelEdit.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.input
-
-:class:`TaurusWheelEdit`
-========================
-
-.. inheritance-diagram:: TaurusWheelEdit
-    :parts: 1
-    
-.. autoclass:: TaurusWheelEdit
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel.rst b/doc/source/devel/api/taurus/qt/qtgui/panel.rst
deleted file mode 100644
index 8d95932..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel.rst
+++ /dev/null
@@ -1,133 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:mod:`taurus.qt.qtgui.panel`
-============================
-
-.. automodule:: taurus.qt.qtgui.panel
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    ui <panel/ui>
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    panel/_DefaultLabelWidget.rst
-
-    panel/_DefaultTaurusValueCheckBox.rst
-
-    panel/_DefaultUnitsWidget.rst
-
-    panel/_QDataExportDialog.rst
-
-    panel/_QRawDataWidget.rst
-
-    panel/_TangoMessageErrorHandler.rst
-
-    panel/_TaurusArrayEditorButton.rst
-
-    panel/_TaurusAttrForm.rst
-
-    panel/_TaurusAttributeChooser.rst
-
-    panel/_TaurusAttributeChooserOLD.rst
-
-    panel/_TaurusCommandsForm.rst
-
-    panel/_TaurusDevButton.rst
-
-    panel/_TaurusDevPanel.rst
-
-    panel/_TaurusForm.rst
-
-    panel/_TaurusMessageErrorHandler.rst
-
-    panel/_TaurusMessagePanel.rst
-
-    panel/_TaurusModelChooser.rst
-
-    panel/_TaurusModelSelectorTree.rst
-
-    panel/_TaurusPlotButton.rst
-
-    panel/_TaurusStatusLabel.rst
-
-    panel/_TaurusValue.rst
-
-    panel/_TaurusValuesFrame.rst
-
-    panel/_TaurusValuesTableButton.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`DefaultLabelWidget`
-
-    * :class:`DefaultTaurusValueCheckBox`
-
-    * :class:`DefaultUnitsWidget`
-
-    * :class:`QDataExportDialog`
-
-    * :class:`QRawDataWidget`
-
-    * :class:`TangoMessageErrorHandler`
-
-    * :class:`TaurusArrayEditorButton`
-
-    * :class:`TaurusAttrForm`
-
-    * :class:`TaurusAttributeChooser`
-
-    * :class:`TaurusAttributeChooserOLD`
-
-    * :class:`TaurusCommandsForm`
-
-    * :class:`TaurusDevButton`
-
-    * :class:`TaurusDevPanel`
-
-    * :class:`TaurusForm`
-
-    * :class:`TaurusMessageErrorHandler`
-
-    * :class:`TaurusMessagePanel`
-
-    * :class:`TaurusModelChooser`
-
-    * :class:`TaurusModelSelectorTree`
-
-    * :class:`TaurusPlotButton`
-
-    * :class:`TaurusStatusLabel`
-
-    * :class:`TaurusValue`
-
-    * :class:`TaurusValuesFrame`
-
-    * :class:`TaurusValuesTableButton`
-
-
-
-
-.. rubric:: Functions
-
-
-.. autofunction:: main
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_DefaultLabelWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_DefaultLabelWidget.rst
deleted file mode 100644
index 14fb32a..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_DefaultLabelWidget.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`DefaultLabelWidget`
-===========================
-
-.. inheritance-diagram:: DefaultLabelWidget
-    :parts: 1
-    
-.. autoclass:: DefaultLabelWidget
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_DefaultTaurusValueCheckBox.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_DefaultTaurusValueCheckBox.rst
deleted file mode 100644
index 744bd41..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_DefaultTaurusValueCheckBox.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`DefaultTaurusValueCheckBox`
-===================================
-
-.. inheritance-diagram:: DefaultTaurusValueCheckBox
-    :parts: 1
-    
-.. autoclass:: DefaultTaurusValueCheckBox
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_DefaultUnitsWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_DefaultUnitsWidget.rst
deleted file mode 100644
index 0161082..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_DefaultUnitsWidget.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`DefaultUnitsWidget`
-===========================
-
-.. inheritance-diagram:: DefaultUnitsWidget
-    :parts: 1
-    
-.. autoclass:: DefaultUnitsWidget
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_QDataExportDialog.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_QDataExportDialog.rst
deleted file mode 100644
index 545db52..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_QDataExportDialog.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`QDataExportDialog`
-==========================
-
-.. inheritance-diagram:: QDataExportDialog
-    :parts: 1
-    
-.. autoclass:: QDataExportDialog
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_QRawDataWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_QRawDataWidget.rst
deleted file mode 100644
index c6ff055..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_QRawDataWidget.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`QRawDataWidget`
-=======================
-
-.. inheritance-diagram:: QRawDataWidget
-    :parts: 1
-    
-.. autoclass:: QRawDataWidget
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TangoMessageErrorHandler.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TangoMessageErrorHandler.rst
deleted file mode 100644
index f1843d7..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TangoMessageErrorHandler.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TangoMessageErrorHandler`
-=================================
-
-.. inheritance-diagram:: TangoMessageErrorHandler
-    :parts: 1
-    
-.. autoclass:: TangoMessageErrorHandler
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusArrayEditorButton.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusArrayEditorButton.rst
deleted file mode 100644
index c3b3cbe..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusArrayEditorButton.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TaurusArrayEditorButton`
-================================
-
-.. inheritance-diagram:: TaurusArrayEditorButton
-    :parts: 1
-    
-.. autoclass:: TaurusArrayEditorButton
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusAttrForm.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusAttrForm.rst
deleted file mode 100644
index 854346f..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusAttrForm.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TaurusAttrForm`
-=======================
-
-.. inheritance-diagram:: TaurusAttrForm
-    :parts: 1
-    
-.. autoclass:: TaurusAttrForm
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusAttributeChooser.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusAttributeChooser.rst
deleted file mode 100644
index f166502..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusAttributeChooser.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TaurusAttributeChooser`
-===============================
-
-.. inheritance-diagram:: TaurusAttributeChooser
-    :parts: 1
-    
-.. autoclass:: TaurusAttributeChooser
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusAttributeChooserOLD.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusAttributeChooserOLD.rst
deleted file mode 100644
index 2e2f4cb..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusAttributeChooserOLD.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TaurusAttributeChooserOLD`
-==================================
-
-.. inheritance-diagram:: TaurusAttributeChooserOLD
-    :parts: 1
-    
-.. autoclass:: TaurusAttributeChooserOLD
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusCommandsForm.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusCommandsForm.rst
deleted file mode 100644
index 8fedaef..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusCommandsForm.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TaurusCommandsForm`
-===========================
-
-.. inheritance-diagram:: TaurusCommandsForm
-    :parts: 1
-    
-.. autoclass:: TaurusCommandsForm
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusDevButton.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusDevButton.rst
deleted file mode 100644
index 5638340..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusDevButton.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TaurusDevButton`
-========================
-
-.. inheritance-diagram:: TaurusDevButton
-    :parts: 1
-    
-.. autoclass:: TaurusDevButton
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusDevPanel.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusDevPanel.rst
deleted file mode 100644
index 9851fdc..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusDevPanel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TaurusDevPanel`
-=======================
-
-.. inheritance-diagram:: TaurusDevPanel
-    :parts: 1
-    
-.. autoclass:: TaurusDevPanel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusForm.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusForm.rst
deleted file mode 100644
index bc688a1..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusForm.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TaurusForm`
-===================
-
-.. inheritance-diagram:: TaurusForm
-    :parts: 1
-    
-.. autoclass:: TaurusForm
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusMessageErrorHandler.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusMessageErrorHandler.rst
deleted file mode 100644
index ed62833..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusMessageErrorHandler.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TaurusMessageErrorHandler`
-==================================
-
-.. inheritance-diagram:: TaurusMessageErrorHandler
-    :parts: 1
-    
-.. autoclass:: TaurusMessageErrorHandler
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusMessagePanel.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusMessagePanel.rst
deleted file mode 100644
index f6e1e51..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusMessagePanel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TaurusMessagePanel`
-===========================
-
-.. inheritance-diagram:: TaurusMessagePanel
-    :parts: 1
-    
-.. autoclass:: TaurusMessagePanel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusModelChooser.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusModelChooser.rst
deleted file mode 100644
index cd2b711..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusModelChooser.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TaurusModelChooser`
-===========================
-
-.. inheritance-diagram:: TaurusModelChooser
-    :parts: 1
-    
-.. autoclass:: TaurusModelChooser
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusModelSelectorTree.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusModelSelectorTree.rst
deleted file mode 100644
index 5648ab2..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusModelSelectorTree.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TaurusModelSelectorTree`
-================================
-
-.. inheritance-diagram:: TaurusModelSelectorTree
-    :parts: 1
-    
-.. autoclass:: TaurusModelSelectorTree
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusPlotButton.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusPlotButton.rst
deleted file mode 100644
index e391f52..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusPlotButton.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TaurusPlotButton`
-=========================
-
-.. inheritance-diagram:: TaurusPlotButton
-    :parts: 1
-    
-.. autoclass:: TaurusPlotButton
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusStatusLabel.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusStatusLabel.rst
deleted file mode 100644
index de54cc6..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusStatusLabel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TaurusStatusLabel`
-==========================
-
-.. inheritance-diagram:: TaurusStatusLabel
-    :parts: 1
-    
-.. autoclass:: TaurusStatusLabel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusValue.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusValue.rst
deleted file mode 100644
index 03aa4b1..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusValue.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TaurusValue`
-====================
-
-.. inheritance-diagram:: TaurusValue
-    :parts: 1
-    
-.. autoclass:: TaurusValue
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusValuesFrame.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusValuesFrame.rst
deleted file mode 100644
index 5f88864..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusValuesFrame.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TaurusValuesFrame`
-==========================
-
-.. inheritance-diagram:: TaurusValuesFrame
-    :parts: 1
-    
-.. autoclass:: TaurusValuesFrame
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusValuesTableButton.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusValuesTableButton.rst
deleted file mode 100644
index bb2c1d1..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/_TaurusValuesTableButton.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.panel
-
-:class:`TaurusValuesTableButton`
-================================
-
-.. inheritance-diagram:: TaurusValuesTableButton
-    :parts: 1
-    
-.. autoclass:: TaurusValuesTableButton
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/panel/ui.rst b/doc/source/devel/api/taurus/qt/qtgui/panel/ui.rst
deleted file mode 100644
index 03b65b5..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/panel/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.panel.ui
-
-:mod:`taurus.qt.qtgui.panel.ui`
-===============================
-
-.. automodule:: taurus.qt.qtgui.panel.ui
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot.rst b/doc/source/devel/api/taurus/qt/qtgui/plot.rst
deleted file mode 100644
index e28b7e0..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot.rst
+++ /dev/null
@@ -1,117 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:mod:`taurus.qt.qtgui.plot`
-===========================
-
-.. automodule:: taurus.qt.qtgui.plot
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    ui <plot/ui>
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    plot/_ArrayEditor.rst
-
-    plot/_CurveAppearanceProperties.rst
-
-    plot/_CurvePropertiesView.rst
-
-    plot/_CurvesAppearanceChooser.rst
-
-    plot/_DateTimeScaleEngine.rst
-
-    plot/_FancyScaleDraw.rst
-
-    plot/_FixedLabelsScaleDraw.rst
-
-    plot/_FixedLabelsScaleEngine.rst
-
-    plot/_ScanTrendsSet.rst
-
-    plot/_TaurusArrayEditor.rst
-
-    plot/_TaurusCurve.rst
-
-    plot/_TaurusCurveMarker.rst
-
-    plot/_TaurusMonitorTiny.rst
-
-    plot/_TaurusPlot.rst
-
-    plot/_TaurusPlotConfigDialog.rst
-
-    plot/_TaurusTimeScaleDraw.rst
-
-    plot/_TaurusTrend.rst
-
-    plot/_TaurusTrendsSet.rst
-
-    plot/_TaurusXValues.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`ArrayEditor`
-
-    * :class:`CurveAppearanceProperties`
-
-    * :class:`CurvePropertiesView`
-
-    * :class:`CurvesAppearanceChooser`
-
-    * :class:`DateTimeScaleEngine`
-
-    * :class:`FancyScaleDraw`
-
-    * :class:`FixedLabelsScaleDraw`
-
-    * :class:`FixedLabelsScaleEngine`
-
-    * :class:`ScanTrendsSet`
-
-    * :class:`TaurusArrayEditor`
-
-    * :class:`TaurusCurve`
-
-    * :class:`TaurusCurveMarker`
-
-    * :class:`TaurusMonitorTiny`
-
-    * :class:`TaurusPlot`
-
-    * :class:`TaurusPlotConfigDialog`
-
-    * :class:`TaurusTimeScaleDraw`
-
-    * :class:`TaurusTrend`
-
-    * :class:`TaurusTrendsSet`
-
-    * :class:`TaurusXValues`
-
-
-
-
-.. rubric:: Functions
-
-
-.. autofunction:: isodatestr2float
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_ArrayEditor.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_ArrayEditor.rst
deleted file mode 100644
index 9af3379..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_ArrayEditor.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`ArrayEditor`
-====================
-
-.. inheritance-diagram:: ArrayEditor
-    :parts: 1
-    
-.. autoclass:: ArrayEditor
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_CurveAppearanceProperties.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_CurveAppearanceProperties.rst
deleted file mode 100644
index 6be2f2b..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_CurveAppearanceProperties.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`CurveAppearanceProperties`
-==================================
-
-.. inheritance-diagram:: CurveAppearanceProperties
-    :parts: 1
-    
-.. autoclass:: CurveAppearanceProperties
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_CurvePropertiesView.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_CurvePropertiesView.rst
deleted file mode 100644
index 9eb8ca9..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_CurvePropertiesView.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`CurvePropertiesView`
-============================
-
-.. inheritance-diagram:: CurvePropertiesView
-    :parts: 1
-    
-.. autoclass:: CurvePropertiesView
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_CurvesAppearanceChooser.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_CurvesAppearanceChooser.rst
deleted file mode 100644
index 2c2ff6b..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_CurvesAppearanceChooser.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`CurvesAppearanceChooser`
-================================
-
-.. inheritance-diagram:: CurvesAppearanceChooser
-    :parts: 1
-    
-.. autoclass:: CurvesAppearanceChooser
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_DateTimeScaleEngine.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_DateTimeScaleEngine.rst
deleted file mode 100644
index 06f23a0..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_DateTimeScaleEngine.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`DateTimeScaleEngine`
-============================
-
-.. inheritance-diagram:: DateTimeScaleEngine
-    :parts: 1
-    
-.. autoclass:: DateTimeScaleEngine
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_FancyScaleDraw.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_FancyScaleDraw.rst
deleted file mode 100644
index 544e734..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_FancyScaleDraw.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`FancyScaleDraw`
-=======================
-
-.. inheritance-diagram:: FancyScaleDraw
-    :parts: 1
-    
-.. autoclass:: FancyScaleDraw
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_FixedLabelsScaleDraw.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_FixedLabelsScaleDraw.rst
deleted file mode 100644
index ee2f892..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_FixedLabelsScaleDraw.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`FixedLabelsScaleDraw`
-=============================
-
-.. inheritance-diagram:: FixedLabelsScaleDraw
-    :parts: 1
-    
-.. autoclass:: FixedLabelsScaleDraw
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_FixedLabelsScaleEngine.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_FixedLabelsScaleEngine.rst
deleted file mode 100644
index 6ba234f..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_FixedLabelsScaleEngine.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`FixedLabelsScaleEngine`
-===============================
-
-.. inheritance-diagram:: FixedLabelsScaleEngine
-    :parts: 1
-    
-.. autoclass:: FixedLabelsScaleEngine
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_ScanTrendsSet.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_ScanTrendsSet.rst
deleted file mode 100644
index f6565e8..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_ScanTrendsSet.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`ScanTrendsSet`
-======================
-
-.. inheritance-diagram:: ScanTrendsSet
-    :parts: 1
-    
-.. autoclass:: ScanTrendsSet
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusArrayEditor.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusArrayEditor.rst
deleted file mode 100644
index 5e0b8b1..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusArrayEditor.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`TaurusArrayEditor`
-==========================
-
-.. inheritance-diagram:: TaurusArrayEditor
-    :parts: 1
-    
-.. autoclass:: TaurusArrayEditor
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusCurve.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusCurve.rst
deleted file mode 100644
index 63c6dcd..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusCurve.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`TaurusCurve`
-====================
-
-.. inheritance-diagram:: TaurusCurve
-    :parts: 1
-    
-.. autoclass:: TaurusCurve
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusCurveMarker.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusCurveMarker.rst
deleted file mode 100644
index bf1ae55..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusCurveMarker.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`TaurusCurveMarker`
-==========================
-
-.. inheritance-diagram:: TaurusCurveMarker
-    :parts: 1
-    
-.. autoclass:: TaurusCurveMarker
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusMonitorTiny.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusMonitorTiny.rst
deleted file mode 100644
index 7ea2682..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusMonitorTiny.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`TaurusMonitorTiny`
-==========================
-
-.. inheritance-diagram:: TaurusMonitorTiny
-    :parts: 1
-    
-.. autoclass:: TaurusMonitorTiny
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusPlot.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusPlot.rst
deleted file mode 100644
index 1d28552..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusPlot.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`TaurusPlot`
-===================
-
-.. inheritance-diagram:: TaurusPlot
-    :parts: 1
-    
-.. autoclass:: TaurusPlot
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusPlotConfigDialog.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusPlotConfigDialog.rst
deleted file mode 100644
index fb76094..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusPlotConfigDialog.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`TaurusPlotConfigDialog`
-===============================
-
-.. inheritance-diagram:: TaurusPlotConfigDialog
-    :parts: 1
-    
-.. autoclass:: TaurusPlotConfigDialog
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusTimeScaleDraw.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusTimeScaleDraw.rst
deleted file mode 100644
index 36caad6..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusTimeScaleDraw.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`TaurusTimeScaleDraw`
-============================
-
-.. inheritance-diagram:: TaurusTimeScaleDraw
-    :parts: 1
-    
-.. autoclass:: TaurusTimeScaleDraw
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusTrend.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusTrend.rst
deleted file mode 100644
index 9f7d60c..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusTrend.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`TaurusTrend`
-====================
-
-.. inheritance-diagram:: TaurusTrend
-    :parts: 1
-    
-.. autoclass:: TaurusTrend
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusTrendsSet.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusTrendsSet.rst
deleted file mode 100644
index 5fdc264..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusTrendsSet.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`TaurusTrendsSet`
-========================
-
-.. inheritance-diagram:: TaurusTrendsSet
-    :parts: 1
-    
-.. autoclass:: TaurusTrendsSet
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusXValues.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusXValues.rst
deleted file mode 100644
index c5db303..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/_TaurusXValues.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.plot
-
-:class:`TaurusXValues`
-======================
-
-.. inheritance-diagram:: TaurusXValues
-    :parts: 1
-    
-.. autoclass:: TaurusXValues
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/plot/ui.rst b/doc/source/devel/api/taurus/qt/qtgui/plot/ui.rst
deleted file mode 100644
index f60c22f..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/plot/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.plot.ui
-
-:mod:`taurus.qt.qtgui.plot.ui`
-==============================
-
-.. automodule:: taurus.qt.qtgui.plot.ui
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/resource.rst b/doc/source/devel/api/taurus/qt/qtgui/resource.rst
deleted file mode 100644
index 9c16c40..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/resource.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.resource
-
-:mod:`taurus.qt.qtgui.resource`
-===============================
-
-.. automodule:: taurus.qt.qtgui.resource
-
-
-    
-
-
-
-
-
-.. rubric:: Functions
-
-
-.. autofunction:: getElementTypeIcon
-
-.. autofunction:: getElementTypePixmap
-
-.. autofunction:: getElementTypeSize
-
-.. autofunction:: getElementTypeToolTip
-
-.. autofunction:: getIcon
-
-.. autofunction:: getPixmap
-
-.. autofunction:: getSWDevHealthIcon
-
-.. autofunction:: getSWDevHealthPixmap
-
-.. autofunction:: getSWDevHealthToolTip
-
-.. autofunction:: getStandardIcon
-
-.. autofunction:: getThemeIcon
-
-.. autofunction:: getThemeMembers
-
-.. autofunction:: getThemePixmap
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/shell.rst b/doc/source/devel/api/taurus/qt/qtgui/shell.rst
deleted file mode 100644
index ea92eb4..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/shell.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.shell
-
-:mod:`taurus.qt.qtgui.shell`
-============================
-
-.. automodule:: taurus.qt.qtgui.shell
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    shell/_SpockShell.rst
-
-    shell/_SpockShellWidget.rst
-
-    shell/_TaurusPythonShell.rst
-
-    shell/_TaurusPythonShellWidget.rst
-
-    shell/_TaurusShell.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`SpockShell`
-
-    * :class:`SpockShellWidget`
-
-    * :class:`TaurusPythonShell`
-
-    * :class:`TaurusPythonShellWidget`
-
-    * :class:`TaurusShell`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/shell/_SpockShell.rst b/doc/source/devel/api/taurus/qt/qtgui/shell/_SpockShell.rst
deleted file mode 100644
index ffc7379..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/shell/_SpockShell.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.shell
-
-:class:`SpockShell`
-===================
-
-.. inheritance-diagram:: SpockShell
-    :parts: 1
-    
-.. autoclass:: SpockShell
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/shell/_SpockShellWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/shell/_SpockShellWidget.rst
deleted file mode 100644
index c73180d..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/shell/_SpockShellWidget.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.shell
-
-:class:`SpockShellWidget`
-=========================
-
-.. inheritance-diagram:: SpockShellWidget
-    :parts: 1
-    
-.. autoclass:: SpockShellWidget
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/shell/_TaurusPythonShell.rst b/doc/source/devel/api/taurus/qt/qtgui/shell/_TaurusPythonShell.rst
deleted file mode 100644
index 630a8f7..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/shell/_TaurusPythonShell.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.shell
-
-:class:`TaurusPythonShell`
-==========================
-
-.. inheritance-diagram:: TaurusPythonShell
-    :parts: 1
-    
-.. autoclass:: TaurusPythonShell
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/shell/_TaurusPythonShellWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/shell/_TaurusPythonShellWidget.rst
deleted file mode 100644
index 932588c..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/shell/_TaurusPythonShellWidget.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.shell
-
-:class:`TaurusPythonShellWidget`
-================================
-
-.. inheritance-diagram:: TaurusPythonShellWidget
-    :parts: 1
-    
-.. autoclass:: TaurusPythonShellWidget
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/shell/_TaurusShell.rst b/doc/source/devel/api/taurus/qt/qtgui/shell/_TaurusShell.rst
deleted file mode 100644
index 5e3798e..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/shell/_TaurusShell.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.shell
-
-:class:`TaurusShell`
-====================
-
-.. inheritance-diagram:: TaurusShell
-    :parts: 1
-    
-.. autoclass:: TaurusShell
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/table.rst b/doc/source/devel/api/taurus/qt/qtgui/table.rst
deleted file mode 100644
index cf5a886..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/table.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.table
-
-:mod:`taurus.qt.qtgui.table`
-============================
-
-.. automodule:: taurus.qt.qtgui.table
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    table/_QLoggingTable.rst
-
-    table/_QLoggingTableModel.rst
-
-    table/_QLoggingWidget.rst
-
-    table/_TaurusGrid.rst
-
-    table/_TaurusPropTable.rst
-
-    table/_TaurusValuesTable.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`QLoggingTable`
-
-    * :class:`QLoggingTableModel`
-
-    * :class:`QLoggingWidget`
-
-    * :class:`TaurusGrid`
-
-    * :class:`TaurusPropTable`
-
-    * :class:`TaurusValuesTable`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/table/_QLoggingTable.rst b/doc/source/devel/api/taurus/qt/qtgui/table/_QLoggingTable.rst
deleted file mode 100644
index 8b06c08..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/table/_QLoggingTable.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.table
-
-:class:`QLoggingTable`
-======================
-
-.. inheritance-diagram:: QLoggingTable
-    :parts: 1
-    
-.. autoclass:: QLoggingTable
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/table/_QLoggingTableModel.rst b/doc/source/devel/api/taurus/qt/qtgui/table/_QLoggingTableModel.rst
deleted file mode 100644
index d92db28..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/table/_QLoggingTableModel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.table
-
-:class:`QLoggingTableModel`
-===========================
-
-.. inheritance-diagram:: QLoggingTableModel
-    :parts: 1
-    
-.. autoclass:: QLoggingTableModel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/table/_QLoggingWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/table/_QLoggingWidget.rst
deleted file mode 100644
index 60106e4..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/table/_QLoggingWidget.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.table
-
-:class:`QLoggingWidget`
-=======================
-
-.. inheritance-diagram:: QLoggingWidget
-    :parts: 1
-    
-.. autoclass:: QLoggingWidget
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/table/_TaurusGrid.rst b/doc/source/devel/api/taurus/qt/qtgui/table/_TaurusGrid.rst
deleted file mode 100644
index 3bbfa3c..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/table/_TaurusGrid.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.table
-
-:class:`TaurusGrid`
-===================
-
-.. inheritance-diagram:: TaurusGrid
-    :parts: 1
-    
-.. autoclass:: TaurusGrid
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/table/_TaurusPropTable.rst b/doc/source/devel/api/taurus/qt/qtgui/table/_TaurusPropTable.rst
deleted file mode 100644
index 6d3ed5f..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/table/_TaurusPropTable.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.table
-
-:class:`TaurusPropTable`
-========================
-
-.. inheritance-diagram:: TaurusPropTable
-    :parts: 1
-    
-.. autoclass:: TaurusPropTable
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/table/_TaurusValuesTable.rst b/doc/source/devel/api/taurus/qt/qtgui/table/_TaurusValuesTable.rst
deleted file mode 100644
index 5fc1610..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/table/_TaurusValuesTable.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.table
-
-:class:`TaurusValuesTable`
-==========================
-
-.. inheritance-diagram:: TaurusValuesTable
-    :parts: 1
-    
-.. autoclass:: TaurusValuesTable
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/taurusgui.rst b/doc/source/devel/api/taurus/qt/qtgui/taurusgui.rst
deleted file mode 100644
index a6f7294..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/taurusgui.rst
+++ /dev/null
@@ -1,67 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.taurusgui
-
-:mod:`taurus.qt.qtgui.taurusgui`
-================================
-
-.. automodule:: taurus.qt.qtgui.taurusgui
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    conf <taurusgui/conf>
-
-    ui <taurusgui/ui>
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    taurusgui/_DockWidgetPanel.rst
-
-    taurusgui/_ExternalApp.rst
-
-    taurusgui/_PanelDescription.rst
-
-    taurusgui/_PanelDescriptionWizard.rst
-
-    taurusgui/_PermanentCustomPanelsDlg.rst
-
-    taurusgui/_TaurusGui.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`DockWidgetPanel`
-
-    * :class:`ExternalApp`
-
-    * :class:`PanelDescription`
-
-    * :class:`PanelDescriptionWizard`
-
-    * :class:`PermanentCustomPanelsDlg`
-
-    * :class:`TaurusGui`
-
-
-
-
-.. rubric:: Functions
-
-
-.. autofunction:: main
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_DockWidgetPanel.rst b/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_DockWidgetPanel.rst
deleted file mode 100644
index 7e95a70..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_DockWidgetPanel.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.taurusgui
-
-:class:`DockWidgetPanel`
-========================
-
-.. inheritance-diagram:: DockWidgetPanel
-    :parts: 1
-    
-.. autoclass:: DockWidgetPanel
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_ExternalApp.rst b/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_ExternalApp.rst
deleted file mode 100644
index cb06588..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_ExternalApp.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.taurusgui
-
-:class:`ExternalApp`
-====================
-
-.. inheritance-diagram:: ExternalApp
-    :parts: 1
-    
-.. autoclass:: ExternalApp
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_PanelDescription.rst b/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_PanelDescription.rst
deleted file mode 100644
index 2481922..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_PanelDescription.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.taurusgui
-
-:class:`PanelDescription`
-=========================
-
-.. inheritance-diagram:: PanelDescription
-    :parts: 1
-    
-.. autoclass:: PanelDescription
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_PanelDescriptionWizard.rst b/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_PanelDescriptionWizard.rst
deleted file mode 100644
index 267f7e7..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_PanelDescriptionWizard.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.taurusgui
-
-:class:`PanelDescriptionWizard`
-===============================
-
-.. inheritance-diagram:: PanelDescriptionWizard
-    :parts: 1
-    
-.. autoclass:: PanelDescriptionWizard
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_PermanentCustomPanelsDlg.rst b/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_PermanentCustomPanelsDlg.rst
deleted file mode 100644
index e4351f7..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_PermanentCustomPanelsDlg.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.taurusgui
-
-:class:`PermanentCustomPanelsDlg`
-=================================
-
-.. inheritance-diagram:: PermanentCustomPanelsDlg
-    :parts: 1
-    
-.. autoclass:: PermanentCustomPanelsDlg
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_TaurusGui.rst b/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_TaurusGui.rst
deleted file mode 100644
index 694690e..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/_TaurusGui.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.taurusgui
-
-:class:`TaurusGui`
-==================
-
-.. inheritance-diagram:: TaurusGui
-    :parts: 1
-    
-.. autoclass:: TaurusGui
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/conf.rst b/doc/source/devel/api/taurus/qt/qtgui/taurusgui/conf.rst
deleted file mode 100644
index 78f66ae..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/conf.rst
+++ /dev/null
@@ -1,27 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.taurusgui.conf
-
-:mod:`taurus.qt.qtgui.taurusgui.conf`
-=====================================
-
-.. automodule:: taurus.qt.qtgui.taurusgui.conf
-
-
-.. rubric:: Modules
-
-.. toctree::
-    :maxdepth: 1
-
-    tgconf_example01 <conf/tgconf_example01>
-
-    tgconf_macrogui <conf/tgconf_macrogui>
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/conf/tgconf_example01.rst b/doc/source/devel/api/taurus/qt/qtgui/taurusgui/conf/tgconf_example01.rst
deleted file mode 100644
index 2d3887d..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/conf/tgconf_example01.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.taurusgui.conf.tgconf_example01
-
-:mod:`taurus.qt.qtgui.taurusgui.conf.tgconf_example01`
-======================================================
-
-.. automodule:: taurus.qt.qtgui.taurusgui.conf.tgconf_example01
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/conf/tgconf_macrogui.rst b/doc/source/devel/api/taurus/qt/qtgui/taurusgui/conf/tgconf_macrogui.rst
deleted file mode 100644
index 34ff875..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/conf/tgconf_macrogui.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.taurusgui.conf.tgconf_macrogui
-
-:mod:`taurus.qt.qtgui.taurusgui.conf.tgconf_macrogui`
-=====================================================
-
-.. automodule:: taurus.qt.qtgui.taurusgui.conf.tgconf_macrogui
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/ui.rst b/doc/source/devel/api/taurus/qt/qtgui/taurusgui/ui.rst
deleted file mode 100644
index 967aaef..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/taurusgui/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.taurusgui.ui
-
-:mod:`taurus.qt.qtgui.taurusgui.ui`
-===================================
-
-.. automodule:: taurus.qt.qtgui.taurusgui.ui
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/tree.rst b/doc/source/devel/api/taurus/qt/qtgui/tree.rst
deleted file mode 100644
index c248994..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/tree.rst
+++ /dev/null
@@ -1,39 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.tree
-
-:mod:`taurus.qt.qtgui.tree`
-===========================
-
-.. automodule:: taurus.qt.qtgui.tree
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    tree/_QDbTreeWidget.rst
-
-    tree/_TaurusDbTreeWidget.rst
-
-    tree/_TaurusDevTree.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`QDbTreeWidget`
-
-    * :class:`TaurusDbTreeWidget`
-
-    * :class:`TaurusDevTree`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/tree/_QDbTreeWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/tree/_QDbTreeWidget.rst
deleted file mode 100644
index 05c4ae6..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/tree/_QDbTreeWidget.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.tree
-
-:class:`QDbTreeWidget`
-======================
-
-.. inheritance-diagram:: QDbTreeWidget
-    :parts: 1
-    
-.. autoclass:: QDbTreeWidget
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/tree/_TaurusDbTreeWidget.rst b/doc/source/devel/api/taurus/qt/qtgui/tree/_TaurusDbTreeWidget.rst
deleted file mode 100644
index 6a504ed..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/tree/_TaurusDbTreeWidget.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.tree
-
-:class:`TaurusDbTreeWidget`
-===========================
-
-.. inheritance-diagram:: TaurusDbTreeWidget
-    :parts: 1
-    
-.. autoclass:: TaurusDbTreeWidget
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/tree/_TaurusDevTree.rst b/doc/source/devel/api/taurus/qt/qtgui/tree/_TaurusDevTree.rst
deleted file mode 100644
index 57de203..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/tree/_TaurusDevTree.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.tree
-
-:class:`TaurusDevTree`
-======================
-
-.. inheritance-diagram:: TaurusDevTree
-    :parts: 1
-    
-.. autoclass:: TaurusDevTree
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/ui.rst b/doc/source/devel/api/taurus/qt/qtgui/ui.rst
deleted file mode 100644
index b45e9d6..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/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.ui
-
-:mod:`taurus.qt.qtgui.ui`
-=========================
-
-.. automodule:: taurus.qt.qtgui.ui
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util.rst b/doc/source/devel/api/taurus/qt/qtgui/util.rst
deleted file mode 100644
index 79ba808..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/util.rst
+++ /dev/null
@@ -1,91 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.util
-
-:mod:`taurus.qt.qtgui.util`
-===========================
-
-.. automodule:: taurus.qt.qtgui.util
-
-
-    
-
-
-
-.. rubric:: Classes
-
-.. toctree::
-    :hidden:
-
-    util/_ActionFactory.rst
-
-    util/_AttributeAllConfigAction.rst
-
-    util/_AttributeDisplayAction.rst
-
-    util/_AttributeHistoryAction.rst
-
-    util/_AttributeImageDisplayAction.rst
-
-    util/_AttributeMenu.rst
-
-    util/_AttributeMonitorDeviceAction.rst
-
-    util/_AttributeRangesAction.rst
-
-    util/_AttributeUnitsAction.rst
-
-    util/_ConfigurationMenu.rst
-
-    util/_ExternalAppAction.rst
-
-    util/_QtColorPalette.rst
-
-    util/_SeparatorAction.rst
-
-    util/_TaurusAction.rst
-
-    util/_TaurusMenu.rst
-
-    util/_TaurusWidgetFactory.rst
-
-
-.. hlist::
-    :columns: 2
-
-    * :class:`ActionFactory`
-
-    * :class:`AttributeAllConfigAction`
-
-    * :class:`AttributeDisplayAction`
-
-    * :class:`AttributeHistoryAction`
-
-    * :class:`AttributeImageDisplayAction`
-
-    * :class:`AttributeMenu`
-
-    * :class:`AttributeMonitorDeviceAction`
-
-    * :class:`AttributeRangesAction`
-
-    * :class:`AttributeUnitsAction`
-
-    * :class:`ConfigurationMenu`
-
-    * :class:`ExternalAppAction`
-
-    * :class:`QtColorPalette`
-
-    * :class:`SeparatorAction`
-
-    * :class:`TaurusAction`
-
-    * :class:`TaurusMenu`
-
-    * :class:`TaurusWidgetFactory`
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/_ActionFactory.rst b/doc/source/devel/api/taurus/qt/qtgui/util/_ActionFactory.rst
deleted file mode 100644
index 26481c0..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/util/_ActionFactory.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.util
-
-:class:`ActionFactory`
-======================
-
-.. inheritance-diagram:: ActionFactory
-    :parts: 1
-    
-.. autoclass:: ActionFactory
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeAllConfigAction.rst b/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeAllConfigAction.rst
deleted file mode 100644
index 46a7ae6..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeAllConfigAction.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.util
-
-:class:`AttributeAllConfigAction`
-=================================
-
-.. inheritance-diagram:: AttributeAllConfigAction
-    :parts: 1
-    
-.. autoclass:: AttributeAllConfigAction
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeDisplayAction.rst b/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeDisplayAction.rst
deleted file mode 100644
index 477c59f..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeDisplayAction.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.util
-
-:class:`AttributeDisplayAction`
-===============================
-
-.. inheritance-diagram:: AttributeDisplayAction
-    :parts: 1
-    
-.. autoclass:: AttributeDisplayAction
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeHistoryAction.rst b/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeHistoryAction.rst
deleted file mode 100644
index 4b5811a..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeHistoryAction.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.util
-
-:class:`AttributeHistoryAction`
-===============================
-
-.. inheritance-diagram:: AttributeHistoryAction
-    :parts: 1
-    
-.. autoclass:: AttributeHistoryAction
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeImageDisplayAction.rst b/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeImageDisplayAction.rst
deleted file mode 100644
index 15bbc2d..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeImageDisplayAction.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.util
-
-:class:`AttributeImageDisplayAction`
-====================================
-
-.. inheritance-diagram:: AttributeImageDisplayAction
-    :parts: 1
-    
-.. autoclass:: AttributeImageDisplayAction
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeMenu.rst b/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeMenu.rst
deleted file mode 100644
index cc93bde..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeMenu.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.util
-
-:class:`AttributeMenu`
-======================
-
-.. inheritance-diagram:: AttributeMenu
-    :parts: 1
-    
-.. autoclass:: AttributeMenu
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeMonitorDeviceAction.rst b/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeMonitorDeviceAction.rst
deleted file mode 100644
index 491a4bb..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeMonitorDeviceAction.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.util
-
-:class:`AttributeMonitorDeviceAction`
-=====================================
-
-.. inheritance-diagram:: AttributeMonitorDeviceAction
-    :parts: 1
-    
-.. autoclass:: AttributeMonitorDeviceAction
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeRangesAction.rst b/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeRangesAction.rst
deleted file mode 100644
index 14ca0a4..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeRangesAction.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.util
-
-:class:`AttributeRangesAction`
-==============================
-
-.. inheritance-diagram:: AttributeRangesAction
-    :parts: 1
-    
-.. autoclass:: AttributeRangesAction
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeUnitsAction.rst b/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeUnitsAction.rst
deleted file mode 100644
index ff11017..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/util/_AttributeUnitsAction.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.util
-
-:class:`AttributeUnitsAction`
-=============================
-
-.. inheritance-diagram:: AttributeUnitsAction
-    :parts: 1
-    
-.. autoclass:: AttributeUnitsAction
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/_ConfigurationMenu.rst b/doc/source/devel/api/taurus/qt/qtgui/util/_ConfigurationMenu.rst
deleted file mode 100644
index 33db169..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/util/_ConfigurationMenu.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.util
-
-:class:`ConfigurationMenu`
-==========================
-
-.. inheritance-diagram:: ConfigurationMenu
-    :parts: 1
-    
-.. autoclass:: ConfigurationMenu
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/_ExternalAppAction.rst b/doc/source/devel/api/taurus/qt/qtgui/util/_ExternalAppAction.rst
deleted file mode 100644
index 9d734e0..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/util/_ExternalAppAction.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.util
-
-:class:`ExternalAppAction`
-==========================
-
-.. inheritance-diagram:: ExternalAppAction
-    :parts: 1
-    
-.. autoclass:: ExternalAppAction
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/_QtColorPalette.rst b/doc/source/devel/api/taurus/qt/qtgui/util/_QtColorPalette.rst
deleted file mode 100644
index 7a64176..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/util/_QtColorPalette.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.util
-
-:class:`QtColorPalette`
-=======================
-
-.. inheritance-diagram:: QtColorPalette
-    :parts: 1
-    
-.. autoclass:: QtColorPalette
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/_SeparatorAction.rst b/doc/source/devel/api/taurus/qt/qtgui/util/_SeparatorAction.rst
deleted file mode 100644
index 6f83e7e..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/util/_SeparatorAction.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.util
-
-:class:`SeparatorAction`
-========================
-
-.. inheritance-diagram:: SeparatorAction
-    :parts: 1
-    
-.. autoclass:: SeparatorAction
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/_TaurusAction.rst b/doc/source/devel/api/taurus/qt/qtgui/util/_TaurusAction.rst
deleted file mode 100644
index 48abf6b..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/util/_TaurusAction.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.util
-
-:class:`TaurusAction`
-=====================
-
-.. inheritance-diagram:: TaurusAction
-    :parts: 1
-    
-.. autoclass:: TaurusAction
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/_TaurusMenu.rst b/doc/source/devel/api/taurus/qt/qtgui/util/_TaurusMenu.rst
deleted file mode 100644
index d35cb43..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/util/_TaurusMenu.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.util
-
-:class:`TaurusMenu`
-===================
-
-.. inheritance-diagram:: TaurusMenu
-    :parts: 1
-    
-.. autoclass:: TaurusMenu
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtgui/util/_TaurusWidgetFactory.rst b/doc/source/devel/api/taurus/qt/qtgui/util/_TaurusWidgetFactory.rst
deleted file mode 100644
index 54470fa..0000000
--- a/doc/source/devel/api/taurus/qt/qtgui/util/_TaurusWidgetFactory.rst
+++ /dev/null
@@ -1,13 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtgui.util
-
-:class:`TaurusWidgetFactory`
-============================
-
-.. inheritance-diagram:: TaurusWidgetFactory
-    :parts: 1
-    
-.. autoclass:: TaurusWidgetFactory
-    :members:
-    :undoc-members:
\ No newline at end of file
diff --git a/doc/source/devel/api/taurus/qt/qtopengl.rst b/doc/source/devel/api/taurus/qt/qtopengl.rst
deleted file mode 100644
index 8b35189..0000000
--- a/doc/source/devel/api/taurus/qt/qtopengl.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.qtopengl
-
-:mod:`taurus.qt.qtopengl`
-=========================
-
-.. automodule:: taurus.qt.qtopengl
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/qt/uic.rst b/doc/source/devel/api/taurus/qt/uic.rst
deleted file mode 100644
index cd9cdd8..0000000
--- a/doc/source/devel/api/taurus/qt/uic.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.qt.uic
-
-:mod:`taurus.qt.uic`
-====================
-
-.. automodule:: taurus.qt.uic
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus/widget.rst b/doc/source/devel/api/taurus/widget.rst
deleted file mode 100644
index 10d3302..0000000
--- a/doc/source/devel/api/taurus/widget.rst
+++ /dev/null
@@ -1,17 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus.widget
-
-:mod:`taurus.widget`
-====================
-
-.. automodule:: taurus.widget
-
-
-    
-
-
-
-
-
-
diff --git a/doc/source/devel/api/taurus_AllClasses.rst b/doc/source/devel/api/taurus_AllClasses.rst
deleted file mode 100644
index ab6cfd7..0000000
--- a/doc/source/devel/api/taurus_AllClasses.rst
+++ /dev/null
@@ -1,667 +0,0 @@
-.. AUTO_RST4API
-.. This file was generated by auto_rst4api.py. Changes may be lost
-.. currentmodule:: taurus
-
-All Classes for :mod:`taurus`
-==============================
-
-.. hlist::
-    :columns: 2
-
-    * :class:`~taurus.core.AbstractTangoValidator`
-
-    * :class:`~taurus.qt.qtgui.util.ActionFactory`
-
-    * :class:`~taurus.core.util.ArrayBuffer`
-
-    * :class:`~taurus.qt.qtgui.plot.ArrayEditor`
-
-    * :class:`~taurus.qt.qtgui.util.AttributeAllConfigAction`
-
-    * :class:`~taurus.qt.qtgui.util.AttributeDisplayAction`
-
-    * :class:`~taurus.core.util.AttributeEventWait`
-
-    * :class:`~taurus.qt.qtgui.util.AttributeHistoryAction`
-
-    * :class:`~taurus.qt.qtgui.util.AttributeImageDisplayAction`
-
-    * :class:`~taurus.qt.qtgui.util.AttributeMenu`
-
-    * :class:`~taurus.qt.qtgui.util.AttributeMonitorDeviceAction`
-
-    * :class:`~taurus.core.AttributeNameValidator`
-
-    * :class:`~taurus.qt.qtgui.util.AttributeRangesAction`
-
-    * :class:`~taurus.qt.qtgui.util.AttributeUnitsAction`
-
-    * :class:`~taurus.core.util.BZ2Codec`
-
-    * :class:`~taurus.qt.qtcore.configuration.BaseConfigurableClass`
-
-    * :class:`~taurus.core.tango.macroserver.BaseDoor`
-
-    * :class:`~taurus.core.tango.macroserver.BaseMacroServer`
-
-    * :class:`~taurus.core.util.BoundMethodWeakref`
-
-    * :class:`~taurus.core.tango.img.CCDPVCAM`
-
-    * :class:`~taurus.core.util.CaselessDefaultDict`
-
-    * :class:`~taurus.core.util.CaselessDict`
-
-    * :class:`~taurus.core.util.CaselessList`
-
-    * :class:`~taurus.core.util.CaselessWeakValueDict`
-
-    * :class:`~taurus.core.util.CircBuf`
-
-    * :class:`~taurus.core.util.Codec`
-
-    * :class:`~taurus.core.util.CodecFactory`
-
-    * :class:`~taurus.core.util.CodecPipeline`
-
-    * :class:`~taurus.core.util.ColorPalette`
-
-    * :class:`~taurus.core.util.ConfigEventGenerator`
-
-    * :class:`~taurus.qt.qtgui.util.ConfigurationMenu`
-
-    * :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`
-
-    * :class:`~taurus.qt.qtgui.plot.CurvePropertiesView`
-
-    * :class:`~taurus.qt.qtgui.plot.CurvesAppearanceChooser`
-
-    * :class:`~taurus.qt.qtcore.communication.DataModel`
-
-    * :class:`~taurus.core.DatabaseNameValidator`
-
-    * :class:`~taurus.qt.qtgui.plot.DateTimeScaleEngine`
-
-    * :class:`~taurus.core.util.DebugIt`
-
-    * :class:`~taurus.qt.qtgui.panel.DefaultLabelWidget`
-
-    * :class:`~taurus.qt.qtgui.panel.DefaultTaurusValueCheckBox`
-
-    * :class:`~taurus.core.util.DefaultThreadDict`
-
-    * :class:`~taurus.qt.qtgui.panel.DefaultUnitsWidget`
-
-    * :class:`~taurus.core.DeviceNameValidator`
-
-    * :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.util.EnumException`
-
-    * :class:`~taurus.core.util.Enumeration`
-
-    * :class:`~taurus.core.util.ErrorIt`
-
-    * :class:`~taurus.core.util.EventGenerator`
-
-    * :class:`~taurus.core.util.EventListener`
-
-    * :class:`~taurus.qt.qtgui.taurusgui.ExternalApp`
-
-    * :class:`~taurus.qt.qtgui.util.ExternalAppAction`
-
-    * :class:`~taurus.qt.qtgui.plot.FancyScaleDraw`
-
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.favouriteseditor.FavouritesMacrosEditor`
-
-    * :class:`~taurus.qt.qtgui.plot.FixedLabelsScaleDraw`
-
-    * :class:`~taurus.qt.qtgui.plot.FixedLabelsScaleEngine`
-
-    * :class:`~taurus.core.util.FunctionCodec`
-
-    * :class:`~taurus.qt.qtgui.input.GraphicalChoiceDlg`
-
-    * :class:`~taurus.qt.qtgui.input.GraphicalChoiceWidget`
-
-    * :class:`~taurus.core.tango.img.ImageCounterDevice`
-
-    * :class:`~taurus.core.tango.img.ImageDevice`
-
-    * :class:`~taurus.core.tango.img.ImgBeamAnalyzer`
-
-    * :class:`~taurus.core.tango.img.ImgGrabber`
-
-    * :class:`~taurus.core.util.InfoIt`
-
-    * :class:`~taurus.core.util.JSONCodec`
-
-    * :class:`~taurus.core.util.LIFO`
-
-    * :class:`~taurus.core.util.ListEventGenerator`
-
-    * :class:`~taurus.core.util.LogFilter`
-
-    * :class:`~taurus.core.util.LogIt`
-
-    * :class:`~taurus.core.util.Logger`
-
-    * :class:`~taurus.core.util.LoopList`
-
-    * :class:`~taurus.core.tango.macroserver.Macro`
-
-    * :class:`~taurus.core.tango.macroserver.MacroInfo`
-
-    * :class:`~taurus.core.tango.macroserver.MacroNode`
-
-    * :class:`~taurus.core.tango.sardana.MacroServer`
-
-    * :class:`~taurus.core.util.MemoryLogHandler`
-
-    * :class:`~taurus.core.resource.ModuleDict`
-
-    * :class:`~taurus.core.util.NullCodec`
-
-    * :class:`~taurus.core.util.Object`
-
-    * :class:`~taurus.qt.qtgui.taurusgui.PanelDescription`
-
-    * :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.taurusgui.PermanentCustomPanelsDlg`
-
-    * :class:`~taurus.core.util.PlotCodec`
-
-    * :class:`~taurus.core.tango.sardana.Pool`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.PoolChannel`
-
-    * :class:`~taurus.qt.qtgui.extra_pool.PoolMotorSlim`
-
-    * :class:`~taurus.core.tango.img.PyImageViewer`
-
-    * :class:`~taurus.qt.qtgui.display.Q7SegDigit`
-
-    * :class:`~taurus.qt.qtgui.gauge.QBaseMeter`
-
-    * :class:`~taurus.qt.qtgui.button.QButtonBox`
-
-    * :class:`~taurus.qt.qtgui.panel.QDataExportDialog`
-
-    * :class:`~taurus.qt.qtgui.tree.QDbTreeWidget`
-
-    * :class:`~taurus.qt.qtcore.tango.macroserver.QDoor`
-
-    * :class:`~taurus.qt.qtgui.container.QGroupWidget`
-
-    * :class:`~taurus.qt.qtgui.display.QLed`
-
-    * :class:`~taurus.qt.qtgui.display.QLedOld`
-
-    * :class:`~taurus.qt.qtgui.table.QLoggingTable`
-
-    * :class:`~taurus.qt.qtgui.table.QLoggingTableModel`
-
-    * :class:`~taurus.qt.qtgui.table.QLoggingWidget`
-
-    * :class:`~taurus.qt.qtgui.display.QLogo`
-
-    * :class:`~taurus.qt.qtcore.tango.macroserver.QMacroServer`
-
-    * :class:`~taurus.qt.qtgui.gauge.QManoMeter`
-
-    * :class:`~taurus.qt.qtgui.display.QPixmapWidget`
-
-    * :class:`~taurus.qt.qtgui.panel.QRawDataWidget`
-
-    * :class:`~taurus.qt.qtgui.input.QWheelEdit`
-
-    * :class:`~taurus.qt.qtgui.extra_xterm.QXTermWidget`
-
-    * :class:`~taurus.qt.qtgui.util.QtColorPalette`
-
-    * :class:`~taurus.core.resource.ResourcesFactory`
-
-    * :class:`~taurus.core.util.SafeEvaluator`
-
-    * :class:`~taurus.core.tango.sardana.Sardana`
-
-    * :class:`~taurus.core.tango.sardana.SardanaManager`
-
-    * :class:`~taurus.qt.qtgui.extra_sardana.SardanaShell`
-
-    * :class:`~taurus.qt.qtgui.extra_sardana.SardanaShellWidget`
-
-    * :class:`~taurus.qt.qtgui.plot.ScanTrendsSet`
-
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.customeditors.SenvEditor`
-
-    * :class:`~taurus.qt.qtgui.util.SeparatorAction`
-
-    * :class:`~taurus.qt.qtcore.communication.SharedDataManager`
-
-    * :class:`~taurus.core.simulation.SimulationAttribute`
-
-    * :class:`~taurus.core.simulation.SimulationConfiguration`
-
-    * :class:`~taurus.core.simulation.SimulationDatabase`
-
-    * :class:`~taurus.core.simulation.SimulationDevice`
-
-    * :class:`~taurus.core.simulation.SimulationFactory`
-
-    * :class:`~taurus.core.util.Singleton`
-
-    * :class:`~taurus.qt.qtgui.shell.SpockShell`
-
-    * :class:`~taurus.qt.qtgui.shell.SpockShellWidget`
-
-    * :class:`~taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.StandardMacroParametersEditor`
-
-    * :class:`~taurus.core.tango.TangoAttribute`
-
-    * :class:`~taurus.core.tango.TangoAttributeEventListener`
-
-    * :class:`~taurus.core.tango.TangoConfiguration`
-
-    * :class:`~taurus.core.tango.TangoDatabase`
-
-    * :class:`~taurus.core.tango.TangoDatabaseCache`
-
-    * :class:`~taurus.core.tango.TangoDevInfo`
-
-    * :class:`~taurus.core.tango.TangoDevice`
-
-    * :class:`~taurus.core.tango.TangoFactory`
-
-    * :class:`~taurus.qt.qtgui.panel.TangoMessageErrorHandler`
-
-    * :class:`~taurus.core.tango.TangoServInfo`
-
-    * :class:`~taurus.core.tango.TangoStateAttribute`
-
-    * :class:`~taurus.core.TauAttrInfo`
-
-    * :class:`~taurus.core.TauAttrValue`
-
-    * :class:`~taurus.core.TauAttribute`
-
-    * :class:`~taurus.core.TauConfigValue`
-
-    * :class:`~taurus.core.TauConfiguration`
-
-    * :class:`~taurus.core.TauConfigurationProxy`
-
-    * :class:`~taurus.core.TauDatabase`
-
-    * :class:`~taurus.core.TauDatabaseCache`
-
-    * :class:`~taurus.core.TauDevClassInfo`
-
-    * :class:`~taurus.core.TauDevInfo`
-
-    * :class:`~taurus.core.TauDevTree`
-
-    * :class:`~taurus.core.TauDevice`
-
-    * :class:`~taurus.core.TauException`
-
-    * :class:`~taurus.core.TauExceptionListener`
-
-    * :class:`~taurus.core.TauFactory`
-
-    * :class:`~taurus.core.TauInfo`
-
-    * :class:`~taurus.core.TauListener`
-
-    * :class:`~taurus.core.TauManager`
-
-    * :class:`~taurus.core.TauOperation`
-
-    * :class:`~taurus.core.TauPollingTimer`
-
-    * :class:`~taurus.core.TauServInfo`
-
-    * :class:`~taurus.core.TauServerTree`
-
-    * :class:`~taurus.core.TauStateAttribute`
-
-    * :class:`~taurus.qt.qtgui.util.TaurusAction`
-
-    * :class:`~taurus.qt.qtgui.application.TaurusApplication`
-
-    * :class:`~taurus.qt.qtgui.plot.TaurusArrayEditor`
-
-    * :class:`~taurus.qt.qtgui.panel.TaurusArrayEditorButton`
-
-    * :class:`~taurus.qt.qtgui.panel.TaurusAttrForm`
-
-    * :class:`~taurus.core.TaurusAttrInfo`
-
-    * :class:`~taurus.qt.qtgui.input.TaurusAttrListComboBox`
-
-    * :class:`~taurus.core.TaurusAttrValue`
-
-    * :class:`~taurus.core.TaurusAttribute`
-
-    * :class:`~taurus.qt.qtgui.panel.TaurusAttributeChooser`
-
-    * :class:`~taurus.qt.qtgui.panel.TaurusAttributeChooserOLD`
-
-    * :class:`~taurus.qt.qtgui.base.TaurusAttributeControllerHelper`
-
-    * :class:`~taurus.qt.qtgui.base.TaurusBaseComponent`
-
-    * :class:`~taurus.qt.qtgui.container.TaurusBaseContainer`
-
-    * :class:`~taurus.qt.qtgui.base.TaurusBaseController`
-
-    * :class:`~taurus.qt.qtgui.graphic.TaurusBaseGraphicsFactory`
-
-    * :class:`~taurus.qt.qtgui.base.TaurusBaseWidget`
-
-    * :class:`~taurus.qt.qtgui.base.TaurusBaseWritableWidget`
-
-    * :class:`~taurus.qt.qtgui.display.TaurusBoolLed`
-
-    * :class:`~taurus.qt.qtgui.button.TaurusCommandButton`
-
-    * :class:`~taurus.qt.qtgui.panel.TaurusCommandsForm`
-
-    * :class:`~taurus.qt.qtgui.display.TaurusConfigLabel`
-
-    * :class:`~taurus.qt.qtgui.input.TaurusConfigLineEdit`
-
-    * :class:`~taurus.core.TaurusConfigValue`
-
-    * :class:`~taurus.core.TaurusConfiguration`
-
-    * :class:`~taurus.qt.qtgui.base.TaurusConfigurationControllerHelper`
-
-    * :class:`~taurus.core.TaurusConfigurationProxy`
-
-    * :class:`~taurus.qt.qtgui.plot.TaurusCurve`
-
-    * :class:`~taurus.qt.qtgui.plot.TaurusCurveMarker`
-
-    * :class:`~taurus.core.TaurusDatabase`
-
-    * :class:`~taurus.core.TaurusDatabaseCache`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusDbBaseModel`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusDbBaseProxyModel`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusDbDeviceClassModel`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusDbDeviceClassProxyModel`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusDbDeviceModel`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusDbDeviceProxyModel`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusDbPlainDeviceModel`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusDbServerModel`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusDbServerProxyModel`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusDbSimpleDeviceModel`
-
-    * :class:`~taurus.qt.qtgui.tree.TaurusDbTreeWidget`
-
-    * :class:`~taurus.qt.qtgui.panel.TaurusDevButton`
-
-    * :class:`~taurus.core.TaurusDevClassInfo`
-
-    * :class:`~taurus.core.TaurusDevInfo`
-
-    * :class:`~taurus.qt.qtgui.panel.TaurusDevPanel`
-
-    * :class:`~taurus.core.TaurusDevTree`
-
-    * :class:`~taurus.qt.qtgui.tree.TaurusDevTree`
-
-    * :class:`~taurus.core.TaurusDevice`
-
-    * :class:`~taurus.qt.qtgui.graphic.TaurusEllipseStateItem`
-
-    * :class:`~taurus.core.TaurusException`
-
-    * :class:`~taurus.core.TaurusExceptionListener`
-
-    * :class:`~taurus.core.TaurusFactory`
-
-    * :class:`~taurus.qt.qtgui.panel.TaurusForm`
-
-    * :class:`~taurus.qt.qtgui.container.TaurusFrame`
-
-    * :class:`~taurus.qt.qtgui.graphic.TaurusGraphicsAttributeItem`
-
-    * :class:`~taurus.qt.qtgui.graphic.TaurusGraphicsItem`
-
-    * :class:`~taurus.qt.qtgui.graphic.TaurusGraphicsScene`
-
-    * :class:`~taurus.qt.qtgui.graphic.TaurusGraphicsStateItem`
-
-    * :class:`~taurus.qt.qtgui.graphic.TaurusGraphicsStateItem2`
-
-    * :class:`~taurus.qt.qtgui.graphic.TaurusGraphicsUpdateThread`
-
-    * :class:`~taurus.qt.qtgui.graphic.TaurusGraphicsView`
-
-    * :class:`~taurus.qt.qtgui.table.TaurusGrid`
-
-    * :class:`~taurus.qt.qtgui.container.TaurusGroupBox`
-
-    * :class:`~taurus.qt.qtgui.graphic.TaurusGroupStateItem`
-
-    * :class:`~taurus.qt.qtgui.container.TaurusGroupWidget`
-
-    * :class:`~taurus.qt.qtgui.taurusgui.TaurusGui`
-
-    * :class:`~taurus.core.TaurusInfo`
-
-    * :class:`~taurus.qt.qtgui.graphic.jdraw.TaurusJDrawGraphicsFactory`
-
-    * :class:`~taurus.qt.qtgui.graphic.jdraw.TaurusJDrawSynopticsView`
-
-    * :class:`~taurus.qt.qtgui.display.TaurusLCD`
-
-    * :class:`~taurus.qt.qtgui.display.TaurusLCDValue`
-
-    * :class:`~taurus.qt.qtgui.display.TaurusLabel`
-
-    * :class:`~taurus.qt.qtgui.button.TaurusLauncherButton`
-
-    * :class:`~taurus.qt.qtgui.display.TaurusLed`
-
-    * :class:`~taurus.core.TaurusListener`
-
-    * :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`
-
-    * :class:`~taurus.qt.qtgui.util.TaurusMenu`
-
-    * :class:`~taurus.qt.qtgui.dialog.TaurusMessageBox`
-
-    * :class:`~taurus.qt.qtgui.panel.TaurusMessageErrorHandler`
-
-    * :class:`~taurus.qt.qtgui.panel.TaurusMessagePanel`
-
-    * :class:`~taurus.core.TaurusModel`
-
-    * :class:`~taurus.qt.qtgui.panel.TaurusModelChooser`
-
-    * :class:`~taurus.qt.qtgui.panel.TaurusModelSelectorTree`
-
-    * :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`
-
-    * :class:`~taurus.qt.qtgui.plot.TaurusPlot`
-
-    * :class:`~taurus.qt.qtgui.panel.TaurusPlotButton`
-
-    * :class:`~taurus.qt.qtgui.plot.TaurusPlotConfigDialog`
-
-    * :class:`~taurus.core.TaurusPollingTimer`
-
-    * :class:`~taurus.qt.qtgui.graphic.TaurusPolygonStateItem`
-
-    * :class:`~taurus.qt.qtgui.table.TaurusPropTable`
-
-    * :class:`~taurus.qt.qtgui.shell.TaurusPythonShell`
-
-    * :class:`~taurus.qt.qtgui.shell.TaurusPythonShellWidget`
-
-    * :class:`~taurus.qt.qtgui.base.TaurusQAttribute`
-
-    * :class:`~taurus.qt.qtgui.base.TaurusQAttributeFactory`
-
-    * :class:`~taurus.qt.qtgui.graphic.TaurusRectStateItem`
-
-    * :class:`~taurus.qt.qtgui.base.TaurusScalarAttributeControllerHelper`
-
-    * :class:`~taurus.qt.qtgui.container.TaurusScrollArea`
-
-    * :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.shell.TaurusShell`
-
-    * :class:`~taurus.core.TaurusStateAttribute`
-
-    * :class:`~taurus.qt.qtgui.display.TaurusStateLabel`
-
-    * :class:`~taurus.qt.qtgui.display.TaurusStateLed`
-
-    * :class:`~taurus.qt.qtgui.panel.TaurusStatusLabel`
-
-    * :class:`~taurus.qt.qtgui.graphic.TaurusTextAttributeItem`
-
-    * :class:`~taurus.qt.qtgui.graphic.TaurusTextStateItem`
-
-    * :class:`~taurus.qt.qtgui.plot.TaurusTimeScaleDraw`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusTreeAttributeItem`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusTreeDeviceClassItem`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusTreeDeviceDomainItem`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusTreeDeviceFamilyItem`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusTreeDeviceItem`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusTreeDeviceMemberItem`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusTreeDevicePartItem`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusTreeItem`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusTreeServerItem`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusTreeServerNameItem`
-
-    * :class:`~taurus.qt.qtcore.model.TaurusTreeSimpleDeviceItem`
-
-    * :class:`~taurus.qt.qtgui.plot.TaurusTrend`
-
-    * :class:`~taurus.qt.qtgui.plot.TaurusTrendsSet`
-
-    * :class:`~taurus.qt.qtgui.panel.TaurusValue`
-
-    * :class:`~taurus.qt.qtgui.input.TaurusValueCheckBox`
-
-    * :class:`~taurus.qt.qtgui.input.TaurusValueComboBox`
-
-    * :class:`~taurus.qt.qtgui.display.TaurusValueLabel`
-
-    * :class:`~taurus.qt.qtgui.input.TaurusValueLineEdit`
-
-    * :class:`~taurus.qt.qtgui.input.TaurusValueSpinBox`
-
-    * :class:`~taurus.qt.qtgui.panel.TaurusValuesFrame`
-
-    * :class:`~taurus.qt.qtgui.table.TaurusValuesTable`
-
-    * :class:`~taurus.qt.qtgui.panel.TaurusValuesTableButton`
-
-    * :class:`~taurus.qt.qtgui.input.TaurusWheelEdit`
-
-    * :class:`~taurus.qt.qtgui.container.TaurusWidget`
-
-    * :class:`~taurus.qt.qtgui.util.TaurusWidgetFactory`
-
-    * :class:`~taurus.qt.qtdesigner.taurusplugin.TaurusWidgetPlugin`
-
-    * :class:`~taurus.qt.qtgui.plot.TaurusXValues`
-
-    * :class:`~taurus.core.util.ThreadDict`
-
-    * :class:`~taurus.core.util.ThreadPool`
-
-    * :class:`~taurus.core.util.TimedQueue`
-
-    * :class:`~taurus.core.util.Timer`
-
-    * :class:`~taurus.core.util.TraceIt`
-
-    * :class:`~taurus.core.util.WarnIt`
-
-    * :class:`~taurus.core.util.Worker`
-
-    * :class:`~taurus.core.WriteAttrOperation`
-
-    * :class:`~taurus.core.util.ZIPCodec`
-
-    * :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
deleted file mode 100644
index 6bf3296..0000000
--- a/doc/source/devel/catalog.html
+++ /dev/null
@@ -1,835 +0,0 @@
-<html><head>
-<title>taurus Icon Catalog</title>
-<style>table { border-collapse: collapse; }</style>
-</head>
-<body>
-<h1>Index</h1>
-<ul><li><a href="#_base">Base icons</a></li>
-<li><a href="#tango-icons/mimetypes">tango-icons/mimetypes (:/mimetypes)</a></li>
-<li><a href="#tango-icons/apps">tango-icons/apps (:/apps)</a></li>
-<li><a href="#tango-icons/devices">tango-icons/devices (:/devices)</a></li>
-<li><a href="#tango-icons/actions">tango-icons/actions (:/actions)</a></li>
-<li><a href="#tango-icons/status">tango-icons/status (:/status)</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/emotes">tango-icons/emotes (:/emotes)</a></li>
-<li><a href="#tango-icons/emblems">tango-icons/emblems (:/emblems)</a></li>
-<li><a href="#external/jive">external/jive (:/jive)</a></li>
-<li><a href="#external">external (:)</a></li>
-<li><a href="#extra-icons/institutes">extra-icons/institutes (:/institutes)</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/designer">extra-icons/designer (:/designer)</a></li>
-<li><a href="#extra-icons/actions">extra-icons/actions (:/actions)</a></li>
-<li><a href="#extra-icons">extra-icons (:)</a></li>
-<li><a href="#rrze-icons/devices">rrze-icons/devices (:/devices)</a></li>
-<li><a href="#rrze-icons/actions">rrze-icons/actions (:/actions)</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="#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="#large/snapshot">large/snapshot (:/snapshot)</a></li>
-</ul>
-<h2><a name="_base">Base icons</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/" Directory: ""</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="taurus.png" alt="taurus.png"/></td><td width="400">:/logo.png</td><td width="400">taurus.png</td><td width="200">logo</td></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" 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="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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-address-book.svg" alt="tango-icons/mimetypes/x-office-address-book.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-presentation-template.svg" alt="tango-icons/mimetypes/x-office-presentation-template.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/text-x-script.svg" alt="tango-icons/mimetypes/text-x-script.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/application-certificate.svg" alt="tango-icons/mimetypes/application-certificate.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/image-x-generic.svg" alt="tango-icons/mimetypes/image-x-generic.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/application-x-executable.svg" alt="tango-icons/mimetypes/application-x-executable.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/text-html.svg" alt="tango-icons/mimetypes/text-html.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-drawing-template.svg" alt="tango-icons/mimetypes/x-office-drawing-template.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-spreadsheet.svg" alt="tango-icons/mimetypes/x-office-spreadsheet.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-spreadsheet-template.svg" alt="tango-icons/mimetypes/x-office-spreadsheet-template.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/text-x-generic.svg" alt="tango-icons/mimetypes/text-x-generic.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-drawing.svg" alt="tango-icons/mimetypes/x-office-drawing.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-document-template.svg" alt="tango-icons/mimetypes/x-office-document-template.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/font-x-generic.svg" alt="tango-icons/mimetypes/font-x-generic.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/audio-x-generic.svg" alt="tango-icons/mimetypes/audio-x-generic.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/video-x-generic.svg" alt="tango-icons/mimetypes/video-x-generic.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/text-x-generic-template.svg" alt="tango-icons/mimetypes/text-x-generic-template.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/package-x-generic.svg" alt="tango-icons/mimetypes/package-x-generic.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-calendar.svg" alt="tango-icons/mimetypes/x-office-calendar.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-document.svg" alt="tango-icons/mimetypes/x-office-document.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-presentation.svg" alt="tango-icons/mimetypes/x-office-presentation.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-screensaver.svg" alt="tango-icons/apps/preferences-desktop-screensaver.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/accessories-calculator.svg" alt="tango-icons/apps/accessories-calculator.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/office-calendar.svg" alt="tango-icons/apps/office-calendar.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/system-file-manager.svg" alt="tango-icons/apps/system-file-manager.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/help-browser.svg" alt="tango-icons/apps/help-browser.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/accessories-text-editor.svg" alt="tango-icons/apps/accessories-text-editor.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-theme.svg" alt="tango-icons/apps/preferences-desktop-theme.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/system-software-update.svg" alt="tango-icons/apps/system-software-update.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/system-installer.svg" alt="tango-icons/apps/system-installer.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-multimedia.svg" alt="tango-icons/apps/preferences-desktop-multimedia.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-system-windows.svg" alt="tango-icons/apps/preferences-system-windows.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/utilities-terminal.svg" alt="tango-icons/apps/utilities-terminal.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/internet-news-reader.svg" alt="tango-icons/apps/internet-news-reader.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-font.svg" alt="tango-icons/apps/preferences-desktop-font.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/accessories-character-map.svg" alt="tango-icons/apps/accessories-character-map.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-accessibility.svg" alt="tango-icons/apps/preferences-desktop-accessibility.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-keyboard-shortcuts.svg" alt="tango-icons/apps/preferences-desktop-keyboard-shortcuts.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/utilities-system-monitor.svg" alt="tango-icons/apps/utilities-system-monitor.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-assistive-technology.svg" alt="tango-icons/apps/preferences-desktop-assistive-technology.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/internet-group-chat.svg" alt="tango-icons/apps/internet-group-chat.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-remote-desktop.svg" alt="tango-icons/apps/preferences-desktop-remote-desktop.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-locale.svg" alt="tango-icons/apps/preferences-desktop-locale.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-system-session.svg" alt="tango-icons/apps/preferences-system-session.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-wallpaper.svg" alt="tango-icons/apps/preferences-desktop-wallpaper.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/internet-web-browser.svg" alt="tango-icons/apps/internet-web-browser.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/system-users.svg" alt="tango-icons/apps/system-users.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-system-network-proxy.svg" alt="tango-icons/apps/preferences-system-network-proxy.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/internet-mail.svg" alt="tango-icons/apps/internet-mail.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="tango-icons/devices/camera-video.svg" alt="tango-icons/devices/camera-video.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/input-gaming.svg" alt="tango-icons/devices/input-gaming.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/drive-removable-media.svg" alt="tango-icons/devices/drive-removable-media.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/network-wired.svg" alt="tango-icons/devices/network-wired.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/media-floppy.svg" alt="tango-icons/devices/media-floppy.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/media-flash.svg" alt="tango-icons/devices/media-flash.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/printer.svg" alt="tango-icons/devices/printer.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/battery.svg" alt="tango-icons/devices/battery.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/computer.svg" alt="tango-icons/devices/computer.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/multimedia-player.svg" alt="tango-icons/devices/multimedia-player.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/audio-card.svg" alt="tango-icons/devices/audio-card.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/input-mouse.svg" alt="tango-icons/devices/input-mouse.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/network-wireless.svg" alt="tango-icons/devices/network-wireless.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/video-display.svg" alt="tango-icons/devices/video-display.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/audio-input-microphone.svg" alt="tango-icons/devices/audio-input-microphone.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/input-keyboard.svg" alt="tango-icons/devices/input-keyboard.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/drive-optical.svg" alt="tango-icons/devices/drive-optical.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/camera-photo.svg" alt="tango-icons/devices/camera-photo.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/drive-harddisk.svg" alt="tango-icons/devices/drive-harddisk.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/media-optical.svg" alt="tango-icons/devices/media-optical.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="tango-icons/actions/list-add.svg" alt="tango-icons/actions/list-add.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/mail-reply-all.svg" alt="tango-icons/actions/mail-reply-all.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-seek-forward.svg" alt="tango-icons/actions/media-seek-forward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-up.svg" alt="tango-icons/actions/go-up.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-seek-backward.svg" alt="tango-icons/actions/media-seek-backward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/appointment-new.svg" alt="tango-icons/actions/appointment-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-record.svg" alt="tango-icons/actions/media-record.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-justify-left.svg" alt="tango-icons/actions/format-justify-left.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-select-all.svg" alt="tango-icons/actions/edit-select-all.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-cut.svg" alt="tango-icons/actions/edit-cut.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/mail-send-receive.svg" alt="tango-icons/actions/mail-send-receive.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-previous.svg" alt="tango-icons/actions/go-previous.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-playback-pause.svg" alt="tango-icons/actions/media-playback-pause.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/view-fullscreen.svg" alt="tango-icons/actions/view-fullscreen.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-next.svg" alt="tango-icons/actions/go-next.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-last.svg" alt="tango-icons/actions/go-last.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-home.svg" alt="tango-icons/actions/go-home.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-bottom.svg" alt="tango-icons/actions/go-bottom.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-playback-start.svg" alt="tango-icons/actions/media-playback-start.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-find.svg" alt="tango-icons/actions/edit-find.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-redo.svg" alt="tango-icons/actions/edit-redo.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/document-print.svg" alt="tango-icons/actions/document-print.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/mail-forward.svg" alt="tango-icons/actions/mail-forward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-eject.svg" alt="tango-icons/actions/media-eject.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-text-strikethrough.svg" alt="tango-icons/actions/format-text-strikethrough.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-delete.svg" alt="tango-icons/actions/edit-delete.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-text-italic.svg" alt="tango-icons/actions/format-text-italic.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/system-shutdown.svg" alt="tango-icons/actions/system-shutdown.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/system-lock-screen.svg" alt="tango-icons/actions/system-lock-screen.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/document-properties.svg" alt="tango-icons/actions/document-properties.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/list-remove.svg" alt="tango-icons/actions/list-remove.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/document-open.svg" alt="tango-icons/actions/document-open.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/bookmark-new.svg" alt="tango-icons/actions/bookmark-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/mail-reply-sender.svg" alt="tango-icons/actions/mail-reply-sender.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/document-print-preview.svg" alt="tango-icons/actions/document-print-preview.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/address-book-new.svg" alt="tango-icons/actions/address-book-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-clear.svg" alt="tango-icons/actions/edit-clear.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-top.svg" alt="tango-icons/actions/go-top.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-indent-more.svg" alt="tango-icons/actions/format-indent-more.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-jump.svg" alt="tango-icons/actions/go-jump.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/system-search.svg" alt="tango-icons/actions/system-search.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-find-replace.svg" alt="tango-icons/actions/edit-find-replace.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-justify-center.svg" alt="tango-icons/actions/format-justify-center.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-skip-forward.svg" alt="tango-icons/actions/media-skip-forward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/document-save.svg" alt="tango-icons/actions/document-save.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/contact-new.svg" alt="tango-icons/actions/contact-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-playback-stop.svg" alt="tango-icons/actions/media-playback-stop.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-copy.svg" alt="tango-icons/actions/edit-copy.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-paste.svg" alt="tango-icons/actions/edit-paste.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-justify-fill.svg" alt="tango-icons/actions/format-justify-fill.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/system-log-out.svg" alt="tango-icons/actions/system-log-out.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-justify-right.svg" alt="tango-icons/actions/format-justify-right.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/mail-message-new.svg" alt="tango-icons/actions/mail-message-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/document-save-as.svg" alt="tango-icons/actions/document-save-as.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/window-new.svg" alt="tango-icons/actions/window-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/document-new.svg" alt="tango-icons/actions/document-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-text-underline.svg" alt="tango-icons/actions/format-text-underline.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-undo.svg" alt="tango-icons/actions/edit-undo.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/folder-new.svg" alt="tango-icons/actions/folder-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/tab-new.svg" alt="tango-icons/actions/tab-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-skip-backward.svg" alt="tango-icons/actions/media-skip-backward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/mail-mark-not-junk.svg" alt="tango-icons/actions/mail-mark-not-junk.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-down.svg" alt="tango-icons/actions/go-down.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-text-bold.svg" alt="tango-icons/actions/format-text-bold.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/view-refresh.svg" alt="tango-icons/actions/view-refresh.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-indent-less.svg" alt="tango-icons/actions/format-indent-less.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/mail-mark-junk.svg" alt="tango-icons/actions/mail-mark-junk.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-first.svg" alt="tango-icons/actions/go-first.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/process-stop.svg" alt="tango-icons/actions/process-stop.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="tango-icons/status/folder-visiting.svg" alt="tango-icons/status/folder-visiting.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/network-transmit-receive.svg" alt="tango-icons/status/network-transmit-receive.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/audio-volume-medium.svg" alt="tango-icons/status/audio-volume-medium.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/folder-open.svg" alt="tango-icons/status/folder-open.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-clear.svg" alt="tango-icons/status/weather-clear.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/image-missing.svg" alt="tango-icons/status/image-missing.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/network-transmit.svg" alt="tango-icons/status/network-transmit.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/network-idle.svg" alt="tango-icons/status/network-idle.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-severe-alert.svg" alt="tango-icons/status/weather-severe-alert.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-overcast.svg" alt="tango-icons/status/weather-overcast.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/dialog-information.svg" alt="tango-icons/status/dialog-information.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/network-error.svg" alt="tango-icons/status/network-error.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/software-update-available.svg" alt="tango-icons/status/software-update-available.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-storm.svg" alt="tango-icons/status/weather-storm.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/audio-volume-muted.svg" alt="tango-icons/status/audio-volume-muted.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/printer-error.svg" alt="tango-icons/status/printer-error.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/user-trash-full.svg" alt="tango-icons/status/user-trash-full.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-few-clouds.svg" alt="tango-icons/status/weather-few-clouds.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/dialog-warning.svg" alt="tango-icons/status/dialog-warning.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/mail-attachment.svg" alt="tango-icons/status/mail-attachment.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/network-offline.svg" alt="tango-icons/status/network-offline.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/network-receive.svg" alt="tango-icons/status/network-receive.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/dialog-error.svg" alt="tango-icons/status/dialog-error.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/network-wireless-encrypted.svg" alt="tango-icons/status/network-wireless-encrypted.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/folder-drag-accept.svg" alt="tango-icons/status/folder-drag-accept.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/audio-volume-high.svg" alt="tango-icons/status/audio-volume-high.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/software-update-urgent.svg" alt="tango-icons/status/software-update-urgent.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-showers.svg" alt="tango-icons/status/weather-showers.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/battery-caution.svg" alt="tango-icons/status/battery-caution.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/audio-volume-low.svg" alt="tango-icons/status/audio-volume-low.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/image-loading.svg" alt="tango-icons/status/image-loading.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-snow.svg" alt="tango-icons/status/weather-snow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-showers-scattered.svg" alt="tango-icons/status/weather-showers-scattered.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-clear-night.svg" alt="tango-icons/status/weather-clear-night.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-few-clouds-night.svg" alt="tango-icons/status/weather-few-clouds-night.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-development.svg" alt="tango-icons/categories/applications-development.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-system.svg" alt="tango-icons/categories/applications-system.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-office.svg" alt="tango-icons/categories/applications-office.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/preferences-desktop-peripherals.svg" alt="tango-icons/categories/preferences-desktop-peripherals.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-other.svg" alt="tango-icons/categories/applications-other.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-games.svg" alt="tango-icons/categories/applications-games.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/preferences-desktop.svg" alt="tango-icons/categories/preferences-desktop.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-multimedia.svg" alt="tango-icons/categories/applications-multimedia.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-internet.svg" alt="tango-icons/categories/applications-internet.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-accessories.svg" alt="tango-icons/categories/applications-accessories.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/preferences-system.svg" alt="tango-icons/categories/preferences-system.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-graphics.svg" alt="tango-icons/categories/applications-graphics.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="tango-icons/places/folder-remote.svg" alt="tango-icons/places/folder-remote.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/places/network-workgroup.svg" alt="tango-icons/places/network-workgroup.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/places/user-desktop.svg" alt="tango-icons/places/user-desktop.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/places/folder-saved-search.svg" alt="tango-icons/places/folder-saved-search.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/places/user-trash.svg" alt="tango-icons/places/user-trash.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/places/user-home.svg" alt="tango-icons/places/user-home.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/places/network-server.svg" alt="tango-icons/places/network-server.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/places/start-here.svg" alt="tango-icons/places/start-here.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/places/folder.svg" alt="tango-icons/places/folder.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></td><td width="400">:/places/folder.svg</td><td width="400">tango-icons/places/folder.svg</td><td width="200">folder</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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-cool.svg" alt="tango-icons/emotes/face-cool.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-crying.svg" alt="tango-icons/emotes/face-crying.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-angel.svg" alt="tango-icons/emotes/face-angel.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-plain.svg" alt="tango-icons/emotes/face-plain.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-smile.svg" alt="tango-icons/emotes/face-smile.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-surprise.svg" alt="tango-icons/emotes/face-surprise.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-kiss.svg" alt="tango-icons/emotes/face-kiss.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-glasses.svg" alt="tango-icons/emotes/face-glasses.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-monkey.svg" alt="tango-icons/emotes/face-monkey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-wink.svg" alt="tango-icons/emotes/face-wink.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-grin.svg" alt="tango-icons/emotes/face-grin.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-smile-big.svg" alt="tango-icons/emotes/face-smile-big.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-devilish.svg" alt="tango-icons/emotes/face-devilish.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-sad.svg" alt="tango-icons/emotes/face-sad.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="tango-icons/emblems/emblem-symbolic-link.svg" alt="tango-icons/emblems/emblem-symbolic-link.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emblems/emblem-important.svg" alt="tango-icons/emblems/emblem-important.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emblems/emblem-photos.svg" alt="tango-icons/emblems/emblem-photos.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emblems/emblem-system.svg" alt="tango-icons/emblems/emblem-system.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emblems/emblem-readonly.svg" alt="tango-icons/emblems/emblem-readonly.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emblems/emblem-favorite.svg" alt="tango-icons/emblems/emblem-favorite.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emblems/emblem-unreadable.svg" alt="tango-icons/emblems/emblem-unreadable.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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>
-</table>
-<h2><a name="extra-icons/institutes">:/institutes (extra-icons/institutes)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/institutes" Directory: "extra-icons/institutes"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/institutes/logo_desy.gif" alt="extra-icons/institutes/logo_desy.gif"/></td><td width="400">:/institutes/logo_desy.gif</td><td width="400">extra-icons/institutes/logo_desy.gif</td><td width="200">logo_desy</td></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/institutes/logo_soleil.jpg" alt="extra-icons/institutes/logo_soleil.jpg"/></td><td width="400">:/institutes/logo_soleil.jpg</td><td width="400">extra-icons/institutes/logo_soleil.jpg</td><td width="200">logo_soleil</td></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/institutes/logo_maxlab.gif" alt="extra-icons/institutes/logo_maxlab.gif"/></td><td width="400">:/institutes/logo_maxlab.gif</td><td width="400">extra-icons/institutes/logo_maxlab.gif</td><td width="200">logo_maxlab</td></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/institutes/logo_xfel.png" alt="extra-icons/institutes/logo_xfel.png"/></td><td width="400">:/institutes/logo_xfel.png</td><td width="400">extra-icons/institutes/logo_xfel.png</td><td width="200">logo_xfel</td></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/institutes/logo_alba.png" alt="extra-icons/institutes/logo_alba.png"/></td><td width="400">:/institutes/logo_alba.png</td><td width="400">extra-icons/institutes/logo_alba.png</td><td width="200">logo_alba</td></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/institutes/logo_elettra.gif" alt="extra-icons/institutes/logo_elettra.gif"/></td><td width="400">:/institutes/logo_elettra.gif</td><td width="400">extra-icons/institutes/logo_elettra.gif</td><td width="200">logo_elettra</td></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/institutes/logo_esrf.png" alt="extra-icons/institutes/logo_esrf.png"/></td><td width="400">:/institutes/logo_esrf.png</td><td width="400">extra-icons/institutes/logo_esrf.png</td><td width="200">logo_esrf</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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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>
-</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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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>
-</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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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>
-</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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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>
-</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="80"><td width="80" align="center"><object data="extra-icons/actions/stop.svg" alt="extra-icons/actions/stop.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_playback_pause.svg" alt="extra-icons/actions/media_playback_pause.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_playback_stop.svg" alt="extra-icons/actions/media_playback_stop.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_seek_backward.svg" alt="extra-icons/actions/media_seek_backward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/collapse-all.svg" alt="extra-icons/actions/collapse-all.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_skip_backward.svg" alt="extra-icons/actions/media_skip_backward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_skip_forward.svg" alt="extra-icons/actions/media_skip_forward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_playback_start.svg" alt="extra-icons/actions/media_playback_start.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/go-backward.svg" alt="extra-icons/actions/go-backward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_playback_backward.svg" alt="extra-icons/actions/media_playback_backward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_playback_stop_green.svg" alt="extra-icons/actions/media_playback_stop_green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media-seek-forward-green.svg" alt="extra-icons/actions/media-seek-forward-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/expand-all.svg" alt="extra-icons/actions/expand-all.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/go-forward.svg" alt="extra-icons/actions/go-forward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media-seek-backward-green.svg" alt="extra-icons/actions/media-seek-backward-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_seek_forward.svg" alt="extra-icons/actions/media_seek_forward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/scroll_lock.png" alt="extra-icons/scroll_lock.png"/></td><td width="400">:/scroll_lock.png</td><td width="400">extra-icons/scroll_lock.png</td><td width="200">scroll_lock</td></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/pin.png" alt="extra-icons/pin.png"/></td><td width="400">:/pin.png</td><td width="400">extra-icons/pin.png</td><td width="200">pin</td></tr>
-<tr height="80"><td width="80" align="center"><object data="extra-icons/arrow01.svg" alt="extra-icons/arrow01.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></td><td width="400">:/arrow01.svg</td><td width="400">extra-icons/arrow01.svg</td><td width="200">arrow01</td></tr>
-<tr height="80"><td width="80" align="center"><object data="extra-icons/color-fill.svg" alt="extra-icons/color-fill.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></td><td width="400">:/color-fill.svg</td><td width="400">extra-icons/color-fill.svg</td><td width="200">color-fill</td></tr>
-</table>
-<h2><a name="rrze-icons/devices">:/devices (rrze-icons/devices)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-database-firebird.svg" alt="rrze-icons/devices/server-database-firebird.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-web-yellow.svg" alt="rrze-icons/devices/server-web-yellow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-database.svg" alt="rrze-icons/devices/server-database.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/workstation.svg" alt="rrze-icons/devices/workstation.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-email.svg" alt="rrze-icons/devices/server-email.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-web-secure.svg" alt="rrze-icons/devices/server-web-secure.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/wlan-controller.svg" alt="rrze-icons/devices/wlan-controller.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-web-green.svg" alt="rrze-icons/devices/server-web-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-print.svg" alt="rrze-icons/devices/server-print.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-accounting.svg" alt="rrze-icons/devices/server-accounting.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-access.svg" alt="rrze-icons/devices/server-access.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server.svg" alt="rrze-icons/devices/server.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-directory.svg" alt="rrze-icons/devices/server-directory.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-red.svg" alt="rrze-icons/devices/server-red.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-database-mysql.svg" alt="rrze-icons/devices/server-database-mysql.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-directory-yellow.svg" alt="rrze-icons/devices/server-directory-yellow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-database-yellow.svg" alt="rrze-icons/devices/server-database-yellow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-database-postgres.svg" alt="rrze-icons/devices/server-database-postgres.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-directory-green.svg" alt="rrze-icons/devices/server-directory-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/switch.svg" alt="rrze-icons/devices/switch.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/wlan-access-point.svg" alt="rrze-icons/devices/wlan-access-point.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-user.svg" alt="rrze-icons/devices/server-user.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-green.svg" alt="rrze-icons/devices/server-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-multiple.svg" alt="rrze-icons/devices/server-multiple.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-blades.svg" alt="rrze-icons/devices/server-blades.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-firewall.svg" alt="rrze-icons/devices/server-firewall.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-yellow.svg" alt="rrze-icons/devices/server-yellow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-database-otrs.svg" alt="rrze-icons/devices/server-database-otrs.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-book.svg" alt="rrze-icons/devices/server-book.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-web.svg" alt="rrze-icons/devices/server-web.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/router.svg" alt="rrze-icons/devices/router.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-subversion.svg" alt="rrze-icons/devices/server-subversion.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/database-locked.svg" alt="rrze-icons/devices/database-locked.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-database-green.svg" alt="rrze-icons/devices/server-database-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-vpn.svg" alt="rrze-icons/devices/server-vpn.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/modem.svg" alt="rrze-icons/devices/modem.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-monitoring.svg" alt="rrze-icons/devices/server-monitoring.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-file.svg" alt="rrze-icons/devices/server-file.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-radius.svg" alt="rrze-icons/devices/server-radius.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-email-relay.svg" alt="rrze-icons/devices/server-email-relay.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="rrze-icons/actions/run.svg" alt="rrze-icons/actions/run.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/show.svg" alt="rrze-icons/actions/show.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/transfer-left_right.svg" alt="rrze-icons/actions/transfer-left_right.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/left-grey.svg" alt="rrze-icons/actions/left-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/hide.svg" alt="rrze-icons/actions/hide.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/move-waiting-to-participant-green-arrow.svg" alt="rrze-icons/actions/move-waiting-to-participant-green-arrow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/print.svg" alt="rrze-icons/actions/print.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/email-not-available.svg" alt="rrze-icons/actions/email-not-available.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/add-participant.svg" alt="rrze-icons/actions/add-participant.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/send-email-user-other.svg" alt="rrze-icons/actions/send-email-user-other.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/transfer-right_left.svg" alt="rrze-icons/actions/transfer-right_left.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/right.svg" alt="rrze-icons/actions/right.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/refuse.svg" alt="rrze-icons/actions/refuse.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/dynamic-blue-down.svg" alt="rrze-icons/actions/dynamic-blue-down.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-neutral-green.svg" alt="rrze-icons/actions/sort-neutral-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/go-bottom.svg" alt="rrze-icons/actions/go-bottom.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/dynamic-blue-left.svg" alt="rrze-icons/actions/dynamic-blue-left.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/log-out.svg" alt="rrze-icons/actions/log-out.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/switch-course-grey.svg" alt="rrze-icons/actions/switch-course-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/down-grey.svg" alt="rrze-icons/actions/down-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/action-undo.svg" alt="rrze-icons/actions/action-undo.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/dynamic-blue-right.svg" alt="rrze-icons/actions/dynamic-blue-right.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/load-settings.svg" alt="rrze-icons/actions/load-settings.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/right-grey.svg" alt="rrze-icons/actions/right-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/data-transfer.svg" alt="rrze-icons/actions/data-transfer.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/view.svg" alt="rrze-icons/actions/view.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/arrange-boxes.svg" alt="rrze-icons/actions/arrange-boxes.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-down-green.svg" alt="rrze-icons/actions/sort-down-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-up-red.svg" alt="rrze-icons/actions/sort-up-red.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/up-grey.svg" alt="rrze-icons/actions/up-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-down.svg" alt="rrze-icons/actions/sort-down.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/dial-in.svg" alt="rrze-icons/actions/dial-in.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/download.svg" alt="rrze-icons/actions/download.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/up.svg" alt="rrze-icons/actions/up.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/dynamic-blue-up.svg" alt="rrze-icons/actions/dynamic-blue-up.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/move-waiting-down-grey.svg" alt="rrze-icons/actions/move-waiting-down-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-up.svg" alt="rrze-icons/actions/sort-up.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/list-all-participants.svg" alt="rrze-icons/actions/list-all-participants.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/move-waiting-down.svg" alt="rrze-icons/actions/move-waiting-down.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/filter.svg" alt="rrze-icons/actions/filter.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/down.svg" alt="rrze-icons/actions/down.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/transfer-down_up.svg" alt="rrze-icons/actions/transfer-down_up.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/delete-all-participants.svg" alt="rrze-icons/actions/delete-all-participants.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/switch-course-book-grey.svg" alt="rrze-icons/actions/switch-course-book-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/merge-affiliation.svg" alt="rrze-icons/actions/merge-affiliation.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/left.svg" alt="rrze-icons/actions/left.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-up-green.svg" alt="rrze-icons/actions/sort-up-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-neutral.svg" alt="rrze-icons/actions/sort-neutral.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/move-waiting-up-grey.svg" alt="rrze-icons/actions/move-waiting-up-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/go-top.svg" alt="rrze-icons/actions/go-top.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/monitoring.svg" alt="rrze-icons/actions/monitoring.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-down-red.svg" alt="rrze-icons/actions/sort-down-red.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/move-participant-to-waiting-red-grey.svg" alt="rrze-icons/actions/move-participant-to-waiting-red-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/send-email.svg" alt="rrze-icons/actions/send-email.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/send-email-group.svg" alt="rrze-icons/actions/send-email-group.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/switch-course.svg" alt="rrze-icons/actions/switch-course.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/transfer-up_down.svg" alt="rrze-icons/actions/transfer-up_down.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/move-waiting-up.svg" alt="rrze-icons/actions/move-waiting-up.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/upload.svg" alt="rrze-icons/actions/upload.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/move-participant-to-waiting-red.svg" alt="rrze-icons/actions/move-participant-to-waiting-red.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/log-in.svg" alt="rrze-icons/actions/log-in.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/switch-course-book.svg" alt="rrze-icons/actions/switch-course-book.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/back-to-ou.svg" alt="rrze-icons/actions/back-to-ou.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-neutral-red.svg" alt="rrze-icons/actions/sort-neutral-red.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/send-email-user.svg" alt="rrze-icons/actions/send-email-user.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/split-affiliation.svg" alt="rrze-icons/actions/split-affiliation.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/workflow.svg" alt="rrze-icons/actions/workflow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/add.svg" alt="rrze-icons/actions/add.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/manage-settings.svg" alt="rrze-icons/actions/manage-settings.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/approval.svg" alt="rrze-icons/actions/approval.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></td><td width="400">:/actions/approval.svg</td><td width="400">rrze-icons/actions/approval.svg</td><td width="200">approval</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="80"><td width="80" align="center"><object data="rrze-icons/status/awaiting.svg" alt="rrze-icons/status/awaiting.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/temporarily-not-available.svg" alt="rrze-icons/status/temporarily-not-available.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/binational.svg" alt="rrze-icons/status/binational.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/temporarily-not-available-clock.svg" alt="rrze-icons/status/temporarily-not-available-clock.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/hourglass.svg" alt="rrze-icons/status/hourglass.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/synchronized.svg" alt="rrze-icons/status/synchronized.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/not-available.svg" alt="rrze-icons/status/not-available.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/false.svg" alt="rrze-icons/status/false.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/female.svg" alt="rrze-icons/status/female.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/expired.svg" alt="rrze-icons/status/expired.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-yellow-clock.svg" alt="rrze-icons/status/flag-yellow-clock.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/awaiting-plus.svg" alt="rrze-icons/status/awaiting-plus.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/male.svg" alt="rrze-icons/status/male.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-green-mail.svg" alt="rrze-icons/status/flag-green-mail.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/error.svg" alt="rrze-icons/status/error.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/true-orange.svg" alt="rrze-icons/status/true-orange.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/important.svg" alt="rrze-icons/status/important.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-yellow-mail.svg" alt="rrze-icons/status/flag-yellow-mail.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-red-mail.svg" alt="rrze-icons/status/flag-red-mail.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/not-synchronized.svg" alt="rrze-icons/status/not-synchronized.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/unlocked.svg" alt="rrze-icons/status/unlocked.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/maintenance-time.svg" alt="rrze-icons/status/maintenance-time.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/warning.svg" alt="rrze-icons/status/warning.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/available.svg" alt="rrze-icons/status/available.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-green.svg" alt="rrze-icons/status/flag-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-red.svg" alt="rrze-icons/status/flag-red.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/not-known.svg" alt="rrze-icons/status/not-known.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/exclamation-mark.svg" alt="rrze-icons/status/exclamation-mark.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-green-clock.svg" alt="rrze-icons/status/flag-green-clock.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/true.svg" alt="rrze-icons/status/true.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-yellow.svg" alt="rrze-icons/status/flag-yellow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/not-specified.svg" alt="rrze-icons/status/not-specified.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-red-clock.svg" alt="rrze-icons/status/flag-red-clock.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-helpdesk-faq.svg" alt="rrze-icons/categories/user-helpdesk-faq.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-phd-group.svg" alt="rrze-icons/categories/user-phd-group.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-other.svg" alt="rrze-icons/categories/user-other.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-student-assistant.svg" alt="rrze-icons/categories/user-student-assistant.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/book-marks.svg" alt="rrze-icons/categories/book-marks.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/mood-level-yellow.svg" alt="rrze-icons/categories/mood-level-yellow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-disabled.svg" alt="rrze-icons/categories/user-disabled.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-examiner.svg" alt="rrze-icons/categories/user-examiner.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/affiliation-employee.svg" alt="rrze-icons/categories/affiliation-employee.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-expert.svg" alt="rrze-icons/categories/user-expert.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/bookmark.svg" alt="rrze-icons/categories/bookmark.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-digital-person.svg" alt="rrze-icons/categories/user-digital-person.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-unknown.svg" alt="rrze-icons/categories/user-unknown.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-manager.svg" alt="rrze-icons/categories/user-manager.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-helpdesk.svg" alt="rrze-icons/categories/user-helpdesk.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/affiliation-student.svg" alt="rrze-icons/categories/affiliation-student.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/mood-level-green.svg" alt="rrze-icons/categories/mood-level-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-real-person.svg" alt="rrze-icons/categories/user-real-person.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-business.svg" alt="rrze-icons/categories/user-business.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-student.svg" alt="rrze-icons/categories/user-student.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-examiner-group.svg" alt="rrze-icons/categories/user-examiner-group.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-admin.svg" alt="rrze-icons/categories/user-admin.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-enrolee.svg" alt="rrze-icons/categories/user-enrolee.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-other-female.svg" alt="rrze-icons/categories/user-other-female.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-other-business.svg" alt="rrze-icons/categories/user-other-business.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-phd.svg" alt="rrze-icons/categories/user-phd.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/affiliation-guest.svg" alt="rrze-icons/categories/affiliation-guest.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/icon-inspector.svg" alt="rrze-icons/categories/icon-inspector.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-group.svg" alt="rrze-icons/categories/user-group.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-other-new.svg" alt="rrze-icons/categories/user-other-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-admin-gear.svg" alt="rrze-icons/categories/user-admin-gear.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/book.svg" alt="rrze-icons/categories/book.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/alumni-group.svg" alt="rrze-icons/categories/alumni-group.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-employee.svg" alt="rrze-icons/categories/user-employee.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-endcustomer.svg" alt="rrze-icons/categories/user-endcustomer.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-library.svg" alt="rrze-icons/categories/user-library.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/magnifying-glass.svg" alt="rrze-icons/categories/magnifying-glass.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/mood-level-red.svg" alt="rrze-icons/categories/mood-level-red.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-partner.svg" alt="rrze-icons/categories/user-partner.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-customer.svg" alt="rrze-icons/categories/user-customer.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="rrze-icons/emblems/account-new.svg" alt="rrze-icons/emblems/account-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/message-new.svg" alt="rrze-icons/emblems/message-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/page-25.svg" alt="rrze-icons/emblems/page-25.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/for-free.svg" alt="rrze-icons/emblems/for-free.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/unix.svg" alt="rrze-icons/emblems/unix.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/subversion.svg" alt="rrze-icons/emblems/subversion.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/database-firebird.svg" alt="rrze-icons/emblems/database-firebird.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/tree-diagramm.svg" alt="rrze-icons/emblems/tree-diagramm.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/report-run.svg" alt="rrze-icons/emblems/report-run.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/doctoral-cap.svg" alt="rrze-icons/emblems/doctoral-cap.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/database-vcs-subversion.svg" alt="rrze-icons/emblems/database-vcs-subversion.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/database-mysql.svg" alt="rrze-icons/emblems/database-mysql.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/database-openldap.svg" alt="rrze-icons/emblems/database-openldap.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/page-all.svg" alt="rrze-icons/emblems/page-all.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/report.svg" alt="rrze-icons/emblems/report.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/network-cloud.svg" alt="rrze-icons/emblems/network-cloud.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/relay.svg" alt="rrze-icons/emblems/relay.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/template.svg" alt="rrze-icons/emblems/template.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/footnote-edit.svg" alt="rrze-icons/emblems/footnote-edit.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/ten-per-page.svg" alt="rrze-icons/emblems/ten-per-page.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/bridge-stone-delete.svg" alt="rrze-icons/emblems/bridge-stone-delete.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/bridge-stone.svg" alt="rrze-icons/emblems/bridge-stone.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/all-per-page.svg" alt="rrze-icons/emblems/all-per-page.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/movie-audio.svg" alt="rrze-icons/emblems/movie-audio.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/globe.svg" alt="rrze-icons/emblems/globe.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/table.svg" alt="rrze-icons/emblems/table.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/report-delete.svg" alt="rrze-icons/emblems/report-delete.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/inspector-hat.svg" alt="rrze-icons/emblems/inspector-hat.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/slide-audio.svg" alt="rrze-icons/emblems/slide-audio.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/directory-object-class.svg" alt="rrze-icons/emblems/directory-object-class.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/affiliation-abstract.svg" alt="rrze-icons/emblems/affiliation-abstract.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/email.svg" alt="rrze-icons/emblems/email.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/directory-schema.svg" alt="rrze-icons/emblems/directory-schema.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/entitlement.svg" alt="rrze-icons/emblems/entitlement.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/floppy-disc-green.svg" alt="rrze-icons/emblems/floppy-disc-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/directory-object.svg" alt="rrze-icons/emblems/directory-object.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/directory-syntax.svg" alt="rrze-icons/emblems/directory-syntax.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/media-film.svg" alt="rrze-icons/emblems/media-film.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/subversion-logo.svg" alt="rrze-icons/emblems/subversion-logo.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/firewall.svg" alt="rrze-icons/emblems/firewall.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/footnote.svg" alt="rrze-icons/emblems/footnote.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/id.svg" alt="rrze-icons/emblems/id.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/organizational-unit.svg" alt="rrze-icons/emblems/organizational-unit.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/structured-program-stay-abroad.svg" alt="rrze-icons/emblems/structured-program-stay-abroad.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/information.svg" alt="rrze-icons/emblems/information.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/lock.svg" alt="rrze-icons/emblems/lock.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/phone.svg" alt="rrze-icons/emblems/phone.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/directory-attribute.svg" alt="rrze-icons/emblems/directory-attribute.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/twenty-five-per-page.svg" alt="rrze-icons/emblems/twenty-five-per-page.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/wifi.svg" alt="rrze-icons/emblems/wifi.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/page-50.svg" alt="rrze-icons/emblems/page-50.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/organisational-unit-tree.svg" alt="rrze-icons/emblems/organisational-unit-tree.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/report-new.svg" alt="rrze-icons/emblems/report-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/rss-feed.svg" alt="rrze-icons/emblems/rss-feed.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/office-excel.svg" alt="rrze-icons/emblems/office-excel.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/geo-id.svg" alt="rrze-icons/emblems/geo-id.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/account-delete.svg" alt="rrze-icons/emblems/account-delete.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/database-postgres.svg" alt="rrze-icons/emblems/database-postgres.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/video-film.svg" alt="rrze-icons/emblems/video-film.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/footnote-new.svg" alt="rrze-icons/emblems/footnote-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/bridge-stone-new.svg" alt="rrze-icons/emblems/bridge-stone-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/directory.svg" alt="rrze-icons/emblems/directory.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/export.svg" alt="rrze-icons/emblems/export.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/task.svg" alt="rrze-icons/emblems/task.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/single-sign-on.svg" alt="rrze-icons/emblems/single-sign-on.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/at.svg" alt="rrze-icons/emblems/at.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/footnote-delete.svg" alt="rrze-icons/emblems/footnote-delete.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/report-edit.svg" alt="rrze-icons/emblems/report-edit.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/database-otrs.svg" alt="rrze-icons/emblems/database-otrs.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/affiliation.svg" alt="rrze-icons/emblems/affiliation.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/office-word.svg" alt="rrze-icons/emblems/office-word.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/tree-diagramm-delete.svg" alt="rrze-icons/emblems/tree-diagramm-delete.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/media-floppy-green.svg" alt="rrze-icons/emblems/media-floppy-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/mailbox.svg" alt="rrze-icons/emblems/mailbox.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/affirmation.svg" alt="rrze-icons/emblems/affirmation.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/slide.svg" alt="rrze-icons/emblems/slide.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/wide-area-network-connection.svg" alt="rrze-icons/emblems/wide-area-network-connection.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/tree-diagramm-new.svg" alt="rrze-icons/emblems/tree-diagramm-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/audio-itunes-u.svg" alt="rrze-icons/emblems/audio-itunes-u.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/peace-sign.svg" alt="rrze-icons/emblems/peace-sign.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/statistic.svg" alt="rrze-icons/emblems/statistic.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/database.svg" alt="rrze-icons/emblems/database.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/audio-itunes.svg" alt="rrze-icons/emblems/audio-itunes.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/webview.svg" alt="rrze-icons/emblems/webview.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/report-upload.svg" alt="rrze-icons/emblems/report-upload.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/tree-diagramm-move.svg" alt="rrze-icons/emblems/tree-diagramm-move.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/pen.svg" alt="rrze-icons/emblems/pen.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/wide-area-network-link.svg" alt="rrze-icons/emblems/wide-area-network-link.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/note.svg" alt="rrze-icons/emblems/note.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/fifty-per-page.svg" alt="rrze-icons/emblems/fifty-per-page.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/zipper.svg" alt="rrze-icons/emblems/zipper.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/account-edit.svg" alt="rrze-icons/emblems/account-edit.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/money.svg" alt="rrze-icons/emblems/money.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/folder.svg" alt="rrze-icons/emblems/folder.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/index.svg" alt="rrze-icons/emblems/index.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/promotion-data.svg" alt="rrze-icons/emblems/promotion-data.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/audio-visual-slide.svg" alt="rrze-icons/emblems/audio-visual-slide.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/tomcat.svg" alt="rrze-icons/emblems/tomcat.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></td><td width="400">:/emblems/tomcat.svg</td><td width="400">rrze-icons/emblems/tomcat.svg</td><td width="200">tomcat</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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/video-mov.svg" alt="rrze-icons/mime-types/video-mov.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/text-csv-text.svg" alt="rrze-icons/mime-types/text-csv-text.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/media-movie.svg" alt="rrze-icons/mime-types/media-movie.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/media-audio-itunes.svg" alt="rrze-icons/mime-types/media-audio-itunes.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/office-ms-word.svg" alt="rrze-icons/mime-types/office-ms-word.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/document-pdf.svg" alt="rrze-icons/mime-types/document-pdf.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/media-movie-audio.svg" alt="rrze-icons/mime-types/media-movie-audio.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/media-slide-audio.svg" alt="rrze-icons/mime-types/media-slide-audio.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/media-audio-itunes-u.svg" alt="rrze-icons/mime-types/media-audio-itunes-u.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/media-audio-visual-slide.svg" alt="rrze-icons/mime-types/media-audio-visual-slide.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/video-m4v.svg" alt="rrze-icons/mime-types/video-m4v.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/audio-mp4.svg" alt="rrze-icons/mime-types/audio-mp4.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/media-video-film.svg" alt="rrze-icons/mime-types/media-video-film.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/office-ms-excel.svg" alt="rrze-icons/mime-types/office-ms-excel.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/audio-mp3.svg" alt="rrze-icons/mime-types/audio-mp3.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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>
-</table>
-</body></html>
\ No newline at end of file
diff --git a/doc/source/index.rst b/doc/source/index.rst
index 223a7c8..213c697 100644
--- a/doc/source/index.rst
+++ b/doc/source/index.rst
@@ -10,11 +10,11 @@ Welcome to Taurus's |version| documentation!
 
 .. sidebar:: Latest news
 
-    2011-02-10
-        Taurus 2.0.0 released!
+    2011-03-23
+        Taurus 2.1.1 released!
 
-    2011-01-18:
-        Taurus 2.0.0 documentation published online
+    2011-03-22:
+        Taurus 2.1.0 released!
 
 
 Taurus is a python framework for both CLI and GUI tango applications. It is
diff --git a/doc/source/sphinxext/taurusextension.py b/doc/source/sphinxext/taurusextension.py
index 84eaaa7..cd7b993 100644
--- a/doc/source/sphinxext/taurusextension.py
+++ b/doc/source/sphinxext/taurusextension.py
@@ -34,7 +34,9 @@ def process_type(t, obj_type='class'):
     if t.count(' or '):
        i = t.index(' or ')
        return ' '.join(map(process_type, (t[:i],'or', t[i+4:])))
-    if not t.count('<') or not t.count('>'): return ':%s:`%s`' % (obj_type, t)
+    if not t.count('<') or not t.count('>'):
+        ret = ':%s:~`%s`' % (obj_type, t)
+        return ret
     
     #process a container template
     start, stop = t.index('<'), t.index('>')
diff --git a/doc/source/users/ui/arrayeditor.rst b/doc/source/users/ui/arrayeditor.rst
index b0fb731..0bd3c5c 100644
--- a/doc/source/users/ui/arrayeditor.rst
+++ b/doc/source/users/ui/arrayeditor.rst
@@ -1,9 +1,32 @@
+.. currentmodule:: taurus.qt.qtgui.plot
+
 .. _arrayeditor:
 
 =============
 Array Editor
 =============
 
-The ArrayEditor is a widget for graphically editing an spectrum.
+The :class:`ArrayEditor` is a widget for graphically editing a spectrum.
+
+.. figure:: /_static/taurusarrayeditor01.png
+  :align: center
+  
+It consists of two :ref:`plots <taurusplot_ui>` and a *control point area*. The plot
+on top shows the current and modified spectrum. The other plot shows
+the difference between the current and the modified spectrum. The Control point
+area shows details on the conrol points that have been defined.
+
+The spectrum can be modified by adding control points and moving them 
+along the vertical axis, either by setting the value in the controls area or by
+dragging them in the plots.
+
+Control points are added by double-clicking in a position of the plot or by
+using the `Add` button (which allows the user to define a regular grid of
+control points).
+
+The currently selected control point is highlighted both in the plots and in the
+controls area.
 
-(documentation to be written)
\ No newline at end of file
+The arrow buttons in the controls area will help in propagating the related
+value to the other control points to  the left or to the right of the selected
+one.
\ No newline at end of file
diff --git a/doc/source/users/ui/forms.rst b/doc/source/users/ui/forms.rst
index 9a2d5b7..faaa627 100644
--- a/doc/source/users/ui/forms.rst
+++ b/doc/source/users/ui/forms.rst
@@ -1,5 +1,223 @@
+.. currentmodule:: taurus.qt.qtgui.panel
+
 .. _forms:
 
-================
-Forms
-================
+=============================
+TaurusForm User's Interface
+=============================
+
+.. contents::
+
+The :class:`TaurusForm` widget is the standard way for Taurus applications to
+present a set of attribute and device readings and controls widgets with a form-
+like layout.
+
+.. figure:: /_static/forms02.png
+  :align: center
+
+For each item (attribute or device) represented in a TaurusForm, the following
+elements will be shown (vertically aligned with those of the other items along 5
+columns):
+
+#. *label text*. It shows the name or other identification of the item. 
+#. *read widget*. It shows the current value of the item. If the information cannot
+   be shown in a compact way, it may be a button that launches a separate dialog
+   which provides detailed information. The read widget may provide information 
+   on both the read value and the quality status of the attribute, typically 
+   using the :ref:`Taurus color convention <ui_colors>`. The read widget will 
+   extend over the second and third columns for those items that are not writable.
+#. *write widget* (only shown if the item allows writting). A widget for modifying 
+   the value of the item. If it cannot be done in a compact way, it may be a 
+   button that launches a separate dialog which provides detailed information. 
+#. *units text*. It shows the units associated to the item (it is not shown if no 
+   units are defined for this item).  
+#. *extra widget*. An extra space that may be used by some custom widgets 
+   (only shown if used).
+
+The precise widgets that are used by default for each item are determined by the
+type of attribute / class of device as well as by a custom mapping that is set
+at Taurus installation time.
+
+.. _standalonetaurusform:
+
+TaurusTrend as a stand-alone application
+-----------------------------------------
+
+You may also use TaurusForm as a stand-alone application for controlling some 
+attributes or devices from the control system. You can launch the stand-alone TaurusForm
+with the following command::
+
+    taurusform [options] [<model_list>]
+    
+Options::
+
+  -h, --help            show this help message and exit
+  --version             show program's version number and exit
+
+  Taurus Options:
+    Basic options present in any taurus application
+
+    --taurus-log-level=LEVEL
+                        taurus log level. Allowed values are (case
+                        insensitive): critical, error, warning/warn, info,
+                        debug, trace
+    --taurus-polling-period=MILLISEC
+                        taurus global polling period in milliseconds
+    --taurus-serialization-mode=SERIAL
+                        taurus serialization mode. Allowed values are (case
+                        insensitive): serial, concurrent (default)
+    --tango-host=TANGO_HOST
+                        Tango host name
+
+The model list is optional and is a space-separated list of models for
+TaurusForm. Valid models are: attribute names, device names or alias. See
+:class:`TaurusForm` API for more information about valid models
+
+The widgets used for different types of attributes and devices
+---------------------------------------------------------------
+
+By default, TaurusForm tries to use the most appropriate Taurus widget for
+representing its attributes and/or widgets.
+
+.. figure:: /_static/forms03.png
+  :align: center
+  
+  A taurusform created with the following command `taurusform sys/tg_test/1
+  sys/tg_test/1/state sys/tg_test/1/status sys/tg_test/1/string_scalar
+  sys/tg_test/1/boolean_scalar sys/tg_test/1/boolean_spectrum
+  sys/tg_test/1/float_scalar sys/tg_test/1/float_spectrum
+  sys/tg_test/1/float_image`
+
+
+For the attributes, TaurusForm checks the type of attribute (whether it is an
+scalar or an array, whether it is a number or a string or a boolean, whether it
+is writable or read-only, etc.). For certain attributes, more than one widget
+may be adequate, and the form allows the user to switch between them (See the
+`Changing the contents of a form`_ section).
+
+For the devices, the class of the device is searched in the map defined in
+`<taurus>/TaurusCustomSettings.py` and the given widget is used if there is a
+match. Otherwise, the default device representation is used, which shows a
+button that launches an :class:`AttributeForm` showing *all* the attributes for
+that device.
+
+For an example on how a custom widget can be used for a certain type of device,
+see the :class:`taurus.qt.qtgui.extra_pool.PoolChannelTV` or
+:class:`taurus.qt.qtgui.extra_pool.PoolMotorTV` widgets.
+
+
+Changing the contents of a form
+-------------------------------
+
+If the application using the form allows it, you can modify both *what* is shown
+and *how* it is shown in the form. 
+
+- You can alter *what* is shown in two ways:
+
+  - right-clicking in the form and selecting the `Modify contents` option in the
+    context menu. A :ref:`TauruModelChooser <modelchooser>` widget will let you
+    modify the list of taurus models being represented by the form.
+  - Dropping models that you drag from another taurus widget (typically another
+    TaurusForm, or a :ref:`TauruModelChooser <modelchooser>`). See the `Drag and
+    Drop support`_ section for more details.
+  
+- Regarding *how* it is shown, you can change which widget is used for
+  displaying the read value or the write value of a given item. This is done by
+  right-clicking on the label of the item and selecting the `change Read Widget`
+  (or `change write widget`) option. As before, this will only be possible if user
+  modifications are allowed for the form.
+
+.. tip:: You can use the `Modify contents` option to re-order what is shown.
+   
+Drag and Drop support
+---------------------
+
+TaurusForm supports drag&drop of models for its items. Essentially each item
+represented in a form is associated to a :ref:`Taurus model <model-concept>`. By
+dragging the label of a given item in a form, what happens behind the scenes is
+that the *model* is copied. Many Taurus widgets can be instructed to accept drops
+of models (e.g. :class:`TaurusPlot`, :class:`TaurusTrend`,
+:class:`TaurusForm`,...) and alter their models according to the new model
+passed.
+
+When a TaurusForm receives one or more models from a drop, it appends them to
+its current list of displayed models and shows them.
+
+.. tip:: If you accidentally dropped a model and want to remove the new item,
+   just use the `Modify contents` option from the form's context menu.
+   
+Interacting with the control system: writing to attributes
+----------------------------------------------------------
+
+Taurus attributes can be read-only or allow writing. Those attributes that are
+writable have two values: the *read value* and the *write value*. The read value
+is displayed by the *read widget* in the second column of the TaurusForm (just
+right of the label). The *write widget*, in the third column of the TaurusForm
+allows you to modify the write value.
+
+Note that the read value and the write value of an attribute are not necessarily
+equal. The write value is a "set point", or "desired value" while the read value
+gives the actual value as read by the control system (for example, in a power
+supply device, the read value of its voltage attribute oscillate around the write value
+due to ripple).
+
+Since writing wrong values may be dangerous for some equipment, the default
+behaviour of write widgets is not to apply new values directly as you type the
+value or move a dial. Instead, the corresponding label of the item becomes
+highlighted with a blue frame, indicating that the write value has been changed
+(we say that the item has *pending operations*) and that these changes can be
+applied. Some write widgets give extra feedback apart from that of the label.
+
+When a widget has pending operations, you can check exactly what is the pending
+operation by consulting its tooltip.
+
+.. figure:: /_static/forms-pendingops01.png
+  :align: center
+  
+  Example of pending operation notification: the write value of the array_scalar
+  attribute has been changed but it is not yet applied. The label for this item
+  shows a blue frame, the write widget shows bold blue text and the tooltip
+  gives extra information.
+
+Pending operations in a form can be applied either individually for each item or
+all at once:
+ 
+- The way for applying changes for a single item may depend on the write widget
+  involved, but typically (it is the case for all default widgets) it is done by
+  pressing the `Enter` key on the write widget (see also the `Forced apply`_
+  section).
+
+- For applying all pending operations of a whole form at once, you can click on
+  the `Apply` button of the form (if available).
+
+If the form provides buttons, the `Reset` button will discard all pending
+operations.
+
+.. _forcedapply:
+
+Forced apply
+'''''''''''''
+
+By default, if a write value has not changed, there will be no pending
+operations and therefore the value cannot be re-applied. Some times, however, it
+may be interesting to force another write of the same value (e.g. a certain
+hardware device needs an extra "push" to reach the desired value). This can be
+done by pressing `CTRL+Enter` (instead of just `Enter`) on the write widget.
+
+External changes of displayed attributes
+''''''''''''''''''''''''''''''''''''''''''
+
+When the read value of an attribute is updated in the control system, the read
+widget for that attribute will reflect the new value (depending on the
+configuration of the control system, a certain refresh period may be waited).
+
+When the write value of an attribute is updated in the control system (a certain
+attribute may be accessed simultaneously from different client aplications or
+even from different parts of the same application), the item representing that
+attribute will be notified, but the value displayed by the write widget will not
+be changed (instead, the item will show that there is a pending operation). In
+this way, concurrent editions will not interfere with your own editions, but at
+the same time you will be aware of them.
+
+.. tip:: Remember that you can check the cause of a pending operation by
+         consulting the write widget tooltip.
\ No newline at end of file
diff --git a/doc/source/users/ui/index.rst b/doc/source/users/ui/index.rst
index 91b42fe..8e87f7b 100644
--- a/doc/source/users/ui/index.rst
+++ b/doc/source/users/ui/index.rst
@@ -17,6 +17,8 @@ User's Interface
     Images <taurusimage>
     Array Editor <arrayeditor>
     Synoptics <synoptics>
+    Macros <macros/index>
+    TaurusGui <taurusgui>
     
 
 This section explains some features that are common to most applications built
diff --git a/doc/source/users/ui/macros/index.rst b/doc/source/users/ui/macros/index.rst
new file mode 100644
index 0000000..78305ec
--- /dev/null
+++ b/doc/source/users/ui/macros/index.rst
@@ -0,0 +1,11 @@
+.. _users-interface-macros:
+
+=====================
+Macro related widgets
+=====================
+
+.. toctree::
+    :maxdepth: 3
+   
+    MacroExecutor <macroexecutor>
+    Sequencer <sequencer>
\ No newline at end of file
diff --git a/doc/source/users/ui/macros/macroexecutor.rst b/doc/source/users/ui/macros/macroexecutor.rst
new file mode 100644
index 0000000..57a6067
--- /dev/null
+++ b/doc/source/users/ui/macros/macroexecutor.rst
@@ -0,0 +1,152 @@
+.. _macroexecutor_ui:
+
+==========================================
+MacroExecutor User's Interface
+==========================================
+
+
+.. contents::
+
+
+*MacroExecutor* provides an user-friendly graphical interface to macro execution.
+It is divided into 3 main areas: `actions bar`, `parameters editor` and `favourites list`. 
+Their functionalities are supported by `Spock command line` and `macro progress bar`.
+User has full control over macros thanks to action buttons: Start(Resume), Stop, Pause located in `actions bar`     
+Graphical `parameters editor` provides a clear way to set and modify macro execution settings (parameters).
+Macros which are more frequently used can be permanently stored in `favourites list`. 
+Once macro was started Door's state led and `macro progress bar` informs user about its status. 
+Current macro settings (parameters) are translated to spock syntax, and represented in non editable
+`spock command line`.
+
+.. figure:: /_static/macros/macroexecutor01.png
+  :align: center
+
+
+.. _macroexecutor_stand-alone:
+
+
+MacroExecutor as a stand-alone application
+------------------------------------------
+
+You may also use *MacroExcutor* as a stand-alone application. In this case it appears embedded
+in window and some extra functionalities are provided. 
+You can launch the stand-alone *MacroExecutor* with the following command::
+
+    macroexecutor [options] [<macro_executor_dev_name> <door_dev_name>]
+	
+Options::
+ 
+  --taurus-log-level=LEVEL
+                        taurus log level. Allowed values are (case
+                        insensitive): critical, error, warning/warn, info,
+                        debug, trace
+                        
+  --taurus-polling-period=MILLISEC
+                        taurus global polling period in milliseconds
+                        
+  --taurus-serialization-mode=SERIAL
+                        taurus serialization mode. Allowed values are (case
+                        insensitive): serial, concurrent (default)
+  
+  --tango-host=TANGO_HOST
+                        Tango host name
+
+    
+The model list is optional and is a space-separated list of two device names: macro server and door.
+If not provided at the application startup, models can be later on changed in configuration dialog.   
+   
+Extra functionalities:
+
+- Changing macro configuration
+
+.. todo:: 
+	This chapter is not ready... Sorry for inconvenience.
+	
+- Configuring custom editors
+ 
+.. todo:: 
+	This chapter is not ready... Sorry for inconvenience.
+
+	
+.. _editing_macro_parameters:
+
+Editing macro parameters
+------------------------
+
+.. _editing_macro_parameters_standard:
+
+Using standard editor
+'''''''''''''''''''''
+
+If no custom parameter editor is assigned to macro, default editor is used to configure execution settings (parameters).
+Parameters are represented in form of tree (with hidden root node) - every parameter is a separate branch with two columns: 
+parameter name and parameter value.
+Editor is populated with default values of parameters, if this in not a case 'None' values are used. (If macro execution settings 
+were restored e.g. from favourites list, editor is populated with stored values). Values become editable either by double-clicking on them, 
+or by pressing F2 button when value is selected. This action opens default parameter editor (combobox with predefined values, spin box etc.). 
+
+In case of macros with single parameters only, tree has only a one level branch, and then tree representation looks more like a list 
+(because of hidden root node)
+
+.. figure:: /_static/macros/macroparameterseditor01.png
+  :align: center
+
+In case of macros which contain repeat parameters, concept of tree is more visible.  
+ 
+.. figure:: /_static/macros/macroparameterseditor02.png
+  :align: center
+  
+- adding new parameter repetition
+
+First select parameter node and if its maximum number of repetition is not exceeded, button with '+' sign appears enabled. 
+After pressing this button child branch with new repetition appears in tree editor.   
+
+.. figure:: /_static/macros/macroparameterseditor03.png
+  :align: center
+  
+- modifying repetition order
+
+First select repetition node (with #<number> text), and buttons with arrows becomes enable (if it is feasible to change order)
+
+.. figure:: /_static/macros/macroparameterseditor04.png
+  :align: center
+
+- removing parameter repetition
+
+First select repetition node (with #<number> text), and if it's minimum number of repetition is not reached, button with '-' sign appears enabled. 
+After pressing this button child branch disappears from tree editor. (see previous picture)
+
+.. figure:: /_static/macros/macroparameterseditor05.png
+  :align: center
+
+.. _editing_macro_parameters_custom:
+
+Using custom editors
+''''''''''''''''''''
+
+.. todo:: 
+	This chapter is not ready... Sorry for inconvenince. 
+
+.. _editing_favourites_list:
+
+Editing favourites list
+-----------------------
+  
+Once macro parameters are configured they can be easily stored in favourites list for later reuse.   
+
+- adding a favourite 
+
+Clicking in Add to favourites button (the one with yellow star), adds a new entry in favourite list, 
+with current macro and its current settings.
+
+- restoring a favourite
+
+To restore macro from favourites list just select it in the list and macro parameters editor will immediately populate with stored settings.
+
+- modifying favouites list
+
+First select favourite macro and buttons with arrows becomes enable (if it is feasible to change order)
+
+- removing a favourite
+
+First select favourite macro, button with '-' sign appears enabled. After pressing this button, previously selected macro disappears from the list.
\ No newline at end of file
diff --git a/doc/source/users/ui/macros/sequencer.rst b/doc/source/users/ui/macros/sequencer.rst
new file mode 100644
index 0000000..6eca58d
--- /dev/null
+++ b/doc/source/users/ui/macros/sequencer.rst
@@ -0,0 +1,123 @@
+.. _sequencer_ui:
+
+==========================================
+Sequencer User's Interface
+==========================================
+
+
+.. contents::
+
+
+`Sequencer` provides an user-friendly interface to compose and execute sequences of macros. Sequence of macros allows execution 
+of ordered set of macros with just one trigger. It also allows using a concept of hooks (macros attached and executed in defined places of other macros).
+It is divided into 3 main areas: `actions bar`, `sequence editor` and `parameters editor`.
+`Sequence editor` allows you modifying sequences in many ways: appending new macros, changing macros locations and removing macros. 
+Graphical `parameters editor` (standard/custom) provides a clear way to set/modify macro execution settings(parameters). 
+Once sequence of macros is in execution phase, `Sequencer` informs user about its state with Door's state led and macros progress bars. 
+User has full control over sequence, with action buttons: Start, Stop, Pause, Resume. 
+If desirable, sequences can be permanently stored into a file and later on restored from there. 
+This functionality is provided thanks to action buttons: Save and Open a sequence.
+
+.. figure:: /_static/macros/sequencer01.png
+  :align: center
+
+
+.. _sequencer_stand-alone:
+
+Sequencer as a stand-alone application
+--------------------------------------
+
+You may also use *Sequencer* as a stand-alone application. In this case it appears embedded
+in window and some extra functionalities are provided.  
+You can launch the stand-alone *Sequencer* with the following command::
+
+    sequencer [options] [<macro_executor_dev_name> <door_dev_name>]
+	
+Options::
+ 
+  --taurus-log-level=LEVEL
+                        taurus log level. Allowed values are (case
+                        insensitive): critical, error, warning/warn, info,
+                        debug, trace
+                        
+  --taurus-polling-period=MILLISEC
+                        taurus global polling period in milliseconds
+                        
+  --taurus-serialization-mode=SERIAL
+                        taurus serialization mode. Allowed values are (case
+                        insensitive): serial, concurrent (default)
+  
+  --tango-host=TANGO_HOST
+                        Tango host name
+
+    
+The model list is optional and is a space-separated list of two device names: macro server and door.
+If not provided at the application startup, device names can be later on selected from Macro Configuration Dialog.   
+   
+Extra functionalities:
+
+- MacroConfigurationDialog
+
+.. todo:: 
+		This chapter in not ready... Sorry for inconvenience. 
+		 
+- CustomEditorsPathDialog
+ 
+.. todo:: 
+		This chapter in not ready... Sorry for inconvenience.
+		
+.. _editing_sequence:
+
+Editing sequence
+----------------
+
+Sequence is represented as a flat list of ordered macros, in this view each macro is represented as a new line with 4 columns: 
+Macro (macro name), Parameters (comma separated parameter values), Progress (macro progress bar) and Pause 
+(pause point before macro execution - not implemented yet). Macros which contain hooks, expand with branched macros. 
+Macro parameters values can be edited from `parameters editor`, to do so select one macro in sequence editor by clicking on it. 
+Selected macro becomes highlighted, and `parameters editor` populate with its current parameters values. 
+
+.. figure:: /_static/macros/sequenceeditor01.png
+  :align: center
+
+- adding a new macro 
+
+First select macro from macro combo box, and when you are sure to add it to the sequence, press '+' button. 
+To add macro as a hook of other macro, before adding it, please select its parent macro in the sequence, and then press '+' button.
+If no macro was selected as a parent, macro will be automatically appended at the end of the list.    
+   
+.. figure:: /_static/macros/sequenceeditor02.png
+  :align: center  
+  
+- reorganizing sequence
+
+Macros which are already part of a sequence, can be freely moved around, either in execution order or in hook place (if new macro accepts hooks).
+To move macro first select it in the sequence by single clicking on it (it will become highlighted). Then a set of buttons with arrows 
+become enabled. Clicking on them will cause selected macro changin its position in the sequence (either vertically - execution order or horizontal
+parent macro - hook macro relationship)
+
+.. figure:: /_static/macros/sequenceeditor03.png
+  :align: center
+  
+- remove macro
+
+Macros which are already part of a sequence, can be freely removed from it. To do so first select macro in a sequence by 
+single clicking on it (it will become highlighted). Then button with '-' becomes enabled. Clicking on it removes selected macro. 
+
+.. figure:: /_static/macros/sequenceeditor04.png
+  :align: center  
+
+- configuring hook execution place
+
+If macro is embedded as a hook in parent macro, please follow these instructions to configure its hook execution place. 
+First select macro in a sequence by single clicking on it (it will become highlighted). 
+Then using right mouse button open context menu, go to 'Hook places' sub-menu and select hook places which interest you 
+(you can select more than one). 
+   
+.. figure:: /_static/macros/sequenceeditor05_raw.png
+  :align: center 
+
+	
+Editing macro parameters
+------------------------
+To obtain information about editing macro parameters, please refer to the following link :ref:`Editing macro parameters <editing_macro_parameters>` 
\ No newline at end of file
diff --git a/doc/source/users/ui/plot.rst b/doc/source/users/ui/plot.rst
index f7977c4..84292ec 100644
--- a/doc/source/users/ui/plot.rst
+++ b/doc/source/users/ui/plot.rst
@@ -21,8 +21,8 @@ are plotted. It may also show a legend.
 But the :class:`TaurusPlot` does a lot more than just showing a plot. It allows
 the user to interact with the plot in many ways as described below.
 
-    *The features described here are available* by default *in all tau widgets.
-    Note that some GUIs may choose to disable some of these features*
+.. note:: The features described here are available *by default* in all TaurusPlot 
+          widgets, but certain GUIs may choose to disable some of these features.
 
 .. _standalonetaurusplot:
 
@@ -33,7 +33,7 @@ You may also use :class:`TaurusPlot` as a stand-alone application for displaying
 attributes from the control system or for plotting a function. You can launch the
 stand-alone :class:`TaurusPlot` with the following command::
 
-    taurustrend [options] [<model_list>]
+    taurusplot [options] [<model_list>]
 	
 Options::
 
@@ -47,16 +47,25 @@ Options::
   --export=EXPORT_FILE, --export-file=EXPORT_FILE
                         use the given file to as output instead of showing the
                         plot
-  --taurus-log-level=LEVEL
+  --version             show program's version number and exit
+
+  Taurus Options:
+    Basic options present in any taurus application
+
+    --taurus-log-level=LEVEL
                         taurus log level. Allowed values are (case
                         insensitive): critical, error, warning/warn, info,
                         debug, trace
-  --taurus-polling-period=MILLISEC
+    --taurus-polling-period=MILLISEC
                         taurus global polling period in milliseconds
-  --tango-host=TANGO_HOST
+    --taurus-serialization-mode=SERIAL
+                        taurus serialization mode. Allowed values are (case
+                        insensitive): serial, concurrent (default)
+    --tango-host=TANGO_HOST
                         Tango host name
 
 
+
 The <model_list> is a space-separated list of models for :class:`TaurusPlot`. Valid models are:
 SPECTRUM attribute names or alias, and `Xattrname|Yattrname` constructions for indicating X-Y scatter plots.
 See :class:`TaurusPlot` API for more information about valid models
@@ -226,7 +235,7 @@ You want a figure for a logbook?
 
 Or you want to store the plotted values in a file?
 
-Then you will like the Export capabilities of TauPlot.
+Then you will like the Export capabilities of TaurusPlot.
 
 You can access them from the `TaurusPlot context menu`_ and for the moment they
 allow you to:
diff --git a/doc/source/users/ui/synoptics.rst b/doc/source/users/ui/synoptics.rst
index 0db4d37..91a6fe5 100644
--- a/doc/source/users/ui/synoptics.rst
+++ b/doc/source/users/ui/synoptics.rst
@@ -3,3 +3,15 @@
 ==========
 Synoptics
 ==========
+
+Synoptic widgets provide a graphical interface to control equipment. They may
+display some graphics elements (realistic representations or schematic ones)
+some of which may allow interactions (such as accept mouse clicks) or provide
+updated values and changing colors.
+
+.. figure:: /_static/synoptic01.png
+  :align: center
+  
+  Example of a synoptic representing a beam line. Some active elements are
+  marked with red squares and one has been selected which is shown by a blue
+  ellipse.
\ No newline at end of file
diff --git a/doc/source/users/ui/taurusgui.rst b/doc/source/users/ui/taurusgui.rst
new file mode 100644
index 0000000..960c885
--- /dev/null
+++ b/doc/source/users/ui/taurusgui.rst
@@ -0,0 +1,320 @@
+.. currentmodule:: taurus.qt.qtgui.taurusgui
+
+.. _taurusgui_ui:
+
+=============================
+TaurusGUI User's Interface
+=============================
+
+.. contents::
+
+
+TaurusGui is not a GUI in itself but a framework for building Taurus graphical
+user interfaces in an efficient way (but not all Taurus-based applications are
+necessarily TaurusGui-based).
+
+A specific TaurusGui-based application is defined in a "configuration directory"
+which is read by :class:`TaurusGui` to construct the specific GUI.
+
+From the user perspective the only important thing is that, while different
+TaurusGui-based applications may be very different, they all share some features
+and have a common look-and-feel. This document describes these common features.
+For documentation on specific aspects of a given TaurusGui-based application,
+please refer to the documentation of that application.
+
+.. figure:: /_static/taurusgui01.png
+  :align: center
+  :width: 100%
+  
+  An example of a Beamline GUI based on TaurusGui
+
+Launching TaurusGUI
+-------------------
+
+Normally you will be launching a specific GUI built on top of TaurusGUI (as
+opposed to launching TaurusGUI directly), so you should refer to the specific
+instructions for launching that GUI. 
+
+Still, you may want to launch TaurusGui directly for debugging an specific
+application or for creating a new GUI from scratch. For this, use the following
+command::
+
+    taurusgui [options]
+    
+Options::
+
+  -h, --help            show this help message and exit
+  --config-dir=CONFIG_DIR
+                        use the given configuration directory for
+                        initialization
+  --new-gui             launch a wizard for creating a new TaurusGUI
+                        application
+  --version             show program's version number and exit
+
+  Taurus Options:
+    Basic options present in any taurus application
+
+    --taurus-log-level=LEVEL
+                        taurus log level. Allowed values are (case
+                        insensitive): critical, error, warning/warn, info,
+                        debug, trace
+    --taurus-polling-period=MILLISEC
+                        taurus global polling period in milliseconds
+    --taurus-serialization-mode=SERIAL
+                        taurus serialization mode. Allowed values are (case
+                        insensitive): serial, concurrent (default)
+    --tango-host=TANGO_HOST
+                        Tango host name
+   
+   
+                        
+.. note::
+  for backwards compatibility:
+    taurusgui CONFIG_DIR
+    
+  is equivalent to:
+    taurusgui --config-dir=CONFIG_DIR
+
+
+General structure of a TaurusGUI application
+--------------------------------------------
+
+TaurusGui-based applications consist in a main window containing a number of
+*panels*. 
+
+Each panel contains a widget (e.g., a :ref:`form <forms>`, a :ref:`plot
+<taurusplot_ui>`, a :ref:`synoptic <synopticpanels>`...) and is largely
+independent on the rest of the panels.
+
+You can :ref:`re-arrange the panels <rearrangingpanels>` by moving and resizing them
+in the window, or hide/show them or leave some of them floating as independent
+dialogs. You can even :ref:`add new panels <panelcreation>` to the application
+"on-the-fly", selecting them from a catalog of available widgets.
+
+This is because a key feature of TaurusGui applications is that you can adapt
+them to your needs. But since your needs are not always the same, the TaurusGui-
+based applications allow you to save the panel arrangement and other user
+modifiable choices as a :ref:`perspective <perspectives>`. You can then easily
+switch to different application configurations.
+
+Another characteristic element of Taurus-Gui based applications is the 
+*Applets* area on the right side of the main window. This area is
+typically populated with small widgets providing quick access to some relevant
+information or control. It also contains the the logo of the institute (or some
+other general logo) and the logo of the application.
+
+Other common components of TaurusGui-based applications (although not
+necessarily present) are:
+
+- `Synoptic panels`_
+- :ref:`Macro Execution panels <macrostuff>`
+- Help browser
+
+.. _rearrangingpanels:
+
+Re-arranging panels (moving, resizing, hiding,...) 
+--------------------------------------------------
+
+.. note:: In order to prevent accidental rearranging of panels, the view can be
+          locked, which will disable the drag and drop of panels. You can
+          lock/unlock the view from the `View Menu`
+
+Panels can be moved around by dragging them from their title bar. When dropping
+a panel, you can choose whether to push other panels to make room for the new
+one, or to drop it on top of an existing panel (this will "tabify" the panels)
+or to leave it floating outside of the main window.
+
+You can also modify the dimensions of a panel without changing its position:
+just drag the boundaries between panels.
+
+If the view has not been locked, the title bar of each panel contains 2 buttons:
+one for switching from floating to docked state and another for hiding the
+panel. Hidden panels are not shown, but are still available in the application.
+You can show them again by using the View->Panels menu.
+
+Also, some panels may be connected to a synoptic panel and will be shown (if
+hidden) when selecting a certain element in the synoptic. Refer to the `Synoptic
+Panels`_ section for more details.
+
+.. tip:: If, for some reason, you changed the panels too much and would like to
+         revert the changes, you can always load a previously saved
+         :ref:`perspective <perspectives>`.
+
+.. _panelcreation:
+
+Creating custom panels
+-----------------------
+
+Typically, a TaurusGui-based application will come out-of-the-box with one or
+more pre-defined panels providing the application functionality. But you may
+want to extend the application by adding custom panels to provide more features
+(e.g., to add an extra plot panel, or a new form).
+
+You can add a new panel by clicking in the "New Panel" button of the main tool
+bar (or selecting `View->Panel->New Panel...`). This will open a dialog offering
+a catalog of different panel types and options for your new panel. Once
+accepted, the new panel will appear floating, ready to be docked to the main window.
+
+.. figure:: /_static/taurusgui-newpanel01.png
+  :align: center
+  
+  The New Panel dialog 
+  
+.. tip:: A common use case is creating a new form panel (empty) and then fill it by
+         dropping elements from other existing forms in order to
+         group together controls that are scattered over several panels
+         
+When you close the application (or when you save a :ref:`perspective
+<perspectives>`), a dialog will be shown if you have created any custom panels.
+In this dialog you can choose which of the custom panels you want to keep for
+future use and which are only meant for the current session.
+
+.. figure:: /_static/taurusgui-permanentpanels01.png
+  :align: center
+  
+  The dialog for selection which custom panels are to be stored permanently
+  
+You can also open this dialog from the `Tools->Select panel Configuration` option.
+
+.. tip:: if you want to remove a custom panel from an application, just hide it
+         and use the `Select panel Configuration` option for making it
+         "temporary" so that it is not stored for future sessions.
+ 
+.. _perspectives:
+
+Perspectives
+------------
+
+Different tasks often require different application layouts and different
+control widgets to be at hand (e.g., casual use VS expert use, or equipment
+calibration VS equipment operation). TaurusGui-based applications typically
+provide a set of pre-defined *perspectives* which are just configurations that
+can be loaded at any moment to set a given panel arrangement suited for a given
+task.
+
+All TaurusGui based applications provide a Perspectives Toolbar (if it is not
+shown, you can enable it from `View->Toolbars`, or you can access its
+functionalities from the `View` menu).
+
+.. figure:: /_static/perspectives-toolbar01.png
+  :align: center
+  
+  The perspectives toolbar. The button on the left is a drop-down that
+  shows all available perspectives. The button on the right allows you to save
+  the current arrangement as a perspective.
+
+Switching to another perspective can be done using the `Load perspectives` drop-
+down button in the perspectives toolbar (or using the `View->Load perspective`
+option).
+
+Apart from the pre-defined perspectives, you can always alter the panel re-
+arrange panels and store your preferred arrangement as a perspective using the
+`Save perspective` button in the perspectives toolbar (or using the `View->Save
+perspective` option).
+
+.. tip:: If you want to backup your current perspectives, or you want to use
+  some perspectives you created in one computer to another computer (or another
+  user of the same computer) you can do so by using the `File->Export Settings`
+  option. Similarly, use the `File->Import Settings` option to update the application
+  perspectives with those contained in the imported file.
+  
+.. _synopticpanels:
+
+Synoptic panels
+---------------
+
+An special type of panel present in some TaurusGui-based applications is the
+Synoptics. Synoptics panels are typically used for providing a visual
+representation of the hardware that is controlled by the GUI. Some elements or
+areas of the synoptic panel may be *active*, meaning that they can be selected
+with the mouse. 
+
+A default feature of the TaurusGUI framework is that active elements of synoptic
+panels whose name matches that of an existing panel of the application will
+cause that panel to be shown (and conversely, if the panel is selected, the
+element in the synoptic will be highlighted). This is very useful because
+synoptic panels can be used as a sort of quick index or browser to navigate in
+panel-crowded applications.
+
+Also note that you can find a button in the application toolbar for
+showing/hiding each synoptic panel.
+
+
+.. _macrostuff:
+
+Sardana integration (Macroserver & Pool)
+----------------------------------------
+
+Macro execution panels
+''''''''''''''''''''''''
+
+Many TaurusGui-based applications are used to interact with a Sardana `Pool` and
+`MacroServer` in order to run macros (e.g. scans). In these cases several macro-
+related panels will be available:
+
+- `Macros`, :ref:`a macro executor <macroexecutor_ui>` widget. See :ref:`this <sequencer_ui>` for further information.
+- `Sequences`, :ref:`a macro sequencer <sequencer_ui>` widget. See :ref:`this <sequencer_ui>` for further information.
+- `1D Scans`, :ref:`a trend <trend_ui>` that plots the results of scan macro executions.
+- `MacroDescription`, a text panel which provides documentation on the selected macro.
+- `DoorOutput`, a text panel that logs the output of macro executions (similar to what 
+  you would see if launching the macro in a `spock` console)
+- `DoorDebug`, a text panel that logs the debug messages of macro executions.
+- `DoorResult`, a text panel that logs the return value of the macro executions.
+ 
+.. note:: You can run `taurusgui macrogui` for seeing an example of a TaurusGUI-
+          based application that provides the aforementioned panels
+
+.. figure:: /_static/macrogui01.png
+  :align: center
+  :width: 80%
+  
+  Macro-related panels (taken from the macrogui example that can be launched
+  with `taurusgui macrogui`)
+  
+In most specific GUIs the macroserver and door name to use are pre-configured and
+the user does not need to change them. Sometimes though, you may want to alter it.
+You can do so by using the `Tools->Macro execution configuration` option.
+
+Automatic creation of Instrument panels from Pool info
+''''''''''''''''''''''''''''''''''''''''''''''''''''''
+
+Some TaurusGui-based GUIs may also use information  provided by the Pool Device
+Server about the Control System to automatically create :ref:`TaurusForm
+<forms>` panels containing all the controls related to the various instruments
+to be controlled by the GUI. An important characteristic is that, since these
+so-called *instrument panels* are created dynamically when launching the
+application, their number and/or contents may vary ,reflecting changes in the
+pool configuration.
+
+.. _taurusguiexamples:
+
+Examples of TaurusGui based applications
+----------------------------------------
+
+Taurus includes examples of TaurusGUI-based applications for demonstration purposes.
+
+.. list-table:: Examples of Taurus-GUI based applications
+   :header-rows: 1
+
+   * - GUI name
+     - launch command
+     - Comment
+   * - example01
+     - taurusgui example01
+     - Included in Taurus (<taurus>/qt/qtgui/taurusgui/conf/tgconf_example01)
+   * - Macrogui
+     - taurusgui macrogui
+     - Included in Taurus (<taurus>/qt/qtgui/taurusgui/conf/tgconf_macrogui)
+   * - Alba's beam lines control GUIs
+     - ctblxx (xx is the beamline number)
+     - Internal ALBA development
+
+
+Known Issues
+------------
+
+Cannot drop a panel (it stays floating)
+''''''''''''''''''''''''''''''''''''''''''
+This typically occurs because there is no enought room to acomodate the panel
+width or height in any of the available "slots". Try to make room by hiding some
+other panel, or tabifying other panels together, or increasing the main window size. 
diff --git a/doc/source/users/ui/taurusimage.rst b/doc/source/users/ui/taurusimage.rst
index 047c92b..2acfbe4 100644
--- a/doc/source/users/ui/taurusimage.rst
+++ b/doc/source/users/ui/taurusimage.rst
@@ -1,6 +1,67 @@
+.. currentmodule:: taurus.qt.qtgui.extra_guiqwt
+
 .. _taurusimage:
 
 
 ==================
 Image's interface
-==================
\ No newline at end of file
+==================
+
+.. contents::
+
+The :class:`TaurusImageDialog` widget is a Taurus Widget for displaying
+**image** attributes from the control system. A contour plot 
+is created from the values of the image attribute.
+
+.. figure:: /_static/taurusimage01.png
+  :align: center
+  
+  A TaurusImage widget displaying the `sys/tg_test/1/long_image_ro` attribute
+ 
+Many tools may be available, such as:
+
+- zooming and panning
+- X/Y cross sections
+- Annotation tools (for creating labels, shapes,...)
+- add/delete images 
+- ...
+
+.. note:: The :class:`TaurusImageDialog` widget is provided by the 
+          :mod:`taurus.qt.qtgui.extra_guiqwt` module which depends on the 
+          :mod:`guiqwt` module being installed. If guiqwt is not installed, 
+          the image widget will not be available.
+
+.. _standalonetaurusimage:
+
+TaurusImageDialog as a stand-alone application
+----------------------------------------------
+
+You may also use TaurusImageDialog as a stand-alone application for showing image
+attributes from the control system. You can launch the stand-alone Taurus Image
+with the following command::
+
+    taurusimage [options] <model>
+	
+Options::
+
+  -h, --help            show this help message and exit
+  --demo                show a demo of the widget
+  --version             show program's version number and exit
+
+  Taurus Options:
+    Basic options present in any taurus application
+
+    --taurus-log-level=LEVEL
+                        taurus log level. Allowed values are (case
+                        insensitive): critical, error, warning/warn, info,
+                        debug, trace
+    --taurus-polling-period=MILLISEC
+                        taurus global polling period in milliseconds
+    --taurus-serialization-mode=SERIAL
+                        taurus serialization mode. Allowed values are (case
+                        insensitive): serial, concurrent (default)
+    --tango-host=TANGO_HOST
+                        Tango host name
+
+    
+The model is the name of a taurus image attribute 
\ No newline at end of file
diff --git a/doc/source/users/ui/trend.rst b/doc/source/users/ui/trend.rst
index 562ca75..4d42f04 100644
--- a/doc/source/users/ui/trend.rst
+++ b/doc/source/users/ui/trend.rst
@@ -151,6 +151,39 @@ you may experience performance issues if you change the scale to include  large
 time range. For this reason a warning dialog may be shown when you try to access
 too much archived data.  
 
+Polling buffer
+--------------
+
+The Tango control system provides a buffer of the last values read for an attribute. 
+This can be useful sometimes for performance reasons. The Polling Buffer support in 
+TaurusTrend can be enabled in the :ref:`Context Menu <taurusplotcontextmenu>`.
+
+Forced read of attributes
+-------------------------
+
+Some attributes of the control system may be set to only send events when their
+value changes. In the case of TaurusTrend, this behaviour causes that attributes
+that do not change often, do not get new points in the trend and thus may seem
+to have been "lost". To avoid this issue, you can instruct the TaurusTrend to
+periodically force re-read the attributes being displayed. You can enable this
+feature (and set the re-read period) from the :ref:`Context Menu
+<taurusplotcontextmenu>`.
+ 
+If launching the TaurusTrend as a stand-alone application, you can also enable this
+at launch time by passing the `-r` option (see the `TaurusTrend as a stand-alone 
+application`_ section).
+
+Keep in mind the following:
+
+- When enabling this feature, TaurusTrend will ignore all other events (to
+  guarantee that the refresh occurs at *and only at* the desired periodic
+  times).
+  
+- Setting very frequent re-reads may impact your control system and GUI
+  performance. Specially if you are plotting several attributes. **So, do not
+  use this feature unless it is really needed**
+
+
 Known limitations
 -----------------
 
diff --git a/lib/taurus/TaurusCustomSettings.py b/lib/taurus/TaurusCustomSettings.py
new file mode 100644
index 0000000..d22dfdb
--- /dev/null
+++ b/lib/taurus/TaurusCustomSettings.py
@@ -0,0 +1,48 @@
+#!/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 some Taurus-wide default configurations.
+
+The idea is that the final user may edit the values here to customize certain
+aspects of Taurus.
+"""
+
+# A map for using custom widgets for certain devices in TaurusForms. It is a
+# 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',(),{})
+    }
+    
diff --git a/scripts/taurusgui b/lib/taurus/console/__init__.py
old mode 100755
new mode 100644
similarity index 95%
copy from scripts/taurusgui
copy to lib/taurus/console/__init__.py
index 00ce858..dcfa585
--- a/scripts/taurusgui
+++ b/lib/taurus/console/__init__.py
@@ -23,5 +23,6 @@
 ##
 #############################################################################
 
-from taurus.qt.qtgui.taurusgui import main
-main()
+""" """
+
+from .enums import *
diff --git a/lib/taurus/qt/qtcore/tango/macroserver/__init__.py b/lib/taurus/console/enums.py
similarity index 69%
copy from lib/taurus/qt/qtcore/tango/macroserver/__init__.py
copy to lib/taurus/console/enums.py
index cc2136f..4e0955b 100644
--- a/lib/taurus/qt/qtcore/tango/macroserver/__init__.py
+++ b/lib/taurus/console/enums.py
@@ -23,18 +23,21 @@
 ##
 #############################################################################
 
-"""
-MacroServer extension for taurus Qt
-"""
+""" """
 
-__docformat__ = 'restructuredtext'
+__all__ = ["Alignment"]
 
-from .macroserver import *
+__docformat__ = "restructuredtext"
 
-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)
-    
\ No newline at end of file
+from taurus.core.util import Enumeration
+
+#: Flaggable alignment for both horizontal and vertical text
+#: Conflicting combinations of flags have undefined meanings.
+Alignment = Enumeration("Alignment", ( \
+    ("Left",    0x0001),
+    ("Right",   0x0002),
+    ("HCenter", 0x0004),
+    ("Top",     0x0020),
+    ("Bottom",  0x0040),
+    ("VCenter", 0x0080),
+    ("Center",  0x0004 | 0x0080 ) ) )
\ No newline at end of file
diff --git a/lib/taurus/console/list.py b/lib/taurus/console/list.py
new file mode 100644
index 0000000..a9b1cfb
--- /dev/null
+++ b/lib/taurus/console/list.py
@@ -0,0 +1,188 @@
+#!/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/>.
+##
+#############################################################################
+
+""" """
+
+__all__ = ["List"]
+
+__docformat__ = "restructuredtext"
+
+import textwrap
+import operator
+
+from enums import Alignment
+
+class List(list):
+    
+    HeaderSeparator = "-"
+    RowSeparator = None
+    
+    MaxColumnWidth = -1
+    TextAlignment = Alignment.Right | Alignment.Top
+    
+    def __init__(self, header, header_separator = HeaderSeparator,
+                 row_separator = RowSeparator,
+                 max_col_width = MaxColumnWidth,
+                 text_alignment = TextAlignment):
+                 
+        self.col_nb = col_nb = len(header)
+        self.cur_col_width = col_nb * [0]
+        
+        self.header_separator = header_separator
+        self.row_separator = row_separator
+        self.max_column_width = max_col_width
+        self.text_alignment = text_alignment
+        
+        if header is not None:
+            self.append(header)
+    
+    def setHeaderSeparator(self, header_separator):
+        if isinstance(header_separator, (str, unicode)):
+            header_separator = self.col_nb * [header_separator]
+        self.HeaderSeparator = header_separator
+    
+    def getHeaderSeparator(self):
+        return self.HeaderSeparator
+    
+    header_separator = property(getHeaderSeparator, setHeaderSeparator)
+
+    def setRowSeparator(self, row_separator):
+        if isinstance(row_separator, (str, unicode)):
+            row_separator = self.col_nb * [row_separator]
+        self.RowSeparator = row_separator
+        
+    def getRowSeparator(self):
+        return self.RowSeparator
+    
+    row_separator = property(getRowSeparator, setRowSeparator)
+    
+    def setMaxColumnWidth(self, max_col_width):
+        if max_col_width is None:
+            max_col_width = -1
+        if not operator.isSequenceType(max_col_width):
+            max_col_width = self.col_nb*[max_col_width]
+        self.MaxColumnWidth = max_col_width
+        
+    def getMaxColumnWidth(self):
+        return self.MaxColumnWidth
+    
+    max_column_width = property(getMaxColumnWidth, setMaxColumnWidth)
+
+    def setTextAlignment(self, text_alignment):
+        if not operator.isSequenceType(text_alignment):
+            text_alignment = self.col_nb*[text_alignment]
+        self.TextAlignment = text_alignment
+    
+    def getTextAlignment(self):
+        return self.TextAlignment
+    
+    text_alignment = property(getTextAlignment, setTextAlignment)
+    
+    def _transform_row(self, row):
+        return map(str, row[:self.col_nb])
+        
+    def __setitem__(self, i, row):
+        return list.__setitem__(self, i, self._transform_row(row) )
+    
+    def append(self, row):
+        return list.append(self, self._transform_row(row) )
+    
+    appendRow = append
+    
+    def putRow(self, row, idx):
+        self[idx] = row
+        
+    def _calc_column_widths(self):
+        cur_col_width, max_col_width = self.cur_col_width, self.MaxColumnWidth
+        
+        for row_index, row in enumerate(self):
+            for column_index, cell in enumerate(row):
+                size = len(cell) + 3
+                col_width = cur_col_width[column_index]
+                max_width = max_col_width[column_index]
+                if size > col_width:
+                    col_width = size
+                if max_width >= 0:
+                    col_width = min(max_width, col_width)
+                cur_col_width[column_index] = col_width
+    
+    def genOutput(self):
+        return self.lines()
+    
+    def _get_separator_row(self, separator):
+        columns = []
+        for i, width in enumerate(self.cur_col_width):
+            if isinstance(separator[i], str):
+                column = " " + (width - 1)*separator[i]
+            else:
+                column = " " + separator[i][:width-1]
+            columns.append(column)
+        return "".join(columns)
+    
+    def lines(self):
+        self._calc_column_widths()
+        cur_col_width = self.cur_col_width
+        alignment = self.TextAlignment
+        ret = []
+        wrapper = textwrap.TextWrapper()
+        for row_index, row in enumerate(self):
+            row_nb = 0
+            text_columns = []
+            for column_index, cell in enumerate(row):
+                align = alignment[column_index]
+                width = cur_col_width[column_index]
+                wrapper.width = width - 3
+                cells = wrapper.wrap(cell)
+                for i, c in enumerate(cells):
+                    if align & Alignment.Left:
+                        cells[i] = " " + c.ljust(width-1)
+                    elif align & Alignment.Right:
+                        cells[i] = c.rjust(width)
+                    elif align & Alignment.HCenter:
+                        cells[i] = c.center(width)
+                row_nb = max(len(cells), row_nb)
+                text_columns.append(cells)
+            
+            text_rows = row_nb*['']
+            for column_index, cells in enumerate(text_columns):
+                for i in range(row_nb):
+                    if i < len(cells):
+                        text_rows[i] = text_rows[i] + cells[i]
+                    else:
+                        width = cur_col_width[column_index]
+                        text_rows[i] = text_rows[i] + width*" "
+            ret.extend(text_rows)
+            if row_index > 0 and self.row_separator is not None:
+                ret.append(self._get_separator_row(self.RowSeparator))
+        
+        if self.header_separator is not None:
+            ret.insert(1, self._get_separator_row(self.HeaderSeparator))
+        return ret
+    
+    def str(self):
+        return "\n".join(self.lines())
+    
+    def __str__(self):
+        return self.str()
\ No newline at end of file
diff --git a/lib/taurus/console/table.py b/lib/taurus/console/table.py
new file mode 100644
index 0000000..362f85a
--- /dev/null
+++ b/lib/taurus/console/table.py
@@ -0,0 +1,164 @@
+#!/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/>.
+##
+#############################################################################
+
+""" """
+
+__all__ = ["Table"]
+
+__docformat__ = "restructuredtext"
+
+
+class Table:
+
+    DefTermWidth = 80
+
+    PrettyOpts   = {'col_sep': ' |', 'col_head_sep': '-', 'border': '='}
+    
+    def __init__(self, elem_list, elem_fmt=None, term_width=None,
+                 row_head_str=None, row_head_fmt='%-*s', row_head_width=None,
+                 col_head_str=None, col_head_fmt='%*s',  col_head_width=None,
+                 col_sep=' ', row_sep=' ', col_head_sep=None, border=None):
+
+        self.nr_col = len(elem_list)
+        self.nr_row = len(elem_list[0])
+        self.elem_list = elem_list
+        
+        if elem_fmt is None:
+            elem_fmt = self.nr_row * ['%*s']
+        if len(elem_fmt) == 1:
+            elem_fmt *= self.nr_row
+        self.elem_fmt  = elem_fmt
+        
+        self.term_width   = term_width or Table.DefTermWidth
+        self.col_sep      = col_sep
+        self.row_sep      = row_sep
+        self.col_head_sep = col_head_sep
+        self.border       = border
+        
+        max_len_fn = lambda x: reduce(max, map(len, x))
+        
+        self.row_head_str = row_head_str
+        self.row_head_fmt = row_head_fmt
+        if row_head_str is not None and len(row_head_str) != self.nr_row:
+            msg = 'RowHeadStr nr (%d) and RowNr (%d) mistmatch' % \
+                  len(row_head_str), self.nr_row
+            raise ValueError, msg
+        if row_head_width is None:
+            if row_head_str is not None:
+                row_head_width = max_len_fn(row_head_str)
+            else:
+                row_head_width = 0
+        self.row_head_width = row_head_width
+            
+        self.col_head_str = col_head_str
+        self.col_head_fmt = col_head_fmt
+        if col_head_str is not None and len(col_head_str) != self.nr_col:
+            msg = 'ColHeadStr nr (%d) and ColNr (%d) mistmatch' % \
+                  len(col_head_str), self.nr_col
+            raise ValueError, msg
+        if col_head_width is None:
+            if col_head_str is not None:
+                col_head_width = reduce(max, map(max_len_fn, col_head_str))
+            else:
+                col_head_width = 10
+        self.col_head_width = col_head_width
+        if col_head_str is not None:
+            self.col_head_lines = len(col_head_str[0])
+        else:
+            self.col_head_lines = 0
+        
+    def updateElem(self, elem_list):
+        new_col, new_row = len(elem_list), len(elem_list[0])
+        if new_col != self.nr_col or new_row != self.nr_row:
+            raise 'Invalid new elem list size %dx%d, was %dx%d' % \
+                  (new_col, new_row, self.nr_col, self.nr_row)
+        self.elem_list = elem_list
+        
+    def genOutput(self, term_width=None):
+        if term_width is None:
+            term_width = self.term_width
+        
+        rhw, chw = self.row_head_width, self.col_head_width
+        chl = self.col_head_lines
+        lcs = len(self.col_sep)
+        width = term_width - chw   # At least one disp column!
+        if rhw > 0:
+            width -= rhw + lcs
+        disp_cols = width / (chw + lcs) + 1
+        tot_width = chw + (disp_cols - 1) * (chw + lcs)
+        tot_rows = chl + self.nr_row
+        if rhw > 0:
+            tot_width += rhw + lcs
+            
+        output = []
+
+        if self.row_head_str is not None:
+            row_head = []
+            fmt = self.row_head_fmt
+            for head in [''] * chl + self.row_head_str:
+                head = fmt % (rhw, head)
+                row_head.append(head + self.col_sep)
+        else:
+            row_head = [''] * tot_rows
+
+        for i in xrange(0, self.nr_col, disp_cols):
+            if i > 0:
+                nr_sep = tot_width / len(self.row_sep)
+                output.append(self.row_sep * nr_sep)
+
+            row_end = min(i + disp_cols, self.nr_col)
+            line = list(row_head)
+            for j in xrange(i, row_end):
+                elem = self.elem_list[j]
+                if chl:
+                    col_head = self.col_head_str[j]
+                    if j > i:
+                        for k in xrange(tot_rows):
+                            line[k] += self.col_sep
+                    fmt = self.col_head_fmt
+                    for k in xrange(chl):
+                        line[k] += fmt % (chw, col_head[k])
+                        
+                for k in xrange(self.nr_row):
+                    fmt = self.elem_fmt[k]
+                    line[chl+k] += fmt % (chw, elem[k])
+
+            max_width = reduce(max, map(len, line))
+            if self.border is not None:
+                nr_border = max_width / len(self.border)
+                output.append(self.border * nr_border)
+            for l in line[:chl]:
+                output.append(l)
+            if self.col_head_sep is not None:
+                nr_sep = max_width / len(self.col_head_sep)
+                output.append(self.col_head_sep * nr_sep)
+            for l in line[chl:]:
+                output.append(l)
+            if self.border is not None:
+                output.append(self.border * nr_border)
+
+        return output
+
+
diff --git a/scripts/taurusgui b/lib/taurus/console/util/__init__.py
old mode 100755
new mode 100644
similarity index 95%
copy from scripts/taurusgui
copy to lib/taurus/console/util/__init__.py
index 00ce858..b7a624b
--- a/scripts/taurusgui
+++ b/lib/taurus/console/util/__init__.py
@@ -23,5 +23,4 @@
 ##
 #############################################################################
 
-from taurus.qt.qtgui.taurusgui import main
-main()
+""" """
\ No newline at end of file
diff --git a/lib/taurus/core/__init__.py b/lib/taurus/core/__init__.py
index 6e2ae16..1010874 100644
--- a/lib/taurus/core/__init__.py
+++ b/lib/taurus/core/__init__.py
@@ -29,6 +29,7 @@ __docformat__ = "restructuredtext"
 
 import release as Release
 from .enums import *
+from .taurusbasetypes import *
 from .taurusexception import *
 from .taurusmodel import *
 from .tauruslistener import *
diff --git a/lib/taurus/core/enums.py b/lib/taurus/core/enums.py
index f50c844..c548893 100644
--- a/lib/taurus/core/enums.py
+++ b/lib/taurus/core/enums.py
@@ -25,10 +25,10 @@
 
 """This module contains all basic taurus enumerations"""
 
-__all__ = ["TaurusSWDevState", "TaurusSWDevHealth", "OperationMode", 
-           "TaurusEventType", "MatchLevel", "TaurusElementType", "DataFormat",
-           "AttrQuality", "AttrType", "DisplayLevel", "ManagerState", 
-           "TaurusAttrValue", "TaurusConfigValue"]
+__all__ = ["TaurusSWDevState", "TaurusSWDevHealth", "OperationMode",
+           "TaurusSerializationMode", "SubscriptionState", "TaurusEventType",
+           "MatchLevel", "TaurusElementType", "LockStatus", "DataFormat",
+           "AttrQuality", "AttrAccess", "DisplayLevel", "ManagerState"]
 
 __docformat__ = "restructuredtext"
 
@@ -59,6 +59,12 @@ OperationMode = util.Enumeration(
     'ONLINE'
 ))
 
+TaurusSerializationMode = util.Enumeration(
+'TaurusSerializationMode', (
+    'Serial',
+    'Concurrent'
+))
+
 TaurusEventType = util.Enumeration(
 'TaurusEventType', (
     'Change',
@@ -100,16 +106,40 @@ TaurusElementType = util.Enumeration(
     'Database',
 ))
 
-#################
-# Not in use yet:
+LockStatus = util.Enumeration(
+'LockStatus', (
+    'Unlocked',
+    'Locked',
+    'LockedMaster',
+    'Unknown',
+))
 
 DataFormat = util.Enumeration(
 'DataFormat', (
-    '_0D', 
-    '_1D', 
+    '_0D',
+    '_1D',
     '_2D'
 ))
 
+DataType = util.Enumeration(
+'DataType', (
+    'Integer',
+    'Float',
+    'String',
+    'Boolean',
+))
+
+SubscriptionState = util.Enumeration(
+"SubscriptionState", (
+    "Unsubscribed",
+    "Subscribing",
+    "Subscribed", 
+    "PendingSubscribe"
+))
+
+#################
+# Not in use yet:
+
 AttrQuality = util.Enumeration(
 'AttrQuality', (
     'ATTR_VALID', 
@@ -117,8 +147,8 @@ AttrQuality = util.Enumeration(
     'ATTR_ALARM'
 ))
 
-AttrType = util.Enumeration(
-'AttrType', (
+AttrAccess = util.Enumeration(
+'AttrAccess', (
     'READ', 
     'READ_WITH_WRITE', 
     'WRITE', 
@@ -139,28 +169,4 @@ ManagerState =  util.Enumeration(
     'CLEANED'
 )) 
 
-class TaurusAttrValue:
-    def __init__(self):
-        self.read_value = None
-        self.write_value = None
-        self.time_stamp = None
-        self.quality = AttrQuality.ATTR_VALID
-        self.format = 0
-
-class TaurusConfigValue:
-    def __init__(self):
-        self.name = None
-        self.writable = None
-        self.data_format = None
-        self.data_type = None
-        self.max_dim = 1, 1
-        self.label = None
-        self.unit = None
-        self.standard_unit = None
-        self. display_unit= None
-        self.format = None
-        self.range = float('-inf'), float('inf')
-        self.alarm = float('-inf'), float('inf')
-        self.warning = float('-inf'), float('inf')
-        self.disp_level = None
     
diff --git a/lib/taurus/core/evaluation/__init__.py b/lib/taurus/core/evaluation/__init__.py
new file mode 100644
index 0000000..e4ed11d
--- /dev/null
+++ b/lib/taurus/core/evaluation/__init__.py
@@ -0,0 +1,155 @@
+#!/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/>.
+##
+#############################################################################
+
+"""
+.. currentmodule:: taurus.core.evaluation
+
+Evaluation extension for taurus core model.
+
+The evaluation extension is a special extension that provides evaluation
+objects. The official scheme name is 'eval', but 'evaluation' can be used as a synonym.
+
+The main usage for this extension is to provide a way of performing mathematical
+evaluations with data from other sources.
+
+The Evaluation Factory (:class:`EvaluationFactory`) uses the following object naming for referring to attributes (:class:`EvaluationAttribute`):
+
+    `eval://[db=<databasename>][dev=<devicename>;]<math_expression>[?<symbols>][#<fragment>]`
+    
+    or the following for referring to evaluation devices (:class:`EvaluationDevice`):
+    
+    `eval://[db=<databasename>]dev=<devicename>[?<symbols>]`
+    
+    or the following for referring to an evaluation database (:class:`EvaluationDatabase`):
+    
+    `eval://db=<databasename>`
+    
+    or, finally, the following for referring to an attribute configuration (:class:`EvaluationConfiguration`) item:
+    
+    `eval://[db=<databasename>][dev=<devicename>;]<math_expression>[?<symbols>]?configuration=<configkey>` 
+  
+    where:
+    
+    - The `db=<databasename>;` segment is optional (except when referring to an
+      EvaluationDatabase). If not given it defaults to `db=_DefaultEvalDB;`.
+    
+    - The `dev=<devicename>;` is optional (except when referring to an
+      EvaluationDevice). If not given, it defaults to `dev=_DefaultEvaluator;`.
+      
+    - `<math_expression>` is a mathematical expression (using python syntax)
+      that may have references to other taurus **attributes** by enclosing them
+      between `{` and `}`. Expressions will be evaluated by the evaluator device
+      to which the attribute is assigned. 
+      
+    - The evaluator device inherits from :class:`SafeEvaluator` which by default 
+      includes a large subset of mathematical functions from the :mod:`numpy`
+      module. 
+      
+    - `<devicename>` is a unique identification name for the evaluator device.
+      This allows to use different evaluator objects which may have different
+      symbols available for evaluation. As an alternative approach, it is also
+      possible to use custom-made evaluator devices as long as they inherit from
+      :class:`EvaluationDevice`. To use a custom-made evaluator, you should
+      construct the `<devicename>` as `<modulename>.<classname>` where:
+      
+          - `<modulename>` is a python module name and 
+    
+          - `<classname>` is the name of a class in `<modulename>` that derives 
+            from :class:`EvaluationDevice`
+      
+      See :file:`<taurus>/core/evaluation/dev_example.py` for an example of a
+      custom Evaluator
+        
+    - The optional `?<symbols>` segment is used to provide substitution symbols. 
+      `<symbols>` is a semicolon-separated string of `<key>=<value>` strings.
+      Before evaluation, the `<math_expression>` string will be searched for
+      occurrences of `<key>` which will be replaced by the corresponding
+      `<value>` string. If the `?<symbols>` segment is provided in an attribute
+      name, the symbols affect only this attribute. If they are defined in a
+      device name, they will be available to all attributes of that device. If
+      the same `<key>` is defined both in an attribute and its device, the
+      `value` defined in the attribute is used.
+      
+    - The optional `#<fragment>` segment is not (strictly speaking) part of the
+      attribute name and is not processed by the Factory. It can be used to
+      inform *the client* (e.g. a Taurus widget that uses this attribute as
+      its model) that you are interested only in a given fragment (slice) of
+      the value of the attribute. Note that if the client does not support this
+      convention, this will be silently ignored. The syntax is that of python
+      slices (e.g. `[1:-3]`) and will depend on the dimensionality and type of
+      the attribute value
+      
+    - `<configkey>` is a configuration item key (e.g., `label, `unit`,...) used
+      to identify a given item from the `:class:EvaluationConfiguration` object
+      
+      
+
+Some examples of valid evaluation models are:
+
+    - An attribute that multiplies a tango attribute by 2:
+        
+        `eval://2*{tango://a/b/c/d}`
+        
+    - An attribute that adds two tango attributes together (note we can omit the `tango://` part
+      because tango is the default schema in taurus)
+      
+        `eval://{a/b/c/d}+{f/g/h/i}`
+    
+    - An attribute that generates an array of random values:
+    
+        `eval://rand(256)`
+        
+    - An attribute that adds noise to a tango image attribute:
+    
+        `eval://{sys/tg_test/1/short_image_ro}+10*rand(*shape({sys/tg_test/1/short_image_ro}))`
+        
+    - An attribute that uses resources to calculate the voltage from the Intensity and the Resistance:
+    
+        `eval://{res://I}*{res://R}`
+        
+    - An evaluator device named `foo`:
+    
+        `eval://dev=foo`
+        
+    - An evaluator device named `foo` to which 2 custom symbols are assigned 
+      (which can be used by any attribute of this device):
+    
+        `eval://dev=foo?bar={tango://a/b/c/d};blah=23`
+          
+    - An attribute that multiplies `blah` times `bar` (assuming that both `blah`
+      and `bar` are known to device `foo`):
+        
+        `eval://dev=foo;blah*bar`
+        
+    - Same as the previous 2 examples together, but all in one line (the only
+      difference is that the symbols defined in this example affect only to this
+      attribute, whereas in the example above the symbols were permanently stored
+      by the device and thus could be used for other attributes as well):
+    
+        `eval://dev=foo;blah*bar?bar={tango://a/b/c/d};blah=23`
+
+"""
+#raise NotImplementedError()
+from evalfactory import *
\ No newline at end of file
diff --git a/lib/taurus/core/evaluation/dev_example.py b/lib/taurus/core/evaluation/dev_example.py
new file mode 100644
index 0000000..5e48bba
--- /dev/null
+++ b/lib/taurus/core/evaluation/dev_example.py
@@ -0,0 +1,81 @@
+#!/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/>.
+##
+#############################################################################
+
+'''
+Examples on using the evaluation scheme for exposing arbitrary non-tango quantities as taurus attributes
+'''
+
+__all__ = ['FreeSpaceDevice']
+
+from taurus.core.evaluation import EvaluationDevice
+import os, platform, ctypes
+
+class FreeSpaceDevice(EvaluationDevice):
+    '''A simple example of usage of the evaluation scheme for 
+    creating a device that allows to obtain available space in a dir.
+    
+    Important: note that only those members listed in `_symbols` will be available
+    '''
+    _symbols = ['getFreeSpace']
+        
+    def getFreeSpace(self, dir):
+        """ return free space (in bytes). 
+        (Recipe adapted from `http://stackoverflow.com/questions/51658`)
+        """
+        if platform.system() == 'Windows':
+            free_bytes = ctypes.c_ulonglong(0)
+            ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(dir), None, None, ctypes.pointer(free_bytes))
+            return free_bytes.value
+        else:
+            s =  os.statvfs(dir)
+            return s.f_bsize * s.f_bavail
+        
+
+#===============================================================================
+# Just for testing
+#===============================================================================
+
+def test1():
+    import taurus.core
+    a = taurus.Attribute('eval://dev=taurus.core.evaluation.dev_example.FreeSpaceDevice;getFreeSpace("/")/1024/1024') #calculates free space in Mb
+    print "Free space: %iMb"%a.read().value
+    
+def test2():
+    import sys
+    from taurus.qt.qtgui.application import TaurusApplication
+    from taurus.qt.qtgui.display import TaurusLabel
+    app = TaurusApplication()
+    
+    w = TaurusLabel()
+    attrname='eval://dev=taurus.core.evaluation.dev_example.FreeSpaceDevice;getFreeSpace("/")' #calculates free space in Mb
+    
+    w.setModel(attrname)
+
+    w.show()
+    sys.exit(app.exec_())
+    
+if __name__ == "__main__":
+    test2()
+    
+            
\ No newline at end of file
diff --git a/lib/taurus/core/evaluation/evalfactory.py b/lib/taurus/core/evaluation/evalfactory.py
new file mode 100644
index 0000000..9a5e5fc
--- /dev/null
+++ b/lib/taurus/core/evaluation/evalfactory.py
@@ -0,0 +1,930 @@
+#!/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/>.
+##
+#############################################################################
+
+'''
+evaluation module. See __init__.py for more detailed documentation
+'''
+__all__ = ['EvaluationFactory', 'EvaluationDatabase', 'EvaluationDevice', 
+           'EvaluationAttribute','EvaluationConfiguration', 
+           'EvaluationConfigurationNameValidator', 'EvaluationDeviceNameValidator', 
+           'EvaluationAttributeNameValidator']
+
+
+
+import os, time, re, weakref
+import numpy
+
+from taurus.core.taurusexception import TaurusException
+import taurus.core
+from taurus.core import OperationMode, MatchLevel, TaurusSWDevState, SubscriptionState, TaurusEventType
+from taurus.core.util import SafeEvaluator
+
+class AbstractEvaluationNameValidator(taurus.core.util.Singleton):
+    #the object name class. *must* be implemented in subclasses
+    name_pattern = '' #must be implemented in children classes
+    # The following regexp pattern matches <variable>=<value> pairs    
+    kvsymbols_pattern = r'([a-zA-Z_][a-zA-Z0-9_]*)=([^#;]+)'
+
+    def __init__(self):
+        """ Initialization. Nothing to be done here for now."""
+        pass
+    
+    def init(self, *args, **kwargs):
+        """Singleton instance initialization."""
+        self.name_re = re.compile(self.name_pattern)
+        self.kvsymbols_re = re.compile(self.kvsymbols_pattern)
+        
+    def isValid(self,str, matchLevel = MatchLevel.ANY):
+        return self.name_re.match(str) is not None
+        
+    def getParams(self, str):
+        m = self.attrname_re.match(str)
+        if m is None:
+            return None
+        return m.groupdict()
+
+    def getNames(self, str, factory=None):
+        """Returns the full, normal and simple names for this object, or None if there is no match'''
+        """
+        raise RunTimeError('Not Allowed to call this method from subclasses')
+    
+    def getDeviceName(self, str, full=True):
+        '''
+        returns the device name for the given attribute name. 
+        If full=True, the returned name includes the DB name
+        '''
+        m = self.name_re.match(str)
+        if m is None:
+            return None
+        devname = m.group('devname') or EvaluationFactory.DEFAULT_DEVICE
+        if full:
+            return '%s;dev=%s'%(self.getDBName(str),devname)
+        else:
+            return 'eval://dev=%s'%devname
+    
+    def getDBName(self,str):
+        '''returns the full data base name for the given attribute name'''
+        m = self.name_re.match(str)
+        if m is None:
+            return None
+        dbname = m.group('dbname') or EvaluationFactory.DEFAULT_DATABASE
+        return "eval://db=%s"%dbname
+    
+
+class EvaluationAttributeNameValidator(AbstractEvaluationNameValidator):
+ # The groups in a match object using the regexp below are:
+    #    1: scheme; named as 'scheme'
+    #    2: 
+    #    3: database name; optional; named as 'dbname'
+    #    4: 
+    #    5: device name; optional; named as 'devname'
+    #    6: attribute name (transformation string); named as 'attrname'
+    #    7:
+    #    8: substitution symbols (semicolon separated key=val pairs) ; optional; named as 'subst'
+    #    9:
+    #    A: fragment; optional; named as 'fragment'
+    #
+    #    Reconstructing the names
+    #    attrname= $4
+    #    devname= $3 or EvaluationFactory.DEFAULT_DEVICE
+    #    fullname= "eval://dev=%s;%s%s%s"%(devname,attrname,$5,$7)
+    #   
+    #                 1                             2   3                     4    5                      6                    7                    8                  9 A                                                        
+    name_pattern = r'^(?P<scheme>eval|evaluation)://(db=(?P<dbname>[^?#;]+);)?(dev=(?P<devname>[^?#;]+);)?(?P<attrname>[^?#;]+)(\?(?!configuration=)(?P<subst>[^#?]*))?(#(?P<fragment>.*))?$'
+        
+    def isValid(self,str, matchLevel = MatchLevel.ANY):
+        m = self.name_re.match(str)
+        if m is None: 
+            return False
+        elif matchLevel == MatchLevel.COMPLETE:
+            return m.group('devname') is not None and m.group('dbname') is not None
+        else:
+            return True
+
+    def getNames(self, str, factory=None):
+        """Returns the complete, normal and short names.
+        
+        For example::
+        
+            >>> EvaluationAttributeNameValidator.getNames("eval://dev=foo;bar*blah?bar=123;blah={a/b/c/d}#[1:-3]")
+            >>> ("eval://db=_DefaultEvalDB;dev=foo;123*{a/b/c/d}", "eval://dev=foo;bar*blah", "bar*blah")
+        
+        """
+        m = self.name_re.match(str)
+        if m is None:
+            return None
+        #The following comments are for an example name like: "eval://dev=foo;bar*blah?bar=123;blah={a/b/c/d}#[1:-3]"
+        attr_name = m.group('attrname') # attr_name = "bar*blah"
+        normal_name = "%s;%s"%(self.getDeviceName(str, full=False),attr_name) #normal_name = "eval://dev=foo;bar*blah"
+        expanded_attr_name = self.getExpandedTransformation(str)
+        fullname = "%s;%s"%(self.getDeviceName(str, full=True),expanded_attr_name) #fullname = "eval://db=_DefaultEvalDB;dev=foo;123*{a/b/c/d}"
+        return fullname, normal_name, attr_name
+    
+    def getExpandedTransformation(self, str):
+        'expands the attribute name by substituting all symbols'
+        m = self.name_re.match(str)
+        if m is None:
+            return None
+        transf = m.group('attrname')
+        subst = m.group('subst') or ''
+        for k,v in self.kvsymbols_re.findall(subst):
+            transf = re.sub(k,v, transf)
+        return transf
+        
+
+class EvaluationDeviceNameValidator(AbstractEvaluationNameValidator):
+    '''A validator of names for :class:`EvaluationDevice`'''
+    # The groups in a match object using the regexp below are:
+    #    1: scheme; named as 'scheme'
+    #    2: 
+    #    3: database name; optional; named as 'dbname'
+    #    4: 
+    #    5: devicename; named as 'devname'
+    #    6:
+    #    7: substitution symbols (semicolon separated key=val pairs) ; optional; named as 'subst'
+    #
+    #                 1                             2   3                     4    5                    6                    7                                     
+    name_pattern = r'^(?P<scheme>eval|evaluation)://(db=(?P<dbname>[^?#;]+);)?(dev=(?P<devname>[^?#;]+))(\?(?!configuration=)(?P<subst>[^#?]*))?$'
+    
+    def getNames(self, str, factory=None):
+        """Returns the complete, normal and short names. (note: complete=normal)
+        
+        :param str: (str) input string describing the device
+        :param factory: (TaurusFactory) [Unused]
+        
+        :return: (tuple<str,str,str> or None) A tuple of complete, normal and
+                 short names, or None if str is an invalid device name
+        """
+        m = self.name_re.match(str)
+        if m is None:
+            return None
+        gdict = m.groupdict() 
+        #The following comments are for a name of the type: eval://dev=foo?bar=123;blah={a/b/c/d} 
+        devname = m.group('devname')  # foo
+        normal_name = self.getDeviceName(str, full=False) #eval://dev=foo
+        full_name = self.getDeviceName(str, full=True) #eval://db=_DefaultEvalDB;dev=foo
+        return full_name, normal_name, devname
+
+
+class EvaluationConfigurationNameValidator(AbstractEvaluationNameValidator):
+    '''A validator of names for :class:`EvaluationConfiguration`'''
+    # The groups in a match object using the regexp below are:
+    #    1: scheme; named as 'scheme'
+    #    2: 
+    #    3: database name; optional; named as 'dbname'
+    #    4: 
+    #    5: device name; optional; named as 'devname'
+    #    6: transformationstring; named as 'attrname'
+    #    7:
+    #    8: substitution symbols (semicolon separated key=val pairs) ; optional; named as 'subst'
+    #    9:
+    #    A: configuration key; named as 'cfgkey'
+    #
+    #    Reconstructing the names
+    #                 1                             2   3                     4    5                      6                    7                    8                  9                 A                    
+    name_pattern = r'^(?P<scheme>eval|evaluation)://(db=(?P<dbname>[^?#;]+);)?(dev=(?P<devname>[^?#;]+);)?(?P<attrname>[^?#;]+)(\?(?!configuration=)(?P<subst>[^#?]*))?(\?configuration=?(?P<cfgkey>[^#?]*))$'
+        
+    def isValid(self,str, matchLevel = MatchLevel.ANY):
+        m = self.name_re.match(str)
+        if m is None: 
+            return False
+        elif matchLevel == MatchLevel.COMPLETE:
+            return m.group('devname') is not None and m.group('dbname') is not None
+        else:
+            return True
+
+    def getNames(self, str, factory=None):
+        """Returns the complete, normal and short names"""
+        m = self.name_re.match(str)
+        if m is None:
+            return None
+        #The following comments are for an example name like: "eval://dev=foo;bar*blah?bar=123;blah={a/b/c/d}?configuration=label"
+        cfg_key = m.group('cfgkey') # cfg_key = "label"
+        attr_name = m.group('attrname')
+        normal_name = "%s;%s?configuration"%(self.getDeviceName(str, full=False),attr_name) #normal_name = "eval://dev=foo;bar*blah?configuration"
+        expanded_attr_name = self.getExpandedTransformation(str)
+        fullname = "%s;%s?configuration"%(self.getDeviceName(str, full=True),expanded_attr_name) #fullname = "eval://db=_DefaultEvalDB;dev=foo;123*{a/b/c/d}?configuration"
+        return fullname, normal_name, cfg_key
+    
+    def getAttrName(self, str):
+        names = self.getNames(str)
+        if names is None: return None
+        return names[0][:-len('?configuration')] #remove the "?configuration" substring from the fullname
+        
+    def getExpandedTransformation(self, str):
+        'expands the attribute name by substituting all symbols'
+        m = self.name_re.match(str)
+        if m is None:
+            return None
+        transf = m.group('attrname')
+        subst = m.group('subst') or ''
+        for k,v in self.kvsymbols_re.findall(subst):
+            transf = re.sub(k,v, transf)
+        return transf
+
+class EvaluationDatabase(taurus.core.TaurusDatabase):
+    '''
+    Dummy database class for Evaluation (the Database concept is not used in the Evaluation scheme)
+    
+    .. warning:: In most cases this class should not be instantiated directly.
+                 Instead it should be done via the :meth:`EvaluationFactory.getDataBase`
+    '''
+    def factory(self):
+        return EvaluationFactory()
+        
+    def __getattr__(self, name):
+        return "EvaluationDatabase object calling %s" % name
+
+
+class EvaluationDevice(taurus.core.TaurusDevice, SafeEvaluator):
+    '''
+    The evaluator object. It is a :class:`TaurusDevice` and is used as the
+    parent of :class:`EvaluationAttribute` objects for which it performs the
+    mathematical evaluation.
+    
+    .. seealso:: :mod:`taurus.core.evaluation`
+    
+    .. warning:: In most cases this class should not be instantiated directly.
+                 Instead it should be done via the :meth:`EvaluationFactory.getDevice`
+    '''
+    _symbols = []
+    
+    def __init__(self, name, **kw):
+        """Object initialization."""
+        self.call__init__(taurus.core.TaurusDevice, name, **kw)
+        safedict = {}
+        for s in self._symbols:
+            if hasattr(self,s):
+                safedict[s] = getattr(self,s)
+        SafeEvaluator.__init__(self, safedict=safedict)        
+
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    # TaurusModel necessary overwrite
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    # helper class property that stores a reference to the corresponding factory
+    _factory = None
+    
+    @classmethod
+    def factory(cls):
+        if cls._factory is None:
+            cls._factory = taurus.Factory(scheme='eval')
+        return cls._factory
+    
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    # TaurusDevice necessary overwrite
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    def _createHWObject(self):
+        return 'Evaluation'
+    
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    def getAttribute(self, attrname):
+        """Returns the attribute object given its name"""
+        full_attrname = "%s;%s"%(self.getFullName(), attrname)
+        return self.factory().getAttribute(full_attrname)
+    
+    @classmethod
+    def getNameValidator(cls):
+        return EvaluationDeviceNameValidator()
+    
+    def decode(self, event_value):
+        if isinstance(event_value, int): # TaurusSWDevState
+            new_sw_state = event_value
+        else:
+            self.info("Unexpected value to decode: %s" % str(event_value))
+            new_sw_state = TaurusSWDevState.Crash
+        value = taurus.core.TaurusAttrValue() 
+        value.value = new_sw_state
+        return value
+    
+
+class EvaluationAttribute(taurus.core.TaurusAttribute):
+    '''
+    A :class:`TaurusAttribute` that can be used to perform mathematical
+    operations involving other arbitrary Taurus attributes. The mathematical
+    operation is described in the attribute name itself. An Evaluation Attribute
+    will keep references to any other attributes being referenced and it will
+    update its own value whenever any of the referenced attributes change.
+    
+    .. seealso:: :mod:`taurus.core.evaluation` 
+    
+    .. warning:: In most cases this class should not be instantiated directly.
+                 Instead it should be done via the :meth:`EvaluationFactory.getAttribute`
+    '''
+    pyStr_RegExp = re.compile(r'(?:\"[^\"]+?\")|(?:\'[^\']+?\')') #matches a single or double-quoted string
+    pyVar_RegExp = re.compile("[a-zA-Z_][a-zA-Z0-9_]*") #regexp for a variable/method name (symbol)
+    cref_RegExp = re.compile("\{(.+?)\}") #regexp for references to other taurus models within operation model names
+
+    def __init__(self, name, parent, storeCallback = None):
+        self.call__init__(taurus.core.TaurusAttribute, name, parent, storeCallback=storeCallback)
+        
+        self._value = taurus.core.TaurusAttrValue()
+        self._value.config.writable = False #Evaluation Attributes are always read-only (at least for now)
+        self._references = [] 
+        self._validator= self.getNameValidator()
+        self._transformation = None
+        # reference to the configuration object
+        self.__attr_config = None#taurus.core.TaurusConfiguration()
+        self.__subscription_state = SubscriptionState.Unsubscribed
+
+        
+        trstring = self._validator.getExpandedTransformation(str(name)) #This should never be None because the init already ran the validator
+        
+        trstring, ok = self.preProcessTransformation(trstring)
+        
+        if ok:
+            self._transformation = trstring
+            self.applyTransformation()
+
+    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()
+            self.__attr_config = EvaluationConfiguration(cfg_name, self)
+        return self.__attr_config
+    
+    @staticmethod
+    def getId(obj, idFormat=r'_V%i_'):
+        '''returns an id string for the given object which has the following two properties:
+        
+            - It is unique for this object during all its life
+            - It is a string that can be used as a variable or method name
+        
+        :param obj: (object) the python object whose id is requested 
+        :param idFormat: (str) a format string containing a "`%i`" which, when expanded
+                         must be a valid variable name (i.e. it must match
+                         `[a-zA-Z_][a-zA-Z0-9_]*`). The default is `_V%i_`
+        '''
+        return idFormat%id(obj)
+        
+    def preProcessTransformation(self, trstring):
+        """
+        parses the transformation string and creates the necessary symbols for
+        the evaluator. It also connects any referenced attributes so that the
+        transformation gets re-evaluated if they change.
+        
+        :param trstring: (str) a string to be pre-processed
+        
+        :return: (tuple<str,bool>) a tuple containing the processed string 
+                 and a boolean indicating if the preprocessing was successful.
+                 if ok==True, the string is ready to be evaluated
+        """
+        #disconnect previously referenced attributes and clean the list
+        for ref in self._references:
+            ref.removeListener(self)
+        self._references = []  
+        
+        #reset symbols
+        evaluator = self.getParentObj()  
+        evaluator.resetSafe()
+        
+        #Find references in the string, create references if needed, 
+        #connect to them and substitute the references by their id
+        trstring = re.sub(self.cref_RegExp, self.__Match2Id, trstring)
+        
+        #validate the expression (look for missing symbols) 
+        safesymbols = evaluator.getSafe().keys()
+        trimmedstring = re.sub(self.pyStr_RegExp, '', trstring) #remove literal text strings from the validation
+        for s in set(re.findall(self.pyVar_RegExp, trimmedstring)):
+            if s not in safesymbols:
+                self.warning('Missing symbol "%s"'%s)
+                return trstring, False
+            
+        #If all went ok, enable/disable polling based on whether there are references or not
+        wantpolling = not self.isUsingEvents()
+        haspolling = self.isPollingEnabled()
+        if wantpolling:
+            self._activatePolling()
+        elif haspolling and not wantpolling:
+            self.disablePolling()
+            
+        
+        return trstring,True
+                    
+    def __Match2Id(self, match):
+        """
+        receives a re.match object for cref_RegExp. Returns the id of an
+        existing taurus attribute corresponding to the match. The attribute is created
+        if it didn't previously exist.
+        """
+        ref = match.groups()[0]
+        refobj = self.__createReference(ref)
+        return self.getId(refobj)
+        
+    def __createReference(self, ref):
+        '''
+        Receives a taurus attribute name and creates/retrieves a reference to
+        the attribute object. If the object was not already referenced, it adds
+        it to the reference list and adds its id and current value to the
+        symbols dictionary of the evaluator.
+        
+        :param ref: (str) 
+        
+        :return: (TaurusAttribute) 
+        
+        '''
+        refobj = taurus.Attribute(ref)
+        if refobj not in self._references:
+            evaluator = self.getParentObj()
+            v = refobj.read().value
+            evaluator.addSafe({self.getId(refobj) : v}) # add its value to the evaluator symbols
+            self._references.append(refobj) #add the object to the reference list            
+        return refobj        
+    
+    def eventReceived(self, evt_src, evt_type, evt_value):
+        try:
+            v = evt_value.value
+        except AttributeError:
+            self.trace('Ignoring event from %s'%repr(evt_src))
+            return
+        #self.trace('received event from %s (%s=%s)'%(evt_src, self.getId(evt_src), v))
+        #update the corresponding value
+        evaluator = self.getParentObj()
+        evaluator.addSafe({self.getId(evt_src) : v})
+        #re-evaluate
+        self.applyTransformation()
+        #notify listeners that the value changed
+
+        if self.isUsingEvents():
+            self.fireEvent(evt_type, self._value)
+        
+    def applyTransformation(self):
+        if self._transformation is None: return
+        try:
+            evaluator = self.getParentObj() 
+            self._value.value = evaluator.eval(self._transformation)
+            self._value.time = taurus.core.TaurusTimeVal.now()
+            self._value.quality = taurus.core.AttrQuality.ATTR_VALID
+            self._value.config.data_format = len(numpy.shape(self._value.value))
+        except Exception, e:
+            self._value.quality = taurus.core.AttrQuality.ATTR_INVALID
+            self.warning("the function '%s' could not be evaluated. Reason: %s"%(self._transformation, repr(e)))
+            #self.traceback(taurus.Warning)
+            
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    # Necessary to overwrite from TaurusAttribute
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    def isNumeric(self):
+        return True
+        
+    def isBoolean(self):
+        return isinstance(self._value.value, bool)
+    
+    def isState(self):
+        return False
+
+    def getDisplayValue(self,cache=True):
+        return str(self.read(cache=cache).value)
+
+    def encode(self, value):
+        return value
+
+    def decode(self, attr_value):
+        return attr_value
+
+    def write(self, value, with_read=True):
+        raise TaurusException('Evaluation attributes are read-only')
+
+    def read(self, cache=True):
+        '''returns the value of the attribute.
+        
+        :param cache: (bool) If True (default), the last calculated value will
+                      be returned. If False, the referenced values will be re-
+                      read and the transformation string will be re-evaluated
+                      
+        :return: attribute value
+        '''
+        if not cache:
+            symbols = {}
+            for ref in self._references:
+                symbols[self.getId(ref)] = ref.read(cache=False).value
+            evaluator = self.getParentObj()  
+            evaluator.addSafe(symbols)
+            self.applyTransformation()
+        return self._value    
+
+    def poll(self):
+        v = self.read(cache=False)
+        self.fireEvent(TaurusEventType.Periodic, v)
+            
+    def _subscribeEvents(self): 
+        pass
+        
+    def _unsubscribeEvents(self):
+        pass
+
+    def isUsingEvents(self):
+        return bool(len(self._references)) #if this attributes depends from others, then we consider it uses events
+        
+#------------------------------------------------------------------------------ 
+
+    def factory(self):
+        return EvaluationFactory()
+    
+    @classmethod
+    def getNameValidator(cls):
+        return EvaluationAttributeNameValidator()
+
+    def __fireRegisterEvent(self, listener):
+        #fire a first change event
+        try:
+            v = self.read()
+            self.fireEvent(TaurusEventType.Change, v, listener)
+        except:
+            self.fireEvent(TaurusEventType.Error, None, listener)
+    
+    def addListener(self, listener):
+        """ Add a TaurusListener object in the listeners list.
+            If it is the first listener, it triggers the subscription to the referenced attributes.
+            If the listener is already registered nothing happens."""
+        
+        #subscribe to configuration events for this attribute
+        cfg = self.getConfig()
+        cfg.addListener(listener)
+        
+        initial_subscription_state = self.__subscription_state
+        
+        ret = taurus.core.TaurusAttribute.addListener(self, listener)
+
+        if not ret:
+            return ret
+        
+        if self.__subscription_state == SubscriptionState.Unsubscribed:
+            for refobj in self._references:
+                refobj.addListener(self) #subscribe to the referenced attributes
+            self.__subscription_state = SubscriptionState.Subscribed
+
+        assert len(self._listeners) >= 1        
+        #if initial_subscription_state == SubscriptionState.Subscribed:
+        if len(self._listeners) > 1 and (initial_subscription_state == SubscriptionState.Subscribed or self.isPollingActive()):
+            taurus.Manager().addJob(self.__fireRegisterEvent, None, (listener,))
+        return ret
+        
+    def removeListener(self, listener):
+        """ Remove a TaurusListener from the listeners list. If polling enabled 
+            and it is the last element then stop the polling timer.
+            If the listener is not registered nothing happens."""
+        ret = taurus.core.TaurusAttribute.removeListener(self, listener)
+
+        cfg = self._getRealConfig()
+        cfg.removeListener(listener)
+        
+        if ret and not self.hasListeners():
+            self._deactivatePolling()
+            self.__subscription_state = SubscriptionState.Unsubscribed
+        return ret
+    
+
+class EvaluationConfiguration(taurus.core.TaurusConfiguration):
+    '''
+    A :class:`TaurusConfiguration` 
+    
+    .. seealso:: :mod:`taurus.core.evaluation` 
+    
+    .. warning:: In most cases this class should not be instantiated directly.
+                 Instead it should be done via the :meth:`EvaluationFactory.getConfig`
+    '''
+    def __init__(self, name, parent, storeCallback = None):
+        self.call__init__(taurus.core.TaurusConfiguration, name, parent, storeCallback=storeCallback)
+        
+        #fill the attr info
+        i = parent.read().config
+        a=parent
+        d=self._getDev()
+        # add dev_name, dev_alias, attr_name, attr_full_name
+        i.dev_name = d.getNormalName()
+        i.dev_alias = d.getSimpleName()
+        i.attr_name = a.getSimpleName()
+        i.attr_fullname = a.getNormalName()
+        i.label = a.getSimpleName()
+        self._attr_info = i
+        
+    def __getattr__(self, name): 
+        try:
+            return getattr(self._attr_info,name)
+        except:
+            raise AttributeError("'%s'object has no attribute '%s'"%(self.__class__.__name__, name))
+    @classmethod
+    def getNameValidator(cls):
+        return EvaluationConfigurationNameValidator()
+        
+    def _subscribeEvents(self): 
+        pass
+    
+    def _unSubscribeEvents(self):
+        pass   
+    
+    def factory(self):
+        EvaluationFactory()
+    
+    def getValueObj(self, cache=True):
+        """ Returns the current configuration for the attribute."""
+        return self._attr_info   
+    
+class EvaluationFactory(taurus.core.util.Singleton, taurus.core.TaurusFactory, taurus.core.util.Logger):
+    """
+    A Singleton class that provides Evaluation related objects.
+    """
+
+    schemes = ("eval","evaluation")
+    DEFAULT_DEVICE = '_DefaultEvaluator'
+    DEFAULT_DATABASE = '_DefaultEvalDB'
+    def __init__(self):
+        """ Initialization. Nothing to be done here for now."""
+        pass
+
+    def init(self, *args, **kwargs):
+        """Singleton instance initialization."""
+        name = self.__class__.__name__
+        self.call__init__(taurus.core.util.Logger, name)
+        self.call__init__(taurus.core.TaurusFactory)
+        self.eval_attrs = weakref.WeakValueDictionary()
+        self.eval_devs = weakref.WeakValueDictionary()
+        self.eval_configs = weakref.WeakValueDictionary()
+        
+    def findObjectClass(self, absolute_name):
+        """Operation models are always OperationAttributes
+        """
+        if EvaluationConfiguration.isValid(absolute_name):
+            return EvaluationConfiguration
+        elif EvaluationDevice.isValid(absolute_name):
+            return EvaluationDevice
+        elif EvaluationAttribute.isValid(absolute_name):
+            return EvaluationAttribute
+        else:
+            self.debug("Not able to find Object class for %s" % absolute_name)
+            self.traceback()
+            return None
+
+    def getDatabase(self, db_name=None):
+        """Obtain the EvaluationDatabase object.
+        
+        :param db_name: (str) this is ignored because only one database is supported
+                           
+        :return: (EvaluationDatabase)
+        """
+        if not hasattr(self, "_db"):
+            self._db = EvaluationDatabase(self.DEFAULT_DATABASE)
+        return self._db
+
+    def getDevice(self, dev_name):
+        """Obtain the object corresponding to the given device name. If the 
+        corresponding device already exists, the existing instance is returned. 
+        Otherwise a new instance is stored and returned.
+           
+        :param dev_name: (str) the device name string. See
+                         :mod:`taurus.core.evaluation` for valid device names
+        
+        :return: (EvaluationDevice)
+         
+        @throws TaurusException if the given name is invalid.
+        """
+        d = self.eval_devs.get(dev_name, None)
+        if d is None:
+            validator = EvaluationDevice.getNameValidator()
+            names = validator.getNames(dev_name)
+            if names is None:
+                raise TaurusException("Invalid evaluator device name %s" % dev_name)
+            fullname, normalname, devname = names
+            d = self.eval_devs.get(fullname, None)
+            if d is None:
+                tmp = devname.rsplit('.', 1)
+                if len(tmp)==2:
+                    modulename, classname = tmp
+                    try:
+                        m = __import__(modulename, globals(), locals(), [classname], -1)
+                        DevClass = getattr(m, classname)
+                    except:
+                        self.warning('Problem importing "%s"'%devname)
+                        raise
+                elif len(tmp)==1:
+                    DevClass = EvaluationDevice 
+                db = self.getDatabase()
+                d = DevClass(fullname, parent=db, storeCallback=self._storeDev) #use full name
+        return d
+        
+    def getAttribute(self, attr_name):
+        """Obtain the object corresponding to the given attribute name. If the 
+        corresponding attribute already exists, the existing instance is
+        returned. Otherwise a new instance is stored and returned. The evaluator
+        device associated to this attribute will also be created if necessary.
+           
+        :param attr_name: (str) the attribute name string. See
+                          :mod:`taurus.core.evaluation` for valid attribute names
+        
+        :return: (EvaluationAttribute)
+         
+        @throws TaurusException if the given name is invalid.
+        """
+        a = self.eval_attrs.get(attr_name, None) #first try with the given name
+        if a is None: #if not, try with the full name
+            validator = EvaluationAttribute.getNameValidator()
+            names = validator.getNames(attr_name)
+            if names is None:
+                raise TaurusException("Invalid evaluation attribute name %s" % attr_name)
+            fullname = names[0]
+            a = self.eval_attrs.get(fullname, None)
+            if a is None: #if the full name is not there, create one
+                dev = self.getDevice(validator.getDeviceName(attr_name))
+                a = EvaluationAttribute(fullname, parent=dev, storeCallback=self._storeAttr) #use full name
+        return a
+
+    def getConfiguration(self, param):
+        """getConfiguration(param) -> taurus.core.TaurusConfiguration
+
+        Obtain the object corresponding to the given attribute or full name.
+        If the corresponding configuration already exists, the existing instance
+        is returned. Otherwise a new instance is stored and returned.
+
+        @param[in] param taurus.core.TaurusAttribute object or full configuration name
+           
+        @return a taurus.core.TaurusAttribute object
+        @throws TaurusException if the given name is invalid.
+        """
+        if isinstance(param, str):
+            return self._getConfigurationFromName(param)
+        return self._getConfigurationFromAttribute(param)
+
+    def _getConfigurationFromName(self, cfg_name):
+        cfg = self.eval_configs.get(cfg_name, None) #first try with the given name
+        if cfg is None: #if not, try with the full name
+            validator = EvaluationConfiguration.getNameValidator()
+            names = validator.getNames(cfg_name)
+            if names is None:
+                raise TaurusException("Invalid evaluation configuration name %s" % cfg_name)
+            fullname = names[0]
+            cfg = self.eval_configs.get(fullname, None)
+            if cfg is None: #if the full name is not there, create one
+                attr = self.getAttribute(validator.getAttrName(cfg_name))
+                cfg = EvaluationConfiguration(names[0], parent=attr, storeCallback=self._storeConfig) #use full name
+        return cfg
+        
+    def _getConfigurationFromAttribute(self, attr):
+        cfg = attr.getConfig()
+        cfg_name = attrObj.getFullName() + "?configuration"
+        self.eval_configs[cfg_name] = cfg
+        return cfg
+    
+    def _storeDev(self, dev):
+        name = dev.getFullName()
+        exists = self.eval_devs.get(name)
+        if exists is not None:
+            if exists == dev: 
+                self.debug("%s has already been registered before" % name)
+                raise taurus.core.DoubleRegistration
+            else:
+                self.debug("%s has already been registered before with a different object!" % name)
+                raise taurus.core.DoubleRegistration
+        self.eval_devs[name] = dev
+    
+    def _storeAttr(self, attr):
+        name = attr.getFullName()
+        exists = self.eval_attrs.get(name)
+        if exists is not None:
+            if exists == attr: 
+                self.debug("%s has already been registered before" % name)
+                raise taurus.core.DoubleRegistration
+            else:
+                self.debug("%s has already been registered before with a different object!" % name)
+                raise taurus.core.DoubleRegistration
+        self.eval_attrs[name] = attr
+        
+    def _storeConfig(self, fullname, config):
+        #name = config.getFullName()
+        name = fullname
+        exists = self.eval_configs.get(name)
+        if exists is not None:
+            if exists == config: 
+                self.debug("%s has already been registered before" % name)
+                raise taurus.core.DoubleRegistration
+            else:
+                self.debug("%s has already been registered before with a different object!" % name)
+                raise taurus.core.DoubleRegistration
+        self.eval_configs[name] = config
+        
+    def addAttributeToPolling(self, attribute, period, unsubscribe_evts = False):
+        """Activates the polling (client side) for the given attribute with the
+           given period (seconds).
+
+           :param attribute: (taurus.core.tango.TangoAttribute) attribute name.
+           :param period: (float) polling period (in seconds)
+           :param unsubscribe_evts: (bool) whether or not to unsubscribe from events
+        """
+        tmr = self.polling_timers.get(period,taurus.core.TaurusPollingTimer(period))
+        self.polling_timers[period] = tmr
+        tmr.addAttribute(attribute, self.isPollingEnabled())
+        
+    def removeAttributeFromPolling(self, attribute):
+        """Deactivate the polling (client side) for the given attribute. If the
+           polling of the attribute was not previously enabled, nothing happens.
+
+           :param attribute: (str) attribute name.
+        """
+        p = None
+        for period,timer in self.polling_timers.iteritems():
+            if timer.containsAttribute(attribute):
+                timer.removeAttribute(attribute)
+                if timer.getAttributeCount() == 0:
+                    p = period
+                break
+        if p:
+            del self.polling_timers[period]
+            
+
+    
+
+#===============================================================================
+# Just for testing
+#===============================================================================
+def test1():
+    f = EvaluationFactory()
+    d = f.getDevice('eval://dev=foo')
+    a = f.getAttribute('eval://2*bar?bar={sys/tg_test/1/short_scalar}')
+    c = f.getConfiguration('eval://2*{sys/tg_test/1/short_scalar}?configuration=label')
+    cp = a.getConfig()
+    print "FACTORY:", f
+    print "DEVICE:", d
+    print "ATTRIBUTE", a, a.getSimpleName()
+    print "CONFIGURATION", c, c.getSimpleName()
+    print "CONFIGPROXY", cp, cp.getSimpleName()
+    print
+    print c.getValueObj()
+    print c.getUnit()
+    
+
+def test2():
+    import taurus.core
+    a=taurus.Attribute('eval://[{sys/tg_test/1/short_scalar},{sys/tg_test/1/double_scalar}, {sys/tg_test/1/short_scalar}+{sys/tg_test/1/double_scalar}]')
+    #a=taurus.Attribute('eval://2*{sys/tg_test/1/short_scalar}+rand()')  
+    class Dummy:
+        n=0
+        def eventReceived(self, s,t,v):
+            print self.n, v
+            self.n += 1
+    kk = Dummy()
+    a.addListener(kk)
+    while kk.n <= 2:
+        time.sleep(1)
+    a.removeListener(kk)
+#    while kk.n <= 20:
+#        time.sleep(1)        
+    
+def test3():
+    import sys
+    from taurus.qt.qtgui.application import TaurusApplication
+    from taurus.qt.qtgui.panel import TaurusForm
+    from taurus.qt.qtgui.plot import TaurusTrend
+    from taurus.qt.qtgui.display import TaurusLabel
+    app = TaurusApplication()
+    
+    w = TaurusForm()
+#    w=TaurusTrend()
+#    w=TaurusLabel()
+
+    w.setModel(['eval://2*short_scalar?short_scalar={sys/tg_test/1/short_scalar}',
+                'sys/tg_test/1/short_scalar', 'eval://a<100?a={sys/tg_test/1/short_scalar}', 
+                'eval://10*rand()', 'eval://dev=taurus.core.evaluation.dev_example.FreeSpaceDevice;getFreeSpace("/")/1024/1024'])
+#    w.setModel(['eval://2*short_scalar?short_scalar={sys/tg_test/1/short_scalar}'])
+#    w.setModel(['sys/tg_test/1/short_scalar'])
+#    w.setModel('eval://2*{sys/tg_test/1/short_scalar}?configuration=label')
+#    w.setModel('eval://2*{sys/tg_test/1/short_scalar}')
+#    w.setModel('sys/tg_test/1/short_scalar?configuration=label')
+#    w.setModel('sys/tg_test/1/short_scalar')
+
+#    a=w.getModelObj()
+#    print a, a.read().value
+    
+#    a=w.getModelObj()
+#    a.setUnit('asd')
+#    c=a.getConfig()
+
+    w.show()
+    sys.exit(app.exec_())
+
+if __name__ == "__main__":
+    test3()
+    
+        
diff --git a/lib/taurus/core/evaluation/ipap_example.py b/lib/taurus/core/evaluation/ipap_example.py
new file mode 100644
index 0000000..9c07510
--- /dev/null
+++ b/lib/taurus/core/evaluation/ipap_example.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/>.
+##
+#############################################################################
+
+'''
+Examples on using the evaluation scheme for exposing arbitrary non-tango quantities as taurus attributes
+'''
+
+__all__ = ['IcepapDriverParam']
+
+from taurus.core.evaluation import EvaluationDevice
+import re
+import pyIcePAP
+
+class IcepapDriverParam(EvaluationDevice):
+    '''A simple example of usage of the evaluation scheme for 
+    creating an icepap connection device to obtain icepap driver values.
+    
+    Important: note that only those members listed in `_symbols` will be available
+    '''
+    _symbols = ['getAxisParam']
+
+    def __init__(self, *args, **kwargs):
+        ''' Get from Database info the icepap host and port to connect. '''
+        self.call__init__(EvaluationDevice, *args, **kwargs)
+
+        # Get the icepap host and port to connect
+        self.ipap = None
+
+        try:
+            db_name = self.getNameValidator().getDBName(self._full_name)
+            db_name = db_name.replace('eval://','')
+            db_name = db_name.replace('db=','')
+            host,port = db_name.split(':')
+            self.ipap = pyIcePAP.EthIcePAP(host, port)
+            self.ipap.connect()
+        except:
+            pass
+        
+    def getAxisParam(self, axis, param):
+        ''' return the axis parameter value. '''
+        if self.ipap is None or not self.ipap.connected:
+            raise Exception('Not a valid icepap connection')
+        
+        try:
+            value = self.ipap.readParameter(axis, param)
+            return double(value)
+        except:
+            return value
+        
+
+#===============================================================================
+# Just for testing
+#===============================================================================
+
+ATTR_IPAP_POS = 'eval://db=icepap06:5000;dev=taurus.core.evaluation.ipap_example.IcepapDriverParam;getAxisParam(1,"POS")'
+
+def test1():
+    import taurus.core
+    a = taurus.Attribute(ATTR_IPAP_POS)
+    print "axis pos:", a.read().value
+    
+def test2():
+    import sys
+    from taurus.qt.qtgui.application import TaurusApplication
+    from taurus.qt.qtgui.display import TaurusLabel
+    app = TaurusApplication()
+    
+    tl = TaurusLabel()
+    tl.setModel(ATTR_IPAP_POS)
+    tl.show()
+
+    sys.exit(app.exec_())
+    
+if __name__ == "__main__":
+    test1()
+    test2()
diff --git a/lib/taurus/core/release.py b/lib/taurus/core/release.py
index c2ada3f..79c1b18 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 = (2,1,1,'final',0)
+version_info = (2,2,0,'dev',0)
 version = '.'.join(map(str, version_info[:3]))
 revision = str(version_info[4])
 
@@ -65,7 +65,9 @@ It is build on top of PyTango and PyQt."""
 
 license = 'LGPL'
 
-authors = {'Tiago'     : ('Tiago Coutinho','tcoutinho at cells.es'), }
+authors = {'Tiago'          : ('Tiago Coutinho','tcoutinho at cells.es'),
+           'Pascual-Izarra' : ('Carlos Pascual-Izarra','cpascual at cells.es') }
+            
 
 url = 'http://packages.python.org/taurus'
 
diff --git a/lib/taurus/core/simulation/__init__.py b/lib/taurus/core/simulation/__init__.py
index 9d05bef..432c236 100644
--- a/lib/taurus/core/simulation/__init__.py
+++ b/lib/taurus/core/simulation/__init__.py
@@ -24,7 +24,7 @@
 #############################################################################
 
 """
-.. currentmodule:: taurus.core.resources
+.. currentmodule:: taurus.core.simulation
 
 Simulation extension for taurus core mode.
 The simulation extension is a special extension that provides simulation
diff --git a/lib/taurus/core/simulation/simfactory.py b/lib/taurus/core/simulation/simfactory.py
index e0aef69..1d534cf 100644
--- a/lib/taurus/core/simulation/simfactory.py
+++ b/lib/taurus/core/simulation/simfactory.py
@@ -158,11 +158,6 @@ class SimulationConfiguration(taurus.core.TaurusConfiguration):
     def decode(self, value):
         return value
 
-    def _subscribeEvents(self):
-        pass
-        
-    def _unSubscribeEvents(self):
-        pass
     
 class SimulationAttribute(taurus.core.TaurusAttribute):
 
@@ -188,7 +183,7 @@ class SimulationAttribute(taurus.core.TaurusAttribute):
         return False
 
     def getDisplayValue(self,cache=True):
-        return str(self._value.read_value)
+        return str(self._value.value)
 
     def encode(self, value):
         return value
diff --git a/lib/taurus/core/tango/enums.py b/lib/taurus/core/tango/enums.py
index 0659051..d6c5a19 100644
--- a/lib/taurus/core/tango/enums.py
+++ b/lib/taurus/core/tango/enums.py
@@ -25,7 +25,7 @@
 
 """This module contains all basic tango enumerations"""
 
-__all__ = ["TangoObjectType", "SubscriptionState", "EVENT_TO_POLLING_EXCEPTIONS",
+__all__ = ["TangoObjectType", "EVENT_TO_POLLING_EXCEPTIONS",
            "FROM_TANGO_TO_NUMPY_TYPE", "FROM_TANGO_TO_STR_TYPE"]
 
 __docformat__ = "restructuredtext"
@@ -37,9 +37,7 @@ TangoObjectType = taurus.core.util.Enumeration("TangoObjectType",
                                "Attribute","Property","Configuration",
                                "Object"])
 
-SubscriptionState = taurus.core.util.Enumeration("SubscriptionState",
-                              ["Unsubscribed", "Subscribing", "Subscribed", 
-                               "PendingSubscribe"])
+SubscriptionState = taurus.core.SubscriptionState #moved from here to taurus.core. Copied here for backwards compatibility
 
 import numpy
 import PyTango
diff --git a/lib/taurus/core/tango/img/__init__.py b/lib/taurus/core/tango/img/__init__.py
index 2d4fb4b..0ede2a0 100644
--- a/lib/taurus/core/tango/img/__init__.py
+++ b/lib/taurus/core/tango/img/__init__.py
@@ -37,4 +37,5 @@ def registerExtensions():
     factory.registerDeviceClass('PyImageViewer', PyImageViewer)
     factory.registerDeviceClass('ImgGrabber', ImgGrabber)
     factory.registerDeviceClass('ImgBeamAnalyzer', ImgBeamAnalyzer)
-    factory.registerDeviceClass('CCDPVCAM', CCDPVCAM)
\ No newline at end of file
+    factory.registerDeviceClass('CCDPVCAM', CCDPVCAM)
+    factory.registerDeviceClass('Falcon', Falcon)
\ No newline at end of file
diff --git a/lib/taurus/core/tango/img/img.py b/lib/taurus/core/tango/img/img.py
index 407b26f..c643a86 100644
--- a/lib/taurus/core/tango/img/img.py
+++ b/lib/taurus/core/tango/img/img.py
@@ -23,10 +23,11 @@
 ##
 #############################################################################
 
-"""The macroserver submodule. It contains specific part of macroserver"""
+"""The img submodule. It contains specific device implementation for CCDs and
+2D detectors"""
 
 __all__ = ['ImageDevice', 'ImageCounterDevice', 'PyImageViewer', 'ImgGrabber',
-           'CCDPVCAM', 'ImgBeamAnalyzer']
+           'CCDPVCAM', 'ImgBeamAnalyzer', 'Falcon']
 
 __docformat__ = 'restructuredtext'
 
@@ -108,11 +109,34 @@ class ImageCounterDevice(ImageDevice):
             pass
         return self._image_data
 
-
 PyImageViewer = ImageCounterDevice
 ImgGrabber = ImageCounterDevice
 CCDPVCAM = ImageCounterDevice
 
+class Falcon(ImageCounterDevice):
+
+    def __init__(self, name, image_name='image', **kw):
+        self._color = False
+        self.call__init__(ImageCounterDevice, name, image_name=image_name, **kw)
+        self.imgFormat_Attr = self.getAttribute("imageformat")
+        self.imgFormat_Attr.addListener(self)
+    
+    def eventReceived(self, evt_src, evt_type, evt_value):
+        if evt_src == self.getAttribute("imageformat"):
+            if evt_type in (taurus.core.TaurusEventType.Change, taurus.core.TaurusEventType.Periodic):
+                self._color = evt_value.value.lower() == "rgb24"
+                return
+        ImageCounterDevice.eventReceived(self, evt_src, evt_type, evt_value)
+
+    def getImageData(self, names=None):
+        data = ImageCounterDevice.getImageData(self, names=names)
+        if self._color:
+            for k, v in data.items():
+                s = v[1].value.shape
+                v[1].value = v[1].value.reshape((s[0], s[1]/3, 3))
+        return data
+
+
 class ImgBeamAnalyzer(ImageCounterDevice):
     
     def __init__(self, name, image_name='roiimage', **kw):
diff --git a/lib/taurus/core/tango/macroserver/__init__.py b/lib/taurus/core/tango/macroserver/__init__.py
deleted file mode 100644
index f2853f4..0000000
--- a/lib/taurus/core/tango/macroserver/__init__.py
+++ /dev/null
@@ -1,37 +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 package. It contains specific part of tango devices dedicated
-macroserver"""
-
-from macroserver import *
-from macro import *
-
-def registerExtensions():
-    """Registers the macroserver extensions in the :class:`taurus.core.tango.TangoFactory`"""
-    import taurus
-    factory = taurus.Factory('tango')
-    factory.registerDeviceClass('MacroServer', BaseMacroServer)
-    factory.registerDeviceClass('Door', BaseDoor)
\ No newline at end of file
diff --git a/lib/taurus/core/tango/sardana/__init__.py b/lib/taurus/core/tango/sardana/__init__.py
index 3c700a6..576200d 100644
--- a/lib/taurus/core/tango/sardana/__init__.py
+++ b/lib/taurus/core/tango/sardana/__init__.py
@@ -27,4 +27,11 @@
 
 __docformat__ = 'restructuredtext'
 
-from .sardana import *
\ No newline at end of file
+from .sardana import *
+
+def registerExtensions():
+    import pool
+    import macroserver
+    
+    pool.registerExtensions()
+    macroserver.registerExtensions()
\ No newline at end of file
diff --git a/lib/taurus/core/tango/macroserver/macro.py b/lib/taurus/core/tango/sardana/macro.py
similarity index 98%
rename from lib/taurus/core/tango/macroserver/macro.py
rename to lib/taurus/core/tango/sardana/macro.py
index f0580e8..7a41236 100644
--- a/lib/taurus/core/tango/macroserver/macro.py
+++ b/lib/taurus/core/tango/sardana/macro.py
@@ -25,7 +25,8 @@
 
 """The macro submodule."""
 
-__all__ = ["MacroInfo", "Macro", "MacroNode"]
+__all__ = ["MacroInfo", "Macro", "MacroNode", "ParamFactory",
+           "MacroRunException"]
 
 __docformat__ = 'restructuredtext'
 
@@ -39,13 +40,19 @@ import PyTango
 
 from taurus.core.util import etree, USER_NAME, 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):
+    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()
     
@@ -266,6 +273,8 @@ class MacroInfo(object):
                 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:
@@ -273,6 +282,8 @@ class MacroInfo(object):
         else:
             return None
 
+    def __str__(self):
+        return self.name
 
 class Macro(object):
 
diff --git a/lib/taurus/core/tango/macroserver/macroserver.py b/lib/taurus/core/tango/sardana/macroserver.py
similarity index 59%
rename from lib/taurus/core/tango/macroserver/macroserver.py
rename to lib/taurus/core/tango/sardana/macroserver.py
index 60ea32c..d648298 100644
--- a/lib/taurus/core/tango/macroserver/macroserver.py
+++ b/lib/taurus/core/tango/sardana/macroserver.py
@@ -38,35 +38,40 @@ import operator
 import threading
 import time
 import uuid
+import os.path as osp
 
 import PyTango
 
-import taurus
-import taurus.core
-import taurus.core.tango
-import taurus.core.util
-from taurus.core.util import etree
+from taurus import Device, Factory
+from taurus.core import TaurusEventType, TaurusSWDevState, \
+    TaurusSerializationMode
+from taurus.core.util import etree, CodecFactory, CaselessDict, Logger, \
+    EventGenerator, AttributeEventWait
 from taurus.core.util.console import NoColors, TermColors
-import macro
+from taurus.core.tango import TangoDevice
 
-CHANGE_EVTS = (taurus.core.TaurusEventType.Change, taurus.core.TaurusEventType.Periodic)
+from macro import MacroInfo, Macro, MacroNode, ParamFactory
+from sardana import BaseSardanaElementContainer, BaseSardanaElement
 
-class Attr(taurus.core.util.Logger, taurus.core.util.EventGenerator):
+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__(taurus.core.util.Logger, name)
+        self.call__init__(Logger, name)
         event_name = '%s %s' % (dev.getNormalName(), name)
-        self.call__init__(taurus.core.util.EventGenerator, event_name)
+        self.call__init__(EventGenerator, event_name)
         
         self._attr.addListener(self)
         
     def eventReceived(self, src, type, evt_value):
-        if type == taurus.core.TaurusEventType.Error:
+        if type == TaurusEventType.Error:
             self.fireEvent(None)
-        elif type != taurus.core.TaurusEventType.Config:
+        elif type != TaurusEventType.Config:
             if evt_value:
                 self.fireEvent(evt_value.value)
             else:
@@ -78,6 +83,7 @@ class Attr(taurus.core.util.Logger, taurus.core.util.EventGenerator):
     def __getattr__(self, name):
         return getattr(self._attr, name)
 
+
 class LogAttr(Attr):
     
     def __init__(self, dev, name, obj_class, attr, max_buff_size=4096):
@@ -92,7 +98,7 @@ class LogAttr(Attr):
         self._log_buffer = []
     
     def eventReceived(self, src, type, evt_value):
-        if type == taurus.core.TaurusEventType.Change:
+        if type == TaurusEventType.Change:
             if evt_value is None or evt_value.value is None:
                 self.fireEvent(None)
             else:
@@ -103,22 +109,82 @@ class LogAttr(Attr):
                     self.fireEvent(evt_value.value)
 
 
-class MacroServerDevice(taurus.core.tango.TangoDevice):
+class MacroServerDevice(TangoDevice):
     """A class encapsulating a generic macro server device (usually a 
     MacroServer or a Door"""
-
-    def _createAttribute(self, attr_name):
-        attr_name = "%s/%s" % (self.getFullName(), attr_name)
-        return self.factory().getAttribute(attr_name)
-
+    
     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 = taurus.core.util.AttributeEventWait()
+            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', -1))
+        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.setEnvironment('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):
+            mnt_grp_configs[mnt_grp] = \
+                codec.decode(('json', reply.get_data().value),
+                             ensure_ascii=True)[1]
+        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'))
+        if mnt_grps is None:
+            mnt_grps = conf['MntGrpConfigs'].keys()
+        
+        self._door.setEnvironments(env)
+        
+        codec = CodecFactory().getCodec('json')
+        for mnt_grp in mnt_grps:
+            mnt_grp_cfg = conf['MntGrpConfigs'][mnt_grp]
+            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)
+
+
 class BaseDoor(MacroServerDevice):
     """ Class encapsulating Door device functionality."""
 
@@ -143,8 +209,9 @@ class BaseDoor(MacroServerDevice):
     # maximum execution time without user interruption
     InteractiveTimeout = 0.1
     
+    
     def __init__(self, name, **kw):
-        self._log_attr = taurus.core.util.CaselessDict()
+        self._log_attr = CaselessDict()
         self._block_lines = 0
         self._macro_server = None
 
@@ -158,30 +225,26 @@ class BaseDoor(MacroServerDevice):
         self._writeLock = threading.Lock()
         self._env = {}
 
-        self.call__init__(taurus.core.tango.TangoDevice, name, **kw)
+        self.call__init__(MacroServerDevice, name, **kw)
         
         self._old_door_state = PyTango.DevState.UNKNOWN
-        self._old_sw_door_state = taurus.core.TaurusSWDevState.Uninitialized
+        self._old_sw_door_state = TaurusSWDevState.Uninitialized
         
         self.getStateObj().addListener(self.stateChanged)
-        #self._state_attr = Attr(self, "state", None, self.getStateObj())
-        #self._state_attr.subscribeEvent(self.stateChanged)
 
         for log_name in self.log_streams:
-            tg_attr = self._createAttribute(log_name)
+            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
-
-        self._environment_attr = self._createAttribute('Environment')
-        self._environment_attr.addListener(self.environmentChanged)
         
-        #ms = self.macro_server
-        #macro_list_obj = ms.getAttribute("MacroList")
-        #macro_list_obj.addListener(self.macrosChanged)
+        self._environment_attr = attr = self.getAttribute('Environment')
+        attr.setSerializationMode(TaurusSerializationMode.Serial)
+        self._environment_attr.addListener(self.environmentChanged)
+        attr.setSerializationMode(TaurusSerializationMode.Concurrent)
         
         record_data_attr = self.getAttribute('RecordData')
         record_data_attr.addListener(self.recordDataReceived)
@@ -189,9 +252,7 @@ class BaseDoor(MacroServerDevice):
         macro_status_attr = self.getAttribute('MacroStatus')
         macro_status_attr.addListener(self.macroStatusReceived)
         
-        #record_data_attr = self._createAttribute('RecordData')
-        #self._record_data_attr = Attr(self, 'RecordData', None, record_data_attr)
-        #self._record_data_attr.subscribeEvent(self.recordDataReceived)
+        self._experiment_configuration = ExperimentConfiguration(self)
 
     def get_color_mode(self):
         return "NoColor"
@@ -289,7 +350,7 @@ class BaseDoor(MacroServerDevice):
             self.command_inout("Abort")
             return
         
-        evt_wait = taurus.core.util.AttributeEventWait(self.getAttribute("state"))
+        evt_wait = AttributeEventWait(self.getAttribute("state"))
         evt_wait.lock()
         try:
             time_stamp = time.time()
@@ -339,7 +400,7 @@ class BaseDoor(MacroServerDevice):
         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.Macro(self, name, id, macro_xml)
+            self._running_macros[id] = Macro(self, name, id, macro_xml)
         return xml_root
 
     def postRunMacro(self, result, synch):
@@ -384,46 +445,71 @@ class BaseDoor(MacroServerDevice):
         self._running_macro.setResult(result)
     
     def environmentChanged(self, s, t, v):
-        if t not in CHANGE_EVTS: return
+        if t not in CHANGE_EVT_TYPES: return
         return self._processEnvironmentData(v)
-        
+    
+    def setEnvironment(self, name, value):
+        self.setEnvironments({ name : value })
+
+    def setEnvironments(self, obj):
+        obj['__type__'] = 'new'
+        codec = CodecFactory().getCodec('json')
+        self.write_attribute('Environment', codec.encode(('', obj)))
+    
+    def getEnvironment(self, name=None):
+        if name is None:
+            return self._env
+        else:
+            return getattr(self._env, name)
+    
     def _processEnvironmentData(self, data):
         if data is None: return
-        data = data.value
+        # 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 = taurus.core.util.CodecFactory().getCodec(format)
-        obj = codec.decode(data)
-        env_type = obj[1].get("__type__")
-        if env_type == 'set_env':
-            self._env.update(obj[1])
+        codec = CodecFactory().getCodec(format)
+        obj = codec.decode(data, ensure_ascii=True)[1]
+        env_type = obj.get("__type__")
+        if env_type == 'new':
+            self._env.update(obj)
         return obj
     
     def recordDataReceived(self, s, t, v):
-        if t not in CHANGE_EVTS: return
+        if t not in CHANGE_EVT_TYPES: return
         return self._processRecordData(v)
     
     def _processRecordData(self, data):
         if data is None: return
-        data = data.value
+        # 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 = taurus.core.util.CodecFactory().getCodec(format)
+        codec = CodecFactory().getCodec(format)
         return codec.decode(data)
     
     def macroStatusReceived(self, s, t, v):
         if v is None or self._running_macros is None:
             return
-        if t not in CHANGE_EVTS: return
+        if t not in CHANGE_EVT_TYPES: return
 
-        v = v.value
+        # 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 = taurus.core.util.CodecFactory().getCodec(format)
+        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')
@@ -476,320 +562,159 @@ class BaseDoor(MacroServerDevice):
     
     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 MacroServerElement:
+class MacroPath(object):
     
-    CommonReStr = '(?P<alias>\S+)\s+\((?P<id>[^)]+)\)'
-    
-    # The regular expression string to parse from the MacroServer
-    BaseReStr    = CommonReStr + '.+\[(?P<pool_id>[^\)]+)\]'
-    # The compiled regular expression to parse from the MacroServer
-    BaseRe       = re.compile(BaseReStr)
+    def __init__(self, ms):
+        self._ms = weakref.ref(ms)
+        self.refresh()
 
-    # The basic string representation
-    SimpleReprStr = '%(alias)s'
-    # The string representation  
-    ReprStr   = SimpleReprStr + ' (%(id)s) [%(pool_id)s]'
+    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 ]
 
-    def __init__(self, type, from_str):
-        self._type = type
-        m = self.BaseRe.match(from_str)
-        if m is None:
-            raise UnknownMacroServerElementFormat('Unable to parse element ' \
-                                                  'information %s' % from_str)
-        self.__dict__.update(m.groupdict())
 
-    def __repr__(self):
-        return self.SimpleReprStr % self.__dict__
-    
-    def __str__(self):
-        return self.ReprStr % self.__dict__
+class BaseMacroServer(MacroServerDevice):
+    """Class encapsulating Macro Server device functionality."""
     
-    def getName(self):
-        return self.SimpleReprStr % self.__dict__
+    def __init__(self, name, **kw):
+        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)
+    
+    NO_CLASS_TYPES = 'ControllerClass', 'ControllerLib', \
+                     'MacroLib', 'Instrument'
+    
+    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 elem_type == 'MacroClass':
+            obj = self._createMacroClassObject(element_info)
+        else:
+            obj = self._createDeviceObject(element_info)
+        return obj
     
-    def getId(self):
-        return self.id
-
-    def getPoolId(self):
-        return self.pool_id
+    def _createMacroClassObject(self, element_info):
+        return MacroInfo(from_json=element_info._data)
     
-    def getType(self):
-        return self._type
-
-
-class MacroServerElementContainer:
+    def _createDeviceObject(self, element_info):
+        return Factory().getDevice(element_info.full_name)
     
-    def __init__(self):
-        # dict<str, dict> where key is the pool device name and value is:
-        #     dict<str, MacroServerElement> where key is the element alias
-        #                                   and value is the Element object
-        self._pool_elems_dict = taurus.core.util.CaselessDict()
-        
-        # dict<str, dict> where key is the type and value is:
-        #     dict<str, MacroServerElement> where key is the element alias and
-        #                                   value is the Element object
-        self._type_elems_dict = taurus.core.util.CaselessDict()
+    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, e:
+            self.error("Exception occurred processing elements")
+            self.error("Details:", exc_info=1)
+            return set(), set()
+    
+    def _on_elements_changed(self, evt_src, evt_type, evt_value):
+        ret = added, removed = 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
         
-        # dict<str, MacroServerElement> where key is the element alias and value
-        #                               value is the Element object
-        self._name_elems_dict = taurus.core.util.CaselessDict()
+        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)
+        return ret
     
-    def addElement(self, e):
-        pool = e.getPoolId()
-        type = e.getType()
-        name = e.getName()
-        id = e.getId()
-        
-        # update pool_elems
-        if self._pool_elems_dict.has_key(pool):
-            pool_elems = self._pool_elems_dict.get(pool)
-        else:
-            pool_elems = taurus.core.util.CaselessDict()
-            self._pool_elems_dict[pool] = pool_elems
-        pool_elems[name] = e
+    def _addElement(self, element_data):
+        element = BaseSardanaElement(**element_data)
+        self.getElementsInfo().addElement(element)
+        return element
     
-        #update type_elems
-        if self._type_elems_dict.has_key(type):
-            type_elems = self._type_elems_dict.get(type)
-        else:
-            type_elems = taurus.core.util.CaselessDict()
-            self._type_elems_dict[type] = type_elems
-        type_elems[name] = e
-        
-        #update name_elems
-        self._name_elems_dict[name] = e
+    def _removeElement(self, element_data):
+        name = element_data['name']
+        element = self.getElementInfo(name)
+        self.getElementsInfo().removeElement(element)
+        return element
     
-    def removeElement(self, e):
-        pool = e.getPoolId()
-        type = e.getType()
-        name = e.getName()
-        id = e.getId()
-        
-        # update pool_elems
-        pool_elems = self._pool_elems_dict.get(pool)
-        if pool_elems:
-            del pool_elems[name]
-        
-        # update type_elems
-        type_elems = self._type_elems_dict.get(type)
-        if type_elems:
-            del type_elems[name]
-        
-        if self._name_elems_dict.has_key(name):
-            del self._name_elems_dict[name]
+    def getElementsInfo(self):
+        return self._elements
     
-    def removeElementsOfType(self, t):
-        for elem in self.getElementsOfType(t):
-            self.removeElement(elem)
+    def getElements(self):
+        return self.getElementsInfo().getElements()
     
-    def getElementsOfType(self, t):
-        elems = self._type_elems_dict.get(t, {})
-        return elems.values()
+    def getElementInfo(self, name):
+        return self.getElementsInfo().getElement(name)
     
-    def getElementNamesOfType(self, t):
-        elems = self._type_elems_dict.get(t, {})
-        return elems.keys()
+    def getElementNamesOfType(self, elem_type):
+        return self.getElementsInfo().getElementNamesOfType(elem_type)
     
-    def getElementsOfPool(self, pool):
-        elems = self._pool_elems_dict.get(type, {})
-        return elems.values()
-
-    def getElementNamesOfPool(self, pool):
-        elems = self._pool_elems_dict.get(type, {})
-        return elems.keys()
+    def getElementsOfType(self, elem_type):
+        return self.getElementsInfo().getElementsOfType(elem_type)
     
-    def hasElementName(self, elem_name):
-        return self._name_elems_dict.has_key(elem_name)
+    def getElementsOfTypes(self, elem_types):
+        elems = CaselessDict()
+        for elem_type in elem_types:
+            elems.update(self.getElementsOfType(elem_type))
+        return elems
     
-    def getElementObj(self, elem_name):
-        return self._name_elems_dict.get(elem_name)
+    def getExpChannelElements(self):
+        channel_types = "CounterTimer", "ZeroDExpChannel", "OneDExpChannel", \
+            "PseudoCounter"
+        return self.getElementsOfTypes(channel_types)
 
-
-class BaseMacroServer(MacroServerDevice):
-    """Class encapsulating Macro Server device functionality."""
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    # Macro API
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     
-    def __init__(self, name, **kw):
-        # dict<str, taurus.core.tango.TangoAttribute>
-        # key - attribute name
-        # value - taurus tango attribute object
-        self._attr_dict = taurus.core.util.CaselessDict()
-        
-        # dict<str, sequence<object>>
-        # key - type of object ('Macro', 'Type', 'Motor', 'CTExpChannel', etc)
-        # value - sequence of objects of the key type
-        self._obj_dict = taurus.core.util.CaselessDict()
-        self._elems = MacroServerElementContainer()
-        
-        self._type_dict = {}
-        
-        self._macro_dict = {}
-        
-        self.call__init__(taurus.core.tango.TangoDevice, name, **kw)
-
-        macro_list = self.getAttribute("MacroList")
-        #self._attr_dict["MacroList"] = macro_list
-        macro_list.addListener(self.macrosChanged)
-
-        type_list = self.getAttribute("TypeList")
-        #self._attr_dict["TypeList"] = type_list
-        type_list.addListener(self.typesChanged)
-
-    def typesChanged(self, s, t, v):
-        if t not in CHANGE_EVTS: return
-        self.removeTypes()
-        self.addTypes(v.value)
-            
-    def addTypes(self, type_names):
-        dev = self.getHWObj()
-        dev_attr_names = map(str.lower, dev.get_attribute_list())
+    def getMacros(self):
+        return dict(self.getElementsInfo().getElementsOfType('MacroClass'))
 
-        for name in type_names:
-            if self._type_dict.has_key(name):
-                continue
-            
-            self._type_dict[name] = []
-            
-            name = name[:-1]
-            attr_name = '%sList' % name
-            
-            if attr_name.lower() in dev_attr_names:
-                attr = self._createAttribute(attr_name)
-                self._attr_dict[attr_name] = attr
-                attr_list = AttrList(self, name, None, attr)
-                self._obj_dict[name] = attr_list
-                attr_list.subscribeEvent(self.elementsChanged, name)
-
-    def addTypes(self, type_names):
-        dev = self.getHWObj()
-        dev_attr_names = map(str.lower, dev.get_attribute_list())
-
-        for name in type_names:
-            if self._type_dict.has_key(name):
-                continue
-            
-            self._type_dict[name] = []
-            
-            name = name[:-1]
-            attr_name = '%sList' % name
-            
-            if attr_name.lower() in dev_attr_names:
-                attr = self.getAttribute(attr_name)
-                self._attr_dict[attr_name] = attr
-                attr.addListener(self.elementsChanged)
-
-    def removeTypes(self, type_names=None):
-        type_names = type_names or self._type_dict.keys()
-        for type_name in type_names:
-            
-            del self._type_dict[type_name]
-            
-            if not type_name.endswith('*'):
-                return
-
-            name = type_name[:-1]
-            attr_name = '%sList' % name
-            
-            self._elems.removeElementsOfType(name)
-            
-            del_obj = self._attr_dict.pop(name, None)
-            if not del_obj is None:
-                del_obj.removeListener(self.elementsChanged)
-
-    def elementsChanged(self, s, t, v):
-        """Executed when the list of elements of a certain type as changed"""
-        if t not in CHANGE_EVTS: return
-        family = v.name[:-4] # Take the 'List' suffix out
-        self._elems.removeElementsOfType(family)
-        if v.value:
-            for elem_str in v.value:
-                self.addElement(family, elem_str)
-
-    def addElement(self, family, elem_str):
-        elem = MacroServerElement(family, elem_str)
-        self._elems.addElement(elem)
-        return elem
-        
-    def macrosChanged(self, s, t, v):
-        if t == taurus.core.TaurusEventType.Config:
-            return
-        
-        try:
-            old_macro_names = set(self.getMacroStrList())
-        except AttributeError:
-            old_macro_names = set()
-
-        # remove information about all macros. some macros may just have
-        # changed their description, for example, so everything needs to be rebuild
-        self.removeMacros()
-        
-        if t ==  taurus.core.TaurusEventType.Error:
-            return
-        
-        all_macros = v.value
-        self.addMacros(all_macros)
-
-        all_macro_names = set(all_macros)
-        deleted_macro_names = old_macro_names.difference(all_macro_names)
-        new_macro_names = all_macro_names.difference(old_macro_names)
-
-        deleted_macro_nb = len(deleted_macro_names)
-        new_macro_nb = len(new_macro_names)
-
-        if deleted_macro_nb != 0:
-            self.debug('%d macro(s) deleted' % deleted_macro_nb)
-        if new_macro_nb != 0:
-            self.debug('%d new macro(s) available' % new_macro_nb)
-    
-    def addMacros(self, macro_names):
-        json_macros = self.GetMacroInfo(macro_names)
-        for json_macro in json_macros:
-            self.addMacro(json_macro)
-            
-    def removeMacros(self, macro_names=None):
-        if macro_names is None:
-            macro_names = self._macro_dict.keys()
-        
-        for macro_name in macro_names:
-            self.removeMacro(macro_name)
-
-    def addMacro(self, json_macro):
-        macro_info = macro.MacroInfo(from_json_str=json_macro)
-        self._macro_dict[macro_info.name] = macro_info
-        return macro_info
-        
-    def removeMacro(self, macro_name):
-        if self._macro_dict.has_key(macro_name):
-            del self._macro_dict[macro_name]
-    
     def getMacroInfoObj(self, macro_name):
-        return self._macro_dict.get(macro_name)
-    
+        ret = self.getElementInfo(macro_name)
+        assert ret.type == 'MacroClass'
+        return ret
+
     def getMacroStrList(self):
-        return self._macro_dict.keys()
-    
-    def getElementNamesOfType(self, type):
-        return self._elems.getElementNamesOfType(type)
+        return self.getElementNamesOfType('MacroClass')
     
     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 
+        :param macro_name: (str) macro name
         
         :return: (MacroNode)
         
         See Also: fillMacroNodeAddidtionalInfos
         """
         
-        macroNode = macro.MacroNode(name=macro_name)
-        macroInfoObj = self._macro_dict.get(macro_name)
+        macroNode = MacroNode(name=macro_name)
+        macroInfoObj = self.getMacroInfoObj(macro_name)
         if macroInfoObj is None: return
         allowedHookPlaces = []
         for hook in macroInfoObj.hints.get('allowsHooks', []):
@@ -798,11 +723,11 @@ class BaseMacroServer(MacroServerDevice):
         macroNode.setHasParams(macroInfoObj.hasParams())
         paramsInfo = macroInfoObj.getParamList()
         for paramInfo in paramsInfo:
-            param = macro.ParamFactory(paramInfo)
+            param = ParamFactory(paramInfo)
             macroNode.addParam(param)
         return macroNode
     
-    def fillMacroNodeAdditionalInfos(self, macroNode):        
+    def fillMacroNodeAdditionalInfos(self, macroNode):
         """
         This method filles macroNode information which couldn't be stored 
         in XML file.
@@ -811,7 +736,7 @@ class BaseMacroServer(MacroServerDevice):
         
         See Also: getMacroNodeObj
         """
-        macroInfoObj = self._macro_dict.get(macroNode.name())
+        macroInfoObj = self.getMacroInfoObj(macroNode.name())
         if macroInfoObj is None: return
         allowedHookPlaces = []
         for hook in macroInfoObj.hints.get("allowsHooks", []):
@@ -823,7 +748,6 @@ class BaseMacroServer(MacroServerDevice):
             paramList = macroInfoObj.getParamList()
             for paramNode, paramInfo in zip(macroNode.params(), paramList):
                 self.__fillParamNodeAdditionalInfos(paramNode, paramInfo)
-                                
     
     def __fillParamNodeAdditionalInfos(self, paramNode, paramInfo):
         """
@@ -834,7 +758,7 @@ class BaseMacroServer(MacroServerDevice):
         min = paramInfo.get("min")
         paramNode.setMin(min)
         max = paramInfo.get("max")
-        paramNode.setMax(max)    
+        paramNode.setMax(max)
         if isinstance(type,list):
             paramNode.setParamsInfo(type)
             for repeatNode in paramNode.children():
@@ -843,10 +767,17 @@ class BaseMacroServer(MacroServerDevice):
         else:
             paramNode.setType(str(type))
             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():
-    factory = taurus.Factory()
+    """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
new file mode 100644
index 0000000..8ed2c55
--- /dev/null
+++ b/lib/taurus/core/tango/sardana/motion.py
@@ -0,0 +1,494 @@
+#!/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 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 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_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 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):
+        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
+        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 read(self):
+        pass
+
+
+class Motion(BaseMotion):
+    """ A motion object """
+    
+    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<string>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 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):
+        assert len(self.moveable_list) == 1, "for now we support only 'simple' motions!!!!"
+        
+        moveable = self.moveable_list[0]
+        return moveable.move(new_pos, timeout=timeout)
+
+    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 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()    
+    
+    
\ No newline at end of file
diff --git a/lib/taurus/core/tango/sardana/pool.py b/lib/taurus/core/tango/sardana/pool.py
new file mode 100644
index 0000000..0a7d5d9
--- /dev/null
+++ b/lib/taurus/core/tango/sardana/pool.py
@@ -0,0 +1,1531 @@
+#!/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__ = ["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 re
+import thread
+import time
+import operator
+import traceback
+
+from PyTango import DevState, AttrDataFormat, AttrQuality, DevFailed, \
+    DeviceProxy, AttributeProxy
+
+from taurus import Factory
+from taurus.core import TaurusEventType, AttributeNameValidator
+from taurus.core.util import Logger, CaselessDict, CodecFactory, \
+    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 AbortException(Exception):
+    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) 
+
+    - At the object level:
+      self._name_lower - the lower case string name of the object (used for 
+                         __cmp__)
+      self._full_pool_name - the original string coming from the Pool
+      self._pool - the pool object
+    """
+    
+    def __repr__(self):
+        pd = self._pool_data
+        return "{0}({1})".format(pd['type'], pd['full_name'])
+    
+    def __str__(self):
+        return self.getName()
+    
+    def serialize(self):
+        return self._pool_data
+    
+    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._name_lower, o._name_lower)
+    
+    def getName(self):
+        return self._pool_data['name']
+
+    def getPoolObj(self):
+        return self._pool
+
+
+class ControllerClass(BaseElement):
+    
+    def __init__(self, **kw):
+        self.__dict__.update(kw)
+        self._name_lower = self.name
+        self.path, self.fname = os.path.split(self.filename)
+        self.libname, self.ext = os.path.splitext(self.fname)
+        
+        self._str_tuple = self.getName(), self.getType(), self.getLib(), self.getGender()
+
+    def __repr__(self):
+        pd = self._pool_data
+        return "ControllerClass({0})".format(pd['full_name'])
+        
+    def getSimpleFileName(self):
+        return self.fname
+
+    def getFileName(self):
+        return self.filename
+
+    def getClassName(self):
+        return self.getName()
+    
+    def getType(self):
+        return self.getTypes()[0]
+
+    def getTypes(self):
+        return self.type
+
+    def getLib(self):
+        return self.fname
+    
+    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)
+        self._name_lower = self.name
+
+    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.last_val = None
+        return EventGenerator.read(self)
+    
+    def readValue(self, force=False):
+        r = self.read(force=force)
+        if r is None: return None
+        return r
+    
+    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 and wr().isAborted():
+            raise AbortException("aborted when calling %s" % fn.__name__)
+        return fn(*args, **kwargs)
+    return new_fn
+
+
+class PoolElement(BaseElement, TangoDevice):
+    """Base class for a Pool element device."""
+    
+    def __init__(self, name, **kw):
+        """PoolElement initialization."""
+        self._reserved = None
+        self.call__init__(TangoDevice, name, **kw)
+        self._name_lower = self.getName().lower()
+        
+        # dict<string, TangoAttributeEG>
+        # key : the attribute name
+        # value : the corresponding TangoAttributeEG 
+        self._attrEG = CaselessDict()
+                
+        # force the creation of a state attribute
+        self.getStateEG()
+
+        self._str_tuple = self._create_str_tuple()
+
+    def _create_str_tuple(self):
+        return self.getName(), self.getType(), self.getControllerName(), self.getAxis()
+
+    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 _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 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
+    
+    def getStateEG(self):
+        return self._getAttrEG('state')
+    
+    def __cmp__(self,o):
+        return cmp(self._name_lower, o._name_lower)
+
+    def getControllerName(self):
+        return self._pool_data['controller']
+    
+    def getControllerObj(self):
+        return self.getPoolObj().getObj("Controller", self.getControllerName())
+    
+    def getAxis(self):
+        return self._pool_data['axis']
+
+    def getType(self):
+        return self._pool_data['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 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 len(instr_name) == 0: return instr_name
+        #instr_name = instr_name[:instr_name.index('(')]
+        return instr_name
+    
+    def getInstrument(self):
+        instr_name = self.getInstrumentName()
+        if len(instr_name) == 0: 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)
+            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:
+            evt_wait.unlock()
+            evt_wait.disconnect()
+
+    @reservedOperation
+    def go(self, *args, **kwargs):
+        id = self.start(*args, **kwargs)
+        self.waitFinish(id=id)
+
+    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 info(self, tab='    '):
+        msg = [ self.getName() + ":" ]
+        try:
+            state = str(self.state())
+        except:
+            state = traceback.format_exception_only(sys.exc_info()[:2])
+        msg.append(tab + " State: " + state)
+        try:
+            status = self.status().replace('\n', '\n' + tab + 8*' ')
+        except:
+            status = traceback.format_exception_only(sys.exc_info()[:2])
+        msg.append(tab + "Status: " + status)
+        try:
+            position = self.read_attribute("position")
+            pos = str(position.value)
+            if position.quality != AttrQuality.ATTR_VALID:
+                pos += " [" + QUALITY[position.quality] + "]"
+        except:
+            pos = traceback.format_exception_only(*sys.exc_info()[:2])
+        msg.append(tab + "   Pos: " + pos)
+        return "\n".join(msg)
+
+class Controller(PoolElement):
+    """ Class encapsulating Controller functionality."""
+
+    def __init__(self, name, **kw):
+        """PoolElement initialization."""
+        self.call__init__(PoolElement, name, **kw)
+
+    def _create_str_tuple(self):
+        return self.getName(), self.getType(), self.getClassName(), self.getModuleName()
+
+    def getModuleName(self):
+        return self._pool_data['module']
+    
+    def getClassName(self):
+        return self._pool_data['klass']
+    
+    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()
+        lst = pool.getObjList(self.getType())
+        for name, elem in lst.getObjNameDict().items():
+            if elem.getAxis() != axis:
+                continue
+            if elem.getControllerName() != self.getName():
+                continue
+            return elem
+    
+    def getElementByName(self, name):
+        pool = self.getPoolObj()
+        lst = pool.getObjList(self.getType())
+        for name, elem in lst.getObjNameDict().items():
+            if elem.getName() != name:
+                continue
+            if elem.getControllerName() != self.getName():
+                continue
+            return elem
+    
+    def getUsedAxis(self):
+        pool = self.getPoolObj()
+        lst = pool.getObjList(self.getType())
+        axis = []
+        for name, elem in lst.getObjNameDict().items():
+            if elem.getControllerName() != self.getName():
+                continue
+            axis.append(elem.getAxis())
+        return sorted(axis)
+    
+    def getLastUsedAxis(self):
+        return max(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')
+
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    # 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)
+            #self.getPositionObj().write(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):
+        PoolElement.go(self, *args, **kwargs)
+        return self.getStateEG().readValue(), self.readPosition()
+        
+    startMove = PoolElement.start
+    waitMove = PoolElement.waitFinish
+    move = go
+    
+    @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._name_lower:
+            return 0
+        return -1
+    #
+    # End of Moveable interface
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+
+
+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.getPositionObj().write(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):
+        PoolElement.go(self, *args, **kwargs)
+        return self.getStateEG().readValue(), self.readPosition()
+        
+    startMove = PoolElement.start
+    waitMove = PoolElement.waitFinish    
+    move = go   
+    
+    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._name_lower:
+            return 0
+        return -1
+    #
+    # End of Moveable interface
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+
+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._pool_data['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):
+        PoolElement.go(self, *args, **kwargs)
+        return self.getStateEG().readValue(), self.readPosition()
+        
+    startMove = PoolElement.start
+    waitMove = PoolElement.waitFinish
+    move = go
+
+    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
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-    
+
+
+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)
+        
+        # PyTago.AttributeInfoEx
+        self.raw_info = info
+        
+        self.data_type_str = FROM_TANGO_TO_STR_TYPE[self.data_type]
+        
+        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
+        
+    def __getattr__(self, name):
+        return getattr(self.raw_info, 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 = []
+    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_name, ctrl_data in self.controllers.items():
+            for unit_id, unit_data in ctrl_data['units'].items():
+                for channel_name, channel_data in unit_data['channels'].items():
+                    data_source = channel_data['source']
+                    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 = 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']
+            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]
+                        attr_info = TangoChannelInfo(channel_data, tg_attr_info)
+                    except:
+                        import traceback
+                        traceback.print_exc()
+                        self.tango_channels_info_in_error += 1
+                tg_chs_info[channel_name] = dev_name, attr_name, attr_info
+    
+    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 channel_name, attr_data in self.tango_channels_info.items():
+                dev_name, attr_name, attr_info = attr_data
+                if attr_info is not None:
+                    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]
+                    channel_data = self.channels[channel_name]
+                    attr_info = attr_info = TangoChannelInfo(channel_data, tg_attr_info)
+                    attr_data[2] = attr_info
+                    self.tango_channels_info_in_error -= 1
+                except:
+                    continue
+    
+    def getChannelInfo(self, channel_name):
+        return self.tango_channels_info[channel_name]
+    
+    def getChannelsInfo(self):
+        self.prepare()
+        return self.tango_channels_info
+    
+    def getChannelsInfoList(self):
+        ch_info = self.getChannelsInfo()
+        return [ ch_info[ch['name']][2] for ch in self.channel_list ]
+    
+    def getCountersInfoList(self):
+        ch_info = self.getChannelsInfo()
+        ret = []
+        for ch in self.channel_list:
+            ch_name = ch['name']
+            if ch_name != self.timer:
+                ret.append(ch_info[ch_name][2])
+        return ret
+    
+    def read(self):
+        ret = CaselessDict(self.cache)
+        dev_replies = {}
+        for dev_name, 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:
+                continue
+        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['name']] = value
+            except:
+                continue
+        return ret
+
+
+class MeasurementGroup(PoolElement):
+    """ Class encapsulating MeasurementGroup functionality."""
+    
+    def __init__(self, name, **kw):
+        """PoolElement initialization."""
+        self._configuration = None
+        self._channels = 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.getConfiguration().timer
+    
+    def getTimer(self):
+        cfg = self.getConfiguration()
+        return cfg.channels[cfg.timer]
+
+    def getTimerValue(self):
+        return self.getTimerName()
+
+    def getMonitorName(self):
+        return self.getConfiguration().monitor
+
+    def getMonitor(self):
+        cfg = self.getConfiguration()
+        return cfg.channels[cfg.monitor]
+
+    def setTimer(self, timer_name):
+        try:
+            channel = 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['name'] != cfg.timer ]
+    
+    def getChannelNames(self):
+        return [ ch['name'] for ch in self.getChannels() ]
+    
+    def getCounterNames(self):
+        cfg = self.getConfiguration()
+        return [ ch['name'] 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):
+        return self.getConfiguration().read()
+    
+    def getIntegrationTime(self):
+        return self._getAttrValue('IntegrationTime')
+    
+    def getIntegrationTimeObj(self):
+        return self._getAttrEG('IntegrationTime')
+    
+    def setIntegrationTime(self, ctime):
+        self.getIntegrationTimeObj().write(ctime)
+    
+    def _start(self, *args, **kwargs):
+        self.Start()
+    
+    def go(self, *args, **kwargs):
+        cfg = self.getConfiguration()
+        cfg.prepare()
+        duration = args[0]
+        if duration is None or duration == 0:
+            return self.getStateEG().readValue(), self.getValues()
+        self.setIntegrationTime(duration)
+        PoolElement.go(self, *args, **kwargs)
+        return self.getStateEG().readValue(), self.getValues()
+        
+    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)
+        self._name_lower = self.full_name.lower()
+    
+    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
+
+HardwareObjNames   = [
+    'Controller',
+    'ExpChannel', 'ComChannel', 'Motor',
+    'IORegister', 'MotorGroup', 'MeasurementGroup']
+
+HardwareObjTypeNames   = [
+    'Controller',
+    'ComChannel', 'Motor', 'PseudoMotor',
+    'CTExpChannel','ZeroDExpChannel','OneDExpChannel', 'TwoDExpChannel',
+    'PseudoCounter', 'IORegister', 'MotorGroup', 'MeasurementGroup']
+HardwareObjTypeClasses = [globals()[x] for x in HardwareObjTypeNames]
+
+SoftwareObjNames   = ['ControllerClass', 'Instrument']
+
+
+class Pool(TangoDevice, MoveableSource):
+    """ Class encapsulating device Pool functionality."""
+
+    SoftwareObjMap = [ (name, globals()[name]) for name in SoftwareObjNames ]
+    HardwareObjMap = [ (name, globals()[name]) for name in HardwareObjNames ]
+    HardwareObjTypeMap = [ (name, globals()[name]) for name in HardwareObjTypeNames ]
+    
+    def __init__(self, name, **kw):
+        # dict<string, HardwareObjList>
+        # key : the hardware object name
+        # value : the Hardware object list object
+        self._obj_dict = CaselessDict()
+        
+        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', 'ControllerLib', 'Instrument'):
+            klass = globals()[elem_type]
+            kwargs = dict(data)
+            kwargs['_pool_data'] = data
+            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")
+            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'])
+            elements.removeElement(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 getElementsOfType(self, elem_type):
+        return self.getElementsInfo().getElementsOfType(elem_type)
+        
+    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
+        for e_type in elem_type:
+            elems = self.getElementsOfType(e_type)
+            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, cont = 1, True
+            pid = os.getpid()
+            while cont:
+                name = "_mg_ms_{0}_{1}".format(pid, i)
+                if name not in mgs:
+                    cont = False
+                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:
+                    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):
+        self.debug('trying to delete measurement group: %s', name)
+        self.command_inout('DeleteElement', name)
+        elements_info = self.getElementsInfo()
+        return self._wait_for_element_in_container(elements_info, name,
+                                                   contains=False)
+    
+    def createElement(self, name, ctrl, axis=None):
+        ctrl_type = ctrl.getType()
+        if axis is None:
+            axis = ctrl.getLastUsedAxis() + 1
+        else:
+            axis = int(axis)
+        elem_type = ctrl_type
+        if elem_type not in ("Motor", "IORegister", "ComChannel"):
+            elem_type = "ExpChannel"
+        cmd = "Create" + elem_type
+        lst = self.getListObj(elem_type)
+        self.command_inout(cmd, [[axis], [name, ctrl.getName()]])
+        lst.waitEvent(any=True, timeout=0.5)
+        return lst.getObjByName(name)
+
+    def deleteElement(self, name):
+        obj = None
+        for obj_list in self._obj_dict.values():
+            obj = obj_list.getObjByName(name)
+            if obj is not None:
+                break
+        if obj is None:
+            raise Exception("Element %s not found" % name)
+        elem_type = obj.getType()
+        if elem_type not in ("Motor", "IORegister", "ComChannel"):
+            elem_type = "ExpChannel"
+        cmd = "Delete" + elem_type
+        lst = self.getListObj(elem_type)
+        self.command_inout(cmd, name)
+        lst.waitEvent(any=True, timeout=0.5)
+
+    def createController(self, class_name, name, *props):
+        ctrl_class = self.getObj('ControllerClass', class_name)
+        if ctrl_class is None:
+            raise Exception("Controller class %s not found" % class_name)
+        cmd = "CreateController"
+        pars = [ctrl_class.getType(), ctrl_class.getSimpleFileName(), class_name, name]
+        pars.extend(map(str, props))
+        ctrl_list = self.getListObj('Controller')
+        self.command_inout(cmd, pars)
+        ctrl_list.waitEvent(any=True, timeout=0.5)
+        return ctrl_list.getObjByName(name)
+
+    def deleteController(self, name):
+        ctrl_list = self.getListObj('Controller')
+        ctrl = ctrl_list.getObjByName(name)
+        self.command_inout('DeleteController', name)
+        ctrl_list.waitEvent(any=True, timeout=0.5)
+        
+def registerExtensions():
+    factory = Factory()
+    factory.registerDeviceClass("Pool", Pool)
+    for klass_name, klass in Pool.HardwareObjTypeMap:
+        factory.registerDeviceClass(klass_name, klass)
diff --git a/lib/taurus/core/tango/sardana/sardana.py b/lib/taurus/core/tango/sardana/sardana.py
index d1d9542..ba26193 100644
--- a/lib/taurus/core/tango/sardana/sardana.py
+++ b/lib/taurus/core/tango/sardana/sardana.py
@@ -25,21 +25,177 @@
 
 """The sardana submodule. It contains specific part of sardana"""
 
-__all__ = ["Pool", "MacroServer", "Door", "Sardana", "SardanaManager",
-           "PoolElementType", "ControllerClassInfo", "ControllerInfo"]
+__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 socket
 
 import time
-import taurus.core.util
 import PyTango
 
-PoolElementType = taurus.core.util.Enumeration("PoolElementType",
+from taurus.core.util import Enumeration, Singleton, Logger, CaselessDict, \
+    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",
+     "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 owner name ( and value is:
+#        #     dict<str, MacroServerElement> where key is the element alias
+#        #                                   and value is the Element object
+#        self._pool_elems_dict = CaselessDict()
+        
+        # dict<str, dict> where key is the type and value is:
+        #     dict<str, MacroServerElement> where key is the element alias and
+        #                                   value is the Element object
+        self._type_elems_dict = CaselessDict()
+    
+    def addElement(self, e):
+        type = e.getType()
+        
+        #update type_elems
+        if self._type_elems_dict.has_key(type):
+            type_elems = self._type_elems_dict.get(type)
+        else:
+            type_elems = CaselessDict()
+            self._type_elems_dict[type] = type_elems
+        
+        type_elems[e.name] = e
+    
+    def removeElement(self, e):
+        type = e.getType()
+        
+        # update type_elems
+        type_elems = self._type_elems_dict.get(type)
+        if type_elems:
+            del type_elems[e.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._type_elems_dict.get(t, {}).values() ]
+    
+    def hasElementName(self, elem_name):
+        return self.getElement(elem_name) != None
+    
+    def getElement(self, elem_name):
+        for elems in self._type_elems_dict.values():
+            elem = elems.get(elem_name)
+            if elem is not None:
+                return elem
+    
+    def getElements(self):
+        ret = set()
+        for elems in self._type_elems_dict.values():
+            ret.update(elems.values())
+        return ret
+    
+    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
@@ -59,7 +215,12 @@ class PropertyInfo():
     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):
@@ -125,6 +286,11 @@ class ControllerClassInfo(object):
         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):
@@ -162,6 +328,11 @@ class ControllerInfo(object):
     
         return properties
 
+#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+# 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):
@@ -210,6 +381,11 @@ class Pool(object):
         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):
@@ -255,6 +431,11 @@ class MacroServer(object):
     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):
@@ -262,6 +443,11 @@ class Door(object):
         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):
@@ -375,6 +561,11 @@ class Sardana(object):
     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"""
     
@@ -417,7 +608,12 @@ class DatabaseSardana(object):
     def get_database(self):
         return self._db
 
-class SardanaManager(taurus.core.util.Singleton, taurus.core.util.Logger):
+#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+# 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."""
@@ -427,7 +623,7 @@ class SardanaManager(taurus.core.util.Singleton, taurus.core.util.Logger):
         """Singleton instance initialization.
            **For internal usage only**"""
         name = self.__class__.__name__
-        self.call__init__(taurus.core.util.Logger, name)
+        self.call__init__(Logger, name)
         self._db_sardanas = {}
         
     def _get_db_sardana(self, db=None):
diff --git a/lib/taurus/core/tango/tangoattribute.py b/lib/taurus/core/tango/tangoattribute.py
index 4d50739..cb53fad 100644
--- a/lib/taurus/core/tango/tangoattribute.py
+++ b/lib/taurus/core/tango/tangoattribute.py
@@ -36,9 +36,10 @@ import threading
 import PyTango
 
 import taurus.core
-from taurus.core import TaurusEventType
+from taurus.core import TaurusEventType, TaurusSerializationMode, \
+    SubscriptionState
 from taurus.core.util import EventListener
-from enums import SubscriptionState, EVENT_TO_POLLING_EXCEPTIONS
+from enums import EVENT_TO_POLLING_EXCEPTIONS
 
 DataType = PyTango.CmdArgType
 
@@ -182,7 +183,10 @@ class TangoAttribute(taurus.core.TaurusAttribute):
             elif PyTango.is_int_type(type):
                 attrvalue = int(value)
             elif type == DataType.DevBoolean:
-                attrvalue = bool(value)
+                try:
+                    attrvalue = bool(int(value))
+                except:
+                    attrvalue = str(value).lower() == 'true'
             elif type == DataType.DevUChar:
                 attrvalue = chr(value)
             elif type == DataType.DevState:
@@ -320,25 +324,28 @@ class TangoAttribute(taurus.core.TaurusAttribute):
             If it is the first element and Polling is enabled starts the 
             polling mechanism.
             If the listener is already registered nothing happens."""
-        
         cfg = self._getRealConfig()
         cfg.addListener(listener)
         
+        listeners = self._listeners
         initial_subscription_state = self.__subscription_state
 
         ret = taurus.core.TaurusAttribute.addListener(self, listener)
-
         if not ret:
             return ret
         
-        assert len(self._listeners) >= 1
+        assert len(listeners) >= 1
         
-        if self.__subscription_state == SubscriptionState.Unsubscribed and len(self._listeners) == 1:
+        if self.__subscription_state == SubscriptionState.Unsubscribed and len(listeners) == 1:
             self._subscribeEvents()
         
         #if initial_subscription_state == SubscriptionState.Subscribed:
-        if len(self._listeners) > 1 and (initial_subscription_state == SubscriptionState.Subscribed or self.isPollingActive()):
-            taurus.Manager().addJob(self.__fireRegisterEvent, None, (listener,))
+        if len(listeners) > 1 and (initial_subscription_state == SubscriptionState.Subscribed or self.isPollingActive()):
+            sm = self.getSerializationMode()
+            if sm == TaurusSerializationMode.Concurrent:
+                taurus.Manager().addJob(self.__fireRegisterEvent, None, (listener,))
+            else:
+                self.__fireRegisterEvent((listener,))
         return ret
         
     def removeListener(self, listener):
@@ -348,7 +355,7 @@ class TangoAttribute(taurus.core.TaurusAttribute):
         ret = taurus.core.TaurusAttribute.removeListener(self, listener)
 
         cfg = self._getRealConfig()
-        cfg.addListener(listener)
+        cfg.removeListener(listener)
         
         if not ret:
             return ret
@@ -366,7 +373,7 @@ class TangoAttribute(taurus.core.TaurusAttribute):
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-    
 
     def setConfigEx(self,config):
-        self.getParentObj().set_attribute_config_ex([config])
+        self.getParentObj().set_attribute_config([config])
 
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     # PyTango event handling (private) 
@@ -422,20 +429,23 @@ class TangoAttribute(taurus.core.TaurusAttribute):
                 self._dev_hw_obj.unsubscribe_event(self.__chg_evt_id)
                 self.__chg_evt_id = None
             except PyTango.DevFailed, df:
-                self.debug("Failed: %s" % df[0].desc)
-                self.trace(str(df))
+                if len(df.args) and df[0].reason == 'API_EventNotFound':
+                    # probably tango shutdown as been initiated before and it
+                    # unsubscribed from events itself
+                    pass
+                else:
+                    self.debug("Failed: %s" % df[0].desc)
+                    self.trace(str(df))
         self._deactivatePolling()
         self.__subscription_state = SubscriptionState.Unsubscribed
     
-    #def push_event(self, event):
-    #    taurus.Manager().addJob(self._push_event, None, event)
-        
     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 = taurus.Manager()
+        sm = self.getSerializationMode()
         if not event.err:
             self.__attr_value, self.__attr_err, self.__attr_timestamp = self.decode(event.attr_value), None, curr_time
             self.__subscription_state = SubscriptionState.Subscribed
@@ -443,8 +453,12 @@ class TangoAttribute(taurus.core.TaurusAttribute):
             if not self.isPollingForced():
                 self._deactivatePolling()
             listeners = tuple(self._listeners)
-            manager.addJob(self.fireEvent, None, taurus.core.TaurusEventType.Change, self.__attr_value, listeners=listeners)
-            #self.fireEvent(taurus.core.TaurusEventType.Change, self.__attr_value)
+            if sm == TaurusSerializationMode.Concurrent:
+                manager.addJob(self.fireEvent, None, TaurusEventType.Change,
+                               self.__attr_value, listeners=listeners)
+            else:
+                self.fireEvent(TaurusEventType.Change, self.__attr_value,
+                               listeners=listeners)
         elif event.errors[0].reason in EVENT_TO_POLLING_EXCEPTIONS:
             if self.isPollingActive():
                 return
@@ -456,8 +470,12 @@ class TangoAttribute(taurus.core.TaurusAttribute):
             self.__subscription_event.set()
             self._deactivatePolling()
             listeners = tuple(self._listeners)
-            manager.addJob(self.fireEvent, None, taurus.core.TaurusEventType.Error, self.__attr_err, listeners=listeners)
-            #self.fireEvent(taurus.core.TaurusEventType.Error, self.__attr_err)
+            if sm == TaurusSerializationMode.Concurrent:
+                manager.addJob(self.fireEvent, None, TaurusEventType.Error,
+                               self.__attr_err, listeners=listeners)
+            else:
+                self.fireEvent(TaurusEventType.Error, self.__attr_err,
+                               listeners=listeners)
 
     def isInformDeviceOfErrors(self):
         return False
@@ -482,6 +500,6 @@ class TangoAttributeEventListener(EventListener):
         attr.addListener(self)
         
     def eventReceived(self, s, t, v):
-        if t not in (taurus.core.TaurusEventType.Change, taurus.core.TaurusEventType.Periodic):
+        if t not in (TaurusEventType.Change, TaurusEventType.Periodic):
             return
         self.fireEvent(v.value)
diff --git a/lib/taurus/core/tango/tangoconfiguration.py b/lib/taurus/core/tango/tangoconfiguration.py
index 3cad65a..2b6ee35 100644
--- a/lib/taurus/core/tango/tangoconfiguration.py
+++ b/lib/taurus/core/tango/tangoconfiguration.py
@@ -95,9 +95,6 @@ class TangoConfiguration(taurus.core.TaurusConfiguration):
         the attribute data type
         value must be a valid """
         return value
-    
-    def decode(self, value):
-        return value
 
     def getValueObj(self, cache=True):
         """ Returns the current configuration for the attribute.
@@ -202,6 +199,9 @@ class TangoConfiguration(taurus.core.TaurusConfiguration):
         i.cwarnings = [i.alarms.min_warning, i.alarms.max_warning]
         i.cranges = [i.min_value, i.min_alarm, i.alarms.min_warning,
                     i.alarms.max_warning, i.max_alarm, i.max_value]
+        i.range = [i.min_value, i.max_value]
+        i.alarm = [i.min_alarm, i.max_alarm]
+        i.warning = [i.alarms.min_warning, i.alarms.max_warning]
         # add dev_name, dev_alias, attr_name, attr_full_name
         i.dev_name = self._getDev().getNormalName()
         i.dev_alias = self._getDev().getSimpleName()
@@ -240,4 +240,163 @@ class TangoConfiguration(taurus.core.TaurusConfiguration):
     #def _push_event(self, event):
     #    """ Notify listeners when event received"""
     #    self.fireEvent(taurus.core.TaurusEventType.Config, self._attr_info)
+    
+    #===========================================================================
+    # Some methods reimplemented from TaurusConfiguration
+    #===========================================================================
+    
+    def getMaxDimX(self, cache=True):
+        c = self.getValueObj(cache=cache)
+        if c:
+            return c.max_dim_x
+        return None
+
+    def getMaxDimY(self, cache=True):
+        c = self.getValueObj(cache=cache)
+        if c:
+            return c.max_dim_y
+        return None
+    
+    def getType(self, cache=True):
+        c = self.getValueObj(cache=cache)
+        if c:
+            return c.data_type
+        return None
+    
+    def getRange(self, cache=True):
+        return self.getLimits(cache=cache)
+    
+    def getLimits(self, cache=True):
+        c = self.getValueObj(cache=cache)
+        if c:
+            return c.climits
+        return None
+    
+    def getRanges(self, cache=True):
+        c = self.getValueObj(cache=cache)
+        if c:
+            return list(c.cranges)
+        return None
+    
+    def getMinAlarm(self, cache=True):
+        c = self.getValueObj(cache=cache)
+        if c:
+            return c.min_alarm
+        return None
+
+    def getMaxAlarm(self, cache=True):
+        c = self.getValueObj(cache=cache)
+        if c:
+            return c.max_alarm
+        return None
         
+    def getAlarms(self, cache=True):
+        c = self.getValueObj(cache=cache)
+        if c:
+            return list(c.calarms)
+        return None
+    
+    def getMinWarning(self, cache=True):
+        c = self.getValueObj(cache=cache)
+        if c:
+            return c.alarms.min_warning
+        return None
+
+    def getMaxWarning(self, cache=True):
+        c = self.getValueObj(cache=cache)
+        if c:
+            return c.alarms.max_warning
+        return None
+        
+    def getWarnings(self, cache=True):
+        c = self.getValueObj(cache=cache)
+        if c:
+            return list(c.cwarnings)
+        return None
+    
+    def getParam(self, param_name):
+        config = self.getValueObj()
+        if config:
+            if param_name.endswith('warning') or param_name.endswith('alarm'):
+                config = config.alarms
+            try:
+                return getattr(config, param_name)
+            except:
+                return None
+            
+    def setParam(self, param_name, value):
+        config = self.getValueObj()
+        if config is None:
+            return
+        if param_name.endswith('warning') or param_name.endswith('alarm'):
+            config = config.alarms
+        setattr(config, param_name, value)
+        self._applyConfig()
+    
+    def setDescription(self,descr):
+        config = self.getValueObj()
+        if config:
+            config.description = description
+            self._applyConfig()
+
+    def setLabel(self,lbl):
+        config = self.getValueObj()
+        if config:
+            config.label = lbl
+            self._applyConfig()
+
+    def setUnit(self,unit):
+        config = self.getValueObj()
+        if config:
+            config.unit = unit
+            self._applyConfig()
+
+    def setStandardUnit(self,standard_unit):
+        config = self.getValueObj()
+        if config:
+            config.standard_unit = standard_unit
+            self._applyConfig()
+        
+    def setDisplayUnit(self,display_unit):
+        config = self.getValueObj()
+        if config:
+            config.display_unit = display_unit
+            self._applyConfig()
+    
+    def setFormat(self,fmt):
+        config = self.getValueObj()
+        if config:
+            config.format = fmt
+            self._applyConfig()
+        
+    def setLimits(self,low, high):
+        config = self.getValueObj()
+        if config:
+            l_str, h_str = str(low), str(high)
+            config.cranges[0] = config.min_value = l_str
+            config.cranges[5] = config.max_value = h_str
+            config.climits = [l_str, h_str]
+            self._applyConfig()
+
+    def setWarnings(self,low, high):
+        config = self.getValueObj()
+        if config:
+            l_str, h_str = str(low), str(high)
+            config.cranges[2] = config.alarms.min_warning = l_str
+            config.cranges[3] = config.alarms.max_warning = h_str
+            config.cwarnings = [l_str, h_str]
+            self._applyConfig()
+
+    def setAlarms(self,low, high):
+        config = self.getValueObj()
+        if config:
+            l_str, h_str = str(low), str(high)
+            config.cranges[1] = config.min_alarm = config.alarms.min_alarm = l_str
+            config.cranges[4] = config.max_alarm = config.alarms.max_alarm = h_str
+            config.calarms = [l_str, h_str]
+            self._applyConfig()
+    
+    def _applyConfig(self):
+        config = self.getValueObj()
+        if config:
+            self.getParentObj().setConfigEx(config)
diff --git a/lib/taurus/core/tango/tangodatabase.py b/lib/taurus/core/tango/tangodatabase.py
index de9c923..6324d78 100644
--- a/lib/taurus/core/tango/tangodatabase.py
+++ b/lib/taurus/core/tango/tangodatabase.py
@@ -97,9 +97,8 @@ class TangoDevInfo(taurus.core.TaurusDevInfo):
             for attr_info in attr_info_list:
                 full_name = "%s/%s" % (self.fullName(), attr_info.name)
                 attr_obj = taurus.core.TaurusAttrInfo(self.container(), 
-                                                      name=attr_info.name.lower(),
-                                                      full_name=full_name.lower(),
-                                                      device=self, info=attr_info) 
+                    name=attr_info.name.lower(), full_name=full_name.lower(),
+                    device=self, info=attr_info)
                 attrs.append(attr_obj)
             attrs = sorted(attrs, key=lambda attr : attr.name())
         except PyTango.DevFailed, df:
diff --git a/lib/taurus/core/tango/tangodevice.py b/lib/taurus/core/tango/tangodevice.py
index bdad8da..7e82e05 100644
--- a/lib/taurus/core/tango/tangodevice.py
+++ b/lib/taurus/core/tango/tangodevice.py
@@ -33,7 +33,7 @@ import time
 import PyTango
 
 import taurus.core
-from taurus.core import TaurusSWDevState
+from taurus.core import TaurusSWDevState, TaurusLockInfo, LockStatus
 
 DFT_TANGO_DEVICE_DESCRIPTION = "A TANGO device"
 
@@ -64,7 +64,54 @@ class TangoDevice(taurus.core.TaurusDevice):
         except PyTango.DevFailed, e:
             self.warning('Could not create HW object: %s' % (e[0].desc))
             self.traceback()
+            
+    def isValidDev(self):
+        '''see: :meth:`TaurusDevice.isValid`'''
+        return self._deviceObj is not None
+
+    def lock(self, force=False):
+        li = self.getLockInfo()
+        if force:
+            if self.getLockInfo().status == LockInfo.Locked:
+                self.unlock(force=True)
+        return self.getHWObj().lock()
 
+    def unlock(self, force=False):
+        return self.getHWObj().unlock(force)
+    
+    def getLockInfo(self, cache=False):
+        lock_info = self._lock_info
+        if cache and lock_info.status != LockStatus.Unknown:
+            return lock_info
+        try:
+            dev = self.getHWObj()
+            li = PyTango.LockerInfo()
+            locked = dev.get_locker(li)
+            msg = "%s " % self.getSimpleName()
+            if locked:
+                lock_info.id = pid = li.li
+                lock_info.language = li.ll
+                lock_info.host = host = li.locker_host
+                lock_info.klass = li.locker_class
+                if dev.is_locked_by_me():
+                    status = LockStatus.LockedMaster
+                    msg += "is locked by you!"
+                else:
+                    status = LockStatus.Locked
+                    msg += "is locked by PID %s on %s" % (pid, host)
+            else:
+                lock_info.id = None
+                lock_info.language = None
+                lock_info.host = host = None
+                lock_info.klass = None
+                status = LockStatus.Unlocked
+                msg += "is not locked"
+            lock_info.status = status
+            lock_info.status_msg = msg
+        except:
+            self._lock_info = lock_info = TaurusLockInfo()
+        return lock_info
+    
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     # Protected implementation
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
@@ -139,19 +186,20 @@ class TangoDevice(taurus.core.TaurusDevice):
         return DFT_TANGO_DEVICE_DESCRIPTION
 
     def poll(self, attrs):
-        attr_names = [ a.getSimpleName() for a in attrs ]
+        '''optimized by reading of multiple attributes in one go'''
         t = time.time()
         try:
-            result = self.read_attributes(attr_names)
+            result = self.read_attributes(attrs.keys())
         except PyTango.DevFailed, e:
-            for attr in attrs:
+            for attr in attrs.values():
                 attr.poll(single=False, value=None, error=e, time=t)
             return
         
         for i, da in enumerate(result):
-            attr = attrs[i]
             if da.has_failed:
                 v, err = None, PyTango.DevFailed(*da.get_err_stack())
             else:
                 v, err = da, None
+            attr = attrs[da.name]
             attr.poll(single=False, value=v, error=err, time=t)
+            
diff --git a/lib/taurus/core/tango/tangofactory.py b/lib/taurus/core/tango/tangofactory.py
index 6949e55..291c2ed 100644
--- a/lib/taurus/core/tango/tangofactory.py
+++ b/lib/taurus/core/tango/tangofactory.py
@@ -29,7 +29,9 @@ __all__ = ["TangoFactory"]
 
 __docformat__ = "restructuredtext"
 
-import os, threading
+import sys
+import os
+import threading
 import PyTango
 
 import taurus.core
@@ -47,7 +49,7 @@ _StateAttribute = tangoattribute.TangoStateAttribute
 _Device = tangodevice.TangoDevice
 _Configuration = tangoconfiguration.TangoConfiguration
 
-class DoubleRegistration(Exception): pass
+from taurus.core import DoubleRegistration
 
 class TangoFactory(taurus.core.util.Singleton, taurus.core.TaurusFactory, taurus.core.util.Logger):
     """A Singleton class designed to provide Tango related objects.
@@ -130,6 +132,34 @@ class TangoFactory(taurus.core.util.Singleton, taurus.core.TaurusFactory, taurus
         for k,v in self.tango_db.items():          v.cleanUp()
         self.reInit()
 
+    def getExistingAttributes(self):
+        """Returns a new dictionary will all registered attributes on this factory
+           
+           :return:  dictionary will all registered attributes on this factory
+           :rtype: dict"""
+        return dict(self.tango_attrs)
+
+    def getExistingDevices(self):
+        """Returns a new dictionary will all registered devices on this factory
+           
+           :return:  dictionary will all registered devices on this factory
+           :rtype: dict"""
+        return dict(self.tango_devs)
+
+    def getExistingDatabases(self):
+        """Returns a new dictionary will all registered databases on this factory
+           
+           :return:  dictionary will all registered databases on this factory
+           :rtype: dict"""
+        return dict(self.tango_db)
+
+    def getExistingConfigurations(self):
+        """Returns a new dictionary will all registered configurations on this factory
+           
+           :return:  dictionary will all registered configurations on this factory
+           :rtype: dict"""
+        return dict(self.tango_configs)
+
     def set_default_tango_host(self, tango_host):
         """Sets the new default tango host.
         
@@ -203,9 +233,8 @@ class TangoFactory(taurus.core.util.Singleton, taurus.core.TaurusFactory, taurus
                 objType = _Attribute
             elif _Configuration.isValid(absolute_name, MatchLevel.SHORT):
                 objType = _Configuration
-        except Exception, e:
-            self.debug("Not able to find Object class for %s" % absolute_name)
-            self.traceback()
+        except:
+            self.debug("Not able to find Object class for %s" % absolute_name, exc_info=1)
         return objType
 
     def getDatabase(self, db_name = None):
@@ -232,13 +261,12 @@ class TangoFactory(taurus.core.util.Singleton, taurus.core.TaurusFactory, taurus
                         validator = _Database.getNameValidator()
                         params = validator.getParams(db_name)
                         if params is None:
-                            raise TaurusException("Invalid default database name %s." % db_name)
+                            raise TaurusException("Invalid default Tango database name %s" % db_name)
                         host, port = params.get('host'),params.get('port')
                         self.dft_db = _Database(host,port)
-                except Exception, e:
-                    msg = "Could not create Database: %s" % str(e)
-                    self.debug(msg)
-                    raise TaurusException(msg)
+                except:
+                    self.debug("Could not create Database", exc_info=1)
+                    raise
                 db_name = self.dft_db.getFullName()
                 self.tango_db[db_name] = self.dft_db
             ret = self.dft_db
@@ -249,14 +277,12 @@ class TangoFactory(taurus.core.util.Singleton, taurus.core.TaurusFactory, taurus
             validator = _Database.getNameValidator()
             params = validator.getParams(db_name)
             if params is None:
-                raise TaurusException("Invalid database name %s." % db_name)
+                raise TaurusException("Invalid Tango database name %s" % db_name)
             host, port = params.get('host'),params.get('port')
             try:
                 ret = _Database(host,port)
-            except Exception:
-                msg = "Could not create Database %s:%s" % (host,port)
-                self.debug(msg)
-                raise TaurusException(msg)
+            except:
+                self.debug("Could not create Database %s:%s", host, port, exc_info=1)
             
             self.tango_db[db_name] = ret
         return ret 
@@ -290,7 +316,7 @@ class TangoFactory(taurus.core.util.Singleton, taurus.core.TaurusFactory, taurus
         params = validator.getParams(dev_name)
         
         if params is None:
-            raise TaurusException("Invalid device name %s." % dev_name)
+            raise TaurusException("Invalid Tango device name %s" % dev_name)
         
         host,port = params.get('host'),params.get('port')
         db = None
@@ -309,12 +335,12 @@ class TangoFactory(taurus.core.util.Singleton, taurus.core.TaurusFactory, taurus
                 alias = db.get_alias(dev_name)
                 if alias and alias.lower() == taurus.core.InvalidAlias:
                     alias = None 
-            except Exception:
+            except:
                 alias = None
         else:
             try:
                 dev_name = db.get_device_alias(alias)
-            except Exception:
+            except:
                 raise TaurusException("Device %s is not defined in %s." % (alias,db.getFullName()))
 
         full_dev_name = db.getFullName() + "/" + dev_name
@@ -333,11 +359,9 @@ class TangoFactory(taurus.core.util.Singleton, taurus.core.TaurusFactory, taurus
                 # so there is no need to do it here
             except DoubleRegistration:
                 d = self.tango_devs.get(full_dev_name)
-            except Exception, e:
-                self.debug("Error creating device %s", dev_name)
-                import traceback
-                traceback.print_exc()
-                raise e
+            except:
+                self.debug("Error creating device %s", dev_name, exc_info=1)
+                raise
         return d
 
     def getAttribute(self,attr_name, **kwargs):
@@ -362,7 +386,7 @@ class TangoFactory(taurus.core.util.Singleton, taurus.core.TaurusFactory, taurus
         params = validator.getParams(attr_name)
         
         if params is None:
-            raise TaurusException("Invalid attribute name %s." % attr_name)
+            raise TaurusException("Invalid Tango attribute name %s" % attr_name)
         
         host,port = params.get('host'),params.get('port')
         
@@ -406,9 +430,9 @@ class TangoFactory(taurus.core.util.Singleton, taurus.core.TaurusFactory, taurus
                         # so there is no need to do it here
                     except DoubleRegistration:
                          attr = self.tango_attrs.get(full_attr_name)
-            except Exception, e:
-                self.debug("Error creating attribute %s", attr_name)
-                raise e
+            except:
+                self.debug("Error creating attribute %s", attr_name, exc_info=1)
+                raise
         return attr
 
     def getAttributeInfo(self,full_attr_name):
@@ -466,7 +490,7 @@ class TangoFactory(taurus.core.util.Singleton, taurus.core.TaurusFactory, taurus
         params = validator.getParams(cfg_name)
                 
         if params is None:
-            raise taurus.core.TaurusException("Invalid configuration name %s." % cfg_name)
+            raise taurus.core.TaurusException("Invalid Tango configuration name %s" % cfg_name)
         
         host,port = params.get('host'),params.get('port')
         db = None
@@ -501,10 +525,10 @@ class TangoFactory(taurus.core.util.Singleton, taurus.core.TaurusFactory, taurus
         exists = self.tango_devs.get(name)
         if not exists is None:
             if exists == dev: 
-                self.debug("%s as already been registered before" % name)
+                self.debug("%s has already been registered before" % name)
                 raise DoubleRegistration
             else:
-                self.debug("%s as already been registered before with a different object!" % name)
+                self.debug("%s has already been registered before with a different object!" % name)
                 raise DoubleRegistration
         self.tango_devs[name] = dev
         if not alias is None and len(alias): 
@@ -515,42 +539,157 @@ class TangoFactory(taurus.core.util.Singleton, taurus.core.TaurusFactory, taurus
         exists = self.tango_attrs.get(name)
         if not exists is None:
             if exists == attr: 
-                self.debug("%s as already been registered before" % name)
+                self.debug("%s has already been registered before" % name)
                 raise DoubleRegistration
             else:
-                self.debug("%s as already been registered before with a different object!" % name)
+                self.debug("%s has already been registered before with a different object!" % name)
                 raise DoubleRegistration
         self.tango_attrs[name] = attr
         
-    def getExistingAttribute(self,full_attr_name):
+    def getExistingAttribute(self, attr_name):
         """Returns a registered attribute or None if the corresponding attribute
            as not been registered. This is used mainly to avoid recursion between 
            two objects supplied by this factory which can ask for the other object 
            in the constructor.
         
-           :param full_attr_name: (str) full attribute name
+           :param attr_name: (str) attribute name
            :return: (taurus.core.tango.TangoAttribute or None) attribute object or None
            """
+        attr = self.tango_attrs.get(attr_name)
+
+        if attr is not None:
+            return attr
+        
+        # Simple approach did not work. Lets build a proper device name
+        if attr_name.lower().startswith("tango://"):
+            attr_name = attr_name[8:]
+        validator = _Attribute.getNameValidator()
+        params = validator.getParams(attr_name)
+        
+        if params is None:
+            raise TaurusException("Invalid Tango attribute name %s" % attr_name)
+        
+        host,port = params.get('host'),params.get('port')
+        
+        db = None
+        if host is None or port is None:
+            db = self.getDatabase()
+            host, port = db.get_db_host(), db.get_db_port()
+        else:
+            db_name = "%s:%s" % (host,port)
+            db = self.getDatabase(db_name)
+        
+        dev_name = params.get('devicename')
+        
+        if dev_name is None:
+            dev = self.getDevice(params.get('devalias'))
+            dev_name = dev.getFullName()
+        else:
+            dev_name = db.getFullName() + "/" + dev_name
+
+        attr_name = params.get('attributename')
+        full_attr_name = dev_name + "/" + attr_name
+         
         attr = self.tango_attrs.get(full_attr_name)
-        if attr is None:
-            return None
         return attr
     
-    def getExistingDevice(self,full_device_name):
+    def getExistingDevice(self, dev_name):
         """Returns a registered device or None if the corresponding device
            as not been registered. This is used mainly to avoid recursion between 
            two objects supplied by this factory which can ask for the other object 
            in the constructor.
         
-           :param full_device_name: (str) full device name
+           :param dev_name: (str) tango device name or tango alias for the device.
+                            It should be formed like: <host>:<port>/<tango device name>
+                            - If <host>:<port> is ommited then it will use the 
+                            default database.
+                            - <tango device name> can be full tango device name 
+                            (_/_/_) or a device alias.
            :return: (taurus.core.tango.TangoDevice or None) device object or None
         """
+
+        d = self.tango_devs.get(dev_name)
+        if d is None:
+            d = self.tango_alias_devs.get(dev_name)
+        if d is not None:
+            return d
         
-        dev = self.tango_devs.get(full_device_name)
-        if dev is None:
-            return None
-        return dev
+        # Simple approach did not work. Lets build a proper device name
+        if dev_name.lower().startswith("tango://"):
+            dev_name = dev_name[8:]
+        
+        validator = _Device.getNameValidator()
+        params = validator.getParams(dev_name)
+        
+        if params is None:
+            raise TaurusException("Invalid Tango device name %s" % dev_name)
         
+        host,port = params.get('host'),params.get('port')
+        db = None
+        if host is None or port is None:
+            db = self.getDatabase()
+            host, port = db.get_db_host(), db.get_db_port()
+        else:
+            db_name = "%s:%s" % (host,port)
+            db = self.getDatabase(db_name)
+            
+        dev_name = params.get('devicename')
+        alias = params.get('devalias')
+        
+        if dev_name:
+            try:
+                alias = db.get_alias(dev_name)
+                if alias and alias.lower() == taurus.core.InvalidAlias:
+                    alias = None 
+            except:
+                alias = None
+        else:
+            try:
+                dev_name = db.get_device_alias(alias)
+            except:
+                raise TaurusException("Device %s is not defined in %s." % (alias,db.getFullName()))
+
+        full_dev_name = db.getFullName() + "/" + dev_name
+        if not alias is None:
+            alias = db.getFullName() + "/" + alias
+        
+        return self.tango_devs.get(full_dev_name)
+        
+    def removeExistingDevice(self, dev_or_dev_name):
+        """Removes a previously registered device.
+           
+           :param dev_or_dev_name: (str or TangoDevice) device name or device object
+        """
+        if isinstance(dev_or_dev_name, _Device):
+            dev = dev_or_dev_name
+        else:
+            dev = self.getExistingDevice(dev_or_dev_name)
+        if dev is None:
+            raise KeyError("Device %s not found" % dev_or_dev_name)
+        dev.cleanUp()
+        full_name = dev.getFullName()
+        if self.tango_devs.has_key(full_name):
+            del self.tango_devs[full_name]
+        simp_name = dev.getSimpleName()
+        if self.tango_alias_devs.has_key(simp_name):
+            del self.tango_alias_devs[simp_name]
+    
+    def removeExistingAttribute(self, attr_or_attr_name):
+        """Removes a previously registered attribute.
+           
+           :param attr_or_attr_name: (str or TangoAttribute) attribute name or attribute object
+        """
+        if isinstance(attr_or_attr_name, _Attribute):
+            attr = attr_or_attr_name
+        else:
+            attr = self.getExistingAttribute(attr_or_attr_name)
+        if attr is None:
+            raise KeyError("Attribute %s not found" % attr_or_attr_name)
+        attr.cleanUp()
+        full_name = attr.getFullName()
+        if self.tango_attrs.has_key(full_name):
+            del self.tango_attrs[full_name]
+    
     def addAttributeToPolling(self, attribute, period, unsubscribe_evts = False):
         """Activates the polling (client side) for the given attribute with the
            given period (seconds).
diff --git a/lib/taurus/core/taurusattribute.py b/lib/taurus/core/taurusattribute.py
index 3631dd3..3a9bfc5 100644
--- a/lib/taurus/core/taurusattribute.py
+++ b/lib/taurus/core/taurusattribute.py
@@ -178,7 +178,7 @@ class TaurusAttribute(taurusmodel.TaurusModel):
         if unit and unit != self.no_unit:
             obj.append(('unit', unit))
             
-        limits = self.getLimits(cache=cache)
+        limits = self.getRange(cache=cache)
         if limits and (limits[0] != self.no_min_value or \
                        limits[1] != self.no_max_value):
             if limits[0] == self.no_min_value: limits[0] = self.no_cfg_value
@@ -226,7 +226,9 @@ class TaurusAttribute(taurusmodel.TaurusModel):
         ret = None
         try:
             if self.isScalar():
-                if self.isNumeric():
+                format = self.getFormat()
+                if self.isNumeric() and format is not None:
+                    format = self.getFormat()
                     ret = self.getFormat() % value
                 else:
                     ret = str(value)
diff --git a/lib/taurus/core/taurusbasetypes.py b/lib/taurus/core/taurusbasetypes.py
new file mode 100644
index 0000000..e7e7305
--- /dev/null
+++ b/lib/taurus/core/taurusbasetypes.py
@@ -0,0 +1,149 @@
+#!/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/>.
+##
+#############################################################################
+
+'''
+a misc collection of basic types
+'''
+
+import time
+import datetime
+
+from enums import AttrQuality, AttrAccess, DataFormat, LockStatus
+
+class TaurusTimeVal(object):
+    def __init__(self):
+        self.tv_sec = 0
+        self.tv_usec = 0
+        self.tv_nsec = 0
+    
+    def __repr__(self):
+        return "%s(tv_sec=%i, tv_usec=%i, tv_nsec=%i)"%(self.__class__.__name__, self.tv_sec, self.tv_usec, self.tv_nsec)
+    
+    def __float__(self):
+        return self.totime()
+    
+    def totime(self):
+        return self.tv_usec*1e-9 + self.tv_usec*1e-6 + self.tv_sec
+    
+    def todatetime(self):
+        return datetime.datetime.fromtimestamp(self.totime())
+    
+    def isoformat(self):
+        return self.todatetime().isoformat()
+    
+    @staticmethod
+    def fromtimestamp(v):
+        tv = TaurusTimeVal()
+        tv.tv_sec = int(v)
+        usec = (v - tv.tv_sec)*1000000
+        tv.tv_usec = int(usec)
+        tv.tv_nsec = int((usec - tv.tv_usec)*1000)
+        return tv
+    
+    @staticmethod
+    def fromdatetime(v):
+        import time
+        tv = TaurusTimeVal()
+        tv.tv_sec = int(time.mktime(v.timetuple()))
+        tv.tv_usec = v.microsecond
+        tv.tv_nsec = 0 #datetime does not provide ns info
+        return tv
+    
+    @staticmethod
+    def now():
+        return TaurusTimeVal.fromdatetime(datetime.datetime.now())    
+         
+
+class TaurusAttrValue(object):
+    def __init__(self):
+        self.value = None
+        self.w_value = None
+        self.time = None
+        self.quality = AttrQuality.ATTR_VALID
+        self.format = 0
+        self.has_failed = False
+        self.err_stack = None
+        self.config = TaurusConfigValue()
+        
+    def __getattr__(self,name):
+        return getattr(self.config, name)
+    
+    def __repr__(self):
+        return "%s%s"%(self.__class__.__name__, repr(self.__dict__))
+        #values = ", ".join(["%s=%s"%(m,repr(getattr(self,m))) for m in self.__dict__])
+        #return "%s(%s)"%(self.__class__.__name__, values)
+
+class TaurusConfigValue(object):
+    def __init__(self):
+        self.name = None
+        self.writable = None
+        self.data_format = None
+        self.type = None
+        self.max_dim = 1, 1
+        self.label = None
+        self.unit = None
+        self.standard_unit = None
+        self.display_unit= None
+        self.format = None
+        self.range = float('-inf'), float('inf')
+        self.alarm = float('-inf'), float('inf')
+        self.warning = float('-inf'), float('inf')
+        self.disp_level = None
+        self.description = None
+    
+    def __repr__(self):
+        return "%s%s"%(self.__class__.__name__, repr(self.__dict__))
+
+    def isWrite(self):
+        return self.writable == AttrAccess.WRITE
+    
+    def isReadOnly(sel):
+        return self.writable == AttrAccess.READ
+
+    def isReadWrite(self):
+        return self.writable == AttrAccess.READ_WRITE
+    
+    def isScalar(self):
+        return self.format == DataFormat._0D
+    
+    def isSpectrum(self):
+        return self.format == DataFormat._1D
+    
+    def isImage(self):
+        return self.format == DataFormat._2D
+
+
+class TaurusLockInfo(object):
+    
+    LOCK_STATUS_UNKNOWN = 'Lock status unknown'
+    
+    def __init__(self):
+        self.status = LockStatus.Unknown
+        self.status_msg = self.LOCK_STATUS_UNKNOWN
+        self.id = None
+        self.host = None
+        self.klass = None
+
+    def __repr__(self):
+        return self.status_msg
diff --git a/lib/taurus/core/taurusconfiguration.py b/lib/taurus/core/taurusconfiguration.py
index 4941d7d..dcc0c6c 100644
--- a/lib/taurus/core/taurusconfiguration.py
+++ b/lib/taurus/core/taurusconfiguration.py
@@ -32,8 +32,9 @@ __docformat__ = "restructuredtext"
 # -*- coding: utf-8 -*-
 import time
 import weakref
+import numpy
 
-from enums import TaurusEventType
+from enums import TaurusEventType, AttrAccess
 import taurusmodel
 
 class TaurusConfigurationProxy(object):
@@ -91,6 +92,9 @@ class TaurusConfiguration(taurusmodel.TaurusModel):
         self._dev_hw_obj = self._getDev().getHWObj()
             
         self._subscribeEvents()
+        
+    def _subscribeEvents(self):
+        pass
     
     def cleanUp(self):
         self.trace("[TaurusConfiguration] cleanUp")
@@ -222,7 +226,7 @@ class TaurusConfiguration(taurusmodel.TaurusModel):
     def getType(self, cache=True):
         c = self.getValueObj(cache=cache)
         if c:
-            return c.data_type
+            return c.type
         return None
 
     def getDataFormat(self, cache=True):
@@ -231,16 +235,28 @@ class TaurusConfiguration(taurusmodel.TaurusModel):
             return c.data_format
         return None
 
+    def getMaxDim(self, cache=True):
+        c = self.getValueObj(cache=cache)
+        if c:
+            return c.max_dim
+        return None
+
     def getMaxDimX(self, cache=True):
+        '''.. warning: Deprecated. Use :meth:`getMaxDim`
+        '''
+        self.info('Deprecation warning: TaurusConfiguration.getMaxDimX is deprecated. Use getMaxDim')
         c = self.getValueObj(cache=cache)
         if c:
-            return c.max_dim_x
+            return c.max_dim[0]
         return None
 
     def getMaxDimY(self, cache=True):
+        '''.. warning: Deprecated. Use :meth:`getMaxDim`
+        '''
+        self.info('Deprecation warning: TaurusConfiguration.getMaxDimX is deprecated. Use getMaxDim')
         c = self.getValueObj(cache=cache)
         if c:
-            return c.max_dim_y
+            return c.max_dim[1]
         return None
         
     def getShape(self, cache=True):
@@ -294,62 +310,71 @@ class TaurusConfiguration(taurusmodel.TaurusModel):
     def getMinValue(self, cache=True):
         c = self.getValueObj(cache=cache)
         if c:
-            return c.min_value
+            return c.range[0]
         return None
 
     def getMaxValue(self, cache=True):
         c = self.getValueObj(cache=cache)
         if c:
-            return c.max_value
+            return c.range[1]
         return None
         
     def getLimits(self, cache=True):
+        '''.. warning: Deprecated. Use :meth:`getRange`
+        '''
+        self.info('Deprecation warning: TaurusConfiguration.getLimits is deprecated. Use getRange')
+        self.getRange(cache=cache)
+    
+    def getRange(self, cache=True):
         c = self.getValueObj(cache=cache)
         if c:
-            return c.climits
+            return c.range
         return None
     
     def getRanges(self, cache=True):
+        '''.. warning: Deprecated. Use :meth:`getRange`
+        '''
+        self.info('Deprecation warning: TaurusConfiguration.getRanges is deprecated. Use getRange')
         c = self.getValueObj(cache=cache)
         if c:
-            return list(c.cranges)
+            return [c.range[0], c.alarm[0], c.warning[0], c.warning[1], c.alarm[1], c.range[1]]
         return None
     
     def getMinAlarm(self, cache=True):
         c = self.getValueObj(cache=cache)
         if c:
-            return c.min_alarm
+            return c.alarm[0]
         return None
 
     def getMaxAlarm(self, cache=True):
         c = self.getValueObj(cache=cache)
         if c:
-            return c.max_alarm
+            return c.alarm[1]
         return None
-        
+    
     def getAlarms(self, cache=True):
         c = self.getValueObj(cache=cache)
         if c:
-            return list(c.calarms)
+            return list(c.alarm)
         return None
     
     def getMinWarning(self, cache=True):
         c = self.getValueObj(cache=cache)
         if c:
-            return c.alarms.min_warning
+            return c.warning[0]
         return None
 
     def getMaxWarning(self, cache=True):
         c = self.getValueObj(cache=cache)
         if c:
-            return c.alarms.max_warning
+            return c.warning[1]
         return None
         
     def getWarnings(self, cache=True):
         c = self.getValueObj(cache=cache)
         if c:
-            return list(c.cwarnings)
-        return None        
+            return list(c.warning)
+        return None
     
     def getParam(self, param_name):
         config = self.getValueObj()
@@ -401,36 +426,50 @@ class TaurusConfiguration(taurusmodel.TaurusModel):
             config.format = fmt
             self._applyConfig()
         
-    def setLimits(self,low, high):
+    def setLimits(self, low, high):
+        '''.. warning: Deprecated. Use :meth:`setRange`
+        '''
+        self.info('Deprecation warning: TaurusConfiguration.setLimits is deprecated. Use setRange')
+        self.setRange(low, high)
+            
+    def setRange(self,low, high):
         config = self.getValueObj()
         if config:
-            l_str, h_str = str(low), str(high)
-            config.cranges[0] = config.min_value = l_str
-            config.cranges[5] = config.max_value = h_str
-            config.climits = [l_str, h_str]
+            config.range = [low, high]
             self._applyConfig()
 
     def setWarnings(self,low, high):
         config = self.getValueObj()
         if config:
-            l_str, h_str = str(low), str(high)
-            config.cranges[2] = config.alarms.min_warning = l_str
-            config.cranges[3] = config.alarms.max_warning = h_str
-            config.cwarnings = [l_str, h_str]
+            config.warning = [low, high]
             self._applyConfig()
 
     def setAlarms(self,low, high):
         config = self.getValueObj()
         if config:
-            l_str, h_str = str(low), str(high)
-            config.cranges[1] = config.min_alarm = config.alarms.min_alarm = l_str
-            config.cranges[4] = config.max_alarm = config.alarms.max_alarm = h_str
-            config.calarms = [l_str, h_str]
+            config.alarm = [low, high]
             self._applyConfig()
 
     def _applyConfig(self):
-        config = self.getValueObj()
-        if config:
-            self.getParentObj().setConfigEx(config)
-
+        pass
+
+    def isBoolean(self, cache=True):
+        attr = self.getParentObj()
+        if attr is None: return False
+        v = attr.read(cache=cache)
+        return isinstance(v.value, bool)
+
+    def isScalar(self, cache=True):
+        attr = self.getParentObj()
+        if attr is None: return False
+        v = attr.read(cache=cache)
+        return numpy.isscalar(v.value)
+    
+    def isWrite(self, cache=True):
+        return self.getWritable(cache) == AttrAccess.WRITE
+    
+    def isReadOnly(self, cache=True):
+        return self.getWritable(cache) == AttrAccess.READ
 
+    def isReadWrite(self, cache=True):
+        return self.getWritable(cache) == AttrAccess.READ_WRITE
diff --git a/lib/taurus/core/taurusdatabase.py b/lib/taurus/core/taurusdatabase.py
index dd68fd7..be83cea 100644
--- a/lib/taurus/core/taurusdatabase.py
+++ b/lib/taurus/core/taurusdatabase.py
@@ -209,7 +209,10 @@ class TaurusAttrInfo(TaurusInfo):
 
     def device(self):
         return self._device()
-        
+    
+    def info(self):
+        return self._info
+    
     def __getattr__(self, name):
         return getattr(self._info, name)
 
diff --git a/lib/taurus/core/taurusdevice.py b/lib/taurus/core/taurusdevice.py
index 7ae22fc..097ab9a 100644
--- a/lib/taurus/core/taurusdevice.py
+++ b/lib/taurus/core/taurusdevice.py
@@ -32,7 +32,8 @@ __docformat__ = "restructuredtext"
 import weakref
 import sys
 
-from enums import TaurusSWDevState, TaurusEventType
+from enums import TaurusSWDevState, TaurusEventType, LockStatus
+from taurusbasetypes import TaurusLockInfo
 import taurusmodel
 
 DFT_DEVICE_DESCRIPTION = "A device"
@@ -55,7 +56,7 @@ class TaurusDevice(taurusmodel.TaurusModel):
         
         self._deviceObj = self._createHWObject()
         self._deviceStateObj = None
-
+        self._lock_info = TaurusLockInfo()
         self._descr = None
         self._deviceSwState = self.decode(TaurusSWDevState.Uninitialized)
         
@@ -66,7 +67,7 @@ class TaurusDevice(taurusmodel.TaurusModel):
         self.trace("[TaurusDevice] cleanUp")
         self._deviceObj = None
         self._descr = None
-        self._deviceSwObj
+        #self._deviceSwObj
         if not self._deviceStateObj is None:
             self._deviceStateObj.removeListener(self)
         self._deviceStateObj = None
@@ -121,12 +122,32 @@ class TaurusDevice(taurusmodel.TaurusModel):
             attrname = "%s%s" % (self.getFullName(), attrname)
         import taurusattribute
         return self.factory().getObject(taurusattribute.TaurusAttribute,attrname)
+    
+    def isValidDev(self):
+        """returns True if the device is in "working conditions
         
+        The default implementation always returns True. Reimplement it in
+        subclasses if there are cases in which the device cannot be queried
+        (e.g. in Tango, the TangoDevice object may exist even if there is not a real
+        hardware device associated, in which case this method should return False)
+        """
+        return True
+
+    def getLockInfo(self, cache=False):
+        return self._lock_info
+
+    def lock(self, force=False):
+        pass
+
+    def unlock(self, force=False):
+        pass
+
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     # Mandatory implementation in sub class
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-    
+    
     def _createHWObject(self):
-        raise RuntimeError("TaurusDevice::_createHWObject cannot be called")
+        raise NotImplementedError
 
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     # TaurusModel implementation
@@ -229,7 +250,11 @@ class TaurusDevice(taurusmodel.TaurusModel):
             self._deviceSwState = value
             self.fireEvent(TaurusEventType.Change, value)
 
-
     def _getDefaultDescription(self):
         return DFT_DEVICE_DESCRIPTION
 
+    def poll(self, attrs):
+        '''Polling certain attributes of the device. This default 
+        implementation simply polls each attribute one by one'''
+        for attr in attrs.values():
+            attr.poll()
diff --git a/lib/taurus/core/taurusexception.py b/lib/taurus/core/taurusexception.py
index cce27d9..2d07b2b 100644
--- a/lib/taurus/core/taurusexception.py
+++ b/lib/taurus/core/taurusexception.py
@@ -25,7 +25,7 @@
 
 """This module contains the taurus base exception classes"""
 
-__all__ = ["TaurusException"]
+__all__ = ["TaurusException", "DoubleRegistration"]
 
 __docformat__ = "restructuredtext"
 
@@ -33,4 +33,6 @@ class TaurusException(Exception):
     def __init__(self, description, code = None):
         Exception.__init__(self, description, code)
         self.code = code
-        self.description = description
\ No newline at end of file
+        self.description = description
+        
+class DoubleRegistration(TaurusException): pass
\ No newline at end of file
diff --git a/lib/taurus/core/taurusfactory.py b/lib/taurus/core/taurusfactory.py
index eac42ae..801aac8 100644
--- a/lib/taurus/core/taurusfactory.py
+++ b/lib/taurus/core/taurusfactory.py
@@ -47,7 +47,7 @@ import taurusdevice
 import taurusattribute
 import taurusconfiguration
 
-class TaurusFactory:
+class TaurusFactory(object):
     """The base class for valid Factories in Taurus."""
     
     schemes = ()
@@ -57,8 +57,30 @@ class TaurusFactory:
     def __init__(self):
         self._polling_period = self.DefaultPollingPeriod
         self.operation_mode = OperationMode.ONLINE
+        self.polling_timers = {}
+        self._polling_enabled = True
+        
+        import taurusmanager
+        manager = taurusmanager.TaurusManager()
+        self._serialization_mode = manager.getSerializationMode()
 
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    # API for serialization
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    
+    def setSerializationMode(self, mode):
+        """Sets the serialization mode for the system.
+        
+        :param mode: (TaurusSerializationMode) the new serialization mode"""
+        self._serialization_mode = mode
+    
+    def getSerializationMode(self):
+        """Gives the serialization operation mode.
+        
+        :return: (TaurusSerializationMode) the current serialization mode"""
+        return self._serialization_mode
+    
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     # Methods that must be implemented by the specific Factory
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-  
 
@@ -205,4 +227,47 @@ class TaurusFactory:
             self._polling_period = period
 
     def getDefaultPollingPeriod(self):
-        return self._polling_period
\ No newline at end of file
+        return self._polling_period
+    
+    def isPollingEnabled(self):
+        """Tells if the local tango polling is enabled
+        
+           :return: (bool) wheter or not the polling is enabled
+        """
+        return self._polling_enabled
+        
+    def disablePolling(self):
+        """Disable the application tango polling"""
+        if not self.isPollingEnabled():
+            return
+        self._polling_enabled = False
+        for period,timer in self.polling_timers.iteritems():
+            timer.stop()
+            
+    def enablePolling(self):
+        """Enable the application tango polling"""
+        if self.isPollingEnabled():
+            return
+        for period,timer in self.polling_timers.iteritems():
+            timer.start()
+        self._polling_enabled = True
+        
+    def addAttributeToPolling(self, attribute, period, unsubscribe_evts = False):
+        """Activates the polling (client side) for the given attribute with the
+           given period (seconds).
+
+           :param attribute: (taurus.core.tango.TangoAttribute) attribute name.
+           :param period: (float) polling period (in seconds)
+           :param unsubscribe_evts: (bool) whether or not to unsubscribe from events
+        """
+        raise RuntimeError("addAttributeToPolling cannot be called for abstract" \
+                           " TaurusFactory")
+        
+    def removeAttributeFromPolling(self, attribute):
+        """Deactivate the polling (client side) for the given attribute. If the
+           polling of the attribute was not previously enabled, nothing happens.
+
+           :param attribute: (str) attribute name.
+        """
+        raise RuntimeError("removeAttributeFromPolling cannot be called for abstract" \
+                           " TaurusFactory")
diff --git a/lib/taurus/core/taurushelper.py b/lib/taurus/core/taurushelper.py
index fa3ff5e..bed27e1 100644
--- a/lib/taurus/core/taurushelper.py
+++ b/lib/taurus/core/taurushelper.py
@@ -141,6 +141,18 @@ def __get_qtcontrols_version_number():
     if qtcontrols_str is None: return None
     return __translate_version_str2int(qtcontrols_str)
 
+def __get_spyderlib_version():
+    try:
+        import spyderlib
+        return spyderlib.__version__
+    except:
+        pass
+
+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()
@@ -188,6 +200,7 @@ def _check_dependencies(forlog=False):
     #    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..."
@@ -248,6 +261,16 @@ def _check_dependencies(forlog=False):
         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)
+
+    m = "Checking for spyderlib >=%s..." % r["spyderlib"][0]
+    minspyderlib, recspyderlib = map(__translate_version_str2int, r["spyderlib"])
+    currspyderlib, currspyderlibStr = __get_spyderlib_version_number(), __get_spyderlib_version()
+    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)
+    else:
+        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"])
@@ -258,7 +281,13 @@ def _check_dependencies(forlog=False):
         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)
-    
+
+
+def getSchemeFromName(name):
+    if name is None: return None
+    i=name.find('://')
+    if i == -1: return None
+    return name[:i]
 
 def Manager():
     """Returns the one and only TaurusManager
@@ -288,7 +317,11 @@ def Factory(scheme=None):
     :type scheme: str
     :return: a taurus factory
     :rtype: :class:`taurus.core.TaurusFactory`"""
-    return Manager().getFactory(scheme=scheme)()
+    f = Manager().getFactory(scheme=scheme)
+    if f is None:
+        import taurusexception
+        raise taurusexception.TaurusException('Cannot create Factory for scheme %s'%repr(scheme))
+    return f()
 
 def Device(device_name):
     """Returns the taurus device for the given device name
@@ -304,7 +337,7 @@ def Device(device_name):
     :type device_name: str
     :return: a taurus device
     :rtype: :class:`taurus.core.TaurusDevice`"""
-    return Factory().getDevice(device_name)
+    return Factory(scheme=getSchemeFromName(device_name)).getDevice(device_name)
 
 def Attribute(dev_or_attr_name, attr_name=None):
     """Returns the taurus attribute for either the pair (device name, attribute name) 
@@ -335,8 +368,9 @@ def Attribute(dev_or_attr_name, attr_name=None):
     :return: a taurus attribute
     :rtype: :class:`taurus.core.TaurusAttribute`"""
     import types
+    
     if attr_name is None:
-        return Factory().getAttribute(dev_or_attr_name)
+        return Factory(scheme=getSchemeFromName(dev_or_attr_name)).getAttribute(dev_or_attr_name)
     else:
         if type(dev_or_attr_name) in types.StringTypes:
             dev = Device(dev_or_attr_name)
@@ -373,7 +407,7 @@ def Configuration(attr_or_conf_name, conf_name=None):
     :return: a taurus configuration
     :rtype: :class:`taurus.core.TaurusConfiguration`"""
     if conf_name is None:
-        return Factory().getConfiguration(attr_or_conf_name)
+        return Factory(scheme=getSchemeFromName(attr_or_conf_name)).getConfiguration(attr_or_conf_name)
     else:
         return Attribute(attr_or_conf_name).getConfig(conf_name)
 
@@ -391,7 +425,7 @@ def Database(db_name=None):
     :type db_name: str or None
     :return: a taurus database
     :rtype: :class:`taurus.core.TaurusDatabase`"""
-    return Factory().getDatabase(db_name)
+    return Factory(getSchemeFromName(db_name)).getDatabase(db_name)
 
 def Object(klass, name):
     """Returns an taurus object of given class for the given name
@@ -409,7 +443,7 @@ def Object(klass, name):
     :type name: str
     :return: a taurus object
     :rtype: :class:`taurus.core.TaurusModel`"""
-    return Factory().getObject(klass, name)
+    return Factory(getSchemeFromName(name)).getObject(klass, name)
 
 import util
 
@@ -422,6 +456,8 @@ Trace    = util.Logger.Trace
     
 setLogLevel = util.Logger.setLogLevel
 setLogFormat = util.Logger.setLogFormat
+getLogLevel = util.Logger.getLogLevel
+getLogFormat = util.Logger.getLogFormat
 resetLogLevel = util.Logger.resetLogLevel
 resetLogFormat = util.Logger.resetLogFormat
 
diff --git a/lib/taurus/core/taurusmanager.py b/lib/taurus/core/taurusmanager.py
index 93271a3..850083d 100644
--- a/lib/taurus/core/taurusmanager.py
+++ b/lib/taurus/core/taurusmanager.py
@@ -33,7 +33,7 @@ import os, imp, atexit
 
 import util
 import taurus.core
-from enums import OperationMode, ManagerState
+from enums import OperationMode, ManagerState, TaurusSerializationMode
 from taurus.core.taurusexception import TaurusException
 
 class TaurusManager(util.Singleton, util.Logger):
@@ -46,7 +46,8 @@ class TaurusManager(util.Singleton, util.Logger):
            >>> print manager == taurus.core.TaurusManager()
            True
     """
-
+    
+    DefaultSerializationMode = TaurusSerializationMode.Concurrent
     default_scheme = "tango"
 
     def __init__(self):
@@ -56,9 +57,8 @@ class TaurusManager(util.Singleton, util.Logger):
     def init(self, *args, **kwargs):
         """Singleton instance initialization. 
            For internal usage only. Do **NOT** call this method directly"""
-        name = self.__class__.__name__
         self._state = ManagerState.UNINITIALIZED
-        self.call__init__(util.Logger, name)
+        self.call__init__(util.Logger)
         self.reInit()
         atexit.register(self.cleanUp)
 
@@ -70,18 +70,20 @@ class TaurusManager(util.Singleton, util.Logger):
         self.trace("reInit()")
         this_path = os.path.abspath(__file__)
         self._this_path = os.path.dirname(this_path)
-    
-        self._thread_pool = util.ThreadPool(name="TaurusTP",
-                                            parent=self,
-                                            Psize=5,
-                                            Qsize=1000)
-
+        self._operation_mode = OperationMode.ONLINE
+        self._serialization_mode = self.DefaultSerializationMode
+        if self._serialization_mode == TaurusSerializationMode.Concurrent:
+            self._thread_pool = util.ThreadPool(name="TaurusTP",
+                                                parent=self,
+                                                Psize=5,
+                                                Qsize=1000)
+        else:
+            self._thread_pool = None
         self._plugins = self._build_plugins()
         
         self._initial_default_scheme = self.default_scheme
         self._default_factory = self._plugins.get(self.default_scheme, None)
         
-        self._operation_mode = OperationMode.ONLINE
         self._state = ManagerState.INITED
 
     def cleanUp(self):
@@ -111,15 +113,29 @@ class TaurusManager(util.Singleton, util.Logger):
         :param args: (list) list of arguments passed to the job
         :param kw: (dict) keyword arguments passed to the job
         """
-        if not hasattr(self, "_thread_pool") or self._thread_pool is None:
-            self.info("Job cannot be processed.")
-            self.debug("The requested job cannot be processed. Make sure this manager is initialized")
-            return
-        self._thread_pool.add(job, callback, *args, **kw)
-        #job(*args, **kw)
+        if self._serialization_mode == TaurusSerializationMode.Concurrent:
+            if not hasattr(self, "_thread_pool") or self._thread_pool is None:
+                self.info("Job cannot be processed.")
+                self.debug("The requested job cannot be processed. Make sure this manager is initialized")
+                return
+            self._thread_pool.add(job, callback, *args, **kw)
+        else:
+            job(*args, **kw)
+    
+    def setSerializationMode(self, mode):
+        """Sets the serialization mode for the system.
         
+        :param mode: (TaurusSerializationMode) the new serialization mode"""
+        self._serialization_mode = mode
+    
+    def getSerializationMode(self):
+        """Gives the serialization operation mode.
+        
+        :return: (TaurusSerializationMode) the current serialization mode"""
+        return self._serialization_mode
+    
     def setOperationMode(self, mode):
-        """Sets the operation mode for the Tango system.
+        """Sets the operation mode for the system.
         
         :param mode: (OperationMode) the new operation mode"""
         self.debug("Setting operation mode to %s" % OperationMode.whatis(mode))
diff --git a/lib/taurus/core/taurusmodel.py b/lib/taurus/core/taurusmodel.py
index 0ae289c..0914a56 100644
--- a/lib/taurus/core/taurusmodel.py
+++ b/lib/taurus/core/taurusmodel.py
@@ -40,16 +40,23 @@ class TaurusModel(util.Logger):
     
     RegularEvent = (TaurusEventType.Change, TaurusEventType.Config, TaurusEventType.Periodic)
 
-    def __init__(self,full_name,parent):
+    def __init__(self,full_name, parent, serializationMode=None):
         v = self.getNameValidator()
         self._full_name, self._norm_name, self._simp_name = v.getNames(full_name, self.factory())
         
         if self._full_name is None and self._norm_name and self._simp_name is None:
             self.trace("invalid name")
-
+        
         name = self._simp_name or self._norm_name or self._full_name or 'TaurusModel'
         self.call__init__(util.Logger, name, parent)
-
+        
+        if serializationMode is None:
+            s_obj = parent
+            if s_obj is None:
+                s_obj = self.factory()
+                serializationMode = s_obj.getSerializationMode()
+        self._serialization_mode = serializationMode
+        
         try:
             self._parentObj = weakref.ref(parent)
         except Exception:
@@ -107,18 +114,34 @@ class TaurusModel(util.Logger):
             
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     # API for hierarchy access 
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-    
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
         
     def getParentObj(self):
         if self._parentObj is None: return None
         return self._parentObj()
-
+    
     def getChildObj(self,child_name):
         return None
 
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    # API for serialization
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    
+    def setSerializationMode(self, mode):
+        """Sets the serialization mode for the system.
+        
+        :param mode: (TaurusSerializationMode) the new serialization mode"""
+        self._serialization_mode = mode
+    
+    def getSerializationMode(self):
+        """Gives the serialization operation mode.
+        
+        :return: (TaurusSerializationMode) the current serialization mode"""
+        return self._serialization_mode
+    
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     # API for value access 
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-    
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     
     def getValueObj(self,cache=True):
         raise RuntimeError("TaurusModel::getValueObj cannot be called")
@@ -145,7 +168,7 @@ class TaurusModel(util.Logger):
             
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     # API for listeners
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-    
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     
     def _listenerDied(self, weak_listener):
         if self._listeners is None: 
diff --git a/lib/taurus/core/tauruspollingtimer.py b/lib/taurus/core/tauruspollingtimer.py
index ba39785..c7fbd21 100644
--- a/lib/taurus/core/tauruspollingtimer.py
+++ b/lib/taurus/core/tauruspollingtimer.py
@@ -31,7 +31,6 @@ __docformat__ = "restructuredtext"
 
 import time
 import threading
-import PyTango
 
 import util
 from util import DebugIt
@@ -138,28 +137,9 @@ class TaurusPollingTimer(util.Logger):
         try:
             for dev, attrs in self.dev_dict.items():
                 try:
-                    #dev.poll(attrs.values())
-                    self._pollDevice(dev, attrs)
+                    dev.poll(attrs)
                 except Exception, e:
                     print e
                     pass
         finally:
             self.lock.release()
-
-    def _pollDevice(self, dev, attrs):
-        t = time.time()
-        try:
-            result = dev.read_attributes(attrs.keys())
-        except PyTango.DevFailed, e:
-            for attr in attrs.values():
-                attr.poll(single=False, value=None, error=e, time=t)
-            return
-        
-        for i, da in enumerate(result):
-            if da.has_failed:
-                v, err = None, PyTango.DevFailed(*da.get_err_stack())
-            else:
-                v, err = da, None
-            attr = attrs[da.name]
-            attr.poll(single=False, value=v, error=err, time=t)
-        
\ No newline at end of file
diff --git a/lib/taurus/core/taurusvalidator.py b/lib/taurus/core/taurusvalidator.py
index d22fd3c..bffcd7b 100644
--- a/lib/taurus/core/taurusvalidator.py
+++ b/lib/taurus/core/taurusvalidator.py
@@ -40,7 +40,6 @@ InvalidAlias = "nada"
 
 class AbstractTangoValidator:
     
-    protocol_prefix = 'tango://'
     complete_name = None
     normal_name = None
     short_name = None
@@ -51,6 +50,7 @@ class AbstractTangoValidator:
     uri_sub_delims = "\!\$\&\'\(\)\*\,\;\="
     uri_reserved = uri_gen_delims + uri_sub_delims
     tango_word = '[^' + uri_reserved + ']+'
+    protocol_prefix = 'tango://'
 
     def __init__(self):
         self.complete_re = re.compile("^%s$" % self.complete_name)
@@ -91,9 +91,11 @@ class AbstractTangoValidator:
 
 class DatabaseNameValidator(util.Singleton, AbstractTangoValidator):
     
+    protocol_prefix = '((?P<scheme>tango)://)?'
+    
     db = '(?P<host>([\w\-_]+\.)*[\w\-_]+):(?P<port>\d{1,5})'
     # for tango://host:port
-    complete_name = '(' + AbstractTangoValidator.protocol_prefix + ')?' + db
+    complete_name = '(' + protocol_prefix + ')?' + db
     # for a/b/c
     normal_name = db
     # for devalias
@@ -157,7 +159,7 @@ class DeviceNameValidator(util.Singleton, AbstractTangoValidator):
     # for tango://host:port/a/b/c/attrname or host:port/a/b/c
     complete_name = DatabaseNameValidator.complete_name + '/' + dev
     # for a/b/c
-    normal_name = dev
+    normal_name = DatabaseNameValidator.protocol_prefix + dev
     # for devalias
     short_name = '(?P<devalias>'+ w + ')'
 
diff --git a/lib/taurus/core/util/__init__.py b/lib/taurus/core/util/__init__.py
index cb7eec6..8b949af 100644
--- a/lib/taurus/core/util/__init__.py
+++ b/lib/taurus/core/util/__init__.py
@@ -104,6 +104,7 @@ def print_DevFailed(df):
     """Prints the contents of the given :class:`PyTango.DevFailed`.
     
     :param df: (PyTango.DevFailed) the PyTango exception object"""
+    import PyTango
     PyTango.Except.print_exception(df)
 
 def dictFromSequence(seq):
diff --git a/lib/taurus/core/util/argparse/taurusargparse.py b/lib/taurus/core/util/argparse/taurusargparse.py
index ced6130..ce73a51 100644
--- a/lib/taurus/core/util/argparse/taurusargparse.py
+++ b/lib/taurus/core/util/argparse/taurusargparse.py
@@ -55,6 +55,7 @@ Currently, the known options are:
     #. ``--taurus-log-level`` sets the taurus log level
     #. ``--tango-host`` sets the default tango host
     #. ``--taurus-polling-period`` sets the default taurus global polling period (milliseconds)
+    #. ``--taurus-serialization-mode`` sets the default taurus serialization mode
    
 You can easily extend the taurus options with your application specific options.
 Supose you want to add an option like ``--model=<model name>``::
@@ -101,10 +102,14 @@ def get_taurus_parser(parser=None):
                          "error, warning/warn, info, debug, trace"
         help_tangohost = "Tango host name"
         help_tauruspolling = "taurus global polling period in milliseconds"
+        help_taurusserial= "taurus serialization mode. Allowed values are (case insensitive): "\
+                           "serial, concurrent (default)"
         group.add_option("--taurus-log-level", dest="taurus_log_level", metavar="LEVEL",
                          help=help_tauruslog, type="str", default="info")
         group.add_option("--taurus-polling-period", dest="taurus_polling_period", metavar="MILLISEC",
                          help=help_tauruspolling, type="int", default=None)
+        group.add_option("--taurus-serialization-mode", dest="taurus_serialization_mode", metavar="SERIAL",
+                         help=help_taurusserial, type="str", default="Concurrent")
         group.add_option("--tango-host", dest="tango_host", metavar="TANGO_HOST",
                          help=help_tangohost, type="str", default=None)
         parser.add_option_group(group)
@@ -159,9 +164,17 @@ def init_taurus_args(parser=None, args=None, values=None):
         tango_factory = taurus.Factory("tango")
         tango_factory.set_default_tango_host(options.tango_host)
 
-    # initialize tango host
+    # initialize taurus polling period
     if options.taurus_polling_period is not None:
         taurus.Manager().changeDefaultPollingPeriod(options.taurus_polling_period)
 
+    # initialize taurus serialization mode
+    if options.taurus_serialization_mode is not None:
+        import taurus.core
+        m = options.taurus_serialization_mode.capitalize()
+        if hasattr(taurus.core.TaurusSerializationMode, m):
+            m = getattr(taurus.core.TaurusSerializationMode, m)
+            taurus.Manager().setSerializationMode(m)
+        
     return parser, options, args
-        
\ No newline at end of file
+    
\ No newline at end of file
diff --git a/lib/taurus/core/util/codecs.py b/lib/taurus/core/util/codecs.py
index 7da1828..df644ee 100644
--- a/lib/taurus/core/util/codecs.py
+++ b/lib/taurus/core/util/codecs.py
@@ -76,8 +76,6 @@ from singleton import Singleton
 from log import Logger, DebugIt
 from containers import CaselessDict
 
-from taurus.core.util import json
-
 
 class Codec(Logger):
     """The base class for all codecs"""
@@ -219,7 +217,8 @@ class BZ2Codec(Codec):
 
 
 class JSONCodec(Codec):
-    """A codec able to encode/decode to/from json format. It uses the :mod:`json` module.
+    """A codec able to encode/decode to/from json format. It uses the
+    :mod:`json` module.
     
     Example::
         
@@ -240,12 +239,15 @@ class JSONCodec(Codec):
         {'hello': 'world', 'goodbye': 1000}"""
     
     def encode(self, data, *args, **kwargs):
-        """encodes the given data to a json string. The given data **must** be a python
-        object that json is able to convert.
+        """encodes the given data to a json string. The given data **must** be
+        a python object that json is able to convert.
             
-        :param data: (sequence[str, obj]) a sequence of two elements where the first item is the encoding format of the second item object
+        :param data: (sequence[str, obj]) a sequence of two elements where the
+                     first item is the encoding format of the second item object
         
-        :return: (sequence[str, obj]) a sequence of two elements where the first item is the encoding format of the second item object"""
+        :return: (sequence[str, obj]) a sequence of two elements where the
+                 first item is the encoding format of the second item object"""
+        import json
         format = 'json'
         if len(data[0]): format += '_%s' % data[0]
         # make it compact by default
@@ -255,13 +257,122 @@ class JSONCodec(Codec):
     def decode(self, data, *args, **kwargs):
         """decodes the given data from a json string.
             
-        :param data: (sequence[str, obj]) a sequence of two elements where the first item is the encoding format of the second item object
+        :param data: (sequence[str, obj]) a sequence of two elements where the
+                     first item is the encoding format of the second item object
         
-        :return: (sequence[str, obj]) a sequence of two elements where the first item is the encoding format of the second item object"""
+        :return: (sequence[str, obj]) a sequence of two elements where the
+                 first item is the encoding format of the second item object"""
+        import json
         if not data[0].startswith('json'):
             return data
         format = data[0].partition('_')[2]
-        return format, json.loads(data[1])
+        
+        ensure_ascii = kwargs.pop('ensure_ascii', False)
+        
+        if isinstance(data[1], buffer):
+            data = data[0], str(data[1])
+        
+        data = json.loads(data[1])
+        if ensure_ascii:
+            data = self._transform_ascii(data)
+        return format, data
+
+    def _transform_ascii(self, data):
+        if isinstance(data, unicode):
+            return data.encode('utf-8')
+        elif isinstance(data, dict):
+            return self._transform_dict(data)
+        elif isinstance(data, list):
+            return self._transform_list(data)
+        elif isinstance(data, tuple):
+            return tuple(self._transform_list(data))
+        else:
+            return data
+        
+    def _transform_list(self, lst):
+        return [ self._transform_ascii(item) for item in lst ]
+
+    def _transform_dict(self, dct):
+        newdict = {}
+        for k, v in dct.iteritems():
+            newdict[self._transform_ascii(k)] = self._transform_ascii(v)
+        return newdict
+
+
+class BSONCodec(Codec):
+    """A codec able to encode/decode to/from bson format. It uses the
+    :mod:`bson` module.
+    
+    Example::
+        
+        >>> from taurus.core.util import CodecFactory
+        
+        >>> cf = CodecFactory()
+        >>> codec = cf.getCodec('bson')
+        >>>
+        >>> # first encode something
+        >>> data = { 'hello' : 'world', 'goodbye' : 1000 }
+        >>> format, encoded_data = codec.encode(("", data))
+        >>>
+        >>> # now decode it
+        >>> _, decoded_data = codec.decode((format, encoded_data))
+        >>> print decoded_data
+        {'hello': 'world', 'goodbye': 1000}"""
+    
+    def encode(self, data, *args, **kwargs):
+        """encodes the given data to a bson string. The given data **must** be
+        a python object that bson is able to convert.
+            
+        :param data: (sequence[str, obj]) a sequence of two elements where the
+                     first item is the encoding format of the second item object
+        
+        :return: (sequence[str, obj]) a sequence of two elements where the
+                 first item is the encoding format of the second item object"""
+        import bson
+        format = 'bson'
+        if len(data[0]): format += '_%s' % data[0]
+        return format, bson.BSON.encode(data[1], *args, **kwargs)
+    
+    def decode(self, data, *args, **kwargs):
+        """decodes the given data from a bson string.
+            
+        :param data: (sequence[str, obj]) a sequence of two elements where the
+                     first item is the encoding format of the second item object
+        
+        :return: (sequence[str, obj]) a sequence of two elements where the
+                 first item is the encoding format of the second item object"""
+        if not data[0].startswith('bson'):
+            return data
+        format = data[0].partition('_')[2]
+        ensure_ascii = kwargs.pop('ensure_ascii', False)
+        
+        data = data[0], bson.BSON(data[1])
+        
+        data = decode(data[1])
+        if ensure_ascii:
+            data = self._transform_ascii(data)
+        return format, data
+
+    def _transform_ascii(self, data):
+        if isinstance(data, unicode):
+            return data.encode('utf-8')
+        elif isinstance(data, dict):
+            return self._transform_dict(data)
+        elif isinstance(data, list):
+            return self._transform_list(data)
+        elif isinstance(data, tuple):
+            return tuple(self._transform_list(data))
+        else:
+            return data
+        
+    def _transform_list(self, lst):
+        return [ self._transform_ascii(item) for item in lst ]
+
+    def _transform_dict(self, dct):
+        newdict = {}
+        for k, v in dct.iteritems():
+            newdict[self._transform_ascii(k)] = self._transform_ascii(v)
+        return newdict
 
 
 class FunctionCodec(Codec):
@@ -348,11 +459,43 @@ class CodecFactory(Singleton, Logger):
     
         from taurus.core.util import CodecFactory
         f = CodecFactory()
+        
+    The :class:`CodecFactory` class allows you to get a codec object for a given 
+    format and also to register new codecs.
+    The :class:`CodecPipeline` is a special codec that is able to code/decode a
+    sequence of codecs. This way you can have codecs 'inside' codecs.
+
+    Example::
+
+        >>> from taurus.core.util import CodecFactory
+        >>> cf = CodecFactory()
+        >>> json_codec = cf.getCodec('json')
+        >>> bz2_json_codec = cf.getCodec('bz2_json')
+        >>> data = range(100000)
+        >>> f1, enc_d1 = json_codec.encode(('', data))
+        >>> f2, enc_d2 = bz2_json_codec.encode(('', data))
+        >>> print len(enc_d1), len(enc_d2)
+        688890 123511
+        >>> 
+        >>> f1, dec_d1 = json_codec.decode((f1, enc_d1))
+        >>> f2, dec_d2 = bz2_json_codec.decode((f2, enc_d2))
+
+    A Taurus related example::
+
+        >>> # this example shows how to automatically get the data from a DEV_ENCODED attribute
+        >>> import taurus
+        >>> from taurus.core.util import CodecFactory
+        >>> cf = CodecFactory()
+        >>> devenc_attr = taurus.Attribute('a/b/c/devenc_attr')
+        >>> v = devenc_attr.read()
+        >>> codec = CodecFactory().getCodec(v.format)
+        >>> f, d = codec.decode((v.format, v.value))
     """
     
     #: Default minimum map of registered codecs
     CODEC_MAP = CaselessDict({
         'json' : JSONCodec,
+        'bson' : BSONCodec,
         'bz2'  : BZ2Codec,
         'zip'  : ZIPCodec,
         'plot' : PlotCodec,
@@ -426,4 +569,8 @@ class CodecFactory(Singleton, Logger):
                 ret = self._codec_klasses.get('')()
         return ret
     
-    
\ No newline at end of file
+    def decode(self, data, *args, **kwargs):
+        return self.getCodec(data[0]).decode(data, *args, **kwargs)[1]
+        
+    def encode(self, data, *args, **kwargs):
+        return self.getCodec(data[0]).encode(data, *args, **kwargs)[1]
\ No newline at end of file
diff --git a/lib/taurus/core/util/console.py b/lib/taurus/core/util/console.py
index 8f94d5e..7aadf1e 100644
--- a/lib/taurus/core/util/console.py
+++ b/lib/taurus/core/util/console.py
@@ -28,10 +28,13 @@
 __all__ = ["make_color_table", "NoColors", "TermColors", "HTMLColors",
            "NoTangoColors", "TermTangoColors", "HTMLTangoColors", 
            "NoTaurusSWDevStateColors", "TermTaurusSWDevStateColors",
-           "NoTauSWDevStateColors", "TermTauSWDevStateColors"]
+           "NoTauSWDevStateColors", "TermTauSWDevStateColors",
+           "ANSIEscapeCodeHandler"]
 
 __docformat__ = "restructuredtext"
 
+import os
+
 __color_templates = (
     ("Black"       , "0;30"),
     ("Red"         , "0;31"),
@@ -136,3 +139,101 @@ TermTaurusSWDevStateColors = {
 
 NoTauSWDevStateColors = NoTaurusSWDevStateColors
 TermTauSWDevStateColors = TermTaurusSWDevStateColors
+
+class ANSIEscapeCodeHandler(object):
+    """ANSI Escape sequences handler"""
+    if os.name == 'nt':
+        # Windows terminal colors:
+        ANSI_COLORS = ( # Normal, Bright/Light
+                       ('#000000', '#808080'), # 0: black
+                       ('#800000', '#ff0000'), # 1: red
+                       ('#008000', '#00ff00'), # 2: green
+                       ('#808000', '#ffff00'), # 3: yellow
+                       ('#000080', '#0000ff'), # 4: blue
+                       ('#800080', '#ff00ff'), # 5: magenta
+                       ('#008080', '#00ffff'), # 6: cyan
+                       ('#c0c0c0', '#ffffff'), # 7: white
+                       )
+    elif os.name == 'mac':
+        # Terminal.app colors:
+        ANSI_COLORS = ( # Normal, Bright/Light
+                       ('#000000', '#818383'), # 0: black
+                       ('#C23621', '#FC391F'), # 1: red
+                       ('#25BC24', '#25BC24'), # 2: green
+                       ('#ADAD27', '#EAEC23'), # 3: yellow
+                       ('#492EE1', '#5833FF'), # 4: blue
+                       ('#D338D3', '#F935F8'), # 5: magenta
+                       ('#33BBC8', '#14F0F0'), # 6: cyan
+                       ('#CBCCCD', '#E9EBEB'), # 7: white
+                       )
+    else:
+        # xterm colors:
+        ANSI_COLORS = ( # Normal, Bright/Light
+                       ('#000000', '#7F7F7F'), # 0: black
+                       ('#CD0000', '#ff0000'), # 1: red
+                       ('#00CD00', '#00ff00'), # 2: green
+                       ('#CDCD00', '#ffff00'), # 3: yellow
+                       ('#0000EE', '#5C5CFF'), # 4: blue
+                       ('#CD00CD', '#ff00ff'), # 5: magenta
+                       ('#00CDCD', '#00ffff'), # 6: cyan
+                       ('#E5E5E5', '#ffffff'), # 7: white
+                       )
+    def __init__(self):
+        self.intensity = 0
+        self.italic = None
+        self.bold = None
+        self.underline = None
+        self.foreground_color = None
+        self.background_color = None
+        self.default_foreground_color = 30
+        self.default_background_color = 47
+        
+    def set_code(self, code):
+        assert isinstance(code, int)
+        if code == 0:
+            # Reset all settings
+            self.reset()
+        elif code == 1:
+            # Text color intensity
+            self.intensity = 1
+            # The following line is commented because most terminals won't 
+            # change the font weight, against ANSI standard recommendation:
+#            self.bold = True
+        elif code == 3:
+            # Italic on
+            self.italic = True
+        elif code == 4:
+            # Underline simple
+            self.underline = True
+        elif code == 22:
+            # Normal text color intensity
+            self.intensity = 0
+            self.bold = False
+        elif code == 23:
+            # No italic
+            self.italic = False
+        elif code == 24:
+            # No underline
+            self.underline = False
+        elif code >= 30 and code <= 37:
+            # Text color
+            self.foreground_color = code
+        elif code == 39:
+            # Default text color
+            self.foreground_color = self.default_foreground_color
+        elif code >= 40 and code <= 47:
+            # Background color
+            self.background_color = code
+        elif code == 49:
+            # Default background color
+            self.background_color = self.default_background_color
+        self.set_style()
+        
+    def reset(self):
+        self.current_format = None
+        self.intensity = 0
+        self.italic = False
+        self.bold = False
+        self.underline = False
+        self.foreground_color = None
+        self.background_color = None
\ No newline at end of file
diff --git a/lib/taurus/core/util/containers.py b/lib/taurus/core/util/containers.py
index 6329204..ccebe4d 100644
--- a/lib/taurus/core/util/containers.py
+++ b/lib/taurus/core/util/containers.py
@@ -864,10 +864,10 @@ class DefaultThreadDict(defaultdict_fromkey,ThreadDict):
     
 
 def getDictAsTree(dct):
-    """ this method will print a recursive dict in a tree-like shape::
+    """This method will print a recursive dict in a tree-like shape::
     
-        >>> print getDictAsTree({'A':{'B':[1,2],'C':[3]}})
-        A
+       >>> print getDictAsTree({'A':{'B':[1,2],'C':[3]}})
+       A
             C
                 3
             B
diff --git a/lib/taurus/core/util/enumeration.py b/lib/taurus/core/util/enumeration.py
index 149c50e..3243907 100644
--- a/lib/taurus/core/util/enumeration.py
+++ b/lib/taurus/core/util/enumeration.py
@@ -83,15 +83,18 @@ class Enumeration(object):
         'PASSAT'
     """
         
-    def __init__(self, name, enumList):
+    def __init__(self, name, enumList, flaggable=False):
         self.__doc__ = name
         lookup = { }
         reverseLookup = { }
-        uniqueNames = [ ]
-        self._uniqueValues = uniqueValues = [ ]
+        uniqueNames = set()
+        self._flaggable = flaggable
+        self._uniqueValues = uniqueValues = set()
         self._uniqueId = 0
         for x in enumList:
             if type(x) == types.TupleType:
+                if flaggable:
+                    raise EnumException("flagablle enum does not accept tuple items")
                 x, i = x
                 if type(x) != types.StringType:
                     raise EnumException("enum name is not a string: %s" % str(x))
@@ -101,8 +104,8 @@ class Enumeration(object):
                     raise EnumException("enum name is not unique: " % str(x))
                 if i in uniqueValues:
                     raise EnumException("enum value is not unique for " % str(x))
-                uniqueNames.append(x)
-                uniqueValues.append(i)
+                uniqueNames.add(x)
+                uniqueValues.add(i)
                 lookup[x] = i
                 reverseLookup[i] = x
         for x in enumList:
@@ -111,18 +114,21 @@ class Enumeration(object):
                     raise EnumException("enum name is not a string: " % str(x))
                 if x in uniqueNames:
                     raise EnumException("enum name is not unique: " % str(x))
-                uniqueNames.append(x)
+                uniqueNames.add(x)
                 i = self._generateUniqueId()
-                uniqueValues.append(i)
+                uniqueValues.add(i)
                 lookup[x] = i
                 reverseLookup[i] = x
         self.lookup = lookup
         self.reverseLookup = reverseLookup
    
     def _generateUniqueId(self):
-        while self._uniqueId in self._uniqueValues:
-            self._uniqueId += 1
-        n = self._uniqueId
+        if self._flaggable:
+            n = 2**self._uniqueId
+        else:
+            while self._uniqueId in self._uniqueValues:
+                self._uniqueId += 1
+            n = self._uniqueId
         self._uniqueId += 1
         return n
     
diff --git a/lib/taurus/core/util/event.py b/lib/taurus/core/util/event.py
index 5208184..c620da9 100644
--- a/lib/taurus/core/util/event.py
+++ b/lib/taurus/core/util/event.py
@@ -29,7 +29,7 @@ event.py:
 
 __all__ = ["BoundMethodWeakref", "CallableRef", "EventGenerator", 
            "ConfigEventGenerator", "ListEventGenerator", "EventListener",
-           "AttributeEventWait"]
+           "AttributeEventWait", "AttributeEventIterator"]
 
 __docformat__ = "restructuredtext"
 
@@ -324,12 +324,7 @@ class EventGenerator(Object):
         
         :return: the last event value
         :rtype: object"""
-        try:
-            self.lock()
-            val = self.last_val
-        finally:
-            self.unlock()
-        return val
+        return self.last_val
 
 
 class EventListener(object):
@@ -516,6 +511,7 @@ class AttributeEventWait(object):
     def clearEventSet(self):
         "Clears the internal event buffer"
         self._event_set.clear()
+        self._last_val = None
 
     def eventReceived(self, s, t, v):
         """Event listener method for the underlying attribute. Do not call this
@@ -543,8 +539,35 @@ class AttributeEventWait(object):
             self._cond.notifyAll()
         finally:
             self.unlock()
-
-    def waitEvent(self, val, after=0, equal=True, timeout=None, retries=-1):
+    
+    def getLastRecordedEvent(self):
+        """returns the value of the last recorded event or None if no event has
+        been received or the last event was an error event
+        
+        :return: the last event value to be recorded
+        :rtype: object"""
+        return self._last_val
+    
+    def getRecordedEvents(self):
+        """Returns a reference to the internal dictionary used to store the internal
+        events. Modify the return dictionary at your own risk!
+        
+        :return: reference to the internal event dictionary
+        :rtype: dict"""
+        return self._event_set
+    
+    def getRecordedEvent(self, v):
+        """Returns the the recorded local timestamp for the event with the given
+        value or None if no event with the given value has been recorded.
+        
+        :param v: event value
+        :type  v: object
+        :return: local timestamp for the event or None if no event has been recorded
+        :rtype: float"""
+        return self._event_set.get(v)
+    
+    def waitEvent(self, val, after=0, equal=True, timeout=None, retries=-1,
+                  any=False):
         """Wait for an event with the given value.
         
         :param val: value to compare
@@ -561,15 +584,31 @@ class AttributeEventWait(object):
         :param retries: number of maximum retries of max timeout to attempts. 
                         Default is -1 meaning infinite number of retries.
                         0 means no wait. Positive number is obvious.
+        :param any: if any is True ignore 'val' parameter and accept any event.
+                    If False (default),check with given 'val' parameter
+        :type  any: bool
         """
-        if after is None: after = 0
+        if retries == 0:
+            return
+        if timeout is None:
+            # if waitting forever doesn't make sense to retry
+            retries = 1
+        if after is None:
+            after = 0
         s = self._event_set
         self.lock()
         try:
+            # increase the retries by one just because of how the loop is done
+            if retries > 0:
+                retries += 1
             while retries != 0:
+                if any:
+                    for v, t in s.items():
+                        if t >= after: return
                 if equal:
                     t = s.get(val)
-                    if t and t >= after: return
+                    if (t is not None) and (t >= after):
+                        return
                 else:
                     for v, t in s.items():
                         if v == val: continue
@@ -577,7 +616,7 @@ class AttributeEventWait(object):
                 self._cond.wait(timeout)
                 retries -= 1
         except Exception, e:
-            print "INFO: Caught exception while waiting:", str(e)
+            sys.stderr.write("AttributeEventWait: Caught exception while waitting: %s\n" % str(e))
             raise e
         finally:
             self.unlock()
diff --git a/lib/taurus/core/__init__.py b/lib/taurus/core/util/excepthook.py
similarity index 57%
copy from lib/taurus/core/__init__.py
copy to lib/taurus/core/util/excepthook.py
index 6e2ae16..8d4d1f8 100644
--- a/lib/taurus/core/__init__.py
+++ b/lib/taurus/core/util/excepthook.py
@@ -23,28 +23,31 @@
 ##
 #############################################################################
 
-"""The core module"""
+"""This module contains a base class for exception hooks"""
+
+__all__ = ["BaseExceptHook"]
 
 __docformat__ = "restructuredtext"
 
-import release as Release
-from .enums import *
-from .taurusexception import *
-from .taurusmodel import *
-from .tauruslistener import *
-from .taurusdevice import *
-from .taurusattribute import *
-from .taurusconfiguration import *
-from .taurusdatabase import *
-from .taurusfactory import *
-from .taurusmanager import *
-from .taurusoperation import *
-from .tauruspollingtimer import *
-from .taurusvalidator import *
+import sys
 
-# enable compatibility code with tau V1 if tauv1 package is present
-try:
-    from .tauv1 import *
-except:
-    pass
 
+class BaseExceptHook(object):
+    """A callable class that acts as an excepthook that handles an exception.
+    This base class simply calls the :obj:`sys.__excepthook__`
+    
+    :param hook_to: callable excepthook that will be called at the end of
+                    this hook handling [default: None]
+    :type hook_to: callable"""
+    
+    def __init__(self, hook_to=None):
+        self._excepthook = hook_to
+        
+    def __call__(self, *exc_info):
+        self.report(*exc_info)
+        if self._excepthook is not None:
+            return self._excepthook(*exc_info)
+    
+    def report(self, *exc_info):
+        """Report an exception. Overwrite as necessary"""
+        return sys.__excepthook__(*exc_info)
diff --git a/lib/taurus/core/util/lock.py b/lib/taurus/core/util/lock.py
new file mode 100644
index 0000000..ca55ca3
--- /dev/null
+++ b/lib/taurus/core/util/lock.py
@@ -0,0 +1,102 @@
+#!/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 a *slow* lock class that provides additional debugging
+information"""
+
+__all__ = ["TaurusLock"]
+
+__docformat__ = 'restructuredtext'
+
+import threading
+import logging
+
+_VERBOSE = False
+
+def TaurusLock(verbose=None, name=None, lock=None):
+    if verbose is None:
+        verbose = _VERBOSE
+    if verbose:
+        return _TaurusLock(name=name, lock=lock)
+    if lock is None:
+        return threading.Lock()
+    return lock
+
+class _TaurusLock(object):
+    """A sardana lock"""
+    
+    def __init__(self, name=None, lock=None, level=logging.DEBUG):
+        name = name or self.__class__.__name__
+        self.__name = name
+        self.__logger = logging.getLogger(name=name)
+        self.__level = level
+        if lock is None:
+            lock = threading.Lock()
+        self.__block = lock
+        self.__owner = None
+
+    def __repr__(self):
+        owner = self.__owner
+        if owner is not None:
+            owner = owner.name
+        return "<%s owner=%r>" % (self.__name, owner)
+    
+    def owner_name(self):
+        owner = self.__owner
+        if owner is not None:
+            return owner.name
+    
+    def _note(self, msg, *args):
+        self.__logger.log(self.__level, msg, *args)
+
+    def acquire(self, blocking=1):
+        if __debug__:
+            self._note("[START] acquire(%s) [owner=%s]", blocking,
+                       self.owner_name())
+        rc = self.__block.acquire(blocking)
+        me = threading.current_thread()
+        if rc:
+            self.__owner = me
+            state = "success"
+        else:
+            state = "failure"
+        if __debug__:
+            self._note("[ END ] acquire(%s) %s [owner=%s]", blocking, state,
+                       self.owner_name())
+        return rc
+    
+    __enter__ = acquire
+    
+    def release(self):
+        if __debug__:
+            self._note("[START] release() [owner=%s]", self.owner_name())
+        self.__block.release()
+        self.__owner = None
+        if __debug__:
+            self._note("[ END ] release() [owner=%s]", self.owner_name())
+    
+    def __exit__(self, t, v, tb):
+        self.release()
+    
\ No newline at end of file
diff --git a/lib/taurus/core/util/log.py b/lib/taurus/core/util/log.py
index 27d2a12..88e2953 100644
--- a/lib/taurus/core/util/log.py
+++ b/lib/taurus/core/util/log.py
@@ -27,7 +27,8 @@
 :mod:`logging` system."""
 
 __all__ = ["LogIt", "TraceIt", "DebugIt", "InfoIt", "WarnIt", "ErrorIt",
-           "CriticalIt", "MemoryLogHandler", "Logger", "LogFilter"]
+           "CriticalIt", "MemoryLogHandler", "LogExceptHook", "Logger",
+           "LogFilter"]
 
 __docformat__ = "restructuredtext"
 
@@ -42,6 +43,7 @@ import functools
 import threading
 
 from object import Object
+from excepthook import BaseExceptHook
 
 TRACE = 5
 logging.addLevelName(TRACE, "TRACE")
@@ -123,20 +125,20 @@ class LogIt(object):
                 if len(kwargs):   in_msg += str(kwargs)
             if self._col_limit and len(in_msg) > self._col_limit: in_msg = "%s [...]" % in_msg[:self._col_limit-6]
             log_obj.log(self._level, in_msg)
-            ret = None
-            raise_ex = None
+            out_msg = "<-"
             try:
                 ret = f(*args, **kwargs)
-            except Exception,e:
-                raise_ex = e
-            out_msg = "<-"
-            if not raise_ex is None: out_msg += " (with %s)" % raise_ex.__class__.__name__
+            except Exception, e:
+                exc_info = sys.exc_info()
+                out_msg += " (with %s) %s" % (e.__class__.__name__, fname)
+                log_obj.log(self._level, out_msg, exc_info=exc_info)
+                raise
             out_msg += " %s" % fname
             if not ret is None and self._showret:
                 out_msg += " = %s" % str(ret)
-            if self._col_limit and len(out_msg) > self._col_limit: out_msg = "%s [...]" % out_msg[:self._col_limit-6]
+            if self._col_limit and len(out_msg) > self._col_limit:
+                out_msg = "%s [...]" % out_msg[:self._col_limit-6]
             log_obj.log(self._level, out_msg)
-            if not raise_ex is None: raise raise_ex
             return ret
         return wrapper
 
@@ -268,12 +270,37 @@ class MemoryLogHandler(list, logging.handlers.BufferingHandler):
         self.flush()
         del self[:]
         BufferingHandler.close(self)
+
+
+class LogExceptHook(BaseExceptHook):
+    """A callable class that acts as an excepthook that logs the exception in
+    the python logging system.
+    
+    :param hook_to: callable excepthook that will be called at the end of
+                    this hook handling [default: None]
+    :type hook_to: callable
+    :param name: logger name [default: None meaning use class name]
+    :type name: str
+    :param level: log level [default: logging.ERROR]
+    :type level: int"""
     
+    def __init__(self, hook_to=None, name=None, level=logging.ERROR):
+        BaseExceptHook.__init__(self, hook_to=hook_to)
+        name = name or self.__class__.__name__
+        self._level = level
+        self._log = Logger(name=name)
+        
+    def report(self, *exc_info):
+        text = "".join(traceback.format_exception(*exc_info))
+        if text[-1] == '\n':
+            text = text[:-1]
+        self._log.log(self._level, "Unhandled exception:\n%s", text)
+
 
 class Logger(Object):
-    """The taurus logger class. All taurus pertinent classes should inherit directly
-    or indirectly from this class if they need taurus logging facilities.
-    """
+    """The taurus logger class. All taurus pertinent classes should inherit
+    directly or indirectly from this class if they need taurus logging
+    facilities."""
     
     #: Internal usage
     root_inited    = False
@@ -344,12 +371,6 @@ class Logger(Object):
             self.log_parent = weakref.ref(parent)
             parent.addChild(self)
 
-    def __del__(self):
-        self.log_obj = None
-        self.log_handlers = None
-        self.log_parent = None
-        self.log_children = None
-
     def cleanUp(self):
         """The cleanUp. Default implementation does nothing
            Overwrite when necessary
@@ -367,11 +388,8 @@ class Logger(Object):
         try:
             cls.root_init_lock.acquire()
             root_logger = cls._getRootLog()
-            
-                
-
             logging.addLevelName(cls.Trace, "TRACE")
-            cls.stream_handler = logging.StreamHandler()
+            cls.stream_handler = logging.StreamHandler(sys.__stderr__)
             cls.stream_handler.setFormatter(cls.log_format)
             root_logger.addHandler(cls.stream_handler)
             
@@ -392,7 +410,7 @@ class Logger(Object):
         
            :param h: (logging.Handler) the new log handler
         """
-        h.setFormatter(logging.Formatter(cls.getLogFormat()))
+        h.setFormatter(cls.getLogFormat())
         cls.initRoot().addHandler(h)
         
     @classmethod
@@ -524,9 +542,6 @@ class Logger(Object):
         if not self.log_children.get(id(child)):
             self.log_children[id(child)]=weakref.ref(child)
 
-    def __eq__(self, other):
-        return self is other
-
     def addLogHandler(self, handler):
         """Registers a new handler in this object's logger
         
@@ -544,7 +559,8 @@ class Logger(Object):
             self.addLogHandler(handler)
             
     def trace(self, msg, *args, **kw):
-        """Record a trace message in this object's logger
+        """Record a trace message in this object's logger. Accepted *args* and
+           *kwargs* are the same as :meth:`logging.Logger.log`.
         
            :param msg: (str) the message to be recorded
            :param args: list of arguments
@@ -626,7 +642,8 @@ class Logger(Object):
         return out
     
     def log(self, level, msg, *args, **kw):
-        """Record a log message in this object's logger
+        """Record a log message in this object's logger. Accepted *args* and
+           *kwargs* are the same as :meth:`logging.Logger.log`.
         
            :param level: (int) the record level
            :param msg: (str) the message to be recorded
@@ -636,7 +653,8 @@ class Logger(Object):
         self.log_obj.log(level, msg, *args, **kw)
     
     def debug(self, msg, *args, **kw):
-        """Record a debug message in this object's logger
+        """Record a debug message in this object's logger. Accepted *args* and
+           *kwargs* are the same as :meth:`logging.Logger.debug`.
         
            :param msg: (str) the message to be recorded
            :param args: list of arguments
@@ -645,7 +663,8 @@ class Logger(Object):
         self.log_obj.debug(msg, *args, **kw)
 
     def info(self, msg, *args, **kw):
-        """Record an info message in this object's logger
+        """Record an info message in this object's logger. Accepted *args* and
+           *kwargs* are the same as :meth:`logging.Logger.info`.
         
            :param msg: (str) the message to be recorded
            :param args: list of arguments
@@ -654,7 +673,8 @@ class Logger(Object):
         self.log_obj.info(msg, *args, **kw)
 
     def warning(self, msg, *args, **kw):
-        """Record a warning message in this object's logger
+        """Record a warning message in this object's logger. Accepted *args* and
+           *kwargs* are the same as :meth:`logging.Logger.warning`.
         
            :param msg: (str) the message to be recorded
            :param args: list of arguments
@@ -663,7 +683,8 @@ class Logger(Object):
         self.log_obj.warning(msg, *args, **kw)
 
     def deprecated(self, msg, *args, **kw):
-        """Record a deprecated warning message in this object's logger
+        """Record a deprecated warning message in this object's logger. Accepted *args* and
+           *kwargs* are the same as :meth:`logging.Logger.warning`.
         
            :param msg: (str) the message to be recorded
            :param args: list of arguments
@@ -674,7 +695,8 @@ class Logger(Object):
         self.log_obj.warning(depr_msg, *args, **kw)
 
     def error(self, msg, *args, **kw):
-        """Record an error message in this object's logger
+        """Record an error message in this object's logger. Accepted *args* and
+           *kwargs* are the same as :meth:`logging.Logger.error`.
         
            :param msg: (str) the message to be recorded
            :param args: list of arguments
@@ -683,14 +705,25 @@ class Logger(Object):
         self.log_obj.error(msg, *args, **kw)
 
     def critical(self, msg, *args, **kw):
-        """Record a critical message in this object's logger
+        """Record a critical message in this object's logger. Accepted *args* and
+           *kwargs* are the same as :meth:`logging.Logger.critical`.
         
            :param msg: (str) the message to be recorded
            :param args: list of arguments
            :param kw: list of keyword arguments
         """
         self.log_obj.critical(msg, *args, **kw)
-
+    
+    def exception(self, msg, *args):
+        """Log a message with severity 'ERROR' on the root logger, with 
+           exception information.. Accepted *args* are the same as 
+           :meth:`logging.Logger.exception`.
+        
+           :param msg: (str) the message to be recorded
+           :param args: list of arguments
+        """
+        self.log_obj.exception(msg, *args)
+    
     def flushOutput(self):
         """Flushes the log output"""
         self.syncLog()
diff --git a/lib/taurus/core/util/safeeval.py b/lib/taurus/core/util/safeeval.py
index 9fc77c2..730e3d2 100644
--- a/lib/taurus/core/util/safeeval.py
+++ b/lib/taurus/core/util/safeeval.py
@@ -46,17 +46,21 @@ class SafeEvaluator:
     
     Note: In order to use variables defined outside, the user must explicitly declare them safe. 
     """
-    def __init__(self, safedict={}, defaultSafe=True):
+    def __init__(self, safedict=None, defaultSafe=True):
         self._default_numpy = ('abs', 'array', 'arange','arccos', 'arcsin', 'arctan', 'arctan2', 
                                'ceil', 'cos', 'cosh', 'degrees', 'dot', 'e', 'exp', 'fabs', 'floor', 'fmod', 
                                'frexp', 'hypot', 'ldexp', 'linspace', 'log', 'log10', 'logspace', 
-                               'modf', 'pi', 'radians', 'shape', 'sin', 'sinh', 'sqrt', 'tan', 'tanh')
+                               'modf', 'ones', 'pi', 'radians', 'shape', 'sin', 'sinh', 'sqrt', 'tan', 
+                               'tanh','zeros')
         self._default_numpy_random = ('randn','rand') 
-            
+        
+        if safedict is None: safedict={}    
         self.safe_dict = safedict
         if defaultSafe:
             self.safe_dict['pow'] = pow
             self.safe_dict['len'] = len
+            self.safe_dict['int'] = int
+            self.safe_dict['float'] = float
             for n in self._default_numpy:
                 self.safe_dict[n] = getattr(numpy, n)
             for n in self._default_numpy_random:
diff --git a/lib/taurus/core/util/sourcecode.py b/lib/taurus/core/util/sourcecode.py
new file mode 100644
index 0000000..036f579
--- /dev/null
+++ b/lib/taurus/core/util/sourcecode.py
@@ -0,0 +1,66 @@
+#!/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/>.
+##
+#############################################################################
+
+"""Source code text utilities"""
+
+__all__ = ["get_eol_chars", "get_os_name_from_eol_chars",
+           "get_eol_chars_from_os_name", "has_mixed_eol_chars",
+           "fix_indentation"]
+
+__docformat__ = 'restructuredtext'
+
+# Order is important:
+EOL_CHARS = (("\r\n", 'nt'), ("\n", 'posix'), ("\r", 'mac'))
+
+def get_eol_chars(text):
+    """Get text EOL characters"""
+    for eol_chars, _os_name in EOL_CHARS:
+        if text.find(eol_chars) > -1:
+            return eol_chars
+
+def get_os_name_from_eol_chars(eol_chars):
+    """Return OS name from EOL characters"""
+    for chars, os_name in EOL_CHARS:
+        if eol_chars == chars:
+            return os_name
+
+def get_eol_chars_from_os_name(os_name):
+    """Return EOL characters from OS name"""
+    for eol_chars, name in EOL_CHARS:
+        if name == os_name:
+            return eol_chars
+
+def has_mixed_eol_chars(text):
+    """Detect if text has mixed EOL characters"""
+    eol_chars = get_eol_chars(text)
+    if eol_chars is None:
+        return False
+    correct_text = eol_chars.join((text+eol_chars).splitlines())
+    return repr(correct_text) != repr(text)
+
+def fix_indentation(text):
+    """Replace tabs by spaces"""
+    return text.replace('\t', ' '*4)
+    
\ No newline at end of file
diff --git a/lib/taurus/core/util/threadpool.py b/lib/taurus/core/util/threadpool.py
index 2510a55..37d036c 100644
--- a/lib/taurus/core/util/threadpool.py
+++ b/lib/taurus/core/util/threadpool.py
@@ -29,21 +29,24 @@ __all__ = ["ThreadPool", "Worker"]
 
 __docformat__ = "restructuredtext"
 
-from threading import Thread
+from threading import Thread, currentThread
 from Queue import Queue
 from time import sleep
+from traceback import extract_stack, format_list
 
 from prop import propertx
 from log import Logger, DebugIt, TraceIt
 
+
 class ThreadPool(Logger):
     """"""
-    threadId = 0
+    
+    NoJob = 6*(None,)
     
     def __init__(self, name=None, parent=None, Psize=20, Qsize=20, daemons=True):
-        name = name or self.__class__.__name__
         Logger.__init__(self, name, parent)
         self._daemons = daemons
+        self.localThreadId = 0
         self.workers = []
         self.jobs = Queue(Qsize)
         self.size = Psize
@@ -53,16 +56,22 @@ class ThreadPool(Logger):
     def size():
         def set(self, newSize):
             """set method for the size property"""
-            for i in xrange(newSize-len(self.workers)):
-                ThreadPool.threadId += 1
-                name = "%s.W%03i" % (self.log_name, ThreadPool.threadId)
+            nb_workers = len(self.workers)
+            if newSize == nb_workers:
+                return
+            
+            for i in range(newSize - nb_workers):
+                self.localThreadId += 1
+                name = "%s.W%03i" % (self.log_name, self.localThreadId)
                 new = Worker(self, name, self._daemons)
                 self.workers.append(new)
                 self.debug("Starting %s" % name)
                 new.start()
+            
             # remove the old worker threads
-            for i in xrange(len(self.workers)-newSize):
-                self.jobs.put((None, None, None, None))
+            nb_workers = len(self.workers)
+            for i in range(nb_workers - newSize):
+                self.jobs.put(self.NoJob)
                 
         def get(self):
             """get method for the size property"""
@@ -72,14 +81,17 @@ class ThreadPool(Logger):
     
     def add(self, job, callback=None, *args, **kw):
         if self.accept:
-            self.jobs.put((job, args, kw, callback))
+            # first gather some information on the object which requested the
+            # job in case the job throws an exception
+            th_id, stack = currentThread().name, extract_stack()[:-1]
+            self.jobs.put((job, args, kw, callback, th_id, stack))
             
     def join(self):
         self.accept=False
         while True:
             for w in self.workers:
                 if w.isAlive() :
-                    self.jobs.put((None, None, None, None))
+                    self.jobs.put(self.NoJob)
                     break
             else:
                 break
@@ -87,6 +99,7 @@ class ThreadPool(Logger):
     @property
     def qsize(self): return self.jobs.qsize()
 
+
 class Worker(Thread, Logger):
     
     def __init__(self, pool, name=None, daemon=True):
@@ -97,18 +110,24 @@ class Worker(Thread, Logger):
         self.pool = pool
         self.cmd=''
     
-    #@TraceIt()
     def run(self):
         get = self.pool.jobs.get
         while True:
-            cmd, args, kw, callback = get()
+            cmd, args, kw, callback, th_id, stack = get()
             if cmd:
                 self.cmd = cmd.__name__
-                if callback:
-                    callback(cmd(*args, **kw))
-                else:
-                    cmd(*args, **kw)
-                self.cmd = ''
+                try:
+                    if callback:
+                        callback(cmd(*args, **kw))
+                    else:
+                        cmd(*args, **kw)
+                except:
+                    orig_stack = "".join(format_list(stack))
+                    self.error("Uncaught exception running job '%s' called "
+                               "from thread %s:\n%s",
+                               self.cmd, th_id, orig_stack, exc_info=1)
+                finally:
+                    self.cmd = ''
             else:
                 self.pool.workers.remove(self)
                 return
diff --git a/lib/taurus/qt/qtgui/extra_sardana/__init__.py b/lib/taurus/qt/Qt.py
similarity index 81%
copy from lib/taurus/qt/qtgui/extra_sardana/__init__.py
copy to lib/taurus/qt/Qt.py
index 0cd27bd..72a704c 100644
--- a/lib/taurus/qt/qtgui/extra_sardana/__init__.py
+++ b/lib/taurus/qt/Qt.py
@@ -23,9 +23,13 @@
 ##
 #############################################################################
 
-"""This package contains a collection of taurus widgets designed to connect
-to sardana"""
+""""""
 
-__docformat__ = 'restructuredtext'
+from taurusqtoptions import QT_API, QT_API_PYQT, QT_API_PYSIDE
 
-from .sardanashell import *
\ No newline at end of file
+# Now peform the imports.
+if QT_API == QT_API_PYQT:
+    from PyQt4.Qt import *
+    from PyQt4.Qt import Qt
+elif QT_API == QT_API_PYSIDE:
+    from PySide.Qt import *
diff --git a/lib/taurus/qt/qtcore/tango/macroserver/__init__.py b/lib/taurus/qt/QtCore.py
similarity index 65%
rename from lib/taurus/qt/qtcore/tango/macroserver/__init__.py
rename to lib/taurus/qt/QtCore.py
index cc2136f..153c541 100644
--- a/lib/taurus/qt/qtcore/tango/macroserver/__init__.py
+++ b/lib/taurus/qt/QtCore.py
@@ -23,18 +23,22 @@
 ##
 #############################################################################
 
-"""
-MacroServer extension for taurus Qt
-"""
+""""""
 
-__docformat__ = 'restructuredtext'
+from taurusqtoptions import QT_API, QT_API_PYQT, QT_API_PYSIDE
 
-from .macroserver import *
+# Now peform the imports.
+if QT_API == QT_API_PYQT:
+    from PyQt4 import QtCore as __QtCore
+    from PyQt4.QtCore import *
 
-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)
-    
\ No newline at end of file
+    # Alias PyQt-specific functions for PySide compatibility.
+    if hasattr(__QtCore, "pyqtSignal"):
+        Signal = pyqtSignal
+    if hasattr(__QtCore, "pyqtSlot"):
+        Slot = pyqtSlot
+    if hasattr(__QtCore, "pyqtProperty"):
+        Property = pyqtProperty
+    __version__ = QT_VERSION_STR
+elif QT_API == QT_API_PYSIDE:
+    from PySide.QtCore import *
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_sardana/__init__.py b/lib/taurus/qt/QtGui.py
similarity index 83%
copy from lib/taurus/qt/qtgui/extra_sardana/__init__.py
copy to lib/taurus/qt/QtGui.py
index 0cd27bd..d26f0ea 100644
--- a/lib/taurus/qt/qtgui/extra_sardana/__init__.py
+++ b/lib/taurus/qt/QtGui.py
@@ -23,9 +23,12 @@
 ##
 #############################################################################
 
-"""This package contains a collection of taurus widgets designed to connect
-to sardana"""
+""""""
 
-__docformat__ = 'restructuredtext'
+from taurusqtoptions import QT_API, QT_API_PYQT, QT_API_PYSIDE
 
-from .sardanashell import *
\ No newline at end of file
+# 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
diff --git a/lib/taurus/qt/qtgui/extra_sardana/__init__.py b/lib/taurus/qt/QtSvg.py
similarity index 83%
copy from lib/taurus/qt/qtgui/extra_sardana/__init__.py
copy to lib/taurus/qt/QtSvg.py
index 0cd27bd..f84088e 100644
--- a/lib/taurus/qt/qtgui/extra_sardana/__init__.py
+++ b/lib/taurus/qt/QtSvg.py
@@ -23,9 +23,12 @@
 ##
 #############################################################################
 
-"""This package contains a collection of taurus widgets designed to connect
-to sardana"""
+""""""
 
-__docformat__ = 'restructuredtext'
+from taurusqtoptions import QT_API, QT_API_PYQT, QT_API_PYSIDE
 
-from .sardanashell import *
\ No newline at end of file
+# Now peform the imports.
+if QT_API == QT_API_PYQT:
+    from PyQt4.QtSvg import *
+elif QT_API == QT_API_PYSIDE:
+    from PySide.QtSvg import *
\ No newline at end of file
diff --git a/lib/taurus/qt/__init__.py b/lib/taurus/qt/__init__.py
index 9a6e311..fb64884 100644
--- a/lib/taurus/qt/__init__.py
+++ b/lib/taurus/qt/__init__.py
@@ -27,3 +27,14 @@
 
 __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
+
diff --git a/lib/taurus/qt/qtcore/communication/communication.py b/lib/taurus/qt/qtcore/communication/communication.py
index 075517f..b92f60d 100644
--- a/lib/taurus/qt/qtcore/communication/communication.py
+++ b/lib/taurus/qt/qtcore/communication/communication.py
@@ -27,7 +27,7 @@
 comunications.py: 
 """
 
-from PyQt4 import QtCore
+from taurus.qt import QtCore
 import weakref, copy
 
 _DEBUG = False
@@ -122,6 +122,7 @@ class DataModel(QtCore.QObject):
         self.connect(writer, QtCore.SIGNAL(signalname),self.setData)
         self.__writers += 1
         self.__writerSignals.append((weakref.ref(writer),signalname))
+        
     def disconnectWriter(self, writer, signalname):
         '''unregister a writer from this data model
                         
diff --git a/lib/taurus/qt/qtcore/configuration/configuration.py b/lib/taurus/qt/qtcore/configuration/configuration.py
index fbf2efe..e736988 100644
--- a/lib/taurus/qt/qtcore/configuration/configuration.py
+++ b/lib/taurus/qt/qtcore/configuration/configuration.py
@@ -31,24 +31,33 @@ __all__ = ["configurableProperty", "BaseConfigurableClass"]
 __docformat__ = 'restructuredtext'
 
 class configurableProperty:
-    '''A dummy class used to handle properties with the configuration API'''
+    '''A dummy class used to handle properties with the configuration API
+    
+    .. warning:: this class is intended for internal use by the configuration
+                 package. Do not instantiate it directly in your code. Use
+                 :meth:`BaseConfigurableClass.registerConfigProperty` instead.
+    '''
     def __init__(self, name, fget, fset, obj=None):
         self.name = name
         self.fget = fget #this may either be a method or a method name
         self.fset = fset #this may either be a method or a method name
         self._obj = obj  #obj is only needed if fset or fget are method names
+        
     def createConfig(self, allowUnpickable=False):
+        '''returns value returned by the fget function of this property. the allowUnpickable parameter is ignored'''
         if isinstance(self.fget, basestring):# fget is not a method but a method name...
             result = getattr(self._obj, self.fget)()
         else:
             result = self.fget() 
         return result
     def applyConfig(self, value, depth=-1):
+        '''calls the fset function for this property with the given value. The depth parameter is ignored'''
         if isinstance(self.fget, basestring):# fget is not a method but a method name...
             getattr(self._obj, self.fset)(value)
         else:
             self.fset(value)
     def objectName(self):
+        '''returns the name of this property'''
         return self.name
 
 
@@ -59,7 +68,7 @@ class BaseConfigurableClass:
     
     .. note:: One implicit requisite is that a configurable object must also provide a
               `meth:`objectName` method which returns the object name. This is typically
-              fullfilled by inheritting from QObject.
+              fulfilled by inheriting from QObject.
               
     Using objects that inherit from :class:`BaseConfigurableClass` automates
     saving and restoring of application settings and also enables the use of
@@ -107,7 +116,7 @@ class BaseConfigurableClass:
     (:meth:`saveConfigFile` and :meth:`loadConfigFile`) or as QByteArrays
     (:meth:`createQConfig` and :meth:`applyQConfig`)
     
-    Finally, we reccommend to use :class:`TaurusMainWindow` for all Taurus GUIs
+    Finally, we recommend to use :class:`TaurusMainWindow` for all Taurus GUIs
     since it automates all the steps for *saving properties when closing* and
     *restoring the settings on startup*. It also provides a mechanism for
     implementing "perspectives" in your application.
@@ -143,7 +152,7 @@ class BaseConfigurableClass:
         this method, although it can be reimplemented in children classes to support
         very specific configurations.
         
-        By default, meth:`createQConfig` and `saveConfigFile` call to this
+        By default, meth:`createQConfig` and meth:`saveConfigFile` call to this
         method for obtaining the data.
         
         Hint: The following code allows you to serialize the configuration
@@ -164,7 +173,7 @@ class BaseConfigurableClass:
         
         :return: (dict<str,object>) configurations (which can be loaded with :meth:`applyConfig`).
         
-        .. seealso: :meth:`applyConfig` , :meth:`registerConfigurableItem`
+        .. seealso: :meth:`applyConfig` , :meth:`registerConfigurableItem`,  meth:`createQConfig`, meth:`saveConfigFile`
         '''
         configdict = {"ConfigVersion":self._supportedConfigVersions[-1],
                       "__pickable__": True}
@@ -347,7 +356,7 @@ class BaseConfigurableClass:
             msg = 'Unsupported Config Version %s. (Supported: %s)'%(version, repr(supportedVersions))
             self.warning(msg)
             if showDialog: 
-                from PyQt4 import Qt
+                from taurus.qt import Qt
                 Qt.QMessageBox.warning(self, "Wrong Configuration Version", msg, Qt.QMessageBox.Ok)
             return False
         return True
@@ -362,7 +371,7 @@ class BaseConfigurableClass:
         
         .. seealso:: :meth:`restoreQConfig`
         '''
-        from PyQt4 import Qt
+        from taurus.qt import Qt
         import cPickle as pickle
         configdict = self.createConfig(allowUnpickable=False)
         return Qt.QByteArray(pickle.dumps(configdict))
@@ -389,7 +398,7 @@ class BaseConfigurableClass:
         """
         import cPickle as pickle
         if ofile is None:
-            from PyQt4 import Qt
+            from taurus.qt import Qt
             ofile = Qt.QFileDialog.getSaveFileName( self, 'Save Configuration', '%s.pck'%self.__class__.__name__, 'Configuration File (*.pck)')
             if ofile.isEmpty(): return
         if not isinstance(ofile,file): ofile=open(ofile,'w')
@@ -407,7 +416,7 @@ class BaseConfigurableClass:
         """
         import cPickle as pickle
         if ifile is None:
-            from PyQt4 import Qt
+            from taurus.qt import Qt
             ifile = Qt.QFileDialog.getOpenFileName( self, 'Load Configuration', '', 'Configuration File (*.pck)')
             if ifile.isEmpty(): return
         if not isinstance(ifile,file): ifile=open(ifile,'r')
diff --git a/lib/taurus/qt/qtcore/model/__init__.py b/lib/taurus/qt/qtcore/model/__init__.py
index 8f426fe..d037e71 100644
--- a/lib/taurus/qt/qtcore/model/__init__.py
+++ b/lib/taurus/qt/qtcore/model/__init__.py
@@ -56,4 +56,5 @@ And now inside a :class:`PyQt4.QtGui.QComboBox`::
 
 __docformat__ = 'restructuredtext'
 
+from taurusmodel import *
 from taurusdatabasemodel import *
\ No newline at end of file
diff --git a/lib/taurus/qt/qtcore/model/taurusdatabasemodel.py b/lib/taurus/qt/qtcore/model/taurusdatabasemodel.py
index e0d71fe..7f9363f 100644
--- a/lib/taurus/qt/qtcore/model/taurusdatabasemodel.py
+++ b/lib/taurus/qt/qtcore/model/taurusdatabasemodel.py
@@ -25,21 +25,25 @@
 
 """This module provides widgets that display the database in a tree format"""
 
-__all__ = ["TaurusTreeItem", "TaurusTreeDevicePartItem", "TaurusTreeDeviceDomainItem",
+__all__ = ["TaurusTreeDevicePartItem", "TaurusTreeDeviceDomainItem",
     "TaurusTreeDeviceFamilyItem", "TaurusTreeDeviceMemberItem", "TaurusTreeSimpleDeviceItem",
     "TaurusTreeDeviceItem", "TaurusTreeAttributeItem", "TaurusTreeServerNameItem",
     "TaurusTreeServerItem", "TaurusTreeDeviceClassItem", "TaurusDbBaseModel",
     "TaurusDbSimpleDeviceModel", "TaurusDbPlainDeviceModel", "TaurusDbDeviceModel",
-    "TaurusDbServerModel", "TaurusDbDeviceClassModel", "TaurusDbBaseProxyModel",
+    "TaurusDbSimpleDeviceAliasModel",
+    "TaurusDbPlainServerModel", "TaurusDbServerModel",
+    "TaurusDbDeviceClassModel",
+    "TaurusDbBaseProxyModel",
     "TaurusDbDeviceProxyModel", "TaurusDbServerProxyModel", "TaurusDbDeviceClassProxyModel"]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
-
+from taurus.qt import Qt
 import taurus.core
 import taurus.qt.qtcore.mimetypes
 
+from taurusmodel import TaurusBaseTreeItem, TaurusBaseModel, TaurusBaseProxyModel
+
 ElemType = taurus.core.TaurusElementType
 DevHealth = taurus.core.TaurusSWDevHealth
 
@@ -69,132 +73,11 @@ def getSWDevHealthToolTip(*args, **kwargs):
     return taurus.qt.qtgui.resource.getSWDevHealthToolTip(*args, **kwargs)
 
 
-class TaurusTreeItem(object):
-    """A generic node"""
-    
+class TaurusTreeDbBaseItem(TaurusBaseTreeItem):
     DisplayFunc = taurus.core.TaurusInfo.name
 
-    def __init__(self, model, data, parent = None):
-        self._model = model
-        self._itemData = data
-        self._parentItem = parent
-        self._childItems = []
-        self._depth = self._calcDepth()
-        
-    def itemData(self):
-        """The internal itemData object
-        
-        :return: (object) object holding the data of this item
-        """
-        return self._itemData
-        
-    def depth(self):
-        """Depth of the node in the hierarchy
-        
-        :return: (int) the node depth
-        """
-        return self._depth
-    
-    def appendChild(self, child):
-        """Adds a new child node
-        
-        :param child: (TaurusTreeItem) child to be added
-        """
-        self._childItems.append(child)
-    
-    def child(self, row):
-        """Returns the child in the given row
-        
-        :return: (TaurusTreeItem) the child node for the given row"""
-        return self._childItems[row]
-    
-    def childCount(self):
-        """Returns the number of childs for this node
-        
-        :return: (int) number of childs for this node
-        """
-        return len(self._childItems)
-    
-    def hasChildren(self):
-        return len(self._childItems) > 0
-    
-    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[index.column()]
-    
-    def setData(self, data):
-        """Sets the node data
-        
-        :param data: (object) the data to be associated with this node
-        """
-        self._itemData = data
-    
-    def parent(self):
-        """Returns the parent node or None if no parent exists
-        
-        :return: (TaurusTreeItem) the parent node
-        """
-        return self._parentItem
-    
-    def row(self):
-        """Returns the row for this node
-        
-        :return: (int) row number for this node
-        """
-        if self._parentItem is None:
-            return 0
-        return self._parentItem._childItems.index(self)
-
-    def _calcDepth(self):
-        d = 0
-        n = self.parent()
-        while n is not None:
-            n = n.parent()
-            d += 1
-        return d
-    
-    def toolTip(self):
-        return
-
-    def display(self):
-        """Returns the display string for this node
-        
-        :return: (str) the node's display string"""
-        if not hasattr(self, "_display"):
-            if self._itemData is None:
-                return None
-            self._display = self.DisplayFunc(self._itemData)
-        return self._display
-
-    def qdisplay(self):
-        """Returns the display QString for this node
-        
-        :return: (Qt.QString) the node's display string"""
-        if not hasattr(self, "_qdisplay"):
-            d = self.display()
-            if d is None:
-                return None
-            self._qdisplay = Qt.QString(d)
-        return self._qdisplay
-
-    def mimeData(self, index):
-        return self.data(index)
 
-    def role(self):
-        """Returns the prefered role for the item.
-        This implementation returns taurus.core.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: (taurus.core.TaurusElementType) the role in form of element type"""
-        return ElemType.Unknown
-
-
-class TaurusTreeDevicePartItem(TaurusTreeItem):
+class TaurusTreeDevicePartItem(TaurusTreeDbBaseItem):
     """A node designed to represent a 'part' (or totality) of a device name"""
 
     def data(self, index):
@@ -238,7 +121,7 @@ class TaurusTreeDeviceMemberItem(TaurusTreeDevicePartItem):
         return ElemType.Member
 
 
-class TaurusTreeSimpleDeviceItem(TaurusTreeItem):
+class TaurusTreeSimpleDeviceItem(TaurusTreeDbBaseItem):
     """A node designed to represent a device (without any child nodes)"""
     
     def hasChildren(self):
@@ -277,7 +160,7 @@ class TaurusTreeSimpleDeviceItem(TaurusTreeItem):
         return ElemType.Device
 
 
-class TaurusTreeDeviceItem(TaurusTreeItem):
+class TaurusTreeDeviceItem(TaurusTreeDbBaseItem):
     """A node designed to represent a device"""
     
     SearchForAttributeHealth = DevHealth.Exported, DevHealth.ExportedAlive, \
@@ -345,23 +228,49 @@ class TaurusTreeDeviceItem(TaurusTreeItem):
         return ElemType.Device
 
 
-class TaurusTreeAttributeItem(TaurusTreeItem):
+class TaurusTreeAttributeItem(TaurusTreeDbBaseItem):
     """A node designed to represent an attribute"""
     
     def data(self, index):
         column, model = index.column(), index.model()
         role = model.role(column, self.depth())
         if role == ElemType.Attribute or role == ElemType.Name:
-            return self._itemData.name()
-
+            data = self.itemData()
+            data_info = data.info()
+            ret = data.name()
+            if data_info and hasattr(data_info, 'label'):
+                ret = "'" + data_info.label + "' (" + ret + ")"
+            return ret
+    
+    def toolTip(self, index):
+        if index.column() > 0:
+            return TaurusTreeDbBaseItem.toolTip(self, index)
+        data = self.itemData()
+        di = data.info()
+        if di is None:
+            return data.name()
+        ret = '<TABLE border="0" cellpadding="1" cellspacing="0">'
+        items = dict(
+            name = "'" + di.label + "' (" + data.name() + ")",
+            description = di.description.replace("<","<").replace(">",">"),
+            unit = di.unit,
+            limits = "[%s, %s]" % (di.min_value, di.max_value),
+            alarms = "[%s, %s]" % (di.alarms.min_alarm, di.alarms.max_alarm),
+            warnings = "[%s, %s]" % (di.alarms.min_warning, di.alarms.max_warning),)
+        
+        for id, value in items.items():
+            ret += '<TR><TD WIDTH="80" ALIGN="RIGHT" VALIGN="MIDDLE"><B>%s:</B></TD><TD>%s</TD></TR>' % (id.capitalize(), value)
+        ret += '</TABLE>'
+        return ret
+        
     def mimeData(self, index):
         return self.itemData().fullName()
-
+    
     def role(self):
         return ElemType.Attribute
-
+    
         
-class TaurusTreeServerNameItem(TaurusTreeItem):
+class TaurusTreeServerNameItem(TaurusTreeDbBaseItem):
     """A node designed to represent the server name part of a server"""
     
     DisplayFunc = str
@@ -377,7 +286,7 @@ class TaurusTreeServerNameItem(TaurusTreeItem):
         return ElemType.ServerName
 
 
-class TaurusTreeServerItem(TaurusTreeItem):
+class TaurusTreeServerItem(TaurusTreeDbBaseItem):
     """A node designed to represent a server"""
     
     def data(self, index):
@@ -394,6 +303,31 @@ class TaurusTreeServerItem(TaurusTreeItem):
             return self._itemData.health()
         elif role == ElemType.Host:
             return self._itemData.host()
+    
+    def mimeData(self, index):
+        return self.itemData().fullName()
+
+    def role(self):
+        return ElemType.Server
+
+
+class TaurusTreeFullServerItem(TaurusTreeDbBaseItem):
+    """A node designed to represent a server"""
+    
+    def data(self, index):
+        column, model = index.column(), index.model()
+        role = model.role(column, self.depth())
+        
+        if role == ElemType.Server or role == ElemType.Name:
+            return self._itemData.fullName()
+        elif role == ElemType.ServerName:
+            return self._itemData.serverName()
+        elif role == ElemType.ServerInstance:
+            return self._itemData.fullName()
+        elif role == ElemType.Exported:
+            return self._itemData.health()
+        elif role == ElemType.Host:
+            return self._itemData.host()
 
     def mimeData(self, index):
         return self.itemData().fullName()
@@ -402,7 +336,7 @@ class TaurusTreeServerItem(TaurusTreeItem):
         return ElemType.Server
 
 
-class TaurusTreeDeviceClassItem(TaurusTreeItem):
+class TaurusTreeDeviceClassItem(TaurusTreeDbBaseItem):
     """A node designed to represent a device class"""
     
     def data(self, index):
@@ -419,64 +353,22 @@ class TaurusTreeDeviceClassItem(TaurusTreeItem):
         return ElemType.DeviceClass
 
 
-class TaurusDbBaseModel(Qt.QAbstractItemModel):
+class TaurusDbBaseModel(TaurusBaseModel):
     """The base class for all Taurus database Qt models.
     By default, this model represents a plain device perspective of the underlying
     database."""
     
     ColumnNames = "Device", "Alias", "Server", "Class", "Alive", "Host"
     ColumnRoles = (ElemType.Device, ElemType.Device), ElemType.DeviceAlias, ElemType.Server, ElemType.DeviceClass, ElemType.Exported, ElemType.Host
-    
-    DftFont = Qt.QFont("Mono", 8)
-    
-    def __init__(self, parent=None, data=None):
-        super(TaurusDbBaseModel, self).__init__(parent)
-        # if qt < 4.6, beginResetModel and endResetModel don't exist. In this
-        # case we set beginResetModel to be an empty function and endResetModel
-        # to be reset.
-        if not hasattr(Qt.QAbstractItemModel, "beginResetModel"):
-            self.beginResetModel = lambda : None
-            self.endResetModel = self.reset
-        self._filters = []
-        self._selectables = [ self.ColumnRoles[0][-1] ]
-        self.setDataSource(data)
-
-    def __getattr__(self, name):
-        return getattr(self.dataSource(), name)
-
-    def dataSource(self):
-        return self._data_src
-
-    def setDataSource(self, data):
-        self.beginResetModel()
-        self._data_src = data
-        self._rootItem = TaurusTreeItem(self, self.ColumnNames)
-        self.setupModelData(data)
-        self.endResetModel()
+
+    def createNewRootItem(self):
+        return TaurusTreeDbBaseItem(self, self.ColumnNames)
         
     def refresh(self, refresh_source=False):
-        self.beginResetModel()
-        self._rootItem = TaurusTreeItem(self, self.ColumnNames)
-        data = self._data_src
+        data = self.dataSource()
         if refresh_source and data is not None:
             data.refreshCache()
-        self.setupModelData(data)
-        self.endResetModel()
-
-    def setSelectables(self, seq_elem_types):
-        self._selectables = seq_elem_types
-    
-    def selectables(self):
-        return self._selectables
-
-    def role(self, column, depth=0):
-        cr = self.ColumnRoles
-        if column == 0:
-            return cr[0][depth]
-        return self.ColumnRoles[column]
-
-    def columnCount(self, parent = Qt.QModelIndex()):
-        return len(self.ColumnRoles)
+        TaurusBaseModel.refresh(self, refresh_source=refresh_source)
     
     def roleIcon(self, taurus_role):
         return getElementTypeIcon(taurus_role)
@@ -520,14 +412,6 @@ class TaurusDbBaseModel(Qt.QAbstractItemModel):
             ret.setData(taurus.qt.qtcore.mimetypes.TAURUS_MODEL_MIME_TYPE, str(data[0]))
         return ret
 
-    def data(self, index, role):
-        ret = self.pyData(index, role)
-        if ret is None:
-            ret = Qt.QVariant()
-        else:
-            ret = Qt.QVariant(ret)
-        return ret
-
     def pyData(self, index, role):
         if not index.isValid():
             return None
@@ -547,92 +431,19 @@ class TaurusDbBaseModel(Qt.QAbstractItemModel):
                 health = item.data(index)
                 ret = getSWDevHealthIcon(health)
         elif role == Qt.Qt.ToolTipRole:
-            data = item.data(index)
-            if data is not None:
-                if taurus_role == ElemType.Exported:
-                    ret = getSWDevHealthToolTip(data)
-                else:
-                    ret = self.roleToolTip(taurus_role)
+            ret = item.toolTip(index)
+            if ret is None:
+                data = item.data(index)
+                if data is not None:
+                    if taurus_role == ElemType.Exported:
+                        ret = getSWDevHealthToolTip(data)
+                    else:
+                        ret = self.roleToolTip(taurus_role)
         #elif role == Qt.Qt.SizeHintRole:
         #    ret = self.columnSize(column)
         elif role == Qt.Qt.FontRole:
             ret = self.DftFont
         return ret
-        
-    def flags(self, index):
-        if not index.isValid():
-            return 0
-        
-        ret = Qt.Qt.ItemIsEnabled | Qt.Qt.ItemIsDragEnabled
-        
-        item = index.internalPointer()
-        column, depth = index.column(), item.depth()
-        taurus_role = self.role(column, depth)
-        
-        if taurus_role in self.selectables():
-            ret |= Qt.Qt.ItemIsSelectable	
-        return ret
-
-    def headerData(self, section, orientation, role=Qt.Qt.DisplayRole):
-        ret = None
-        if orientation == Qt.Qt.Horizontal:
-            if role == Qt.Qt.TextAlignmentRole:
-                ret = int(Qt.Qt.AlignLeft | Qt.Qt.AlignVCenter)
-            elif role == Qt.Qt.DisplayRole:
-                ret = self.ColumnNames[section]
-            elif role == Qt.Qt.SizeHintRole:
-                ret = Qt.QSize(self.columnSize(section))
-                ret.setHeight(24)
-            elif role == Qt.Qt.ToolTipRole:
-                ret = self.columnToolTip(section)
-            elif role == Qt.Qt.DecorationRole:
-                ret = self.columnIcon(section)
-                
-        return Qt.QVariant(ret)
-    
-    def index(self, row, column, parent = Qt.QModelIndex()):
-        if not self.hasIndex(row, column, parent):
-            return Qt.QModelIndex()
-        if not parent.isValid():
-            parentItem = self._rootItem
-        else:
-            parentItem = parent.internalPointer()
-        childItem = parentItem.child(row)
-        if childItem:
-            return self.createIndex(row, column, childItem)
-        
-        return Qt.QModelIndex()
-    
-    def parent(self, index):
-        if not index.isValid():
-            return Qt.QModelIndex()
-        
-        childItem = index.internalPointer()
-        parentItem = childItem.parent()
-        
-        if parentItem == self._rootItem:
-            return Qt.QModelIndex()
-        
-        return self.createIndex(parentItem.row(), 0, parentItem)
-        
-    def rowCount(self, parent = Qt.QModelIndex()):
-        if parent.column() > 0:
-            return 0
-        
-        if not parent.isValid():
-            parentItem = self._rootItem
-        else:
-            parentItem = parent.internalPointer()
-        return parentItem.childCount()
-
-    def hasChildren(self, parent = Qt.QModelIndex()):
-        if parent.column() > 0:
-            return 0
-        if not parent.isValid():
-            parentItem = self._rootItem
-        else:
-            parentItem = parent.internalPointer()
-        return parentItem.hasChildren()
 
     def setupModelData(self, data):
         if data is None:
@@ -655,7 +466,29 @@ class TaurusDbSimpleDeviceModel(TaurusDbBaseModel):
     ColumnNames = "Device",
     ColumnRoles = (ElemType.Device, ElemType.Device),
     
+
+class TaurusDbSimpleDeviceAliasModel(TaurusDbBaseModel):
+    """A Qt model that structures device elements in 1 level tree with
+    device alias as node leafs. This model contains only 1 column."""
     
+    ColumnNames = "Alias",
+    ColumnRoles = (ElemType.DeviceAlias, ElemType.DeviceAlias),
+    
+    def setupModelData(self, data):
+        if data is None:
+            return
+        if isinstance(data, taurus.core.TaurusDatabase):
+            data = data.cache()
+        devices = data.devices()
+        
+        rootItem = self._rootItem
+        for dev_name in data.getDeviceNames():
+            dev = devices[dev_name]
+            if dev.alias() is not None:
+                devItem = TaurusTreeSimpleDeviceItem(self, dev, rootItem)
+                rootItem.appendChild(devItem)
+
+
 class TaurusDbPlainDeviceModel(TaurusDbBaseModel):
     """A Qt model that structures device elements in 1 level tree. Device
     nodes will have attribute child nodes if the device is running."""
@@ -707,6 +540,25 @@ class TaurusDbDeviceModel(TaurusDbBaseModel):
             rootItem.appendChild(domainItem)
 
 
+class TaurusDbPlainServerModel(TaurusDbBaseModel):
+    ColumnNames = "Server", "Alive", "Host"
+    ColumnRoles = (ElemType.Server, ElemType.ServerInstance), ElemType.Exported, ElemType.Host
+    
+    def setupModelData(self, data):
+        if data is None:
+            return
+
+        if isinstance(data, taurus.core.TaurusDatabase):
+            data = data.cache()
+        
+        servers = data.servers()
+        rootItem = self._rootItem
+        
+        for server_name, server in servers.items():
+            serverInstanceItem = TaurusTreeFullServerItem(self, server, rootItem)
+            rootItem.appendChild(serverInstanceItem)
+    
+    
 class TaurusDbServerModel(TaurusDbBaseModel):
     """A Qt model that structures server elements in a tree organized as:
        - <Server name>
@@ -788,27 +640,8 @@ class TaurusDbDeviceClassModel(TaurusDbBaseModel):
             rootItem.appendChild(klassItem)
 
 
-class TaurusDbBaseProxyModel(Qt.QSortFilterProxyModel):
-    """A taurus database base Qt filter & sort model"""
-     
-    def __init__(self, parent=None):
-        super(TaurusDbBaseProxyModel, self).__init__(parent)
-        
-        # filter configuration
-        self.setFilterCaseSensitivity(Qt.Qt.CaseInsensitive)
-        self.setFilterKeyColumn(0)
-        self.setFilterRole(Qt.Qt.DisplayRole)
-        
-        # sort configuration
-        self.setSortCaseSensitivity(Qt.Qt.CaseInsensitive)
-        self.setSortRole(Qt.Qt.DisplayRole)
-        
-        # general configuration
-        self.setDynamicSortFilter(True)
-        self.sort(0, Qt.Qt.AscendingOrder)
-        
-    def __getattr__(self, name):
-        return getattr(self.sourceModel(), name)
+class TaurusDbBaseProxyModel(TaurusBaseProxyModel):
+    pass
 
 
 class TaurusDbDeviceProxyModel(TaurusDbBaseProxyModel):
@@ -828,9 +661,8 @@ class TaurusDbDeviceProxyModel(TaurusDbBaseProxyModel):
         if isinstance(treeItem, TaurusTreeDeviceDomainItem):
             domain = treeItem.display()
             devices = sourceModel.getDomainDevices(domain)
-            for d in devices:
-                #if expr.exactMatch(d.name()):
-                if Qt.QString(d.name()).contains(expr):
+            for device in devices:
+                if self.deviceMatches(device, expr):
                     return True
             return False
         
@@ -840,18 +672,25 @@ class TaurusDbDeviceProxyModel(TaurusDbBaseProxyModel):
             family = treeItem.display()
             devices = sourceModel.getFamilyDevices(domain, family)
             for device in devices:
-                #if expr.exactMatch(d.name()):
-                if Qt.QString(device.name()).contains(expr):
+                if self.deviceMatches(device, expr):
                     return True
             return False
         
         if isinstance(treeItem, TaurusTreeDeviceItem) or \
            isinstance(treeItem, TaurusTreeSimpleDeviceItem) or \
            isinstance(treeItem, TaurusTreeDeviceMemberItem):
-            #return expr.exactMatch(treeItem.qdisplay())
-            return treeItem.qdisplay().contains(expr)
-        
+            device = treeItem.itemData()
+            return self.deviceMatches(device, expr)
         return True
+    
+    def deviceMatches(self, device, expr):
+        name = device.name()
+        if Qt.QString(name).contains(expr):
+            return True
+        name = device.alias()
+        if name is None:
+            return False
+        return Qt.QString(name).contains(expr)
 
 
 class TaurusDbServerProxyModel(TaurusDbBaseProxyModel):
diff --git a/lib/taurus/qt/qtcore/model/taurusmodel.py b/lib/taurus/qt/qtcore/model/taurusmodel.py
new file mode 100644
index 0000000..a00e238
--- /dev/null
+++ b/lib/taurus/qt/qtcore/model/taurusmodel.py
@@ -0,0 +1,393 @@
+#!/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 base taurus tree item and a base tree model"""
+
+__all__ = ["TaurusBaseTreeItem", "TaurusBaseModel", "TaurusBaseProxyModel"]
+
+__docformat__ = 'restructuredtext'
+
+from taurus.qt import Qt
+from taurus.core.util import Logger
+
+class TaurusBaseTreeItem(object):
+    """A generic node"""
+    
+    DisplayFunc = str
+
+    def __init__(self, model, data, parent = None):
+        self._model = model
+        self._itemData = data
+        self._parentItem = parent
+        self._childItems = []
+        self._depth = self._calcDepth()
+        
+    def itemData(self):
+        """The internal itemData object
+        
+        :return: (object) object holding the data of this item
+        """
+        return self._itemData
+        
+    def depth(self):
+        """Depth of the node in the hierarchy
+        
+        :return: (int) the node depth
+        """
+        return self._depth
+    
+    def appendChild(self, child):
+        """Adds a new child node
+        
+        :param child: (TaurusTreeBaseItem) child to be added
+        """
+        self._childItems.append(child)
+    
+    def child(self, row):
+        """Returns the child in the given row
+        
+        :return: (TaurusTreeBaseItem) the child node for the given row"""
+        return self._childItems[row]
+    
+    def childCount(self):
+        """Returns the number of childs for this node
+        
+        :return: (int) number of childs for this node
+        """
+        return len(self._childItems)
+    
+    def hasChildren(self):
+        return len(self._childItems) > 0
+    
+    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[index.column()]
+    
+    def icon(self, index):
+        return None
+    
+    def toolTip(self, index):
+        return self.data(index)
+    
+    def setData(self, index, data):
+        """Sets the node data
+        
+        :param data: (object) the data to be associated with this node
+        """
+        self._itemData = data
+    
+    def parent(self):
+        """Returns the parent node or None if no parent exists
+        
+        :return: (TaurusTreeBaseItem) the parent node
+        """
+        return self._parentItem
+    
+    def row(self):
+        """Returns the row for this node
+        
+        :return: (int) row number for this node
+        """
+        if self._parentItem is None:
+            return 0
+        return self._parentItem._childItems.index(self)
+
+    def _calcDepth(self):
+        d = 0
+        n = self.parent()
+        while n is not None:
+            n = n.parent()
+            d += 1
+        return d
+    
+    def display(self):
+        """Returns the display string for this node
+        
+        :return: (str) the node's display string"""
+        if not hasattr(self, "_display"):
+            if self._itemData is None:
+                return None
+            self._display = self.DisplayFunc(self._itemData)
+        return self._display
+
+    def qdisplay(self):
+        """Returns the display QString for this node
+        
+        :return: (Qt.QString) the node's display string"""
+        if not hasattr(self, "_qdisplay"):
+            d = self.display()
+            if d is None:
+                return None
+            self._qdisplay = Qt.QString(d)
+        return self._qdisplay
+
+    def mimeData(self, index):
+        return self.data(index)
+
+    def role(self):
+        """Returns the prefered role for the item.
+        This implementation returns taurus.core.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: (taurus.core.TaurusElementType) the role in form of element type"""
+        return ElemType.Unknown
+
+    def __str__(self):
+        return self.display()
+
+
+class TaurusBaseModel(Qt.QAbstractItemModel, Logger):
+    """The base class for all Taurus Qt models."""
+    
+    ColumnNames = ()
+    ColumnRoles = (),
+    
+    DftFont = Qt.QFont("Mono", 8)
+    
+    def __init__(self, parent=None, data=None):
+        Qt.QAbstractItemModel.__init__(self, parent)
+        Logger.__init__(self)
+        # if qt < 4.6, beginResetModel and endResetModel don't exist. In this
+        # case we set beginResetModel to be an empty function and endResetModel
+        # to be reset.
+        if not hasattr(Qt.QAbstractItemModel, "beginResetModel"):
+            self.beginResetModel = lambda : None
+            self.endResetModel = self.reset
+        self._data_src = None
+        self._rootItem = None
+        self._filters = []
+        self._selectables = [ self.ColumnRoles[0][-1] ]
+        self.setDataSource(data)
+    
+    def __getattr__(self, name):
+        return getattr(self.dataSource(), name)
+    
+    def createNewRootItem(self):
+        return TaurusTreeBaseItem(self, self.ColumnNames)
+    
+    def refresh(self, refresh_source=False):
+        self.beginResetModel()
+        self._rootItem = self.createNewRootItem()
+        self.setupModelData(self.dataSource())
+        self.endResetModel()
+    
+    def setupModelData(self, data):
+        raise NotImplementedError("setupModelData must be implemented "
+                                  "in %s" % self.__class__.__name__)
+    
+    def roleIcon(self, role):
+        raise NotImplementedError("roleIcon must be implemented "
+                                  "in %s" % self.__class__.__name__)
+
+    def roleSize(self, role):
+        raise NotImplementedError("roleSize must be implemented "
+                                  "in %s" % self.__class__.__name__)
+    
+    def roleToolTip(self, role):
+        raise NotImplementedError("roleToolTip must be implemented "
+                                  "in %s" % self.__class__.__name__)
+    
+    def setDataSource(self, data_src):
+        self._data_src = data_src
+        self.refresh()
+    
+    def dataSource(self):
+        return self._data_src
+    
+    def setSelectables(self, seq_elem_types):
+        self._selectables = seq_elem_types
+    
+    def selectables(self):
+        return self._selectables
+
+    def role(self, column, depth=0):
+        cr = self.ColumnRoles
+        if column == 0:
+            return cr[0][depth]
+        return self.ColumnRoles[column]
+    
+    def columnCount(self, parent = Qt.QModelIndex()):
+        return len(self.ColumnRoles)
+    
+    def columnIcon(self, column):
+        return self.roleIcon(self.role(column))
+    
+    def columnToolTip(self, column):
+        return self.roleToolTip(self.role(column))
+    
+    def columnSize(self, column):
+        role = self.role(column)
+        s = self.roleSize(role)
+        return s
+    
+    def pyData(self, index, role=Qt.Qt.DisplayRole):
+        if not index.isValid():
+            return None
+        
+        item = index.internalPointer()
+        
+        ret = None
+        if role == Qt.Qt.DisplayRole or role == Qt.Qt.EditRole:
+            ret = item.data(index)
+#        elif role == Qt.Qt.CheckStateRole:
+#            data = item.data(index)
+#            if type(data) != bool:
+#                data = str(data).lower() == 'true'
+#            ret = Qt.Qt.Unchecked
+#            if data == True:
+#                ret = Qt.Qt.Checked
+        elif role == Qt.Qt.DecorationRole:
+            ret = item.icon(index)
+        elif role == Qt.Qt.ToolTipRole:
+            ret = item.toolTip(index)
+        #elif role == Qt.Qt.SizeHintRole:
+        #    ret = self.columnSize(column)
+        elif role == Qt.Qt.FontRole:
+            ret = self.DftFont
+        elif role == Qt.Qt.UserRole:
+            ret = Qt.QVariant(item)
+        return ret
+    
+    def data(self, index, role=Qt.Qt.DisplayRole):
+        ret = self.pyData(index, role)
+        if ret is None:
+            ret = Qt.QVariant()
+        else:
+            ret = Qt.QVariant(ret)
+        return ret
+
+    def _setData(self, index, qvalue, role=Qt.Qt.EditRole):
+        item = index.internalPointer()
+        pyobj = qvalue.toPyObject()
+        if pyobj is NotImplemented:
+            self.warning("Failed attempt to convert a QValue. Maybe it is due to Qt<4.6")
+        item.setData(index, pyobj)
+        return True
+
+    def flags(self, index):
+        if not index.isValid():
+            return 0
+        
+        ret = Qt.Qt.ItemIsEnabled | Qt.Qt.ItemIsDragEnabled
+        
+        item = index.internalPointer()
+        column, depth = index.column(), item.depth()
+        taurus_role = self.role(column, depth)
+        
+        if taurus_role in self.selectables():
+            ret |= Qt.Qt.ItemIsSelectable
+        return ret
+    
+    def headerData(self, section, orientation, role=Qt.Qt.DisplayRole):
+        ret = None
+        if orientation == Qt.Qt.Horizontal:
+            if role == Qt.Qt.TextAlignmentRole:
+                ret = int(Qt.Qt.AlignLeft | Qt.Qt.AlignVCenter)
+            elif role == Qt.Qt.DisplayRole:
+                ret = self.ColumnNames[section]
+            elif role == Qt.Qt.SizeHintRole:
+                ret = Qt.QSize(self.columnSize(section))
+                ret.setHeight(24)
+            elif role == Qt.Qt.ToolTipRole:
+                ret = self.columnToolTip(section)
+            elif role == Qt.Qt.DecorationRole:
+                ret = self.columnIcon(section)
+                
+        return Qt.QVariant(ret)
+
+    def index(self, row, column, parent = Qt.QModelIndex()):
+        if not self.hasIndex(row, column, parent):
+            return Qt.QModelIndex()
+        if not parent.isValid():
+            parentItem = self._rootItem
+        else:
+            parentItem = parent.internalPointer()
+        childItem = parentItem.child(row)
+        if childItem:
+            return self.createIndex(row, column, childItem)
+        return Qt.QModelIndex()
+
+    def parent(self, index):
+        if not index.isValid():
+            return Qt.QModelIndex()
+        
+        childItem = index.internalPointer()
+        parentItem = childItem.parent()
+        
+        if parentItem is None or parentItem == self._rootItem:
+            return Qt.QModelIndex()
+        
+        return self.createIndex(parentItem.row(), 0, parentItem)
+
+    def rowCount(self, parent = Qt.QModelIndex()):
+        if parent.column() > 0:
+            return 0
+        
+        if not parent.isValid():
+            parentItem = self._rootItem
+        else:
+            parentItem = parent.internalPointer()
+        if parentItem is None:
+            return 0
+        return parentItem.childCount()
+
+    def hasChildren(self, parent = Qt.QModelIndex()):
+        if parent.column() > 0:
+            return 0
+        if not parent.isValid():
+            parentItem = self._rootItem
+        else:
+            parentItem = parent.internalPointer()
+        
+        if parentItem is None:
+            return False
+        return parentItem.hasChildren()
+
+
+class TaurusBaseProxyModel(Qt.QSortFilterProxyModel):
+    """A taurus database base Qt filter & sort model"""
+     
+    def __init__(self, parent=None):
+        Qt.QSortFilterProxyModel.__init__(self, parent)
+        
+        # filter configuration
+        self.setFilterCaseSensitivity(Qt.Qt.CaseInsensitive)
+        self.setFilterKeyColumn(0)
+        self.setFilterRole(Qt.Qt.DisplayRole)
+        
+        # sort configuration
+        self.setSortCaseSensitivity(Qt.Qt.CaseInsensitive)
+        self.setSortRole(Qt.Qt.DisplayRole)
+        
+        # general configuration
+        self.sort(0, Qt.Qt.AscendingOrder)
+        
+    def __getattr__(self, name):
+        return getattr(self.sourceModel(), name)
diff --git a/lib/taurus/qt/qtgui/extra_sardana/__init__.py b/lib/taurus/qt/qtcore/tango/sardana/__init__.py
similarity index 85%
copy from lib/taurus/qt/qtgui/extra_sardana/__init__.py
copy to lib/taurus/qt/qtcore/tango/sardana/__init__.py
index 0cd27bd..ac993e9 100644
--- a/lib/taurus/qt/qtgui/extra_sardana/__init__.py
+++ b/lib/taurus/qt/qtcore/tango/sardana/__init__.py
@@ -23,9 +23,16 @@
 ##
 #############################################################################
 
-"""This package contains a collection of taurus widgets designed to connect
-to sardana"""
+"""
+Sardana extension for taurus Qt
+"""
 
 __docformat__ = 'restructuredtext'
 
-from .sardanashell import *
\ No newline at end of file
+def registerExtensions():
+    import pool
+    import macroserver
+    
+    pool.registerExtensions()
+    macroserver.registerExtensions()
+    
\ No newline at end of file
diff --git a/lib/taurus/qt/qtcore/tango/macroserver/macroserver.py b/lib/taurus/qt/qtcore/tango/sardana/macroserver.py
similarity index 50%
rename from lib/taurus/qt/qtcore/tango/macroserver/macroserver.py
rename to lib/taurus/qt/qtcore/tango/sardana/macroserver.py
index a9846b7..2c30192 100644
--- a/lib/taurus/qt/qtcore/tango/macroserver/macroserver.py
+++ b/lib/taurus/qt/qtcore/tango/sardana/macroserver.py
@@ -25,16 +25,16 @@
 
 """MacroServer extension for taurus Qt"""
 
-__all__ = ["QDoor", "QMacroServer"]
+__all__ = ["QDoor", "QMacroServer", "MacroServerMessageErrorHandler", "registerExtensions"]
 
 import taurus.core
-from taurus.core.tango.macroserver import BaseMacroServer, BaseDoor
+from taurus.core.tango.sardana.macroserver import BaseMacroServer, BaseDoor
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 CHANGE_EVTS = (taurus.core.TaurusEventType.Change, taurus.core.TaurusEventType.Periodic)
 
-class QDoor(Qt.QObject, BaseDoor):
+class QDoor(BaseDoor, Qt.QObject):
     
     __pyqtSignals__ = ["resultUpdated","recordDataUpdated", "macroStatusUpdated"]
     __pyqtSignals__ += [ "%sUpdated" % l.lower() for l in BaseDoor.log_streams ]
@@ -70,7 +70,7 @@ class QDoor(Qt.QObject, BaseDoor):
         return res
 
 
-class QMacroServer(Qt.QObject, BaseMacroServer):
+class QMacroServer(BaseMacroServer, Qt.QObject):
     
     def __init__(self, name, qt_parent=None, **kw):
         self.call__init__wo_kw(Qt.QObject, qt_parent)
@@ -90,4 +90,78 @@ class QMacroServer(Qt.QObject, BaseMacroServer):
         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 = BaseMacroServer.on_elements_changed(self, s, t, v)
+        
+        macros, elements = 0, 0
+        for element in set.union(added, removed):
+             if element.type == "MacroClass":
+                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
+        
+    
+# 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
+            import pygments.highlight
+            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
new file mode 100644
index 0000000..09779e7
--- /dev/null
+++ b/lib/taurus/qt/qtcore/tango/sardana/model.py
@@ -0,0 +1,313 @@
+#!/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"]
+
+__docformat__ = 'restructuredtext'
+
+from taurus.core import TaurusDevice
+from taurus.qt import Qt
+from taurus.core.util 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 = {
+    "ControllerLib"        : ("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",),
+    "MacroLib"             : ("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
+    return taurus.qt.qtgui.resource.getIcon(TYPE_MAP.get(t, _TNG)[1])
+    
+def getElementTypeSize(t):
+    return Qt.QSize(200,24)
+
+def getElementTypeToolTip(t):
+    return TYPE_MAP.get(t, '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.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)
+        data = self.itemData()
+        return "{0} '{1}'".format(getElementTypeToolTip(data.type), data.name)
+    
+    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 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 = "ControllerLib", "MacroLib", "Controller"
+        child_types = "ControllerClass", "MacroClass", "MacroFunction", \
+            "Motor", "CounterTimer", "PseudoMotor", "PseudoCounter", \
+            "ZeroDExpChannel", "OneDExpChannel", "TwoDExpChannel"
+        
+        for element in elements:
+            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 = "ControllerLib", "MacroLib"
+        
+        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
diff --git a/lib/taurus/qt/qtcore/tango/sardana/pool.py b/lib/taurus/qt/qtcore/tango/sardana/pool.py
new file mode 100644
index 0000000..01db156
--- /dev/null
+++ b/lib/taurus/qt/qtcore/tango/sardana/pool.py
@@ -0,0 +1,93 @@
+#!/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 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/util/tauruslog.py b/lib/taurus/qt/qtcore/util/tauruslog.py
index 66a32a5..1cb3cb8 100644
--- a/lib/taurus/qt/qtcore/util/tauruslog.py
+++ b/lib/taurus/qt/qtcore/util/tauruslog.py
@@ -29,18 +29,17 @@ __all__ = ['getQtLogger', 'initTaurusQtLogger']
 
 __docformat__ = 'restructuredtext'
 
-import PyQt4.QtCore
-
+from taurus.qt import Qt
 import taurus.core.util
 
 qtLogger = None
 
 QT_LEVEL_MATCHER = {
-    PyQt4.QtCore.QtDebugMsg    : taurus.core.util.Logger.debug,
-    PyQt4.QtCore.QtWarningMsg  : taurus.core.util.Logger.warning,
-    PyQt4.QtCore.QtCriticalMsg : taurus.core.util.Logger.error,
-    PyQt4.QtCore.QtFatalMsg    : taurus.core.util.Logger.error,
-    PyQt4.QtCore.QtSystemMsg   : taurus.core.util.Logger.info
+    Qt.QtDebugMsg    : taurus.core.util.Logger.debug,
+    Qt.QtWarningMsg  : taurus.core.util.Logger.warning,
+    Qt.QtCriticalMsg : taurus.core.util.Logger.error,
+    Qt.QtFatalMsg    : taurus.core.util.Logger.error,
+    Qt.QtSystemMsg   : taurus.core.util.Logger.info
 }
 
 def getQtLogger():
@@ -58,5 +57,5 @@ def qtTaurusMsgHandler(type, msg):
 def initTaurusQtLogger():
     global qtLogger
     if not qtLogger:
-        PyQt4.QtCore.qInstallMsgHandler(qtTaurusMsgHandler)
+        Qt.qInstallMsgHandler(qtTaurusMsgHandler)
     
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py b/lib/taurus/qt/qtdesigner/extraguiqwtplugin.py
similarity index 74%
copy from lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
copy to lib/taurus/qt/qtdesigner/extraguiqwtplugin.py
index d50df2e..a20b79d 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
+++ b/lib/taurus/qt/qtdesigner/extraguiqwtplugin.py
@@ -24,7 +24,14 @@
 #############################################################################
 
 """
-__init__.py: 
+guiqwt widgets plugins for Qt Designer
 """
 
-from sequenceeditor import TaurusSequencer, TaurusSequencerWidget
\ No newline at end of file
+from guiqwt.qtdesigner import create_qtdesigner_plugin
+
+PlotPlugin = create_qtdesigner_plugin("guiqwt", "guiqwt.plot", "CurveWidget",
+                                  icon="curve.png")
+
+ImagePlotPlugin = create_qtdesigner_plugin("guiqwt", "guiqwt.plot", "ImageWidget",
+                                  icon="image.png")
+
diff --git a/lib/taurus/qt/qtdesigner/taurusplugin/taurusplugin.py b/lib/taurus/qt/qtdesigner/taurusplugin/taurusplugin.py
index 720811d..ddaf2e8 100644
--- a/lib/taurus/qt/qtdesigner/taurusplugin/taurusplugin.py
+++ b/lib/taurus/qt/qtdesigner/taurusplugin/taurusplugin.py
@@ -43,7 +43,8 @@ taurusplugin.py:
 
 import os
 
-from PyQt4 import Qt, QtDesigner
+from taurus.qt import Qt
+from PyQt4 import QtDesigner
 
 import taurus.core
 import taurus.core.util
diff --git a/lib/taurus/qt/qtdesigner/tauruspluginplugin.py b/lib/taurus/qt/qtdesigner/tauruspluginplugin.py
index 3d43609..54ecda6 100644
--- a/lib/taurus/qt/qtdesigner/tauruspluginplugin.py
+++ b/lib/taurus/qt/qtdesigner/tauruspluginplugin.py
@@ -29,7 +29,8 @@ tauruspluginplugin.py:
 
 import os
 
-from PyQt4 import Qt, QtDesigner
+from taurus.qt import Qt
+from PyQt4 import QtDesigner
 
 def build_qtdesigner_widget_plugin(klass):
     import taurusplugin
@@ -98,7 +99,10 @@ def main():
             ok_nb += 1
             _log.debug("DONE processing %s" % name)
         _log.info("Inpected %d widgets. %d (OK), %d (Skipped), %d (E1), %d (E2), %d (E3), %d(E4)" % (len(klasses), ok_nb, skipped_nb, e1_nb, e2_nb, e3_nb, e4_nb))
-        
+        _log.info("E1: getQtDesignerPluginInfo() returns None")
+        _log.info("E2: widget doesn't implement getQtDesignerPluginInfo()")
+        _log.info("E3: getQtDesignerPluginInfo() throws exception")
+        _log.info("E4: getQtDesignerPluginInfo() returns dictionary with missing key (probably 'module' key)")
     except Exception, e:
         print e
 
diff --git a/lib/taurus/qt/qtgui/application/taurusapplication.py b/lib/taurus/qt/qtgui/application/taurusapplication.py
index fa78d3e..f94cf31 100644
--- a/lib/taurus/qt/qtgui/application/taurusapplication.py
+++ b/lib/taurus/qt/qtgui/application/taurusapplication.py
@@ -30,13 +30,83 @@ __all__ = ["TaurusApplication"]
 
 __docformat__ = 'restructuredtext'
 
+import os
+import sys
+import logging
 import optparse
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
+from taurus.core.util.log import LogExceptHook, Logger
 import taurus.core.util.argparse
 
-class TaurusApplication(Qt.QApplication):
+
+class STD(Logger):
+    
+    def __init__(self, name='', parent=None, format=None, std=None,
+                 pure_text=True):
+        """The STD Logger constructor
+        
+        :param name: (str) the logger name (default is empty string)
+        :param parent: (Logger) the parent logger or None if no parent exists
+                       (default is None)
+        :param format: (str) the log message format or None to use the default
+                       log format (default is None)
+        :param std: std to forward write
+        :param pure_text: if True, writes the 'message' parameter of the log
+                          message in a separate line preserving the indentation
+        """
+        Logger.__init__(self, name=name, parent=parent, format=format)
+        self.buffer = ''
+        self.log_obj.propagate = False
+        self.std = std
+    
+    def addLogHandler(self, handler):
+        """When called, set to use a private handler and DON'T send messages to
+           parent loggers (basically will act as an independent logging system
+           by itself)
+
+        :param handler: new handler"""
+        Logger.addLogHandler(self, handler)
+        self.log_obj.propagate = not len(self.log_handlers)
+    
+    def write(self, msg):
+        try:
+            self.buffer += msg
+            # while there is no new line, just accumulate the buffer
+            if msg[-1] == '\n' or msg.index('\n') >= 0:
+                self.flush()
+        except ValueError:
+            pass
+        finally:
+            if self.std is not None:
+                try:
+                    self.std.write(msg)
+                except:
+                    pass
+            pass
+        
+    def flush(self):
+        try:
+            buff = self.buffer
+            if buff is None or len(buff) == 0:
+                return
+            #take the '\n' because the output is a list of strings, each to be
+            #interpreted as a separate line in the client
+            if buff[-1] == '\n': buff = buff[:-1]
+            if self.log_handlers:
+                self.log(Logger.Console, '\n' + buff)
+            self.buffer = ""
+        finally:
+            if self.std is not None:
+                try:
+                    self.std.flush()
+                except:
+                    pass
+            pass
+
+
+class TaurusApplication(Qt.QApplication, Logger):
     """A QApplication that additionally parses the command line looking
     for taurus options. This is done using the :mod:`taurus.core.util.argparse`.
     To create a TaurusApplication object you should use the same parameters
@@ -114,6 +184,8 @@ class TaurusApplication(Qt.QApplication):
         except TypeError:
             Qt.QApplication.__init__(self, *args)
 
+        Logger.__init__(self)
+
         if app_name is not None:
             self.setApplicationName(app_name)
         if app_version is not None:
@@ -143,6 +215,7 @@ class TaurusApplication(Qt.QApplication):
         self._cmd_line_args = args
         self.__registerQtLogger()
         self.__registerExtensions()
+        self.__redirect_std()
     
     def __registerQtLogger(self):
         import taurus.qt.qtcore.util
@@ -151,16 +224,36 @@ class TaurusApplication(Qt.QApplication):
     def __registerExtensions(self):
         """Registers taurus Qt extensions"""
         try:
-            import taurus.qt.qtcore.tango.macroserver
-            taurus.qt.qtcore.tango.macroserver.registerExtensions()
+            import taurus.qt.qtcore.tango.sardana
+            taurus.qt.qtcore.tango.sardana.registerExtensions()
         except:
-            pass
+            self.info("Failed to load sardana extensions", exc_info=1)
         try:
             import taurus.core.tango.img
             taurus.core.tango.img.registerExtensions()
         except:
-            pass
-        
+            self.info("Failed to load image extensions", exc_info=1)
+
+    def __redirect_std(self):
+        """Internal method to redirect stdout and stderr to log messages"""
+        Logger.addLevelName(Logger.Critical + 10, 'CONSOLE')
+        self._out = STD(name="OUT", std=sys.stdout)
+        sys.stdout = self._out
+        self._err = STD(name="ERR", std=sys.stderr)
+        sys.stderr = self._err
+    
+    def __buildLogFileName(self, prefix="/tmp", name=None):
+        appName = str(self.applicationName())
+        if not appName:
+            appName = os.path.splitext(os.path.basename(sys.argv[0]))[0]
+        dirName = os.path.join(prefix, appName)
+        if not os.path.isdir(dirName):
+            os.makedirs(dirName)
+        if name is None:
+            name = appName + '.log'
+        fileName = os.path.join(dirName, name)
+        return fileName
+    
     def get_command_line_parser(self):
         """Returns the :class:`optparse.OptionParser` used to parse the command
         line parameters.
@@ -184,4 +277,41 @@ class TaurusApplication(Qt.QApplication):
         :return: the command line arguments
         :rtype: list of strings"""
         return self._cmd_line_args
+    
+    def setTaurusStyle(self, styleName):
+        """Sets taurus application style to the given style name
+        
+        :param styleName: the new style name to be applied
+        :type styleName: str"""
+        import taurus.qt.qtgui.style
+        taurus.qt.qtgui.style.setTaurusStyle(styleName)
+    
+    def basicConfig(self, log_file_name=None, maxBytes=1E7, backupCount=5,
+                    with_gui_exc_handler=True):
+        
+        # prepare exception handler to report exceptions as error log messages
+        # and to taurus message box (if with_gui is set)
+        hook_to = None
+        if with_gui_exc_handler:
+            import taurus.qt.qtgui.dialog
+            hook_to = taurus.qt.qtgui.dialog.TaurusExceptHookMessageBox()
+        sys.excepthook = LogExceptHook(hook_to=hook_to)
+        
+        # create a file log handler
+        try:
+            if log_file_name is None:
+                log_file_name = self.__buildLogFileName()
+            f_h = logging.handlers.RotatingFileHandler(log_file_name,
+                                                       maxBytes=maxBytes,
+                                                       backupCount=backupCount)
+            Logger.addRootLogHandler(f_h)
+            self._out.std = sys.__stdout__
+            self._out.addLogHandler(f_h)
+            self._err.std = sys.__stderr__
+            self._err.addLogHandler(f_h)
+            self.info("Logs will be saved in %s", log_file_name)
+        except:
+            self.warning("'%s' could not be created. Logs will not be stored",
+                         log_file_name)
+            self.debug("Error description", exc_info=1)
         
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/base/taurusbase.py b/lib/taurus/qt/qtgui/base/taurusbase.py
index 91fb332..e1c405d 100644
--- a/lib/taurus/qt/qtgui/base/taurusbase.py
+++ b/lib/taurus/qt/qtgui/base/taurusbase.py
@@ -33,7 +33,7 @@ __docformat__ = 'restructuredtext'
 
 import PyTango
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 import taurus.core
 from taurus.core.util import eventfilters
@@ -81,7 +81,10 @@ class TaurusBaseComponent(taurus.core.TaurusListener, BaseConfigurableClass):
        
        .. note:: 
            Any class which inherits from TaurusBaseComponent is expected to also
-           inherit from QObject (or from a QObject derived class) 
+           inherit from QObject (or from a QObject derived class) If this is not
+           fullfilled, at least the class should reimplement the :meth:`getSignaller`
+           method to return a QObject to be used for emitting and connecting
+           signals.
     """
     
     def __init__(self, name, parent=None, designMode=False):
@@ -111,7 +114,8 @@ class TaurusBaseComponent(taurus.core.TaurusListener, BaseConfigurableClass):
         self._operations = []
         self._modifiableByUser = False
         self._modelInConfig = False
-
+        self._autoProtectOperation = True
+        
         if parent != None and hasattr(parent, "_exception_listener"):
             self._exception_listener = parent._exception_listener
         else:
@@ -121,7 +125,14 @@ class TaurusBaseComponent(taurus.core.TaurusListener, BaseConfigurableClass):
         self.registerConfigProperty(self.isModifiableByUser, self.setModifiableByUser, "modifiableByUser")
         self.registerConfigProperty(self.getModelInConfig, self.setModelInConfig, "ModelInConfig")
         self.resetModelInConfig()
-        
+
+    def getSignaller(self):
+        '''
+        Reimplement this method if your derived class does not inherit from
+        QObject. The return value should be a permanent object capable of
+        emitting Qt signals. See :class:`TaurusImageItem` as an example
+        '''
+        return self
 
     def deleteLater(self):
         '''Reimplements the Qt.QObject deleteLater method to ensure that the
@@ -228,7 +239,7 @@ class TaurusBaseComponent(taurus.core.TaurusListener, BaseConfigurableClass):
         :param evt_type: (taurus.core.TaurusEventType or None) type of event
         :param evt_value: (object or None) event value
         """
-        try: self.emit(Qt.SIGNAL('taurusEvent'),  evt_src, evt_type, evt_value)
+        try: self.getSignaller().emit(Qt.SIGNAL('taurusEvent'),  evt_src, evt_type, evt_value)
         except: pass #self.error('%s.fireEvent(...) failed!'%type(self))
         
     #@Qt.pyqtSignature("taurusEvent")
@@ -484,9 +495,9 @@ class TaurusBaseComponent(taurus.core.TaurusListener, BaseConfigurableClass):
         :return: (str) a tooltip
         """
         if self.modelObj is None:
-            return Qt.QString.fromLatin1(self.getNoneValue())
+            return self.getNoneValue()
         obj = self.modelObj.getDisplayDescrObj()
-        return Qt.QString.fromLatin1(self.toolTipObjToStr(obj))
+        return self.toolTipObjToStr(obj)
     
     def toolTipObjToStr(self, toolTipObj):
         """Converts a python dict to a tooltip string.
@@ -586,7 +597,7 @@ class TaurusBaseComponent(taurus.core.TaurusListener, BaseConfigurableClass):
            
         Override when necessary.
         """
-        try: Qt.QObject.connect(self, Qt.SIGNAL('taurusEvent'), self.filterEvent)
+        try: Qt.QObject.connect(self.getSignaller(), Qt.SIGNAL('taurusEvent'), self.filterEvent)
         except: pass #self.error("In %s.preAttach() ... failed!" % str(type(self)))
 
     def postAttach(self):
@@ -603,7 +614,7 @@ class TaurusBaseComponent(taurus.core.TaurusListener, BaseConfigurableClass):
            
         Override when necessary.
         """
-        try: Qt.QObject.disconnect(self, Qt.SIGNAL('taurusEvent'), self.filterEvent)
+        try: Qt.QObject.disconnect(self.getSignaller(), Qt.SIGNAL('taurusEvent'), self.filterEvent)
         except: pass #self.error("In %s.preDetach() ... failed!" % str(type(self)))
 
         
@@ -696,6 +707,7 @@ class TaurusBaseComponent(taurus.core.TaurusListener, BaseConfigurableClass):
     
     def resetModelInConfig(self):
         return self.setModelInConfig(False)
+    
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     # Pending operations related methods
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
@@ -709,8 +721,17 @@ class TaurusBaseComponent(taurus.core.TaurusListener, BaseConfigurableClass):
                     If None is given (default) the component fetches the pending operations
         """
         self.debug("Apply changes")
-        if ops is None: ops = self.getPendingOperations()
-        self.getTaurusManager().applyPendingOperations(ops)
+        if ops is None:
+            ops = self.getPendingOperations()
+
+        if self.isAutoProtectOperation():
+            import taurus.qt.qtgui.dialog
+            @taurus.qt.qtgui.dialog.protectTaurusMessageBox
+            def go():
+                self.getTaurusManager().applyPendingOperations(ops)
+            go()
+        else:
+            self.getTaurusManager().applyPendingOperations(ops)
         
     def hasPendingOperations(self):
         """Returns if the component has pending operations
@@ -787,7 +808,6 @@ class TaurusBaseComponent(taurus.core.TaurusListener, BaseConfigurableClass):
         """
         return self._localModelName
     
-    @Qt.pyqtSignature("setModel(QString)")
     def setModel(self,model):
         """Sets/unsets the model name for this component
         
@@ -803,6 +823,7 @@ class TaurusBaseComponent(taurus.core.TaurusListener, BaseConfigurableClass):
         
         :param model: (str) the new model name
         :param check: (bool) whether or not to check against the actual model name""" 
+        if model is None: model = ''
         model = str(model)
         if check == True and model == self._localModelName:
             return
@@ -902,7 +923,6 @@ class TaurusBaseComponent(taurus.core.TaurusListener, BaseConfigurableClass):
         """Resets the showing of the display value to True"""
         self.setShowText(True)
         
-    @Qt.pyqtSignature("setTaurusPopupMenu(QString)")
     def setTaurusPopupMenu(self, menuData):
         """Sets/unsets the taurus popup menu
         
@@ -925,7 +945,7 @@ class TaurusBaseComponent(taurus.core.TaurusListener, BaseConfigurableClass):
     def isModifiableByUser(self):
         '''whether the user can change the contents of the form
         
-        :return: (bool) True is the user is allowed to modify the look&feel'''
+        :return: (bool) True if the user is allowed to modify the look&feel'''
         return self._modifiableByUser
     
     def setModifiableByUser(self, modifiable):
@@ -935,13 +955,30 @@ class TaurusBaseComponent(taurus.core.TaurusListener, BaseConfigurableClass):
         :param modifiable: (bool)
         '''
         self._modifiableByUser = modifiable
-            
-        
+    
     def resetModifiableByUser(self):
         '''Equivalent to setModifiableByUser(True)'''
         self.setModifiableByUser(False)
+    
+    def resetAutoProtectOperation(self):
+        """Resets protecting operations"""
+        self.setAutoProtectOperation(True)
+        
+    def isAutoProtectOperation(self):
+        """Tells if this widget's operations are protected against exceptions
         
+        :return: (bool) True if operations are protected against exceptions or
+                 False otherwise"""
+        return self._autoProtectOperation
     
+    def setAutoProtectOperation(self, protect):
+        """Sets/unsets this widget's operations are protected against exceptions
+        
+        :param protect: wheater or not to protect widget operations
+        :type protect: bool"""
+        self._autoProtectOperation = protect
+
+
 class TaurusBaseWidget(TaurusBaseComponent):
     """The base class for all Qt Taurus widgets.
     
@@ -951,10 +988,10 @@ class TaurusBaseWidget(TaurusBaseComponent):
     
     ModelChangedSignal = 'modelChanged(const QString &)'
     
-    def __init__(self, name, parent=None, designMode = False):
+    def __init__(self, name, parent=None, designMode=False):
         self._disconnect_on_hide = False
-        
         self._supportedMimeTypes = None
+        self._autoTooltip = True
         self.call__init__(TaurusBaseComponent, name, parent=parent, designMode=designMode)
         self._setText = self._findSetTextMethod()
     
@@ -1054,6 +1091,7 @@ class TaurusBaseWidget(TaurusBaseComponent):
         :param model: (str) the new model name
         :param check: (bool) whether or not to check against the actual model name
         """ 
+        if model is None: model = ''
         model = str(model)
         send_signal = (model != self._localModelName)
         TaurusBaseComponent.setModelCheck(self, model, check)
@@ -1083,7 +1121,6 @@ class TaurusBaseWidget(TaurusBaseComponent):
                 self.setModelCheck(self.getModel(), False)
         self.getQtClass().changeEvent(self, evt)
     
-    @Qt.pyqtSignature("parentModelChanged(const QString &)")
     def parentModelChanged(self, parentmodel_name):
         """Invoked when the Taurus parent model changes
         
@@ -1124,7 +1161,8 @@ class TaurusBaseWidget(TaurusBaseComponent):
             self._setText(text)
         
         #update tooltip
-        self.setToolTip(self.getFormatedToolTip())
+        if self._autoTooltip:
+            self.setToolTip(self.getFormatedToolTip())
         
         #TODO: update whatsThis
         
@@ -1381,11 +1419,27 @@ class TaurusBaseWidget(TaurusBaseComponent):
             if result != Qt.QMessageBox.Ok:
                 return
         self.applyPendingOperations(ops)
+
+    def setAutoTooltip(self, yesno):
+        """Determines if the widget should automatically generate a tooltip
+        based on the current widget model.
+        
+        :param yesno: (bool) True to automatically generate tooltip or False otherwise
+        """
+        self._autoTooltip = yesno
+        
+    def getAutoTooltip(self):
+        """Returns if the widget is automatically generating a tooltip based
+        on the current widget model.
+        
+        :return: (bool)  True if automatically generating tooltip or False otherwise
+        """
+        return self._autoTooltip
     
     @classmethod
     def getQtDesignerPluginInfo(cls):
         """Returns pertinent information in order to be able to build a valid
-        QtDesigner widget plugin
+        QtDesigner widget plugin.
         
         The dictionary returned by this method should contain *at least* the 
         following keys and values:
@@ -1467,7 +1521,7 @@ class TaurusBaseWritableWidget(TaurusBaseWidget):
 
     def writeValue(self, forceApply=False):
         '''Writes the value to the attribute, either by applying pending
-        operations or (if the ForcedApply flag is True), it wites directly when
+        operations or (if the ForcedApply flag is True), it writes directly when
         no operations are pending'''
         
         if self.hasPendingOperations():
@@ -1542,18 +1596,19 @@ class TaurusBaseWritableWidget(TaurusBaseWidget):
         return []
 
     def getValue(self):
-        raise RuntimeError("Not allowed to call TaurusBaseWritableWidget.getValue()")
+        raise NotImplementedError("Not allowed to call TaurusBaseWritableWidget.getValue()")
 
     def setValue(self, v):
-        raise RuntimeError("Not allowed to call TaurusBaseWritableWidget.setValue()")
+        raise NotImplementedError("Not allowed to call TaurusBaseWritableWidget.setValue()")
 
     def updateStyle(self):
-        toolTip = self.getFormatedToolTip()
-        if self.hasPendingOperations():
-            v_str = str(self.getValue())
-            model_v_str = getattr(self.getModelValueObj(),'w_value', '-----')
-            toolTip += '<hr/>Displayed value (%s) differs from applied value (%s)' % (v_str, model_v_str)
-        self.setToolTip(toolTip)
+        if self._autoTooltip:
+            toolTip = self.getFormatedToolTip()
+            if self.hasPendingOperations():
+                v_str = str(self.getValue())
+                model_v_str = getattr(self.getModelValueObj(),'w_value', '-----')
+                toolTip += '<hr/>Displayed value (%s) differs from applied value (%s)' % (v_str, model_v_str)
+            self.setToolTip(toolTip)
 
     def _updateValidator(self, evt_value):
         #re-set the validator ranges if applicable
@@ -1574,7 +1629,7 @@ class TaurusBaseWritableWidget(TaurusBaseWidget):
             v.setBottom(bottom)
             v.setTop(top)
             self.debug("Validator range set to %f-%f"%(bottom,top))
-            
+    
     @classmethod
     def getQtDesignerPluginInfo(cls):
         ret = TaurusBaseWidget.getQtDesignerPluginInfo()
diff --git a/lib/taurus/qt/qtgui/base/tauruscontroller.py b/lib/taurus/qt/qtgui/base/tauruscontroller.py
index a0bda2c..9ce9f57 100644
--- a/lib/taurus/qt/qtgui/base/tauruscontroller.py
+++ b/lib/taurus/qt/qtgui/base/tauruscontroller.py
@@ -35,11 +35,9 @@ __docformat__ = 'restructuredtext'
 
 import weakref
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
-# shame on me for importing PyTango!!!
-import PyTango
-AttrDataFormat = PyTango.AttrDataFormat
+from taurus.core import DataFormat, TaurusEventType
 
 from taurus.qt.qtgui.util import QT_ATTRIBUTE_QUALITY_PALETTE
 from taurus.qt.qtgui.util import QT_DEVICE_STATE_PALETTE
@@ -51,6 +49,9 @@ class TaurusBaseController(object):
         self._widget = weakref.ref(widget)
         self._updateAsPalette = updateAsPalette
         self._stateObj = None
+        self._last_value = None
+        self._last_config_value = None
+        self._last_error_value = None
         self._setStyle()
     
     def _setStyle(self):
@@ -71,9 +72,13 @@ class TaurusBaseController(object):
     attrObj = configObj = deviceObj = modelObj
     
     def valueObj(self):
-        modelObj = self.modelObj()
-        if modelObj is None: return None
-        return modelObj.getValueObj()
+        value = self._last_value
+        if value is None:
+            modelObj = self.modelObj()
+            if modelObj is None:
+                return None
+            value = modelObj.getValueObj()
+        return value
     
     def stateValueObj(self):
         stateObj = self.stateObj()
@@ -85,13 +90,11 @@ class TaurusBaseController(object):
         return getattr(valueObj, "value", None)
 
     def w_value(self):
-        attrObj = self.attrObj()
-        valueObj = attrObj and attrObj.getValueObj() or None
+        valueObj = self.valueObj()
         return getattr(valueObj, "w_value", None)
     
     def quality(self):
-        attrObj = self.attrObj()
-        valueObj = attrObj and attrObj.getValueObj() or None
+        valueObj = self.valueObj()
         return getattr(valueObj, "quality", None)
 
     def state(self):
@@ -102,6 +105,12 @@ class TaurusBaseController(object):
         return self.widget().getDisplayValue()
     
     def handleEvent(self, evt_src, evt_type, evt_value):
+        if evt_type == TaurusEventType.Change or evt_type == TaurusEventType.Periodic:
+            self._last_value = evt_value
+        elif evt_type == TaurusEventType.Config:
+            self._last_config_value = evt_value
+        else:
+            self._last_error_value = evt_value
         self.update()
 
     def eventReceived(self, evt_src, evt_type, evt_value):
@@ -172,7 +181,7 @@ class TaurusScalarAttributeControllerHelper(TaurusAttributeControllerHelper):
             return widget.getDisplayValue()
 
         format, value = valueObj.data_format, valueObj.value
-        if format == AttrDataFormat.SCALAR:
+        if format == DataFormat._0D:
             return self._getDisplayValue(widget, valueObj, None, write)
         
         idx = widget.getModelIndexValue()
@@ -184,11 +193,38 @@ class TaurusScalarAttributeControllerHelper(TaurusAttributeControllerHelper):
             else: value = valueObj.value
             if idx is not None and len(idx):
                 for i in idx: value = value[i]
-            return self.modelObj().displayValue(value)
+            
+            if self._last_config_value is None or value is None:
+                return self.modelObj().displayValue(value)
+            else:
+                #TODO: last_config_value object to format the value
+                return self.modelObj().displayValue(value)
+                
         except Exception, e:
             return widget.getNoneValue()
 
-
+    def displayValue(self,value):
+        if value is None:
+            return None
+        ret = None
+        try:
+            if self.isScalar():
+                format = self.getFormat()
+                if self.isNumeric() and format is not None:
+                    format = self.getFormat()
+                    ret = self.getFormat() % value
+                else:
+                    ret = str(value)
+            elif self.isSpectrum():
+                ret = str(value)
+            else:
+                ret = str(value)
+        except:
+            # if cannot calculate value based on the format just return the value
+            raise
+            ret = str(value)
+        return ret
+    
 class TaurusConfigurationControllerHelper(object):
 
     def __init__(self):
@@ -209,7 +245,7 @@ class TaurusConfigurationControllerHelper(object):
         if self._configParam is None:
             model = self.widget().model
             try:
-                self._configParam = model[model.rfind('=')+1:].lower()
+                self._configParam = model[model.rfind('=')+1:].lower() #@todo: !!This is assuming tango names.A regexp or a call to a validator should be used
             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 40fd2b6..f94d5f3 100644
--- a/lib/taurus/qt/qtgui/base/taurusqattribute.py
+++ b/lib/taurus/qt/qtgui/base/taurusqattribute.py
@@ -26,12 +26,13 @@
 """
 Provides a QtObject for taurus attributes 
 """
-
-from PyQt4 import Qt
-from taurus.qt.qtgui.base import TaurusBaseComponent
+import weakref
+import re
 import PyTango
-import weakref, re
+
 import taurus.core
+from taurus.qt import Qt
+from taurus.qt.qtgui.base import TaurusBaseComponent
 from taurus.core.util import SafeEvaluator
 
 class TaurusQAttributeFactory(object): #@this probably needs to be ported to a proper TaurusFactory
diff --git a/lib/taurus/qt/qtgui/button/qbuttonbox.py b/lib/taurus/qt/qtgui/button/qbuttonbox.py
index 2ba827c..b171f3b 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 PyQt4 import Qt
+from taurus.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 37face3..8831bc0 100644
--- a/lib/taurus/qt/qtgui/button/taurusbutton.py
+++ b/lib/taurus/qt/qtgui/button/taurusbutton.py
@@ -26,17 +26,19 @@
 
 """This module provides a taurus QPushButton based widgets"""
 
-__all__ = ["TaurusLauncherButton", "TaurusCommandButton"]
+__all__ = ["TaurusLauncherButton", "TaurusCommandButton", "TaurusLockButton"]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
-
 import PyTango
 
-import taurus.core
+from taurus.qt import Qt
+from taurus.core import TaurusDevice, LockStatus, TaurusLockInfo
 from taurus.qt.qtgui.base import TaurusBaseWidget
 from taurus.core.util import eventfilters
+from taurus.core.util import Enumeration
+from taurus.qt.qtgui.resource import getIcon
+from taurus.qt.qtgui.dialog import TaurusMessageBox
 
 class TaurusLauncherButton(Qt.QPushButton, TaurusBaseWidget):
     '''This class provides a button that launches a modeless dialog containing
@@ -162,6 +164,7 @@ class TaurusLauncherButton(Qt.QPushButton, TaurusBaseWidget):
     UseParentModel = Qt.pyqtProperty("bool", TaurusBaseWidget.getUseParentModel, TaurusBaseWidget.setUseParentModel, TaurusBaseWidget.resetUseParentModel)
 
 
+
 class TaurusCommandButton(Qt.QPushButton, TaurusBaseWidget):
     '''This class provides a button that executes a tango command on its device.
     
@@ -213,7 +216,9 @@ class TaurusCommandButton(Qt.QPushButton, TaurusBaseWidget):
             return '---'
         return self._command
     
-    @Qt.pyqtSignature("clicked()")
+    import taurus.qt.qtgui.dialog
+    
+    @taurus.qt.qtgui.dialog.ProtectTaurusMessageBox(title="Unexpected error when executing command")
     def onClicked(self):
         '''Slot called when the button is clicked. It executes the command with
         parameters. It may issue a warning if the command is flagged as
@@ -225,6 +230,7 @@ class TaurusCommandButton(Qt.QPushButton, TaurusBaseWidget):
         
         .. seealso:: :meth:`setCommand`, :meth:`setParameters`, :meth:`TaurusBaseComponent.isDangerous`
         '''
+        
         self.debug("launch command %s"%str(self._command))
         if len(self._command) == 0:
             return
@@ -246,9 +252,7 @@ class TaurusCommandButton(Qt.QPushButton, TaurusBaseWidget):
         except Exception, e:
             self.error('Unexpected error when executing command %s of %s: %s'%(self._command, modelobj.getNormalName(), str(e)))
             raise
-            self.traceback()
         self.emit(Qt.SIGNAL('commandExecuted'), result)
-        self.info('Execution of command %s returned: %s'%(self._command, str(result)))
         return result
     
     
@@ -379,6 +383,80 @@ class TaurusCommandButton(Qt.QPushButton, TaurusBaseWidget):
     DangerMessage = Qt.pyqtProperty("QString", TaurusBaseWidget.getDangerMessage, TaurusBaseWidget.setDangerMessage, TaurusBaseWidget.resetDangerMessage)
     
     CustomText = Qt.pyqtProperty("QString", getCustomText, setCustomText, resetCustomText)  
+
+
+class TaurusLockButton(Qt.QPushButton, TaurusBaseWidget):
+
+    _LOCK_MAP = { LockStatus.Unlocked : ":/lock_unlocked.svg",
+                  LockStatus.Locked   : ":/lock_locked_unpreviledged.svg",
+                  LockStatus.LockedMaster : ":/lock_locked.svg",
+                  LockStatus.Unknown: ":/lock_unknown.svg" }
+
+    def __init__(self, parent = None, designMode = False):
+        self._lock_info = TaurusLockInfo()
+        name = self.__class__.__name__
+        self.call__init__wo_kw(Qt.QPushButton, parent)
+        self.call__init__(TaurusBaseWidget, name, designMode=designMode)
+        self.connect(self, Qt.SIGNAL("toggled(bool)"), self.on_toggle)
+        self.setCheckable(True)
+        self.setAutoTooltip(False)
+        self.update_button()
+        
+    @classmethod
+    def getQtDesignerPluginInfo(cls):
+        return { 
+            'group'     : 'Taurus Buttons',
+            'icon'      : ':/designer/pushbutton.png',
+            'module'    : 'taurus.qt.qtgui.button',
+            'container' : False }
+
+    def getModelClass(self):
+        return TaurusDevice
+    
+    def setModel(self, model):
+        TaurusBaseWidget.setModel(self, model)
+        self.update_button()
+        
+    def get_lock_info(self, cache=False):
+        dev = self.getModelObj()
+        if dev is not None:
+            self._lock_info = dev.getLockInfo(cache=cache)
+        return self._lock_info
+    
+    def update_button(self, lock_info=None):
+        if lock_info is None:
+            lock_info = self.get_lock_info()
+        status = lock_info.status
+        self.setIcon(getIcon(self._LOCK_MAP[status]))
+        self.setDown(status in (LockStatus.Locked, LockStatus.LockedMaster))
+        self.setToolTip(lock_info.status_msg)
+        self.update()
+        return lock_info
+    
+    def handleEvent(self, evt_src, evt_type, evt_value):
+        pass
+    
+    def _on_toggle(self, down):
+        dev = self.getModelObj()
+        if down:
+            dev.lock()
+        else:
+            dev.unlock()
+        self.update_button()
+        
+    def on_toggle(self, down):
+        try:
+            self._on_toggle(down)
+        except:
+            import sys
+            msgbox = TaurusMessageBox(*sys.exc_info())
+            msgbox.setWindowTitle("Error locking device")
+            if self.update_button().status == LockStatus.Locked:
+                msgbox.setText(self._lock_info.status_msg)
+            msgbox.exec_()
+        
+    model = Qt.pyqtProperty("QString", TaurusBaseWidget.getModel, setModel,
+                            TaurusBaseWidget.resetModel)
   
 #if __name__ == "__main__":
 #    import sys
@@ -407,3 +485,48 @@ class TaurusCommandButton(Qt.QPushButton, TaurusBaseWidget):
 #    sys.exit(app.exec_())
 #
 #
+
+def demo():
+    lock_button = TaurusLockButton()
+    lock_button.model = "sys/tg_test/1"
+    return lock_button
+
+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] <full_attribute_name(s)>"
+        app = Application(sys.argv, cmd_line_parser=parser, 
+                          app_name="Taurus lock button demo", app_version="1.0",
+                          org_domain="Taurus", org_name="Tango community")
+        
+    args = app.get_command_line_args()
+
+    if len(args) == 0:
+        w = demo()
+    else:
+        models = map(str.lower, args)
+
+        w = Qt.QWidget()
+        layout = Qt.QGridLayout()
+        w.setLayout(layout)
+        for model in models:
+            lock_button = TaurusLockButton()
+            lock_button.model = model
+            layout.addWidget(lock_button)
+    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/__init__.py b/lib/taurus/qt/qtgui/console/__init__.py
similarity index 82%
copy from lib/taurus/qt/qtgui/extra_sardana/__init__.py
copy to lib/taurus/qt/qtgui/console/__init__.py
index 0cd27bd..f085f2b 100644
--- a/lib/taurus/qt/qtgui/extra_sardana/__init__.py
+++ b/lib/taurus/qt/qtgui/console/__init__.py
@@ -23,9 +23,12 @@
 ##
 #############################################################################
 
-"""This package contains a collection of taurus widgets designed to connect
-to sardana"""
+"""This package contains a collection of taurus console widgets"""
 
 __docformat__ = 'restructuredtext'
 
-from .sardanashell import *
\ No newline at end of file
+try:
+    from .taurusconsole import *
+except:
+    from taurus.qt.qtgui.display import create_fallback as __create
+    TaurusConsole = __create("TaurusConsole")
diff --git a/lib/taurus/qt/qtgui/console/taurusconsole.py b/lib/taurus/qt/qtgui/console/taurusconsole.py
new file mode 100644
index 0000000..1b36a12
--- /dev/null
+++ b/lib/taurus/qt/qtgui/console/taurusconsole.py
@@ -0,0 +1,70 @@
+#!/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 console widgets"""
+
+__docformat__ = 'restructuredtext'
+
+from IPython.frontend.qt.console.qtconsoleapp import IPythonQtConsoleApp
+
+from taurus.qt import Qt, QtGui
+if hasattr(Qt, 'QString'):
+    raise Exception, "Using Qt SIP API v1. IPython requires Qt SIP API v2"
+
+
+class TaurusConsoleApp(IPythonQtConsoleApp):
+    pass
+
+
+class TaurusConsole(QtGui.QWidget):
+    
+    def __init__(self, parent=None, designMode=False):
+        QtGui.QWidget.__init__(self, parent)
+        l = QtGui.QVBoxLayout()
+        l.setContentsMargins(0,0,0,0)
+        l.setSpacing(0)
+        self.setLayout(l)
+        self.app = app = TaurusConsoleApp()
+        app.initialize(argv=["--pylab=inline"])
+        l.addWidget(app.widget)
+    
+    
+    
+#-----------------------------------------------------------------------------
+# Main entry point
+#-----------------------------------------------------------------------------
+
+def main():
+    import taurus.qt.qtgui.application
+    
+    #app = taurus.qt.qtgui.application.TaurusApplication()
+    
+    taurus_app = TaurusConsoleApp()
+    taurus_app.initialize()
+    taurus_app.start()
+
+
+if __name__ == '__main__':
+    main()
diff --git a/lib/taurus/qt/qtgui/container/qcontainer.py b/lib/taurus/qt/qtgui/container/qcontainer.py
index 24adb5d..db3be30 100644
--- a/lib/taurus/qt/qtgui/container/qcontainer.py
+++ b/lib/taurus/qt/qtgui/container/qcontainer.py
@@ -32,12 +32,11 @@ __docformat__ = 'restructuredtext'
 import copy
 import sys
 
-from PyQt4 import Qt
-
+from taurus.qt import Qt
 from taurus.qt.qtgui.resource import getThemePixmap, getThemeIcon, getStandardIcon
 
 _TitleBarStyleExpanded = """.QFrame {{
-border-width: 1px;
+border-width: 0px;
 border-style: solid;
 border-color: {stop_color};
 border-top-left-radius: {border_radius};
@@ -49,7 +48,7 @@ background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
 }}"""
 
 _TitleBarStyleCollapsed = """.QFrame {{
-border-width: 1px;
+border-width: 0px;
 border-style: solid;
 border-color: {stop_color};
 border-top-left-radius: {border_radius};
@@ -75,6 +74,9 @@ border-bottom-left-radius: {border_radius};
 border-bottom-right-radius: {border_radius};
 background-color: qlineargradient(x1: 0, y1: 0, x2: 1.0, y2: 1.0,
                                   stop: 0 {start_color}, stop: 1 {stop_color});
+/*
+  background-position: center center;
+*/
 }}"""
 
 _ContentBarStyleWithoutTitle = """.QFrame {{
@@ -87,6 +89,9 @@ border-bottom-left-radius: {border_radius};
 border-bottom-right-radius: {border_radius};
 background-color: qlineargradient(x1: 0, y1: 0, x2: 1.0, y2: 1.0,
                                   stop: 0 {start_color}, stop: 1 {stop_color});
+/*
+  background-position: center center;
+*/
 }}"""
 
 
@@ -99,7 +104,7 @@ class QGroupWidget(Qt.QWidget):
         'start_color'  : 'rgb(60, 150, 255)',
         'stop_color'   : 'rgb(0, 65, 200)',
         'font_color'   : 'white',
-        'border_radius': '5px',
+        'border_radius': '4px',
     }
 
     DefaultContentVisible = True
@@ -107,7 +112,7 @@ class QGroupWidget(Qt.QWidget):
         'start_color' : 'rgb(224, 224, 224)',
         'stop_color'  : 'rgb(255, 255, 255)',
         'border_color' : 'rgb(0, 85, 227)',
-        'border_radius': '5px',
+        'border_radius': '4px',
     }
 
     def __init__(self, parent=None, designMode=False):
@@ -250,7 +255,7 @@ class QGroupWidget(Qt.QWidget):
     def setContentVisible(self, show):
         """Sets this widget's contents visibility
         
-        :param icon: (bool) the new widget contents visibility"""
+        :param show: (bool) the new widget contents visibility"""
         self._contentVisible = show
         self._updateStyle()
         
diff --git a/lib/taurus/qt/qtgui/container/taurusbasecontainer.py b/lib/taurus/qt/qtgui/container/taurusbasecontainer.py
index f7bd185..1c22a41 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 PyQt4 import Qt
+from taurus.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 77935a3..fb82401 100644
--- a/lib/taurus/qt/qtgui/container/taurusframe.py
+++ b/lib/taurus/qt/qtgui/container/taurusframe.py
@@ -29,8 +29,7 @@ __all__ = ["TaurusFrame"]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
-
+from taurus.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 ab56866..11174fa 100644
--- a/lib/taurus/qt/qtgui/container/taurusgroupbox.py
+++ b/lib/taurus/qt/qtgui/container/taurusgroupbox.py
@@ -29,8 +29,7 @@ __all__ = ["TaurusGroupBox"]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
-
+from taurus.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 a430117..efdc6b8 100644
--- a/lib/taurus/qt/qtgui/container/taurusgroupwidget.py
+++ b/lib/taurus/qt/qtgui/container/taurusgroupwidget.py
@@ -29,8 +29,7 @@ __all__ = ["TaurusGroupWidget"]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
-
+from taurus.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 1a0db12..be48697 100644
--- a/lib/taurus/qt/qtgui/container/taurusmainwindow.py
+++ b/lib/taurus/qt/qtgui/container/taurusmainwindow.py
@@ -31,13 +31,16 @@ __all__ = ["TaurusMainWindow"]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
+import os
+import sys
 
+from taurus.qt import Qt
 from taurusbasecontainer import TaurusBaseContainer
 
 from taurus.qt.qtcore.configuration import BaseConfigurableClass
 from taurus.qt.qtgui.util import ExternalAppAction
 from taurus.qt.qtgui.resource import getIcon, getThemeIcon
+from taurus.qt.qtgui.dialog import protectTaurusMessageBox
 
 import cPickle as pickle
 
@@ -93,11 +96,38 @@ class ConfigurationDialog(Qt.QDialog, BaseConfigurableClass):
         if self._tabwidget.count():
                 Qt.QDialog.show(self)
 
+class Rpdb2Thread(Qt.QThread):
+    
+    def run(self):
+        dialog = Rpdb2WaitDialog(parent=self.parent())
+        dialog.exec_()
+
+
+class Rpdb2WaitDialog(Qt.QMessageBox):
+    
+    def __init__(self, title=None, text=None, parent=None):
+        if text is None:
+            text = "Waitting for a debugger console to attach..."
+        if title is None:
+            title = "Rpdb2 waitting..."
+        Qt.QMessageBox.__init__(self)
+        self.addButton(Qt.QMessageBox.Ok)
+        self.setWindowTitle(title)
+        self.setText(text)
+        self.button(Qt.QMessageBox.Ok).setEnabled(False)
+        
+        self.connect(parent, Qt.SIGNAL("rpdb2Started"), self.onStarted)
+    
+    def onStarted(self):
+        self.setWindowTitle("Rpdb2 running!")
+        self.setText("A rpdb2 debugger was started successfully!")
+        self.button(Qt.QMessageBox.Ok).setEnabled(True)
         
+
 class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
     '''A Taurus-aware QMainWindow with several customizations:
     
-        - It takes care of (re)storing its geometry and state
+        - It takes care of (re)storing its geometry and state (see :meth:`loadSettings`)
         - It provides a splashScreen (which can be disabled)
         - It provides a statusBar (@TODO)
         - It provides basic Taurus menus and actions:
@@ -128,7 +158,10 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
         
         self.extAppsBar = None
         
-                
+        self.helpManualDW = None
+        self.helpManualBrowser = None
+        self.resetHelpManualURI()
+        
         #The configuration Dialog (which is launched with the configurationAction)
         self.configurationDialog = ConfigurationDialog(self)
         
@@ -148,6 +181,10 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
         #Create Menus
         #File menu
         self.fileMenu = self.menuBar().addMenu("File")
+        self.fileMenu.addAction(self.importSettingsFileAction)
+        self.fileMenu.addAction(self.exportSettingsFileAction)
+        #self.fileMenu.addAction(self.resetSettingsAction)
+        self.fileMenu.addSeparator()
         self.fileMenu.addAction(self.quitApplicationAction)
         
         #View menu
@@ -156,6 +193,11 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
         self.viewToolBarsMenu = self.viewMenu.addMenu("Tool Bars")
         self.viewMenu.addSeparator()
         self.viewMenu.addAction(self.toggleFullScreenAction)
+        self.viewMenu.addSeparator()
+        self.perspectivesMenu = Qt.QMenu("Load Perspectives", self)
+        self.viewMenu.addMenu(self.perspectivesMenu)
+        self.viewMenu.addAction(self.savePerspectiveAction)
+        self.viewMenu.addAction(self.deletePerspectiveAction)
         
         #Taurus Menu
         self.taurusMenu = self.menuBar().addMenu("Taurus")
@@ -168,7 +210,8 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
         
         #Help Menu
         self.helpMenu = self.menuBar().addMenu("Help")
-        self.helpMenu.addAction(self.helpAboutAction)
+        self.helpMenu.addAction("About ...", self.showHelpAbout)
+        self.helpMenu.addAction(taurus.qt.qtgui.resource.getThemeIcon("help-browser"),"Manual", self.onShowManual)
         
         #View Toolbar
         self.viewToolBar = self.addToolBar("View")
@@ -176,7 +219,6 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
         self.viewToolBar.addAction(self.toggleFullScreenAction)
         
         #Perspectives Toolbar
-        self.perspectivesMenu = Qt.QMenu("Load Perspectives")
         self.perspectivesToolBar = self.addToolBar("Perspectives")
         self.perspectivesToolBar.setObjectName("perspectivesToolBar")
         self.viewToolBarsMenu.addAction(self.perspectivesToolBar.toggleViewAction())
@@ -244,31 +286,112 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
         self.savePerspectiveAction = Qt.QAction(getThemeIcon("document-save"),'Save Perspective ...', self)
         self.connect(self.savePerspectiveAction, Qt.SIGNAL("triggered()"), self.savePerspective)
         
+        self.deletePerspectiveAction = Qt.QAction(getIcon(":/actions/edit-delete.svg"),'Delete Perspective ...', self)
+        self.connect(self.deletePerspectiveAction, Qt.SIGNAL("triggered()"), self.removePerspective)
+        
+        self.exportSettingsFileAction = Qt.QAction(getThemeIcon("document-save"),'Export Settings ...', self)
+        self.connect(self.exportSettingsFileAction, Qt.SIGNAL("triggered()"), self.exportSettingsFile)
+        
+        self.importSettingsFileAction = Qt.QAction(getThemeIcon("document-open"),'Import Settings ...', self)
+        self.connect(self.importSettingsFileAction, Qt.SIGNAL("triggered()"), self.importSettingsFile)
+        
+        #self.resetSettingsAction = Qt.QAction(getThemeIcon("edit-undo"),'Reset Settings', self)
+        #self.connect(self.resetSettingsAction, Qt.SIGNAL("triggered()"), self.resetSettings)
+        
         self.configurationAction = Qt.QAction(getThemeIcon("preferences-system"), 'Configurations ...', self)
         self.connect(self.configurationAction, Qt.SIGNAL("triggered()"), self.configurationDialog.show)
         
-        self.helpAboutAction = Qt.QAction('About ...', self)
-        #self.helpUserManual = Qt.QAction('')
+        #self.rpdb2Action = Qt.QAction("Spawn rpdb2", self)
+        self.spawnRpdb2Shortcut = Qt.QShortcut(self)
+        self.spawnRpdb2Shortcut.setKey(Qt.QKeySequence(Qt.Qt.Key_F9))
+        self.connect(self.spawnRpdb2Shortcut, Qt.SIGNAL("activated()"), self._onSpawnRpdb2)
+
+        #self.rpdb2Action = Qt.QAction("Spawn rpdb2", self)
+        self.spawnRpdb2Shortcut = Qt.QShortcut(self)
+        rpdb2key = Qt.QKeySequence(Qt.Qt.CTRL + Qt.Qt.ALT + Qt.Qt.Key_0, Qt.Qt.Key_1)
+        self.spawnRpdb2Shortcut.setKey(rpdb2key)
+        self.connect(self.spawnRpdb2Shortcut, Qt.SIGNAL("activated()"), self._onSpawnRpdb2)
+        
+        self.spawnRConsoleShortcut = Qt.QShortcut(self)
+        rconsolekey = Qt.QKeySequence(Qt.Qt.CTRL + Qt.Qt.ALT + Qt.Qt.Key_0, Qt.Qt.Key_2)
+        self.spawnRConsoleShortcut.setKey(rconsolekey)
+        self.connect(self.spawnRConsoleShortcut, Qt.SIGNAL("activated()"), self._onSpawnRConsole)
+        
         self.toggleFullScreenAction = Qt.QAction(getIcon(":/actions/view-fullscreen.svg"), 'Show FullScreen', self)
         self.toggleFullScreenAction.setCheckable(True)
-        self.toggleFullScreenAction.setShortcut(Qt.QKeySequence(Qt.Qt.Key_F11))
-        self.toggleFullScreenAction.setShortcutContext(Qt.Qt.ApplicationShortcut)
         self.connect(self.toggleFullScreenAction, Qt.SIGNAL("toggled(bool)"), self._onToggleFullScreen)
 
-        #self.shortcut = Qt.QShortcut(self)
-        #self.shortcut.setKey(Qt.QKeySequence(Qt.Qt.Key_F11))
-        #self.connect(self.shortcut, Qt.SIGNAL("activated()"), self._onToggleFullScreen1)
+        # In Qt <= 4.4 setting the QAction shortcut at the application level
+        # doesn't work when trying to get out of fullscreen so we create a
+        # QShortcut manually to solve the problem. 
+        #self.toggleFullScreenAction.setShortcut(Qt.QKeySequence(Qt.Qt.Key_F11))
+        #self.toggleFullScreenAction.setShortcutContext(Qt.Qt.ApplicationShortcut)
+        self.fullScreenShortcut = Qt.QShortcut(self)
+        self.fullScreenShortcut.setKey(Qt.QKeySequence(Qt.Qt.Key_F11))
+        self.connect(self.fullScreenShortcut, Qt.SIGNAL("activated()"), self._onToggleFullScreen)
     
-    def _onToggleFullScreen1(self):
-        if self.isFullScreen():
-            self.showNormal()
-            self._toggleToolBarsAndMenu(True)
-        else:
-            self._toggleToolBarsAndMenu(False)
-            self.showFullScreen()
+    @protectTaurusMessageBox
+    def _onSpawnRpdb2(self):
+        try:
+            import rpdb2
+        except ImportError:
+            Qt.QMessageBox.warning(self, "Rpdb2 not installed",
+                                   "Cannot spawn debugger: Rpdb2 is not "
+                                   "installed on your system.")
+            return
+        if hasattr(self, "_rpdb2"):
+            Qt.QMessageBox.information(self, "Rpdb2 running",
+                                       "A rpdb2 debugger is already started")
+            return
+        
+        pwd, ok = Qt.QInputDialog.getText(self, "Rpdb2 password", "Password:",
+                                          Qt.QLineEdit.Password)
+        if not ok:
+            return
+        
+        Qt.QMessageBox.warning(self, "Rpdb2 freeze",
+                               "The application will freeze until a "
+                               "debugger attaches.")
+        
+        self._rpdb2 = rpdb2.start_embedded_debugger(str(pwd))
+        
+        Qt.QMessageBox.information(self, "Rpdb2 running",
+                                   "rpdb2 debugger started successfully!")
+    
+    @protectTaurusMessageBox
+    def _onSpawnRConsole(self):
+        try:
+            import rfoo.utils.rconsole
+        except ImportError:
+            Qt.QMessageBox.warning(self, "rfoo not installed",
+                                   "Cannot spawn debugger: rfoo is not "
+                                   "installed on your system.")
+            return
+        
+        if hasattr(self, "_rconsole_port"):
+            Qt.QMessageBox.information(self, "rconsole running",
+                                       "A rconsole is already running on "
+                                       "port %d" % self._rconsole_port)
+            return
+        
+        port, ok = Qt.QInputDialog.getInteger(self, "rconsole port", "Port:",
+                                              rfoo.utils.rconsole.PORT,
+                                              0, 65535)
+        if not ok:
+            return
+        
+        rfoo.utils.rconsole.spawn_server(port=port)
+        self._rconsole_port = port
+        Qt.QMessageBox.information(self, "Rpdb2 running",
+                                   "<html>rconsole started successfully!<br>"
+                                   "Type:<p>"
+                                   "<b>rconsole -p %d</b></p>"
+                                   "to connect to it" % port)
     
-    def _onToggleFullScreen(self, yesno):
-        print "toggle",yesno
+    # I put the yesno=None keyword arg so it may be called by both toggled(bool)
+    # activated() Qt signals. There is no problem as long as we don't use the 
+    # parameter internally in the method
+    def _onToggleFullScreen(self, yesno=None):
         if self.isFullScreen():
             self.showNormal()
             self._toggleToolBarsAndMenu(True)
@@ -322,28 +445,48 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
         #self.__settings = Qt.QSettings() #this uses QCoreApplication.applicationName() and QCoreApplication.organizationName()
         #self.__settings.setDefaultFormat(Qt.QSettings.IniFormat)
             
-    def loadSettings(self, settings=None, group=None, ignoreGeometry=False):
-        '''restores the application settings previously saved with saveSettings.
+    def getFactorySettingsFileName(self):
+        '''returns the file name of the "factory settings" (the ini file with default settings).
+        The default implementation returns "<path>/<appname>.ini", where <path>
+        is the path of the module where the main window class is defined and
+        <appname> is the application name (as obtained from QApplication).
+        
+        :return: (str) the absolute file name.
+        '''
+        root,tail = os.path.split(os.path.abspath(sys.modules[self.__module__].__file__))
+        basename = "%s.ini"%str(Qt.qApp.applicationName())
+        return os.path.join(root,basename)
+    
+    def loadSettings(self, settings=None, group=None, ignoreGeometry=False, factorySettingsFileName=None):
+        '''restores the application settings previously saved with :meth:`saveSettings`.
         
-        This method should be called explicitly from derived classes after all
-        initialization is done
+        .. note:: This method should be called explicitly from derived classes after all
+                  initialization is done
         
         :param settings: (QSettings or None) a QSettings object. If None given,
                          the default one returned by :meth:`getQSettings` will
                          be used
         :param group: (str) a prefix that will be added to the keys to be
                        loaded (no prefix by default)
-        :param ignoreGeometry: (str) if True, the geometry of the MainWindow
+        :param ignoreGeometry: (bool) if True, the geometry of the MainWindow
                                won't be restored
+        :param factorySettingsFileName: (str) file name of a ini file containing the default
+                                        settings to be used as a fallback in
+                                        case the settings file is not found
+                                        (e.g., the first time the application is
+                                        launched after installation)
         '''
-        if settings is None: settings = self.getQSettings()
-        #hide all current dockwidgets (so that they are shown only if they are present in the settings)
-        dockwidgets = [c for c in self.children() if isinstance(c, Qt.QDockWidget)]
-        for d in dockwidgets:
-            d.hide()
+        if settings is None: 
+            settings = self.getQSettings()
+            if len(settings.allKeys()) == 0:
+                fname = factorySettingsFileName or self.getFactorySettingsFileName()
+                if os.path.exists(fname):
+                    self.info('Importing factory settings from "%s"'%fname)
+                    self.importSettingsFile(fname)
+                return
+                
         if group is not None: 
             settings.beginGroup(group)
-        self.restoreState(settings.value("MainWindow/State").toByteArray())
         if not ignoreGeometry: 
             self.restoreGeometry(settings.value("MainWindow/Geometry").toByteArray()) 
         #restore the Taurus config
@@ -353,13 +496,25 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
             msg = 'Problem loading configuration from "%s". Some settings may not be restored.\n Details: %s'%(unicode(settings.fileName()), repr(e))
             self.error(msg)
             Qt.QMessageBox.warning(self,'Error Loading settings', msg, Qt.QMessageBox.Ok)
+        self.restoreState(settings.value("MainWindow/State").toByteArray()) 
+        #hide all dockwidgets (so that they are shown only if they were present in the settings)
+        dockwidgets = [c for c in self.children() if isinstance(c, Qt.QDockWidget)]
+        for d in dockwidgets:
+            r = self.restoreDockWidget(d)
+            d.hide()
+        self.restoreState(settings.value("MainWindow/State").toByteArray()) 
+        
         if group is not None: 
             settings.endGroup()
+        self.updatePerspectivesMenu()
         self.info('MainWindow settings restored')
         
     
     def saveSettings(self, group=None):
-        '''saves the application settings (so that they can be restored with loadSettings)
+        '''saves the application settings (so that they can be restored with :meth:`loadSettings`)
+        
+        .. note:: this method is automatically called by default when closing the
+                  window, so in general there is no need to call it from derived classes 
         
         :param group: (str) a prefix that will be added to the keys to be
                        saved (no prefix by default)
@@ -428,10 +583,78 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
         names = settings.childGroups()
         settings.endGroup()
         return names
+    
+    def removePerspective(self, name=None, settings=None):
+        '''removes the given perspective from the settings
+                
+        :param name: (str) name of the perspective            
+        :param settings: (QSettings or None) a QSettings object. If None given,
+                         the default one returned by :meth:`getQSettings` will
+                         be used
+        '''
+        if settings is None: settings = self.getQSettings()
+        if name is None:
+            perspectives = self.getPerspectivesList()
+            if perspectives.isEmpty(): return
+            name,ok = Qt.QInputDialog.getItem(self, "Delete Perspective", "Choose perspective to be deleted:",
+                                              perspectives, 0, False) 
+            if not ok: return
+        if name not in perspectives:
+            self.warning("Cannot remove perspective %s (not found)"%str(name))
+            return
+        settings.beginGroup("Perspectives")
+        settings.remove(name)
+        settings.endGroup()
+        self.updatePerspectivesMenu()
+    
+    def exportSettingsFile(self, fname=None):
+        '''copies the current settings file into the given file name.
+        
+        :param fname: (str) name of output file. If None given, a file dialog will be shown.
+        '''
+        if fname is None:
+            fname = Qt.QFileDialog.getSaveFileName(self, 'Choose file where the current settings should be saved', 
+                                                   '', "Ini files (*.ini);;All files (*)")
+            if fname.isNull():
+                return
+        self.saveSettings()
+        ok = Qt.QFile.copy(self.getQSettings().fileName(), fname)
+        if ok:
+            self.info('MainWindow settings saved in "%s"'%unicode(fname))
+        else:
+            msg = 'Settings could not be exported to %s'%unicode(fname)
+            Qt.QMessageBox.warning(self, 'Export error', msg)
+    
+    def importSettingsFile(self, fname=None):
+        '''
+        loads settings (including importing all perspectives) from a given ini
+        file. It warns before overwriting an existing perspective.
+        
+        :param fname: (str) name of ini file. If None given, a file dialog will be shown.
+        '''
+        if fname is None:
+            fname = Qt.QFileDialog.getOpenFileName(self, 'Select a ini-format settings file',
+                                                   '', "Ini files (*.ini);;All files (*)")
+            if fname.isNull():
+                return
+        s = Qt.QSettings(fname, Qt.QSettings.IniFormat)
+        #clone the perspectives found in the "factory" settings
+        for p in self.getPerspectivesList(settings=s):
+            self.loadPerspective(name=p, settings=s)
+            self.savePerspective(name=p)
+        #finally load the settings
+        self.loadSettings(settings=s)
+        
+#    def resetSettings(self):
+#        '''deletes current settings file and clears all settings'''
+#        self.__settings = self.newQSettings()
+#        self.saveSettings()
 
     def closeEvent(self,event):
         '''This event handler receives widget close events'''
         self.saveSettings() #save current window state before closing
+        if hasattr(self,"socketServer"):
+            self.socketServer.close()
         
         #print "\n\n------ MAIN WINDOW CLOSED ------ \n\n"
     
@@ -450,7 +673,7 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
         :param toMenu: (bool) If True (default) an entry will be added in the 
                           Tools Menu, under the "External Applications" submenu
                           
-        ..seealso:: :class:`ExternalAppAction`
+        .. seealso:: :class:`ExternalAppAction`
         '''
         if not isinstance(extapp, ExternalAppAction):
             extapp = ExternalAppAction(extapp, parent = self)
@@ -469,7 +692,7 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
             
         if toMenu:
             if self.toolsMenu is None:
-                self.toolsMenu = Qt.QMenu("Tools")
+                self.toolsMenu = Qt.QMenu("Tools", self)
                 self.menuBar().insertMenu(self.helpMenu.menuAction(), self.toolsMenu) #insert it before the Help menu
             if self.externalAppsMenu is None:
                 self.externalAppsMenu = self.toolsMenu.addMenu("External Applications")
@@ -501,7 +724,95 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
         # widgets. Therefore until this is solved, the widget will not appear
         # in the designer
         return None
+    
+    def setHelpManualURI(self,uri):
+        self.__helpManualURI = uri
+        if self.helpManualBrowser is None:
+            from PyQt4.QtWebKit import QWebView
+            self.helpManualBrowser = QWebView()
+        try: url = Qt.QUrl.fromUserInput(uri) 
+        except: url = Qt.QUrl(uri) #fallback for Qt<4.6
+        self.helpManualBrowser.load(url)
+        
+    def getHelpManualURI(self):
+        return self.__helpManualURI
+    
+    def resetHelpManualURI(self):
+        from taurus.core import Release
+        uri = getattr(self, 'MANUAL_URI',Release.url)
+        self.setHelpManualURI(uri)
+    
+    def showHelpAbout(self):
+        appname = unicode(Qt.qApp.applicationName())
+        appversion = unicode(Qt.qApp.applicationVersion())
+        from taurus.core import Release
+        abouttext = "%s %s\n\nUsing %s %s"%(appname, appversion, Release.name, Release.version)
+        Qt.QMessageBox.about(self, 'About', abouttext)
+            
+    def onShowManual(self, anchor=None):
+        '''Shows the User Manual in a dockwidget'''
+        if self.helpManualDW is None:
+            self.helpManualDW = Qt.QDockWidget("Manual", self)
+            self.helpManualDW.setWidget(self.helpManualBrowser)
+            self.helpManualDW.setObjectName("helpManualDW")
+            self.addDockWidget(Qt.Qt.BottomDockWidgetArea, self.helpManualDW)
+        else:
+            self.helpManualDW.show()
+            
+    def checkSingleInstance(self, key=None):
+        '''
+        Tries to connect via a QLocalSocket to an existing application with the
+        given key. If another instance already exists (i.e. the connection succeeds),
+        it means that this application is not the only one
+        '''
+        if key is None:
+            from taurus.core.util import getSystemUserName
+            username = getSystemUserName()
+            appname = unicode(Qt.QApplication.applicationName())
+            key = "__socket_%s-%s__"%(username,appname)
+        
+        socket = Qt.QLocalSocket(self) 
+        socket.connectToServer(key)
+        alive = socket.waitForConnected(3000)
+        if alive:
+            self.info('Another application with key "%s" is already running', key)
+            return False
+        else:
+            self.socketServer = Qt.QLocalServer(self)
+            self.connect(self.socketServer, Qt.SIGNAL("newConnection()"), self.onIncommingSocketConnection)
+            ok = self.socketServer.listen(key)
+            if not ok:
+                if self.socketServer.serverError() == Qt.QAbstractSocket.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)  
+                        self.socketServer.removeServer(key)
+                    ok = self.socketServer.listen(key)
+                if not ok:
+                    self.warning('Cannot start local socket with key "%s". Reason: %s ', key, self.socketServer.errorString())
+                    return False
+            self.info('Registering as single instance with key "%s"',key)
+            return True
+    
+    def onIncommingSocketConnection(self):
+        '''
+        Slot to be called when another application/instance with the same key
+        checks if this application exists. 
         
+        .. note:: This is a dummy implementation which
+                  just logs the connection and discards the associated socket
+                  You may want to reimplement this if you want to act on such
+                  connections
+        '''
+        self.info('Incomming connection from application')
+        socket = self.socketServer.nextPendingConnection()
+        socket.deleteLater()
+        self.raise_()
+        self.activateWindow()
+        
+        
+        
+
+    
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     # Public slots for apply/restore changes
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
@@ -534,17 +845,30 @@ class TaurusMainWindow(Qt.QMainWindow, TaurusBaseContainer):
     tangoHost = Qt.pyqtProperty("QString", getTangoHost, 
                                         setTangoHost, 
                                         resetTangoHost)
+    
+    helpManualURI = Qt.pyqtProperty("QString", getHelpManualURI, 
+                                        setHelpManualURI, 
+                                        resetHelpManualURI)
 
 #---------
 
 if __name__ == "__main__":
     
     import sys
-    app = Qt.QApplication(sys.argv)
+    import taurus.qt.qtgui.application
+    app = taurus.qt.qtgui.application.TaurusApplication()
     app.setApplicationName('TaurusMainWindow-test')
     app.setOrganizationName('ALBA')
-    
+    app.basicConfig()
     form = TaurusMainWindow()
+    
+    #ensure only a single instance of this application is running
+    single = form.checkSingleInstance()
+    if not single:
+        sys.exit(1)
+    
+    #form.setHelpManualURI('http://google.com')
+
     form.loadSettings()
     
     #form.setCentralWidget(Qt.QMdiArea()) #just for testing
diff --git a/lib/taurus/qt/qtgui/container/taurusscrollarea.py b/lib/taurus/qt/qtgui/container/taurusscrollarea.py
index 84ec66f..0f243f0 100644
--- a/lib/taurus/qt/qtgui/container/taurusscrollarea.py
+++ b/lib/taurus/qt/qtgui/container/taurusscrollarea.py
@@ -29,8 +29,7 @@ __all__ = ["TaurusScrollArea"]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
-
+from taurus.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 714bcf2..cfe8acf 100644
--- a/lib/taurus/qt/qtgui/container/tauruswidget.py
+++ b/lib/taurus/qt/qtgui/container/tauruswidget.py
@@ -29,8 +29,7 @@ __all__ = ["TaurusWidget"]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
-
+from taurus.qt import Qt
 from taurusbasecontainer import TaurusBaseContainer
 
 
diff --git a/lib/taurus/qt/qtgui/dialog/taurusmessagebox.py b/lib/taurus/qt/qtgui/dialog/taurusmessagebox.py
index dbdf297..3e63d7c 100644
--- a/lib/taurus/qt/qtgui/dialog/taurusmessagebox.py
+++ b/lib/taurus/qt/qtgui/dialog/taurusmessagebox.py
@@ -25,17 +25,44 @@
 
 """This module provides a set of dialog based widgets"""
 
-__all__ = ["TaurusMessageBox"]
+__all__ = ["TaurusMessageBox", "protectTaurusMessageBox",
+           "ProtectTaurusMessageBox", "TaurusExceptHookMessageBox"]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
+import sys
+import functools
+import threading
 
-import taurus.core.util
+from taurus.qt import Qt
+from taurus.core.util.excepthook import BaseExceptHook
 import taurus.qt.qtgui.resource
-from taurus.qt.qtgui.panel import TaurusMessagePanel
 
+#_MESSAGE_BOX = None
+#_MESSAGE_BOX_LOCK = threading.RLock()
 
+
+#def TaurusMessageBox(err_type=None, err_value=None, err_traceback=None,
+#                     parent=None):
+#    global _MESSAGE_BOX_LOCK
+#    global _MESSAGE_BOX
+    
+#    with _MESSAGE_BOX_LOCK:
+#        if _MESSAGE_BOX is None:
+#            _MESSAGE_BOX = TaurusMessageDialog(err_type=err_type,
+#                                               err_value=err_value,
+#                                               err_traceback=err_traceback,
+#                                               parent=parent)
+#        else:
+#            _MESSAGE_BOX.setError(err_type=err_type,
+#                                  err_value=err_value,
+#                                  err_traceback=err_traceback)
+#    if _MESSAGE_BOX.panel().checkBoxState() == Qt.Qt.Checked:
+#        return
+#    return _MESSAGE_BOX
+
+
+#class TaurusMessageDialog(Qt.QDialog):
 class TaurusMessageBox(Qt.QDialog):
     """A panel intended to display a taurus error.
     Example::
@@ -62,15 +89,21 @@ class TaurusMessageBox(Qt.QDialog):
             msgbox = TaurusMessageBox(*exc_info)
             msgbox.show()"""
     
-    def __init__(self, err_type=None, err_value=None, err_traceback=None, parent=None, designMode=False):
+    def __init__(self, err_type=None, err_value=None, err_traceback=None,
+                 parent=None, designMode=False):
         Qt.QDialog.__init__(self, parent)
         layout = Qt.QVBoxLayout()
         self.setLayout(layout)
-        self._panel = TaurusMessagePanel(err_type, err_value, err_traceback, self, designMode)
+        import taurus.qt.qtgui.panel
+        MsgPanel = taurus.qt.qtgui.panel.TaurusMessagePanel
+        self._panel = MsgPanel(err_type, err_value, err_traceback,
+                               self, designMode)
         layout.setContentsMargins(0, 0, 0, 0)
         layout.addWidget(self._panel)
-        self.connect(self.panel().buttonBox(), Qt.SIGNAL("accepted()"), self.accept)
-        self.connect(self._panel, Qt.SIGNAL("toggledDetails(bool)"), self._onShowDetails)
+        self.connect(self.panel().buttonBox(), Qt.SIGNAL("accepted()"),
+                     self.accept)
+        self.connect(self._panel, Qt.SIGNAL("toggledDetails(bool)"),
+                     self._onShowDetails)
     
     def _onShowDetails(self, show):
         self.adjustSize()
@@ -105,6 +138,13 @@ class TaurusMessageBox(Qt.QDialog):
         :type text: str"""
         self._panel.setText(text)
     
+    def getText(self):
+        """Returns the current text of this panel
+        
+        :return: the text for this panel
+        :rtype: str"""
+        return self._panel.getText()
+    
     def setDetailedText(self, text):
         """Sets the detailed text of the dialog
         
@@ -128,16 +168,140 @@ class TaurusMessageBox(Qt.QDialog):
                 msgbox.setError(*exc_info)
                 msgbox.show()
         
-        :param err_type: the exception type of the exception being handled (a class object)
+        :param err_type: the exception type of the exception being handled
+                         (a class object)
         :type error: class object
         :param err_value: exception object
         :type err_value: object
-        :param err_traceback: a traceback object which encapsulates the call 
+        :param err_traceback: a traceback object which encapsulates the call
                               stack at the point where the exception originally
                               occurred
         :type err_traceback: traceback"""
         self._panel.setError(err_type, err_value, err_traceback)
 
+
+_PROTECT_MESSAGE_BOX = None
+
+def _ProtectMessageBox(err_type=None, err_value=None, err_traceback=None,
+                       parent=None):
+    global _PROTECT_MESSAGE_BOX
+    box = _PROTECT_MESSAGE_BOX
+    if box is None:
+        _PROTECT_MESSAGE_BOX = box = TaurusMessageBox(err_type=err_type,
+            err_value=err_value, err_traceback=err_traceback, parent=parent)
+        box.panel().setCheckBoxVisible(True)
+    else:
+        box.setError(err_type=err_type, err_value=err_value,
+                     err_traceback=err_traceback)
+    if box.panel().checkBoxState() == Qt.Qt.Checked:
+        return
+    return box
+
+
+def protectTaurusMessageBox(fn):
+    """The idea of this function is to be used as a decorator on any method
+    you which to protect against exceptions. The handle of the exception is to
+    display a :class:`TaurusMessageBox` with the exception information.
+    Example::
+    
+        @protectTaurusMessgeBox
+        def turnBeamOn(device_name):
+            d = taurus.Device(device_name)
+            d.TurnOn()
+    """
+       
+    @functools.wraps(fn)
+    def wrapped(*args, **kwargs):
+        try:
+            return fn(*args, **kwargs)
+        except:
+            msgbox = _ProtectMessageBox(*sys.exc_info())
+            if msgbox is None: return
+            msgbox.exec_()
+    return wrapped
+
+class ProtectTaurusMessageBox(object):
+    """The idea of this class is to be used as a decorator on any method 
+    you which to protect against exceptions. The handle of the exception is to
+    display a :class:`TaurusMessageBox` with the exception information. The
+    optional parameter title gives the window bar a customized title. The
+    optional parameter msg allows you to give a customized message in the
+    dialog. Example::
+    
+        @ProtectTaurusMessgeBox(title="Error trying to turn the beam on")
+        def turnBeamOn(device_name):
+            d = taurus.Device(device_name)
+            d.TurnOn()
+    """
+    
+    def __init__(self, title=None, msg=None):
+        self._title = title
+        self._msg = msg
+    
+    def __call__(self, fn):
+        @functools.wraps(fn)
+        def wrapped(*args, **kwargs):
+            try:
+                return fn(*args, **kwargs)
+            except:
+                msgbox = _ProtectMessageBox(*sys.exc_info())
+                if msgbox is None: return
+                if self._title is not None:
+                    msgbox.setWindowTitle(self._title)
+                if self._msg is not None:
+                    msgbox.setText(self._msg)
+                msgbox.exec_()
+        return wrapped
+    
+
+class TaurusExceptHookMessageBox(BaseExceptHook):
+    """A callable class that acts as an excepthook that displays an unhandled
+    exception in a :class:`~taurus.qt.qtgui.dialog.TaurusMessageBox`.
+    
+    :param hook_to: callable excepthook that will be called at the end of
+                    this hook handling [default: None]
+    :type hook_to: callable
+    :param title: message box title [default: None meaning use exception value]
+    :type name: str
+    :param msg: message box text [default: None meaning use exception]"""
+    
+    MSG_BOX = None
+    
+    def __init__(self, hook_to=None, title=None, msg=None):
+        BaseExceptHook.__init__(self, hook_to=hook_to)
+        self._title = title
+        self._msg = msg
+
+    def _getMessageBox(self, err_type=None, err_value=None, err_traceback=None,
+                       parent=None):
+        box = self.__class__.MSG_BOX
+        
+        if box is None:
+            self.__class__.MSG_BOX = box = TaurusMessageBox(err_type=err_type,
+                err_value=err_value, err_traceback=err_traceback, parent=parent)
+            box.panel().setCheckBoxVisible(True)
+        else:
+            box.setError(err_type=err_type, err_value=err_value,
+                         err_traceback=err_traceback)
+        if box.panel().checkBoxState() == Qt.Qt.Checked:
+            return
+        return box
+
+    def report(self, *exc_info):
+        app = Qt.QApplication.instance()
+        if app is None:
+            import taurus.core.util
+            taurus.core.util.LogExceptHook().report(*exc_info)
+            return
+        msgbox = self._getMessageBox(*exc_info)
+        if msgbox is None:
+            return
+        if self._title is not None:
+            msgbox.setWindowTitle(self._title)
+        if self._msg is not None:
+            msgbox.setText(self._msg)
+        msgbox.exec_()
+
 class DemoException(Exception):
     pass
 
@@ -162,7 +326,8 @@ def tg_exc():
     import sys
     import PyTango
     try:
-        PyTango.Except.throw_exception('TangoException', 'A simple tango exception', 'right here')
+        PyTango.Except.throw_exception('TangoException',
+                                       'A simple tango exception', 'right here')
     except PyTango.DevFailed:
         msgbox = TaurusMessageBox(*sys.exc_info())
         msgbox.exec_()
@@ -185,7 +350,8 @@ def py_tg_serv_exc():
     import sys
     import PyTango
     try:
-        PyTango.Except.throw_exception('TangoException', 'A simple tango exception', 'right here')
+        PyTango.Except.throw_exception('TangoException',
+                                       'A simple tango exception', 'right here')
     except PyTango.DevFailed, df1:
         try:
             import traceback, StringIO
@@ -193,7 +359,9 @@ def py_tg_serv_exc():
             traceback.print_stack(file=origin)
             origin.seek(0)
             origin = origin.read()
-            PyTango.Except.re_throw_exception(df1, 'PyDs_Exception', 'DevFailed: A simple tango exception', origin)
+            PyTango.Except.re_throw_exception(df1, 'PyDs_Exception',
+                                              'DevFailed: A simple tango '
+                                              'exception', origin)
         except PyTango.DevFailed:
             msgbox = TaurusMessageBox(*sys.exc_info())
             msgbox.exec_()
diff --git a/lib/taurus/qt/qtgui/display/__init__.py b/lib/taurus/qt/qtgui/display/__init__.py
index b64eeb8..1b180ac 100644
--- a/lib/taurus/qt/qtgui/display/__init__.py
+++ b/lib/taurus/qt/qtgui/display/__init__.py
@@ -29,6 +29,7 @@ Examples of widgets that suite this rule are labels, leds and LCDs"""
 
 __docformat__ = 'restructuredtext'
 
+from .qfallback import *
 from .qpixmapwidget import *
 from .qled import *
 from .qlogo import *
diff --git a/lib/taurus/qt/qtgui/display/demo/qpixmapwidgetdemo.py b/lib/taurus/qt/qtgui/display/demo/qpixmapwidgetdemo.py
index 59f9102..16e7a9f 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 PyQt4 import Qt
+from taurus.qt import Qt
 
 def demo():
     import sys
diff --git a/lib/taurus/qt/qtgui/display/demo/tauruslabeldemo.py b/lib/taurus/qt/qtgui/display/demo/tauruslabeldemo.py
index acdb032..38f309e 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 PyQt4 import Qt
+from taurus.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 3e6c355..2adf0c2 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 PyQt4 import Qt
+from taurus.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 426ef1d..8c4e5aa 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 PyQt4 import Qt
+from taurus.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
new file mode 100644
index 0000000..87bd3ff
--- /dev/null
+++ b/lib/taurus/qt/qtgui/display/qfallback.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/>.
+##
+#############################################################################
+
+"""A pure Qt widget designed to be displayed when a real widget cannot be
+loaded for any reason (example: a dependency library is not installed)"""
+
+__all__ = ["create_fallback", "QFallBackWidget"]
+
+__docformat__ = 'restructuredtext'
+
+import sys
+import functools
+from taurus.qt import Qt
+
+def create_fallback(widget_klass_name):
+    return functools.partial(QFallBackWidget, replaces=widget_klass_name,
+                             exc_info=sys.exc_info())
+
+
+class QFallBackWidget(Qt.QWidget):
+    """A FallBack widget to be used when a real widget cannot be loaded for any
+    reason (example: a dependency library is not installed)"""
+    
+    def __init__(self, replaces="UnknownWidget", parent=None, *args, **kwargs):
+        Qt.QWidget.__init__(self, parent)
+        self.replaces = replaces
+        self.exc_info = exc_info = kwargs.get("exc_info")
+        layout = Qt.QVBoxLayout(self)
+        layout.setMargin(2)
+        layout.setSpacing(2)
+        self.setLayout(layout)
+        self.label = Qt.QLabel(self)
+        self.label.setText("'{0}' could not be displayed".format(replaces))
+        layout.addWidget(self.label, 0, Qt.Qt.AlignVCenter)
+        if exc_info is not None and exc_info[0] is not None:
+            self.details_button = Qt.QPushButton("Details...", self)
+            layout.addWidget(self.details_button, 0, Qt.Qt.AlignTop)
+            Qt.QObject.connect(self.details_button, Qt.SIGNAL("clicked()"),
+                               self.onShowDetails)
+        layout.addStretch(1)
+        
+    def onShowDetails(self):
+        import taurus.qt.qtgui.dialog
+        msgbox = taurus.qt.qtgui.dialog.TaurusMessageBox(*self.exc_info, parent=self)
+        msgbox.setWindowTitle("{0} Error".format(self.replaces))
+        msgbox.setText(self.label.text())
+        msgbox.exec_()
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/display/qled.py b/lib/taurus/qt/qtgui/display/qled.py
index d8f0b77..448ed43 100644
--- a/lib/taurus/qt/qtgui/display/qled.py
+++ b/lib/taurus/qt/qtgui/display/qled.py
@@ -30,15 +30,15 @@ __all__ = ["LedColor", "LedStatus", "LedSize", "QLed", "QLedOld"]
 __docformat__ = 'restructuredtext'
 
 import sys
-from PyQt4 import Qt
 
+from taurus.qt import Qt
 import taurus.core.util
 import taurus.qt.qtgui.resource
 import qpixmapwidget
 
 getPixmap = taurus.qt.qtgui.resource.getPixmap
 
-LedColor  = taurus.core.util.Enumeration("LedColor",  ["BLUE", "GREEN", "RED", "YELLOW", "ORANGE", "MAGENTA", "GRENOBLE", "BLACK"])
+LedColor  = taurus.core.util.Enumeration("LedColor",  ["BLUE", "GREEN", "RED", "YELLOW", "ORANGE", "MAGENTA", "GRENOBLE", "BLACK", "WHITE"])
 LedStatus = taurus.core.util.Enumeration("LedStatus", ["ON", "OFF"])
 LedSize   = taurus.core.util.Enumeration("LedSize",   [("SMALL", 24), ("LARGE", 48)])
 
diff --git a/lib/taurus/qt/qtgui/display/qlogo.py b/lib/taurus/qt/qtgui/display/qlogo.py
index b6a8603..15a3ebd 100644
--- a/lib/taurus/qt/qtgui/display/qlogo.py
+++ b/lib/taurus/qt/qtgui/display/qlogo.py
@@ -31,8 +31,7 @@ __all__ = ["QLogo"]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
-
+from taurus.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 791e348..90d4c91 100644
--- a/lib/taurus/qt/qtgui/display/qpixmapwidget.py
+++ b/lib/taurus/qt/qtgui/display/qpixmapwidget.py
@@ -29,8 +29,7 @@ __all__ = ["QPixmapWidget"]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
-
+from taurus.qt import Qt
 import taurus.qt.qtgui.resource
 
 getPixmap = taurus.qt.qtgui.resource.getPixmap
@@ -41,7 +40,7 @@ class QPixmapWidget(Qt.QWidget):
     The default alignment of the pixmap inside the widget space is horizontal
     left, vertical center."""
     
-    DefaultAlignment          = Qt.Qt.AlignRight | Qt.Qt.AlignVCenter
+    DefaultAlignment          = Qt.Qt.AlignLeft | Qt.Qt.AlignVCenter
     DefaultAspectRatioMode    = Qt.Qt.KeepAspectRatio
     DefaultTransformationMode = Qt.Qt.SmoothTransformation
     
diff --git a/lib/taurus/qt/qtgui/display/qsevensegment.py b/lib/taurus/qt/qtgui/display/qsevensegment.py
index 2c14f63..19e34ec 100644
--- a/lib/taurus/qt/qtgui/display/qsevensegment.py
+++ b/lib/taurus/qt/qtgui/display/qsevensegment.py
@@ -34,7 +34,7 @@ __docformat__ = 'restructuredtext'
 import os
 import math
 
-from PyQt4 import Qt
+from taurus.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 05a2225..5c577ff 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 PyQt4 import Qt
+from taurus.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 5a983c0..b50fa1a 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 PyQt4 import Qt
+from taurus.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 adf239f..fe265a9 100644
--- a/lib/taurus/qt/qtgui/display/tauruslabel.py
+++ b/lib/taurus/qt/qtgui/display/tauruslabel.py
@@ -35,8 +35,7 @@ import operator
 # shame of me for importing PyTango!
 import PyTango
 
-from PyQt4 import Qt
-
+from taurus.qt import Qt
 import taurus.core.util
 from taurus.qt.qtgui.util import QT_ATTRIBUTE_QUALITY_PALETTE, QT_DEVICE_STATE_PALETTE
 from taurus.qt.qtgui.base import TaurusBaseWidget
@@ -106,18 +105,22 @@ class TaurusLabelController(TaurusBaseController):
             label.setText("undef")
             return
         
-        self._text = label.prefixText + value + label.suffixText
-        label.setText(self._text)
+        self._text = text = label.prefixText + value + label.suffixText
 
         # Checks that the display fits in the widget and sets it to "..." if
         # it does not fit the widget
-        self._trimmedText = self._shouldTrim(label, self._text)
+        self._trimmedText = self._shouldTrim(label, text)
         if self._trimmedText:
-            label.setText("<a href='...'>...</a>")
+            text = "<a href='...'>...</a>"
+
+        label.setText(text)
+
     
     def _shouldTrim(self, label, text):
-        pointsPerChar = label.font().pointSize()
-        size, textSize = label.size(), len(text)*pointsPerChar
+        if not label.autoTrim:
+            return False
+        font_metrics = Qt.QFontMetrics(label.font())
+        size, textSize = label.size().width(), font_metrics.width(text)
         return textSize > size
 
     def _updateToolTip(self, label):
@@ -205,8 +208,8 @@ class TaurusLabelControllerConfigurationDesignMode(TaurusLabelControllerDesignMo
 
 
 _CONTROLLER_MAP = {
-                         None : TaurusLabelController,
-      TaurusModelType.Unknown : TaurusLabelController,
+                         None : None,
+      TaurusModelType.Unknown : None,
     TaurusModelType.Attribute : TaurusLabelControllerAttribute,
 TaurusModelType.Configuration : TaurusLabelControllerConfiguration,
 }
@@ -227,13 +230,15 @@ class TaurusLabel(Qt.QLabel, TaurusBaseWidget):
     DefaultFgRole = 'value'
     DefaultShowText = True
     DefaultModelIndex = None
-    
+    DefaultAutoTrim = True
+
     def __init__(self, parent=None, designMode=False):
         self._prefix = self.DefaultPrefix
         self._suffix = self.DefaultSuffix
         self._bgRole = self.DefaultBgRole
         self._fgRole = self.DefaultFgRole
         self._modelIndex = self.DefaultModelIndex
+        self._autoTrim = self.DefaultAutoTrim
         self._modelIndexStr = ''
         self._controller = None
         name = self.__class__.__name__
@@ -246,7 +251,7 @@ class TaurusLabel(Qt.QLabel, TaurusBaseWidget):
         # if we are in design mode there will be no events so we force the
         # creation of a controller object 
         if self._designMode:
-            self.controller().update()
+            self.controllerUpdate()
 
     def _calculate_controller_class(self):
         map = _CONTROLLER_MAP
@@ -265,19 +270,31 @@ class TaurusLabel(Qt.QLabel, TaurusBaseWidget):
         
         # if there is a controller object and it is still the same class...
         ctrl_klass = self._calculate_controller_class()
-        if ctrl is not None and ctrl.__class__ == ctrl_klass:
+        if ctrl_klass is None:
+            return None
+        elif ctrl.__class__ == ctrl_klass:
             return ctrl
     
         self._controller = ctrl = ctrl_klass(self)
         return ctrl
 
+    def controllerUpdate(self):
+        ctrl = self.controller()
+        if ctrl is not None:
+            ctrl.update()
+    
     def showValueDialog(self, *args):
-        self.controller().showValueDialog(self)
+        ctrl = self.controller()
+        if ctrl is not None:
+            ctrl.showValueDialog(self)
 
     def resizeEvent(self,event):
-        # recheck the display every time we resize to make sure the text should
-        # become trimmed or not
-        self.controller().update()
+    #    # recheck the display every time we resize to make sure the text should
+    #    # become trimmed or not
+        if not getattr(self, '_inResize', False):
+            self._inResize = True
+            self.controllerUpdate()
+            self._inResize = False
         Qt.QLabel.resizeEvent(self, event)
         
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
@@ -285,7 +302,9 @@ class TaurusLabel(Qt.QLabel, TaurusBaseWidget):
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
    
     def handleEvent(self, evt_src, evt_type, evt_value):
-        self.controller().handleEvent(evt_src, evt_type, evt_value)
+        ctrl = self.controller()
+        if ctrl is not None:
+            ctrl.handleEvent(evt_src, evt_type, evt_value)
     
     def isReadOnly(self):
         return True
@@ -320,7 +339,7 @@ class TaurusLabel(Qt.QLabel, TaurusBaseWidget):
                 return
             self._modelIndex = mi_value
         self._modelIndexStr = mi
-        self.controller().update()
+        self.controllerUpdate()
 
     def resetModelIndex(self):
         self.setModelIndex(self.DefaultModelIndex)
@@ -330,7 +349,7 @@ class TaurusLabel(Qt.QLabel, TaurusBaseWidget):
     
     def setBgRole(self, bgRole):
         self._bgRole = str(bgRole).lower()
-        self.controller().update()
+        self.controllerUpdate()
 
     def resetBgRole(self):
         self.setBgRole(self.DefaultBgRole)
@@ -340,7 +359,7 @@ class TaurusLabel(Qt.QLabel, TaurusBaseWidget):
     
     def setFgRole(self, fgRole):
         self._fgRole = str(fgRole).lower()
-        self.controller().update()
+        self.controllerUpdate()
 
     def resetFgRole(self):
         self.setFgRole(self.DefaultFgRole)
@@ -350,7 +369,7 @@ class TaurusLabel(Qt.QLabel, TaurusBaseWidget):
     
     def setPrefixText(self,prefix):
         self._prefix = str(prefix)
-        self.controller().update()
+        self.controllerUpdate()
 
     def resetPrefixText(self):
         self.setPrefixText(self.DefaultPrefix)
@@ -360,11 +379,21 @@ class TaurusLabel(Qt.QLabel, TaurusBaseWidget):
     
     def setSuffixText(self,suffix):
         self._suffix = str(suffix)
-        self.controller().update()
+        self.controllerUpdate()
     
     def resetSuffixText(self):
         self.setSuffixText(self.DefaultSuffix)
 
+    def setAutoTrim(self, trim):
+        self._autoTrim = trim
+        self.controllerUpdate()
+
+    def getAutoTrim(self):
+        return self._autoTrim
+
+    def resetAutoTrim(self):
+        self.setAutoTrim(self.DefaultAutoTrim)
+
     @classmethod
     def getQtDesignerPluginInfo(cls):
         d = TaurusBaseWidget.getQtDesignerPluginInfo()
@@ -434,7 +463,7 @@ class TaurusLabel(Qt.QLabel, TaurusBaseWidget):
     suffixText = Qt.pyqtProperty("QString", getSuffixText, setSuffixText,
                                  resetSuffixText, doc="suffix text")
 
-    #: This property holds the foreground role.
+    #: This property holds the foreground role (the text).
     #: Valid values are:
     #:  
     #:     #. ''/'None' - no value is displayed
@@ -462,6 +491,15 @@ class TaurusLabel(Qt.QLabel, TaurusBaseWidget):
     bgRole = Qt.pyqtProperty("QString", getBgRole, setBgRole,
                              resetBgRole, doc="background role")
 
+    #: This property holds the 
+    #:
+    #: **Access functions:**
+    #:
+    #:     * :meth:`TaurusLabel.getAutoTrim`
+    #:     * :meth:`TaurusLabel.setAutoTrim`
+    autoTrim = Qt.pyqtProperty("bool", getAutoTrim, setAutoTrim,
+                               resetAutoTrim, doc="auto trim text")
+
 def demo():
     "Label"
     import demo.tauruslabeldemo
@@ -506,4 +544,4 @@ def main():
 
 if __name__ == '__main__':
     main()
-    
\ No newline at end of file
+    
diff --git a/lib/taurus/qt/qtgui/display/tauruslcd.py b/lib/taurus/qt/qtgui/display/tauruslcd.py
index f10b3d9..e9b8a30 100644
--- a/lib/taurus/qt/qtgui/display/tauruslcd.py
+++ b/lib/taurus/qt/qtgui/display/tauruslcd.py
@@ -35,7 +35,7 @@ import operator
 # shame of me for importing PyTango!
 import PyTango
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 import taurus.core.util
 from taurus.qt.qtgui.util import QT_ATTRIBUTE_QUALITY_PALETTE, QT_DEVICE_STATE_PALETTE
diff --git a/lib/taurus/qt/qtgui/display/tauruslcdvalue.py b/lib/taurus/qt/qtgui/display/tauruslcdvalue.py
index 62c2126..b7af558 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 PyQt4 import Qt
+from taurus.qt import Qt
 
 import taurus.core
 from taurus.qt.qtgui.util import QT_ATTRIBUTE_QUALITY_PALETTE, QT_DEVICE_STATE_PALETTE
diff --git a/lib/taurus/qt/qtgui/display/taurusled.py b/lib/taurus/qt/qtgui/display/taurusled.py
index b54a7f8..7070ab5 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 PyQt4 import Qt
+from taurus.qt import Qt
 
 # Shame on me!!!!
 import PyTango
@@ -162,7 +162,7 @@ class _TaurusLedControllerState(_TaurusLedController):
     #                key      status,       color, inTrouble
     LedMap = {    State.ON : (   True,    "green",    False),
                  State.OFF : (  False,    "black",    False),
-               State.CLOSE : (   True,    "green",    False),
+               State.CLOSE : (   True,    "white",    False),
                 State.OPEN : (   True,    "green",    False),
               State.INSERT : (   True,    "green",    False),
              State.EXTRACT : (   True,    "green",    False),
diff --git a/lib/taurus/qt/qtgui/display/taurusstateled.py b/lib/taurus/qt/qtgui/display/taurusstateled.py
index 9e7072c..8ac82e0 100644
--- a/lib/taurus/qt/qtgui/display/taurusstateled.py
+++ b/lib/taurus/qt/qtgui/display/taurusstateled.py
@@ -30,11 +30,10 @@ __all__ = ["TaurusStateLed"]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
-
 # ugly
 import PyTango
 
+from taurus.qt import Qt
 import taurus.core.util
 from taurus.qt.qtgui.util import QT_ATTRIBUTE_QUALITY_PALETTE, QT_DEVICE_STATE_PALETTE
 from taurus.qt.qtgui.base import TaurusBaseWidget
diff --git a/lib/taurus/qt/qtgui/display/taurusvaluelabel.py b/lib/taurus/qt/qtgui/display/taurusvaluelabel.py
index e463cc7..71e0573 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 PyQt4 import Qt
+from taurus.qt import Qt
 
 import taurus.core
 from taurus.qt.qtgui.util import QT_ATTRIBUTE_QUALITY_PALETTE, QT_DEVICE_STATE_PALETTE
@@ -63,13 +63,13 @@ class TaurusValueLabel(Qt.QLabel, TaurusBaseWidget):
     Example::
     
         import sys
-        from PyQt4 import Qt
-        import taurus.qt.qtgui.display
+        from taurus.qt import Qt
+        from taurus.qt.qtgui.display import TaurusValueLabel
 
         app = Qt.QApplication(sys.argv)
 
-        w = taurus.qt.qtgui.display.TaurusValueLabel()
-        w.setModel('sys/taurustest/1/position')
+        w = TaurusValueLabel()
+        w.model = 'sys/taurustest/1/position'
 
         w.setVisible(True)
         sys.exit(app.exec_())
diff --git a/lib/taurus/qt/qtgui/extra_sardana/__init__.py b/lib/taurus/qt/qtgui/editor/__init__.py
similarity index 82%
copy from lib/taurus/qt/qtgui/extra_sardana/__init__.py
copy to lib/taurus/qt/qtgui/editor/__init__.py
index 0cd27bd..546779f 100644
--- a/lib/taurus/qt/qtgui/extra_sardana/__init__.py
+++ b/lib/taurus/qt/qtgui/editor/__init__.py
@@ -23,9 +23,12 @@
 ##
 #############################################################################
 
-"""This package contains a collection of taurus widgets designed to connect
-to sardana"""
+"""This package contains a collection of taurus text editor widgets"""
 
 __docformat__ = 'restructuredtext'
 
-from .sardanashell import *
\ No newline at end of file
+try:
+    from .tauruseditor import *
+except:
+    from taurus.qt.qtgui.display import create_fallback as __create
+    TaurusBaseEditor = __create("TaurusBaseEditor")
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/editor/tauruseditor.py b/lib/taurus/qt/qtgui/editor/tauruseditor.py
new file mode 100644
index 0000000..26187e2
--- /dev/null
+++ b/lib/taurus/qt/qtgui/editor/tauruseditor.py
@@ -0,0 +1,244 @@
+#!/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__ = ["TaurusBaseEditor"]
+
+__docformat__ = 'restructuredtext'
+
+import sys
+import os
+
+from taurus.qt import Qt
+
+try:
+    import spyderlib
+    if int(spyderlib.__version__.split(".")[0]) < 2:
+        raise Exception("TaurusEditor needs spyderlib >= 2.1")
+except ImportError: 
+    raise Exception("TaurusEditor needs spyderlib >= 2.1")
+
+from spyderlib.utils.qthelpers import create_toolbutton
+from spyderlib.widgets.findreplace import FindReplace
+from spyderlib.widgets.editortools import OutlineExplorerWidget
+from spyderlib.widgets.editor import EditorMainWindow, EditorSplitter
+from taurus.qt.qtgui.util import ActionFactory
+
+class TaurusBaseEditor(Qt.QSplitter):
+    
+    def __init__(self, parent=None):
+        Qt.QSplitter.__init__(self, parent)
+                
+        self.editorstacks = []
+        self.editorwindows = []
+
+        self.menu_actions, self.io_actions = self.createMenuActions()
+
+        self.toolbar_list = None
+        self.menu_list = None
+
+        self.find_widget = FindReplace(self, enable_replace=True)
+        self.outlineexplorer = OutlineExplorerWidget(self, show_fullpath=False,
+                                                     show_all_files=False)
+        editor_widgets = Qt.QWidget(self)
+        editor_layout = Qt.QVBoxLayout()
+        editor_layout.setContentsMargins(0, 0, 0, 0)
+        editor_widgets.setLayout(editor_layout)
+        
+        editor_layout.addWidget(EditorSplitter(self, self, self.menu_actions,
+                                               first=True))
+        editor_layout.addWidget(self.find_widget)
+        
+        self.setContentsMargins(0, 0, 0, 0)
+        self.addWidget(editor_widgets)
+        self.addWidget(self.outlineexplorer)
+        
+        self.setStretchFactor(0, 1)
+        self.setStretchFactor(1, 0)
+
+        self.setup_window([], [])
+    
+    def editorStack(self):
+        return self.editorstacks[0]
+    
+    def createMenuActions(self):
+        return [], []
+    
+    def closeEvent(self, event):
+        for win in self.editorwindows[:]:
+            win.close()
+        event.accept()
+
+    def load(self, filename, goto=None):
+        editorstack = self.editorStack()
+        editor = editorstack.load(filename)
+        editorstack.analyze_script()
+        if goto is not None:
+            editor.go_to_line(goto)
+    
+    def reload(self, idx=None, filename=None, goto=None):
+        if idx is None:
+            idx = is_file_opened(filename)
+        if idx is not None:
+            editorstack = self.editorStack()
+            editorstack.reload(idx)
+            editorstack.analyze_script()
+            if goto is not None:
+                editorstack.set_current_filename(filename)
+                editorstack.data[idx].editor.go_to_line(goto)
+    
+    def set_current_filename(self, filename):
+        self.editorStack().set_current_filename(filename)
+    
+    def register_editorstack(self, editorstack):
+        self.editorstacks.append(editorstack)
+        if self.isAncestorOf(editorstack):
+            # editorstack is a child of the Editor plugin
+            editorstack.set_fullpath_sorting_enabled(True)
+            editorstack.set_closable( len(self.editorstacks) > 1 )
+            editorstack.set_outlineexplorer(self.outlineexplorer)
+            editorstack.set_find_widget(self.find_widget)
+            oe_btn = create_toolbutton(self)
+            oe_btn.setDefaultAction(self.outlineexplorer.visibility_action)
+            editorstack.add_corner_widgets_to_tabbar([5, oe_btn])
+        
+        editorstack.set_io_actions(*self.io_actions)
+        font = Qt.QFont("Monospace")
+        font.setPointSize(10)
+        editorstack.set_default_font(font, color_scheme='Spyder')
+        self.connect(editorstack, Qt.SIGNAL('close_file(int)'),
+                     self.close_file_in_all_editorstacks)
+        self.connect(editorstack, Qt.SIGNAL("create_new_window()"),
+                     self.create_new_window)
+        self.connect(editorstack, Qt.SIGNAL('plugin_load(QString)'),
+                     self.load)
+    
+    def unregister_editorstack(self, editorstack):
+        self.editorstacks.pop(self.editorstacks.index(editorstack))
+        
+    def clone_editorstack(self, editorstack):
+        editorstack.clone_from(self.editorStack())
+        
+    def setup_window(self, toolbar_list, menu_list):
+        self.toolbar_list = toolbar_list
+        self.menu_list = menu_list
+        
+    def create_new_window(self):
+        window = EditorMainWindow(self, self.menu_actions,
+                                  self.toolbar_list, self.menu_list,
+                                  show_fullpath=False, fullpath_sorting=True,
+                                  show_all_files=False, show_comments=True)
+        window.resize(self.size())
+        window.show()
+        self.register_editorwindow(window)
+        self.connect(window, Qt.SIGNAL("destroyed()"),
+                     lambda win=window: self.unregister_editorwindow(win))
+        
+    def register_editorwindow(self, window):
+        self.editorwindows.append(window)
+        
+    def unregister_editorwindow(self, window):
+        self.editorwindows.pop(self.editorwindows.index(window))
+    
+    def get_focus_widget(self):
+        pass
+
+    def close_file_in_all_editorstacks(self, index):
+        sender = self.sender()
+        for editorstack in self.editorstacks:
+            if editorstack is not sender:
+                editorstack.blockSignals(True)
+                editorstack.close_file(index)
+                editorstack.blockSignals(False)
+    
+    def register_widget_shortcuts(self, context, widget):
+        """Fake!"""
+        pass
+
+    def refresh_save_all_action(self):
+        pass
+
+from spyderlib.plugins.editor import Editor
+
+class TaurusBaseEditor2(Qt.QMainWindow):
+
+    def __init__(self, parent=None):
+        Qt.QMainWindow.__init__(self, parent)
+        
+        self._editor = Editor(self)
+        
+        self.setCentralWidget(self._editor)
+
+    def register_shortcut(self, qaction_or_qshortcut, context, name,
+                          default=None):
+        pass
+
+    def show_hide_project_explorer(self):
+        pass
+
+def demo():
+    test = TaurusBaseEditor()
+    test.resize(1000, 800)
+    test.load(__file__)
+    test.load("__init__.py")
+    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] <file names>"
+        app = Application(sys.argv, cmd_line_parser=parser, 
+                          app_name="Taurus text editor demo", app_version="1.0",
+                          org_domain="Taurus", org_name="Tango community")
+        
+    args = app.get_command_line_args()
+
+    if len(args) == 0:
+        w = demo()
+    else:
+        w = TaurusEditor()
+        w.resize(900,800)
+        for name in args:
+            w.load(name)
+    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/__init__.py b/lib/taurus/qt/qtgui/extra_guiqwt/__init__.py
similarity index 82%
copy from lib/taurus/qt/qtgui/extra_sardana/__init__.py
copy to lib/taurus/qt/qtgui/extra_guiqwt/__init__.py
index 0cd27bd..d913f6d 100644
--- a/lib/taurus/qt/qtgui/extra_sardana/__init__.py
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/__init__.py
@@ -23,9 +23,9 @@
 ##
 #############################################################################
 
-"""This package contains a collection of taurus widgets designed to connect
-to sardana"""
+"""This module provides the glue between taurus and guiqwt. It essentially provides taurus extensions to qwtgui"""
 
 __docformat__ = 'restructuredtext'
 
-from .sardanashell import *
\ No newline at end of file
+from .plot import TaurusImageDialog, TaurusCurveDialog, TaurusTrendDialog
+from .taurustrend2d import TaurusTrend2DDialog
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/builder.py b/lib/taurus/qt/qtgui/extra_guiqwt/builder.py
new file mode 100644
index 0000000..37deeab
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/builder.py
@@ -0,0 +1,171 @@
+#!/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/>.
+##
+#############################################################################
+
+"""Extension of :mod:`guiqwt.builder`"""
+
+__all__=["TaurusPlotItemBuilder", "make"]
+
+__docformat__ = 'restructuredtext'
+
+import guiqwt.builder
+
+from curve import TaurusCurveItem, TaurusTrendItem
+from image import TaurusImageItem, TaurusRGBImageItem
+from guiqwt.curve import CurveParam
+from guiqwt.image import ImageParam
+from guiqwt.config import _
+from guiqwt.baseplot import BasePlot
+import numpy
+
+
+class TaurusPlotItemBuilder(guiqwt.builder.PlotItemBuilder):
+    '''extension of :class:`guiqwt.builder.PlotItemBuilder` to provide tauruscurve and taurusimage items'''
+    def __init__(self, *args, **kwargs):
+        guiqwt.builder.PlotItemBuilder.__init__(self, *args, **kwargs)
+        
+    def set_curve_axes(self, *args, **kwargs):
+        #ugly hack: I need to redefine this here because it is a private method in PlotItemBuilder
+        guiqwt.builder.PlotItemBuilder._PlotItemBuilder__set_curve_axes(self, *args, **kwargs)
+        
+    def set_image_param(self, *args, **kwargs):
+        #ugly hack: I need to redefine this here because it is a private method in PlotItemBuilder
+        guiqwt.builder.PlotItemBuilder._PlotItemBuilder__set_image_param(self, *args, **kwargs)
+        
+    def set_param(self, *args, **kwargs):
+        #ugly hack: I need to redefine this here because it is a private method in PlotItemBuilder
+        guiqwt.builder.PlotItemBuilder._PlotItemBuilder__set_param(self, *args, **kwargs)
+        
+    def pcurve(self, x, y, param, xaxis="bottom", yaxis="left"):
+        """
+        Extension to meth:`guiqwt.builder.PlotItemBuilder.pcurve` to support x
+        and y being taurus attribute models instead of arrays, in which case, a
+        TaurusCurveItem is returned. This method is called from :meth:`curve`
+        
+        Usage: pcurve(x, y, param)
+        """
+        if x is None or numpy.isscalar(x) or numpy.isscalar(y):
+            curve = TaurusCurveItem(param)
+            curve.setModels(x,y)
+            curve.update_params()
+            self.set_curve_axes(curve, xaxis, yaxis)
+        else:     
+            curve = guiqwt.builder.PlotItemBuilder.pcurve(self, x, y, param, xaxis="bottom", yaxis="left")
+        return curve
+    
+    def image(self, taurusmodel=None, **kwargs):
+        """
+        Extension to meth:`guiqwt.builder.PlotItemBuilder.image` to support passing a 
+        'taurusmodel' as a keyword argument instead passing 'data' or 'filename'.
+        """
+        
+        if taurusmodel is None:
+            image = guiqwt.builder.PlotItemBuilder.image(self, **kwargs)
+        else:
+            title = kwargs.get('title', taurusmodel)
+            data = kwargs.get('data',None)
+            filename = kwargs.get('filename',None)
+            alpha_mask = kwargs.get('alpha_mask',None)
+            alpha = kwargs.get('alpha',None) 
+            background_color = kwargs.get('background_color',None)
+            colormap = kwargs.get('colormap',None)
+            xdata = kwargs.get('xdata',[None, None])
+            ydata = kwargs.get('ydata',[None, None])
+            pixel_size = kwargs.get('pixel_size',None)
+            interpolation = kwargs.get('interpolation','linear')
+            eliminate_outliers = kwargs.get('eliminate_outliers',None)
+            xformat = kwargs.get('xformat','%.1f')
+            yformat = kwargs.get('yformat','%.1f')
+            zformat = kwargs.get('zformat','%.1f')
+            forceRGB = kwargs.get('force_rgb', False)
+                     
+            assert isinstance(xdata, (tuple, list)) and len(xdata) == 2
+            assert isinstance(ydata, (tuple, list)) and len(ydata) == 2
+            assert filename is None
+            assert data is None
+            
+            param = ImageParam(title=_("Image"), icon='image.png')
+            
+            if pixel_size is None:
+                xmin, xmax = xdata
+                ymin, ymax = ydata
+            else:
+                attr = taurus.Attribute(taurusmodel)
+                valueobj = attr.read()
+                attrdata = getattr(valueobj, 'value', numpy.zeros((1,1))) 
+                xmin, xmax, ymin, ymax = self.compute_bounds(attrdata, pixel_size)
+                
+            self.set_image_param(param, title, alpha_mask, alpha, interpolation,
+                                   background=background_color,
+                                   colormap=colormap,
+                                   xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax,
+                                   xformat=xformat, yformat=yformat,
+                                   zformat=zformat)
+            if forceRGB:
+                image = TaurusRGBImageItem(param)
+            else:
+                image = TaurusImageItem(param)
+            image.setModel(taurusmodel)
+            if eliminate_outliers is not None:
+                image.set_lut_range(lut_range_threshold(image, 256, eliminate_outliers))
+                
+        return image
+    
+    def rgbimage(self, taurusmodel=None, **kwargs):
+        if taurusmodel is None:
+            image = guiqwt.builder.PlotItemBuilder.rgbimage(self, **kwargs)
+        else:
+            image = self.image(taurusmodel=taurusmodel, force_rgb=True, **kwargs)
+        return image
+            
+    
+    def ttrend(self, model, taurusparam =None, title=u"",
+              color=None, linestyle=None, linewidth=None,
+              marker=None, markersize=None, markerfacecolor=None,
+              markeredgecolor=None, shade=None, fitted=None,
+              curvestyle=None, curvetype=None, baseline=None):
+        """
+        Make a taurus trend item
+        
+        :return (TaurusTrendItem): 
+        """
+        curveparam = CurveParam(icon='curve.png')
+        if not title:
+            title = model
+        self.set_param(curveparam, title, color, linestyle, linewidth, marker,
+                         markersize, markerfacecolor, markeredgecolor,
+                         shade, fitted, curvestyle, curvetype, baseline)
+        
+        item = TaurusTrendItem(curveparam=curveparam, taurusparam = taurusparam)
+        item.setModel(model)
+        item.update_params()
+        return item
+    
+    
+
+#"make" is an instance of the builder (this mimics the structure of guiqwt.builder.make)
+make = TaurusPlotItemBuilder()
+     
+
+        
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/curve.py b/lib/taurus/qt/qtgui/extra_guiqwt/curve.py
new file mode 100644
index 0000000..8155726
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/curve.py
@@ -0,0 +1,353 @@
+#!/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/>.
+##
+#############################################################################
+
+"""Extension of :mod:`guiqwt.curve`"""
+
+__all__=["TaurusCurveItem"]
+
+from taurus.qt import Qt
+from taurus.qt.qtgui.base import TaurusBaseComponent
+import taurus
+from guiqwt.curve import CurveItem
+from taurus.qt.qtgui.extra_guiqwt.styles import TaurusCurveParam, TaurusTrendParam
+
+from taurus.core.util import ArrayBuffer
+import numpy
+
+        
+class TaurusCurveItem(CurveItem, TaurusBaseComponent):
+    '''A CurveItem that autoupdates its values & params when x or y components change'''
+    def __init__(self, curveparam=None, taurusparam=None):
+        CurveItem.__init__(self, curveparam=curveparam)
+        TaurusBaseComponent.__init__(self, self.__class__.__name__)
+        self._signalGen = Qt.QObject()
+        self._signalGen.connect(self._signalGen, Qt.SIGNAL('taurusEvent'), self.filterEvent) #I need to do this because I am not using the standard model attach mechanism
+        self._xcomp = None
+        self._ycomp = None
+        if taurusparam is None:
+            taurusparam = TaurusCurveParam()
+        self.taurusparam = taurusparam
+        
+
+    def getSignaller(self):
+        '''reimplemented from TaurusBaseComponent because TaurusCurveItem is 
+        not (and cannot be) a QObject'''
+        return self._signalGen  
+        
+    def setModels(self, x, y):
+        #create/get new components
+        if x is None:
+            newX = None
+        else:
+            newX = taurus.Attribute(x)
+        newY = taurus.Attribute(y)
+        
+        #stop listening to previous components (if they are not the same as the new)
+        if self._xcomp is not None and self._xcomp is not newX:
+            self._xcomp.removeListener(self)
+        self._xcomp = newX
+        if self._ycomp is not None and self._ycomp is not newY:
+            self._ycomp.removeListener(self)
+        self._ycomp = newY
+        
+        #start listening to new components
+        if self._xcomp is not None:
+            self._xcomp.addListener(self)
+        self._ycomp.addListener(self)
+        self.onCurveDataChanged()
+        self.taurusparam.xModel = x
+        self.taurusparam.yModel = y
+        
+    def getModels(self):
+        return self.taurusparam.xModel, self.taurusparam.yModel
+        
+    def handleEvent(self, evt_src, ect_type, evt_value):
+        if evt_value is None or getattr(evt_value,'value', None) is None:
+            self.debug('Ignoring event from %s'%repr(evt_src))
+            return
+        if evt_src is self._xcomp or evt_src is self._ycomp:
+            self.onCurveDataChanged()
+            self.getSignaller().emit(Qt.SIGNAL('dataChanged'))
+        
+    def onCurveDataChanged(self):
+        try: yvalue = self._ycomp.read().value
+        except: yvalue = None
+        
+        if yvalue is None:
+            return        
+        
+        try: xvalue = self._xcomp.read().value
+        except: xvalue = None
+        
+        if xvalue is None:
+            xvalue = numpy.arange(len(yvalue))
+        
+        self.setData(xvalue, yvalue)
+        p = self.plot()
+        if p is not None: 
+            p.replot()
+            
+    def get_item_parameters(self, itemparams):
+        CurveItem.get_item_parameters(self, itemparams)
+        itemparams.add("TaurusParam", self, self.taurusparam)
+        
+    def updateTaurusParams(self):
+        self.taurusparam.update_curve(self)
+
+    def set_item_parameters(self, itemparams):
+        CurveItem.set_item_parameters(self, itemparams)
+        self.updateTaurusParams()
+
+     
+class TaurusTrendItem(CurveItem, TaurusBaseComponent):
+    '''A CurveItem that listens to events from a Taurus scalar attribute and appends new values to it'''
+    def __init__(self, curveparam=None, taurusparam=None):
+        CurveItem.__init__(self, curveparam=curveparam)
+        TaurusBaseComponent.__init__(self, self.__class__.__name__)
+        self._signalGen = Qt.QObject()
+        
+        self.__xBuffer = None
+        self.__yBuffer = None
+        
+        self.__timeOffset = None
+
+        if taurusparam is None:
+            taurusparam = TaurusTrendParam()
+        self.taurusparam = taurusparam
+        self.updateTaurusParams()
+        
+
+    def getSignaller(self):
+        '''reimplemented from TaurusBaseComponent because TaurusCurveItem is 
+        not (and cannot be) a QObject'''
+        return self._signalGen  
+        
+    def setBufferSize(self, buffersize):
+        '''sets the size of the stack.
+        
+        :param buffersize: (int) size of the stack
+        '''
+        self.taurusparam.maxBufferSize = buffersize
+        try:
+            if self.__xBuffer is not None:
+                self.__xBuffer.setMaxSize(buffersize)
+            if self.__yBuffer is not None:
+                self.__yBuffer.setMaxSize(buffersize)
+        except ValueError:
+            self.info('buffer downsizing  requested. Current contents will be discarded')
+            self.__xBuffer = None
+            self.__yBuffer = None
+        
+    def setModel(self, model):
+        #do the standard stuff
+        TaurusBaseComponent.setModel(self, model)
+        #update the taurusparam
+        self.taurusparam.model=self.getModelName()
+        #... and fire a fake event for initialization
+        try:
+            value = self.getModelObj().read()
+            self.fireEvent(self, taurus.core.TaurusEventType.Change, value)
+        except:
+            pass
+
+    def handleEvent(self, evt_src, evt_type, evt_value):
+        if evt_value is None or getattr(evt_value,'value', None) is None:
+            self.debug('Ignoring event from %s'%repr(evt_src))
+            return
+        
+        plot = self.plot()
+            
+        #initialization\
+        if self.__xBuffer is None:
+            self.__xBuffer = ArrayBuffer(numpy.zeros(min(128,self.taurusparam.maxBufferSize), dtype='d'), maxSize=self.taurusparam.maxBufferSize )
+        if self.__yBuffer is None:
+            self.__yBuffer = ArrayBuffer(numpy.zeros(min(128,self.taurusparam.maxBufferSize), dtype='d'), maxSize=self.taurusparam.maxBufferSize )
+        
+        #update x values
+        if self.taurusparam.stackMode == 'datetime':
+            if self.__timeOffset is None:
+                self.__timeOffset = evt_value.time.totime()
+                if plot is not None:
+                    plot.set_axis_title('bottom', 'Time')
+                    plot.set_axis_unit('bottom', '')
+            self.__xBuffer.append(evt_value.time.totime())
+        
+        elif self.taurusparam.stackMode == 'deltatime':
+            try:
+                self.__xBuffer.append(evt_value.time.totime() - self.__timeOffset)
+            except TypeError: #this will happen if self.__timeOffset has not been initialized
+                self.__timeOffset = evt_value.time.totime()
+                self.__xBuffer.append(0)
+                if plot is not None:
+                    plot.set_axis_title('bottom', 'Time since %s'%evt_value.time.isoformat())
+                    plot.set_axis_unit('bottom', '')
+        else:  
+            try:
+                step = 1 # +numpy.random.randint(0,4) #for debugging we can put a variable step
+                self.__xBuffer.append(self.__xBuffer[-1]+step) 
+            except IndexError: #this will happen when the x buffer is empty
+                self.__xBuffer.append(0) 
+                if plot is not None:
+                    plot.set_axis_title('bottom', 'Event #')
+                    plot.set_axis_unit('bottom', '')
+        
+        #update y
+        self.__yBuffer.append(evt_value.value)
+        
+        #update the plot data
+        x,y = self.__xBuffer.contents(), self.__yBuffer.contents()
+        self.set_data(x,y)
+        
+        #signal data changed and replot
+        self.getSignaller().emit(Qt.SIGNAL('dataChanged'), self)
+        
+        if plot is not None:
+            value=x[-1]
+            axis = self.xAxis()
+            xmin, xmax = plot.get_axis_limits(axis)
+            if value>xmax or value<xmin:
+                self.getSignaller().emit(Qt.SIGNAL('scrollRequested'), plot, axis, value )
+            plot.replot()
+            
+    def get_item_parameters(self, itemparams):
+        CurveItem.get_item_parameters(self, itemparams)
+        itemparams.add("TaurusParam", self, self.taurusparam)
+        
+    def updateTaurusParams(self):
+        self.taurusparam.update_curve(self)
+
+    def set_item_parameters(self, itemparams):
+        CurveItem.set_item_parameters(self, itemparams)
+        self.updateTaurusParams()
+          
+          
+def taurusTrendMain():
+    from taurus.qt.qtgui.extra_guiqwt.builder import make
+    from taurus.qt.qtgui.application import TaurusApplication
+    from guiqwt.plot import CurveDialog
+    from guiqwt.tools import HRangeTool
+    import taurus.core.util.argparse
+    import sys
+    
+    parser = taurus.core.util.argparse.get_taurus_parser()
+    parser.set_usage("%prog [options] [<model1> [<model2>] ...]")
+    parser.set_description("a taurus application for plotting 1D data sets")
+    parser.add_option("-x", "--x-axis-mode", dest="x_axis_mode", default='d', metavar="t|d|e",
+                      help="interpret X values as timestamps (t), time deltas (d) or event numbers (e). Accepted values: t|d|e")    
+    parser.add_option("-b", "--buffer", dest="max_buffer_size", default='16384', 
+                      help="maximum number of values to be plotted (when reached, the oldest values will be discarded)")
+    parser.add_option("-a", "--use-archiving", action="store_true", dest="use_archiving", default=False)
+    parser.add_option("--demo", action="store_true", dest="demo", default=False, help="show a demo of the widget")
+    app = TaurusApplication(cmd_line_parser=parser, app_name="taurusplot2", app_version=taurus.Release.version)
+    args = app.get_command_line_args()
+    options = app.get_command_line_options()
+    
+    #check & process options
+    stackModeMap = dict(t='datetime', d='deltatime', e='event')  
+    if options.x_axis_mode.lower() not in stackModeMap:
+        parser.print_help(sys.stderr)
+        sys.exit(1)
+    
+    stackMode = stackModeMap[options.x_axis_mode.lower()]
+      
+    if options.demo:
+        args.append('eval://rand()')
+        
+    w = CurveDialog(edit=False, toolbar=True, wintitle="Taurus Trend")
+
+    #set archiving
+    if options.use_archiving:
+        raise NotImplementedError('Archiving support is not yet implemented')
+        w.setUseArchiving(True)
+    
+    w.add_tool(HRangeTool)
+    #w.add_tool(TaurusCurveChooserTool)
+    #w.add_tool(TimeAxisTool)
+    
+    if len(args) == 0:
+        parser.print_help(sys.stderr)
+        sys.exit(1)
+    
+    plot = w.get_plot()
+    for a in args:
+        item = TaurusTrendItem(stackMode=stackMode, buffersize=int(options.max_buffer_size))
+        plot.add_item(item)
+        item.setModel(a)  
+    
+    w.show()
+    sys.exit(app.exec_())  
+    
+
+def taurusCurveMain():
+    from taurus.qt.qtgui.extra_guiqwt.builder import make
+    from taurus.qt.qtgui.application import TaurusApplication
+    from guiqwt.plot import CurveDialog
+    from guiqwt.tools import HRangeTool
+    from taurus.qt.qtgui.extra_guiqwt.tools import TaurusCurveChooserTool, TimeAxisTool
+    import taurus.core.util.argparse
+    import sys
+    
+    parser = taurus.core.util.argparse.get_taurus_parser()
+    parser.set_usage("%prog [options] [<model1> [<model2>] ...]")
+    parser.set_description("a taurus application for plotting 1D data sets")
+    app = TaurusApplication(cmd_line_parser=parser, app_name="taurusplot2", app_version=taurus.Release.version)
+    args = app.get_command_line_args()
+    
+    win = CurveDialog(edit=False, toolbar=True, wintitle="TaurusPlot2",
+                      options=dict(title="", xlabel="xlabel", ylabel="ylabel"))
+    win.add_tool(HRangeTool)
+    win.add_tool(TaurusCurveChooserTool)
+    win.add_tool(TimeAxisTool)
+    
+    plot = win.get_plot()
+      
+    for a in args:
+        mx_my = a.split('|')
+        n = len(mx_my)
+        if n == 1: 
+            mx, my = None, mx_my[0]
+        elif n == 2:
+            mx, my = mx_my
+        else:
+            print "Invalid model: %s\n"%mx_my
+            parser.print_help(sys.stderr)
+            sys.exit(1)
+        #cycle colors
+        style = make.style.next()
+        color=style[0]
+        linestyle = style[1:]
+        plot.add_item(make.curve(mx,my, color=color, linestyle=linestyle, linewidth=2))
+        
+    win.get_itemlist_panel().show()
+    plot.set_items_readonly(False)
+    win.show()
+    win.exec_()    
+    
+    
+
+if __name__ == "__main__":
+#    test1()
+#    taurusCurveMain()    
+    taurusTrendMain() 
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/curvesmodel.py b/lib/taurus/qt/qtgui/extra_guiqwt/curvesmodel.py
new file mode 100644
index 0000000..393e21c
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/curvesmodel.py
@@ -0,0 +1,440 @@
+#!/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/>.
+##
+#############################################################################
+
+"""
+curvesmodel Model and view for new CurveItem configuration 
+"""
+__all__=['TaurusCurveItemTableModel','CurveItemConf', 'CurveItemConfDlg']
+#raise UnimplementedError('Under Construction!')
+
+import copy
+
+from taurus.qt import Qt
+from PyQt4 import Qwt5
+import taurus
+from taurus.core 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 guiqwt.styles import CurveParam, AxesParam, update_style_attr
+from taurus.qt.qtgui.extra_guiqwt.styles import TaurusCurveParam
+from guiqwt.builder import make
+
+
+AXIS_ID2NAME = {Qwt5.QwtPlot.yLeft:'left', Qwt5.QwtPlot.yRight:'right',
+                Qwt5.QwtPlot.xBottom:'bottom', Qwt5.QwtPlot.xTop:'top'}
+
+#set some named constants
+#columns:
+NUMCOLS = 3
+X, Y, TITLE = range(NUMCOLS)
+SRC_ROLE =  Qt.Qt.UserRole + 1
+
+class Component(object):
+    def __init__(self, src):
+        self.display = ''
+        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
+            return
+        src = str(src).strip()
+        #empty
+        if src == '':
+            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
+            return
+        #for tango attributes
+        try:
+            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
+            return
+        self.display, self.icon, self.ok = attr.getSimpleName(), getIcon(':/taurus.png'),True
+        
+        
+
+class CurveItemConf(object):
+    def __init__(self, taurusparam=None, curveparam=None, axesparam=None):
+        if taurusparam is None:
+            taurusparam = TaurusCurveParam()
+        self.taurusparam = taurusparam
+        if curveparam is None:
+            curveparam = CurveParam()
+            style = make.style.next() #cycle through colors and linestyles
+            update_style_attr(style, curveparam)
+            curveparam.line.width = 2
+        self.curveparam = curveparam
+        self.axesparam = axesparam
+        self.x = Component(taurusparam.xModel)
+        self.y = Component(taurusparam.yModel)
+        if not self.curveparam.label:
+            self.curveparam.label = taurusparam.xModel
+        
+    def __repr__(self):
+        ret = "CurveItemConf(xModel='%s', yModel='%s')"%(taurusparam.xModel, taurusparam.yModel)
+        return ret
+    
+    @staticmethod
+    def fromTaurusCurveItem(item):
+        plot = item.plot()
+        if plot is not None:
+            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). 
+        Raises ValueError if not possible'''
+        if isinstance(obj, CurveItemConf):
+            return copy.deepcopy(obj)
+        try: return CurveItemConf.fromTaurusCurveItem(obj)
+        except: raise
+        try: return CurveItemConf(*obj)
+        except: pass
+        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__()
+        self.ncolumns = NUMCOLS
+        self.curves = curves
+        
+    def dumpData(self):
+        return copy.deepcopy(self.curves)
+    
+    def rowCount(self,index=Qt.QModelIndex()):
+        return len(self.curves)
+    
+    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()
+        row = index.row()
+        column = index.column()
+        #Display Role
+        if role == Qt.Qt.DisplayRole:
+            if column == X: return Qt.QVariant(Qt.QString(self.curves[row].x.display))
+            elif column == Y: return Qt.QVariant(Qt.QString(self.curves[row].y.display))
+            elif column == TITLE: 
+                return Qt.QVariant(Qt.QString(self.curves[row].curveparam.label))
+            else: return Qt.QVariant()
+        elif role == Qt.Qt.DecorationRole:
+            if column == X: return Qt.QVariant(self.curves[row].x.icon)
+            elif column == Y: return Qt.QVariant(self.curves[row].y.icon)
+            else: return Qt.QVariant()
+        elif role == Qt.Qt.TextColorRole:
+            if column == X: Qt.QVariant(Qt.QColor(self.curves[row].x.ok and 'green' or 'red'))
+            elif column == Y: Qt.QVariant(Qt.QColor(self.curves[row].y.ok and 'green' or 'red'))
+            else: return Qt.QVariant()
+        elif role == SRC_ROLE:
+            if column == X: return Qt.QVariant(Qt.QString(self.curves[row].taurusparam.xModel))
+            elif column == Y: return Qt.QVariant(Qt.QString(self.curves[row].taurusparam.yModel))
+            else: return Qt.QVariant()
+        elif role == Qt.Qt.ToolTipRole:
+            if column == X: return Qt.QVariant(Qt.QString(self.curves[row].taurusparam.xModel))
+            elif column == Y: return Qt.QVariant(Qt.QString(self.curves[row].taurusparam.yModel))
+            else: return Qt.QVariant()
+        if role == Qt.Qt.EditRole:
+            if column == X: return Qt.QVariant(Qt.QString(self.curves[row].taurusparam.xModel))
+            elif column == Y: return Qt.QVariant(Qt.QString(self.curves[row].taurusparam.yModel))
+            elif column == TITLE: return Qt.QVariant(Qt.QString(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))
+        if role != Qt.Qt.DisplayRole:
+            return Qt.QVariant()
+        #So this is DisplayRole...
+        if orientation == Qt.Qt.Horizontal:
+            if section == X: return Qt.QVariant("X source")
+            elif section == Y: return Qt.QVariant("Y Source")
+            elif section == TITLE: return Qt.QVariant("Title")
+            return Qt.QVariant()
+        else:
+            return Qt.QVariant(Qt.QString.number(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)
+        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)
+                     
+    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 = str(value.toString())
+            if column == X: 
+                curve.taurusparam.xModel = value
+                curve.x.processSrc(value)
+            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)
+            return True
+        return False
+    
+    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)
+        slice = [CurveItemConf() for i in range(rows)]
+        self.curves = self.curves[:position]+slice+self.curves[position:]
+        self.endInsertRows()
+        return True
+        
+    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.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()
+            else: row = parent.rowCount()
+        if column == -1:
+            if parent.isValid(): column = parent.column()
+            else: column = parent.columnCount()
+        if data.hasFormat(TAURUS_ATTR_MIME_TYPE):
+            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), 
+                             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), 
+                                 value=Qt.QVariant(m))
+                return True
+        elif data.hasText():
+            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:
+#            mimedata.setData(TAURUS_ATTR_MIME_TYPE, str(self.data(indexes[0]).toString()))
+            mimedata.setText(self.data(indexes[0],role=SRC_ROLE).toString())
+        return mimedata
+        #mimedata.setData()
+    
+
+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)
+        
+        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')
+        except:
+            import taurus.core.util
+            _logger = taurus.core.util.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.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()
+#        for col in xrange(self.model.columnCount()):
+#            availableSpace -= table.columnWidth(col)
+#        if availableSpace > 0:
+#            extraSpace = availableSpace / self.model.columnCount()
+#            for col in xrange(self.model.columnCount()):
+#                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 ????
+        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)
+        
+        
+    def onTableContextMenu(self, pos):
+        index = self.ui.curvesTable.indexAt(pos)
+        row = index.row()
+        menu = Qt.QMenu(self.ui.curvesTable)
+        if row >= 0:
+            removeThisAction = menu.addAction(getThemeIcon('list-remove'), 'Remove this curve', self._onRemoveThisAction)
+        removeAllAction = menu.addAction(getThemeIcon('edit-clear'), 'Clear all', self.model.clearAll)
+        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:
+            c = self.model.curves[row]
+            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.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()))
+        
+        
+    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)
+    
+    def getCurveItemConfs(self):
+        return self.model.dumpData()
+    
+    @staticmethod
+    def showDlg(parent = None, curves=None):
+        '''Static method that launches a modal dialog containing a CurveItemConfDlg
+        
+        :param parent: (QObject) parent for the dialog 
+        
+        :return: (list,bool or QMimeData,bool) Returns a models,ok tuple. models can be 
+                 either a list of models or a QMimeData object, depending on
+                 `asMimeData`. ok is True if the dialog was accepted (by
+                 clicking on the "update" button) and False otherwise
+        '''
+        dlg = Qt.QDialog(parent)
+        dlg.setWindowTitle('Curves Selection')
+        layout = Qt.QVBoxLayout()
+        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.exec_()
+        return w.getCurveItemConfs(), (dlg.result() == dlg.Accepted)
+    
+    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()    
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/image.py b/lib/taurus/qt/qtgui/extra_guiqwt/image.py
new file mode 100644
index 0000000..56920ee
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/image.py
@@ -0,0 +1,440 @@
+#!/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/>.
+##
+#############################################################################
+
+"""
+Extension of :mod:`guiqwt.image`
+"""
+__all__=["TaurusImageItem","TaurusRGBImageItem","TaurusTrend2DItem","TaurusTrend2DScanItem"]
+
+from taurus.qt import Qt
+from taurus.qt.qtgui.base import TaurusBaseComponent
+import taurus.core
+from taurus.core.util import ArrayBuffer
+
+from guiqwt.image import ImageItem, RGBImageItem, XYImageItem, INTERP_NEAREST, INTERP_LINEAR
+
+import numpy
+
+class TaurusBaseImageItem(TaurusBaseComponent):
+    '''A ImageItem that gets its data from a taurus attribute'''
+    def __init__(self, classname):
+        TaurusBaseComponent.__init__(self, classname)
+        self._signalGen = Qt.QObject()
+
+    def getSignaller(self):
+        '''reimplemented from TaurusBaseComponent because TaurusImageItem is 
+        not (and cannot be) a QObject'''
+        return self._signalGen  
+    
+    def setModel(self, model):
+        #do the standard stuff
+        TaurusBaseComponent.setModel(self, model)
+        #... and fire a fake event for initialization
+        try:
+            value = self.getModelObj().read()
+            self.fireEvent(self, taurus.core.TaurusEventType.Change, value)
+        except:
+            pass
+
+    def handleEvent(self, evt_src, evt_type, evt_value):
+        if evt_value is None or getattr(evt_value,'value', None) is None:
+            self.debug('Ignoring event from %s'%repr(evt_src))
+            return
+        lut_range = self.get_lut_range() #this is the range of the z axis (color scale)
+        if lut_range[0] == lut_range[1]: lut_range = None #if the range was not set, make it None (autoscale z axis)
+        self.set_data(evt_value.value, 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()
+
+class TaurusImageItem(ImageItem, TaurusBaseImageItem):
+    '''A ImageItem that gets its data from a taurus attribute'''
+    def __init__(self, param=None):
+        ImageItem.__init__(self, numpy.zeros((1,1)), param=param)
+        TaurusBaseImageItem.__init__(self, self.__class__.__name__)
+
+class TaurusRGBImageItem(RGBImageItem, TaurusBaseImageItem):
+    '''A RGBImageItem that gets its data from a taurus attribute'''
+    def __init__(self, param=None):
+        RGBImageItem.__init__(self, numpy.zeros((1,1,3)), param=param)
+        TaurusBaseImageItem.__init__(self, self.__class__.__name__)
+        
+class TaurusTrend2DItem(XYImageItem, TaurusBaseComponent):
+    '''A XYImageItem that is constructed by stacking 1D arrays from events from a Taurus 1D attribute'''
+    def __init__(self, param=None, buffersize=512, stackMode='datetime'):
+        XYImageItem.__init__(self, numpy.arange(2), numpy.arange(2), numpy.zeros((2,2)), param=param)
+        TaurusBaseComponent.__init__(self, self.__class__.__name__)
+        self._signalGen = Qt.QObject()
+        self.maxBufferSize = buffersize
+        self._yValues = None
+        self._xBuffer = None
+        self._zBuffer = None
+        self.stackMode = stackMode
+        self.set_interpolation(INTERP_NEAREST)
+        self.__timeOffset = None
+
+    def getSignaller(self):
+        '''reimplemented from TaurusBaseComponent because TaurusImageItem is 
+        not (and cannot be) a QObject'''
+        return self._signalGen  
+    
+    def setBufferSize(self, buffersize):
+        '''sets the size of the stack
+        
+        :param buffersize: (int) size of the stack
+        '''
+        self.maxBufferSize = buffersize
+        try:
+            if self._xBuffer is not None:
+                self._xBuffer.setMaxSize(buffersize)
+            if self._zBuffer is not None:
+                self._zBuffer.setMaxSize(buffersize)
+        except ValueError:
+            self.info('buffer downsizing  requested. Current contents will be discarded')
+            self._xBuffer = None
+            self._zBuffer = None
+        
+    def setModel(self, model):
+        #do the standard stuff
+        TaurusBaseComponent.setModel(self, model)
+        #... and fire a fake event for initialization
+        try:
+            value = self.getModelObj().read()
+            self.fireEvent(self, taurus.core.TaurusEventType.Change, value)
+        except:
+            pass
+
+    def handleEvent(self, evt_src, evt_type, evt_value):
+        if evt_value is None or getattr(evt_value,'value', None) is None:
+            self.debug('Ignoring event from %s'%repr(evt_src))
+            return
+        
+        plot = self.plot()
+            
+        #initialization
+        ySize = len(evt_value.value)
+        if self._yValues is None:
+            self._yValues = numpy.arange(ySize,dtype='d')
+        if self._xBuffer is None:
+            self._xBuffer = ArrayBuffer(numpy.zeros(min(128,self.maxBufferSize), dtype='d'), maxSize=self.maxBufferSize )
+        if self._zBuffer is None:
+            self._zBuffer = ArrayBuffer(numpy.zeros((min(128,self.maxBufferSize), ySize),dtype='d'), maxSize=self.maxBufferSize )
+            return
+        
+        #check that new data is compatible with previous data    
+        if ySize != self._yValues.size:
+            self.info('Incompatible shape in data from event (orig=%i, current=%i). Ignoring'%(self._yValues.size, ySize))
+            return
+        
+        #update x values
+        if self.stackMode == 'datetime':
+            if self.__timeOffset is None:
+                self.__timeOffset = evt_value.time.totime()
+                plot.set_axis_title('bottom', 'Time')
+                plot.set_axis_unit('bottom', '')
+            self._xBuffer.append(evt_value.time.totime())
+        
+        elif self.stackMode == 'deltatime':
+            try:
+                self._xBuffer.append(evt_value.time.totime() - self.__timeOffset)
+            except TypeError: #this will happen if self.__timeOffset has not been initialized
+                self.__timeOffset = evt_value.time.totime()
+                self._xBuffer.append(0)
+                plot.set_axis_title('bottom', 'Time since %s'%evt_value.time.isoformat())
+                plot.set_axis_unit('bottom', '')
+        else:  
+            try:
+                step = 1 # +numpy.random.randint(0,4) #for debugging we can put a variable step
+                self._xBuffer.append(self._xBuffer[-1]+step) 
+            except IndexError: #this will happen when the x buffer is empty
+                self._xBuffer.append(0) 
+                plot.set_axis_title('bottom', 'Event #')
+                plot.set_axis_unit('bottom', '')
+        
+        #update z
+        self._zBuffer.append(evt_value.value)
+        
+        #check if there is enough data to start plotting
+        if len(self._xBuffer)<2:
+            self.info('waiting for at least 2 values to start plotting') 
+            return
+        
+        x = self._xBuffer.contents()
+        y = self._yValues
+        z = self._zBuffer.contents().transpose()
+        
+        if x.size == 2:
+            plot.set_axis_limits('left',y.min(), y.max())
+            xmax = x[0]+(x[1]-x[0])*self.maxBufferSize #guess the max of the scale allowed by the buffer
+            plot.set_axis_limits('bottom', x.min(), xmax)
+        
+        #update the plot data
+        lut_range = self.get_lut_range() #this is the range of the z axis (color scale)
+        if lut_range[0] == lut_range[1]: lut_range = None #if the range was not set, make it None (autoscale z axis)
+        self.set_data(z, lut_range=lut_range)
+        self.set_xy(x, y)
+        
+        #signal data changed and replot
+        self.getSignaller().emit(Qt.SIGNAL('dataChanged'))
+        
+        if plot is not None: 
+            value=x[-1]
+            axis = self.xAxis()
+            xmin, xmax = plot.get_axis_limits(axis)
+            if value>xmax or value<xmin:
+                self.getSignaller().emit(Qt.SIGNAL('scrollRequested'), plot, axis, value )
+            plot.update_colormap_axis(self)
+            plot.replot()
+            
+            
+class TaurusTrend2DScanItem(TaurusTrend2DItem):
+    _xDataKey = 'point_nb'
+    def __init__(self, channelKey, xDataKey, door, param=None, buffersize=512):
+        TaurusTrend2DItem.__init__(self, param=param, buffersize=buffersize, stackMode=None)
+        self._channelKey = channelKey
+        self._xDataKey = xDataKey
+        self.connectWithQDoor(door)
+    
+    def scanDataReceived(self, packet):
+        '''
+        packet is a dict with {type:str, "data":object} and the accepted types are: data_desc, record_data, record_end
+        and the data objects are: seq<ColumnDesc.Todict()>, record.data dict and dict , respectively
+        '''
+        if packet is None:
+            self.debug('Ignoring empty scan data packet')
+            return
+        id,packet = packet
+        pcktype = packet.get("type","__UNKNOWN_PCK_TYPE__")
+        if pcktype == "data_desc": 
+            self._dataDescReceived(packet["data"])
+        elif pcktype == "record_data": 
+            self._scanLineReceived(packet["data"])
+        elif pcktype == "record_end":
+            pass
+        else:
+            self.debug("Ignoring packet of type %s"%repr(pcktype))
+    
+    def clearTrend(self):
+        self._yValues = None
+        self._xBuffer = None
+        self._zBuffer = None
+
+    
+    def _dataDescReceived(self, datadesc):
+        '''prepares the plot according to the info in the datadesc dictionary'''
+        self.clearTrend()
+        #decide which data to use for x
+        if self._xDataKey is None or self._xDataKey == "<mov>":
+            self._autoXDataKey = datadesc['ref_moveables'][0]
+        elif self._xDataKey == "<idx>":
+            self._autoXDataKey = 'point_nb'
+        else:
+            self._autoXDataKey = self._xDataKey
+        #set the x axis
+        columndesc = datadesc.get('column_desc',[])
+        xinfo = {'min_value':None, 'max_value':None}
+        for e in columndesc:
+            if e['label'] == self._autoXDataKey:
+                xinfo = e
+                break
+        plot = self.plot()
+        plot.set_axis_title('bottom', self._autoXDataKey)
+        xmin, xmax = xinfo.get('min_value'), xinfo.get('max_value')
+        if xmin is None or xmax is None:
+            pass  #@todo: autoscale if any limit is unknown
+        else:
+            plot.set_axis_limits('bottom',xmin, xmax)
+            
+
+    
+    def _scanLineReceived(self, recordData):
+        '''Receives a recordData dictionary and updates the curves associated to it
+        
+        .. seealso:: <Sardana>/MacroServer/scan/scandata.py:Record.data
+        
+        '''
+        #obtain the x value
+        try:
+            xval = recordData[self._autoXDataKey]
+        except KeyError:
+            self.warning('Cannot find data "%s" in the current scan record. Ignoring',self._autoXDataKey)
+            return
+        if not numpy.isscalar(xval):
+            self.warning('Data for "%s" is of type "%s". Cannot use it for the X values. Ignoring',self._autoXDataKey, type(xval))
+            return
+        #obtain y value
+        try:
+            chval = recordData[self._channelKey]
+        except KeyError:
+            self.warning('Cannot find data "%s" in the current scan record. Ignoring',self._channelKey)
+        if yval.shape !=  self._yValues.shape:
+            self.warning('Incompatible shape of "%s" (%s). Ignoring',self._channelKey, repr(yval.shape))
+            return
+          
+        #initialization
+        if self._yValues is None:
+            self._yValues = numpy.arange(chval.size,dtype='d')
+        if self._xBuffer is None:
+            self._xBuffer = ArrayBuffer(numpy.zeros(min(16,self.maxBufferSize), dtype='d'), maxSize=self.maxBufferSize )
+        if self._zBuffer is None:
+            self._zBuffer = ArrayBuffer(numpy.zeros((min(16,self.maxBufferSize), chval.size),dtype='d'), maxSize=self.maxBufferSize )
+        
+        #update x           
+        self._xBuffer.append(xval) 
+        #update z
+        self._zBuffer.append(chval)
+        
+        #check if there is enough data to start plotting
+        if len(self._xBuffer)<2:
+            self.info('waiting for at least 2 values to start plotting') 
+            return
+        
+        x = self._xBuffer.contents()
+        y = self._yValues
+        z = self._zBuffer.contents().transpose()
+        
+        #update the plot data
+        lut_range = self.get_lut_range() #this is the range of the z axis (color scale)
+        if lut_range[0] == lut_range[1]: lut_range = None #if the range was not set, make it None (autoscale z axis)
+        self.set_data(z, lut_range=lut_range)
+        self.set_xy(x, y)
+        
+        #signal data changed and replot
+        self.getSignaller().emit(Qt.SIGNAL('dataChanged'))
+        plot = self.plot()
+        if plot is not None: 
+            value=x[-1]
+            axis = self.xAxis()
+            xmin, xmax = plot.get_axis_limits(axis)
+            if value>xmax or value<xmin:
+                self.getSignaller().emit(Qt.SIGNAL('scrollRequested'), plot, axis, value )
+            plot.update_colormap_axis(self)
+            plot.replot()
+                  
+    def connectWithQDoor(self, doorname):
+        '''connects this TaurusTrend2DScanItem to a QDoor
+        
+        :param doorname: (str) the QDoor name
+        '''
+        qdoor = taurus.Device(doorname)
+        qdoor.connect(qdoor, Qt.SIGNAL("recordDataUpdated"), self.scanDataReceived)
+            
+    def getModel(self):
+        return self.__model 
+    
+    def setModel(self, model):
+        self.__model = model
+        
+        
+
+
+def taurusImageMain():
+    from guiqwt.tools import (RectangleTool, EllipseTool, HRangeTool, PlaceAxesTool,
+                          MultiLineTool, FreeFormTool, SegmentTool, CircleTool,
+                          AnnotatedRectangleTool, AnnotatedEllipseTool,
+                          AnnotatedSegmentTool, AnnotatedCircleTool, LabelTool,
+                          AnnotatedPointTool, ObliqueRectangleTool, 
+                          AnnotatedObliqueRectangleTool)
+    try: #In newer guiqwt versions, Annotated*CursorTool have been replaced by *CursorTool
+        from guiqwt.tools import AnnotatedVCursorTool, AnnotatedHCursorTool
+        VCursorTool, HCursorTool = AnnotatedVCursorTool, AnnotatedHCursorTool
+    except ImportError:
+        from guiqwt.tools import VCursorTool, HCursorTool 
+        
+    from taurus.qt.qtgui.extra_guiqwt.tools import TaurusImageChooserTool
+    from guiqwt.plot import ImageDialog
+    from taurus.qt.qtgui.extra_guiqwt.builder import make
+    from taurus.qt.qtgui.application import TaurusApplication
+    import taurus.core.util.argparse
+    import sys
+    
+    parser = taurus.core.util.argparse.get_taurus_parser()
+    parser.set_usage("%prog [options] [<model1> [<model2>] ...]")
+    parser.set_description("a taurus application for plotting 2D data sets")
+    app = TaurusApplication(cmd_line_parser=parser, app_name="taurusimage", app_version=taurus.Release.version)
+    args = app.get_command_line_args()
+    
+    #create a dialog with a plot and add the images
+    win = ImageDialog(edit=False, toolbar=True, wintitle="Taurus Image",
+                      options=dict(show_xsection=False, show_ysection=False))
+    
+    #add tools
+    for toolklass in (TaurusImageChooserTool,
+                      LabelTool, HRangeTool, 
+                      MultiLineTool, FreeFormTool, PlaceAxesTool,
+                      AnnotatedObliqueRectangleTool,
+                      AnnotatedEllipseTool, AnnotatedSegmentTool,
+                      AnnotatedPointTool, VCursorTool,
+                      HCursorTool):
+        win.add_tool(toolklass)
+    
+    #add images from given models
+    plot = win.get_plot()
+    for m in args:
+        img = make.image(taurusmodel= m)
+        plot.add_item(img)
+        win.connect(img.getSignaller(), Qt.SIGNAL("dataChanged"), win.update_cross_sections) #IMPORTANT: connect the cross section plots to the taurusimage so that they are updated when the taurus data changes
+        
+    win.exec_()
+
+def test1():
+    """Adapted from guiqwt cross_section.py example"""
+    from guiqwt.plot import ImageDialog
+    from taurus.qt.qtgui.extra_guiqwt.builder import make
+    from taurus.qt.qtgui.application import TaurusApplication
+    app = TaurusApplication()
+        
+    #define a taurus image
+    model1 = 'sys/tg_test/1/short_image_ro'
+    taurusimage = make.image(taurusmodel= model1)
+    taurusrgbimage = make.rgbimage(taurusmodel= 'eval://array([[[ 222, 0, 0], [0, 222, 0]], [[0, 0, 222], [222, 222, 222]]])')
+    
+    #define normal image (guiqwt standard)
+    data = numpy.random.rand(100,100)
+    image = make.image(data=data)
+    
+    #create a dialog with a plot and add the images
+    win = ImageDialog(edit=False, toolbar=True, wintitle="Taurus Cross sections test",
+                      options=dict(show_xsection=False, show_ysection=False))
+    from taurus.qt.qtgui.extra_guiqwt.tools import TaurusImageChooserTool
+    win.add_tool(TaurusImageChooserTool)
+    plot = win.get_plot()
+    plot.add_item(taurusimage)
+    plot.add_item(image)
+    plot.add_item(taurusrgbimage)
+#    win.get_itemlist_panel().show()
+    
+    #IMPORTANT: connect the cross section plots to the taurusimage so that they are updated when the taurus data changes
+    win.connect(taurusimage.getSignaller(), Qt.SIGNAL("dataChanged"), win.update_cross_sections)
+    
+    win.exec_()
+
+
+if __name__ == "__main__":
+    #test1()
+    taurusImageMain()   
+
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/plot.py b/lib/taurus/qt/qtgui/extra_guiqwt/plot.py
new file mode 100644
index 0000000..894246c
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/plot.py
@@ -0,0 +1,577 @@
+#!/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/>.
+##
+#############################################################################
+
+"""
+Extension of :mod:`guiqwt.plot`
+"""
+__all__=["TaurusCurveDialog", "TaurusTrendDialog", "TaurusImageDialog"]
+
+from taurus.qt import Qt
+from guiqwt.plot import ImageDialog, CurveDialog
+
+import copy
+import taurus.core
+from guiqwt.curve import CurveParam
+from taurus.core.util import CaselessList
+from taurus.qt.qtgui.base import TaurusBaseWidget
+from taurus.qt.qtcore.mimetypes import TAURUS_MODEL_LIST_MIME_TYPE, TAURUS_ATTR_MIME_TYPE
+from taurus.qt.qtgui.extra_guiqwt.builder import make
+from taurus.qt.qtgui.extra_guiqwt.curve import TaurusCurveItem, TaurusTrendParam, TaurusTrendItem
+
+class TaurusCurveDialog(CurveDialog, TaurusBaseWidget):
+    '''A taurus dialog for showing 1D data.
+    It behaves as a regular :class:`guiqwt.plot.CurveDialog` but it also offers
+    the expected Taurus interface (e.g. setting models, save/apply configs,
+    drag&drops,...)
+    
+    .. seealso:: :class:`TaurusCurveWidget`
+    '''
+    def __init__(self, parent=None, designMode=False, toolbar=True, **kwargs):
+        '''see :class:`guiqwt.plot.CurveDialog` for other valid initialization parameters'''
+        CurveDialog.__init__(self, parent=parent, toolbar=toolbar, **kwargs)
+        TaurusBaseWidget.__init__(self, 'TaurusCurveDialog')
+        self.setWindowFlags(Qt.Qt.Widget)
+        self._designMode = designMode
+        self._modelNames = CaselessList()
+        from guiqwt.styles import style_generator
+        self.style = style_generator()
+        self.setSupportedMimeTypes([TAURUS_MODEL_LIST_MIME_TYPE, TAURUS_ATTR_MIME_TYPE])
+        from taurus.qt.qtgui.extra_guiqwt.tools import TaurusCurveChooserTool
+        self.add_tool(TaurusCurveChooserTool)
+        self.setModifiableByUser(True)
+  
+    def getModelClass(self):
+        '''reimplemented from :class:`TaurusBaseWidget`'''
+        return taurus.core.TaurusAttribute
+    
+    def _splitModel(self, modelNames):
+        '''convert str to list if needed (commas and whitespace are considered as separators)'''
+        if isinstance(modelNames,(basestring,Qt.QString)): 
+            modelNames = str(modelNames).replace(',',' ')
+            modelNames = modelNames.split()
+        return modelNames
+    
+    @Qt.pyqtSignature("setModel(QStringList)")
+    def setModel(self, modelNames):
+        '''Removes current TaurusCurveItems and adds new ones.
+
+        :param modelNames: (sequence<str> or str) the names of the models to be
+                           plotted. For convenience, a string is also accepted
+                           (instead of a sequence of strings), in which case the
+                           string will be internally converted to a sequence by
+                           splitting it on whitespace and commas. Each model can
+                           optionally be composed of two parts, separated by "|"
+                           indicating X and Y components for the curve. If only
+                           one part is given, it is used for Y and X is
+                           automatically generated as an index.
+
+        .. seealso:: :meth:`addModels`
+        '''
+        
+        plot = self.get_plot()
+        #delete current TaurusCurveItems
+        taurusCurveItems = [item for item in plot.get_public_items() if isinstance(item, TaurusCurveItem)]
+        plot.del_items(taurusCurveItems)
+        self._modelNames = CaselessList()
+        #add new TaurusCurveItems
+        self.addModels(modelNames)
+        
+    def addModels(self, modelNames):
+        '''Creates TaurusCurveItems (one for each model in modelNames) and attaches 
+        them to the plot.
+        
+        .. note:: you can also add curves using :meth:`add_items`. :meth:`addModels` 
+                  is only a more Taurus-oriented interface. :meth:`add_items`
+                  gives you more control.
+
+        :param modelNames: (sequence<str> or str) the names of the models to be
+                           plotted. For convenience, string is also accepted
+                           (instead of a sequence of strings), in which case the
+                           string will be internally converted to a sequence by
+                           splitting it on whitespace and commas. Each model can
+                           optionally be composed of two parts, separated by "|"
+                           indicating X and Y components for the curve. If only
+                           one part is given, it is used for Y and X is
+                           automatically generated as an index.
+
+        .. seealso:: :meth:`add_item`
+        '''
+        plot = self.get_plot()
+         
+        #pre-process the model names
+        modelNames = self._splitModel(modelNames)
+        self._modelNames.extend([str(n) for n in modelNames])
+        if self._designMode:
+            return
+        #create and attach new TaurusCurveItems
+        for m in modelNames:
+            #split model into x and y components
+            mx_my = m.split('|')
+            n = len(mx_my)
+            if n == 1: 
+                mx, my = None, mx_my[0]
+            elif n == 2:
+                mx, my = mx_my
+            else:
+                self.warning('Invalid model "%s" (Skipping)'%mx_my)
+            #cycle styles
+            style = self.style.next()
+            color=style[0]
+            linestyle = style[1:]
+            #add the item 
+            item = make.curve(mx,my, color=color, linestyle=linestyle, linewidth=2)
+            item.set_readonly(not self.isModifiableByUser())
+            plot.add_item(item)
+        self.emit(Qt.SIGNAL("modelChanged()"))
+
+    def getModel(self):
+        """reimplemented from :class:`TaurusBaseWidget`"""
+        return self._modelNames
+        
+    def setModifiableByUser(self, modifiable):
+        """reimplemented from :class:`TaurusBaseWidget`"""
+        from taurus.qt.qtgui.extra_guiqwt.tools import TaurusCurveChooserTool
+        self.get_tool(TaurusCurveChooserTool).action.setEnabled(modifiable)
+        self.get_plot().set_items_readonly(not modifiable)
+        TaurusBaseWidget.setModifiableByUser(self, modifiable)    
+
+    @classmethod
+    def getQtDesignerPluginInfo(cls):
+        """reimplemented from :class:`TaurusBaseWidget`"""
+        ret = TaurusBaseWidget.getQtDesignerPluginInfo()
+        ret['module'] = 'taurus.qt.qtgui.extra_guiqwt'
+        ret['group'] = 'Taurus Display Widgets'
+        ret['icon'] =':/designer/qwtplot.png'
+        return ret
+    
+    model = Qt.pyqtProperty("QStringList", getModel, setModel, TaurusBaseWidget.resetModel)
+
+
+class TaurusTrendDialog(CurveDialog, TaurusBaseWidget):
+    '''A taurus widget for showing trends of scalar data.
+    It is an specialization of :class:`guiqwt.plot.CurveWidget`, for displaying
+    trends and offering the expected Taurus interface (e.g. setting models,
+    save/apply configs, drag&drops,...)
+    
+    .. seealso:: :class:`TaurusTrendDialog`
+    '''
+    def __init__(self, parent=None, designMode=False, taurusparam=None, toolbar=True, **kwargs):
+        '''see :class:`guiqwt.plot.CurveDialog` for other valid initialization parameters'''
+        CurveDialog.__init__(self, parent=parent, toolbar=toolbar, **kwargs)
+        TaurusBaseWidget.__init__(self, 'TaurusTrendDialog')
+        self.setWindowFlags(Qt.Qt.Widget)
+        self._designMode = designMode
+        self._modelNames = CaselessList()
+        from guiqwt.styles import style_generator
+        self.style = style_generator()
+        self.setSupportedMimeTypes([TAURUS_MODEL_LIST_MIME_TYPE, TAURUS_ATTR_MIME_TYPE])
+        from taurus.qt.qtgui.extra_guiqwt.tools import TaurusModelChooserTool,AutoScrollTool
+        self.add_tool(TaurusModelChooserTool, singleModel=False)
+        self.add_tool(AutoScrollTool)        
+        self.setModifiableByUser(True)
+        if taurusparam is None:
+            taurusparam = TaurusTrendParam()
+        self.defaultTaurusparam = taurusparam
+        
+    def getModelClass(self):
+        '''reimplemented from :class:`TaurusBaseWidget`'''
+        return taurus.core.TaurusAttribute
+    
+    def getTaurusTrendItems(self):
+        return [item for item in self.get_plot().get_public_items() if isinstance(item, TaurusTrendItem)]
+         
+    def _splitModel(self, modelNames):
+        '''convert str to list if needed (commas and whitespace are considered as separators)'''
+        if isinstance(modelNames,(basestring,Qt.QString)): 
+            modelNames = str(modelNames).replace(',',' ')
+            modelNames = modelNames.split()
+        return modelNames
+       
+    @Qt.pyqtSignature("setModel(QStringList)")
+    def setModel(self, modelNames):
+        '''Removes current TaurusCurveItems and adds new ones.
+
+        :param modelNames: (sequence<str> or str) the names of the models to be
+                           plotted. For convenience, a string is also accepted
+                           (instead of a sequence of strings), in which case the
+                           string will be internally converted to a sequence by
+                           splitting it on whitespace and commas.
+
+        .. seealso:: :meth:`addModels`
+        '''
+        
+        plot = self.get_plot()
+        #delete current TaurusCurveItems
+        taurusTrendItems = self.getTaurusTrendItems()
+        plot.del_items(taurusTrendItems)
+        self._modelNames = CaselessList()
+        #add new TaurusCurveItems
+        self.addModels(modelNames)
+        
+    def addModels(self, modelNames):
+        '''Creates TaurusCurveItems (one for each model in modelNames) and attaches 
+        them to the plot.
+        
+        .. note:: you can also add curves using :meth:`add_items`. :meth:`addModels` 
+                  is only a more Taurus-oriented interface. :meth:`add_items`
+                  gives you more control.
+
+        :param modelNames: (sequence<str> or str) the names of the models to be
+                           plotted. For convenience, a string is also accepted
+                           (instead of a sequence of strings), in which case the
+                           string will be internally converted to a sequence by
+                           splitting it on whitespace and commas. 
+
+        .. seealso:: :meth:`add_item`
+        '''
+        plot = self.get_plot()
+         
+        #pre-process the model names
+        modelNames = self._splitModel(modelNames)
+        self._modelNames.extend([str(n) for n in modelNames])
+        if self._designMode:
+            return
+        #create and attach new TaurusCurveItems
+        for m in modelNames:
+            #cycle styles
+            style = self.style.next()
+            #add the item
+            item = make.ttrend(m, color=style[0], linestyle=style[1:], linewidth=2, taurusparam=copy.deepcopy(self.defaultTaurusparam))
+            item.set_readonly(not self.isModifiableByUser())
+            plot.add_item(item)
+            item.update_params()
+        
+        self.setStackMode(self.defaultTaurusparam.stackMode)
+        self.emit(Qt.SIGNAL("modelChanged()"))
+        
+    def getModel(self):
+        """reimplemented from :class:`TaurusBaseWidget`"""
+        return self._modelNames
+    
+    def setUseArchiving(self, enable):
+        '''enables/disables looking up in the archiver for data stored before
+        the Trend was started
+        
+        :param enable: (bool) if True, archiving values will be used if available
+        '''
+        if not self.defaultTaurusparam.stackMode=='datetime':
+            self.info('ignoring setUseArchiving. Reason: not in X time scale')
+        self.defaultTaurusparam.useArchiving = enable
+        
+    def getUseArchiving(self):
+        '''whether TaurusTrend is looking for data in the archiver when needed
+        
+        :return: (bool)
+        
+        .. seealso:: :meth:`setUseArchiving`
+        '''
+        return self.defaultTaurusparam.useArchiving
+
+    def resetUseArchiving(self):
+        '''Same as setUseArchiving(False)'''
+        self.setUseArchiving(False)
+        
+    def setMaxDataBufferSize(self, maxSize):
+        '''sets the maximum number of events that will be stacked
+        
+        :param maxSize: (int) the maximum limit
+        
+        .. seealso:: :class:`TaurusTrendSet`
+        '''
+        for item in self.getTaurusTrendItems():
+            item.setBufferSize(maxSize)
+    
+        self.defaultTaurusparam.maxBufferSize = maxSize
+        
+    def getMaxDataBufferSize(self):
+        '''returns the maximum number of events that can be plotted in the trend
+        
+        :return: (int)
+        '''
+        return self.defaultTaurusparam.maxBufferSize
+            
+    def resetMaxDataBufferSize(self):
+        '''Same as setMaxDataBufferSize(16384)'''
+        self.setMaxDataBufferSize(16384) 
+
+    def setStackMode(self, mode):
+        '''set the type of stack to be used. This determines how X values are interpreted:
+          - as timestamps ('datetime')
+          - as time deltas ('timedelta')
+          - as event numbers ('event')
+        
+        :param mode:(one of 'datetime', 'timedelta' or 'event')
+        '''
+        from taurus.qt.qtgui.extra_guiqwt.tools import TimeAxisTool
+        mode = str(mode)
+        if mode == 'datetime':
+            timetool = self.get_tool(TimeAxisTool)
+            if timetool is None:
+                self.add_tool(TimeAxisTool)
+                timetool = self.get_tool(TimeAxisTool)
+            timetool.set_scale_y_t(True)
+        elif mode == 'deltatime':
+            from taurus.qt.qtgui.plot import DeltaTimeScaleEngine
+            plot = self.get_plot()
+            DeltaTimeScaleEngine.enableInAxis(plot, plot.xBottom, rotation=-45)
+        elif mode == 'event':
+            plot = self.get_plot()
+            scaleEngine = plot.axisScaleEngine(plot.xBottom)
+            if hasattr(scaleEngine, 'disableInAxis'):
+                scaleEngine.disableInAxis(plot, plot.xBottom)
+        else:
+            self.error('Unknown stack mode "%s"'%repr(mode))
+            return
+        
+        self.defaultTaurusparam.stackMode = mode
+        
+        for item in self.getTaurusTrendItems():
+            item.taurusparam.stackMode = mode
+ 
+    def getStackMode(self):
+        return self.defaultTaurusparam.stackMode
+        
+    def resetStackMode(self):
+        self.setStackMode('datetime')
+        
+    def setModifiableByUser(self, modifiable):
+        """reimplemented from :class:`TaurusBaseWidget`"""
+        from taurus.qt.qtgui.extra_guiqwt.tools import TaurusModelChooserTool
+        self.get_tool(TaurusModelChooserTool).action.setEnabled(modifiable)
+        self.get_plot().set_items_readonly(not modifiable)
+        TaurusBaseWidget.setModifiableByUser(self, modifiable) 
+        
+    @classmethod
+    def getQtDesignerPluginInfo(cls):
+        """reimplemented from :class:`TaurusBaseWidget`"""
+        ret = TaurusBaseWidget.getQtDesignerPluginInfo()
+        ret['module'] = 'taurus.qt.qtgui.extra_guiqwt'
+        ret['group'] = 'Taurus Display Widgets'
+        ret['icon'] =':/designer/qwtplot.png'
+        return ret
+    
+    model = Qt.pyqtProperty("QStringList", getModel, setModel, TaurusBaseWidget.resetModel)
+    useArchiving = Qt.pyqtProperty("bool", getUseArchiving, setUseArchiving, resetUseArchiving)
+    maxDataBufferSize = Qt.pyqtProperty("int", getMaxDataBufferSize, setMaxDataBufferSize, resetMaxDataBufferSize)
+    stackMode = Qt.pyqtProperty("QString", getStackMode, setStackMode, resetStackMode)
+    
+    
+class TaurusImageDialog(ImageDialog, TaurusBaseWidget):
+    '''A taurus dialog for showing 2D data.
+    It behaves as a regular :class:`guiqwt.plot.ImageDialog` but it also offers
+    the expected Taurus interface (e.g. setting models, save/apply configs,
+    drag&drops,...)
+    
+    .. seealso:: :class:`TaurusImageWidget`
+    '''
+    def __init__(self, parent=None, designMode=False, toolbar=True, **kwargs):
+        '''see :class:`guiqwt.plot.ImageDialog` for other valid initialization parameters'''
+        ImageDialog.__init__(self, parent=parent, toolbar=toolbar, **kwargs)
+        TaurusBaseWidget.__init__(self, 'TaurusImageDialog')
+        self.setWindowFlags(Qt.Qt.Widget)
+        self.imgItem = None
+        self._rgbmode = False
+        from taurus.qt.qtgui.extra_guiqwt.tools import TaurusModelChooserTool
+        self.add_tool(TaurusModelChooserTool, singleModel=True)
+        self.setModifiableByUser(True)
+    
+    def setRGBmode(self,enable):
+        self._rgbmode = enable
+        
+    def getRGBmode(self):
+        return self._rgbmode
+    
+    def resetRGBmode(self):
+        self.setRGBmode(False)
+    
+    def getModelClass(self):
+        '''reimplemented from :class:`TaurusBaseWidget`'''
+        return taurus.core.TaurusAttribute
+        
+    def setModel(self, model):
+        '''reimplemented from :class:`TaurusBaseWidget`'''
+        plot = self.get_plot()
+        if self.imgItem is not None:
+            plot.del_item(self.imgItem)
+        if self.rgbmode:
+            self.imgItem = make.rgbimage(taurusmodel=model)
+        else:
+            self.imgItem = make.image(taurusmodel=model)
+        plot.add_item(self.imgItem)
+        self.imgItem.set_readonly(not self.isModifiableByUser())
+        self.connect(self.imgItem.getSignaller(), Qt.SIGNAL("dataChanged"), self.update_cross_sections) #IMPORTANT: connect the cross section plots to the taurusimage so that they are updated when the taurus data changes
+        
+    def getModel(self):
+        '''reimplemented from :class:`TaurusBaseWidget`'''
+        if self.imgItem is None:
+            return ''
+        else:
+            return self.imgItem.getModel()
+        
+    def setModifiableByUser(self, modifiable):
+        '''reimplemented from :class:`TaurusBaseWidget`'''
+        from taurus.qt.qtgui.extra_guiqwt.tools import TaurusModelChooserTool
+        self.get_tool(TaurusModelChooserTool).action.setEnabled(modifiable)
+        self.get_plot().set_items_readonly(not modifiable)
+        TaurusBaseWidget.setModifiableByUser(self, modifiable)
+   
+    @classmethod
+    def getQtDesignerPluginInfo(cls):
+        """reimplemented from :class:`TaurusBaseWidget`"""
+        ret = TaurusBaseWidget.getQtDesignerPluginInfo()
+        ret['module'] = 'taurus.qt.qtgui.extra_guiqwt'
+        ret['group'] = 'Taurus Display Widgets'
+        ret['icon'] =':/designer/qwtplot.png'
+        return ret
+    
+    model = Qt.pyqtProperty("QString", getModel, setModel, TaurusBaseWidget.resetModel)
+    rgbmode = Qt.pyqtProperty("bool", getRGBmode, setRGBmode, resetRGBmode)
+    
+    
+    
+def taurusCurveDlgMain():
+    from taurus.qt.qtgui.extra_guiqwt.builder import make
+    from taurus.qt.qtgui.application import TaurusApplication
+    from guiqwt.plot import CurveDialog
+    from taurus.qt.qtgui.extra_guiqwt.tools import TimeAxisTool
+    import taurus.core.util.argparse
+    import sys
+    
+    parser = taurus.core.util.argparse.get_taurus_parser()
+    parser.set_usage("%prog [options] [<model1> [<model2>] ...]")
+    parser.set_description("a taurus application for plotting 1D data sets")
+    parser.add_option("--demo", action="store_true", dest="demo", default=False, help="show a demo of the widget")
+    app = TaurusApplication(cmd_line_parser=parser, app_name="Taurus Curve Dialog", app_version=taurus.Release.version)
+    args = app.get_command_line_args()
+    options = app.get_command_line_options()
+    
+    #check & process options
+    if options.demo:
+        args.append('eval://rand(128)')
+        
+    w = TaurusCurveDialog(edit=False, wintitle="Taurus Curve Dialog")
+    
+    w.add_tool(TimeAxisTool)
+     
+    #set model
+    if len(args) > 0:
+        w.setModel(args)
+    else:
+        parser.print_help(sys.stderr)
+        sys.exit(1)
+    
+    w.show()
+    sys.exit(app.exec_())   
+ 
+
+def taurusTrendDlgMain():
+    from taurus.qt.qtgui.application import TaurusApplication
+    import taurus.core
+    import sys
+    
+    #prepare options
+    parser = taurus.core.util.argparse.get_taurus_parser()
+    parser.set_usage("%prog [options] <model>")
+    parser.set_description('a Taurus application for plotting trends of scalars')
+    parser.add_option("-x", "--x-axis-mode", dest="x_axis_mode", default='t', metavar="t|d|e",
+                  help="interpret X values as timestamps (t), time deltas (d) or event numbers (e). Accepted values: t|d|e")    
+    parser.add_option("-b", "--buffer", dest="max_buffer_size", default='10000', 
+                      help="maximum number of values to be plotted (when reached, the oldest values will be discarded)")
+    parser.add_option("-a", "--use-archiving", action="store_true", dest="use_archiving", default=False)
+    parser.add_option("--demo", action="store_true", dest="demo", default=False, help="show a demo of the widget")
+    app = TaurusApplication(cmd_line_parser=parser, app_name="Taurus Trend", app_version=taurus.Release.version)
+    args = app.get_command_line_args()
+    options = app.get_command_line_options()
+    
+    #check & process options
+    stackModeMap = dict(t='datetime', d='deltatime', e='event')  
+    if options.x_axis_mode.lower() not in stackModeMap:
+        parser.print_help(sys.stderr)
+        sys.exit(1)
+    
+    stackMode = stackModeMap[options.x_axis_mode.lower()]
+
+    if options.use_archiving:
+        raise NotImplementedError('Archiving support is not yet implemented')
+      
+    if options.demo:
+        args.append('eval://rand()')
+    
+    taurusparam = TaurusTrendParam()
+    taurusparam.stackMode = stackMode
+    taurusparam.maxBufferSize = int(options.max_buffer_size)
+    taurusparam.useArchiving = options.use_archiving
+    
+    w = TaurusTrendDialog(wintitle="Taurus Trend", taurusparam=taurusparam)
+    
+    #set model
+    if len(args) > 0:
+        w.setModel(args)
+    else:
+        parser.print_help(sys.stderr)
+        sys.exit(1)
+    
+    w.show()
+    sys.exit(app.exec_())      
+    
+def taurusImageDlgMain():
+    from taurus.qt.qtgui.application import TaurusApplication
+    import taurus.core
+    import sys
+    
+    #prepare options
+    parser = taurus.core.util.argparse.get_taurus_parser()
+    parser.set_usage("%prog [options] <model>")
+    parser.set_description('a Taurus application for plotting Image Attributes')
+    parser.add_option("--demo", action="store_true", dest="demo", default=False, help="show a demo of the widget")
+    parser.add_option("--rgb", action="store_true", dest="rgb_mode", default=False, help="assume image is RGB")
+    app = TaurusApplication(cmd_line_parser=parser, app_name="Taurus Image Dialog", app_version=taurus.Release.version)
+    args = app.get_command_line_args()
+    options = app.get_command_line_options()
+    
+    #check & process options
+    if options.demo:
+        args.append('eval://rand(256,128)')
+        
+    w = TaurusImageDialog()
+    
+    w.setRGBmode(options.rgb_mode)
+        
+    #set model
+    if len(args) == 1:
+        w.setModel(args[0])
+    else:
+        parser.print_help(sys.stderr)
+        sys.exit(1)
+    
+    w.show()
+    sys.exit(app.exec_())      
+        
+
+if __name__ == "__main__":
+#    taurusCurveDlgMain()
+#    taurusTrendDlgMain()
+    taurusImageDlgMain()    
+    
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/styles.py b/lib/taurus/qt/qtgui/extra_guiqwt/styles.py
new file mode 100644
index 0000000..77f1854
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/styles.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/>.
+##
+#############################################################################
+
+"""Extension of :mod:`guiqwt.styles`"""
+
+
+
+__docformat__ = 'restructuredtext'
+
+
+from guidata.dataset.datatypes import DataSet
+from guidata.dataset.dataitems import StringItem, IntItem, ChoiceItem, BoolItem
+
+
+# ===================================================
+# Taurus Curve parameters
+# ===================================================
+class TaurusCurveParam(DataSet):
+    xModel = StringItem("Model for X", default="")
+    yModel = StringItem("Model for Y", default="")
+
+    def update_param(self, curve):
+        self.xModel.update_param(curve.taurusparam.xModel)
+        self.yModel.update_param(curve.taurusparam.yModel)
+#        DataSet.update_param(self, curve)
+    
+    def update_curve(self, curve):
+        curve.setModels(self.xModel or None, self.yModel)
+#        DataSet.update_curve(self, curve)
+
+class TaurusTrendParam(DataSet):
+    model = StringItem("Model", default="")
+    maxBufferSize = IntItem("Buffer Size", default=16384)
+    useArchiving = BoolItem("Use Archiving", default=False)
+    stackMode = ChoiceItem("Stack Mode",
+                       [("datetime",  "Absolute Time"),
+                        ("timedelta", "Relative Time"),
+                        ("event", "Event")],
+                       default="datetime")
+
+    def update_param(self, curve):
+        self.model.update_param(curve.taurusparam.model)
+        self.maxBufferSize.update_param(curve.taurusparam.maxBufferSize)
+        self.stackMode.update_param(curve.taurusparam.stackMode)
+    
+    def update_curve(self, curve):
+        curve.setModel(self.model)
+        curve.setBufferSize(self.maxBufferSize)
+        #the stackMode is directly used from the param, so there is no need to update
+        
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/taurustrend2d.py b/lib/taurus/qt/qtgui/extra_guiqwt/taurustrend2d.py
new file mode 100644
index 0000000..6111bfd
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/taurustrend2d.py
@@ -0,0 +1,248 @@
+#!/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/>.
+##
+#############################################################################
+
+"""
+taurustrend.py: Generic trend widget for Taurus
+"""
+__all__=["TaurusTrend2DDialog"]
+
+from guiqwt.plot import ImageDialog
+from taurus.qt import Qt
+import taurus.core
+from taurus.qt.qtgui.base import TaurusBaseWidget
+from taurus.qt.qtgui.extra_guiqwt.image import TaurusTrend2DItem
+from taurus.qt.qtgui.extra_guiqwt.tools import TaurusModelChooserTool, TimeAxisTool, AutoScrollTool
+
+
+
+
+class TaurusTrend2DDialog(ImageDialog, TaurusBaseWidget):
+    '''
+    This is a widget for displaying trends from 1D Taurus attributes (i.e.,
+    representing the variation over time of a 1D array). Sometimes this kind of
+    plots are also known as "spectrograms".
+    
+    The widget shows a 3D plot (Z represented with colors) where the values in
+    the 1D array are plotted in the Y-Z plane and are stacked along the X axis.
+    '''
+    def __init__(self, parent=None, designMode=False, toolbar=True, stackMode='datetime', buffersize=512, options=None, **kwargs):
+        '''see :class:`guiqwt.plot.ImageDialog` for other valid initialization parameters'''
+        defaultOptions = dict(lock_aspect_ratio=False)
+        if options is not None:
+            defaultOptions.update(options)
+        ImageDialog.__init__(self, parent=parent, toolbar=toolbar, options=defaultOptions, **kwargs)
+        TaurusBaseWidget.__init__(self, "TaurusTrend2DDialog")
+        self.trendItem = None  
+        self.buffersize = buffersize
+        self._useArchiving = False
+        self._stackMode = stackMode
+        self.setStackMode(stackMode)
+        self.setWindowFlags(Qt.Qt.Widget)
+        #add some tools
+        for toolklass in (TaurusModelChooserTool,AutoScrollTool):
+            self.add_tool(toolklass)   
+            
+    def setStackMode(self, mode):
+        '''set the type of stack to be used. This determines how X values are interpreted:
+          - as timestamps ('datetime')
+          - as time deltas ('timedelta')
+          - as event numbers ('event')
+        
+        :param mode:(one of 'datetime', 'timedelta' or 'event')
+        '''
+        mode = str(mode)
+        if mode == 'datetime':
+            self.add_tool(TimeAxisTool)
+            timetool = self.get_tool(TimeAxisTool)
+            timetool.set_scale_y_t(True)
+        elif mode == 'deltatime':
+            from taurus.qt.qtgui.plot import DeltaTimeScaleEngine
+            plot = self.get_plot()
+            DeltaTimeScaleEngine.enableInAxis(plot, plot.xBottom, rotation=-45)
+        elif mode == 'event':
+            plot = self.get_plot()
+            scaleEngine = plot.axisScaleEngine(plot.xBottom)
+            if hasattr(scaleEngine, 'disableInAxis'):
+                scaleEngine.disableInAxis(plot, plot.xBottom)
+        else:
+            self.error('Unknown stack mode "%s"'%repr(mode))
+            return
+        self._stackMode = mode
+        if hasattr(self.trendItem,'stackMode'):
+            self.trendItem.stackMode = mode
+               
+    def getStackMode(self):
+        return self._stackMode
+        
+    def resetStackMode(self):
+        self.setStackMode('datetime')
+    
+    def getModelClass(self):
+        '''reimplemented from :class:`TaurusBaseWidget`'''
+        return taurus.core.TaurusAttribute
+        
+    def setModel(self, model):
+        '''reimplemented from :class:`TaurusBaseWidget`'''
+        plot = self.get_plot()
+        if self.trendItem is not None:
+            plot.del_item(self.trendItem)
+        self.trendItem = TaurusTrend2DItem(stackMode=self.getStackMode(), buffersize = self.buffersize)
+        self.trendItem.setModel(model)
+        plot.add_item(self.trendItem)
+        plot.set_axis_title(plot.colormap_axis, 'value')
+        plot.set_axis_unit('left', 'index')
+        try:
+            plot.set_axis_title('left', self.trendItem.getModelObj().getSimpleName())
+        except:
+            self.debug('cannot set title for left axis')
+            sef.traceback()
+        try:
+            unit = self.trendItem.getModelObj().getConfig().getUnit() or ''
+            plot.set_axis_unit(plot.colormap_axis, unit)
+        except:
+            self.debug('cannot set units for colormap axis')
+            self.traceback()
+        
+        self.connect(self.trendItem.getSignaller(), Qt.SIGNAL("dataChanged"), self.update_cross_sections)
+        
+    def getModel(self):
+        '''reimplemented from :class:`TaurusBaseWidget`'''
+        if self.trendItem is None:
+            return None
+        else:
+            return self.trendItem.getModel()
+    
+    def setUseArchiving(self, enable):
+        '''enables/disables looking up in the archiver for data stored before
+        the Trend was started
+        
+        :param enable: (bool) if True, archiving values will be used if available
+        '''
+        if not self._stackMode=='datetime':
+            self.info('ignoring setUseArchiving. Reason: not in X time scale')
+        self._useArchiving = enable
+        
+    def getUseArchiving(self):
+        '''whether TaurusTrend is looking for data in the archiver when needed
+        
+        :return: (bool)
+        
+        .. seealso:: :meth:`setUseArchiving`
+        '''
+        return self._useArchiving
+
+    def resetUseArchiving(self):
+        '''Same as setUseArchiving(False)'''
+        self.setUseArchiving(False)
+        
+    def setMaxDataBufferSize(self, maxSize):
+        '''sets the maximum number of events that will be stacked
+        
+        :param maxSize: (int) the maximum limit
+        
+        .. seealso:: :class:`TaurusTrendSet`
+        '''
+        if self.trendItem is not None:
+            self.trendItem.setBufferSize(maxSize)
+    
+        self.buffersize = maxSize
+        
+    def getMaxDataBufferSize(self):
+        '''returns the maximum number of events that can be plotted in the trend
+        
+        :return: (int)
+        '''
+        return self.buffersize
+            
+    def resetMaxDataBufferSize(self):
+        '''Same as setMaxDataBufferSize(512)  (i.e. 512 events)'''
+        self.setMaxDataBufferSize(512) 
+    
+    @classmethod
+    def getQtDesignerPluginInfo(cls):
+        """reimplemented from :class:`TaurusBaseWidget`"""
+        ret = TaurusBaseWidget.getQtDesignerPluginInfo()
+        ret['module'] = 'taurus.qt.qtgui.plot'
+        ret['group'] = 'Taurus Display Widgets'
+        ret['icon'] =':/designer/qwtplot.png'
+        return ret  
+    
+    model = Qt.pyqtProperty("QString", getModel, setModel, TaurusBaseWidget.resetModel)
+    useArchiving = Qt.pyqtProperty("bool", getUseArchiving, setUseArchiving, resetUseArchiving) #@todo uncomment this when archiving is supported
+    maxDataBufferSize = Qt.pyqtProperty("int", getMaxDataBufferSize, setMaxDataBufferSize, resetMaxDataBufferSize)
+    stackMode = Qt.pyqtProperty("QString", getStackMode, setStackMode, resetStackMode)
+
+        
+def taurusTrend2DMain():
+    from taurus.qt.qtgui.application import TaurusApplication
+    import taurus.core
+    import sys
+    
+    #prepare options
+    parser = taurus.core.util.argparse.get_taurus_parser()
+    parser.set_usage("%prog [options] <model>")
+    parser.set_description('a Taurus application for plotting trends of arrays (aka "spectrograms")')
+    parser.add_option("-x", "--x-axis-mode", dest="x_axis_mode", default='d', metavar="t|d|e",
+                  help="interpret X values as timestamps (t), time deltas (d) or event numbers (e). Accepted values: t|d|e")    
+    parser.add_option("-b", "--buffer", dest="max_buffer_size", default='512', 
+                      help="maximum number of values to be stacked (when reached, the oldest values will be discarded)")
+    parser.add_option("-a", "--use-archiving", action="store_true", dest="use_archiving", default=False)
+    parser.add_option("--demo", action="store_true", dest="demo", default=False, help="show a demo of the widget")
+    app = TaurusApplication(cmd_line_parser=parser, app_name="Taurus Trend 2D", app_version=taurus.Release.version)
+    args = app.get_command_line_args()
+    options = app.get_command_line_options()
+    
+    #check & process options
+    stackModeMap = dict(t='datetime', d='deltatime', e='event')  
+    if options.x_axis_mode.lower() not in stackModeMap:
+        parser.print_help(sys.stderr)
+        sys.exit(1)
+    
+    stackMode = stackModeMap[options.x_axis_mode.lower()]
+      
+    if options.demo:
+        args.append('eval://sin(x+t)?x=linspace(0,3,40);t=rand()')
+        
+    w = TaurusTrend2DDialog(stackMode=stackMode, wintitle="Taurus Trend 2D", 
+                            buffersize=int(options.max_buffer_size))
+    
+    #set archiving
+    if options.use_archiving:
+        raise NotImplementedError('Archiving support is not yet implemented')
+        w.setUseArchiving(True)
+    
+    #set model
+    if len(args) == 1:
+        w.setModel(args[0])
+    else:
+        parser.print_help(sys.stderr)
+        sys.exit(1)
+    
+    w.show()
+    sys.exit(app.exec_())      
+        
+
+if __name__ == "__main__":
+    taurusTrend2DMain()    
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/tools.py b/lib/taurus/qt/qtgui/extra_guiqwt/tools.py
new file mode 100644
index 0000000..79ef1f3
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/tools.py
@@ -0,0 +1,247 @@
+#!/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/>.
+##
+#############################################################################
+
+"""Extension of :mod:`guiqwt.tools`"""
+
+
+
+__docformat__ = 'restructuredtext'
+
+
+from taurus.qt import Qt
+from PyQt4 import Qwt5
+from guiqwt.tools import CommandTool, ToggleTool, DefaultToolbarID, QActionGroup, add_actions
+from guiqwt.signals import SIG_ITEMS_CHANGED
+
+from taurus.qt.qtgui.resource import getIcon
+from taurus.qt.qtgui.extra_guiqwt.builder import make
+from taurus.qt.qtgui.extra_guiqwt.curve import TaurusCurveItem,TaurusTrendItem
+from taurus.qt.qtgui.extra_guiqwt.image import TaurusTrend2DItem
+from taurus.qt.qtgui.extra_guiqwt.curvesmodel import CurveItemConfDlg, CurveItemConf
+from taurus.qt.qtgui.panel import TaurusModelChooser
+from taurus.core import TaurusElementType
+from taurus.qt.qtgui.plot import DateTimeScaleEngine
+
+class TaurusCurveChooserTool(CommandTool):
+    """
+    A tool that shows the Taurus Model Chooser to create/edit the taurus curves of a plot
+    """
+    def __init__(self, manager, toolbar_id=DefaultToolbarID):
+        super(TaurusCurveChooserTool,self).__init__(manager, "Taurus Models...", getIcon(":/taurus.png"), toolbar_id=toolbar_id)
+
+    def activate_command(self, plot, checked):
+        """Activate tool"""
+        #retrieve current Taurus curves
+        tauruscurves = [item for item in plot.get_public_items() if isinstance(item, TaurusCurveItem)]
+        #show a dialog
+        confs, ok = CurveItemConfDlg.showDlg(parent=plot, curves=tauruscurves)
+        if ok:
+            #remove previous taurus curves
+            plot.del_items(tauruscurves)
+            #create curve items and add them to the plot 
+            for c in confs:
+                if c.taurusparam.yModel:
+                    item = make.pcurve(c.taurusparam.xModel or None, c.taurusparam.yModel, c.curveparam)
+                    plot.add_item(item)
+                    if c.axesparam is not None:
+                        c.axesparam.update_axes(item)
+
+class TaurusImageChooserTool(CommandTool):
+    """
+    A tool that shows the Taurus Model Chooser and adds new taurus image items to a plot
+    """
+    def __init__(self, manager, toolbar_id=DefaultToolbarID):
+        super(TaurusImageChooserTool,self).__init__(manager, "Add Taurus images...", getIcon(":/taurus.png"), toolbar_id=toolbar_id)
+
+    def activate_command(self, plot, checked):
+        """Activate tool"""
+        #show a dialog
+        models, ok = TaurusModelChooser.modelChooserDlg(parent=plot, selectables=[TaurusElementType.Attribute])
+        if ok:
+            #create image items and add them to the plot 
+            for m in models:
+                item = make.image(taurusmodel=m)
+                plot.add_item(item)
+
+
+class TaurusModelChooserTool(CommandTool):
+    """
+    A tool that shows the Taurus Model Chooser and sets the chosen model on the manager
+    """
+    def __init__(self, manager, toolbar_id=DefaultToolbarID, singleModel=False):
+        super(TaurusModelChooserTool,self).__init__(manager, "Change Taurus Model...", getIcon(":/taurus.png"), toolbar_id=toolbar_id)
+        self.singleModel = singleModel
+        
+    def activate_command(self, plot, checked):
+        """Activate tool"""
+        #show a dialog
+        models, ok = TaurusModelChooser.modelChooserDlg(parent=plot, selectables=[TaurusElementType.Attribute], singleModel=self.singleModel)
+        if ok: 
+            if self.singleModel:
+                self.manager.setModel(models[0])
+            else:
+                self.manager.setModel(models)
+            
+          
+class TimeAxisTool(CommandTool):
+    """
+    A tool that allows the user to change the type of scales to/from time mode
+    """
+    def __init__(self, manager):
+        super(TimeAxisTool, self).__init__(manager, "Time Scale",
+                                            icon=getIcon(":/status/awaiting.svg"),
+                                            tip=None, toolbar_id=None)
+        self.action.setEnabled(True)
+                                 
+    def create_action_menu(self, manager):
+        """Create and return menu for the tool's action"""
+        menu = Qt.QMenu()
+        group = QActionGroup(manager.get_main())
+        y_x = manager.create_action("y(x)", toggled=self.set_scale_y_x)
+        y_t = manager.create_action("y(t)", toggled=self.set_scale_y_t)
+        t_x = manager.create_action("t(x)", toggled=self.set_scale_t_x)
+        t_t = manager.create_action("t(t)", toggled=self.set_scale_t_t)
+        self.scale_menu = {(False, False): y_x, (False, True): y_t,
+                           (True, False): t_x, (True, True): t_t}
+        for obj in (group, menu):
+           add_actions(obj, (y_x, y_t, t_x, t_t))
+        return menu
+    
+    def _getAxesUseTime(self, item):
+        """
+        Returns a tuple (xIsTime, yIsTime) where xIsTime is True if the item's x
+        axis uses a TimeScale. yIsTime is True if the item's y axis uses a Time
+        Scale. Otherwise they are False.
+        """
+        plot = item.plot()
+        if plot is None:
+            return (False,False)
+        xEngine = plot.axisScaleEngine(item.xAxis())
+        yEngine = plot.axisScaleEngine(item.yAxis())
+        return isinstance(xEngine, DateTimeScaleEngine), isinstance(yEngine, DateTimeScaleEngine)
+         
+    def update_status(self, plot):
+        item = plot.get_active_item()
+        active_scale = (False, False)
+        if item is not None:
+            active_scale = self._getAxesUseTime(item)
+        for scale_type, scale_action in self.scale_menu.items():
+            if item is None:
+                scale_action.setEnabled(True)
+            else:
+                scale_action.setEnabled(True)
+                if active_scale == scale_type:
+                    scale_action.setChecked(True)
+                else:
+                    scale_action.setChecked(False)
+                    
+    def _setPlotTimeScales(self, xIsTime, yIsTime):
+        plot = self.get_active_plot()
+        if plot is not None:
+            for axis,isTime in zip(plot.get_active_axes(), (xIsTime, yIsTime)):
+                if isTime:
+                    DateTimeScaleEngine.enableInAxis(plot, axis, rotation=-45)
+                else:
+                    DateTimeScaleEngine.disableInAxis(plot, axis)
+            plot.replot()
+            
+        
+    def set_scale_y_x(self, checked):
+        if not checked:
+            return
+        self._setPlotTimeScales(False, False)
+        
+    def set_scale_t_x(self, checked):
+        if not checked:
+            return
+        self._setPlotTimeScales(False, True)
+    
+    def set_scale_y_t(self, checked):
+        if not checked:
+            return
+        self._setPlotTimeScales(True, False)
+    
+    def set_scale_t_t(self, checked):
+        if not checked:
+            return
+        self._setPlotTimeScales(True, True)
+
+
+class AutoScrollTool(ToggleTool):
+    """A tool that puts the plot in "AutoScroll" mode. 
+    This makes sense in trend plots where we want to keep the last value 
+    always visible"""
+    def __init__(self, manager, scrollFactor=0.2, toolbar_id=None):
+        super(AutoScrollTool, self).__init__(manager, title='Auto Scroll', icon=None, tip='Force X scale to always show the last value', toolbar_id=toolbar_id)
+        self.scrollFactor = scrollFactor
+        
+    def register_plot(self, baseplot):
+        ToggleTool.register_plot(self,baseplot)
+        self.connect(baseplot, SIG_ITEMS_CHANGED, self.items_changed)
+        
+    def activate_command(self, plot, checked):
+        """Activate tool"""
+        #retrieve current Taurus curves
+        for item in self.getScrollItems(plot):
+            if checked:
+                self.connect(item.getSignaller(), Qt.SIGNAL('scrollRequested'), self.onScrollRequested)
+            else:
+                self.disconnect(item.getSignaller(), Qt.SIGNAL('scrollRequested'), self.onScrollRequested)
+        
+    def getScrollItems(self,plot):
+        return [item for item in plot.get_items() if isinstance(item, (TaurusTrendItem,TaurusTrend2DItem))]
+    
+    def onScrollRequested(self, plot, axis, value):
+        scalemin,scalemax = plot.get_axis_limits(axis)
+        scaleRange=abs(scalemax-scalemin)
+        xmin = value - scaleRange*(1.-self.scrollFactor)
+        xmax = value + scaleRange*self.scrollFactor
+        plot.set_axis_limits(axis, xmin, xmax)
+        
+    def items_changed(self,plot):
+        self.activate_command(plot, self.action.isChecked())
+          
+        
+
+
+def testTool(tool):
+    from taurus.qt.qtgui.application import TaurusApplication
+    from guiqwt.plot import CurveDialog
+    import sys
+    
+    app = TaurusApplication()
+    win = CurveDialog(edit=False, toolbar=True)
+    win.add_tool(tool)
+    win.show()
+    win.exec_()
+    
+        
+def test_timeAxis():
+    testTool(TimeAxisTool)
+#    testTool(TaurusCurveChooserTool)
+
+
+if __name__ == "__main__":
+    test_timeAxis()    
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/ui/CurveItemConfDlg.ui b/lib/taurus/qt/qtgui/extra_guiqwt/ui/CurveItemConfDlg.ui
new file mode 100644
index 0000000..59ad5c1
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/ui/CurveItemConfDlg.ui
@@ -0,0 +1,156 @@
+<ui version="4.0" >
+ <class>CurveItemConfDlg</class>
+ <widget class="QWidget" name="CurveItemConfDlg" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>812</width>
+    <height>495</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Form</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout" >
+   <item row="0" column="0" >
+    <widget class="QSplitter" name="splitter" >
+     <property name="orientation" >
+      <enum>Qt::Horizontal</enum>
+     </property>
+     <widget class="QGroupBox" name="groupBox_2" >
+      <property name="title" >
+       <string>Sources of data</string>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout_5" >
+       <item>
+        <widget class="QTabWidget" name="tabWidget" >
+         <property name="currentIndex" >
+          <number>0</number>
+         </property>
+         <widget class="QWidget" name="tangoTab" >
+          <attribute name="title" >
+           <string>Tango</string>
+          </attribute>
+          <layout class="QHBoxLayout" name="horizontalLayout_4" >
+           <item>
+            <widget class="TaurusModelSelectorTree" name="tangoTree" />
+           </item>
+          </layout>
+         </widget>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+     <widget class="QGroupBox" name="groupBox_3" >
+      <property name="title" >
+       <string>Contents & appearance</string>
+      </property>
+      <layout class="QVBoxLayout" name="verticalLayout_7" >
+       <item>
+        <layout class="QVBoxLayout" name="verticalLayout_4" >
+         <item>
+          <widget class="QTableView" name="curvesTable" >
+           <property name="minimumSize" >
+            <size>
+             <width>400</width>
+             <height>0</height>
+            </size>
+           </property>
+           <property name="contextMenuPolicy" >
+            <enum>Qt::CustomContextMenu</enum>
+           </property>
+           <property name="dragDropMode" >
+            <enum>QAbstractItemView::DragDrop</enum>
+           </property>
+          </widget>
+         </item>
+         <item>
+          <layout class="QHBoxLayout" name="horizontalLayout_2" >
+           <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>
+           <item>
+            <widget class="QToolButton" name="removeCurvesBT" >
+             <property name="contextMenuPolicy" >
+              <enum>Qt::NoContextMenu</enum>
+             </property>
+             <property name="text" >
+              <string> Remove</string>
+             </property>
+             <property name="popupMode" >
+              <enum>QToolButton::MenuButtonPopup</enum>
+             </property>
+             <property name="toolButtonStyle" >
+              <enum>Qt::ToolButtonTextBesideIcon</enum>
+             </property>
+            </widget>
+           </item>
+          </layout>
+         </item>
+        </layout>
+       </item>
+      </layout>
+     </widget>
+    </widget>
+   </item>
+   <item row="1" column="0" >
+    <layout class="QHBoxLayout" name="horizontalLayout_3" >
+     <item>
+      <spacer name="horizontalSpacer_2" >
+       <property name="orientation" >
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0" >
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="reloadBT" >
+       <property name="text" >
+        <string>Reload</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="cancelBT" >
+       <property name="text" >
+        <string>Cancel</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="applyBT" >
+       <property name="text" >
+        <string>Apply</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>TaurusModelSelectorTree</class>
+   <extends>TaurusWidget</extends>
+   <header>taurus.qt.qtgui.panel</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/scripts/taurusgui b/lib/taurus/qt/qtgui/extra_guiqwt/ui/__init__.py
old mode 100755
new mode 100644
similarity index 95%
copy from scripts/taurusgui
copy to lib/taurus/qt/qtgui/extra_guiqwt/ui/__init__.py
index 00ce858..208f8eb
--- a/scripts/taurusgui
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/ui/__init__.py
@@ -23,5 +23,7 @@
 ##
 #############################################################################
 
-from taurus.qt.qtgui.taurusgui import main
-main()
+"""
+__init__.py: 
+"""
+
diff --git a/lib/taurus/qt/qtgui/extra_guiqwt/ui/ui_CurveItemConfDlg.py b/lib/taurus/qt/qtgui/extra_guiqwt/ui/ui_CurveItemConfDlg.py
new file mode 100644
index 0000000..a74dde4
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_guiqwt/ui/ui_CurveItemConfDlg.py
@@ -0,0 +1,100 @@
+# -*- 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 0bc350a..5fdfc81 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/__init__.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/__init__.py
@@ -30,4 +30,5 @@ from macroexecutor import TaurusMacroExecutorWidget, TaurusMacroExecutor
 from sequenceeditor import TaurusSequencerWidget, TaurusSequencer
 from common import TaurusMacroConfigurationDialog
 from macrodescriptionviewer import TaurusMacroDescriptionViewer
-from dooroutput import DoorOutput, DoorDebug, DoorResult
\ No newline at end of file
+from dooroutput import DoorOutput, DoorDebug, DoorResult
+from macrobutton import MacroButton
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/common.py b/lib/taurus/qt/qtgui/extra_macroexecutor/common.py
index 948e1a6..c3f30e1 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/common.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/common.py
@@ -23,9 +23,10 @@
 ##
 #############################################################################
 
-from PyQt4 import Qt
 import PyTango
 import taurus
+from taurus.core import TaurusEventType
+from taurus.qt import Qt
 from taurus.qt.qtgui.input import TaurusAttrListComboBox
 from taurus.qt.qtgui.container import TaurusMainWindow
 
@@ -43,45 +44,33 @@ def standardPlotablesFilter(column_desc_dict):
        
 
 class MSAttrListComboBox(TaurusAttrListComboBox):
-    
-    def __init__(self, parent=None):
-        TaurusAttrListComboBox.__init__(self, parent)
-        
-    def prepareAttrList(self, value):
-        lines = list(value)
-        items = []
-        for line in lines:
-            items.append(line.split()[0])
-        items.sort()       
-        return items
-        
-    def setModel(self, model):
-        TaurusAttrListComboBox.setModel(self, model)
-        valueObj = self.getModelObj().getValueObj()
-        #@todo: remove this condition when MS is fixed to return empty list as a value in case of empty attribute
-        if valueObj.is_empty:
-            value = []
-        else:
-            value = getattr(valueObj, "value", [])
-        items = self.prepareAttrList(value)
-        self.addItems(items) 
+    _elementType = ''
     
     def handleEvent(self, evt_src, evt_type, evt_value):
-        text = self.currentText()
+        if evt_type in (TaurusEventType.Config, TaurusEventType.Error):
+            return
+        text = str(self.currentText())
         self.clear()
-        if evt_src and evt_value:
-            value = evt_value.value
-            if value is None: 
-                return
-            items = self.prepareAttrList(value)
-            items.sort()       
-            self.addItems(items)
-        self.setCurrentText(text)
+        items = self.getParentModelObj().getElementNamesOfType(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(TaurusAttrListComboBox):
     """Combobox with inherited from TaurusAttrListComboBox for MacroList attribute 
@@ -225,6 +214,7 @@ 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")
@@ -300,6 +290,14 @@ class MacroExecutionWindow(TaurusMainWindow):
             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)
                     
 if __name__ == "__main__": 
     import sys    
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/dooroutput.py b/lib/taurus/qt/qtgui/extra_macroexecutor/dooroutput.py
index 116adfa..1f23f73 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/dooroutput.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/dooroutput.py
@@ -27,286 +27,9 @@
 dooroutput.py: 
 """
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 import taurus.core
         
-#class DoorOutput(Qt.QTextEdit):
-#    
-#    def __init__(self, parent = None):
-#        Qt.QTextEdit.__init__(self, parent)
-#    
-#        self._doorName = None
-#
-#        self._doorOutputListener = None
-#        self._doorWarningListener = None
-#        self._doorInfoListener = None
-#        self._doorErrorListener = None
-#        
-#        self.setReadOnly(True)
-#        self.setFont(Qt.QFont("Courier",9))
-#        
-#    def doorName(self):
-#        return self._doorName
-#    
-#    def setDoorName(self, doorName):
-#        self._doorName = doorName
-#        
-#    def doorOutputListener(self):
-#        return self._doorOutputListener
-#    
-#    def setDoorOutputListener(self, doorOutputListener):
-#        self._doorOutputListener = doorOutputListener
-#        
-#    def doorWarningListener(self):
-#        return self._doorWarningListener
-#    
-#    def setDoorWarningListener(self, doorWarningListener):
-#        self._doorWarningListener = doorWarningListener
-#        
-#    def doorInfoListener(self):
-#        return self._doorInfoListener
-#    
-#    def setDoorInfoListener(self, doorInfoListener):
-#        self._doorInfoListener = doorInfoListener
-#        
-#    def doorErrorListener(self):
-#        return self._doorErrorListener
-#    
-#    def setDoorErrorListener(self, doorErrorListener):
-#        self._doorErrorListener = doorErrorListener
-#
-##    def sizeHint(self):
-##        return self.minimumSizeHint()
-##
-##    def minimumSizeHint(self):
-##        return Qt.QSize(600,150)
-#        
-#    def onDoorChanged(self, doorName):
-#        self.setDoorName(doorName)
-#        self.resetListeners()
-#    
-#    def resetListeners(self):
-#        
-#        if not self.doorOutputListener() is None:
-#            Qt.QObject.disconnect(self.doorOutputListener(),
-#                                      Qt.SIGNAL("doorOutputChanged"),
-#                                      self.onDoorOutputChanged)
-#        if not self.doorInfoListener() is None:
-#            Qt.QObject.disconnect(self.doorInfoListener(),
-#                                      Qt.SIGNAL("doorInfoChanged"),
-#                                      self.onDoorInfoChanged)
-#        if not self.doorWarningListener() is None:
-#            Qt.QObject.disconnect(self.doorWarningListener(),
-#                                      Qt.SIGNAL("doorWarningChanged"),
-#                                      self.onDoorWarningChanged)
-#        if not self.doorErrorListener() is None:
-#            Qt.QObject.disconnect(self.doorErrorListener(),
-#                                      Qt.SIGNAL("doorErrorChanged"),
-#                                      self.onDoorErrorChanged)
-#            
-#        self.clear()
-#            
-#        self.setDoorOutputListener(DoorAttrListener("Output"))
-#        self.setDoorInfoListener(DoorAttrListener("Info"))
-#        self.setDoorWarningListener(DoorAttrListener("Warning"))
-#        self.setDoorErrorListener(DoorAttrListener("Error"))
-#        
-#        Qt.QObject.connect(self.doorOutputListener(),
-#                               Qt.SIGNAL("doorOutputChanged"),
-#                               self.onDoorOutputChanged)
-#        Qt.QObject.connect(self.doorInfoListener(),
-#                               Qt.SIGNAL("doorInfoChanged"),
-#                               self.onDoorInfoChanged)
-#        Qt.QObject.connect(self.doorWarningListener(),
-#                               Qt.SIGNAL("doorWarningChanged"),
-#                               self.onDoorWarningChanged)
-#        Qt.QObject.connect(self.doorErrorListener(),
-#                               Qt.SIGNAL("doorErrorChanged"),
-#                               self.onDoorErrorChanged)
-#        
-#        self.doorOutputListener().setDoorName(self.doorName())
-#        self.doorInfoListener().setDoorName(self.doorName())
-#        self.doorWarningListener().setDoorName(self.doorName())
-#        self.doorErrorListener().setDoorName(self.doorName())
-#    
-#    def onDoorOutputChanged(self, eventValue):
-#        """call on output attribute changed"""
-#        if eventValue is None: return
-#        self.setTextColor(Qt.Qt.black)
-#        for outputLine in eventValue:
-#            self.append("OUTPUT  " + outputLine)
-#        self.moveCursor(Qt.QTextCursor.End)
-#    
-#    def onDoorInfoChanged(self, eventValue):        
-#        """call on info attribute changed"""
-#        if eventValue is None: return
-#        self.setTextColor(Qt.Qt.black)
-#        for infoLine in eventValue:
-#            self.append("INFO  " + infoLine)
-#        self.moveCursor(Qt.QTextCursor.End)
-#        
-#    def onDoorErrorChanged(self, eventValue):
-#        """call on error attribute changed"""
-#        if eventValue is None: return
-#        self.setTextColor(Qt.Qt.red)
-#        for errorLine in eventValue:
-#            self.append("ERROR  " + errorLine)
-#        self.moveCursor(Qt.QTextCursor.End)
-#                
-#    def onDoorWarningChanged(self, eventValue):
-#        """call on warning attribute changed"""        
-#        if eventValue is None: return
-#        self.setTextColor(Qt.Qt.black)
-#        for warningLine in eventValue:
-#            self.append("WARNING  " + warningLine)
-#        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())
- 
-        
-#class DoorDebug(Qt.QTextEdit):
-#    
-#    def __init__(self, parent = None):
-#        Qt.QTextEdit.__init__(self, parent)
-#        
-#        self._doorName = None
-#
-#        self._doorDebugListener = None
-#        
-#        self.setReadOnly(True)
-#        self.setFont(Qt.QFont("Courier",9))
-#    
-#    def doorName(self):
-#        return self._doorName
-#    
-#    def setDoorName(self, doorName):
-#        self._doorName = doorName
-#        
-#    def doorDebugListener(self):
-#        return self._doorDebugListener
-#    
-#    def setDoorDebugListener(self, doorDebugListener):
-#        self._doorDebugListener = doorDebugListener
-#
-##    def sizeHint(self):
-##        return self.minimumSizeHint()
-##
-##    def minimumSizeHint(self):
-##        return Qt.QSize(600,150)
-#    
-#    def onDoorChanged(self, doorName):
-#        self.setDoorName(doorName)
-#        self.resetListeners()
-#    
-#    def resetListeners(self):
-#        
-#        if not self.doorDebugListener() is None:
-#            Qt.QObject.disconnect(self.doorDebugListener(),
-#                                      Qt.SIGNAL("doorDebugChanged"),
-#                                      self.onDoorDebugChanged)
-#            
-#        self.clear()
-#            
-#        self.setDoorDebugListener(DoorAttrListener("Debug"))
-#        
-#        Qt.QObject.connect(self.doorDebugListener(),
-#                               Qt.SIGNAL("doorDebugChanged"),
-#                               self.onDoorDebugChanged)
-#        
-#        self._doorDebugListener.setDoorName(self._doorName)
-#        
-#    def onDoorDebugChanged(self, eventValue):
-#        """call on debug attribute changed"""
-#        if eventValue is None: return
-#        for debugLine in eventValue: 
-#            self.append("DEBUG  " + debugLine)
-#        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())
-
-
-#class DoorResult(Qt.QTextEdit):
-#    
-#    def __init__(self, parent = None):
-#        Qt.QTextEdit.__init__(self, parent)
-#        
-#        self._doorName = None
-#
-#        self._doorResultListener = None
-#        
-#        self.setReadOnly(True)
-#        self.setFont(Qt.QFont("Courier",9))
-#        
-#    def doorName(self):
-#        return self._doorName
-#    
-#    def setDoorName(self, doorName):
-#        self._doorName = doorName
-#        
-#    def doorResultListener(self):
-#        return self._doorResultListener
-#    
-#    def setDoorResultListener(self, doorResultListener):
-#        self._doorResultListener = doorResultListener
-#
-##    def sizeHint(self):
-##        return self.minimumSizeHint()
-##
-##    def minimumSizeHint(self):
-##        return Qt.QSize(600,150)
-#    
-#    def onDoorChanged(self, doorName):
-#        self.setDoorName(doorName)
-#        self.resetListeners()
-#    
-#    def resetListeners(self):
-#        if not self.doorResultListener() is None:
-#            Qt.QObject.disconnect(self.doorResultListener(),
-#                                      Qt.SIGNAL("doorResultChanged"),
-#                                      self.onDoorResultChanged)
-#            
-#        self.clear()
-#            
-#        self.setDoorResultListener(DoorAttrListener("Result"))
-#        
-#        Qt.QObject.connect(self.doorResultListener(),
-#                               Qt.SIGNAL("doorResultChanged"),
-#                               self.onDoorResultChanged)
-#        
-#        self.doorResultListener().setDoorName(self.doorName())
-#        
-#    def onDoorResultChanged(self, eventValue):
-#        """call on result attribute changed"""
-#        if eventValue is None: return        
-#        for resultLine in eventValue:
-#            self.append("RESULT  " + resultLine)
-#        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())
         
 class DoorOutput(Qt.QTextEdit):
     """Widget used for displaying changes of door's attributes: Output, Info, Warning and Error."""
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/favouriteseditor.py b/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/favouriteseditor.py
index 64b964b..30f3b49 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/favouriteseditor.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/favouriteseditor.py
@@ -28,7 +28,7 @@ favouriteseditor.py:
 """
 import copy
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 from taurus.qt.qtgui.container import TaurusWidget
 from taurus.qt.qtcore.configuration import BaseConfigurableClass
 from model import MacrosListModel
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/model.py b/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/model.py
index 834afaf..1219cdc 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/model.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/favouriteseditor/model.py
@@ -27,11 +27,10 @@
 model.py: 
 """
 
-from PyQt4 import Qt
-
+from taurus.qt import Qt
 from taurus.core.util import etree
 
-from taurus.core.tango.macroserver import macro
+from taurus.core.tango.sardana import macro
         
 class MacrosListModel(Qt.QAbstractListModel):
         
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macrobutton.py b/lib/taurus/qt/qtgui/extra_macroexecutor/macrobutton.py
new file mode 100644
index 0000000..131dac1
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/macrobutton.py
@@ -0,0 +1,247 @@
+#!/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 import DEVICE_STATE_PALETTE
+
+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.TaurusEventType.Change, taurus.core.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):
+        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 != PyTango.DevState.ON 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']:
+            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 setButtonText(self, text):
+        # SHOULD ALSO BE POSSIBLE TO SET AN ICON
+        self.ui.button.setText(text)
+
+    def setMacroName(self, macro_name):
+        self.macro_name = macro_name
+
+    def setMacroArgs(self, args):
+        self.macro_args = args
+
+    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
+
+        macro_cmd = self.macro_name + ' ' + ' '.join(self.macro_args)
+        try:
+            self.door.runMacro(macro_cmd)
+        except Exception,e:
+            self.ui.button.setChecked(False)
+            raise e
+
+    def abort(self):
+        if self.door is None:
+            return
+        # 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)
+
+if __name__ == '__main__':
+    import sys
+    app = Qt.QApplication(sys.argv)
+
+    form = Qt.QWidget()
+    form.setLayout(Qt.QVBoxLayout())
+
+    macro_cmd = Qt.QLineEdit()
+    form.layout().addWidget(macro_cmd)
+
+    from taurus.qt.qtcore.tango.sardana.macroserver import registerExtensions
+    registerExtensions()
+    mb = MacroButton()
+    mb.setModel('door/gcuni/1')
+
+    form.layout().addWidget(mb)
+
+    result_label = Qt.QLabel()
+    form.layout().addWidget(result_label)
+
+    show_progress = Qt.QCheckBox('Progress')
+    show_progress.setChecked(True)
+    form.layout().addWidget(show_progress)
+
+    def update_macro(text):
+        splitted = map(str,text.split(' '))
+        macro_name = splitted[0]
+        macro_args = splitted[1:]
+
+        mb.setMacroName(macro_name)
+        mb.setMacroArgs(macro_args)
+
+        mb.setButtonText(macro_name)
+
+    def update_result(result):
+        result_label.setText(str(result))
+
+    def toggle_progress(showProgress):
+        visible = show_progress.isChecked()
+        mb.toggleProgress(visible)
+
+    Qt.QObject.connect(macro_cmd, Qt.SIGNAL('textChanged(QString)'), update_macro)
+    Qt.QObject.connect(mb, Qt.SIGNAL('resultUpdated'), update_result)
+    Qt.QObject.connect(show_progress, Qt.SIGNAL('stateChanged(int)'), toggle_progress)
+
+    macro_cmd.setText('ascan gc_dmot1 0 1 10 0.1')
+    form.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
index 1f011a0..7ed246e 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macrodescriptionviewer.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/macrodescriptionviewer.py
@@ -27,8 +27,7 @@
 macrodescriptionviewer.py: 
 """
 
-from PyQt4 import Qt
-#from PyQt4.Qt import *
+from taurus.qt import Qt
 
 from taurus.qt.qtgui.base import TaurusBaseWidget
 import taurus.core
@@ -81,7 +80,7 @@ class TaurusMacroDescriptionViewer(Qt.QTextEdit, TaurusBaseWidget):
                                          TaurusBaseWidget.resetUseParentModel)
     
 def test():
-    from taurus.core.tango.macroserver import registerExtensions
+    from taurus.core.tango.sardana.macroserver import registerExtensions
     import sys    
     registerExtensions()
     app = Qt.QApplication(sys.argv)
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macroeditor.py b/lib/taurus/qt/qtgui/extra_macroexecutor/macroeditor.py
index b1989ea..3aec5fb 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macroeditor.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/macroeditor.py
@@ -23,7 +23,8 @@
 ##
 #############################################################################
 
-from PyQt4 import Qsci, Qt
+from taurus.qt import Qt
+from PyQt4 import Qsci
 
 from taurus.qt.qtgui.resource import getThemeIcon
 
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macroexecutor.py b/lib/taurus/qt/qtgui/extra_macroexecutor/macroexecutor.py
index 3079c7b..e0536cc 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macroexecutor.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/macroexecutor.py
@@ -29,20 +29,22 @@ sequenceeditor.py:
 
 import sys
 from copy import deepcopy
-from PyQt4 import Qt
+
 import PyTango
 
+from taurus.qt import Qt
 from taurus import Device
 from taurus.qt.qtgui.container import TaurusWidget, TaurusMainWindow
 from taurus.qt.qtgui.display import TaurusLed
+from taurus.qt.qtgui.dialog import TaurusMessageBox
 
 from favouriteseditor import FavouritesMacrosEditor
 from common import MacroComboBox, MacroExecutionWindow, standardPlotablesFilter
 from taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor import ParamEditorManager, ParamEditorModel, StandardMacroParametersEditor
-from taurus.core.tango.macroserver import macro
+from taurus.core.tango.sardana.macro import MacroRunException
 
 
-from taurus.qt.qtgui.resource import getThemeIcon
+from taurus.qt.qtgui.resource import getIcon, getThemeIcon
 
         
 class MacroProgressBar(Qt.QProgressBar):
@@ -87,15 +89,15 @@ class TaurusMacroExecutorWidget(TaurusWidget):
         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(getThemeIcon("media-playback-stop"), "Stop", self)
+        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")
-        self.pauseMacroAction = Qt.QAction(getThemeIcon("media-playback-pause"), "Pause", self)
+        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")
-        self.playMacroAction = Qt.QAction(getThemeIcon("media-playback-start"), "Play", self)
+        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("Play")
+        self.playMacroAction.setToolTip("Start macro")
         
         actionsLayout = Qt.QHBoxLayout()
         actionsLayout.setContentsMargins(0,0,0,0)
@@ -122,23 +124,23 @@ class TaurusMacroExecutorWidget(TaurusWidget):
         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)
+        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)
-        
-        splitter = Qt.QSplitter(self)
-        splitter.setOrientation(Qt.Qt.Vertical)
-        splitter.addWidget(self.stackedWidget)
         splitter.addWidget(self.favouritesMacrosEditor) 
-        self.layout().addWidget(splitter)
         
         self.macroProgressBar = MacroProgressBar(self)
         self.layout().addWidget(self.macroProgressBar)
@@ -228,10 +230,18 @@ class TaurusMacroExecutorWidget(TaurusWidget):
             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())
-        if door.getState() == PyTango.DevState.ON:
+        doorState = door.state()
+        if doorState == PyTango.DevState.ON:
             paramEditorModel = self.paramEditorModel() 
             macroNode = paramEditorModel.root()
             id = macroNode.assignId()
@@ -243,21 +253,17 @@ class TaurusMacroExecutorWidget(TaurusWidget):
                 return
             door.runMacro(xmlString)
 #            door.runMacro(str(macroNode.name()), params)
-        else:
-            Qt.QMessageBox.warning(self,"Error while starting macro", 
-                                   "It was not possible to start macro, because state of the door was different than ON")
-    
-    def onResumeMacro(self):
-        door = Device(self.doorName())
-        if door.getState() == PyTango.DevState.STANDBY:
+        elif doorState == PyTango.DevState.STANDBY:
             door.command_inout("ResumeMacro")
         else:
-            Qt.QMessageBox.warning(self,"Error while resuming macro", 
-                                   "It was not possible to resume macro, because state of the door was different than STANDBY") 
+            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())
-        if door.getState() == PyTango.DevState.RUNNING or door.getState() == PyTango.DevState.STANDBY:
+        doorState = door.state()
+        
+        if doorState in (PyTango.DevState.RUNNING, PyTango.DevState.STANDBY):
             door.command_inout("Abort")
         else:
             Qt.QMessageBox.warning(self,"Error while stopping macro", 
@@ -265,7 +271,9 @@ class TaurusMacroExecutorWidget(TaurusWidget):
     
     def onPauseMacro(self):
         door = Device(self.doorName())
-        if door.getState() == PyTango.DevState.RUNNING:
+        doorState = door.state()
+        
+        if doorState == PyTango.DevState.RUNNING:
             door.command_inout("PauseMacro")
         else:
             Qt.QMessageBox.warning(self,"Error while pausing macro", 
@@ -274,13 +282,14 @@ class TaurusMacroExecutorWidget(TaurusWidget):
     #@Qt.pyqtSignature("macroStatusUpdated")
     def onMacroStatusUpdated(self, data):
         macro = data[0]
-        data = data[1]
-        if macro is None: return
-        data = data[0]
+        if macro is None: return        
+        data = data[1][0]
         state, range, step, id = data["state"], data["range"], data["step"], data["id"]
         id = int(id)
         if id != self.macroId(): return
-        elif state == "start":
+        macroName = macro.name
+        shortMessage = ""
+        if state == "start":
             self.emit(Qt.SIGNAL("macroStarted"), "DoorOutput")
             self.macroProgressBar.setRange(range[0], range[1])
             self.playMacroAction.setEnabled(False)
@@ -288,46 +297,48 @@ class TaurusMacroExecutorWidget(TaurusWidget):
             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.playAction2resumeAction()
+            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.resumeAction2playAction()
+            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":
             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 playAction2resumeAction(self):
-        Qt.QObject.disconnect(self.playMacroAction,
-                                      Qt.SIGNAL("triggered()"),
-                                      self.onPlayMacro)
-        Qt.QObject.connect(self.playMacroAction,
-                                      Qt.SIGNAL("triggered()"),
-                                      self.onResumeMacro)
-        self.playMacroAction.setToolTip("Resume macro")
-        self.playMacroAction.setStatusTip("Resume macro")
-        self.playMacroAction.setText("Resume macro")
-            
-    def resumeAction2playAction(self):
-        Qt.QObject.disconnect(self.playMacroAction,
-                                      Qt.SIGNAL("triggered()"),
-                                      self.onResumeMacro)
-        Qt.QObject.connect(self.playMacroAction,
-                                      Qt.SIGNAL("triggered()"),
-                                      self.onPlayMacro)
-        self.playMacroAction.setToolTip("Play macro")
-        self.playMacroAction.setStatusTip("Play macro")
-        self.playMacroAction.setText("Play macro")
 
     def setModel(self, model):
         TaurusWidget.setModel(self, model)
@@ -350,6 +361,8 @@ class TaurusMacroExecutor(MacroExecutionWindow):
         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)
@@ -385,17 +398,17 @@ def createMacroExecutorWidget(args):
 
 def createMacroExecutor(args):
     macroExecutor = TaurusMacroExecutor()
-    macroExecutor.setCustomMacroEditorPaths("/home/zreszela/workspace/Taurus/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors")
+    macroExecutor.setCustomMacroEditorPaths("/home/zreszela/workspace/taurus/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors")
     macroExecutor.setModelInConfig(True)
     Qt.QObject.connect(macroExecutor, Qt.SIGNAL("doorChanged"), macroExecutor.onDoorChanged)
+    args=['macroserver/cp1/1','door/cp1/1'] ###@todo:JUST FOR DEBUGGING
     if len(args) == 2:
         macroExecutor.setModel(args[0])
         macroExecutor.emit(Qt.SIGNAL('doorChanged'),args[1])
     macroExecutor.loadSettings()
     return macroExecutor
     
-        
-if __name__ == "__main__": 
+def main():
     from taurus.qt.qtgui.application import TaurusApplication  
     
     app = TaurusApplication(sys.argv)
@@ -405,4 +418,7 @@ if __name__ == "__main__":
     app.setApplicationName("macroexecutor")
     macroExecutor = createMacroExecutor(args)
     macroExecutor.show()
-    sys.exit(app.exec_())
\ No newline at end of file
+    sys.exit(app.exec_())
+        
+if __name__ == "__main__": 
+    main()
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors/senv.py b/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors/senv.py
index 6b37380..bb3ec38 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors/senv.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/customeditors/senv.py
@@ -23,13 +23,11 @@
 ##
 #############################################################################
 
-from PyQt4 import Qt
-
-
-
+from taurus.qt import Qt
 from taurus.qt.qtgui.input import TaurusAttrListComboBox
 from taurus.qt.qtgui.tree import TaurusDbTreeWidget
-from taurus.core import TaurusElementType
+from taurus import Database
+from taurus.core import TaurusElementType, TaurusAttrInfo
 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
@@ -198,9 +196,20 @@ 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() == 2:
+        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")
@@ -216,7 +225,15 @@ class ExtraColumnsDelegate(Qt.QItemDelegate):
             Qt.QItemDelegate.setEditorData(self, editor, index)
             
     def setModelData(self, editor, model, index):
-        if index.column() == 2:
+        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)
@@ -304,9 +321,9 @@ class ExtraColumnsModel(Qt.QAbstractTableModel):
             row = index.row()
             column = index.column()
             value = unicode(value.toString())  
-            if column == 0: self.__columns[row]['label'] = value
-            elif column == 1: self.__columns[row]['model'] = value
-            elif column == 2: self.__columns[row]['instrument'] = value                
+            if column == 0: self.__columns[row]['label'] = str(value)
+            elif column == 1: self.__columns[row]['model'] = str(value)
+            elif column == 2: self.__columns[row]['instrument'] = str(value)                
             self.emit(Qt.SIGNAL("dataChanged(QModelIndex,QModelIndex)"),index, index)
             return True
         return False
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/delegate.py b/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/delegate.py
index 0bbc882..8a17fec 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/delegate.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/delegate.py
@@ -27,12 +27,12 @@
 delegate.py: 
 """
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 from parameditors import MSAttrListComboBoxParam, SpinBoxParam, \
     DoubleSpinBoxParam, LineEditParam, FileDialogParam
 from taurus.qt.qtgui.extra_macroexecutor import globals
-from taurus.core.tango.macroserver import macro
+from taurus.core.tango.sardana import macro
 
 class ParamEditorDelegate(Qt.QStyledItemDelegate):
         
@@ -47,7 +47,8 @@ class ParamEditorDelegate(Qt.QStyledItemDelegate):
                 if paramType in globals.EDITOR_COMBOBOX_PARAMS:
                     comboBox = MSAttrListComboBoxParam(parent, node)
                     comboBox.setUseParentModel(True)
-                    comboBox.setModel("/" + paramType + "List")
+                    comboBox.setElementType(paramType)
+                    comboBox.setModel('/elements')
                     return comboBox
                 elif paramType in globals.EDITOR_SPINBOX_PARAMS:
                     return SpinBoxParam(parent, node)
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/macroparameterseditor.py b/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/macroparameterseditor.py
index 0c423c8..d35c324 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/macroparameterseditor.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/macroparameterseditor.py
@@ -28,10 +28,9 @@ macroparameterseditor.py:
 """
 import sys, inspect, glob
 
-from PyQt4 import Qt
-
+from taurus.qt import Qt
 from taurus.core.util import Singleton
-from taurus.core.tango.macroserver import macro
+from taurus.core.tango.sardana import macro
 from taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.delegate import ParamEditorDelegate
 
 
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/model.py b/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/model.py
index f2fc6a7..660a994 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/model.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/model.py
@@ -26,9 +26,9 @@
 """
 model.py: 
 """
-from PyQt4 import Qt
+from taurus.qt import Qt
 from taurus.core.util import etree
-from taurus.core.tango.macroserver import macro
+from taurus.core.tango.sardana import macro
 from taurus.qt.qtgui.extra_macroexecutor import globals
 
 
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/parameditors.py b/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/parameditors.py
index d27e7e7..fbfcdce 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/parameditors.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/macroparameterseditor/parameditors.py
@@ -29,8 +29,7 @@ parameditors.py:
 
 import os
 
-from PyQt4 import Qt
-
+from taurus.qt import Qt
 from taurus.qt.qtgui.input import TaurusAttrListComboBox
 
 from taurus.qt.qtgui.extra_macroexecutor import globals
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/scanplotter.py b/lib/taurus/qt/qtgui/extra_macroexecutor/scanplotter.py
index 344656f..d3bff26 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/scanplotter.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/scanplotter.py
@@ -35,8 +35,9 @@ scanplotter.py:
 import taurus
 import taurus.core
 
-from PyQt4 import QtGui, QtCore, Qwt5
-from PyQt4.Qt import *
+from taurus.qt import QtGui, QtCore
+from taurus.qt.Qt import *
+from PyQt4 import Qwt5
 
 from taurus.qt.qtgui.plot import TaurusTrend
 
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py b/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
index d50df2e..17d48a1 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
@@ -27,4 +27,4 @@
 __init__.py: 
 """
 
-from sequenceeditor import TaurusSequencer, TaurusSequencerWidget
\ No newline at end of file
+from sequenceeditor import TaurusSequencer, TaurusSequencerWidget, main
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/delegate.py b/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/delegate.py
index 2e413b8..b5b8d7c 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/delegate.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/delegate.py
@@ -27,12 +27,12 @@
 delegate.py: 
 """
 
-from PyQt4 import Qt
+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.macroserver import macro  
+from taurus.core.tango.sardana import macro  
 
 class SequenceEditorDelegate(Qt.QItemDelegate):
     
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/model.py b/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/model.py
index 2fad638..caeb910 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/model.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/model.py
@@ -27,9 +27,9 @@
 model.py: 
 """
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 from taurus.core.util import etree
-from taurus.core.tango.macroserver import macro
+from taurus.core.tango.sardana import macro
 
 class MacroSequenceTreeModel(Qt.QAbstractItemModel):
     
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/sequenceeditor.py b/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/sequenceeditor.py
index 8f0d6d2..b9564f7 100644
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/sequenceeditor.py
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/sequenceeditor.py
@@ -28,7 +28,7 @@ sequenceeditor.py:
 """
 import os, sys
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 import PyTango
 
 from taurus.core.util import etree
@@ -38,15 +38,16 @@ 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.macroserver import macro
+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 getThemeIcon
+from taurus.qt.qtgui.resource import getIcon, getThemeIcon
 
 
 class HookAction(Qt.QAction):
@@ -121,16 +122,16 @@ class MacroSequenceTree(Qt.QTreeView, BaseConfigurableClass):
         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, macro.MacroNode): return
+        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, macro.MacroNode): return
+        if not isinstance(parentNode, MacroNode): return
         allowedHooks = parentNode.allowedHookPlaces()
         if allowedHooks:
-            hooksSubmenu = contextMenu.addMenu("Hooks")
+            hookPlacesSubmenu = contextMenu.addMenu("Hook places")
             for allowedHook in allowedHooks:
                 action = HookAction(allowedHook, self, node)
-                hooksSubmenu.addAction(action)
+                hookPlacesSubmenu.addAction(action)
         contextMenu.exec_(event.globalPos())
 
 #    def setHint(self, add):
@@ -341,21 +342,21 @@ class TaurusSequencerWidget(TaurusWidget):
         saveSequenceButton.setDefaultAction(self.saveSequenceAction)
         actionsLayout.addWidget(saveSequenceButton)
         
-        self.stopSequenceAction = Qt.QAction(getThemeIcon("media-playback-stop"), "Stop", self)
+        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(getThemeIcon("media-playback-pause"), "Pause", self)
+        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(getThemeIcon("media-playback-start"), "Play", self)
+        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()
@@ -496,7 +497,6 @@ class TaurusSequencerWidget(TaurusWidget):
         self.emit(Qt.SIGNAL("currentMacroChanged"), None)
     
     def onOpenSequence(self):
-
         if not self._sequenceModel.isEmpty():
             if Qt.QMessageBox.question(self,
                                        "Open sequence", 
@@ -527,6 +527,7 @@ class TaurusSequencerWidget(TaurusWidget):
             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()
@@ -561,7 +562,8 @@ class TaurusSequencerWidget(TaurusWidget):
             
     def onPlaySequence(self):
         door = Device(self.doorName())
-        if door.getState() == PyTango.DevState.ON:
+        doorState = door.state()
+        if doorState == PyTango.DevState.ON:
             first, last, ids = self.tree.prepareMacroIds()
             self.setFirstMacroId(first)
             self.setLastMacroId(last)
@@ -570,21 +572,16 @@ class TaurusSequencerWidget(TaurusWidget):
             self.tree.prepareMacroProgresses()
             self.setEmitExecutionStarted(True)
             door.runMacro(self.tree.toXmlString())
-        else:
-            Qt.QMessageBox.warning(self,"Error while starting sequence", 
-                                   "It was not possible to start sequence, because state of the door was different than ON")
-    
-    def onResumeSequence(self):
-        door = Device(self.doorName())
-        if door.getState() == PyTango.DevState.STANDBY:
+        elif doorState == PyTango.DevState.STANDBY:
             door.command_inout("ResumeMacro")
         else:
-            Qt.QMessageBox.warning(self,"Error while resuming sequence", 
-                                   "It was not possible to resume sequence, because state of the door was different than STANDBY")
+            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())
-        if door.getState() == PyTango.DevState.RUNNING or door.getState() == PyTango.DevState.STANDBY:
+        doorState = door.state() 
+        if doorState in (PyTango.DevState.RUNNING,PyTango.DevState.STANDBY):
             door.command_inout("Abort")
         else:
             Qt.QMessageBox.warning(self,"Error while stopping sequence", 
@@ -592,7 +589,8 @@ class TaurusSequencerWidget(TaurusWidget):
     
     def onPauseSequence(self):
         door = Device(self.doorName())
-        if door.getState() == PyTango.DevState.RUNNING:
+        doorState = door.state()
+        if doorState == PyTango.DevState.RUNNING:
             door.command_inout("PauseMacro")
         else:
             Qt.QMessageBox.warning(self,"Error while pausing sequence", 
@@ -600,13 +598,13 @@ class TaurusSequencerWidget(TaurusWidget):
         
     def onMacroStatusUpdated(self, data):
         macro = data[0]
-        data = data[1]
-        if macro is None:
-            return
-        data = data[0]
+        if macro is None: return
+        data = data[1][0]
         state, range, step, id = str(data["state"]), data["range"], data["step"], data["id"]
         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(): 
@@ -618,20 +616,47 @@ class TaurusSequencerWidget(TaurusWidget):
             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.playAction2resumeAction()
+            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.resumeAction2playAction()
+            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":
+            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):
@@ -640,6 +665,19 @@ class TaurusSequencerWidget(TaurusWidget):
             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()
@@ -676,6 +714,7 @@ class TaurusSequencerWidget(TaurusWidget):
         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
@@ -696,28 +735,6 @@ class TaurusSequencerWidget(TaurusWidget):
             macroServerObj.fillMacroNodeAdditionalInfos(macroNode)
         return newRoot
     
-    def playAction2resumeAction(self):
-        Qt.QObject.disconnect(self.playSequenceAction,
-                                      Qt.SIGNAL("triggered()"),
-                                      self.onPlaySequence)
-        Qt.QObject.connect(self.playSequenceAction,
-                                      Qt.SIGNAL("triggered()"),
-                                      self.onResumeSequence)
-        self.playSequenceAction.setToolTip("Resume sequence")
-        self.playSequenceAction.setStatusTip("Resume sequence")
-        self.playSequenceAction.setText("Resume sequence")
-            
-    def resumeAction2playAction(self):
-        Qt.QObject.disconnect(self.playSequenceAction,
-                                      Qt.SIGNAL("triggered()"),
-                                      self.onResumeSequence)
-        Qt.QObject.connect(self.playSequenceAction,
-                                      Qt.SIGNAL("triggered()"),
-                                      self.onPlaySequence)
-        self.playSequenceAction.setToolTip("Play sequence")
-        self.playSequenceAction.setStatusTip("Play sequence")
-        self.playSequenceAction.setText("Play sequence")
-
     @classmethod
     def getQtDesignerPluginInfo(cls):
         ret = TaurusWidget.getQtDesignerPluginInfo()
@@ -738,6 +755,8 @@ class TaurusSequencer(MacroExecutionWindow):
         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)
@@ -782,8 +801,11 @@ def createSequencer(args):
     sequencer.loadSettings()
     return sequencer
       
-if __name__ == "__main__":
+def main():      
     from taurus.qt.qtgui.application import TaurusApplication
+#    from rfoo.utils import rconsole
+#    rconsole.spawn_server()
+    
     app = TaurusApplication(sys.argv)
     args = app.get_command_line_args()
 
@@ -791,4 +813,7 @@ if __name__ == "__main__":
     app.setApplicationName(globals.SEQUENCER_APPLICATION_NAME)
     sequencer = createSequencer(args)
     sequencer.show()
-    sys.exit(app.exec_())
\ No newline at end of file
+    sys.exit(app.exec_())  
+    
+if __name__ == "__main__":
+    main()
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/ui/compile_UIs.sh b/lib/taurus/qt/qtgui/extra_macroexecutor/ui/compile_UIs.sh
new file mode 100755
index 0000000..7012ce9
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/ui/compile_UIs.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+pyuic4 macrobutton.ui -o ../ui_macrobutton.py
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/ui/macrobutton.ui b/lib/taurus/qt/qtgui/extra_macroexecutor/ui/macrobutton.ui
new file mode 100644
index 0000000..6d79c0e
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/ui/macrobutton.ui
@@ -0,0 +1,93 @@
+<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
new file mode 100644
index 0000000..9e6e45e
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_macroexecutor/ui_macrobutton.py
@@ -0,0 +1,61 @@
+# -*- 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 803d1d4..fb15844 100644
--- a/lib/taurus/qt/qtgui/extra_nexus/taurusnexuswidget.py
+++ b/lib/taurus/qt/qtgui/extra_nexus/taurusnexuswidget.py
@@ -27,9 +27,14 @@
 nexusWidget.py: 
 """
 
-from PyMca import HDF5Widget, HDF5Info, HDF5DatasetTable
-from PyQt4 import Qt
+__all__=["TaurusNexusBrowser"]
+
 import numpy
+import posixpath
+
+from PyMca import HDF5Widget, HDF5Info, HDF5DatasetTable
+from taurus.qt import Qt
+
 from taurus.qt.qtgui.container import TaurusWidget
 from taurus.qt.qtgui.plot import TaurusPlot
 import taurus.qt.qtgui.resource
@@ -97,7 +102,7 @@ class TaurusNeXusBrowser(TaurusWidget):
         
         #configuration
         self.registerConfigProperty(self.togglePreviewAction.isChecked, self.togglePreviewAction.setChecked, 'showPreview')
-       
+    
     def openFile(self, fname=None):
         if fname is None:
             fname = unicode(Qt.QFileDialog.getOpenFileName(self, "Choose NeXus File","/home/cpascual/local/tmp/scantest.h5"))#@TODO!!
@@ -129,6 +134,39 @@ class TaurusNeXusBrowser(TaurusWidget):
             w.setInfoDict(info)
         return w
     
+    def neXusWidget(self):
+        return self.treeWidget
+    
+    def findNodeIndex(self, filename, nodename):
+        nexus_widget = self.neXusWidget()
+        file_model = nexus_widget.model()
+        
+        for node in file_model.rootItem.children:
+            if node.file.filename == filename:
+                file_node = node
+                break
+        else:
+            raise Exception("Could not find file %s" % filename)
+        
+        index = file_model.index(file_node.row, 0, Qt.QModelIndex())
+        
+        node_parts = nodename.split(posixpath.sep)
+        while node_parts:
+            name = posixpath.basename(node_parts.pop(0))
+            for child in node.children:
+                child_name = posixpath.basename(child.name)
+                if child_name == name:
+                    node = child
+                    index = file_model.index(node.row, 0, index)
+                    break
+            else:
+                raise Exception("Could not find node %s in %s" % (name, filename))
+        return index
+    
+    def setCurrentNode(self, filename, nodename):
+        index = self.findNodeIndex(filename, nodename)
+        self.setCurrentIndex(index)
+    
     @classmethod
     def getQtDesignerPluginInfo(cls):
         ret = TaurusWidget.getQtDesignerPluginInfo()
@@ -137,7 +175,8 @@ class TaurusNeXusBrowser(TaurusWidget):
         ret['container'] = False
         ret['group'] = 'Taurus Composite Widgets'
         return ret
-        
+    
+    
         
 if __name__ == "__main__":
     import sys
diff --git a/lib/taurus/qt/qtgui/extra_pool/__init__.py b/lib/taurus/qt/qtgui/extra_pool/__init__.py
index 2348e92..74b8e08 100644
--- a/lib/taurus/qt/qtgui/extra_pool/__init__.py
+++ b/lib/taurus/qt/qtgui/extra_pool/__init__.py
@@ -28,5 +28,8 @@ __init__.py:
 """
 
 from motor import TaurusMotorH, TaurusMotorH2, TaurusMotorV, TaurusMotorV2
-from poolmotor import PoolMotorSlim
-from poolchannel import PoolChannel
+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
diff --git a/lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh b/lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh
index b06a551..0180baf 100755
--- a/lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh
+++ b/lib/taurus/qt/qtgui/extra_pool/compile_UIs.sh
@@ -29,3 +29,4 @@ taurusuic4 -x ui/TaurusMotorV.ui -o ui_taurusmotorv.py
 taurusuic4 -x ui/TaurusMotorV2.ui -o ui_taurusmotorv2.py
 
 taurusuic4 -x ui/PoolMotorSlim.ui -o ui_poolmotorslim.py
+pyuic4 -x ui/poolioregisterbuttons.ui -o ui_poolioregisterbuttons.py
diff --git a/lib/taurus/qt/qtgui/extra_pool/motor.py b/lib/taurus/qt/qtgui/extra_pool/motor.py
index d48a243..889b3e2 100644
--- a/lib/taurus/qt/qtgui/extra_pool/motor.py
+++ b/lib/taurus/qt/qtgui/extra_pool/motor.py
@@ -28,7 +28,7 @@ motor.py:
 """
 
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 from taurus.qt.qtgui.base import TaurusBaseWidget
 from ui_taurusmotorh import Ui_TaurusMotorH
 from ui_taurusmotorh2 import Ui_TaurusMotorH2
diff --git a/lib/taurus/qt/qtgui/extra_pool/poolchannel.py b/lib/taurus/qt/qtgui/extra_pool/poolchannel.py
index c274481..d8b32a5 100644
--- a/lib/taurus/qt/qtgui/extra_pool/poolchannel.py
+++ b/lib/taurus/qt/qtgui/extra_pool/poolchannel.py
@@ -26,16 +26,64 @@
 """
 channelWidgets.py: 
 """
-
-from PyQt4 import Qt
+__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):
+        TaurusValue.setModel(self, "%s/value"%model) #@todo: change this (it assumes tango naming!)
+
+    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'''
+    ''' A widget that displays and controls a pool channel device
+    
+    .. seealso:: :class:`PoolChannelTV`
+    '''
     def __init__(self, parent = None, designMode = False):
         TaurusWidget.__init__(self, parent)
         
@@ -75,4 +123,4 @@ if __name__ == '__main__':
     
      
     form.show()
-    sys.exit(app.exec_())
\ No newline at end of file
+    sys.exit(app.exec_())
diff --git a/lib/taurus/qt/qtgui/extra_pool/poolioregister.py b/lib/taurus/qt/qtgui/extra_pool/poolioregister.py
new file mode 100644
index 0000000..bcf2326
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_pool/poolioregister.py
@@ -0,0 +1,295 @@
+#!/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
+    ##########################################################
+
+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)
+
+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
index b7af863..26a44cf 100644
--- a/lib/taurus/qt/qtgui/extra_pool/poolmotor.py
+++ b/lib/taurus/qt/qtgui/extra_pool/poolmotor.py
@@ -28,27 +28,32 @@ import copy
 import PyTango
 import numpy
 
-from PyQt4 import QtCore, QtGui, Qt
+from taurus.qt import Qt
 
 import taurus
 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.display import TaurusConfigLabel
+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 ui_poolmotorslim import Ui_PoolMotorSlim
 
 
-class LimitsListener(QtCore.QObject):
+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):
-        QtCore.QObject.__init__(self)
-        
+        Qt.QObject.__init__(self)
+
     def eventReceived(self, evt_src, evt_type, evt_value):
         if evt_type not in [taurus.core.TaurusEventType.Change, taurus.core.TaurusEventType.Periodic]:
             return
@@ -74,15 +79,15 @@ class PoolMotorClient():
             self.has_encoder = hasattr(self.motor_dev, 'Encoder')
         except Exception,e:
             print 'EXCEPTION CREATING MOTOR DEVICE...\n'+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
@@ -95,7 +100,7 @@ class PoolMotorClient():
         except Exception,e:
             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
@@ -118,7 +123,7 @@ class PoolMotorClient():
 class LabelWidgetDragsDeviceAndAttribute(DefaultLabelWidget):
     """ Offer richer mime data with taurus-device, taurus-attribute, and plain-text. """
     def mouseMoveEvent(self, event):
-        model = self.taurusValueBuddy.getModelName()
+        model = self.taurusValueBuddy().getModelName()
         mimeData = Qt.QMimeData()
         mimeData.setText(self.text())
         attr_name = model
@@ -130,13 +135,13 @@ class LabelWidgetDragsDeviceAndAttribute(DefaultLabelWidget):
         drag.setMimeData(mimeData)
         drag.setHotSpot(event.pos() - self.rect().topLeft())
         dropAction = 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()
@@ -155,7 +160,7 @@ class PoolMotorConfigurationForm(TaurusAttrForm):
             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
@@ -165,7 +170,7 @@ class PoolMotorConfigurationForm(TaurusAttrForm):
             if controllerName.lower() == controllerInfos[0].lower():
                 controllerType = controllerInfos[1][1:-1].split("/")[0]
         return controllerType
-    
+
     def getDisplayAttributes(self, controllerType):
         attributes = ['position',
                       'state', 
@@ -178,7 +183,7 @@ class PoolMotorConfigurationForm(TaurusAttrForm):
                       'sign', 
                       'offset',  
                       'backlash'] 
-        
+
         if controllerType == "IcePAPCtrl.IcepapController":
             attributes.insert(1,"encoder")
             attributes.extend(['frequency', 
@@ -193,7 +198,7 @@ class PoolMotorConfigurationForm(TaurusAttrForm):
                                'statuslim-', 
                                'statuslim+', 
                                'statushome'])
-            
+
         elif controllerType == "PmacCtrl.PmacController":
             attributes.extend(["motoractivated", 
                                "negativeendlimitset", 
@@ -267,26 +272,26 @@ class PoolMotorConfigurationForm(TaurusAttrForm):
                                "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.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(QtGui.QWidget, 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()
@@ -302,12 +307,14 @@ class PoolMotorSlim(TaurusWidget, PoolMotorClient):
         self.taurus_value.setLabelConfig('dev_alias')
 
         self.taurus_value_enc = TaurusValue(self.ui.taurusValueContainer)
-        self.taurus_value_enc.readWidget().setShowQuality(False)
 
         # THIS WILL BE DONE IN THE DESIGNER
         # Config Button will launch a PoolMotorConfigurationForm
-        taurus_attr_form = 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)
@@ -346,7 +353,7 @@ class PoolMotorSlim(TaurusWidget, PoolMotorClient):
         self.ui.btnMin.setIcon(taurus.qt.qtgui.resource.getIcon(':/actions/list-remove.svg'))
         self.ui.btnMax.setText('')
         self.ui.btnMax.setIcon(taurus.qt.qtgui.resource.getIcon(':/actions/list-add.svg'))
-        
+
         self.ui.btnGoToNeg.setText('')
         self.ui.btnGoToNeg.setIcon(taurus.qt.qtgui.resource.getIcon(':/actions/media_skip_backward.svg'))
         self.ui.btnGoToNegPress.setText('')
@@ -366,26 +373,26 @@ class PoolMotorSlim(TaurusWidget, PoolMotorClient):
         self.ui.btnCfg.setText('')
         self.ui.btnCfg.setIcon(taurus.qt.qtgui.resource.getIcon(':/categories/preferences-system.svg'))
         #################################################################################################################
-        
 
-        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)
+
+        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, QtCore.SIGNAL('clicked()'), taurus_attr_form._updateAttrWidgets)
-        self.connect(self.ui.btnCfg, QtCore.SIGNAL('clicked()'), self.buildBetterCfgDialogTitle)
+        self.connect(self.ui.btnCfg, Qt.SIGNAL('clicked()'), taurus_attr_form._updateAttrWidgets)
+        self.connect(self.ui.btnCfg, Qt.SIGNAL('clicked()'), self.buildBetterCfgDialogTitle)
 
         #################################################################################################################
         ########################################
@@ -413,8 +420,8 @@ class PoolMotorSlim(TaurusWidget, PoolMotorClient):
         self.ui.btnGoToPos.setEnabled(enabled)
         self.ui.btnGoToPosPress.setEnabled(enabled)
         self.ui.btnGoToPosInc.setEnabled(enabled)
-        
-        
+
+
         neg_lim = limits[2]
         neg_btnstylesheet = ''
         enabled = True
@@ -427,14 +434,14 @@ class PoolMotorSlim(TaurusWidget, PoolMotorClient):
         self.ui.btnGoToNegInc.setEnabled(enabled)
 
     #def sizeHint(self):
-    #    return QtCore.QSize(300,30)
+    #    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
@@ -475,7 +482,7 @@ class PoolMotorSlim(TaurusWidget, PoolMotorClient):
         action_encoder = Qt.QAction(self)
         action_encoder.setText('Encoder Read')
         action_encoder.setCheckable(True)
-        action_encoder.setChecked(self.taurus_value_enc.labelWidget().isVisible())
+        action_encoder.setChecked(self.taurus_value_enc.isVisible())
         if self.has_encoder:
             menu.addAction(action_encoder)
 
@@ -490,31 +497,31 @@ class PoolMotorSlim(TaurusWidget, PoolMotorClient):
         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_encoder, QtCore.SIGNAL('toggled(bool)'), self.toggleEncoder)
-        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)
-        
+
+        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):
@@ -552,11 +559,7 @@ class PoolMotorSlim(TaurusWidget, PoolMotorClient):
         self.ui.btnGoToPos.setVisible(visible)
 
     def toggleEncoder(self, visible):
-        if self.has_encoder and visible:
-            self.taurus_value_enc.setModel(self.motor_dev.getSimpleName()+'/Encoder')
-        else:
-            # NOT SURE ENOUGH THAT THIS IS SAFE
-            self.taurus_value_enc.destroy()
+        self.taurus_value_enc.setVisible(visible)
 
     def toggleStopMove(self, visible):
         self.ui.btnStop.setVisible(visible)
@@ -572,7 +575,7 @@ class PoolMotorSlim(TaurusWidget, PoolMotorClient):
 
     def dragEnterEvent(self, event):
         event.accept()
-        
+
     def dropEvent(self, event):
         mimeData = event.mimeData()
         if mimeData.hasFormat(taurus.qt.qtcore.mimetypes.TAURUS_DEV_MIME_TYPE):
@@ -603,7 +606,7 @@ class PoolMotorSlim(TaurusWidget, PoolMotorClient):
         ret['icon'] = ':/designer/extra_pool.png'
         ret['container'] = False
         return ret
-    
+
     def showEvent(self, event):
         TaurusWidget.showEvent(self, event)
         self.motor_dev.getAttribute('Position').enablePolling(force=True)
@@ -615,11 +618,11 @@ class PoolMotorSlim(TaurusWidget, PoolMotorClient):
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     # QT properties 
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    @QtCore.pyqtSignature("getModel()")
+    @Qt.pyqtSignature("getModel()")
     def getModel(self):
         return self.ui.motorGroupBox.getModel()
 
-    @QtCore.pyqtSignature("setModel(QString)")
+    @Qt.pyqtSignature("setModel(QString)")
     def setModel(self, model):
         # DUE TO A BUG IN TAUGROUPBOX, WE NEED THE FULL MODEL NAME
         try:
@@ -630,7 +633,7 @@ class PoolMotorSlim(TaurusWidget, PoolMotorClient):
             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
@@ -639,11 +642,12 @@ class PoolMotorSlim(TaurusWidget, PoolMotorClient):
             # 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
@@ -656,16 +660,16 @@ class PoolMotorSlim(TaurusWidget, PoolMotorClient):
             except:
                 pass
             self.registerConfigProperty(self.taurus_value.writeWidget().isVisible, self.toggleMoveAbsolute, 'MoveAbsolute')
-            self.registerConfigProperty(self.taurus_value_enc.labelWidget().isVisible, self.toggleEncoder, 'Encoder')
+            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, QtCore.SIGNAL('updateLimits(PyQt_PyObject)'), self.updateLimits)
+            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')
@@ -676,81 +680,738 @@ class PoolMotorSlim(TaurusWidget, PoolMotorClient):
             self.ui.btnMax.setVisible(limits_visible)
         except Exception,e:
             self.ui.motorGroupBox.setEnabled(False)
-            print 'Some exception while setting model',model
-            print 'Exception was:',e
-        
-    @QtCore.pyqtSignature("resetModel()")
+            self.info('Error setting model "%s". Reason: %s'%(model, repr(e)))
+            self.traceback()
+
+    @Qt.pyqtSignature("resetModel()")
     def resetModel(self):
         self.ui.motorGroupBox.resetModel()
 
-    @QtCore.pyqtSignature("getShowContextMenu()")
+    @Qt.pyqtSignature("getShowContextMenu()")
     def getShowContextMenu(self):
         return self.show_context_menu
 
-    @QtCore.pyqtSignature("setShowContextMenu(bool)")
+    @Qt.pyqtSignature("setShowContextMenu(bool)")
     def setShowContextMenu(self, showContextMenu):
         self.show_context_menu = showContextMenu
 
-    @QtCore.pyqtSignature("resetShowContextMenu()")
+    @Qt.pyqtSignature("resetShowContextMenu()")
     def resetShowContextMenu(self):
         self.show_context_menu = True
 
-    @QtCore.pyqtSignature("getStepSize()")
+    @Qt.pyqtSignature("getStepSize()")
     def getStepSize(self):
         return self.ui.inc.value()
 
-    @QtCore.pyqtSignature("setStepSize(double)")
+    @Qt.pyqtSignature("setStepSize(double)")
     def setStepSize(self, stepSize):
         self.ui.inc.setValue(stepSize)
 
-    @QtCore.pyqtSignature("resetStepSize()")
+    @Qt.pyqtSignature("resetStepSize()")
     def resetStepSize(self):
         self.setStepSize(1)
 
-    @QtCore.pyqtSignature("getStepSizeIncrement()")
+    @Qt.pyqtSignature("getStepSizeIncrement()")
     def getStepSizeIncrement(self):
         return self.ui.inc.singleStep()
 
-    @QtCore.pyqtSignature("setStepSizeIncrement(double)")
+    @Qt.pyqtSignature("setStepSizeIncrement(double)")
     def setStepSizeIncrement(self, stepSizeIncrement):
         self.ui.inc.setSingleStep(stepSizeIncrement)
 
-    @QtCore.pyqtSignature("resetStepSizeIncrement()")
+    @Qt.pyqtSignature("resetStepSizeIncrement()")
     def resetStepSizeIncrement(self):
         self.setStepSizeIncrement(1)
 
-    model = QtCore.pyqtProperty("QString", getModel,setModel,resetModel)
-    stepSize = QtCore.pyqtProperty("double", getStepSize,setStepSize,resetStepSize)
-    stepSizeIncrement = QtCore.pyqtProperty("double", getStepSizeIncrement,setStepSizeIncrement,resetStepSizeIncrement)
+    model = Qt.pyqtProperty("QString", getModel,setModel,resetModel)
+    stepSize = Qt.pyqtProperty("double", getStepSize,setStepSize,resetStepSize)
+    stepSizeIncrement = Qt.pyqtProperty("double", getStepSizeIncrement,setStepSizeIncrement,resetStepSizeIncrement)
 
 
-def main():
+
+################################################################################################
+# 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 [taurus.core.TaurusEventType.Change, taurus.core.TaurusEventType.Periodic]:
+            return
+        value = evt_value.value
+        self.emit(Qt.SIGNAL('eventReceived(PyQt_PyObject)'), 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(taurus.qt.qtgui.resource.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.qt.qtcore.mimetypes.TAURUS_DEV_MIME_TYPE, dev_name)
+        mimeData.setData(taurus.qt.qtcore.mimetypes.TAURUS_ATTR_MIME_TYPE, attr_name)
     
+        drag = Qt.QDrag(self)
+        drag.setMimeData(mimeData)
+        drag.setHotSpot(event.pos() - self.rect().topLeft())
+        dropAction = 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(taurus.qt.qtgui.resource.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(taurus.qt.qtgui.resource.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(taurus.qt.qtgui.resource.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(taurus.qt.qtgui.resource.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(taurus.qt.qtgui.resource.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(taurus.qt.qtgui.resource.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(taurus.qt.qtgui.resource.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(taurus.qt.qtgui.resource.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(taurus.qt.qtgui.resource.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):
+        self.motor_dev = None
+        TaurusValue.setModel(self, model)
+        try:
+            self.motor_dev = taurus.Device(model)
+            # CONFIGURE A LISTENER IN ORDER TO UPDATE LIMIT SWITCHES STATES
+            if self.limits_listener is not None:
+                self.limits_listener.disconnect(self, Qt.SIGNAL('eventReceived(PyQt_PyObject)'))
+            self.limits_listener = TaurusAttributeListener()
+            if self.hasHwLimits():
+                self.connect(self.limits_listener, Qt.SIGNAL('eventReceived(PyQt_PyObject)'), 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
+            if self.poweron_listener is not None:
+                self.poweron_listener.disconnect(self, Qt.SIGNAL('eventReceived(PyQt_PyObject)'))
+            self.poweron_listener = TaurusAttributeListener()
+            if self.hasPowerOn():
+                self.connect(self.poweron_listener, Qt.SIGNAL('eventReceived(PyQt_PyObject)'), self.updatePowerOn)
+                self.motor_dev.getAttribute('PowerOn').addListener(self.poweron_listener)
+
+            # CONFIGURE AN EVENT RECEIVER IN ORDER TO UPDATED STATUS TOOLTIP
+            if self.status_listener is not None:
+                self.status_listener.disconnect(self, Qt.SIGNAL('eventReceived(PyQt_PyObject)'))
+            self.status_listener = TaurusAttributeListener()
+            self.connect(self.status_listener, Qt.SIGNAL('eventReceived(PyQt_PyObject)'), self.updateStatus)
+            self.motor_dev.getAttribute('Status').addListener(self.status_listener)
+            
+            # CONFIGURE AN EVENT RECEIVER IN ORDER TO ACTIVATE LIMIT BUTTONS ON SOFTWARE LIMITS
+            if self.position_listener is not None:
+                self.position_listener.disconnect(self, Qt.SIGNAL('eventReceived(PyQt_PyObject)'))
+            self.position_listener = TaurusAttributeListener()
+            self.connect(self.position_listener, Qt.SIGNAL('eventReceived(PyQt_PyObject)'), self.updatePosition)
+            self.motor_dev.getAttribute('Position').addListener(self.position_listener)
+            
+            self.setExpertView(self._expertView)
+        except Exception,e:
+            print e
+            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):
+        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')
+            pos = 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 (pos >= max_value)
+            except:
+                pass
+            try:
+                min_value = float(min_value_str)
+                limits[NEG] = limits[NEG] or (pos <= min_value)
+            except:
+                pass
+            
+        pos_lim = limits[POS]
+        
+        pos_btnstylesheet = ''
+        enabled = True
+        if pos_lim:
+            pos_btnstylesheet = 'QPushButton{%s}'%taurus.core.util.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}'%taurus.core.util.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
+            self.updateLimits(limit_switches)
+        
+    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()
-    
-    qw = QtGui.QWidget()
-    qw.setLayout(QtGui.QVBoxLayout())
 
-    motors = ['tango://controls02:10000/motor/gc_ipap_ctrl/8']
+    models = ['tango://controls02:10000/motor/gcipap10ctrl/8']
     if len(args)>0:
-        motors = args
-    
-    for motor in motors:
-        pms = PoolMotorSlim()
-        pms.setStepSize(1)
-        pms.setStepSizeIncrement(1)
-        pms.setModel(motor)
-        qw.layout().addWidget(pms)
-     
-    qw.show()
+        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__':
diff --git a/lib/taurus/qt/qtgui/extra_pool/poolmotor.py.tests b/lib/taurus/qt/qtgui/extra_pool/poolmotor.py.tests
index d5d0dd5..809ff43 100644
--- a/lib/taurus/qt/qtgui/extra_pool/poolmotor.py.tests
+++ b/lib/taurus/qt/qtgui/extra_pool/poolmotor.py.tests
@@ -23,7 +23,7 @@
 ## along with this program; if not, see <http://www.gnu.org/licenses/>.
 ###########################################################################
 
-from PyQt4 import QtCore, QtGui, Qt
+from taurus.qt import QtCore, QtGui, Qt
 import PyTango
 import tau
 from tau.widget import TauBaseWidget
diff --git a/lib/taurus/qt/qtgui/extra_pool/ui/poolioregisterbuttons.ui b/lib/taurus/qt/qtgui/extra_pool/ui/poolioregisterbuttons.ui
new file mode 100644
index 0000000..97e2039
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_pool/ui/poolioregisterbuttons.ui
@@ -0,0 +1,49 @@
+<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
new file mode 100644
index 0000000..575e16a
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_pool/ui_poolioregisterbuttons.py
@@ -0,0 +1,50 @@
+# -*- 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_sardana/__init__.py b/lib/taurus/qt/qtgui/extra_sardana/__init__.py
index 0cd27bd..a01efc3 100644
--- a/lib/taurus/qt/qtgui/extra_sardana/__init__.py
+++ b/lib/taurus/qt/qtgui/extra_sardana/__init__.py
@@ -28,4 +28,6 @@ to sardana"""
 
 __docformat__ = 'restructuredtext'
 
-from .sardanashell import *
\ No newline at end of file
+#from .sardanashell import *
+from .measurementgroup import *
+from .expdescription import *
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_sardana/cmdline.py b/lib/taurus/qt/qtgui/extra_sardana/cmdline.py
index 70db6b2..f55a7b2 100644
--- a/lib/taurus/qt/qtgui/extra_sardana/cmdline.py
+++ b/lib/taurus/qt/qtgui/extra_sardana/cmdline.py
@@ -28,7 +28,7 @@ to sardana"""
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 from taurus.qt.qtgui.resource import getIcon, getThemeIcon
 
diff --git a/lib/taurus/qt/qtgui/extra_sardana/controllertree.py b/lib/taurus/qt/qtgui/extra_sardana/controllertree.py
new file mode 100644
index 0000000..b760761
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_sardana/controllertree.py
@@ -0,0 +1,346 @@
+#!/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 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.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
+
+
+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
new file mode 100644
index 0000000..2763565
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_sardana/elementtree.py
@@ -0,0 +1,91 @@
+#!/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 import TaurusDevice
+from taurus.qt import Qt
+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
+
+
+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/expdescription.py b/lib/taurus/qt/qtgui/extra_sardana/expdescription.py
new file mode 100644
index 0000000..b82c3ea
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_sardana/expdescription.py
@@ -0,0 +1,243 @@
+#!/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
+from taurus.qt.qtgui.base import TaurusBaseWidget
+
+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)
+        BB = Qt.QDialogButtonBox
+        self.ui.buttonBox.setStandardButtons(Qt.QDialogButtonBox.Reset | Qt.QDialogButtonBox.Apply)
+        
+        self._localConfig = None
+        self._originalConfiguration = None
+        self._dirty = False
+        self._dirtyMntGrps = set()
+        
+        self.connect(self.ui.activeMntGrpCB, Qt.SIGNAL('activated (QString)'), self.onActiveMntGrpActivated)
+        self.connect(self.ui.compressionCB, Qt.SIGNAL('currentIndexChanged (int)'), self.onCompressionCBChanged )
+        self.connect(self.ui.pathLE, Qt.SIGNAL('editingFinished ()'), self.onPathLEEdited )
+        self.connect(self.ui.filenameLE, Qt.SIGNAL('editingFinished ()'), 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 )
+        
+        if door is not None:
+            self.setModel(door)
+        self.connect(self.ui.buttonBox, Qt.SIGNAL("clicked(QAbstractButton *)"), self.onDialogButtonClicked)
+             
+    def getModelClass(self):
+        '''reimplemented from :class:`TaurusBaseWidget`'''
+        return taurus.core.TaurusDevice
+        
+    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)
+        
+    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
+        channels = door.macro_server.getExpChannelElements()
+        avail_channels = {}
+        for ch_info in door.macro_server.getExpChannelElements().values():
+            avail_channels[ch_info.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']
+        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)
+        
+        #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
+        
+        #check if the currently displayed mntgrp is changed
+        if self.ui.channelEditor.getQModel().isDataChanged():
+            self._dirtyMntGrps.add(self._localConfig['ActiveMntGrp'])
+            
+        conf = self.getLocalConfig()
+        door = self.getModelObj()
+        door.setExperimentConfiguration(conf, mnt_grps=self._dirtyMntGrps)
+        self._originalConfiguration = copy.deepcopy(conf)
+        self._setDirty(False)
+        self._dirtyMntGrps = set()
+        self.ui.channelEditor.getQModel().setDataChanged(False)
+        return True
+        
+    def onActiveMntGrpActivated(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
+        mgconfig = self._localConfig['MntGrpConfigs'][activeMntGrpName]
+        self.ui.channelEditor.getQModel().setDataSource(mgconfig)
+        self._setDirty(True)
+        
+    def onCompressionCBChanged(self, idx):
+        if self._localConfig is None: return
+        self._localConfig['DataCompressionRank'] = idx - 1
+        self._setDirty(True)
+        
+    def onPathLEEdited(self):
+        self._localConfig['ScanDir'] = str(self.ui.pathLE.text())
+        self._setDirty(True)
+        
+    def onFilenameLEEdited(self):
+        self._localConfig['ScanFile'] = [v.strip() for v in str(self.ui.filenameLE.text()).split(',')]
+        self._setDirty(True)
+        
+    
+        
+            
+
+
+  
+            
+def demo(model="mydoor"):
+    """Table panels"""
+    #w = main_ChannelEditor()
+    w = ExpDescriptionEditor(door=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
new file mode 100644
index 0000000..605932d
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_sardana/macrotree.py
@@ -0,0 +1,320 @@
+#!/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 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.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_name
+            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
+
+
+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
new file mode 100644
index 0000000..86c1b83
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_sardana/measurementgroup.py
@@ -0,0 +1,808 @@
+#!/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", "MntGrpChannelPanel"]
+
+__docformat__ = 'restructuredtext'
+
+from taurus.qt import Qt
+#import copy
+import taurus
+
+from taurus.qt.qtcore.model import TaurusBaseTreeItem, TaurusBaseModel
+from taurus.qt.qtgui.base import TaurusBaseWidget
+from taurus.qt.qtgui.model import EditorToolBar
+from taurus.qt.qtgui.resource import getIcon, getThemeIcon
+from taurus.qt.qtgui.table import TaurusBaseTableWidget
+from taurus.core.tango.sardana import ChannelView, PlotType, Normalization, AcqTriggerType
+from taurus.core.tango.sardana.pool import getChannelConfigs
+
+
+#===============================================================================
+# 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
+
+
+#===============================================================================
+
+def createChannelDict(name, index=None, **kwargs):
+    ret = {'label': name, #channel label
+           '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 
+           'plot_type': PlotType.No, # one of the PlotType enumeration members (as string)
+#           '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 (as string)
+           'nexus_path': '' #string indicating the location of the data of this channel within the nexus tree
+           }
+    ret.update(kwargs) 
+    if index is not None:
+        ret['index']= index  #an integer used for ordering the channel in this measurement group
+    if 'plot_axes' not in ret: 
+        default_axes = {PlotType.No:[], PlotType.Spectrum:['<idx>'], 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.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 expresion 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.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)
+        return ret
+
+    def setData(self, index, qvalue):
+        taurus_role = index.model().role(index.column())
+        if taurus_role in (ChannelView.Channel, ChannelView.Conditioning, ChannelView.NXPath) :
+            data = str(qvalue.toString())
+        elif taurus_role in (ChannelView.Enabled, ChannelView.Output) :
+            data = qvalue.toBool()
+        elif taurus_role == ChannelView.PlotType:
+            data = PlotType[str(qvalue.toString())]
+        elif taurus_role == ChannelView.Normalization:
+            data = Normalization[str(qvalue.toString())]
+        elif taurus_role == ChannelView.PlotAxes:
+            data = [a for a in str(qvalue.toString()).split(':')]
+        else:
+            raise UnimplementedError('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", "Plot Type", "Plot Axes", "Timer", 
+                  "Monitor", "Trigger", "Conditioning", "Normalization","NeXus Path")
+    ColumnRoles = ((ChannelView.Channel, ChannelView.Channel), ChannelView.Enabled, 
+                  ChannelView.Output, 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()
+            index = chdata['index']
+            chdata['index'] = row
+
+    def flags(self, index):
+        flags = TaurusBaseModel.flags(self, index)
+        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 in (ChannelView.Timer, ChannelView.Monitor, 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]
+            ret = unitdict[key]
+            if taurus_role == ChannelView.Trigger:
+                ret = AcqTriggerType[ret]
+            return Qt.QVariant(ret)
+        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()
+            unit_data = self.getPyData(ctrlname=ch_data['_controller_name'], unitid=ch_data['_unit_id'])
+            key = self.data_keys_map[taurus_role]
+            data = str(qvalue.toString())
+            if taurus_role == ChannelView.Trigger:
+                data = AcqTriggerType[data]
+            self._dirty = True
+            self.beginResetModel()
+            unit_data[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): #@todo: Very inefficient implementation. We should use {begin|end}InsertRows 
+        
+        #@todo: @fixme: THIS WILL BE UNNECESSARY WHEN WE USE PROPER *TAURUS* SARDANA DEVICES
+        chname = str(chname)
+        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
+        
+        #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] = {'channels':{}}
+        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
+        channelsdict[chname] = createChannelDict(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... 
+        
+        #newchannels = [(chname,chdata)]
+        #self.insertChannels(newchannels)      
+
+    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:
+            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
+            try:
+                self.dataSource()['controllers'][ctrlname]['units'][unitname]['channels'].pop(chname)
+            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()
+        taurus_role = model.role(index.column())
+        if taurus_role == ChannelView.Channel:
+            editor.addItems(sorted(model.availableChannels.keys()))
+            editor.setCurrentIndex(editor.findText(pydata))
+        elif taurus_role == ChannelView.PlotType:
+            editor.addItems(PlotType.keys())
+            current = model.data(index).toString()
+            editor.setCurrentIndex(editor.findText(current))
+        elif taurus_role == ChannelView.Normalization:
+            editor.addItems(Normalization.keys())
+            current = model.data(index).toString()
+            editor.setCurrentIndex(editor.findText(current))
+        elif taurus_role in (ChannelView.Timer, ChannelView.Monitor):
+            ch_name, ch_data = index.internalPointer().itemData()
+            ctrl_filterlist = [ch_data['_controller_name']]
+            selectables = [n for n,d in getChannelConfigs(model.dataSource(), ctrls=ctrl_filterlist)] 
+            editor.addItems(selectables)
+            current = model.data(index).toString()
+            editor.setCurrentIndex(editor.findText(current))
+        elif taurus_role == ChannelView.Trigger:
+            editor.addItems(AcqTriggerType.keys())
+            current = model.data(index).toString()
+            editor.setCurrentIndex(editor.findText(current))
+        elif taurus_role == ChannelView.PlotAxes:
+            selectables = ['<idx>','<mov>']+[n for n,d in getChannelConfigs(model.dataSource())]
+            editor.setChoices(selectables)
+            current = model.data(index).toString()
+            editor.setCurrentChoices(current)
+        else:
+            Qt.QStyledItemDelegate.setEditorData(self, editor, index)
+    
+    def setModelData(self, editor, model, index):
+        taurus_role = model.role(index.column())
+        if taurus_role in (ChannelView.Channel, ChannelView.PlotType, ChannelView.Normalization):
+            data = Qt.QVariant(editor.currentText())
+            model.setData(index, data)
+        elif taurus_role in (ChannelView.Timer, ChannelView.Monitor, ChannelView.Trigger):
+            ch_name, ch_data = index.internalPointer().itemData()
+            affected = [n for n,d in getChannelConfigs(model.dataSource(), ctrls=[ch_data['_controller_name']], units=[ch_data['_unit_id']]) ]
+            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(editor.currentText())
+            model.setData(index, data)
+        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"
+    
+    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)
+        
+        ########################
+        #@todo: remove this once the new pool allows to edit the measurement groups
+        #self._editorBar.setEnabled(False)
+        #self.info("Editing measurement groups is temporarily disabled until it is supported by the new pool") 
+        ########################
+        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
+    
+    def addChannel(self, channel=None):
+        qmodel = self.getQModel()
+        if channel is None:
+            shown = [n for n,d in getChannelConfigs(qmodel.dataSource())]
+            avail_channels = qmodel.getAvailableChannels()
+            clist = [ ch_info['name'] for ch_name, ch_info in avail_channels.items()
+                      if ch_name not in shown ]
+            chname,ok = Qt.QInputDialog.getItem(self, "New Channel", "Choose channel:", sorted(clist), 0, False)
+            if not ok:
+                return       
+        qmodel.addChannel(chname=chname)
+        
+    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 Extra Sardana'
+        ret['icon'] = ":/designer/table.png"
+        return ret
+
+
+class MntGrpChannelPanel(Qt.QWidget):
+    
+    def __init__(self, parent=None):
+        Qt.QWidget.__init__(self, parent)
+        l = Qt.QVBoxLayout()
+        l.setContentsMargins(0,0,0,0)
+        self.setLayout(l)
+        self._editor = MntGrpChannelEditor(parent=self)
+        self.connect(self._editor.getQModel(),
+                     Qt.SIGNAL("dataChanged(const QModelIndex &, const QModelIndex &)"),
+                     self.onDataChanged)
+        self.connect(self._editor.getQModel(),
+                     Qt.SIGNAL("modelReset()"),
+                     self.onDataReset)
+        self._editor.show()
+        l.addWidget(self._editor, 1)
+        BB = Qt.QDialogButtonBox
+        bts = BB.Ok | BB.Cancel | BB.Reset | BB.Apply
+        bb = self._buttonBox = Qt.QDialogButtonBox(bts, Qt.Qt.Horizontal, self)
+        self.connect(bb, Qt.SIGNAL("clicked(QAbstractButton *)"),
+                     self.onDialogButtonClicked)
+        l.addWidget(self._buttonBox, 0, Qt.Qt.AlignRight)
+
+    def getEditor(self):
+        return self._editor
+
+    def setModel(self, m):
+        self.getEditor().setModel(m)
+    
+    def getEditorQModel(self):
+        return self.getEditor().getQModel()
+
+    def onDialogButtonClicked(self, button):
+        role = self._buttonBox.buttonRole(button)
+        qmodel = self.getEditorQModel()
+        if role == Qt.QDialogButtonBox.ApplyRole:
+            qmodel.writeSourceData()
+        elif role == Qt.QDialogButtonBox.ResetRole:
+            qmodel.refresh()
+
+    def onDataChanged(self, i1, i2):
+        self._updateButtonBox()
+    
+    def onDataReset(self):
+        self._updateButtonBox()
+    
+    def _updateButtonBox(self):
+        qmodel = self.getEditorQModel()
+        changed = qmodel.isDataChanged()
+        bb = self._buttonBox
+        for button in bb.buttons():
+            role = bb.buttonRole(button)
+            if role == Qt.QDialogButtonBox.ApplyRole:
+                button.setEnabled(changed)
+            elif role == Qt.QDialogButtonBox.ResetRole:
+                button.setEnabled(changed)
+
+
+def main_MntGrpChannelEditor(perspective="Channel"):
+    w = MntGrpChannelEditor( perspective=perspective)
+    w.setWindowTitle("A Taurus Measurement Group editor example")
+    w.getQModel().setDataSource(DUMMY_MNGRPCFG_1)
+    w.resize(1200,500)
+    return w
+
+def main_MntGrpChannelPanel(mg, perspective="Channel"):
+    w = MntGrpChannelPanel()
+    w.setWindowIcon(getIcon(":/actions/system-shutdown.svg"))
+    w.setWindowTitle("A Taurus Sardana measurement group Example")
+    w.setModel(mg)
+    w.show()
+    return w
+
+
+def demo(model="mg2"):
+    """Table panels"""
+#    w = main_MntGrpChannelPanel(model)
+    w = main_MntGrpChannelEditor()
+    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="Meas. group channel 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/sardanabasewizard.py b/lib/taurus/qt/qtgui/extra_sardana/sardanabasewizard.py
new file mode 100644
index 0000000..804e3f8
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_sardana/sardanabasewizard.py
@@ -0,0 +1,82 @@
+#!/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
new file mode 100644
index 0000000..b5d6271
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_sardana/sardanaeditor.py
@@ -0,0 +1,431 @@
+#!/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", "MacroEditor"]
+
+__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 MacroTreeWidget, MacroSelectionDialog
+from elementtree import SardanaElementTreeWidget, SardanaBaseProxyModel, \
+    SardanaElementTypeModel, SardanaTypeTreeItem, SardanaRootTreeItem
+
+from sardanawizard 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
+from sardana.macroserver.parameter import Type, ParamRepeat
+{sardana_imports}
+# Place your code here!
+
+"""
+
+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 = QtGui.QVBoxLayout()
+        self.setLayout(layout)
+
+
+class SardanaLibProxyModel(SardanaBaseProxyModel):
+    
+    ALLOWED_TYPES = 'ControllerLib', 'MacroLib'
+    
+    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_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)
+        self.open_action = af.createAction(self, "Open...",
+                icon='document-open', tip="Open macro(s) or controller(s)",
+                triggered=self.on_open)
+        self.save_action = af.createAction(self, "Save",
+                icon='document-save', tip="Save the current selected item",
+                triggered=self.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")
+        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):
+        macro_info = item.itemData()
+        self.open_macros([macro_info])
+    
+    @ProtectTaurusMessageBox(title="A error occured trying to create a class")
+    def on_new(self):
+        
+        elem_types = "Macro class", "Macro function", "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_class()
+        elif idx == 2:
+            return self.new_macro_library()
+        raise NotImplementedError("Sorry! Not implemented yet.")
+    
+    def new_macro_class(self):
+        macro_server = self.getModelObj()
+        
+        msg = "Please select the library where you want to place the new macro"
+        
+        macro_libraries = macro_server.getElementsOfType("MacroLib")
+        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.filename, macro_lib.path
+        fname = fname[fname.index(osp.sep)+1:] # transform into relative path
+        local_filename = osp.join(self._tmp_dir, fname)
+        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)
+        #TODO open "new macro dialog" which shows how to give a macro name and
+        # define macro parameters
+    
+    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(msg="A error occured trying to save")
+    def on_save(self, apply=False):
+        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.setMacroCode(remote_filename, code)
+        if apply:
+            _, module_name = osp.split(local_filename)
+            module_name, _ = osp.splitext(module_name)
+            self.reloadMacroLib(module_name)
+    
+    def on_revert(self):
+        self.editorStack().revert()
+    
+    def reload_macro_lib(self, module_name):
+        pass
+
+    def set_macro_code(self, filename, code):
+        ms = self.getModelObj()
+        return ms.SetMacroCode((filename, code))
+
+    def get_macro_code(self, module_name, macro_name):
+        ms = self.getModelObj()
+        return ms.GetMacroCode((module_name, macro_name))
+    
+    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:
+        w = demo()
+    else:
+        w = demo(args[0])
+    
+    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/ui/ExpDescriptionEditor.ui b/lib/taurus/qt/qtgui/extra_sardana/ui/ExpDescriptionEditor.ui
new file mode 100644
index 0000000..211b5b0
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_sardana/ui/ExpDescriptionEditor.ui
@@ -0,0 +1,151 @@
+<ui version="4.0" >
+ <class>ExpDescriptionEditor</class>
+ <widget class="QWidget" name="ExpDescriptionEditor" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>707</width>
+    <height>646</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>Form</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout_2" >
+   <item>
+    <widget class="TaurusGroupBox" name="taurusGroupBox" >
+     <property name="title" >
+      <string>Measurement group</string>
+     </property>
+     <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" />
+        </item>
+        <item>
+         <widget class="QToolButton" name="mntGrpOptionBT" >
+          <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>
+   </item>
+   <item>
+    <widget class="QGroupBox" name="groupBox" >
+     <property name="title" >
+      <string>Storage</string>
+     </property>
+     <layout class="QFormLayout" name="formLayout" >
+      <item row="0" column="0" >
+       <widget class="QLabel" name="label_3" >
+        <property name="text" >
+         <string>File Name</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1" >
+       <widget class="QLineEdit" name="filenameLE" />
+      </item>
+      <item row="1" column="0" >
+       <widget class="QLabel" name="label_2" >
+        <property name="text" >
+         <string>Path</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1" >
+       <widget class="QLineEdit" name="pathLE" />
+      </item>
+      <item row="2" column="0" >
+       <widget class="QLabel" name="label_4" >
+        <property name="text" >
+         <string>Data compression</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" 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>
+   </item>
+   <item>
+    <widget class="QDialogButtonBox" name="buttonBox" >
+     <property name="standardButtons" >
+      <set>QDialogButtonBox::NoButton</set>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>TaurusGroupBox</class>
+   <extends>QGroupBox</extends>
+   <header>taurus.qt.qtgui.container</header>
+   <container>1</container>
+  </customwidget>
+  <customwidget>
+   <class>MntGrpChannelEditor</class>
+   <extends>QMainWindow</extends>
+   <header>taurus.qt.qtgui.extra_sardana</header>
+  </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/scripts/taurusgui b/lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py
old mode 100755
new mode 100644
similarity index 95%
copy from scripts/taurusgui
copy to lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py
index 00ce858..810fb34
--- a/scripts/taurusgui
+++ b/lib/taurus/qt/qtgui/extra_sardana/ui/__init__.py
@@ -22,6 +22,3 @@
 ## along with Taurus.  If not, see <http://www.gnu.org/licenses/>.
 ##
 #############################################################################
-
-from taurus.qt.qtgui.taurusgui import main
-main()
diff --git a/lib/taurus/qt/qtgui/extra_sardana/ui/ui_ExpDescriptionEditor.py b/lib/taurus/qt/qtgui/extra_sardana/ui/ui_ExpDescriptionEditor.py
new file mode 100644
index 0000000..f31ec9b
--- /dev/null
+++ b/lib/taurus/qt/qtgui/extra_sardana/ui/ui_ExpDescriptionEditor.py
@@ -0,0 +1,102 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file '/tmp/tmpf8jNJv.ui'
+#
+# Created: Tue Aug 23 12:54:43 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_ExpDescriptionEditor(object):
+    def setupUi(self, ExpDescriptionEditor):
+        ExpDescriptionEditor.setObjectName("ExpDescriptionEditor")
+        ExpDescriptionEditor.resize(707, 646)
+        self.verticalLayout_2 = QtGui.QVBoxLayout(ExpDescriptionEditor)
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.taurusGroupBox = TaurusGroupBox(ExpDescriptionEditor)
+        self.taurusGroupBox.setObjectName("taurusGroupBox")
+        self.verticalLayout = QtGui.QVBoxLayout(self.taurusGroupBox)
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.horizontalLayout = QtGui.QHBoxLayout()
+        self.horizontalLayout.setObjectName("horizontalLayout")
+        self.label = QtGui.QLabel(self.taurusGroupBox)
+        self.label.setObjectName("label")
+        self.horizontalLayout.addWidget(self.label)
+        self.activeMntGrpCB = QtGui.QComboBox(self.taurusGroupBox)
+        self.activeMntGrpCB.setObjectName("activeMntGrpCB")
+        self.horizontalLayout.addWidget(self.activeMntGrpCB)
+        self.mntGrpOptionBT = QtGui.QToolButton(self.taurusGroupBox)
+        self.mntGrpOptionBT.setObjectName("mntGrpOptionBT")
+        self.horizontalLayout.addWidget(self.mntGrpOptionBT)
+        spacerItem = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem)
+        self.verticalLayout.addLayout(self.horizontalLayout)
+        self.channelEditor = MntGrpChannelEditor(self.taurusGroupBox)
+        self.channelEditor.setObjectName("channelEditor")
+        self.verticalLayout.addWidget(self.channelEditor)
+        self.verticalLayout_2.addWidget(self.taurusGroupBox)
+        self.groupBox = QtGui.QGroupBox(ExpDescriptionEditor)
+        self.groupBox.setObjectName("groupBox")
+        self.formLayout = QtGui.QFormLayout(self.groupBox)
+        self.formLayout.setObjectName("formLayout")
+        self.label_3 = QtGui.QLabel(self.groupBox)
+        self.label_3.setObjectName("label_3")
+        self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.label_3)
+        self.filenameLE = QtGui.QLineEdit(self.groupBox)
+        self.filenameLE.setObjectName("filenameLE")
+        self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.filenameLE)
+        self.label_2 = QtGui.QLabel(self.groupBox)
+        self.label_2.setObjectName("label_2")
+        self.formLayout.setWidget(1, QtGui.QFormLayout.LabelRole, self.label_2)
+        self.pathLE = QtGui.QLineEdit(self.groupBox)
+        self.pathLE.setObjectName("pathLE")
+        self.formLayout.setWidget(1, QtGui.QFormLayout.FieldRole, self.pathLE)
+        self.label_4 = QtGui.QLabel(self.groupBox)
+        self.label_4.setObjectName("label_4")
+        self.formLayout.setWidget(2, QtGui.QFormLayout.LabelRole, self.label_4)
+        self.compressionCB = QtGui.QComboBox(self.groupBox)
+        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(2, QtGui.QFormLayout.FieldRole, self.compressionCB)
+        self.verticalLayout_2.addWidget(self.groupBox)
+        self.buttonBox = QtGui.QDialogButtonBox(ExpDescriptionEditor)
+        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.NoButton)
+        self.buttonBox.setObjectName("buttonBox")
+        self.verticalLayout_2.addWidget(self.buttonBox)
+
+        self.retranslateUi(ExpDescriptionEditor)
+        QtCore.QMetaObject.connectSlotsByName(ExpDescriptionEditor)
+
+    def retranslateUi(self, ExpDescriptionEditor):
+        ExpDescriptionEditor.setWindowTitle(QtGui.QApplication.translate("ExpDescriptionEditor", "Form", None, QtGui.QApplication.UnicodeUTF8))
+        self.taurusGroupBox.setTitle(QtGui.QApplication.translate("ExpDescriptionEditor", "Measurement group", None, QtGui.QApplication.UnicodeUTF8))
+        self.label.setText(QtGui.QApplication.translate("ExpDescriptionEditor", "Active Measurement Group", None, QtGui.QApplication.UnicodeUTF8))
+        self.mntGrpOptionBT.setText(QtGui.QApplication.translate("ExpDescriptionEditor", "...", None, QtGui.QApplication.UnicodeUTF8))
+        self.groupBox.setTitle(QtGui.QApplication.translate("ExpDescriptionEditor", "Storage", None, QtGui.QApplication.UnicodeUTF8))
+        self.label_3.setText(QtGui.QApplication.translate("ExpDescriptionEditor", "File Name", None, QtGui.QApplication.UnicodeUTF8))
+        self.label_2.setText(QtGui.QApplication.translate("ExpDescriptionEditor", "Path", 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))
+
+from taurus.qt.qtgui.container import TaurusGroupBox
+from taurus.qt.qtgui.extra_sardana import MntGrpChannelEditor
+
+if __name__ == "__main__":
+    import sys
+    app = QtGui.QApplication(sys.argv)
+    ExpDescriptionEditor = QtGui.QWidget()
+    ui = Ui_ExpDescriptionEditor()
+    ui.setupUi(ExpDescriptionEditor)
+    ExpDescriptionEditor.show()
+    sys.exit(app.exec_())
+
diff --git a/lib/taurus/qt/qtgui/extra_taurusservers/taurusserverswidget.py b/lib/taurus/qt/qtgui/extra_taurusservers/taurusserverswidget.py
index cd0870e..b56db77 100644
--- a/lib/taurus/qt/qtgui/extra_taurusservers/taurusserverswidget.py
+++ b/lib/taurus/qt/qtgui/extra_taurusservers/taurusserverswidget.py
@@ -27,7 +27,7 @@
 taurusserverswidget.py: 
 """
 
-from PyQt4 import QtGui, QtCore, Qt
+from taurus.qt import QtGui, QtCore, Qt
 from PyTango_utils.servers import ServersDict
 from PyTango import DevState
 from taurus.core.util import DEVICE_STATE_PALETTE
diff --git a/lib/taurus/qt/qtgui/extra_xterm/qxtermwidget.py b/lib/taurus/qt/qtgui/extra_xterm/qxtermwidget.py
index f4e7ccc..7b75a62 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 PyQt4 import QtCore, QtGui, Qt
+from taurus.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 19805ef..19fe256 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 PyQt4 import Qt
+from taurus.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 7f92cbe..18bcb79 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 PyQt4 import Qt
+from taurus.qt import Qt
 from taurus.qt.qtgui.display import QPixmapWidget
 
 class QBaseMeter(QPixmapWidget):
@@ -241,7 +241,7 @@ class QBaseMeter(QPixmapWidget):
         self.update()
 
     def resetDigitFont(self):
-        self.setValue(self.DefaultDigitFont)
+        self.setDigitFont(self.DefaultDigitFont)
 
     @classmethod
     def getQtDesignerPluginInfo(cls):
diff --git a/lib/taurus/qt/qtgui/gauge/taurusgauge.py b/lib/taurus/qt/qtgui/gauge/taurusgauge.py
index cbef549..bb906f1 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 PyQt4 import Qt
+from taurus.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 50cd2f9..6159623 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 PyQt4 import Qt
+from taurus.qt import Qt
 
 import taurus.core
 import taurus.core.util
diff --git a/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_view.py b/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_view.py
index 2241a5e..3a5d2c1 100644
--- a/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_view.py
+++ b/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_view.py
@@ -32,7 +32,7 @@ __docformat__ = 'restructuredtext'
 import os
 import traceback
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 from taurus.qt.qtgui.base import TaurusBaseWidget
 import jdraw_parser
@@ -149,10 +149,10 @@ class TaurusJDrawSynopticsView(Qt.QGraphicsView, TaurusBaseWidget):
     def resizeEvent(self, event):
         """ It has been needed to reimplent size policies """
         if not self.scene() or isinstance(self.parent(),Qt.QScrollArea) or not self.isVisible():
-            self.info('In TauJDrawSynopticsView('+self._fileName+').resizeEvent(): Disabled')
+            self.debug('In TauJDrawSynopticsView('+self._fileName+').resizeEvent(): Disabled')
             return
         try:
-            self.info('In TauJDrawSynopticsView('+self._fileName+').resizeEvent()')
+            self.debug('In TauJDrawSynopticsView('+self._fileName+').resizeEvent()')
                 
             self.setVerticalScrollBarPolicy(Qt.Qt.ScrollBarAlwaysOff)
             self.setHorizontalScrollBarPolicy(Qt.Qt.ScrollBarAlwaysOff)
diff --git a/lib/taurus/qt/qtgui/graphic/taurusgraphic.py b/lib/taurus/qt/qtgui/graphic/taurusgraphic.py
index 3dad4af..3730f16 100644
--- a/lib/taurus/qt/qtgui/graphic/taurusgraphic.py
+++ b/lib/taurus/qt/qtgui/graphic/taurusgraphic.py
@@ -43,7 +43,7 @@ import types
 
 import Queue
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 import taurus.core
 import taurus.core.util
 
@@ -293,7 +293,7 @@ class TaurusGraphicsScene(Qt.QGraphicsScene):
                         self.warning('selectGraphicsItem(%s) failed! %s' % (item_name,str(e)))
                         print traceback.format_exc()
                         return False
-        self.warning('No matching object found for "%s"'%item_name)
+        self.debug('No matching object found for "%s"'%item_name)
 
     def setSelectionMark(self,picture=None,h=10,w=10):
         """This method allows to set a pixmap as selection mark or by default creates a blue circle."""
@@ -302,7 +302,7 @@ class TaurusGraphicsScene(Qt.QGraphicsScene):
             try:
                 self.SelectionMark = Qt.QGraphicsPixmapItem()
                 if isinstance(picture,Qt.QPixmap):
-                    pixmap = picture
+                    pixmap = Qt.QPixmap(picture)
                 else:
                     pixmap = Qt.QPixmap(os.path.realpath(picture))
                 self.SelectionMark.setPixmap(pixmap.scaled(h,w))
diff --git a/lib/taurus/qt/qtgui/graphic/taurusgraphicview.py b/lib/taurus/qt/qtgui/graphic/taurusgraphicview.py
index b7937dc..6072b4c 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 PyQt4 import Qt
+from taurus.qt import Qt
 
 from taurus.qt.qtgui.base import TaurusBaseWidget
 
diff --git a/lib/taurus/qt/qtgui/image/__init__.py b/lib/taurus/qt/qtgui/image/__init__.py
index 1bba1e2..12d5763 100644
--- a/lib/taurus/qt/qtgui/image/__init__.py
+++ b/lib/taurus/qt/qtgui/image/__init__.py
@@ -29,8 +29,9 @@ __docformat__ = 'restructuredtext'
 
 try:
     from .taurusqub import *
-except Exception,e:
+except:
+    from taurus.qt.qtgui.display import create_fallback as __create
+    TaurusQubDataImageDisplay = __create("TaurusQubDataImageDisplay")
     import taurus.core.util
     _logger = taurus.core.util.Logger(__name__)
-    _logger.debug("Qub widgets could not be initialized")
-    _logger.traceback()
\ No newline at end of file
+    _logger.debug("Qub widgets could not be initialized", exc_info=1)
diff --git a/lib/taurus/qt/qtgui/image/taurusimage.py b/lib/taurus/qt/qtgui/image/taurusimage.py
deleted file mode 100644
index 042c286..0000000
--- a/lib/taurus/qt/qtgui/image/taurusimage.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/>.
-##
-#############################################################################
-
-"""
-Generic Image widget for Taurus. Based on guiqwt.plot.ImagePlotWidget: 
-"""
-from PyQt4 import Qt
-from taurus.qt.qtgui.base import taurusQAttributeFactory
-from guiqwt.image import ImageItem
-import numpy
-
-
-class TaurusImageItem(ImageItem):
-    '''A CurveItem that autoupdates its values & params when x or y components change'''
-    def __init__(self, param=None):
-        ImageItem.__init__(self, numpy.zeros((1,1)), param=param)
-        self._dataObj = None
-        
-    def setExtendedModel(self, xmodel):
-        print xmodel
-        #disconnect previous component
-        if self._dataObj is not None: Qt.QObject.disconnect(self._dataObj, Qt.SIGNAL('dataChanged'), self.onDataChanged)
-        #create/get new components
-        self._dataObj = taurusQAttributeFactory.getQAttr(xmodel=xmodel)
-        #connect the new components to the notification
-        Qt.QObject.connect(self._dataObj, Qt.SIGNAL('dataChanged'), self.onDataChanged)
-        self.onDataChanged()
-        
-    def onDataChanged(self):
-        if self._dataObj.value is None:
-            return
-        self.set_data(self._dataObj.value)
-        p = self.plot()
-        if p is not None: 
-            p.replot()
-        
-
-
-def main():
-    '''launch'''
-    from guiqwt.plot import ImagePlotWidget,ImagePlotDialog
-    import sys
-    from guiqwt.image import  ImageParam
-    from taurus.qt.qtgui.application import TaurusApplication
-    
-    app = TaurusApplication()
-    args = app.get_command_line_args()
-    if len (args)==1:
-        model = args[0]
-    else:
-        #model = 'sys/tg_test/1/short_image_ro'
-        ##we can do math on images and reference tango attributes! 
-        model = '=${sys/tg_test/1/short_image_ro}+10*rand(251,251)'
-        #model = '=${sys/tg_test/1/short_image_ro}+10*rand(*shape(${sys/tg_test/1/short_image_ro}))' #we can iven do this!!
-
-    w = ImagePlotDialog(toolbar=True)
-    #w = ImagePlotWidget()
-    #w.register_all_image_tools()
-    plot = w.get_plot()
-    
-    param = ImageParam()
-    
-    param.label = model
-    img = TaurusImageItem(param)
-    img.setExtendedModel(model)
-    
-    plot.add_item(img)
-    
-    #connect the cross section plots so that they are updated on signal changes
-    w.connect(img._dataObj, Qt.SIGNAL("dataChanged"), w.update_cross_sections)
-
-    #show the widget
-    w.show()
-    
-    sys.exit(app.exec_())  
-
-if __name__ == "__main__":
-    main()    
-
diff --git a/lib/taurus/qt/qtgui/image/taurusqub.py b/lib/taurus/qt/qtgui/image/taurusqub.py
index 1b72166..c671619 100644
--- a/lib/taurus/qt/qtgui/image/taurusqub.py
+++ b/lib/taurus/qt/qtgui/image/taurusqub.py
@@ -27,7 +27,7 @@
 
 import weakref
 
-from PyQt4 import Qt
+from taurus.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 f0caad3..2166899 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 PyQt4 import Qt
+from taurus.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 971b742..3666ef3 100644
--- a/lib/taurus/qt/qtgui/input/qwheel.py
+++ b/lib/taurus/qt/qtgui/input/qwheel.py
@@ -32,9 +32,9 @@ __docformat__ = 'restructuredtext'
 import os
 import math
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
-from taurus.qt.qtgui.resource.qrc_extra_icons import *
+#from taurus.qt.qtgui.resource.qrc_extra_icons import *
 
 class _ArrowButton(Qt.QPushButton):
     """Private class to be used by QWheelEdit for an arrow button"""
diff --git a/lib/taurus/qt/qtgui/input/tauruscheckbox.py b/lib/taurus/qt/qtgui/input/tauruscheckbox.py
index e64b180..a64077a 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 PyQt4 import Qt
+from taurus.qt import Qt
 
 import sys
 import PyTango
diff --git a/lib/taurus/qt/qtgui/input/tauruscombobox.py b/lib/taurus/qt/qtgui/input/tauruscombobox.py
index 061e890..cc0163c 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 PyQt4 import Qt
+from taurus.qt import Qt
 
 import PyTango
 import taurus.core
@@ -148,6 +148,12 @@ class TaurusValueComboBox(Qt.QComboBox, TaurusBaseWritableWidget):
     # TaurusValueComboBox own interface
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
 
+    def setValueNames(self, names):
+        bs = self.blockSignals(True)
+        self.clear()
+        self.blockSignals(bs)
+        self.addValueNames(names)
+        
     def addValueNames(self, names):
         bs = self.blockSignals(True)
         try:
diff --git a/lib/taurus/qt/qtgui/input/tauruslineedit.py b/lib/taurus/qt/qtgui/input/tauruslineedit.py
index 1ce4edd..8cf8d24 100644
--- a/lib/taurus/qt/qtgui/input/tauruslineedit.py
+++ b/lib/taurus/qt/qtgui/input/tauruslineedit.py
@@ -29,14 +29,16 @@ __all__ = ["TaurusValueLineEdit", "TaurusConfigLineEdit"]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
-
-import sys
-import PyTango
-
-import taurus.core
+import sys, PyTango, taurus.core
+from taurus.qt import Qt
 from taurus.qt.qtgui.base import TaurusBaseWidget, TaurusBaseWritableWidget
 
+_String = str
+try:
+    _String = Qt.QString
+except AttributeError:
+    _String = str
+
 class TaurusValueLineEdit(Qt.QLineEdit, TaurusBaseWritableWidget):
 
     __pyqtSignals__ = ("modelChanged(const QString &)",)
@@ -53,17 +55,18 @@ class TaurusValueLineEdit(Qt.QLineEdit, TaurusBaseWritableWidget):
 
         self.setAlignment(Qt.Qt.AlignRight)
         self.setValidator(None)
-        
+
         self.connect(self, Qt.SIGNAL('textChanged(const QString &)'), self.valueChanged)
         self.connect(self, Qt.SIGNAL('returnPressed()'), self.writeValue)
         self.connect(self, Qt.SIGNAL('valueChanged'), self.updatePendingOperations)
-        
+        self.connect(self, Qt.SIGNAL('editingFinished()'), self._onEditingFinished)
+
     def _updateValidator(self, attrinfo):
         '''This method sets a validator depending on the data type
         attrinfo is an AttributeInfoEx object'''
         if PyTango.is_int_type(attrinfo.data_type):
             validator = Qt.QIntValidator(self) #initial range is -2147483648 to 2147483647 (and cannot be set larger)
-            if validator.bottom() < self.__minLimit < validator.top(): 
+            if validator.bottom() < self.__minLimit < validator.top():
                 validator.setBottom(int(self.__minLimit))
             if validator.bottom() < self.__maxLimit < validator.top():
                 validator.setTop(int(self.__maxLimit))
@@ -73,15 +76,16 @@ class TaurusValueLineEdit(Qt.QLineEdit, TaurusBaseWritableWidget):
             validator= Qt.QDoubleValidator(self)
             validator.setBottom(self.__minLimit)
             validator.setTop(self.__maxLimit)
-            decimalDigits = self.__decimalDigits(attrinfo.format)
-            if decimalDigits is not None:
-                validator.setDecimals(decimalDigits)
+            #I removed the validation of decimal digits because it was not practical when editing values
+#            decimalDigits = self.__decimalDigits(attrinfo.format) 
+#            if decimalDigits is not None:
+#                validator.setDecimals(decimalDigits)
             self.setValidator(validator)
             self.debug("DoubleValidator set with limits=[%f,%f]"%(self.__minLimit, self.__maxLimit))
         else: #@TODO Other validators can be configured for other types (e.g. with string lengths, tango names,...)
             self.setValidator(None)
             self.debug("Validator disabled")
-    
+
     def __decimalDigits(self, fmt):
         '''returns the number of decimal digits from a format string
         (or None if they are not defined)''' 
@@ -92,10 +96,19 @@ class TaurusValueLineEdit(Qt.QLineEdit, TaurusBaseWritableWidget):
                 return None
         except:
             return None
-    
+
+    def _onEditingFinished(self):
+        '''slot for performing autoapply only when edition is finished'''
+        if self._autoApply:
+            self.writeValue()
+
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     # TaurusBaseWritableWidget overwriting
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    def valueChanged(self, *args):
+        '''reimplement to avoid autoapply on every partial edition'''
+        self.emitValueChanged()
+
     def handleEvent(self, evt_src, evt_type, evt_value):
         if evt_type == taurus.core.TaurusEventType.Config:
             if evt_value.min_alarm != taurus.core.TaurusConfiguration.no_min_alarm:
@@ -114,22 +127,22 @@ class TaurusValueLineEdit(Qt.QLineEdit, TaurusBaseWritableWidget):
                 self.__maxLimit = float(evt_value.max_value)
             else:
                 self.__maxLimit = float("inf")
-                
+
             self._updateValidator(evt_value)
         TaurusBaseWritableWidget.handleEvent(self, evt_src, evt_type, evt_value)
-    
+
     def _inAlarm(self, v):
         try: return not(self.__minAlarm < float(v) < self.__maxAlarm)
         except: return False #this will return false for non-numerical values
-    
+
     def _outOfRange(self, v):
         validator = self.validator()
         if validator:
-            return validator.validate(Qt.QString(str(v)),0)[0] != validator.Acceptable
-        else: #fallback, only for numeric types (returns False for other types)
+            return validator.validate(_String(str(v)), 0)[0] != validator.Acceptable
+        else: #fallback, only for numeric typess (returns False for other types)
             try: return not(self.__minLimit <= float(v) <=  self.__maxLimit)
-            except: return False 
-        
+            except: return False
+
     def updateStyle(self):
         TaurusBaseWritableWidget.updateStyle(self)
         color, weight = 'black', 'normal' #default case: the value is in normal range with no pending changes
@@ -167,11 +180,11 @@ class TaurusValueLineEdit(Qt.QLineEdit, TaurusBaseWritableWidget):
         model = self.getModelObj()
         if model is None or not model.isNumeric():
             return Qt.QLineEdit.keyPressEvent(self, evt)
-            
+
         if evt.key() == Qt.Qt.Key_Up:     numSteps = 1
         elif evt.key() == Qt.Qt.Key_Down: numSteps = -1
         else: return Qt.QLineEdit.keyPressEvent(self, evt)
-        
+
         evt.accept()
         modifiers = evt.modifiers()
         if modifiers & Qt.Qt.ControlModifier:
@@ -179,7 +192,7 @@ class TaurusValueLineEdit(Qt.QLineEdit, TaurusBaseWritableWidget):
         elif (modifiers & Qt.Qt.AltModifier) and model.isFloat():
             numSteps *= .1
         self._stepBy(numSteps)
-    
+
     def _stepBy(self, v):
         self.setValue(self.getValue() + v)
 
@@ -191,7 +204,7 @@ class TaurusValueLineEdit(Qt.QLineEdit, TaurusBaseWritableWidget):
             v_str = str(model.displayValue(v))
         v_str = v_str.strip()
         self.setText(v_str)
-    
+
     def getValue(self):
         v_qstr = self.text()
         model = self.getModelObj()
@@ -199,13 +212,13 @@ class TaurusValueLineEdit(Qt.QLineEdit, TaurusBaseWritableWidget):
             return model.encode(v_qstr)
         except:
             return None
-    
+
     def setEnableWheelEvent(self, b):
         self._enableWheelEvent = b
 
     def getEnableWheelEvent(self):
         return self._enableWheelEvent
-    
+
     def resetEnableWheelEvent(self):
         self.setEnableWheelEvent(False)
 
@@ -217,13 +230,13 @@ class TaurusValueLineEdit(Qt.QLineEdit, TaurusBaseWritableWidget):
         return ret
 
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # QT properties 
+    # QT properties
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-   
+
     model = Qt.pyqtProperty("QString", TaurusBaseWritableWidget.getModel,
                             TaurusBaseWritableWidget.setModel,
                             TaurusBaseWritableWidget.resetModel)
-                                
+
     useParentModel = Qt.pyqtProperty("bool", TaurusBaseWritableWidget.getUseParentModel,
                                      TaurusBaseWritableWidget.setUseParentModel,
                                      TaurusBaseWritableWidget.resetUseParentModel)
@@ -231,181 +244,96 @@ class TaurusValueLineEdit(Qt.QLineEdit, TaurusBaseWritableWidget):
     autoApply = Qt.pyqtProperty("bool", TaurusBaseWritableWidget.getAutoApply,
                                 TaurusBaseWritableWidget.setAutoApply,
                                 TaurusBaseWritableWidget.resetAutoApply)
-    
+
     forcedApply = Qt.pyqtProperty("bool", TaurusBaseWritableWidget.getForcedApply,
                                   TaurusBaseWritableWidget.setForcedApply,
                                   TaurusBaseWritableWidget.resetForcedApply)
-    
+
     enableWheelEvent = Qt.pyqtProperty("bool", getEnableWheelEvent,
                                        setEnableWheelEvent,
                                        resetEnableWheelEvent)
 
 
-## TaurusConfigLineEdit has been marked as obsolete because it is not adapted to new 
-## event handling and it is not clear wether anyone is interested in keeping it
-## If you want to use it, contact cpascual at cells.es or tcoutinho at cells.es
-class TaurusConfigLineEdit(Qt.QLineEdit, TaurusBaseWidget):
-
-    __pyqtSignals__ = ("modelChanged(const QString &)",)
 
+class TaurusConfigLineEdit(Qt.QLineEdit, TaurusBaseWritableWidget):
     def __init__(self, qt_parent = None, designMode = False):
-        
-        raise DeprecationWarning('TaurusConfigLineEdit is deprecated. It does not integrate well with latest taurus features')
-        
         name = self.__class__.__name__
-        self._lastValueByUser = ''
         self.call__init__wo_kw(Qt.QLineEdit, qt_parent)
-        self.call__init__(TaurusBaseWidget, name, designMode=designMode)
-        
-        self.setObjectName(name)
-        
-        self._dftShadow = self.palette().shadow()
-        self._dftHighlight = self.palette().highlight()
-        self._dftButton = self.palette().button()
-        
-        self.defineStyle()
-        
-        self.connect(self, Qt.SIGNAL('textChanged(QString)'),self.emitValueChanged)
-        
-    def defineStyle(self):
-        self.setAlignment(Qt.Qt.AlignRight)
-        self.updateStyle()
-        
-    # 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(60, 24)
-                
-    def focusInEvent(self,focusEvent):
-        Qt.QLineEdit.focusInEvent(self,focusEvent)
-        self.updateStyle()
-
-    def focusOutEvent(self,focusEvent):
-        Qt.QLineEdit.focusOutEvent(self,focusEvent)
-        self.updateStyle()
-    
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # TaurusBaseWidget overwriting
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    
+        self.call__init__(TaurusBaseWritableWidget, name, designMode=designMode)
+
+        self.connect(self, Qt.SIGNAL('textChanged(const QString &)'), self.valueChanged)
+        self.connect(self, Qt.SIGNAL('returnPressed()'), self.writeValue)
+        self.connect(self, Qt.SIGNAL('editingFinished()'), self._onEditingFinished)
+
+    def _onEditingFinished(self):
+        if self._autoApply: self.writeValue()
+
+    def handleEvent(self, evt_src, evt_type, evt_value):
+        self.valueChanged()
+
     def getModelClass(self):
         return taurus.core.TaurusConfiguration
-    
-    def preAttach(self):
-        TaurusBaseWidget.preAttach(self)
-        Qt.QObject.connect(self, Qt.SIGNAL("returnPressed()"), 
-                               self.writeTextValue)
-        Qt.QObject.connect(self, Qt.SIGNAL("textChanged(QString)"), 
-                               self.userChangedValue)
-
-    def postAttach(self):
-        TaurusBaseWidget.postAttach(self)
-
-        # Set an initial value if necessary
-        if self.isAttached() and not self.isReadOnly():
-            value_str = self.getDisplayValue()
-            self._lastValueByUser = value_str
-            self.emit(Qt.SIGNAL('valueChangedDueToEvent(QString)'), 
-                      Qt.QString(value_str))
-
-    def postDetach(self):
-        TaurusBaseWidget.postDetach(self)
-        Qt.QObject.disconnect(self, Qt.SIGNAL("returnPressed()"), 
-                                  self.writeTextValue)
-        Qt.QObject.disconnect(self, Qt.SIGNAL("textChanged(QString)"), 
-                                  self.userChangedValue)
-
-    def getConfigurationAttributeValue(self):
-        """Helper method to get the proper parameter value from the configuration"""
+
+    def setValue(self, v):
+        model = self.getModelObj()
+        cfg = self._configParam
+        if model is None or not cfg:
+            v_str = str(v)
+        else:
+            v_str = str(model.getParam(cfg))
+        self.blockSignals(True)
+        self.setText(v_str.strip())
+        self.blockSignals(False)
+
+    def getValue(self):
+        v_qstr = self.text()
         model = self.getModelObj()
-        if model is None:
-            return None
         try:
-            return getattr(model, str(self._configParam))
+            return model.encode(v_qstr)
         except:
-            self.debug("Invalid configuration parameter %s" % self._configParam)
             return None
-        
-    def getDisplayValue(self):
-        cfg_value = self.getConfigurationAttributeValue()
-        if cfg_value is None:
-            cfg_value = self.getNoneValue()
-        else:
-            cfg_value = str(cfg_value)
-        return cfg_value
-
-    def isValueChangedByUser(self):
-        localValue = str(self.text())
-        return not localValue == self._lastValueByUser
 
-    def updateStyle(self):
-        p = self.palette()
-        
-        p.setBrush(Qt.QPalette.Base, Qt.Qt.white)
-        p.setBrush(Qt.QPalette.Text,Qt.Qt.black)
-        
-        if not self.isReadOnly() and self.isValueChangedByUser():
-            if self.hasFocus():
-                p.setBrush(Qt.QPalette.Highlight, Qt.Qt.blue)
-            else:
-                p.setBrush(Qt.QPalette.Shadow, Qt.Qt.blue)
-                p.setBrush(Qt.QPalette.Button, Qt.Qt.blue)
-        else:
-            p.setBrush(Qt.QPalette.Shadow, self._dftShadow)
-            p.setBrush(Qt.QPalette.Button, self._dftButton)
-            p.setBrush(Qt.QPalette.Highlight, self._dftHighlight)
-        self.updatePendingOpsStyle()
-        self.update()
-
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # QT properties 
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-   
-    @Qt.pyqtSignature("setModel(QString)")
     def setModel(self, model):
         model = str(model)
         try:
             self._configParam = model[model.rfind('=')+1:].lower()
         except:
             self._configParam = ''
-        TaurusBaseWidget.setModel(self,model)
-
-    model = Qt.pyqtProperty("QString", TaurusBaseWidget.getModel, setModel,
-                            TaurusBaseWidget.resetModel)
-                                
-    useParentModel = Qt.pyqtProperty("bool", TaurusBaseWidget.getUseParentModel,
-                                     TaurusBaseWidget.setUseParentModel, 
-                                     TaurusBaseWidget.resetUseParentModel)
+        TaurusBaseWritableWidget.setModel(self,model)
 
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # QT signal handlers
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    def valueChanged(self):
+        model = self.getModelObj()
+        if self.getValue() != str(model.getParam(self._configParam)):
+            self.setStyleSheet('TaurusConfigLineEdit {color: %s; font-weight: %s}'%('blue','bold'))
+        else:
+            self.setStyleSheet('TaurusConfigLineEdit {color: %s; font-weight: %s}'%('black','normal'))
 
-    @Qt.pyqtSignature("textChanged(QString)")
-    def userChangedValue(self,qstr):
-        self.updateStyle()
-    
-    @Qt.pyqtSignature("returnPressed(QString)")
-    def writeTextValue(self):
+    def writeValue(self):
         model = self.getModelObj()
-        if not self.isReadOnly() and model:
-            try:
-                new_value = str(self.text())
-                model.setParam(self._configParam, new_value)
-                self._lastValueByUser = new_value
-                self.updateStyle()
-            except PyTango.DevFailed, e:
-                ret = Qt.QMessageBox.warning(self, "Write error",e[0]['desc'],
-                                             Qt.QMessageBox.Ok)
+        model.setParam(str(self._configParam), str(self.text()))
+        self.setStyleSheet('TaurusConfigLineEdit {color: %s; font-weight: %s}'%('black','normal'))
 
     @classmethod
     def getQtDesignerPluginInfo(cls):
-        # Disable designer plugin
-        return None
+        ret = TaurusBaseWritableWidget.getQtDesignerPluginInfo()
+        ret['module'] = 'taurus.qt.qtgui.input'
+        ret['icon'] = ":/designer/lineedit.png"
+        return ret
+
+#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    # QT properties
+#-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
 
+    model = Qt.pyqtProperty("QString", TaurusBaseWritableWidget.getModel,
+                            setModel, TaurusBaseWritableWidget.resetModel)
+
+    autoApply = Qt.pyqtProperty("bool", TaurusBaseWritableWidget.getAutoApply,
+                                TaurusBaseWritableWidget.setAutoApply,
+                                TaurusBaseWritableWidget.resetAutoApply)
+
+    forcedApply = Qt.pyqtProperty("bool", TaurusBaseWritableWidget.getForcedApply,
+                                  TaurusBaseWritableWidget.setForcedApply,
+                                  TaurusBaseWritableWidget.resetForcedApply)
 
 def main():
     import sys
@@ -413,10 +341,10 @@ def main():
     a = Qt.QApplication([])
     panel = Qt.QWidget()
     l = Qt.QGridLayout()
-    w1 = TaurusValueLineEdit()
+    w1 = TaurusConfigLineEdit()
+    #w1 = TaurusValueLineEdit()
     w1.setModel(attr_name)
     l.addWidget(w1,0,0)
-    
     panel.setLayout(l)
     panel.setVisible(True)
     return a.exec_()
diff --git a/lib/taurus/qt/qtgui/input/taurusspinbox.py b/lib/taurus/qt/qtgui/input/taurusspinbox.py
index a0c08fe..3bfc747 100644
--- a/lib/taurus/qt/qtgui/input/taurusspinbox.py
+++ b/lib/taurus/qt/qtgui/input/taurusspinbox.py
@@ -25,14 +25,15 @@
 
 """This module provides a set of basic taurus widgets based on QAbstractSpinBox"""
 
-__all__ = ["TaurusValueSpinBox" ]
+__all__ = ["TaurusValueSpinBox", "TaurusValueSpinBoxEx" ]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 from taurus.qt.qtgui.base import TaurusBaseWritableWidget
 from tauruslineedit import TaurusValueLineEdit
+from taurus.qt.qtgui.resource import getStandardIcon
 
 class TaurusValueSpinBox(Qt.QAbstractSpinBox):
 
@@ -53,16 +54,16 @@ class TaurusValueSpinBox(Qt.QAbstractSpinBox):
         return getattr(self.lineEdit(), name)
 
     # The minimum size of the widget (a limit for the user)
-    def minimumSizeHint(self):
-        return Qt.QSize(20, 20)
+    #def minimumSizeHint(self):
+    #    return Qt.QSize(20, 20)
     
     # The default size of the widget
-    def sizeHint(self):
-        return Qt.QSize(80, 24)
+    #def sizeHint(self):
+    #    return Qt.QSize(80, 24)
         
     def setValue(self, v):
         self.lineEdit().setValue(v)
-    
+
     def getValue(self):
         return self.lineEdit().getValue()
     
@@ -81,6 +82,14 @@ class TaurusValueSpinBox(Qt.QAbstractSpinBox):
     def stepBy(self, steps):
         #validator = self.lineEdit().validator()
         self.setValue(self.getValue() + self.getSingleStep()*steps)
+
+        if self.lineEdit().getAutoApply():
+            self.lineEdit().emit(Qt.SIGNAL('editingFinished()'))
+        else:
+            kmods = Qt.QCoreApplication.instance().keyboardModifiers()
+            controlpressed = bool(kmods&Qt.Qt.ControlModifier)
+            if controlpressed:
+                self.lineEdit().writeValue(forceApply=True)
     
     def stepEnabled(self):
         le, curr_val, ss = self.lineEdit(), self.getValue(), self.getSingleStep()
@@ -127,13 +136,13 @@ class TaurusValueSpinBox(Qt.QAbstractSpinBox):
         return self.lineEdit().resetAutoApply()
         
     def setForcedApply(self, model):
-        self.lineEdit().setAutoApply(model)
+        self.lineEdit().setForcedApply(model)
     
     def getForcedApply(self):
-        return self.lineEdit().getAutoApply()
+        return self.lineEdit().getForcedApply()
     
     def resetForcedApply(self):
-        return self.lineEdit().resetAutoApply()
+        return self.lineEdit().resetForcedApply()
     
     def getSingleStep(self):
         return self._singleStep
@@ -165,3 +174,53 @@ class TaurusValueSpinBox(Qt.QAbstractSpinBox):
 
     forcedApply = Qt.pyqtProperty("bool", getForcedApply, setForcedApply,
                                     resetForcedApply)
+
+_S = """
+QSpinBox::up-button {
+    border-width: 0px;
+}
+QPushButton {
+    min-width: 6px;
+    min-height: 10px;
+    /*border-style: solid;
+    border-width: 1px;
+    border-color: black;
+    border-top-right-radius: 2px;
+    border-bottom-right-radius: 2px;*/
+    margin: 0px;
+    padding: 0px;
+}
+"""
+    
+class TaurusValueSpinBoxEx(Qt.QWidget):
+
+    def __init__(self, qt_parent = None, designMode = False):
+        Qt.QWidget.__init__(self, qt_parent)
+        layout = Qt.QGridLayout()
+        layout.setMargin(0)
+        layout.setContentsMargins(0,0,0,0)
+        layout.setSpacing(0)
+        self.setLayout(layout)
+        self.setStyleSheet(_S)
+        self.__dict__['spinBox'] = spin = TaurusValueSpinBox(qt_parent=self, designMode=designMode)
+        self.__dict__['sliderButton1'] = b1 = Qt.QToolButton(self)
+        self.__dict__['sliderButton2'] = b2 = Qt.QToolButton(self)
+        b1.setIcon(getStandardIcon(Qt.QStyle.SP_TitleBarShadeButton, b1))
+        b2.setIcon(getStandardIcon(Qt.QStyle.SP_TitleBarUnshadeButton, b2))
+        layout.addWidget(spin, 0, 0, 2, 1)
+        layout.addWidget(b1, 0, 1, 1, 1, Qt.Qt.AlignBottom)
+        layout.addWidget(b2, 1, 1, 1, 1, Qt.Qt.AlignTop)
+        layout.setColumnStretch(0, 1)
+        layout.setColumnStretch(1, 0)
+        
+        policy = self.sizePolicy()
+        policy.setHorizontalPolicy(Qt.QSizePolicy.Minimum)
+        policy.setVerticalPolicy(Qt.QSizePolicy.Fixed)
+        self.setSizePolicy(policy)
+        
+    def __getattr__(self, name):
+        return getattr(self.spinBox, name)
+    
+    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 345fa16..b3acab0 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 PyQt4 import Qt
+from taurus.qt import Qt
 
 import taurus.core
 from taurus.qt.qtgui.base import TaurusBaseWritableWidget
diff --git a/lib/taurus/core/tango/sardana/__init__.py b/lib/taurus/qt/qtgui/model/__init__.py
similarity index 92%
copy from lib/taurus/core/tango/sardana/__init__.py
copy to lib/taurus/qt/qtgui/model/__init__.py
index 3c700a6..f5cfc48 100644
--- a/lib/taurus/core/tango/sardana/__init__.py
+++ b/lib/taurus/qt/qtgui/model/__init__.py
@@ -23,8 +23,8 @@
 ##
 #############################################################################
 
-"""The sardana package. It contains specific part of sardana"""
+"""This package provides the set of base model widget classes."""
 
 __docformat__ = 'restructuredtext'
 
-from .sardana import *
\ No newline at end of file
+from .qbasemodel import *
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/model/qbasemodel.py b/lib/taurus/qt/qtgui/model/qbasemodel.py
new file mode 100644
index 0000000..2fbeae1
--- /dev/null
+++ b/lib/taurus/qt/qtgui/model/qbasemodel.py
@@ -0,0 +1,504 @@
+#!/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 base widget that displays a Qt view widget envolved
+by a toolbar and a status bar (optional)"""
+
+__all__ = ["QBaseModelWidget", "TaurusBaseModelWidget",
+           "BaseToolBar", "FilterToolBar", "EditorToolBar", "SelectionToolBar",
+           "RefreshToolBar", "PerspectiveToolBar"]
+
+__docformat__ = 'restructuredtext'
+
+from taurus.qt import Qt
+
+from taurus.qt.qtcore.model import *
+from taurus.qt.qtgui.util import ActionFactory
+from taurus.qt.qtgui.resource import getIcon, getThemeIcon
+from taurus.qt.qtgui.base import TaurusBaseWidget
+
+class BaseToolBar(Qt.QToolBar):
+
+    def __init__(self, name=None, view=None, parent=None, designMode=False):
+        if name is None:
+            name = "Base toolbar"
+        self._viewWidget = view or parent
+        Qt.QToolBar.__init__(self, name, parent)
+        self.setIconSize(Qt.QSize(16, 16))
+        self.setFloatable(False)
+        self.setMovable(False)
+
+    def viewWidget(self):
+        return self._viewWidget
+
+
+class FilterToolBar(BaseToolBar):
+    """Internal widget providing quick filter to be placed in a _QToolArea"""
+    
+    def __init__(self, view=None, parent=None, designMode=False):
+        BaseToolBar.__init__(self, name="Taurus filter toolbar", view=view,
+                             parent=parent, designMode=designMode)
+        filterLineEdit = self._filterLineEdit = Qt.QLineEdit(self)
+        filterLineEdit.setSizePolicy(Qt.QSizePolicy(Qt.QSizePolicy.Preferred,
+                                                    Qt.QSizePolicy.Preferred))
+        filterLineEdit.setToolTip("Quick filter")
+        Qt.QObject.connect(filterLineEdit,
+                           Qt.SIGNAL("textChanged(const QString &)"),
+                           self.onFilterChanged)
+        self.addWidget(filterLineEdit)
+
+        af = ActionFactory()
+        self._clearFilterAction = af.createAction(self, "Clear",
+                                          icon=getThemeIcon("edit-clear"),
+                                          tip="Clears the filter",
+                                          triggered=self.onClearFilter)
+        self.addAction(self._clearFilterAction)
+
+    def filterLineEdit(self):
+        return self._filterLineEdit
+        
+    def onClearFilter(self):
+        self.filterLineEdit().setText("")
+        self.emit(Qt.SIGNAL("clearFilterTriggered"))
+        
+    def onFilterChanged(self, text=None):
+        text = text or self.filterLineEdit().text()
+        self.emit(Qt.SIGNAL("filterChanged"), text)
+
+
+class EditorToolBar(BaseToolBar):
+    """Internal widget to be placed in a _QToolArea providing buttons for
+    moving, adding and removing items from a view based widget"""
+    
+    def __init__(self, view=None, parent=None, designMode=False):
+        BaseToolBar.__init__(self, name="Taurus editor toolbar", view=view,
+                             parent=parent, designMode=designMode)
+        
+        af = ActionFactory()
+        self._addAction = af.createAction(self, "New item",
+                                          icon=getThemeIcon(":/actions/list-add"),
+                                          tip="Add new item",
+                                          triggered=self.onAdd)
+        self._removeAction = af.createAction(self, "Remove item",
+                                             icon=getThemeIcon(":/actions/list-remove"),
+                                             tip="Remove item",
+                                             triggered=self.onRemove)
+        self._moveTopAction = af.createAction(self, "To top",
+                                              icon=getThemeIcon(":/actions/go-top"),
+                                              tip="Move selected item to top",
+                                              triggered=self.onMoveTop)
+        self._moveUpAction = af.createAction(self, "Move up",
+                                             icon=getThemeIcon(":/actions/go-up"),
+                                             tip="Move selected item up one level",
+                                             triggered=self.onMoveUp)
+        self._moveDownAction = af.createAction(self, "Move down",
+                                               icon=getThemeIcon(":/actions/go-down"),
+                                               tip="Move selected item down one level",
+                                               triggered=self.onMoveDown)
+        self._moveBottomAction = af.createAction(self, "To bottom",
+                                                 icon=getThemeIcon(":/actions/go-bottom"),
+                                                 tip="Move selected item to bottom",
+                                                 triggered=self.onMoveBottom)
+        self.addAction(self._addAction)
+        self.addAction(self._removeAction)
+        self.addAction(self._moveTopAction)
+        self.addAction(self._moveUpAction)
+        self.addAction(self._moveDownAction)
+        self.addAction(self._moveBottomAction)
+        #self.setStyleSheet("QWidget {background : red; }")
+    
+    def onAdd(self):
+        self.emit(Qt.SIGNAL("addTriggered"))
+
+    def onRemove(self):
+        self.emit(Qt.SIGNAL("removeTriggered"))
+
+    def onMoveTop(self):
+        self.emit(Qt.SIGNAL("moveTopTriggered"))
+    
+    def onMoveUp(self):
+        self.emit(Qt.SIGNAL("moveUpTriggered"))
+
+    def onMoveDown(self):
+        self.emit(Qt.SIGNAL("moveDownTriggered"))
+
+    def onMoveBottom(self):
+        self.emit(Qt.SIGNAL("moveBottomTriggered"))
+
+
+class SelectionToolBar(BaseToolBar):
+    
+    def __init__(self, view=None, parent=None, designMode=False):
+        BaseToolBar.__init__(self, name="Taurus selection toolbar", view=view,
+                             parent=parent, designMode=designMode)
+
+        af = ActionFactory()
+        self._selectAllAction = af.createAction(self, "Select All",
+                                                icon=getThemeIcon("edit-select-all"),
+                                                tip="Select all items",
+                                                triggered=self.onSelectAll)
+        self._clearSelectionAction = af.createAction(self, "Clear selection",
+                                                     icon=getThemeIcon("edit-clear"),
+                                                     tip="Clears current selection",
+                                                     triggered=self.onclearSelection)
+
+        self.addAction(self._selectAllAction)
+        self.addAction(self._clearSelectionAction)
+    
+    def onSelectAll(self):
+        self.emit(Qt.SIGNAL("selectAllTriggered"))
+
+    def onclearSelection(self):
+        self.emit(Qt.SIGNAL("clearSelectionTriggered"))
+
+
+class RefreshToolBar(BaseToolBar):
+    
+    def __init__(self, view=None, parent=None, designMode=False):
+        BaseToolBar.__init__(self, name="Taurus refresh toolbar", view=view,
+                             parent=parent, designMode=designMode)
+
+        af = ActionFactory()
+        self._refreshAction = af.createAction(self, "Refresh",
+                                              icon=getThemeIcon("view-refresh"),
+                                              tip="Refresh view",
+                                              triggered=self.onRefresh)
+        self.addAction(self._refreshAction)
+    
+    def onRefresh(self):
+        self.emit(Qt.SIGNAL("refreshTriggered"))
+
+
+class PerspectiveToolBar(BaseToolBar):
+    
+    def __init__(self, perspective, view=None, parent=None, designMode=False):
+        BaseToolBar.__init__(self, name="Taurus refresh toolbar", view=view,
+                             parent=parent, designMode=designMode)
+        self._perspective = perspective
+        view = self.viewWidget()
+        b = self._perspective_button = Qt.QToolButton(self)
+        b.setToolTip("Perspective selection")
+        b.setPopupMode(Qt.QToolButton.InstantPopup)
+        b.setToolButtonStyle(Qt.Qt.ToolButtonTextBesideIcon)
+        
+        menu = Qt.QMenu("Perspective", b)
+        b.setMenu(menu)
+        af = ActionFactory()
+        for persp, persp_data in view.KnownPerspectives.items():
+            label = persp_data["label"]
+            icon = getIcon(persp_data["icon"])
+            tip = persp_data["tooltip"]
+            action = af.createAction(self, label, icon=icon, tip=tip,
+                                     triggered=self.onSwitchPerspective)
+            action.perspective = persp
+            menu.addAction(action)
+            if persp == perspective:
+                b.setDefaultAction(action)
+        
+        self._perspectiveAction = self.addWidget(b)
+
+    def switchPerspectiveButton(self):
+        """Returns the QToolButton that handles the switch perspective.
+        
+        :return: (PyQt4.QtGui.QToolButton) the switch perspective tool button
+        """
+        return self._perspective_button
+    
+    def onSwitchPerspective(self):
+        action = self.sender()
+        self._perspective = action.perspective
+        self._perspective_button.setDefaultAction(action)
+        self.emit(Qt.SIGNAL("perspectiveChanged"), action.perspective)
+
+    def perspective(self):
+        return self._perspective
+
+
+class QBaseModelWidget(Qt.QMainWindow):
+    """A pure Qt widget designed to display a Qt view widget (QTreeView for
+    example), envolved by optional toolbar and statusbar.
+    The Qt model associated with the internal Qt view widget should be a
+    :class:`taurus.qt.qtcore.model.TaurusBaseModel`"""
+    
+    def __init__(self, parent=None, designMode=False, with_filter_widget=True):
+        Qt.QMainWindow.__init__(self, parent)
+        self.setWindowFlags(Qt.Qt.Widget)
+        self._baseQModel = None
+        self._toolBars = []
+        self._with_filter_widget = with_filter_widget
+        
+        toolBars = self.createToolArea()
+        self._viewWidget = self.createViewWidget()
+        statusbar = self.createStatusBar()
+        
+        for toolBar in toolBars:
+            toolBar.addSeparator()
+            self.addToolBar(toolBar)
+        self.setContentsMargins(0, 0, 0, 0)
+        self.setCentralWidget(self._viewWidget)
+        self.setStatusBar(statusbar)
+    
+    def createViewWidget(self):
+        raise NotImplementedError
+    
+    def createStatusBar(self):
+        sb = Qt.QStatusBar()
+        sb.setSizeGripEnabled(False)
+        return sb
+    
+    def createToolArea(self):
+        tb = [] # tb = self._toolArea = QToolArea(self)
+        if self._with_filter_widget:
+            f_bar = self._filterBar = FilterToolBar(view=self, parent=self)
+            Qt.QObject.connect(f_bar, Qt.SIGNAL("filterChanged"),
+                               self.onFilterChanged)
+            tb.append(f_bar)
+        else:
+            self._filterBar = None
+
+        s_bar = self._selectionBar = SelectionToolBar(view=self, parent=self)
+        Qt.QObject.connect(s_bar, Qt.SIGNAL("selectAllTriggered"),
+                           self.onSelectAll)
+        Qt.QObject.connect(s_bar, Qt.SIGNAL("clearSelectionTriggered"),
+                           self.onClearSelection)
+        tb.append(s_bar)
+        
+        r_bar = self._selectionBar = RefreshToolBar(view=self, parent=self)
+        Qt.QObject.connect(r_bar, Qt.SIGNAL("refreshTriggered"),
+                           self.onRefreshModel)
+        tb.append(r_bar)
+        
+        return tb
+
+    def onRefreshModel(self):
+        self.getQModel().refresh(True)
+
+    def onSelectAll(self):
+        view = self.viewWidget()
+        view.selectAll()
+
+    def onClearSelection(self):
+        view = self.viewWidget()
+        view.clearSelection()
+
+    def _onClicked (self, index):
+        '''Emits an "itemClicked" signal with with the clicked item and column
+        as arguments'''
+        item = self._mapToSource(index).internalPointer()
+        self.emit(Qt.SIGNAL('itemClicked'),item, index.column())
+        
+    def _onDoubleClicked (self, index):
+        '''Emits an "itemDoubleClicked" signal with the clicked item and column
+        as arguments'''
+        item = self._mapToSource(index).internalPointer()
+        self.emit(Qt.SIGNAL('itemDoubleClicked'),item, index.column())
+
+    def viewWidget(self):
+        return self._viewWidget
+    
+    def getQModel(self):
+        return self.viewWidget().model()
+
+    def getBaseQModel(self):
+        return self._baseQModel
+
+    def usesProxyQModel(self):
+        return isinstance(self.getQModel(), Qt.QAbstractProxyModel)
+
+    def _mapToSource(self, index):
+        if not self.usesProxyQModel():
+            return index
+        model = self.getQModel()
+        while isinstance(model, Qt.QAbstractProxyModel):
+            index = model.mapToSource(index)
+            model = model.sourceModel()
+        return index
+
+    def setQModel(self, qmodel):
+        
+        self._baseQModel = qmodel
+        while isinstance(self._baseQModel, Qt.QAbstractProxyModel):
+            self._baseQModel = self._baseQModel.sourceModel()
+        
+        view = self.viewWidget()
+        old_selection_model = view.selectionModel()
+        CC = 'currentChanged(const QModelIndex &,const QModelIndex &)'
+        SC = 'selectionChanged(QItemSelection &, QItemSelection &)'
+        if old_selection_model is not None:
+            Qt.QObject.disconnect(old_selection_model, Qt.SIGNAL(CC),
+                                  self.viewCurrentIndexChanged)
+            Qt.QObject.disconnect(old_selection_model, Qt.SIGNAL(SC),
+                                  self.viewSelectionChanged)
+        view.setModel(qmodel)
+        new_selection_model = view.selectionModel()
+        if new_selection_model is not None:
+            Qt.QObject.connect(new_selection_model, Qt.SIGNAL(CC),
+                               self.viewCurrentIndexChanged)
+            Qt.QObject.connect(new_selection_model, Qt.SIGNAL(SC),
+                               self.viewSelectionChanged)
+        view.setCurrentIndex(view.rootIndex())
+        self._updateToolBar()
+    
+    def viewSelectionChanged(self, selected, deselected):
+        self.emit(Qt.SIGNAL("itemSelectionChanged"))
+    
+    def viewCurrentIndexChanged(self, current, previous):
+        # if there is a proxy model we have to translate the selection
+        base_current = self._mapToSource(current)
+        base_previous = self._mapToSource(previous)
+        
+        self._updateToolBar(current)
+        
+        if base_current.isValid():
+            currentTaurusTreeItem = base_current.internalPointer()
+        else:
+            currentTaurusTreeItem = None
+            
+        if base_previous.isValid():
+            previousTaurusTreeItem = base_previous.internalPointer()
+        else:
+            previousTaurusTreeItem = None
+        self.emit(Qt.SIGNAL("currentItemChanged"), currentTaurusTreeItem,
+                  previousTaurusTreeItem)
+    
+    def _updateToolBar(self, current=None, previous=None):
+        pass
+    
+    def selectedItems(self):
+        """Returns a list of all selected non-hidden items
+        
+        :return: (list<TaurusTreeItem>)
+        """
+        view = self.viewWidget()
+        return [self._mapToSource(index).internalPointer() for index in view.selectedIndexes()]
+    
+    def onFilterChanged(self, filter):
+        if not self.usesProxyQModel():
+            return
+        proxy_model = self.getQModel()
+        if len(filter) > 0 and filter[0] != '^':
+            filter = '^' + filter
+        proxy_model.setFilterRegExp(filter)
+        #proxy_model.setFilterFixedString(filter)
+        #proxy_model.setFilterWildcard(filter)
+        #self.update()
+    
+    def refresh(self):
+        self.getQModel().refresh()
+
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    # QMainWindow overwriting
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    def addToolBar(self, toolbar):
+        Qt.QMainWindow.addToolBar(self, toolbar)
+        self._toolBars.append(toolbar)
+    
+    def insertToolBar(self, before, toolbar):
+        if isinstance(before, Qt.QToolBar):
+            index = self._toolBars.index(before)
+        else:
+            index = before
+            before = self._toolBars[before]
+        Qt.QMainWindow.insertToolBar(self, before, toolbar)
+        self._toolBars.insert(index, toolbar)
+
+
+class TaurusBaseModelWidget(TaurusBaseWidget):
+    """A class:`taurus.qt.qtgui.base.TaurusBaseWidget` that connects to a
+    taurus model. It must be used together with class:`taurus.qt.qtgui.base.QBaseModelWidget`"""
+    
+    KnownPerspectives = { }
+    DftPerspective = None
+
+    def __init__(self, designMode=False, perspective=None, proxy=None):
+        name = self.__class__.__name__
+        self._proxyModel = proxy
+        self.call__init__(TaurusBaseWidget, name, designMode=designMode)
+        if perspective is None:
+            perspective = self.DftPerspective
+        
+        if len(self.KnownPerspectives) > 1:
+            p_bar = self._perspectiveBar = PerspectiveToolBar(perspective, view=self, parent=self)
+            self.connect(p_bar, Qt.SIGNAL("perspectiveChanged"), self.onSwitchPerspective)
+            self.addToolBar(p_bar)
+        else:
+            self._perspectiveBar = None
+        self._setPerspective(perspective)
+
+    def perspective(self):
+        return self._perspectiveBar.perspective()
+    
+    def onSwitchPerspective(self, perspective):
+        self._setPerspective(perspective)
+    
+    def _setPerspective(self, perspective):
+        qmodel_classes = self.KnownPerspectives[perspective]["model"]
+        qmodel_class, qmodel_proxy_classes = qmodel_classes[-1], qmodel_classes[:-1]
+        qmodel_proxy_classes.reverse()
+        qmodel = qmodel_class(self, self.getModelObj())
+        qmodel_source = qmodel
+        if self._proxyModel is None:
+            for qmodel_proxy_class in qmodel_proxy_classes:
+                qproxy = qmodel_proxy_class(self)
+                qproxy.setSourceModel(qmodel_source)
+                qmodel_source = qproxy
+        else:
+            self._proxyModel.setSourceModel(qmodel_source)
+            qmodel_source = self._proxyModel
+        self.setQModel(qmodel_source)
+    
+
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    # TaurusBaseWidget overwriting
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+
+    def setModel(self, m):
+        TaurusBaseWidget.setModel(self, m)
+
+        view, modelObj = self.viewWidget(), self.getModelObj()
+        model = view.model()
+        if model is None: return
+        model.setDataSource(modelObj)
+    
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    # QT property definition
+    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
+    
+    #: This property holds the unique URI string representing the model name 
+    #: with which this widget will get its data from. The convention used for 
+    #: the string can be found :ref:`here <model-concept>`.
+    #: 
+    #: In case the property :attr:`useParentModel` is set to True, the model 
+    #: text must start with a '/' followed by the attribute name.
+    #:
+    #: **Access functions:**
+    #:
+    #:     * :meth:`TaurusBaseWidget.getModel`
+    #:     * :meth:`TaurusBaseWidget.setModel`
+    #:     * :meth:`TaurusBaseWidget.resetModel`
+    #:
+    #: .. seealso:: :ref:`model-concept`
+    model = Qt.pyqtProperty("QString", TaurusBaseWidget.getModel, setModel,
+                            TaurusBaseWidget.resetModel)
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/panel/__init__.py b/lib/taurus/qt/qtgui/panel/__init__.py
index dc07aab..7046936 100644
--- a/lib/taurus/qt/qtgui/panel/__init__.py
+++ b/lib/taurus/qt/qtgui/panel/__init__.py
@@ -37,4 +37,5 @@ from .taurusdevicepanel import *
 from .taurusvalue import *
 from .taurusform import *
 from .taurusmessagepanel import *
+from .taurusmodellist import *
 
diff --git a/lib/taurus/qt/qtgui/panel/qdataexportdialog.py b/lib/taurus/qt/qtgui/panel/qdataexportdialog.py
index 8d2720b..e8dd6df 100755
--- a/lib/taurus/qt/qtgui/panel/qdataexportdialog.py
+++ b/lib/taurus/qt/qtgui/panel/qdataexportdialog.py
@@ -29,7 +29,7 @@ one or more curves"""
 import os.path
 from datetime import datetime
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 from ui import ui_DataExportDlg
 
diff --git a/lib/taurus/qt/qtgui/panel/qrawdatachooser.py b/lib/taurus/qt/qtgui/panel/qrawdatachooser.py
index b56060e..2975e54 100644
--- a/lib/taurus/qt/qtgui/panel/qrawdatachooser.py
+++ b/lib/taurus/qt/qtgui/panel/qrawdatachooser.py
@@ -30,7 +30,7 @@ RawDataChooser.py:  widget for importing RawData (from file or from a function)
 import sys
 import numpy
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 from taurus.core.util import SafeEvaluator
 
diff --git a/lib/taurus/qt/qtgui/panel/taurusattributechooser.py b/lib/taurus/qt/qtgui/panel/taurusattributechooser.py
index d7fc61d..0c8d288 100644
--- a/lib/taurus/qt/qtgui/panel/taurusattributechooser.py
+++ b/lib/taurus/qt/qtgui/panel/taurusattributechooser.py
@@ -32,11 +32,10 @@ __all__ = ["TaurusAttributeChooser"]
 __docformat__ = 'restructuredtext'
 
 import sys
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 from taurus.qt.qtgui.base import TaurusBaseWidget
 from taurus.core.util import CaselessList
-from taurus.qt.qtgui.resource import qrc_tango_icons_actions
 
 from ui.ui_AttributeChooser import *
 
diff --git a/lib/taurus/qt/qtgui/panel/taurusconfigbrowser.py b/lib/taurus/qt/qtgui/panel/taurusconfigbrowser.py
index 703b348..98c094b 100644
--- a/lib/taurus/qt/qtgui/panel/taurusconfigbrowser.py
+++ b/lib/taurus/qt/qtgui/panel/taurusconfigbrowser.py
@@ -31,7 +31,7 @@ __all__ = ["QConfigViewer"]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 import cPickle as pickle
 import os
 from taurus.qt.qtcore.configuration import BaseConfigurableClass
diff --git a/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py b/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py
index 3b3c4bb..292059a 100644
--- a/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py
+++ b/lib/taurus/qt/qtgui/panel/taurusdevicepanel.py
@@ -31,7 +31,7 @@ __all__ = ["TaurusDevPanel"]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 import taurus.core
 from taurus.qt.qtgui.container import TaurusMainWindow
diff --git a/lib/taurus/qt/qtgui/panel/taurusfilterpanel.py b/lib/taurus/qt/qtgui/panel/taurusfilterpanel.py
index 037d3d9..495f985 100644
--- a/lib/taurus/qt/qtgui/panel/taurusfilterpanel.py
+++ b/lib/taurus/qt/qtgui/panel/taurusfilterpanel.py
@@ -29,7 +29,7 @@ __docformat__ = 'restructuredtext'
 
 import re
 
-import PyQt4.Qt as Qt
+from taurus.qt import Qt
 
 import taurus.core
 import taurus.core.util
diff --git a/lib/taurus/qt/qtgui/panel/taurusform.py b/lib/taurus/qt/qtgui/panel/taurusform.py
index 2b91e35..8906f65 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 PyQt4 import Qt
+from taurus.qt import Qt
 import PyTango
 
 import taurus.core
@@ -40,7 +40,6 @@ from taurus.qt.qtcore.mimetypes import TAURUS_ATTR_MIME_TYPE, TAURUS_DEV_MIME_TY
 from taurus.qt.qtgui.container import TaurusWidget, TaurusScrollArea
 from taurus.qt.qtgui.button import QButtonBox, TaurusCommandButton
 from taurusmodelchooser import TaurusModelChooser
-from taurusvalue import TaurusValue
 
 
 class ParameterCB(Qt.QComboBox):
@@ -57,9 +56,19 @@ class ParameterCB(Qt.QComboBox):
 
 
 class TaurusForm(TaurusWidget):
-    '''A form widget that gets a list of attributes as a model and displays
-    a :class:`TaurusValue` for each of them. By default it automatically shows
-    scrollbars if needed and global Apply and Cancel buttons.
+    '''A form containing specific widgets for interacting with
+    a given list of taurus attributes and/or devices.
+    
+    Its model is a list of attribute and/or device names to be shown. Each item
+    is represented in a row consisting of a label, a read widget, a write
+    widget, a units widget and an "extra" widget (some of them may not be shown)
+    which are vertically aligned with their counterparts from other items.
+    
+    By default a :class:`TaurusValue` object is used for each item, but this
+    can be changed and specific mappings can be defined using the
+    :meth:`setCustomWidgetMap` method.
+    
+    By default, the form provides global Apply and Cancel buttons.
     
     You can also see some code that exemplifies the use of TaurusForm in :ref:`Taurus
     coding examples <examples>` '''
@@ -67,8 +76,7 @@ class TaurusForm(TaurusWidget):
     def __init__(self, parent = None,
                  formWidget = None,
                  buttons = None,
-                 withButtons = True,
-#                 withScrolls = True,  
+                 withButtons = True, 
                  designMode = False):
         TaurusWidget.__init__(self, parent, designMode)
         
@@ -77,8 +85,7 @@ class TaurusForm(TaurusWidget):
         self._customWidgetMap = {}
         self._model = []
         self._children = []
-        if formWidget is None: formWidget = TaurusValue
-        self._formWidget = formWidget
+        self.setFormWidget(formWidget)
         self._withButtons = withButtons
         
         self.setLayout(Qt.QVBoxLayout())
@@ -119,18 +126,18 @@ class TaurusForm(TaurusWidget):
     def setCustomWidgetMap(self, cwmap):
         '''Sets a map map for custom widgets.
         
-        :param cwmap: (dict<str,Qt.QWidget>) a dictionary whose keys are device
+        :param cwmap: (dict<str,tuple>) a dictionary whose keys are device
                       type strings (i.e. see :class:`PyTango.DeviceInfo`) and
-                      whose values are widgets to be used
+                      whose values are tuples of classname,args,kwargs
         '''
         self._customWidgetMap = cwmap
         
     def getCustomWidgetMap(self):
         '''Returns the map used to create custom widgets.
         
-        :return: (dict<str,Qt.QWidget>) a dictionary whose keys are device
+        :return: (dict<str,tuple>) a dictionary whose keys are device
                  type strings (i.e. see :class:`PyTango.DeviceInfo`) and whose
-                 values are widgets to be used
+                 values are tuples of classname,args,kwargs
         '''
         return self._customWidgetMap
       
@@ -209,14 +216,63 @@ class TaurusForm(TaurusWidget):
         self.destroyChildren()
         self._model = Qt.QStringList()
         
-    def getFormWidget(self):
-        return self._formWidget
+    def getFormWidget(self, model=None):
+        '''Returns a tuple that can be used for creating a widget for a given model.
         
+        :param model: (str) a taurus model name for which the new item of the
+                      form will be created
+        
+        :return: (tuple<type,list,dict>) a tuple containing a class, a list of
+                 args and a dict of keyword args. The args and the keyword args
+                 can be passed to the class constructor
+        '''
+        if model is None:
+            return self._defaultFormWidget,(),{}
+        #If a model is given, check if is in the custom widget map
+        try: 
+            obj=taurus.Attribute(model) #if it is not an attribute, it will get an exception here
+            return self._defaultFormWidget,(),{}
+        except:
+            obj=taurus.Device(model)
+            try:
+                key = obj.getHWObj().info().dev_class
+            except:
+                return self._defaultFormWidget,(),{}
+            #value = self._formWidgetsMap.get(key, self._defaultFormWidget)
+            cwmap = self.getCustomWidgetMap()
+            value = cwmap.get(key, self._defaultFormWidget)
+            if isinstance(value, type): #for backwards compatibility
+                if issubclass(value, self._defaultFormWidget):
+                    return value,(),{}
+                else:
+                    return self._defaultFormWidget,(), {'customWidgetMap':{key:value}}
+            #we expect a tuple of str,list,dict --> (classname_including_full_module, args, kwargs)
+            name,args,kwargs = value
+            pkgname,klassname = name.rsplit('.',1)
+            try:
+                pkg = __import__(pkgname, fromlist=[klassname])
+                klass = getattr(pkg,klassname)
+            except:
+                self.warning('Cannot import "%s". Using default widget for "%s".'%(name, model))
+                return self._defaultFormWidget,(),{}
+            if not issubclass(klass, self._defaultFormWidget):
+                cwmap = kwargs.get('customWidgetMap',{})
+                cwmap.update({key:klass})
+                kwargs['customWidgetMap'] = cwmap
+                klass = self._defaultFormWidget
+            return klass,args,kwargs    
+                
     def setFormWidget(self, formWidget):
-        self._formWidget = formWidget
+        if formWidget is None:
+            from taurus.qt.qtgui.panel import TaurusValue
+            self._defaultFormWidget = TaurusValue
+        elif isinstance(formWidget,Qt.QWidget):
+            self._defaultFormWidget = formWidget
+        else:
+            raise TypeError('formWidget must be one of None, QWidget. %s passed'%repr(type(formWidget)))
         
     def resetFormWidget(self):
-        self._formWidget = TaurusValue
+        self.setFormWidget(self, None)
         
     def isWithButtons(self):
         return self._withButtons
@@ -264,7 +320,8 @@ class TaurusForm(TaurusWidget):
     def destroyChildren(self):
         for child in self._children:
             self.unregisterConfigurableItem(child)
-            child.destroy()
+            #child.destroy()
+            child.deleteLater()
         self._children = []
                 
     def fillWithChildren(self):
@@ -280,16 +337,17 @@ class TaurusForm(TaurusWidget):
         
         for i,model in enumerate(self.getModel()): 
             model = str(model)
-            if parent_name: model = "%s/%s" % (parent_name, model)
-            widget = self.getFormWidget()(frame)
-            widget.setMinimumHeight(20)
-            try: widget.setCustomWidgetMap(self.getCustomWidgetMap())
-            except: pass
+            if parent_name: model = "%s/%s" % (parent_name, model) #@todo: Change this (it assumes tango model naming!)
+            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: 
                 widget.setModel(model)
                 widget.setParent(frame)
             except: 
+                #raise
                 self.warning('an error occurred while adding the child "%s". Skipping'%model)
+                self.traceback(level=taurus.Debug)
             try: widget.setModifiableByUser(self.isModifiableByUser())
             except: pass
             widget.setObjectName("__item%i"%i)
@@ -604,7 +662,7 @@ class TaurusAttrForm(TaurusWidget):
         return taurus.core.TaurusDevice
     
     def _updateAttrWidgets(self):
-        '''Populates the form with TaurusValues for each of the attributes shown
+        '''Populates the form with an item for each of the attributes shown
         '''
         dev = self.getModelObj()
         if dev is None or dev.getSWState() != taurus.core.TaurusSWDevState.Running:
@@ -741,6 +799,36 @@ def test3():
 #    dialog.getSplitter().setSizes([10,220])
 
     sys.exit(app.exec_()) 
+    
+def test4():
+    '''tests customwidgetma in taurusforms'''
+    import sys
+    from taurus.qt.qtgui.display import TaurusLabel
+    app = Qt.QApplication(sys.argv)
+    
+    from taurus.qt.qtgui.panel import TaurusValue
+    class DummyCW(TaurusValue):
+        def setModel(self,model):
+            print "!!!!! IN DUMMYCW.SETMODEL", model
+            TaurusValue.setModel(self, model+'/double_scalar')
+    
+    models = ['sys/database/2', 'sys/tg_test/1', 'sys/tg_test/1/short_spectrum', 'sys/tg_test/1/state','sys/tg_test/1/short_scalar_ro']
+    models.append('tango://controls02:10000/expchan/bl97_simucotictrl_1/1')
+    map={
+        'PseudoCounter':('taurus.qt.qtgui.extra_pool.PoolChannelTV', (),{}), #taurusvalue-like classes given as strings
+        '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', (),{}),
+        'TangoTest':DummyCW,    #a TaurusValue-like class given as a class (old way)
+        'DataBase':TaurusLabel} #a non-TaurusValue-like class given as a class (old way)
+    
+    dialog = TaurusForm()
+    dialog.setCustomWidgetMap(map)
+    dialog.setModel(models)
+    dialog.show()
+    sys.exit(app.exec_())
+            
 
 def taurusFormMain():
     '''A launcher for TaurusForm.'''
@@ -763,19 +851,10 @@ def taurusFormMain():
     dialog.setModifiableByUser(True)
     dialog.setWindowTitle(os.path.basename(sys.argv[0]))
     
-    #map motor widgets if extra_pool is available
-    try:
-        from taurus.qt.qtgui.extra_pool import PoolMotorSlim, PoolChannel
-        dialog.setCustomWidgetMap({'SimuMotor':PoolMotorSlim,
-                                'Motor':PoolMotorSlim,
-                                'PseudoMotor':PoolMotorSlim,
-                                'PseudoCounter':PoolChannel,
-                                'CTExpChannel':PoolChannel,
-                                'ZeroDExpChannel':PoolChannel,
-                                'OneDExpChannel':PoolChannel,
-                                'TwoDExpChannel':PoolChannel})
-    except:
-        pass  
+    
+    #set the default map for this installation
+    from taurus.TaurusCustomSettings import T_FORM_CUSTOM_WIDGET_MAP
+    dialog.setCustomWidgetMap(T_FORM_CUSTOM_WIDGET_MAP)
     
     #set a model list from the command line or launch the chooser  
     if len(args)>0:
@@ -792,7 +871,8 @@ def main():
     #test1()
     #test2()
     #test3()
-    taurusFormMain()
+    test4()
+    #taurusFormMain()
     
 if __name__ == "__main__":
     main() 
diff --git a/lib/taurus/qt/qtgui/panel/taurusmessagepanel.py b/lib/taurus/qt/qtgui/panel/taurusmessagepanel.py
index 3529e02..59145c3 100644
--- a/lib/taurus/qt/qtgui/panel/taurusmessagepanel.py
+++ b/lib/taurus/qt/qtgui/panel/taurusmessagepanel.py
@@ -26,7 +26,7 @@
 """This module provides a panel to display taurus messages"""
 
 __all__ = ["TaurusMessagePanel", "TaurusMessageErrorHandler",
-           "TangoMessageErrorHandler"]
+           "TangoMessageErrorHandler", "MacroServerMessageErrorHandler"]
 
 __docformat__ = 'restructuredtext'
 
@@ -42,11 +42,11 @@ try:
 except:
     pygments = None
 
-# shame of me for importing PyTango! well not so much since this is designed to
+# shame on me for importing PyTango! well not so much since this is designed to
 # show PyTango exceptions
 import PyTango
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 import taurus.core.util
 import taurus.qt.qtgui.resource
@@ -70,13 +70,15 @@ class TaurusMessageErrorHandler(object):
         :type error: object"""
         
         msgbox = self._msgbox
-        error = str(err_value)
+        error = "".join(traceback.format_exception_only(err_type, err_value))
         msgbox.setText(error)
         msg = "<html><body><pre>%s</pre></body></html>" % error
         msgbox.setDetailedHtml(msg)
 
-        html_orig = """<html><head><style type="text/css">{style}</style></head><body>"""
-        exc_info = "".join(traceback.format_exception(err_type, err_value, err_traceback))
+        html_orig = '<html><head><style type="text/css">{style}</style>' \
+                    '</head><body>'
+        exc_info = "".join(traceback.format_exception(err_type, err_value,
+                                                      err_traceback))
         style = ""
         if pygments is not None:
             formatter = HtmlFormatter()
@@ -92,7 +94,7 @@ class TaurusMessageErrorHandler(object):
 
 
 class TangoMessageErrorHandler(TaurusMessageErrorHandler):
-    """This class is designed to handle :class:`PyTangoDevFailed` error into 
+    """This class is designed to handle :class:`PyTango.DevFailed` error into 
     a :class:`TaurusMessagePanel`"""
     
     def setError(self, err_type=None, err_value=None, err_traceback=None):
@@ -103,7 +105,8 @@ class TangoMessageErrorHandler(TaurusMessageErrorHandler):
         :type error: object"""
         
         msgbox = self._msgbox
-        html_orig = """<html><head><style type="text/css">{style}</style></head><body>"""
+        html_orig = '<html><head><style type="text/css">{style}</style>' \
+                    '</head><body>'
         style, formatter = "", None
         if pygments is not None:
             formatter = HtmlFormatter()
@@ -121,17 +124,50 @@ class TangoMessageErrorHandler(TaurusMessageErrorHandler):
         msgbox.setText(err_value[0].desc)
         msgbox.setDetailedHtml(html)
 
-        exc_info = "".join(traceback.format_exception(err_type, err_value, err_traceback))
+        exc_info = "".join(traceback.format_exception(err_type, err_value,
+                                                      err_traceback))
+        html = html_orig.format(style=style)
+        if pygments is None:
+            html += "<pre>%s</pre>" % exc_info
+        else:
+            html += highlight(exc_info, PythonTracebackLexer(), formatter)
+        html += "</body></html>"
+        msgbox.setOriginHtml(html)
+
+
+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 = ""
+        if pygments is not None:
+            formatter = HtmlFormatter()
+            style = formatter.get_style_defs()
         html = html_orig.format(style=style)
         if pygments is None:
             html += "<pre>%s</pre>" % exc_info
         else:
+            formatter = HtmlFormatter()
             html += highlight(exc_info, PythonTracebackLexer(), formatter)
         html += "</body></html>"
         msgbox.setOriginHtml(html)
 
-_REPORT = """-- Description -----------------------------------------------------------------
-An error occured in {appName} {appVersion} on {time}
+
+_REPORT = """\
+-- Description -----------------------------------------------------------------
+An error occured in '{appName} {appVersion}' on {time}
 {text}
 
 -- Details ---------------------------------------------------------------------
@@ -139,7 +175,8 @@ An error occured in {appName} {appVersion} on {time}
 
 -- Origin ----------------------------------------------------------------------
 {origin}
---------------------------------------------------------------------------------"""
+--------------------------------------------------------------------------------
+"""
 
 class TaurusMessagePanel(Qt.QWidget):
     """A panel intended to display a taurus error.
@@ -173,6 +210,8 @@ class TaurusMessagePanel(Qt.QWidget):
         self._ui = ui.ui_TaurusMessagePanel.Ui_TaurusMessagePanel()
         self._ui.setupUi(self)
         self._ui.detailsWidget.setVisible(False)
+        self._ui.checkBox.setVisible(False)
+        self._ui.checkBox.setCheckState(Qt.Qt.Unchecked)
         self.addButton(self._ui.showDetailsButton)
         self.addButton(self._ui.copyClipboardButton)
         
@@ -207,6 +246,48 @@ class TaurusMessagePanel(Qt.QWidget):
                              origin=self.getOriginText())
         clipboard.setText(txt)
     
+    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
+    
+    def checkBoxState(self):
+        """Returns the check box state
+        
+        :return: the check box state
+        :rtype: PyQt4.Qt.CheckState"""
+        return self.checkBox().checkState()
+    
+    def checkBoxText(self):
+        """Returns the check box text
+        
+        :return: the check box text
+        :rtype: str"""
+        return str(self.checkBox().text())
+    
+    def setCheckBoxText(self, text):
+        """Sets the checkbox text.
+        
+        :param text: new checkbox text
+        :type text: str"""
+        self.checkBox().setText(text)
+    
+    def setCheckBoxState(self, state):
+        """Sets the checkbox state.
+        
+        :param text: new checkbox state
+        :type text: PyQt4.Qt.CheckState"""
+        self.checkBox().setCheckState(state)
+        
+    def setCheckBoxVisible(self, visible):
+        """Sets the checkbox visibility.
+        
+        :param visible: True makes checkbox visible, False hides it
+        :type visible: bool"""
+        self.checkBox().setVisible(visible)
+    
     def buttonBox(self):
         """Returns the button box from this panel
         
@@ -316,7 +397,8 @@ class TaurusMessagePanel(Qt.QWidget):
                 msgbox.setError(*exc_info)
                 msgbox.show()
         
-        :param err_type: the exception type of the exception being handled (a class object)
+        :param err_type:
+            the exception type of the exception being handled (a class object)
         :type error: class object
         :param err_value: exception object
         :type err_value: object
@@ -333,13 +415,18 @@ class TaurusMessagePanel(Qt.QWidget):
     def getError(self):
         """Returns the current exception information of this panel
         
-        :return: the current exception information (same as type as returned by :func:`sys.exc_info`)
+        :return: the current exception information (same as type as returned by
+                 :func:`sys.exc_info`)
         :rtype: tuple<type, value, traceback>"""
         return self._exc_info
 
     ErrorHandlers = { PyTango.DevFailed : TangoMessageErrorHandler }
     
     @classmethod
+    def registerErrorHandler(klass, err_type, err_handler):
+        klass.ErrorHandlers[err_type] = err_handler
+    
+    @classmethod
     def findErrorHandler(klass, err_type):
         """Finds the proper error handler class for the given error
         
@@ -378,6 +465,7 @@ class QMessageDialog(Qt.QDialog):
         l = Qt.QVBoxLayout()
         l.setContentsMargins(0,0,0,0)
         l.addWidget(msgbox)
+        l.addStretch(1)
         self.setLayout(l)
         
 
@@ -465,7 +553,7 @@ def main():
         app.setApplicationVersion("1.0")
 
     w = demo()
-
+    w.show()
     if owns_app:
         sys.exit(app.exec_())
     else:
diff --git a/lib/taurus/qt/qtgui/panel/taurusmodelchooser.py b/lib/taurus/qt/qtgui/panel/taurusmodelchooser.py
index f51f8cd..4ee1bbc 100644
--- a/lib/taurus/qt/qtgui/panel/taurusmodelchooser.py
+++ b/lib/taurus/qt/qtgui/panel/taurusmodelchooser.py
@@ -29,11 +29,12 @@ AttributeChooser.py: widget for choosing (a list of) attributes from a tango DB
 
 
 import sys
-from PyQt4 import Qt
+from taurus.qt import Qt
 import taurus.core
 from taurus.qt.qtgui.container import TaurusWidget
 from taurus.qt.qtgui.tree import TaurusDbTreeWidget
 from taurus.core.util import CaselessList
+from taurusmodellist import TaurusModelList
 import taurus.qt.qtgui.resource
 
 
@@ -42,7 +43,6 @@ class TaurusModelSelectorTree(TaurusWidget):
         TaurusWidget.__init__(self, parent)
         if selectables is None: selectables = [taurus.core.TaurusElementType.Attribute, taurus.core.TaurusElementType.Member]
         self._selectables = selectables
-        if buttonsPos is None: buttonsPos = Qt.Qt.BottomToolBarArea
                         
         #tree
         self._deviceTree = TaurusDbTreeWidget(perspective=taurus.core.TaurusElementType.Device)
@@ -55,12 +55,29 @@ class TaurusModelSelectorTree(TaurusWidget):
         self._toolbar.setFloatable(False)
         self._addSelectedAction = self._toolbar.addAction(taurus.qt.qtgui.resource.getThemeIcon("list-add"), "Add selected", self.onAddSelected)
         
+        #defines the layout
+        self.setButtonsPos(buttonsPos)
+        
+        self._deviceTree.recheckTaurusParent()  ##NOT WORKING????
+        self.connect(self, Qt.SIGNAL(self.ModelChangedSignal), self._deviceTree.setModel)  ##@todo: This is Workaround because UseSetParentModel is giving trouble again!
+    
+    def setButtonsPos(self, buttonsPos):
+        #we must delete the previous layout before we can set a new one
+        currlayout = self.layout()
+        if currlayout is not None:
+            currlayout.deleteLater()
+            Qt.QCoreApplication.sendPostedEvents(currlayout, Qt.QEvent.DeferredDelete)
         #add to layout
-        if buttonsPos == Qt.Qt.BottomToolBarArea:
+        if buttonsPos is None:
+            self.setLayout(Qt.QVBoxLayout())
+            self.layout().addWidget(self._deviceTree)
+        elif buttonsPos == Qt.Qt.BottomToolBarArea:
+            self._toolbar.setOrientation(Qt.Qt.Horizontal)
             self.setLayout(Qt.QVBoxLayout())
             self.layout().addWidget(self._deviceTree)
             self.layout().addWidget(self._toolbar)
         elif buttonsPos == Qt.Qt.TopToolBarArea:
+            self._toolbar.setOrientation(Qt.Qt.Horizontal)
             self.setLayout(Qt.QVBoxLayout())
             self.layout().addWidget(self._toolbar)
             self.layout().addWidget(self._deviceTree)
@@ -76,9 +93,6 @@ class TaurusModelSelectorTree(TaurusWidget):
             self.layout().addWidget(self._toolbar)
         else:
             raise ValueError("Invalid buttons position")
-        
-        self._deviceTree.recheckTaurusParent()  ##NOT WORKING????
-        self.connect(self, Qt.SIGNAL(self.ModelChangedSignal), self._deviceTree.setModel)  ##@todo: This is Workaround because UseSetParentModel is giving trouble again!
     
     def getSelectedModels(self):
         selected = []
@@ -94,11 +108,20 @@ class TaurusModelSelectorTree(TaurusWidget):
         
     def onAddSelected(self):
         self.emit(Qt.SIGNAL("addModels"), self.getSelectedModels())
+        
+    def treeView(self):
+        return self._deviceTree.treeView()
     
     @classmethod
     def getQtDesignerPluginInfo(cls):
-        None
-
+        ret = TaurusWidget.getQtDesignerPluginInfo()
+        ret['module'] = 'taurus.qt.qtgui.panel'
+        ret['icon'] = ":/designer/listview.png"
+        ret['container'] = False
+        ret['group'] = 'Taurus Composite Widgets'
+        return ret
+        
+        
 class TaurusModelChooser(TaurusWidget):
     '''A widget that allows the user to select a list of models from a tree representing
     devices and attributes from a Tango server.
@@ -110,35 +133,42 @@ class TaurusModelChooser(TaurusWidget):
       - "updateModels"  emitted when the user clicks on the update button. It
         passes a list<str> of models that have been selected.
     ''' 
-    def __init__(self, parent = None, selectables=None, host=None, designMode = None):
+    def __init__(self, parent = None, selectables=None, host=None, designMode=None, singleModel=False):
         '''Creator of TaurusModelChooser
         
         :param parent: (QObject) parent for the dialog 
         :param selectables: (list<TaurusElementType>) if passed, only elements of the tree whose
                             type is in the list will be selectable. 
         :param host: (QObject) Tango host to be explored by the chooser
+        :param designMode: (bool) needed for taurusdesigner but ignored here
+        :param singleModel: (bool) If True, the selection will be of just one
+                            model. Otherwise (default) a list of models can be selected
         '''
         TaurusWidget.__init__(self, parent)
-        if host is None: host = taurus.Database().getNormalName() 
-        self._listedModels = CaselessList([])
-        self._singleAttrMode = False
+        if host is None: host = taurus.Database().getNormalName()
+        
+        
         self._allowDuplicates = False
         
         self.setLayout(Qt.QVBoxLayout())
         
-        self.tree =  TaurusModelSelectorTree(selectables = selectables)
+        self.tree =  TaurusModelSelectorTree(selectables = selectables, buttonsPos = Qt.Qt.BottomToolBarArea)
         self.tree.setModel(host)
-        self.list = Qt.QListWidget()
+        self.list = TaurusModelList()
         self.list.setSelectionMode(Qt.QAbstractItemView.ExtendedSelection)
         applyBT = Qt.QToolButton()
         applyBT.setToolButtonStyle(Qt.Qt.ToolButtonTextBesideIcon)
         applyBT.setText('Apply')
         applyBT.setIcon(taurus.qt.qtgui.resource.getIcon(":/status/available.svg"))
         
+        self.setSingleModelMode(singleModel)
+        
         #toolbar 
         self._toolbar = self.tree._toolbar
-        self._removeSelectedAction = self._toolbar.addAction(taurus.qt.qtgui.resource.getThemeIcon("list-remove"), "Remove selected", self.onRemoveSelected)
-        self._clearSelectedAction = self._toolbar.addAction(taurus.qt.qtgui.resource.getThemeIcon("edit-clear"), "Remove all", self.resetListedModels)
+        self._toolbar.addAction(self.list.removeSelectedAction)
+        self._toolbar.addAction(self.list.removeAllAction)
+        self._toolbar.addAction(self.list.moveUpAction)
+        self._toolbar.addAction(self.list.moveDownAction)
         self._toolbar.addSeparator()
         self._toolbar.addWidget(applyBT)
         self.layout().addWidget(self.tree)
@@ -166,26 +196,27 @@ class TaurusModelChooser(TaurusWidget):
                            the mime data also contains a TAURUS_MODEL_MIME_TYPE.
         
         :return: (list<str> or QMimeData) the type of return depends on the value of `asMimeData`'''
+        models = self.list.getModelList()
+        if self.isSingleModelMode():
+            models=models[:1]
         if asMimeData:
             md =  Qt.QMimeData()
-            md.setData(taurus.qt.qtcore.mimetypes.TAURUS_MODEL_LIST_MIME_TYPE, "\r\n".join(self._listedModels))
-            md.setText(", ".join(self._listedModels))
-            if len(self._listedModels) == 1:
-                md.setData(taurus.qt.qtcore.mimetypes.TAURUS_MODEL_MIME_TYPE, str(self._listedModels[0]))
+            md.setData(taurus.qt.qtcore.mimetypes.TAURUS_MODEL_LIST_MIME_TYPE, str("\r\n".join(models)))
+            md.setText(", ".join(models))
+            if len(models) == 1:
+                md.setData(taurus.qt.qtcore.mimetypes.TAURUS_MODEL_MIME_TYPE, str(models[0]))
             return md
-        return self._listedModels
+        return models
     
     def setListedModels(self, models):
         '''adds the given list of models to the widget list
         '''
-        self._listedModels = CaselessList(models)
-        self.list.clear()
-        self.list.addItems(models)
+        self.list.model().clearAll()
+        self.list.addModels(models)
         
     def resetListedModels(self):
         '''equivalent to setListedModels([])'''
-        self._listedModels = CaselessList([])
-        self.list.clear()
+        self.list.model().clearAll()
         
     def updateList(self, attrList ): 
         '''for backwards compatibility with AttributeChooser only. Use :meth:`setListedModels` instead'''
@@ -194,46 +225,52 @@ class TaurusModelChooser(TaurusWidget):
     
     def addModels(self, models):
         ''' Add given models to the selected models list'''
-        for m in models:
-            if self._allowDuplicates or m not in self._listedModels:
-                self._listedModels.append(m)
-                self.list.addItem(m)
-    
+        if  len(models) == 0:
+            models= ['']
+        if self.isSingleModelMode():
+            self.resetListedModels()
+        if self._allowDuplicates:
+            self.list.addModels(models)
+        else:
+            listedmodels = CaselessList(self.getListedModels()) 
+            for m in models:
+                if m not in listedmodels:
+                    listedmodels.append(m)
+                    self.list.addModels([m])
+           
     def onRemoveSelected(self):
         '''
         Remove the list-selected models from the list
         '''
-        toremove = [str(item.text()).lower() for item in self.list.selectedItems()]
-        newlist = [model for model in self._listedModels if model.lower() not in toremove]
-        self.setListedModels(newlist)
+        self.list.removeSelected()
         
     def _onUpdateModels(self):
-        self.emit(Qt.SIGNAL("updateModels"), self._listedModels)
+        models = self.getListedModels()
+        self.emit(Qt.SIGNAL("updateModels"), models)
         if taurus.core.TaurusElementType.Attribute in self.tree._selectables:
-            self.emit(Qt.SIGNAL("UpdateAttrs"), self._listedModels) #for backwards compatibility with the old AttributeChooser
+            self.emit(Qt.SIGNAL("UpdateAttrs"), models) #for backwards compatibility with the old AttributeChooser
     
-    def setSingleAttrMode(self, single):
+    def setSingleModelMode(self, single):
         '''sets whether the selection should be limited to just one model
-        (single=True) or not (single=False)'''
-        if single == self._singleAttrMode: return        
+        (single=True) or not (single=False)'''        
         if single:
             self.tree.treeView().setSelectionMode(Qt.QAbstractItemView.SingleSelection)
         else:
             self.tree.treeView().setSelectionMode(Qt.QAbstractItemView.ExtendedSelection)
-        self._singleAttrMode = single
+        self._singleModelMode = single
         
-    def isSingleAttrMode(self):
+    def isSingleModelMode(self):
         '''returns True if the selection is limited to just one model. Returns False otherwise.
         
         :return: (bool)'''
-        return self._singleAttrMode
+        return self._singleModelMode
     
-    def resetSingleAttrMode(self):
-        '''equivalent to setSingleAttrMode(False)'''
-        self.setSingleAttrMode(self, False)
+    def resetSingleModelMode(self):
+        '''equivalent to setSingleModelMode(False)'''
+        self.setSingleModelMode(self, False)
     
     @staticmethod
-    def modelChooserDlg(parent = None, selectables=None, host=None, asMimeData=False):
+    def modelChooserDlg(parent = None, selectables=None, host=None, asMimeData=False, singleModel=False):
         '''Static method that launches a modal dialog containing a TaurusModelChooser
         
         :param parent: (QObject) parent for the dialog 
@@ -244,6 +281,8 @@ class TaurusModelChooser(TaurusWidget):
                            returned. If True, a `QMimeData` object will be
                            returned instead. See :meth:`getListedModels` for a
                            detailed description of this QMimeData object.
+        :param singleModel: (bool) If True, the selection will be of just one
+                            model. Otherwise (default) a list of models can be selected
         
         :return: (list,bool or QMimeData,bool) Returns a models,ok tuple. models can be 
                  either a list of models or a QMimeData object, depending on
@@ -252,7 +291,7 @@ class TaurusModelChooser(TaurusWidget):
         '''
         dlg = Qt.QDialog(parent)
         layout = Qt.QVBoxLayout()
-        w = TaurusModelChooser(parent = parent, selectables=selectables, host=host)
+        w = TaurusModelChooser(parent = parent, selectables=selectables, host=host, singleModel=singleModel)
         layout.addWidget(w)
         dlg.setLayout(layout)
         dlg.connect(w,Qt.SIGNAL('updateModels'), dlg.accept)
@@ -267,7 +306,8 @@ class TaurusModelChooser(TaurusWidget):
         ret['container'] = False
         ret['group'] = 'Taurus Composite Widgets'
         return ret
-        
+    
+    singleModelMode = Qt.pyqtProperty("bool", isSingleModelMode, setSingleModelMode, resetSingleModelMode)
         
 def main(args):
     if len(sys.argv)>1: 
diff --git a/lib/taurus/qt/qtgui/panel/taurusmodellist.py b/lib/taurus/qt/qtgui/panel/taurusmodellist.py
new file mode 100644
index 0000000..8a920c6
--- /dev/null
+++ b/lib/taurus/qt/qtgui/panel/taurusmodellist.py
@@ -0,0 +1,330 @@
+#!/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/>.
+##
+#############################################################################
+
+"""
+itemsmodel Model and view for new CurveItem configuration 
+"""
+__all__=['TaurusModelModel','TaurusModelItem', 'TaurusModelList']
+#raise UnimplementedError('Under Construction!')
+
+import copy
+
+from taurus.qt import Qt
+from PyQt4 import Qwt5
+import taurus
+from taurus.core import TaurusException, TaurusElementType
+from taurus.qt.qtcore.mimetypes import TAURUS_MODEL_LIST_MIME_TYPE, TAURUS_ATTR_MIME_TYPE
+from taurus.qt.qtgui.resource import getThemeIcon, getElementTypeIcon
+
+
+#set some named constants
+SRC_ROLE =  Qt.Qt.UserRole + 1
+
+class TaurusModelItem(object):
+    '''An item object for :class:`TaurusModelModel`. Exposes `display` `icon` and `ok` 
+    attributes which are calculated and kept in synch with the property `src`'''
+    def __init__(self, src=None):
+        self.display = ''
+        self.icon = Qt.QIcon()
+        self.ok = True
+        self._src = None
+        self.setSrc(self.src)
+        
+    def __repr__(self):
+        ret = "TaurusModelItem('%s')"%(self.display)
+        return ret
+    
+    def getSrc(self):
+        '''getter for src.'''
+        return self._src
+    
+    def setSrc(self, src):
+        '''processes the src and sets the values of _src, display, icon and ok attributes'''
+        if src is None:
+            self._src, self.display, self.icon, self.ok = '', '(Empty)', Qt.QIcon(),True
+            return
+        src = str(src).strip()
+        self._src = src
+        #empty
+        if src == '':
+            self.display, self.icon, self.ok = '(Empty)', Qt.QIcon(),True
+            return
+        #for tango devices
+        try:
+            dev = taurus.Device(src)
+            if dev.isValidDev():
+                self.display, self.icon, self.ok = dev.getSimpleName(), getElementTypeIcon(TaurusElementType.Device), True
+                return
+            else:
+                self.display, self.icon, self.ok = src, getThemeIcon('network-error'),False
+                return
+        except:               
+            #for tango attributes
+            try:
+                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
+                return
+            self.display, self.icon, self.ok = attr.getSimpleName(), getElementTypeIcon(TaurusElementType.Attribute),True
+        
+    #properties
+    src = property(getSrc, setSrc)
+
+class TaurusModelModel(Qt.QAbstractListModel):
+    ''' A Qt data model for describing taurus models
+    '''
+
+    def __init__(self,items=None):
+        if items is None: items=[]
+        super(TaurusModelModel,self).__init__()
+        self.items = items
+    
+    def addItem(self, item):
+        '''appends an item to the internal list
+        
+        :param item: (TaurusModelItem) '''
+        self.items.append(item)
+        
+    def dumpData(self):
+        '''returns a deep copy of the internal item list representation'''
+        return copy.deepcopy(self.items)
+    
+    def rowCount(self,index=Qt.QModelIndex()):
+        '''reimplemented from :class:`Qt.QAbstractListModel`'''
+        return len(self.items)
+        
+    def data(self, index, role=Qt.Qt.DisplayRole):
+        '''reimplemented from :class:`Qt.QAbstractListModel`'''
+        if not index.isValid() or not (0 <= index.row() < self.rowCount()):
+            return Qt.QVariant()
+        row = index.row()
+        #Display Role
+        if role == Qt.Qt.DisplayRole:
+            return Qt.QVariant(Qt.QString(self.items[row].display))
+        elif role == Qt.Qt.DecorationRole:
+            return Qt.QVariant(self.items[row].icon)
+        elif role == Qt.Qt.TextColorRole:
+            if not self.items[row].src:
+                return Qt.QVariant(Qt.QColor('gray'))
+            return Qt.QVariant(Qt.QColor(self.items[row].ok and 'green' or 'red'))
+        elif role == SRC_ROLE:
+            return Qt.QVariant(Qt.QString(self.items[row].src))
+        elif role == Qt.Qt.ToolTipRole:
+            return Qt.QVariant(Qt.QString(self.items[row].src))
+        if role == Qt.Qt.EditRole:
+            return Qt.QVariant(Qt.QString(self.items[row].src))
+        return Qt.QVariant()
+        
+    def flags(self, index):
+        '''reimplemented from :class:`Qt.QAbstractListModel`'''
+        if not index.isValid():
+            return Qt.Qt.ItemIsEnabled
+        return Qt.Qt.ItemFlags(Qt.Qt.ItemIsEnabled |Qt.Qt.ItemIsEditable | Qt.Qt.ItemIsDragEnabled | Qt.Qt.ItemIsDropEnabled | Qt.Qt.ItemIsSelectable)
+                     
+    def setData(self, index, value=None, role=Qt.Qt.EditRole):
+        '''reimplemented from :class:`Qt.QAbstractListModel`'''
+        if index.isValid() and (0 <= index.row() < self.rowCount()):
+            row = index.row()
+            item = self.items[row]
+            value = unicode(value.toString())
+            item.src = value
+            self.emit(Qt.SIGNAL("dataChanged(QModelIndex,QModelIndex)"),index, index)
+            return True
+        return False
+    
+    def insertRows(self, position=None,rows=1, parentindex=None):
+        '''reimplemented from :class:`Qt.QAbstractListModel`'''
+        if position is None: position = self.rowCount()
+        if parentindex is None: parentindex = Qt.QModelIndex()
+        self.beginInsertRows(parentindex, position, position + rows -1)
+        slice = [TaurusModelItem() for i in range(rows)]
+        self.items = self.items[:position]+slice+self.items[position:]
+        self.endInsertRows()
+        return True
+        
+    def removeRows(self, position,rows=1,parentindex=None):
+        '''reimplemented from :class:`Qt.QAbstractListModel`'''
+        if parentindex is None: parentindex = Qt.QModelIndex()
+        self.beginRemoveRows(parentindex, position, position + rows - 1)
+        self.items = self.items[:position]+self.items[position+rows:]
+        self.endRemoveRows()
+        self.reset()
+        return True
+    
+    def clearAll(self):
+        '''clears all rows'''
+        self.removeRows(0, self.rowCount())
+        
+    def swapItems(self, index1, index2):
+        '''swap the items described by index1 and index2 in the list'''
+        r1, r2 = index1.row(), index2.row()
+        self.items[r1], self.items[r2] = self.items[r2], self.items[r1]
+        self.emit(Qt.SIGNAL("dataChanged(QModelIndex,QModelIndex)"),index1, index2)
+    
+    def mimeTypes(self):
+        '''reimplemented from :class:`Qt.QAbstractListModel`'''
+        result = list(Qt.QAbstractItemModel.mimeTypes(self))
+        result += [TAURUS_ATTR_MIME_TYPE, 'text/plain']
+        return result
+    
+    def dropMimeData(self, data, action, row, column, parent):
+        '''reimplemented from :class:`Qt.QAbstractListModel`'''
+        if row == -1:
+            if parent.isValid(): row = parent.row()
+            else: row = parent.rowCount()
+        if data.hasFormat(TAURUS_ATTR_MIME_TYPE):
+            self.setData(self.index(row), 
+                         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()
+            self.insertRows(row,len(models))
+            for i,m in enumerate(models):
+                self.setData(self.index(row+i), value=Qt.QVariant(m))
+            return True
+        elif data.hasText():
+            self.setData(self.index(row), Qt.QVariant(data.text()))
+            return True
+        return False
+    
+    def mimeData(self, indexes):
+        '''reimplemented from :class:`Qt.QAbstractListModel`'''
+        mimedata = Qt.QAbstractListModel.mimeData(self, indexes)
+        if len(indexes)==1:
+#            mimedata.setData(TAURUS_ATTR_MIME_TYPE, str(self.data(indexes[0]).toString()))
+            mimedata.setText(self.data(indexes[0],role=SRC_ROLE).toString())
+        return mimedata
+        #mimedata.setData()
+    
+
+class TaurusModelList(Qt.QListView):
+    '''A list view widget to display and manage a list of models
+    
+    Tries to identify the type of model and show the state of the device/attr
+    associated qith it. It also allows drag and drop of models and sorting.
+    '''
+    
+    def __init__(self, parent=None, items=None, designMode=False):
+        super(TaurusModelList,self).__init__(parent)
+        if items is None: items = []
+        self._model = TaurusModelModel(items)
+        self.setModel(self._model)
+        self.setDragDropMode(self.DragDrop)
+        self.setSelectionMode(self.ExtendedSelection)
+        
+        self._contextMenu = Qt.QMenu()
+        self.addRowAction = self._contextMenu.addAction(getThemeIcon('list-add'), 'Add new row', self._model.insertRows)
+        self.removeSelectedAction = self._contextMenu.addAction(getThemeIcon('list-remove'), 'Remove Selected', self.removeSelected)
+        self.removeAllAction = self._contextMenu.addAction(getThemeIcon('edit-clear'), 'Clear all', self._model.clearAll)
+        self.moveUpAction = self._contextMenu.addAction(getThemeIcon('go-up'), 'Move up in the list', self._onMoveUpAction)
+        self.moveDownAction = self._contextMenu.addAction(getThemeIcon('go-down'), 'Move down in the list', self._onMoveDownAction)
+        
+        #signal connections
+        selectionmodel = self.selectionModel()
+        self.connect(selectionmodel, Qt.SIGNAL("selectionChanged(QItemSelection, QItemSelection)"), self._onSelectionChanged)
+        self._onSelectionChanged(Qt.QItemSelection(),Qt.QItemSelection())
+        
+    def _onSelectionChanged(self, selected, deselected):
+        '''updates the status of the actions that depend on the selection'''
+        selectedIndexes = self.selectionModel().selectedRows()
+        self.removeSelectedAction.setEnabled(len(selectedIndexes)>0)
+        self.moveUpAction.setEnabled(len(selectedIndexes)==1 and selectedIndexes[0].row()>0)
+        self.moveDownAction.setEnabled(len(selectedIndexes)==1 and (0 <= selectedIndexes[0].row() < self._model.rowCount()-1))
+        
+        
+    def contextMenuEvent(self, event):
+        '''see :meth:`QWidget.contextMenuEvent`'''
+        self._contextMenu.exec_(event.globalPos())
+        event.accept()    
+    
+    def _onMoveUpAction(self):
+        '''slot for move up action'''
+        selected = self.selectionModel().selectedIndexes()
+        if len(selected)!=1:
+            return
+        i1 =  selected[0]
+        i2 = self._model.index(i1.row()-1)
+        self._model.swapItems(i1, i2)
+        self.selectionModel().select(i2, Qt.QItemSelectionModel.ClearAndSelect)       
+    
+    def _onMoveDownAction(self):        
+        '''slot for move down action'''
+        selected = self.selectionModel().selectedIndexes()
+        if len(selected)!=1:
+            return
+        i1 =  selected[0]
+        i2 = self._model.index(i1.row()+1)
+        self._model.swapItems(i1, i2) 
+        self.selectionModel().select(i2, Qt.QItemSelectionModel.ClearAndSelect) 
+    
+    def removeSelected(self):
+        '''removes selected items from the list'''
+        selected = sorted([idx.row() for idx in self.selectionModel().selectedRows()], reverse=True)
+        for row in selected: #we remove rows starting from the last one
+            self._model.removeRows(row)
+        
+    def addModels(self, models):
+        '''adds models to the list
+        
+        :param models: (list<str>) sequence of model names to be added
+        '''
+        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), value=Qt.QVariant(m))
+            
+    def getModelItems(self):
+        '''returns the model item objects
+        
+        :return: (list<TaurusModelItem>)
+        
+        .. seealso:: :meth:`getModelList`
+        '''
+        return self._model.dumpData()
+    
+    def getModelList(self):
+        '''returns a the model names corresponding to the items in the list
+        
+        :return: (list<str>)
+        
+        .. seealso:: :meth:`getModelItems`
+        '''
+        return [unicode(s.src) for s in self.getModelItems()]
+    
+    @classmethod
+    def getQtDesignerPluginInfo(cls):
+        return { 
+            'group'     : 'Taurus Input Widgets',
+            'icon'      : ':/designer/taurus.png',
+            'container' : False,
+            'module'    : 'taurus.qt.qtgui.panel'
+             }
+
+        
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/panel/taurusvalue.py b/lib/taurus/qt/qtgui/panel/taurusvalue.py
index 68ac64b..a638269 100644
--- a/lib/taurus/qt/qtgui/panel/taurusvalue.py
+++ b/lib/taurus/qt/qtgui/panel/taurusvalue.py
@@ -29,11 +29,12 @@ taurusvalue.py:
 
 __all__ = ["TaurusValue", "TaurusValuesFrame", "DefaultTaurusValueCheckBox", "DefaultLabelWidget",
            "DefaultUnitsWidget", "TaurusPlotButton", "TaurusArrayEditorButton",
-           "TaurusValuesTableButton", "TaurusDevButton", "TaurusStatusLabel"]
+           "TaurusValuesTableButton", "TaurusDevButton"]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
+import weakref
+from taurus.qt import Qt
 import PyTango
 import taurus.core
 
@@ -41,8 +42,8 @@ from taurus.qt.qtcore.mimetypes import TAURUS_ATTR_MIME_TYPE, TAURUS_DEV_MIME_TY
 from taurus.qt.qtcore.configuration import BaseConfigurableClass
 from taurus.qt.qtgui.base import TaurusBaseWidget
 from taurus.qt.qtgui.container import TaurusFrame
-from taurus.qt.qtgui.display import TaurusValueLabel, TaurusConfigLabel
-from taurus.qt.qtgui.display import TaurusStateLed, TaurusBoolLed, TaurusLed
+from taurus.qt.qtgui.display import TaurusLabel
+from taurus.qt.qtgui.display import TaurusLed
 from taurus.qt.qtgui.input import TaurusValueSpinBox, TaurusValueCheckBox
 from taurus.qt.qtgui.input import TaurusWheelEdit, TaurusValueLineEdit
 from taurus.qt.qtgui.button import TaurusLauncherButton
@@ -60,20 +61,24 @@ class DefaultTaurusValueCheckBox(TaurusValueCheckBox):
     def getQtDesignerPluginInfo(cls):
         return None
     
-class DefaultLabelWidget(TaurusConfigLabel):
+class DefaultLabelWidget(TaurusLabel):
     def __init__(self,*args):
-        TaurusConfigLabel.__init__(self,*args)
+        TaurusLabel.__init__(self,*args)
         self.setAlignment(Qt.Qt.AlignRight)
         self.setSizePolicy(Qt.QSizePolicy.Preferred,Qt.QSizePolicy.Maximum)
+        self.setBgRole(None)
+        self.autoTrim = False
         self.setStyleSheet('border-style: solid; border-width: 1px; border-color: transparent; border-radius: 4px;')
     def setModel(self, model):
-        try: config = self.taurusValueBuddy.getLabelConfig()
+        if model is None or model=='': 
+            return TaurusLabel.setModel(self, None)
+        try: config = self.taurusValueBuddy().getLabelConfig()
         except Exception: config = 'label'
-        if self.taurusValueBuddy.getModelClass() == taurus.core.TaurusAttribute:
-            config = self.taurusValueBuddy.getLabelConfig()
-            TaurusConfigLabel.setModel(self, model + "?configuration=%s"%config)
-        else:
-            TaurusConfigLabel.setModel(self, model + "/state?configuration=dev_alias")
+        if self.taurusValueBuddy().getModelClass() == taurus.core.TaurusAttribute:
+            config = self.taurusValueBuddy().getLabelConfig()
+            TaurusLabel.setModel(self, model + "?configuration=%s"%config)
+        elif self.taurusValueBuddy().getModelClass() == taurus.core.TaurusDevice:
+             TaurusLabel.setModel(self, model + "/state?configuration=dev_alias")
     def sizeHint(self):
         return Qt.QSize(Qt.QLabel.sizeHint(self).width(), 18)
     def contextMenuEvent(self,event):   
@@ -81,11 +86,11 @@ class DefaultLabelWidget(TaurusConfigLabel):
         
         see :meth:`QWidget.contextMenuEvent`"""
         menu = Qt.QMenu(self)  
-        menu.addMenu(taurus.qt.qtgui.util.ConfigurationMenu(self.taurusValueBuddy)) #@todo: This should be done more Taurus-ish 
-        if self.taurusValueBuddy.isModifiableByUser():
-            cr_action = 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
+        menu.addMenu(taurus.qt.qtgui.util.ConfigurationMenu(self.taurusValueBuddy())) #@todo: This should be done more Taurus-ish 
+        if self.taurusValueBuddy().isModifiableByUser():
+            cr_action = 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
         menu.exec_(event.globalPos())
         event.accept()
     def mousePressEvent(self, event):
@@ -98,28 +103,42 @@ class DefaultLabelWidget(TaurusConfigLabel):
         if not event.buttons() & Qt.Qt.LeftButton:
             return
         mimeData = Qt.QMimeData()
-        if self.taurusValueBuddy.getModelClass() == taurus.core.TaurusDevice:
-            mimeData.setData(TAURUS_DEV_MIME_TYPE, self.taurusValueBuddy.getModelName())
-        elif self.taurusValueBuddy.getModelClass() == taurus.core.TaurusAttribute:
-            mimeData.setData(TAURUS_ATTR_MIME_TYPE, self.taurusValueBuddy.getModelName())
+        if self.taurusValueBuddy().getModelClass() == taurus.core.TaurusDevice:
+            mimeData.setData(TAURUS_DEV_MIME_TYPE, self.taurusValueBuddy().getModelName())
+        elif self.taurusValueBuddy().getModelClass() == taurus.core.TaurusAttribute:
+            mimeData.setData(TAURUS_ATTR_MIME_TYPE, self.taurusValueBuddy().getModelName())
         mimeData.setText(self.text())
         drag = Qt.QDrag(self)
         drag.setMimeData(mimeData)
         drag.setHotSpot(event.pos() - self.rect().topLeft())
         dropAction = drag.start(Qt.Qt.CopyAction)
-
+    
     @classmethod
     def getQtDesignerPluginInfo(cls):
         return None
 
+class ExpandingLabel(TaurusLabel):
+    '''just a expanding TaurusLabel'''
+    def __init__(self,*args):
+        TaurusLabel.__init__(self,*args)
+        self.setSizePolicy(Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Preferred)
+
 
-class DefaultUnitsWidget(TaurusConfigLabel):
+class CenteredLed(TaurusLed):
+    '''just a centered TaurusLed'''
+    DefaultAlignment = Qt.Qt.AlignHCenter | Qt.Qt.AlignVCenter
+        
+class DefaultUnitsWidget(TaurusLabel):
     def __init__(self,*args):
-        TaurusConfigLabel.__init__(self,*args)
+        TaurusLabel.__init__(self,*args)
         self.setNoneValue('')
         self.setSizePolicy(Qt.QSizePolicy.Preferred,Qt.QSizePolicy.Maximum)
+        self.autoTrim = False
+        self.setBgRole(None)
     def setModel(self, model):
-        TaurusConfigLabel.setModel(self, model + "?configuration=unit")
+        if model is None or model=='': 
+            return TaurusLabel.setModel(self, None)
+        TaurusLabel.setModel(self, model + "?configuration=unit") #@todo: tango-centric!
     def sizeHint(self):
         #print "UNITSSIZEHINT:",Qt.QLabel.sizeHint(self).width(), self.minimumSizeHint().width(), Qt.QLabel.minimumSizeHint(self).width()
         return Qt.QSize(Qt.QLabel.sizeHint(self).width(), 24)
@@ -135,6 +154,7 @@ class TaurusPlotButton(TaurusLauncherButton):
         import taurus.qt.qtgui.plot
         TaurusPlot = taurus.qt.qtgui.plot.TaurusPlot
         TaurusLauncherButton.__init__(self, parent = parent, designMode = designMode, widget = TaurusPlot(), icon=getIcon(':/designer/qwtplot.png'), text = 'Show')
+        self.setSizePolicy(Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Maximum)
 
     @classmethod
     def getQtDesignerPluginInfo(cls):
@@ -147,11 +167,22 @@ class TaurusArrayEditorButton(TaurusLauncherButton):
         import taurus.qt.qtgui.plot
         TaurusArrayEditor = taurus.qt.qtgui.plot.TaurusArrayEditor
         TaurusLauncherButton.__init__(self, parent = parent, designMode = designMode, widget = TaurusArrayEditor(), icon=getIcon(':/designer/arrayedit.png'), text = 'Edit')
-
+        self.setSizePolicy(Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Maximum)
+        
     @classmethod
     def getQtDesignerPluginInfo(cls):
         return None
 
+class TaurusImageButton(TaurusLauncherButton):
+    '''A button that launches a TaurusPlot'''
+    def __init__(self, parent = None, designMode = False):
+        from taurus.qt.qtgui.extra_guiqwt.plot import TaurusImageDialog
+        TaurusLauncherButton.__init__(self, parent = parent, designMode = designMode, widget = TaurusImageDialog(), icon=getIcon(':/mimetypes/image-x-generic.svg'), text = 'Show')
+        self.setSizePolicy(Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Maximum)
+
+    @classmethod
+    def getQtDesignerPluginInfo(cls):
+        return None
 
 class TaurusValuesTableButton(TaurusLauncherButton):
     '''A button that launches a TaurusValuesTable'''
@@ -159,6 +190,7 @@ class TaurusValuesTableButton(TaurusLauncherButton):
         import taurus.qt.qtgui.table
         TaurusValuesTable = taurus.qt.qtgui.table.TaurusValuesTable
         TaurusLauncherButton.__init__(self, parent = parent, designMode = designMode, widget = TaurusValuesTable(), icon=getIcon(':/designer/table.png'), text = 'Show')
+        self.setSizePolicy(Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Maximum)
 
     @classmethod
     def getQtDesignerPluginInfo(cls):
@@ -166,20 +198,23 @@ class TaurusValuesTableButton(TaurusLauncherButton):
 
 
 class TaurusDevButton(TaurusLauncherButton):
-    '''A button that launches a TaurusPlot'''
+    '''A button that launches a TaurusAttrForm'''
     def __init__(self, parent = None, designMode = False):
         from taurus.qt.qtgui.panel.taurusform import TaurusAttrForm 
         TaurusLauncherButton.__init__(self, parent = parent, designMode = designMode, widget = TaurusAttrForm(), icon=getIcon(':/places/folder-remote.svg'), text = 'Show Device')
+        self.setSizePolicy(Qt.QSizePolicy.Expanding, Qt.QSizePolicy.Maximum)
 
     @classmethod
     def getQtDesignerPluginInfo(cls):
         return None
 
 
-class TaurusStatusLabel(TaurusValueLabel):
-    '''just a taurusVaueLabel but showing the state as its background by default'''
-    def __init__(self, parent = None, designMode = False, background = 'state'):
-        TaurusValueLabel.__init__(self, parent = parent, designMode = designMode, background = background)
+class TaurusStatusLabel(TaurusLabel):
+    '''just a taurusLabel but showing the state as its background by default'''
+    def __init__(self, parent = None, designMode = False):
+        TaurusLabel.__init__(self, parent = parent, designMode = designMode)
+        self.setBgRole('state')
+        self.setSizePolicy(Qt.QSizePolicy.Expanding,Qt.QSizePolicy.Maximum)
         
     @classmethod
     def getQtDesignerPluginInfo(cls):
@@ -190,42 +225,43 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
     
     __pyqtSignals__ = ("modelChanged(const QString &)",)
     
-    def __init__(self, parent = None, designMode = False):
+    def __init__(self, parent = None, designMode = False, customWidgetMap=None):
         name = self.__class__.__name__
         self.call__init__wo_kw(Qt.QWidget, parent)
         self.call__init__(TaurusBaseWidget, name, designMode=designMode)
         
         self.__modelClass = None
         self._designMode=designMode
-        self._customWidget = None
-        
-        self._customWidgetMap = {}
         
         #This is a hack to show something usable when in designMode
         if self._designMode:
             layout = Qt.QHBoxLayout(self)
-            dummy = TaurusConfigLabel()
+            dummy = ExpandingLabel()
             layout.addWidget(dummy)
             dummy.setUseParentModel(True)
             dummy.setModel("?configuration=attr_fullname") 
             dummy.setPrefixText("< TaurusValue: ")
             dummy.setSuffixText(" >")
-        else:    
-            self.setVisible(False)
-            self.setFixedSize(1,1)
-
-        self._parentLayout=None
+        else:
+            self.setFixedSize(0,0)
         
         self._labelWidget = None
         self._readWidget = None
         self._writeWidget = None
         self._unitsWidget = None
+        self._customWidget = None
+        self._extraWidget = None
+        
+        if customWidgetMap is None:
+            customWidgetMap = {}
+        self.setCustomWidgetMap(customWidgetMap)
         
         self.labelWidgetClassID = 'Auto'
         self.readWidgetClassID = 'Auto'
         self.writeWidgetClassID = 'Auto'
         self.unitsWidgetClassID = 'Auto'
         self.customWidgetClassID = 'Auto'
+        self.extraWidgetClassID = 'Auto'
         self.setPreferredRow(-1)
         self._row = None
         
@@ -236,6 +272,11 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         
         if parent is not None:
             self.setParent(parent)
+            
+    def setVisible(self, visible):
+        for w in (self.labelWidget(), self.readWidget(), self.writeWidget(), self.unitsWidget(), self.customWidget(), self.extraWidget()):
+            if w is not None: w.setVisible(visible)
+        Qt.QWidget.setVisible(self, visible)
     
     def labelWidget(self):
         return self._labelWidget
@@ -252,6 +293,9 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
     def customWidget(self):
         return self._customWidget
     
+    def extraWidget(self):
+        return self._extraWidget
+    
     def setParent(self, parent):
    
         #make sure that the parent has a QGriLayout
@@ -260,16 +304,15 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
             pl = Qt.QGridLayout(parent) #creates AND sets the parent layout
         if not isinstance(pl, Qt.QGridLayout):
             raise ValueError('layout must be a QGridLayout (got %s)'%type(pl))
-        self._parentLayout = pl
         
         if self._row is None:
-            self._row = self.getPreferredRow()  #@TODO we should check that the Preferred row is empty in self._parentLayout
+            self._row = self.getPreferredRow()  #@TODO we should check that the Preferred row is empty in pl
             if self._row < 0:
-                self._row = self._parentLayout.rowCount()
+                self._row = pl.rowCount()
         #print 'ROW:',self, self.getRow()
         
         #insert self into the 0-column
-        self._parentLayout.addWidget(self, self._row, 0) #this widget is invisible (except in design mode)
+        pl.addWidget(self, self._row, 0) #this widget is invisible (except in design mode)
         
         #Create/update the subwidgets (this also inserts them in the layout)
         if not self._designMode:  #in design mode, no subwidgets are created
@@ -277,6 +320,7 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
             self.updateReadWidget()
             self.updateWriteWidget()
             self.updateUnitsWidget()
+            self.updateExtraWidget()
         
 #        self.updateCustomWidget()
         
@@ -313,7 +357,6 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         return self._minimumHeight
     
     def getDefaultLabelWidgetClass(self):
-#        if self._customWidget is not None: return None
         return DefaultLabelWidget
      
     def getDefaultReadWidgetClass(self, returnAll=False):
@@ -333,31 +376,37 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
 #        if self._customWidget is not None: return None
         modelobj = self.getModelObj()
         if modelobj is None: 
-            if returnAll: return [TaurusValueLabel]
-            else: return TaurusValueLabel
+            if returnAll: return [ExpandingLabel]
+            else: return ExpandingLabel
         
         if self.getModelClass() == taurus.core.TaurusAttribute:
             ##The model is an attribute
             config = modelobj.getConfig()
             #print "---------ATTRIBUTE OBJECT:----------\n",modelobj.read()
             try: configType = config.getType()
-            except: configType = None            
+            except: configType = None
+            if config.isBoolean():
+                result = [CenteredLed, ExpandingLabel]
             if config.isScalar():
                 if  configType == PyTango.ArgType.DevBoolean:
-                    result = [TaurusLed, TaurusBoolLed, TaurusValueLabel]
+                    result = [CenteredLed, ExpandingLabel]
                 elif configType == PyTango.ArgType.DevState:
-                    result = [TaurusStateLed, TaurusValueLabel]
-                elif str(self.getModel()).lower().endswith('/status'):
-                    result = [TaurusStatusLabel, TaurusValueLabel]
+                    result = [CenteredLed, ExpandingLabel]
+                elif str(self.getModel()).lower().endswith('/status'): #@todo: tango-centric!!
+                    result = [TaurusStatusLabel, ExpandingLabel]
                 else:
-                    result = [TaurusValueLabel]
+                    result = [ExpandingLabel]
             elif config.isSpectrum():
                 if PyTango.is_numerical_type(configType):
-                    result = [TaurusPlotButton, TaurusValueLabel]
+                    result = [TaurusPlotButton, ExpandingLabel]
                 else:
-                    result = [TaurusValuesTableButton, TaurusValueLabel]
+                    result = [TaurusValuesTableButton, ExpandingLabel]
             elif config.isImage():
-                result = [TaurusValuesTableButton, TaurusValueLabel]
+                try: 
+                    from taurus.qt.qtgui.extra_guiqwt import TaurusImageDialog
+                    result = [TaurusImageButton, TaurusValuesTableButton, ExpandingLabel]
+                except ImportError:
+                    result = [TaurusValuesTableButton, ExpandingLabel]
             else:
                 self.warning('Unsupported attribute type %s'%configType)
                 result = None
@@ -409,9 +458,9 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         else: return result[0]
     
     def getDefaultUnitsWidgetClass(self):
-#        if self._customWidget is not None: return None
-        if self.getModelClass() != taurus.core.TaurusAttribute:
-            return None
+##        if self._customWidget is not None: return None
+#        if self.getModelClass() != taurus.core.TaurusAttribute:
+#            return DefaultUnitsWidget
         return DefaultUnitsWidget
     
     def getDefaultCustomWidgetClass(self):
@@ -422,7 +471,10 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         except:
             return None
         return self.getCustomWidgetMap().get(key, None)
-            
+    
+    def getDefaultExtraWidgetClass(self):
+        return None
+    
     def setCustomWidgetMap(self, cwmap):
         '''Sets a map map for custom widgets.
         
@@ -461,7 +513,18 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         if oldWidget is not None:
             oldWidget.hide()
             oldWidget.setParent(None)
-            oldWidget.destroy()
+            # THIS HACK REDUCES THE STARTUP-HANGING RATE
+            oldWidget.setModel(None)
+            
+            # COULD NOT INVESTIGATE DEEPER, BUT THE STARTUP-HANGING
+            # HAPPENS WITH SOME SIGNALS RELATED WITH THE LINEEDIT...
+            # MAYBE OTHER 'WRITE WIDGETS' HAVE THE SAME PROBLEM ?!?!?!
+            if isinstance(oldWidget, Qt.QLineEdit):
+                oldWidget.blockSignals(True)
+                
+            # THIS HACK REDUCES THE STARTUP-HANGING RATE
+            oldWidget.deleteLater()
+
         if newClass is None: result = None
         else: result = newClass()
         return result
@@ -500,6 +563,13 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         elif str(classID) == 'Auto': return self.getDefaultCustomWidgetClass()
         else: return TaurusWidgetFactory().getTaurusWidgetClass(classID)
         
+    def extraWidgetClassFactory(self, classID):
+        if self._customWidget is not None: return None
+        if classID is None or classID is 'None': return None
+        if isinstance(classID, type): return classID
+        elif str(classID) == 'Auto': return self.getDefaultExtraWidgetClass()
+        else: return TaurusWidgetFactory().getTaurusWidgetClass(classID)
+        
     def updateLabelWidget(self):
         #get the class for the widget and replace it if necessary
         klass = self.labelWidgetClassFactory(self.labelWidgetClassID)
@@ -510,7 +580,7 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         
         if self._labelWidget is not None:
             #give the new widget a reference to its buddy TaurusValue object
-            self._labelWidget.taurusValueBuddy = self
+            self._labelWidget.taurusValueBuddy = weakref.ref(self) 
             
             #tweak the new widget
             if self.minimumHeight() is not None:
@@ -529,7 +599,7 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         
         if self._readWidget is not None:
             #give the new widget a reference to its buddy TaurusValue object
-            self._readWidget.taurusValueBuddy = self
+            self._readWidget.taurusValueBuddy = weakref.ref(self)
             
             #tweak the new widget
             if self.minimumHeight() is not None:
@@ -550,7 +620,7 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         
         if self._writeWidget is not None:
             #give the new widget a reference to its buddy TaurusValue object
-            self._writeWidget.taurusValueBuddy = self
+            self._writeWidget.taurusValueBuddy = weakref.ref(self)
             
             #tweak the new widget
             ##hide getPendingOperations of the writeWidget so that containers don't get duplicate lists
@@ -576,7 +646,7 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         
         if self._unitsWidget is not None:
             #give the new widget a reference to its buddy TaurusValue object
-            self._unitsWidget.taurusValueBuddy = self
+            self._unitsWidget.taurusValueBuddy = weakref.ref(self)
             #tweak the new widget
             if self.minimumHeight() is not None:
                 self._unitsWidget.setMinimumHeight(self.minimumHeight())
@@ -598,29 +668,50 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
             if hasattr(self._customWidget,'setModel'):
                 self._customWidget.setModel(self.getModelName())
                 
+    def updateExtraWidget(self):
+        #get the class for the widget and replace it if necessary
+        klass = self.extraWidgetClassFactory(self.extraWidgetClassID)
+        self._extraWidget = self._newSubwidget(self._extraWidget, klass)
+        
+        #take care of the layout
+        self.addExtraWidgetToLayout() 
+        
+        if self._extraWidget is not None:
+            #give the new widget a reference to its buddy TaurusValue object
+            self._extraWidget.taurusValueBuddy = weakref.ref(self)
+                        
+            #set the model for the subwidget
+            if hasattr(self._extraWidget,'setModel'):
+                self._extraWidget.setModel(self.getModelName())
+                
                 
     def addLabelWidgetToLayout(self):
-        if self._labelWidget is not None:
-            self._parentLayout.addWidget(self._labelWidget, self._row, 1)
+        
+        if self._labelWidget is not None and self.parent() is not None:
+            self.parent().layout().addWidget(self._labelWidget, self._row, 1)
     
     def addReadWidgetToLayout(self):
-        if self._readWidget is not None: 
+        if self._readWidget is not None and self.parent() is not None: 
             if self._writeWidget is None:
-                self._parentLayout.addWidget(self._readWidget, self._row, 2,1,2)
+                self.parent().layout().addWidget(self._readWidget, self._row, 2,1,2)
             else:
-                self._parentLayout.addWidget(self._readWidget, self._row, 2)
+                self.parent().layout().addWidget(self._readWidget, self._row, 2)
     
     def addWriteWidgetToLayout(self):
-        if self._writeWidget is not None:
-            self._parentLayout.addWidget(self._writeWidget, self._row, 3)
+        if self._writeWidget is not None and self.parent() is not None:
+            self.parent().layout().addWidget(self._writeWidget, self._row, 3)
     
     def addUnitsWidgetToLayout(self):
-        if self._unitsWidget is not None:
-            self._parentLayout.addWidget(self._unitsWidget, self._row, 4)
+        if self._unitsWidget is not None and self.parent() is not None:
+            self.parent().layout().addWidget(self._unitsWidget, self._row, 4)
             
     def addCustomWidgetToLayout(self):
-        if self._customWidget is not None:
-            self._parentLayout.addWidget(self._customWidget, self._row, 1,1,-1)
+        if self._customWidget is not None and self.parent() is not None:
+            self.parent().layout().addWidget(self._customWidget, self._row, 1,1,-1)
+    
+    def addExtraWidgetToLayout(self):
+        if self._extraWidget is not None and self.parent() is not None:
+            self.parent().layout().addWidget(self._extraWidget, self._row, 5)
 
     @Qt.pyqtSignature("parentModelChanged(const QString &)")
     def parentModelChanged(self, parentmodel_name):
@@ -630,10 +721,12 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         """
         TaurusBaseWidget.parentModelChanged(self, parentmodel_name)
         if not self._designMode:     #in design mode, no subwidgets are created
+            self.updateCustomWidget()
             self.updateLabelWidget()
             self.updateReadWidget()
             self.updateWriteWidget()
             self.updateUnitsWidget()
+            self.updateExtraWidget()
 
     @Qt.pyqtSignature("setLabelWidget(QString)")
     def setLabelWidgetClass(self,classID):
@@ -700,6 +793,19 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
     def resetCustomWidgetClass(self):
         self.customWidgetClassID = 'Auto'
         
+    @Qt.pyqtSignature("setExtraWidget(QString)")
+    def setExtraWidgetClass(self,classID):
+        '''substitutes the current widget by a new one. classID can be one of:
+        None, 'Auto', a TaurusWidget class name, or any class'''
+        self.extraWidgetClassID = classID
+        self.updateExtraWidget()
+    
+    def getExtraWidgetClass(self):
+        return self.extraWidgetClassID
+    
+    def resetExtraWidgetClass(self):
+        self.extraWidgetClassID = 'Auto'
+        
     def isReadOnly(self):
         if not self.getAllowWrite(): return True 
         modelObj = self.getModelObj()
@@ -708,14 +814,14 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
 
     def getModelClass(self):
         return self.__modelClass
-    
-    def destroy(self):
-        if not self._designMode:
-            for w in [self._labelWidget, self._readWidget, self._writeWidget, self._unitsWidget]:
-                if isinstance(w,Qt.QWidget):
-                    w.setParent(self)   #reclaim the parental rights over subwidgets before destruction
-        Qt.QWidget.setParent(self,None)
-        Qt.QWidget.destroy(self)
+
+#    def destroy(self):
+#        if not self._designMode:
+#            for w in [self._labelWidget, self._readWidget, self._writeWidget, self._unitsWidget, self._extraWidget]:
+#                if isinstance(w,Qt.QWidget):
+#                    w.setParent(self)   #reclaim the parental rights over subwidgets before destruction
+#        Qt.QWidget.setParent(self,None)
+#        Qt.QWidget.destroy(self)
 
     def createConfig(self, allowUnpickable=False):
         '''
@@ -729,7 +835,7 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         '''
         configdict = TaurusBaseWidget.createConfig(self, allowUnpickable=allowUnpickable)
         #store the subwidgets classIDs and configs
-        for key in ('LabelWidget', 'ReadWidget', 'WriteWidget', 'UnitsWidget', 'CustomWidget'):
+        for key in ('LabelWidget', 'ReadWidget', 'WriteWidget', 'UnitsWidget', 'CustomWidget', 'ExtraWidget'):
             classID = getattr(self, 'get%sClass'%key)() # calls self.getLabelWidgetClass, self.getReadWidgetClass,...
             if isinstance(classID, (str, Qt.QString)) or allowUnpickable:
                 #configdict[key] = classID
@@ -752,7 +858,7 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
         #first do the basic stuff...
         TaurusBaseWidget.applyConfig(self, configdict, **kwargs)
         #restore the subwidgets classIDs
-        for key in ('LabelWidget', 'ReadWidget', 'WriteWidget', 'UnitsWidget', 'CustomWidget'):
+        for key in ('LabelWidget', 'ReadWidget', 'WriteWidget', 'UnitsWidget', 'CustomWidget', 'ExtraWidget'):
             if key in configdict:
                 widget_configdict = configdict[key]
                 getattr(self, 'set%sClass'%key)(widget_configdict.get('classid', None))
@@ -768,7 +874,6 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
             self.__modelClass = taurus.core.TaurusAttribute
         except:
             self.__modelClass = taurus.core.TaurusDevice
-        model = str(model)
         TaurusBaseWidget.setModel(self,model)
         if not self._designMode:     #in design mode, no subwidgets are created
             self.updateCustomWidget()
@@ -776,6 +881,7 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
             self.updateReadWidget()
             self.updateWriteWidget()
             self.updateUnitsWidget()
+            self.updateExtraWidget()
             
     def handleEvent(self, evt_src, evt_type, evt_value):
         """Reimplemented from :meth:`TaurusBaseWidget.handleEvent` 
@@ -787,6 +893,7 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
             self.updateReadWidget()
             self.updateWriteWidget()
             self.updateUnitsWidget()
+            self.updateExtraWidget()
             
     def isValueChangedByUser(self):
         try:
@@ -854,6 +961,7 @@ class TaurusValue(Qt.QWidget, TaurusBaseWidget):
     readWidgetClass = Qt.pyqtProperty("QString", getReadWidgetClass, setReadWidgetClass, resetReadWidgetClass)
     writeWidgetClass = Qt.pyqtProperty("QString", getWriteWidgetClass, setWriteWidgetClass, resetWriteWidgetClass)
     unitsWidgetClass = Qt.pyqtProperty("QString", getUnitsWidgetClass, setUnitsWidgetClass, resetUnitsWidgetClass)
+    extraWidgetClass = Qt.pyqtProperty("QString", getExtraWidgetClass, setExtraWidgetClass, resetExtraWidgetClass)
     labelConfig = Qt.pyqtProperty("QString", getLabelConfig, setLabelConfig, resetLabelConfig)
     allowWrite = Qt.pyqtProperty("bool", getAllowWrite, setAllowWrite, resetAllowWrite)
     modifiableByUser = Qt.pyqtProperty("bool", TaurusBaseWidget.isModifiableByUser, TaurusBaseWidget.setModifiableByUser, TaurusBaseWidget.resetModifiableByUser)
@@ -862,7 +970,7 @@ class TaurusValuesFrame(TaurusFrame):
     '''This is a container specialiced into containing TaurusValue widgets.
     It should be used Only for TaurusValues'''
     
-    _model = Qt.QStringList()
+    _model = []
     @Qt.pyqtSignature("setModel(QStringList)")    
     def setModel(self, model):
         self._model = model
@@ -877,7 +985,7 @@ class TaurusValuesFrame(TaurusFrame):
         return self._model
                 
     def resetModel(self):
-        self.setModel(Qt.QStringList())
+        self.setModel([])
     
     def getTaurusValueByIndex(self, index):
         '''returns the TaurusValue item at the given index position'''
@@ -940,6 +1048,7 @@ if __name__ == "__main__":
     #models=['bl97/pc/dummy-01/Current']
     #models=['bl97/pc/dummy-01/CurrentSetpoint','bl97/pc/dummy-02/Current','bl97/pc/dummy-02/RemoteMode','bl97/pysignalsimulator/1/value1']
     #models=['bl97/pc/dummy-01/CurrentSetpoint','bl97/pc/dummy-02/RemoteMode']
+    #models=['sys/tg_test/1/state','sys/tg_test/1/status','sys/tg_test/1/short_scalar','sys/tg_test/1']
     #container.setModel(models)
     
     #container.getTaurusValueByIndex(0).writeWidget().setDangerMessage('BOOO') #uncomment to test the dangerous operation support
diff --git a/lib/taurus/qt/qtgui/panel/ui/TaurusMessagePanel.ui b/lib/taurus/qt/qtgui/panel/ui/TaurusMessagePanel.ui
index 8a15571..9c045b7 100644
--- a/lib/taurus/qt/qtgui/panel/ui/TaurusMessagePanel.ui
+++ b/lib/taurus/qt/qtgui/panel/ui/TaurusMessagePanel.ui
@@ -7,34 +7,14 @@
     <x>0</x>
     <y>0</y>
     <width>548</width>
-    <height>586</height>
+    <height>614</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>Form</string>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <item row="0" column="0">
-    <widget class="QLabel" name="iconLabel">
-     <property name="text">
-      <string>iconLabel</string>
-     </property>
-    </widget>
-   </item>
-   <item row="0" column="1" colspan="2">
-    <widget class="QLabel" name="textLabel">
-     <property name="sizePolicy">
-      <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
-       <horstretch>1</horstretch>
-       <verstretch>0</verstretch>
-      </sizepolicy>
-     </property>
-     <property name="text">
-      <string>textLabel</string>
-     </property>
-    </widget>
-   </item>
-   <item row="2" column="0" colspan="3">
+   <item row="4" column="0" colspan="3">
     <widget class="QWidget" name="detailsWidget" native="true">
      <layout class="QVBoxLayout" name="verticalLayout">
       <property name="spacing">
@@ -105,7 +85,7 @@
      </layout>
     </widget>
    </item>
-   <item row="1" column="0" colspan="3">
+   <item row="3" column="0" colspan="3">
     <widget class="QWidget" name="buttonPanelWidget" native="true">
      <layout class="QHBoxLayout" name="horizontalLayout">
       <property name="margin">
@@ -151,6 +131,31 @@
      </layout>
     </widget>
    </item>
+   <item row="5" column="0">
+    <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">
+     <item>
+      <widget class="QLabel" name="iconLabel">
+       <property name="text">
+        <string>iconLabel</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QLabel" name="textLabel">
+       <property name="text">
+        <string>textLabel</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
   </layout>
  </widget>
  <resources/>
diff --git a/lib/taurus/qt/qtgui/panel/ui/ui_TaurusMessagePanel.py b/lib/taurus/qt/qtgui/panel/ui/ui_TaurusMessagePanel.py
index 7906841..418e5df 100644
--- a/lib/taurus/qt/qtgui/panel/ui/ui_TaurusMessagePanel.py
+++ b/lib/taurus/qt/qtgui/panel/ui/ui_TaurusMessagePanel.py
@@ -1,9 +1,9 @@
 # -*- coding: utf-8 -*-
 
-# Form implementation generated from reading ui file 'TaurusMessagePanel.ui'
+# Form implementation generated from reading ui file '/tmp/tmpw1w4kl.ui'
 #
-# Created: Mon Jan 24 11:40:48 2011
-#      by: PyQt4 UI code generator 4.7.4
+# Created: Mon Nov 21 17:04:37 2011
+#      by: PyQt4 UI code generator 4.4.3
 #
 # WARNING! All changes made in this file will be lost!
 
@@ -12,20 +12,9 @@ from PyQt4 import QtCore, QtGui
 class Ui_TaurusMessagePanel(object):
     def setupUi(self, TaurusMessagePanel):
         TaurusMessagePanel.setObjectName("TaurusMessagePanel")
-        TaurusMessagePanel.resize(548, 586)
+        TaurusMessagePanel.resize(548, 614)
         self.gridLayout = QtGui.QGridLayout(TaurusMessagePanel)
         self.gridLayout.setObjectName("gridLayout")
-        self.iconLabel = QtGui.QLabel(TaurusMessagePanel)
-        self.iconLabel.setObjectName("iconLabel")
-        self.gridLayout.addWidget(self.iconLabel, 0, 0, 1, 1)
-        self.textLabel = QtGui.QLabel(TaurusMessagePanel)
-        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
-        sizePolicy.setHorizontalStretch(1)
-        sizePolicy.setVerticalStretch(0)
-        sizePolicy.setHeightForWidth(self.textLabel.sizePolicy().hasHeightForWidth())
-        self.textLabel.setSizePolicy(sizePolicy)
-        self.textLabel.setObjectName("textLabel")
-        self.gridLayout.addWidget(self.textLabel, 0, 1, 1, 2)
         self.detailsWidget = QtGui.QWidget(TaurusMessagePanel)
         self.detailsWidget.setObjectName("detailsWidget")
         self.verticalLayout = QtGui.QVBoxLayout(self.detailsWidget)
@@ -58,7 +47,7 @@ class Ui_TaurusMessagePanel(object):
         self.verticalLayout_3.addWidget(self.originTextEdit)
         self.detailsTabWidget.addTab(self.tabOrigin, "")
         self.verticalLayout.addWidget(self.detailsTabWidget)
-        self.gridLayout.addWidget(self.detailsWidget, 2, 0, 1, 3)
+        self.gridLayout.addWidget(self.detailsWidget, 4, 0, 1, 3)
         self.buttonPanelWidget = QtGui.QWidget(TaurusMessagePanel)
         self.buttonPanelWidget.setObjectName("buttonPanelWidget")
         self.horizontalLayout = QtGui.QHBoxLayout(self.buttonPanelWidget)
@@ -77,7 +66,19 @@ class Ui_TaurusMessagePanel(object):
         self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok)
         self.buttonBox.setObjectName("buttonBox")
         self.horizontalLayout.addWidget(self.buttonBox)
-        self.gridLayout.addWidget(self.buttonPanelWidget, 1, 0, 1, 3)
+        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)
@@ -85,20 +86,11 @@ class Ui_TaurusMessagePanel(object):
 
     def retranslateUi(self, TaurusMessagePanel):
         TaurusMessagePanel.setWindowTitle(QtGui.QApplication.translate("TaurusMessagePanel", "Form", 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))
         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.copyClipboardButton.setText(QtGui.QApplication.translate("TaurusMessagePanel", "Copy to Clipboard", 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_())
+        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))
 
diff --git a/lib/taurus/qt/qtgui/plot/arrayedit.py b/lib/taurus/qt/qtgui/plot/arrayedit.py
index c9880b6..e95a885 100644
--- a/lib/taurus/qt/qtgui/plot/arrayedit.py
+++ b/lib/taurus/qt/qtgui/plot/arrayedit.py
@@ -29,7 +29,8 @@ arrayedit.py: Widget for editing a spectrum/array via control points
 
 
 import numpy
-from PyQt4 import Qt, Qwt5
+from taurus.qt import Qt
+from PyQt4 import Qwt5
 from curvesAppearanceChooserDlg import CurveAppearanceProperties 
 
 import ui.ui_EditCPointsDialog as ui_EditCPointsDialog
diff --git a/lib/taurus/qt/qtgui/plot/curveprops.py b/lib/taurus/qt/qtgui/plot/curveprops.py
index 0bdb483..dcc30f4 100644
--- a/lib/taurus/qt/qtgui/plot/curveprops.py
+++ b/lib/taurus/qt/qtgui/plot/curveprops.py
@@ -27,11 +27,12 @@
 curveprops: Model and view for curve properties
 """
 __all__=['CurveConf','CurvesTableModel','ExtendedSelectionModel','CurvePropertiesView']
-#raise UnimplementedError('Under Construction!')
+#raise NotImplementedError('Under Construction!')
 
 import copy, re
 
-from PyQt4 import Qt, Qwt5
+from taurus.qt import Qt
+from PyQt4 import Qwt5
 import taurus
 import taurus.core
 from taurus.qt.qtgui.resource import getThemeIcon
@@ -130,6 +131,10 @@ class CurveConf(object):
         self.x = Component(xsrc)
         self.y = Component(ysrc)
         
+    def __repr__(self):
+        ret = "CurveConf(xsrc='%s', ysrc='%s', title='%s')"%(self.x.src, self.y.src, self.title)
+        return ret
+        
 
 
 class CurvesTableModel(Qt.QAbstractTableModel):
@@ -146,7 +151,9 @@ class CurvesTableModel(Qt.QAbstractTableModel):
         self.curves.append(curveconf)
         
     def dumpData(self):
-        return copy.deepcopy(self.curves)
+#        return copy.deepcopy(self.curves)
+        return copy.copy(self.curves)
+#        return self.curves
     
     def rowCount(self,index=Qt.QModelIndex()):
         return len(self.curves)
diff --git a/lib/taurus/qt/qtgui/plot/curvesAppearanceChooserDlg.py b/lib/taurus/qt/qtgui/plot/curvesAppearanceChooserDlg.py
index de48c1a..b4e9f4c 100644
--- a/lib/taurus/qt/qtgui/plot/curvesAppearanceChooserDlg.py
+++ b/lib/taurus/qt/qtgui/plot/curvesAppearanceChooserDlg.py
@@ -29,8 +29,8 @@ curvesAppearanceChooserDlg.py:
     for a QwtPlot-derived widget (like Taurusplot)
 """
 
-
-from PyQt4 import Qt, Qwt5
+from taurus.qt import Qt
+from PyQt4 import Qwt5
 from ui import ui_curvesAppearanceChooser
 from taurus.qt.qtgui.resource import getIcon
 from taurus.core.util import CaselessDict
@@ -332,7 +332,7 @@ class CurveAppearanceProperties(object):
     
     def __init__(self, sStyle=None, sSize=None, sColor=None, sFill=None,
                  lStyle=None, lWidth=None, lColor=None, cStyle=None,
-                 yAxis=None, cFill=None, title=None):
+                 yAxis=None, cFill=None, title=None, visible=None):
         """
         Creator of :class:`CurveAppearanceProperties`
         Possible keyword arguments are:
@@ -346,6 +346,7 @@ class CurveAppearanceProperties(object):
             - cStyle= curvestyle
             - cFill= bool
             - yAxis= axis
+            - visible = bool
             - title= title
             
         Where: 
@@ -369,8 +370,9 @@ class CurveAppearanceProperties(object):
         self.cFill = cFill
         self.yAxis = yAxis
         self.title = title
+        self.visible = visible
         self.propertyList = ["sStyle","sSize","sColor","sFill","lStyle","lWidth",
-                             "lColor","cStyle","cFill","yAxis", "title"]
+                             "lColor","cStyle","cFill","yAxis", "title", "visible"]
         
     def _print(self):
         """Just for debug"""
diff --git a/lib/taurus/qt/qtgui/plot/monitor.py b/lib/taurus/qt/qtgui/plot/monitor.py
index f500748..e898cc3 100644
--- a/lib/taurus/qt/qtgui/plot/monitor.py
+++ b/lib/taurus/qt/qtgui/plot/monitor.py
@@ -27,8 +27,8 @@
 monitor.py: Specialized mini-trend widget to monitor some scalar value
 """
 
-
-from PyQt4 import Qt, Qwt5
+from taurus.qt import Qt
+from PyQt4 import Qwt5
 from taurus.qt.qtgui.plot import TaurusTrend
 import datetime
 
@@ -42,6 +42,7 @@ class TaurusMonitorTiny(TaurusTrend):
                  :ref:`TaurusTrend User's Interface Guide <trend_ui>`, 
                  :ref:`The TaurusTrend coding examples <examples_taurustrend>`
     '''
+    DEFAULT_MAX_BUFFER_SIZE = 8192 #(8K events))
     def __init__(self, parent = None, designMode = False):
         TaurusTrend.__init__(self, parent = parent, designMode = designMode)
         
diff --git a/lib/taurus/qt/qtgui/plot/qwtdialog.py b/lib/taurus/qt/qtgui/plot/qwtdialog.py
index a12547a..2fc237e 100644
--- a/lib/taurus/qt/qtgui/plot/qwtdialog.py
+++ b/lib/taurus/qt/qtgui/plot/qwtdialog.py
@@ -27,8 +27,8 @@
 qwtdialog.py: Dialogs for Taurusplot
 """
 
-
-from PyQt4 import Qt, Qwt5
+from taurus.qt import Qt
+from PyQt4 import Qwt5
 import time
 
 from ui.ui_TaurusPlotConfigDialog import Ui_TaurusPlotConfigDialog
@@ -156,6 +156,7 @@ class TaurusPlotConfigDialog(Qt.QDialog):
                 axes[axis].setCurrentIndex(1)
             else:
                 raise TypeError, "TaurusPlotConfigDialog::__init__(): unexpected axis scale type (linear or logarihtmic expected)"
+        self.ui.xModeComboBox.setEnabled(not self.parent.getXIsTime())
 
         #determine which axes are visible
         if not self.parent.axisEnabled(Qwt5.QwtPlot.xBottom):
@@ -177,12 +178,12 @@ class TaurusPlotConfigDialog(Qt.QDialog):
         self.connect(self.ui.xAutoGroupBox,  Qt.SIGNAL("toggled (bool)"),self.toggledAutoScale)
         self.connect(self.ui.y1AutoGroupBox, Qt.SIGNAL("toggled (bool)"),self.toggledAutoScale)
         self.connect(self.ui.y2AutoGroupBox, Qt.SIGNAL("toggled (bool)"),self.toggledAutoScale)
-        self.connect(self.ui.xEditMin,  Qt.SIGNAL("returnPressed()"),self.apply)
-        self.connect(self.ui.xEditMax,  Qt.SIGNAL("returnPressed()"),self.apply)
-        self.connect(self.ui.y1EditMin, Qt.SIGNAL("returnPressed()"),self.apply)
-        self.connect(self.ui.y1EditMax, Qt.SIGNAL("returnPressed()"),self.apply)
-        self.connect(self.ui.y2EditMin, Qt.SIGNAL("returnPressed()"),self.apply)
-        self.connect(self.ui.y2EditMax, Qt.SIGNAL("returnPressed()"),self.apply)
+#        self.connect(self.ui.xEditMin,  Qt.SIGNAL("returnPressed()"),self.apply)
+#        self.connect(self.ui.xEditMax,  Qt.SIGNAL("returnPressed()"),self.apply)
+#        self.connect(self.ui.y1EditMin, Qt.SIGNAL("returnPressed()"),self.apply)
+#        self.connect(self.ui.y1EditMax, Qt.SIGNAL("returnPressed()"),self.apply)
+#        self.connect(self.ui.y2EditMin, Qt.SIGNAL("returnPressed()"),self.apply)
+#        self.connect(self.ui.y2EditMax, Qt.SIGNAL("returnPressed()"),self.apply)
         self.connect(self.ui.xModeComboBox, Qt.SIGNAL("currentIndexChanged(const QString&)"),self.modeComboChanged)
         self.connect(self.ui.xDynScaleCheckBox, Qt.SIGNAL("toggled (bool)"),self.setXDynScale)
         self.connect(self.ui.xRangeCB, Qt.SIGNAL("currentIndexChanged(const QString&)"),self.apply)
@@ -356,7 +357,7 @@ class TaurusPlotConfigDialog(Qt.QDialog):
         return (xMin,xMax,y1Min,y1Max,y2Min,y2Max)
 
     def apply(self):
-        """This will apply the values set in the dialog. Note that some of them (i.e. mode combo)
+        """This will apply the values set in the dialog. Note that some of them
         are not necessary to be set, since they're already are set when changing the item selected"""
         
         #Apply the changes from the curves Appearance widget (they are already validated).
@@ -401,13 +402,14 @@ class TaurusPlotConfigDialog(Qt.QDialog):
         else:
                 #set the scale for the corresponding axis
                 if comboBox.objectName() == "xModeComboBox":
+                    if not self.parent.getXIsTime():
                         self.parent.setAxisScaleType(Qwt5.QwtPlot.xBottom,itemSelected)
                 elif comboBox.objectName() == "y1ModeComboBox":
-                        self.parent.setAxisScaleType(Qwt5.QwtPlot.yLeft,itemSelected)
+                    self.parent.setAxisScaleType(Qwt5.QwtPlot.yLeft,itemSelected)
                 elif comboBox.objectName() == "y2ModeComboBox":
-                        self.parent.setAxisScaleType(Qwt5.QwtPlot.yRight,itemSelected)
+                    self.parent.setAxisScaleType(Qwt5.QwtPlot.yRight,itemSelected)
                 else:
-                        self.error("TaurusPlotConfig::modeComboChanged() invalid axis: " + comboBox.objectName())
+                    self.error("TaurusPlotConfig::modeComboChanged() invalid axis: " + comboBox.objectName())
     
     def setXDynScale(self,checked):
         if checked:
diff --git a/lib/taurus/qt/qtgui/plot/scales.py b/lib/taurus/qt/qtgui/plot/scales.py
index ec321a9..8aa2231 100644
--- a/lib/taurus/qt/qtgui/plot/scales.py
+++ b/lib/taurus/qt/qtgui/plot/scales.py
@@ -26,12 +26,43 @@
 """
 scales.py: Custom scales used by taurus.widget.qwt module
 """
+__all__=["DateTimeScaleEngine", "DeltaTimeScaleEngine", "FixedLabelsScaleEngine", 
+         "FancyScaleDraw", "TaurusTimeScaleDraw", "DeltaTimeScaleDraw", 
+         "FixedLabelsScaleDraw"]
 
 import numpy
 from datetime import datetime, timedelta
 from time import mktime
+from taurus.qt import Qt
 from PyQt4 import Qwt5
 
+    
+def _getDefaultAxisLabelsAlignment(axis, rotation):
+    '''return a "smart" alignment for the axis labels depending on the axis
+    and the label rotation
+
+    :param axis: (Qwt5.QwtPlot.Axis) the axis
+    :param rotation: (float) The rotation (in degrees, clockwise-positive)
+
+    :return: (Qt.Alignment) an alignment
+    '''
+    if axis == Qwt5.QwtPlot.xBottom:
+        if rotation == 0 : return Qt.Qt.AlignHCenter|Qt.Qt.AlignBottom
+        elif rotation < 0: return Qt.Qt.AlignLeft|Qt.Qt.AlignBottom
+        else:              return Qt.Qt.AlignRight|Qt.Qt.AlignBottom
+    elif axis == Qwt5.QwtPlot.yLeft:
+        if rotation == 0 : return Qt.Qt.AlignLeft|Qt.Qt.AlignVCenter
+        elif rotation < 0: return Qt.Qt.AlignLeft|Qt.Qt.AlignBottom
+        else:              return Qt.Qt.AlignLeft|Qt.Qt.AlignTop
+    elif axis == Qwt5.QwtPlot.yRight:
+        if rotation == 0 : return Qt.Qt.AlignRight|Qt.Qt.AlignVCenter
+        elif rotation < 0: return Qt.Qt.AlignRight|Qt.Qt.AlignTop
+        else:              return Qt.Qt.AlignRight|Qt.Qt.AlignBottom
+    elif axis == Qwt5.QwtPlot.xTop:
+        if rotation == 0 : return Qt.Qt.AlignHCenter|Qt.Qt.AlignTop
+        elif rotation < 0: return Qt.Qt.AlignLeft|Qt.Qt.AlignTop
+        else:              return Qt.Qt.AlignRight|Qt.Qt.AlignTop
+
 class FancyScaleDraw(Qwt5.QwtScaleDraw):
     
         '''This is a scaleDraw with a tuneable palette and label formats'''
@@ -193,6 +224,60 @@ class DateTimeScaleEngine(Qwt5.QwtLinearScaleEngine):
         
         return scaleDiv
     
+    @staticmethod
+    def getDefaultAxisLabelsAlignment(axis, rotation):
+        '''return a "smart" alignment for the axis labels depending on the axis
+        and the label rotation
+
+        :param axis: (Qwt5.QwtPlot.Axis) the axis
+        :param rotation: (float) The rotation (in degrees, clockwise-positive)
+
+        :return: (Qt.Alignment) an alignment
+        '''
+        return _getDefaultAxisLabelsAlignment(axis, rotation)
+
+    @staticmethod        
+    def enableInAxis(plot, axis, scaleDraw =None, rotation=None):
+        '''convenience method that will enable this engine in the given
+        axis. Note that it changes the ScaleDraw as well.
+         
+        :param plot: (Qwt5.QwtPlot) the plot to change 
+        :param axis: (Qwt5.QwtPlot.Axis) the id of the axis 
+        :param scaleDraw: (Qwt5.QwtScaleDraw) Scale draw to use. If None given, 
+                          the current ScaleDraw for the plot will be used if 
+                          possible, and a :class:`TaurusTimeScaleDraw` will be set if not
+        :param rotation: (float or None) The rotation of the labels (in degrees, clockwise-positive)
+        '''
+        if scaleDraw is None:
+            scaleDraw = plot.axisScaleDraw(axis)
+            if not isinstance(scaleDraw, TaurusTimeScaleDraw):
+                scaleDraw = TaurusTimeScaleDraw()
+        plot.setAxisScaleDraw(axis, scaleDraw)
+        plot.setAxisScaleEngine(axis, DateTimeScaleEngine(scaleDraw))
+        if rotation is not None:
+            alignment = DateTimeScaleEngine.getDefaultAxisLabelsAlignment(axis, rotation)
+            plot.setAxisLabelRotation(axis, rotation)
+            plot.setAxisLabelAlignment(axis, alignment)
+        
+    @staticmethod 
+    def disableInAxis(plot, axis, scaleDraw=None, scaleEngine=None):
+        '''convenience method that will disable this engine in the given
+        axis. Note that it changes the ScaleDraw as well.
+         
+        :param plot: (Qwt5.QwtPlot) the plot to change
+        :param axis: (Qwt5.QwtPlot.Axis) the id of the axis
+        :param scaleDraw: (Qwt5.QwtScaleDraw) Scale draw to use. If None given, 
+                          a :class:`FancyScaleDraw` will be set
+        :param scaleEngine: (Qwt5.QwtScaleEngine) Scale draw to use. If None given, 
+                          a :class:`Qwt5.QwtLinearScaleEngine` will be set
+        '''
+        if scaleDraw is None:
+            scaleDraw=FancyScaleDraw()
+        if scaleEngine is None:
+            scaleEngine = Qwt5.QwtLinearScaleEngine()
+        plot.setAxisScaleEngine(axis, scaleEngine)
+        plot.setAxisScaleDraw(axis, scaleDraw) 
+    
   
 class TaurusTimeScaleDraw(FancyScaleDraw):
     
@@ -216,6 +301,114 @@ class TaurusTimeScaleDraw(FancyScaleDraw):
             s = t.isoformat(' ')
         return Qwt5.QwtText(s)
     
+
+class DeltaTimeScaleEngine(Qwt5.QwtLinearScaleEngine):
+    def __init__(self, scaleDraw=None):
+        Qwt5.QwtLinearScaleEngine.__init__(self)
+        self.setScaleDraw(scaleDraw)
+        
+    def setScaleDraw(self, scaleDraw):
+        self._scaleDraw = scaleDraw
+        
+    def scaleDraw(self):
+        return self._scaleDraw
+
+    def divideScale(self, x1, x2, maxMajSteps, maxMinSteps, stepSize):
+        ''' Reimplements Qwt5.QwtLinearScaleEngine.divideScale
+                
+        :return: (Qwt5.QwtScaleDiv) a scale division whose ticks are aligned with
+                 the natural delta time units '''
+        interval = Qwt5.QwtDoubleInterval(x1, x2).normalized()
+        if interval.width() <= 0:
+            return Qwt5.QwtScaleDiv()
+        d_range = interval.width()
+        if d_range < 2: # 2s
+            return Qwt5.QwtLinearScaleEngine.divideScale(self, x1, x2, maxMajSteps, maxMinSteps, stepSize)
+        elif d_range < 20: # 20 s
+            s = 1
+        elif d_range < 120: # =60s*2 = 2 minutes
+            s = 10
+        elif d_range < 1200: # 60s*20 =20 minutes
+            s = 60
+        elif d_range < 7200: # 3600s*2 = 2 hours
+            s = 600
+        elif d_range < 172800: # 3600s24*2 = 2 days
+            s = 3600
+        else: 
+            s = 86400 #1 day
+        #calculate a step size that respects the base step (s) and also enforces the maxMajSteps
+        stepSize = s * int(numpy.ceil(float(d_range//s)/maxMajSteps))
+        return Qwt5.QwtLinearScaleEngine.divideScale(self, x1, x2, maxMajSteps, maxMinSteps, stepSize)
+    
+    @staticmethod
+    def getDefaultAxisLabelsAlignment(axis, rotation):
+        '''return a "smart" alignment for the axis labels depending on the axis
+        and the label rotation
+
+        :param axis: (Qwt5.QwtPlot.Axis) the axis
+        :param rotation: (float) The rotation (in degrees, clockwise-positive)
+
+        :return: (Qt.Alignment) an alignment
+        '''
+        return _getDefaultAxisLabelsAlignment(axis, rotation)
+        
+    @staticmethod        
+    def enableInAxis(plot, axis, scaleDraw =None, rotation=None):
+        '''convenience method that will enable this engine in the given
+        axis. Note that it changes the ScaleDraw as well.
+         
+        :param plot: (Qwt5.QwtPlot) the plot to change 
+        :param axis: (Qwt5.QwtPlot.Axis) the id of the axis 
+        :param scaleDraw: (Qwt5.QwtScaleDraw) Scale draw to use. If None given, 
+                          the current ScaleDraw for the plot will be used if 
+                          possible, and a :class:`TaurusTimeScaleDraw` will be set if not
+        :param rotation: (float or None) The rotation of the labels (in degrees, clockwise-positive)
+        '''
+        if scaleDraw is None:
+            scaleDraw = plot.axisScaleDraw(axis)
+            if not isinstance(scaleDraw, DeltaTimeScaleDraw):
+                scaleDraw = DeltaTimeScaleDraw()
+        plot.setAxisScaleDraw(axis, scaleDraw)
+        plot.setAxisScaleEngine(axis, DeltaTimeScaleEngine(scaleDraw))
+        if rotation is not None:
+            alignment = DeltaTimeScaleEngine.getDefaultAxisLabelsAlignment(axis, rotation)
+            plot.setAxisLabelRotation(axis, rotation)
+            plot.setAxisLabelAlignment(axis, alignment)
+        
+    @staticmethod 
+    def disableInAxis(plot, axis, scaleDraw=None, scaleEngine=None):
+        '''convenience method that will disable this engine in the given
+        axis. Note that it changes the ScaleDraw as well.
+         
+        :param plot: (Qwt5.QwtPlot) the plot to change
+        :param axis: (Qwt5.QwtPlot.Axis) the id of the axis
+        :param scaleDraw: (Qwt5.QwtScaleDraw) Scale draw to use. If None given, 
+                          a :class:`FancyScaleDraw` will be set
+        :param scaleEngine: (Qwt5.QwtScaleEngine) Scale draw to use. If None given, 
+                          a :class:`Qwt5.QwtLinearScaleEngine` will be set
+        '''
+        if scaleDraw is None:
+            scaleDraw=FancyScaleDraw()
+        if scaleEngine is None:
+            scaleEngine = Qwt5.QwtLinearScaleEngine()
+        plot.setAxisScaleEngine(axis, scaleEngine)
+        plot.setAxisScaleDraw(axis, scaleDraw) 
+    
+  
+class DeltaTimeScaleDraw(FancyScaleDraw):
+    
+    def __init__(self, *args):
+        FancyScaleDraw.__init__(self, *args)
+    
+    def label(self, val):
+        if val >= 0:
+            s = "+%s"%str(timedelta(seconds=val))
+        else:
+            s = "-%s"%str(timedelta(seconds=-val))
+        return Qwt5.QwtText(s)
+    
+ 
+    
 class FixedLabelsScaleEngine(Qwt5.QwtLinearScaleEngine):
     def __init__(self, positions):
         '''labels is a sequence of (pos,label) tuples where pos is the point
@@ -228,6 +421,44 @@ class FixedLabelsScaleEngine(Qwt5.QwtLinearScaleEngine):
         div = Qwt5.QwtScaleDiv(x1, x2, self._positions, [], [])
         div.setTicks(Qwt5.QwtScaleDiv.MajorTick, self._positions)
         return div
+    
+    @staticmethod        
+    def enableInAxis(plot, axis, scaleDraw =None):
+        '''convenience method that will enable this engine in the given
+        axis. Note that it changes the ScaleDraw as well.
+         
+        :param plot: (Qwt5.QwtPlot) the plot to change 
+        :param axis: (Qwt5.QwtPlot.Axis) the id of the axis 
+        :param scaleDraw: (Qwt5.QwtScaleDraw) Scale draw to use. If None given, 
+                          the current ScaleDraw for the plot will be used if 
+                          possible, and a :class:`FixedLabelsScaleDraw` will be set if not
+        '''
+        if scaleDraw is None:
+            scaleDraw = plot.axisScaleDraw(axis)
+            if not isinstance(scaleDraw, FixedLabelsScaleDraw):
+                scaleDraw = FixedLabelsScaleDraw()
+        plot.setAxisScaleDraw(axis, scaleDraw)
+        plot.setAxisScaleEngine(axis, FixedLabelsScaleEngine(scaleDraw))
+        
+    @staticmethod 
+    def disableInAxis(plot, axis, scaleDraw=None, scaleEngine=None):
+        '''convenience method that will disable this engine in the given
+        axis. Note that it changes the ScaleDraw as well.
+         
+        :param plot: (Qwt5.QwtPlot) the plot to change
+        :param axis: (Qwt5.QwtPlot.Axis) the id of the axis
+        :param scaleDraw: (Qwt5.QwtScaleDraw) Scale draw to use. If None given, 
+                          a :class:`FancyScaleDraw` will be set
+        :param scaleEngine: (Qwt5.QwtScaleEngine) Scale draw to use. If None given, 
+                          a :class:`Qwt5.QwtLinearScaleEngine` will be set
+        '''
+        if scaleDraw is None:
+            scaleDraw=FancyScaleDraw()
+        if scaleEngine is None:
+            scaleEngine = Qwt5.QwtLinearScaleEngine()
+        plot.setAxisScaleEngine(axis, scaleEngine)
+        plot.setAxisScaleDraw(axis, scaleDraw) 
+
 
 class FixedLabelsScaleDraw(FancyScaleDraw):
     def __init__(self, positions, labels):
@@ -254,4 +485,5 @@ class FixedLabelsScaleDraw(FancyScaleDraw):
         if index is not None:
             return Qwt5.QwtText(self._labels[index])
         else: Qwt5.QwtText()
+        
 
diff --git a/lib/taurus/qt/qtgui/plot/taurusarrayedit.py b/lib/taurus/qt/qtgui/plot/taurusarrayedit.py
index fb41c1f..6ccd80e 100644
--- a/lib/taurus/qt/qtgui/plot/taurusarrayedit.py
+++ b/lib/taurus/qt/qtgui/plot/taurusarrayedit.py
@@ -25,7 +25,7 @@
 
 
 
-from PyQt4 import Qt
+from taurus.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 f4beb78..f849a13 100644
--- a/lib/taurus/qt/qtgui/plot/taurusplot.py
+++ b/lib/taurus/qt/qtgui/plot/taurusplot.py
@@ -33,7 +33,8 @@ import copy
 from datetime import datetime
 import time
 import numpy
-from PyQt4 import Qt, Qwt5
+from taurus.qt import Qt
+from PyQt4 import Qwt5
 
 import PyTango
 
@@ -42,8 +43,7 @@ from taurus.core.util import SafeEvaluator, LoopList, CaselessDict, CaselessList
 from taurus.qt.qtcore.mimetypes import TAURUS_MODEL_LIST_MIME_TYPE, TAURUS_ATTR_MIME_TYPE
 from taurus.qt.qtgui.base import TaurusBaseComponent, TaurusBaseWidget
 from taurus.qt.qtgui.plot import TaurusPlotConfigDialog, FancyScaleDraw,\
-                           DateTimeScaleEngine, TaurusTimeScaleDraw,\
-                           FixedLabelsScaleEngine, FixedLabelsScaleDraw
+                           DateTimeScaleEngine, FixedLabelsScaleEngine, FixedLabelsScaleDraw
 from taurus.qt.qtgui.panel import QDataExportDialog, QRawDataWidget
 from taurus.qt.qtgui.panel import TaurusModelChooser
 from curvesAppearanceChooserDlg import CurveAppearanceProperties
@@ -103,7 +103,6 @@ class TaurusCurveMarker(Qwt5.QwtPlotMarker, TaurusBaseComponent):
     '''Taurus-enabled custom version of QwtPlotMarker
     '''
     def __init__(self, name, parent=None, labelOpacity=0.7):
-        self._parent = parent
         self.call__init__wo_kw(Qwt5.QwtPlotMarker)
         self.call__init__(TaurusBaseComponent, self.__class__.__name__)
         self.labelOpacity = labelOpacity
@@ -148,7 +147,6 @@ class TaurusXValues(TaurusBaseComponent):
     '''
     def __init__(self, name, parent = None):
         self._xValues = None
-        self._parent = parent
         self._signalGen = Qt.QObject()
         self.call__init__(TaurusBaseComponent, self.__class__.__name__)
         self._listeners = []
@@ -243,21 +241,20 @@ class TaurusCurve(Qwt5.QwtPlotCurve, TaurusBaseComponent):
 
     def __init__(self, name, xname=None, parent = None, rawData=None, optimized=False):
 
+        Qwt5.QwtPlotCurve.__init__(self)
+        TaurusBaseComponent.__init__(self, 'TaurusCurve')
         self._rawData=rawData
         self._xValues = None
         self._yValues = None
         self._showMaxPeak = False
         self._showMinPeak = False
-        self._maxPeakMarker = TaurusCurveMarker(name, self)
-        self._minPeakMarker = TaurusCurveMarker(name, self)
         self._filteredWhenLog = True
-        self._parent = parent
         self._history = []
         self._titleText = '<label>'
         self.setXValuesBuilder()
         self._signalGen = Qt.QObject()
-        self.call__init__wo_kw(Qwt5.QwtPlotCurve)
-        self.call__init__(TaurusBaseComponent, self.__class__.__name__)
+        self._maxPeakMarker = TaurusCurveMarker(name, self)
+        self._minPeakMarker = TaurusCurveMarker(name, self)
         self.__curveName = name
         self.isRawData= not(rawData is None)
         if optimized:
@@ -338,10 +335,10 @@ class TaurusCurve(Qwt5.QwtPlotCurve, TaurusBaseComponent):
                             - <label> the attribute label (default)
                             - <model> the model name
                             - <attr_name> attribute name
-                            - <attr_full_name> full attribute name
+                            - <attr_fullname> full attribute name (for backwards compatibility, <attr_full_name> is also accepted)
                             - <dev_alias> device alias
                             - <dev_name> device name
-                            - <dev_full_name> full device name
+                            - <dev_fullname> full device name (for backwards compatibility, <dev_full_name> is also accepted)
                             - <current_title> The current title
 
         :return: (str) a title string where the placeholders have been
@@ -356,6 +353,7 @@ class TaurusCurve(Qwt5.QwtPlotCurve, TaurusBaseComponent):
         #TaurusCurves for which we can get the Attribute...
         titletext = titletext.replace('<label>',attr.label or '---')
         titletext = titletext.replace('<attr_name>',attr.name or '---')
+        titletext = titletext.replace('<attr_fullname>',attr.getFullName() or '---')
         titletext = titletext.replace('<attr_full_name>',attr.getFullName() or '---')
         titletext = titletext.replace('<dev_alias>',attr.dev_alias or '---')
         titletext = titletext.replace('<dev_name>',attr.dev_name or '---')
@@ -364,6 +362,7 @@ class TaurusCurve(Qwt5.QwtPlotCurve, TaurusBaseComponent):
         if dev is None:
             return titletext
         #TaurusCurves for which we can get the Device object...
+        titletext = titletext.replace('<dev_fullname>',dev.getFullName() or '---')
         titletext = titletext.replace('<dev_full_name>',dev.getFullName() or '---')
         return titletext
 
@@ -418,20 +417,24 @@ class TaurusCurve(Qwt5.QwtPlotCurve, TaurusBaseComponent):
     # Overwrite from TaurusBaseComponent
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
 
-    def preAttach(self):
-        """implemented because TaurusCurves cannot use signals(they are not QObjects)
-        See :meth:`TaurusBaseComponent.preAttach`"""
-        self._signalGen.connect(self._signalGen, Qt.SIGNAL('taurusEvent'), self.filterEvent)
-
-    def preDetach(self):
-        """implemented because TaurusCurves cannot use signals(they are not QObjects)
-        See :meth:`TaurusBaseComponent.preDetach`"""
-        self._signalGen.disconnect(self._signalGen, Qt.SIGNAL('taurusEvent'), self.filterEvent)
-
-    def fireEvent(self,  evt_src, evt_type, evt_value):
-        """implemented because TaurusCurves cannot use signals(they are not QObjects)
-        See :meth:`TaurusBaseComponent.fireEvent`"""
-        self._signalGen.emit(Qt.SIGNAL('taurusEvent'),  evt_src, evt_type, evt_value)
+#    def preAttach(self):
+#        """implemented because TaurusCurves cannot use signals(they are not QObjects)
+#        See :meth:`TaurusBaseComponent.preAttach`"""
+#        self._signalGen.connect(self._signalGen, Qt.SIGNAL('taurusEvent'), self.filterEvent)
+#
+#    def preDetach(self):
+#        """implemented because TaurusCurves cannot use signals(they are not QObjects)
+#        See :meth:`TaurusBaseComponent.preDetach`"""
+#        self._signalGen.disconnect(self._signalGen, Qt.SIGNAL('taurusEvent'), self.filterEvent)
+#
+#    def fireEvent(self,  evt_src, evt_type, evt_value):
+#        """implemented because TaurusCurves cannot use signals(they are not QObjects)
+#        See :meth:`TaurusBaseComponent.fireEvent`"""
+#        self._signalGen.emit(Qt.SIGNAL('taurusEvent'),  evt_src, evt_type, evt_value)
+
+    def getSignaller(self):
+        '''See :meth:`TaurusBaseComponent.getSignaller` '''
+        return self._signalGen   
 
     def getModelClass(self):
         '''See :meth:`TaurusBaseComponent.getModelClass`'''
@@ -602,7 +605,8 @@ class TaurusCurve(Qwt5.QwtPlotCurve, TaurusBaseComponent):
                 b.setStyle(Qt.Qt.NoBrush)
             self.setBrush(b)            
         if prop.yAxis is not None: self.setYAxis(prop.yAxis)
-        if prop.title is not None: self.setTitle(Qwt5.QwtText(prop.title))
+        if getattr(prop,"visible",None) is not None: self.setVisible(prop.visible)
+        if prop.title is not None: self.setTitleText(prop.title)
         self.setSymbol(s)
         self.setPen(p)
         
@@ -625,6 +629,7 @@ class TaurusCurve(Qwt5.QwtPlotCurve, TaurusBaseComponent):
         prop.cStyle=self.style()
         prop.cFill= (self.brush().style() != Qt.Qt.NoBrush)
         prop.yAxis=self.yAxis()
+        prop.visible = self.isVisible()
         prop.title=self.title().text() #We are forced to save only the text (and not the QwtText) because Pickle chokes with the QwtText
         return copy.deepcopy(prop)
 
@@ -815,7 +820,7 @@ class TaurusPlot(Qwt5.QwtPlot, TaurusBaseWidget):
         self._useParentModel = False
         self._isPaused = False
         self._defaultCurvesTitle = '<label>'
-        self._curvePens=LoopList(DFT_CURVE_PENS)
+        self._curvePens = LoopList(DFT_CURVE_PENS)
         self._gridPen = Qt.QPen(Qt.Qt.gray, 1)
         self._supportedConfigVersions = ["tpc-1","tpc-1.1"] #the latest element of this list is considered the current version
 #        Logger.__init__(self)
@@ -1393,7 +1398,6 @@ class TaurusPlot(Qwt5.QwtPlot, TaurusBaseWidget):
                 widget.setText(title)
         self.replot()
 
-    @Qt.pyqtSignature("legendClicked(QwtPlotItem*)")
     def toggleCurveState(self, curve):
         '''cycles through 3 possible states for a curve:
             -invisible
@@ -1623,6 +1627,10 @@ class TaurusPlot(Qwt5.QwtPlot, TaurusBaseWidget):
                 ynames.append(yname)
 
             del_curves = [ name for name in self.curves.keys() if name not in ynames]
+            
+            #if all curves were removed, reset the color palette
+            if len(del_curves) == len(self.curves):
+                self._curvePens.setCurrentIndex(0)
 
             for i,name in enumerate(ynames):
                 xname = xnames[i]
@@ -1835,9 +1843,10 @@ class TaurusPlot(Qwt5.QwtPlot, TaurusBaseWidget):
         autoscaleAction= menu.addAction("AutoScale %s"%axisname)
         self.connect(autoscaleAction, Qt.SIGNAL("triggered()"), autoScaleThisAxis)
 
-        switchThisAxis = lambda : self.setAxisScaleType(axis=axis, scale=None)
-        switchThisAxisAction= menu.addAction("Togle linear/log for %s"%axisname)
-        self.connect(switchThisAxisAction, Qt.SIGNAL("triggered()"), switchThisAxis)
+        if not self.getXIsTime():
+            switchThisAxis = lambda : self.setAxisScaleType(axis=axis, scale=None)
+            switchThisAxisAction= menu.addAction("Toggle linear/log for %s"%axisname)
+            self.connect(switchThisAxisAction, Qt.SIGNAL("triggered()"), switchThisAxis)
 
         if axis in (Qwt5.QwtPlot.yLeft, Qwt5.QwtPlot.yRight):
             zoomOnThisAxis = lambda : self.toggleZoomer(axis=axis)
@@ -1846,11 +1855,11 @@ class TaurusPlot(Qwt5.QwtPlot, TaurusBaseWidget):
 
         elif axis in (Qwt5.QwtPlot.xBottom, Qwt5.QwtPlot.xTop):
             if self.isXDynScaleSupported():
-                    xDynAction=menu.addAction("&Auto-scroll %s"%axisname)
-                    xDynAction.setToolTip('If enabled, the scale of %s will be autoadjusted to provide a fixed window moving to show always the last value')
-                    xDynAction.setCheckable(True)
-                    xDynAction.setChecked(self.getXDynScale())
-                    self.connect(xDynAction, Qt.SIGNAL("toggled(bool)"), self.setXDynScale)
+                xDynAction=menu.addAction("&Auto-scroll %s"%axisname)
+                xDynAction.setToolTip('If enabled, the scale of %s will be autoadjusted to provide a fixed window moving to show always the last value')
+                xDynAction.setCheckable(True)
+                xDynAction.setChecked(self.getXDynScale())
+                self.connect(xDynAction, Qt.SIGNAL("toggled(bool)"), self.setXDynScale)
         return menu
 
     def showConfigDialog(self):
@@ -1892,7 +1901,11 @@ class TaurusPlot(Qwt5.QwtPlot, TaurusBaseWidget):
         self.curves_lock.acquire()
         try:
             for name,prop in propDict.iteritems():
-                self.curves[name].setAppearanceProperties(copy.deepcopy(prop))
+                c = self.curves[name]
+                c.setAppearanceProperties(copy.deepcopy(prop))
+                visible = getattr(prop,'visible',True)
+                if visible is not None: 
+                    self.showCurve(c, visible)
         finally:
             self.curves_lock.release()
         self.autoShowYAxes()
@@ -2008,9 +2021,11 @@ class TaurusPlot(Qwt5.QwtPlot, TaurusBaseWidget):
             self.error('Exception while gathering curves configuration info'+str(e))
         finally:
             self.curves_lock.release()
+        model = CaselessList([m for m in self.getModel() if m in curvenames])
         configdict={"Axes":axesdict, "Misc":miscdict, "RawData":rawdatadict,
                     "TangoCurves":tangodict, "CurveProp":propdict,
-                    "ConfigVersion":self._supportedConfigVersions[-1]}
+                    "ConfigVersion":self._supportedConfigVersions[-1],
+                    "model":model}
         return configdict
 
     def applyConfig(self, configdict, **kwargs):
@@ -2023,7 +2038,8 @@ class TaurusPlot(Qwt5.QwtPlot, TaurusBaseWidget):
         if not self.checkConfigVersion(configdict): return
         #attach the curves
         for rd in configdict["RawData"].values(): self.attachRawData(rd)
-        self.addModels(configdict["TangoCurves"].values())
+        models = configdict.get("model", configdict["TangoCurves"].values()) #for backwards compatibility, if the ordered list of models is not stored, it uses the unsorted dict values
+        self.addModels(models)
         #set curve properties
         self.setCurveAppearanceProperties(configdict["CurveProp"])
         self.updateLegend(force=True)
@@ -2046,17 +2062,18 @@ class TaurusPlot(Qwt5.QwtPlot, TaurusBaseWidget):
     def applyAxesConfig(self, axes):
         '''sets the axes according to settings stored in the axes dict,
         which can be generated with _createAxesDict()
-
+        
         :param axes: (dict) contains axes properties
         '''
+        self.setXIsTime(axes["xIsTime"])
+        self.setXDynScale(axes["xDyn"])
         self.setAxisScale(Qwt5.QwtPlot.xBottom, axes["xMin"], axes["xMax"])
         self.setAxisScale(Qwt5.QwtPlot.yLeft, axes["y1Min"], axes["y1Max"])
         self.setAxisScale(Qwt5.QwtPlot.yRight, axes["y2Min"], axes["y2Max"])
-        self.setAxisScaleType(Qwt5.QwtPlot.xBottom, axes["xMode"])
+        if not self.getXIsTime():
+            self.setAxisScaleType(Qwt5.QwtPlot.xBottom, axes["xMode"])
         self.setAxisScaleType(Qwt5.QwtPlot.yLeft, axes["y1Mode"])
         self.setAxisScaleType(Qwt5.QwtPlot.yRight, axes["y2Mode"])
-        self.setXDynScale(axes["xDyn"])
-        self.setXIsTime(axes["xIsTime"])
 
     def saveConfig(self, ofile=None, curvenames=None):
         """Stores the current curves and their display properties in a file for
@@ -2178,7 +2195,9 @@ class TaurusPlot(Qwt5.QwtPlot, TaurusBaseWidget):
         :param scale: (Qwt5.QwtScaleTransformation.Type) the scale
                       transformation. For convenience, the strings "Linear"
                       and "Log" can be used as well'''
-
+                      
+        if self.getXIsTime() and isinstance(self.axisScaleEngine(axis), DateTimeScaleEngine):
+            raise ValueError('TaurusPlot.setAxisScaleType cannot be called with time scales') 
         if not Qwt5.QwtPlot.axisValid(axis):
             self.error("TaurusPlot.setScale() invalid axis: " + axis)
         if scale is None:
@@ -2509,12 +2528,14 @@ class TaurusPlot(Qwt5.QwtPlot, TaurusBaseWidget):
                             picked = Qt.QPointF(data.x(i),data.y(i))
                             pickedCurveName=name
                             pickedIndex=i
+                            pickedAxes = curve.xAxis(), curve.yAxis()
         finally:
             self.curves_lock.release()
 
         if showMarker and picked is not None:
             self._pickedMarker.detach()
             self._pickedMarker.setValue(picked)
+            self._pickedMarker.setAxis(*pickedAxes)
             self._pickedMarker.attach(self)
             self._pickedCurveName=pickedCurveName
             self._pickedMarker.pickedIndex=pickedIndex
@@ -2858,8 +2879,8 @@ class TaurusPlot(Qwt5.QwtPlot, TaurusBaseWidget):
                                                 'New Title for Curves',
                                                 'New text to be used for the curves.'\
                                                 'You can use any of the following placeholders:\n'\
-                                                '<label>, <model>, <attr_name>, <attr_full_name>,'\
-                                                '<dev_alias>, <dev_name>, <dev_full_name>, <current_title>',
+                                                '<label>, <model>, <attr_name>, <attr_fullname>,'\
+                                                '<dev_alias>, <dev_name>, <dev_fullname>, <current_title>',
                                                 Qt.QLineEdit.Normal,
                                                 self._defaultCurvesTitle)
         if ok:
@@ -2881,16 +2902,11 @@ class TaurusPlot(Qwt5.QwtPlot, TaurusBaseWidget):
 
         .. seealso:: :ref:`TaurusPlot user manual <taurusplottime>`
         '''
-        if enable == self._xIsTime:
-            return
         if enable:
-            sd = TaurusTimeScaleDraw()
-            self.setAxisScaleDraw(axis, sd)
-            self.setAxisScaleEngine(axis,DateTimeScaleEngine(sd))
+            DateTimeScaleEngine.enableInAxis(self, axis)
             self._axesnames[Qwt5.QwtPlot.xBottom] = "T"
         else:
-            self.setAxisScaleEngine(axis, Qwt5.QwtLinearScaleEngine())
-            self.setAxisScaleDraw(axis, FancyScaleDraw())
+            DateTimeScaleEngine.disableInAxis(self, axis)
             self._axesnames[Qwt5.QwtPlot.xBottom] = "X"
 
         self._zoomer1.setXIsTime(enable)
diff --git a/lib/taurus/qt/qtgui/plot/taurusplotNG.py b/lib/taurus/qt/qtgui/plot/taurusplotNG.py
deleted file mode 100644
index dd7f6ef..0000000
--- a/lib/taurus/qt/qtgui/plot/taurusplotNG.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/>.
-##
-#############################################################################
-
-"""
-Generic Image widget for Taurus. Based on guiqwt.plot.ImagePlotWidget: 
-"""
-from PyQt4 import Qt
-from taurus.qt.qtgui.base import taurusQAttributeFactory
-from guiqwt.curve import CurveItem
-import numpy
-        
-class TaurusCurveItem(CurveItem):
-    '''A CurveItem that autoupdates its values & params when x or y components change'''
-    def __init__(self, curveparam=None):
-        CurveItem.__init__(self, curveparam=curveparam)
-        self._xcomp = None
-        self._ycomp = None
-        
-    def setExtendedModels(self, x, y):
-        #disconect previous component
-        if self._xcomp is not None: Qt.QObject.disconnect(self._xcomp, Qt.SIGNAL('dataChanged'), self.onDataChanged)
-        if self._ycomp is not None: Qt.QObject.disconnect(self._ycomp, Qt.SIGNAL('dataChanged'), self.onDataChanged)
-        #create/get new components
-        self._ycomp = taurusQAttributeFactory.getQAttr(xmodel=y)
-        self._xcomp = taurusQAttributeFactory.getQAttr(xmodel=x)
-        #connect the new components to the notification
-        Qt.QObject.connect(self._xcomp, Qt.SIGNAL('dataChanged'), self.onDataChanged)
-        Qt.QObject.connect(self._ycomp, Qt.SIGNAL('dataChanged'), self.onDataChanged)
-        self.onDataChanged()
-        
-    def onDataChanged(self):
-        if self._ycomp.value is None:
-            return
-        if self._xcomp.value is None:
-            self._xcomp.value = numpy.arange(len(self._ycomp.value))
-        self.setData(self._xcomp.value, self._ycomp.value)
-        p = self.plot()
-        if p is not None: p.replot()
-        
-
-def main():
-    from guiqwt.plot import CurvePlotWidget,CurvePlotDialog
-    from guiqwt.curve import  CurveParam
-    import sys
-    from taurus.qt.qtgui.application import TaurusApplication
-    app = TaurusApplication()
-    args = app.get_command_line_args()
-    if len (args)==2:
-        model1,model2 = args
-    else: 
-#        model1 = None
-        model1 = '=linspace(0,1,len(${sys/tg_test/1/wave}))'
-#        model2 = '=arange(10)**2'
-#        model2 = 'sys/tg_test/1/float_spectrum_ro'
-        model2 = '=${sys/tg_test/1/wave}*10 +${sys/tg_test/1/float_spectrum_ro}/50'
-    
-    #w = CurvePlotDialog()
-    w = CurvePlotWidget()
-    w.register_all_curve_tools()
-    plot = w.get_plot()
-#    w = CurvePlot()
-    
-    param = CurveParam()
-    param.label = 'My curve'
-    curve = TaurusCurveItem(param)
-    curve.setExtendedModels(model1,model2)
-    
-    plot.add_item(curve)
-    plot.set_items_readonly(False)
-    
-    #show the widget
-    w.show()
-    
-    sys.exit(app.exec_())  
-    
-
-if __name__ == "__main__":
-    main()    
-
diff --git a/lib/taurus/qt/qtgui/plot/taurusplotconf.py b/lib/taurus/qt/qtgui/plot/taurusplotconf.py
index 3118d71..2a4531b 100644
--- a/lib/taurus/qt/qtgui/plot/taurusplotconf.py
+++ b/lib/taurus/qt/qtgui/plot/taurusplotconf.py
@@ -32,7 +32,8 @@ __all__ = ['TaurusPlotConfDlg']
 raise NotImplementedError('Under Construction!')
 
 import taurus.core
-from PyQt4 import Qt, Qwt5
+from taurus.qt import Qt
+from PyQt4 import Qwt5
 from ui.ui_TaurusPlotConf import Ui_TaurusPlotConfDlg
 import curveprops
 try:
@@ -127,12 +128,10 @@ class TaurusPlotConfDlg(Qt.QWidget):
     
     def onApply(self):
         print "APPLY!!! (todo)"
-        curveConfs = self.model().dumpData()
-#    
-#        for c in curveConfs:
-#            if m == "":
-#                pass
-#            m = ""str(c.ydisplay)
+        curveConfs = self.model.dumpData()
+    
+        for c in curveConfs:
+            print repr(c)
         
         
     def onReload(self):
diff --git a/lib/taurus/qt/qtgui/plot/taurustrend.py b/lib/taurus/qt/qtgui/plot/taurustrend.py
index 4521b56..e160ed3 100644
--- a/lib/taurus/qt/qtgui/plot/taurustrend.py
+++ b/lib/taurus/qt/qtgui/plot/taurustrend.py
@@ -33,7 +33,9 @@ from datetime import datetime
 import time
 import numpy
 import re
-from PyQt4 import Qt, Qwt5
+import gc
+from taurus.qt import Qt
+from PyQt4 import Qwt5
 
 import taurus.core
 from taurus.core.util import CaselessDict, CaselessList, ArrayBuffer
@@ -48,7 +50,7 @@ def getArchivedTrendValues(*args, **kwargs):
     except:
         return []
 
-from taurus.qt.qtcore.tango.macroserver import QDoor
+from taurus.qt.qtcore.tango.sardana.macroserver import QDoor
 
 def stripShape(s):
     '''
@@ -86,21 +88,20 @@ class TaurusTrendsSet(Qt.QObject, TaurusBaseComponent):
     
     """
     def __init__(self, name, parent = None, curves=None):
-        self._parent = parent #@todo: maybe this should be converted to a weakref?
         Qt.QObject.__init__(self, parent)
         self.call__init__(TaurusBaseComponent, self.__class__.__name__)
-        self._history = []
-        self.__xBuffer = None
-        self.__yBuffer = None
-        self.ForcedReadingTimer = None
-        try: self.__maxBufferSize = self._parent.getMaxDataBufferSize()
-        except: self.__maxBufferSize = 1048576 #(1M= 2**20)
+        self._xBuffer = None
+        self._yBuffer = None
+        self.forcedReadingTimer = None
+        try: self._maxBufferSize = self.parent().getMaxDataBufferSize()
+        except: self._maxBufferSize = TaurusTrend.DEFAULT_MAX_BUFFER_SIZE
         if curves is None:
             self._curves = {}
             self._orderedCurveNames = []
         else:
             self._curves = curves
             self._orderedCurveNames = curves.keys()
+        self._titleText = None
         self.setModel(name)
         
     def __getitem__(self, key):
@@ -153,10 +154,10 @@ class TaurusTrendsSet(Qt.QObject, TaurusBaseComponent):
             - <label> the attribute label (default)
             - <model> the model name
             - <attr_name> attribute name
-            - <attr_full_name> full attribute name
+            - <attr_fullname> full attribute name (for backwards compatibility, <attr_full_name> is also accepted)
             - <dev_alias> device alias
             - <dev_name> device name
-            - <dev_full_name> full device name
+            - <dev_fullname> full device name (for backwards compatibility, <dev_full_name> is also accepted)
             - <current_title> The current title
             - <trend_index> The index of the trend in the trendset
             - <[trend_index]> Same as: `"[<trend_index>]" if Ntrends>1 else ""`
@@ -164,9 +165,9 @@ class TaurusTrendsSet(Qt.QObject, TaurusBaseComponent):
         :return: (string_list) a list of title strings that correspond to the
                  list of trends in the set. 
         
-        .. seealso:: :meth:`compileBaseTile`
+        .. seealso:: :meth:`compileBaseTitle`
         '''
-        basetitle = self.compileBaseTile(basetitle)
+        basetitle = self.compileBaseTitle(basetitle)
         ntrends = len(self._curves)
         if '<trend_index>' in basetitle:
             ret = [basetitle.replace('<trend_index>', "%i"%i) for i in xrange(ntrends)]
@@ -174,7 +175,7 @@ class TaurusTrendsSet(Qt.QObject, TaurusBaseComponent):
             ret = [basetitle]*ntrends
         return ret
     
-    def compileBaseTile(self, basetitle):
+    def compileBaseTitle(self, basetitle):
         '''Return a base tile for a trend in whichs substitution of known
         placeholders has been performed.
         
@@ -184,10 +185,10 @@ class TaurusTrendsSet(Qt.QObject, TaurusBaseComponent):
             - <label> the attribute label (default)
             - <model> the model name
             - <attr_name> attribute name
-            - <attr_full_name> full attribute name
+            - <attr_fullname> full attribute name (for backwards compatibility, <attr_full_name> is also accepted)
             - <dev_alias> device alias
             - <dev_name> device name
-            - <dev_full_name> full device name
+            - <dev_fullname> full device name (for backwards compatibility, <dev_full_name> is also accepted)
             - <current_title> The current title
             - <[trend_index]> Same as: `"[<trend_index>]" if Ntrends>1 else ""`
         
@@ -203,12 +204,14 @@ class TaurusTrendsSet(Qt.QObject, TaurusBaseComponent):
         if isinstance(attr, taurus.core.TaurusAttribute):
             basetitle = basetitle.replace('<label>',attr.label or '---')
             basetitle = basetitle.replace('<attr_name>',attr.name or '---')
+            basetitle = basetitle.replace('<attr_fullname>',attr.getFullName() or '---')
             basetitle = basetitle.replace('<attr_full_name>',attr.getFullName() or '---')
             basetitle = basetitle.replace('<dev_alias>',attr.dev_alias or '---')
             basetitle = basetitle.replace('<dev_name>',attr.dev_name or '---')
         
         dev = attr.getParentObj()
         if dev is not None:
+            basetitle = basetitle.replace('<dev_fullname>',dev.getFullName() or '---')
             basetitle = basetitle.replace('<dev_full_name>',dev.getFullName() or '---')
 
         if len(self._curves)==1: basetitle = basetitle.replace('<[trend_index]>','')
@@ -274,43 +277,70 @@ class TaurusTrendsSet(Qt.QObject, TaurusBaseComponent):
         SPECTRUM attribute with dim_x=8. Then the return value will be (X,Y)
         where X.shape=(10,) and Y.shape=(10,8); X.dtype = Y.dtype = <dtype('float64')>
         '''
-        if self.__xBuffer is None:
-            self.__xBuffer = ArrayBuffer(numpy.zeros(128, dtype='d'), maxSize=self.__maxBufferSize )
-        if self.__yBuffer is None:
-            self.__yBuffer = ArrayBuffer(numpy.zeros((128, value.dim_x),dtype='d'), maxSize=self.__maxBufferSize )
+        if numpy.isscalar(value.value):
+            ntrends=1
+        else:
+            ntrends=len(value.value)
+            
+        if self._xBuffer is None:
+            self._xBuffer = ArrayBuffer(numpy.zeros(128, dtype='d'), maxSize=self._maxBufferSize )
+        if self._yBuffer is None:
+            self._yBuffer = ArrayBuffer(numpy.zeros((128, ntrends),dtype='d'), maxSize=self._maxBufferSize )
         
-        self.__yBuffer.append(value.value)
+        self._yBuffer.append(value.value)
         
-        if self._parent.getXIsTime():
+        if self.parent().getXIsTime():
             #add the timestamp to the x buffer
-            self.__xBuffer.append(value.time.totime())
+            self._xBuffer.append(value.time.totime())
             ##Adding archiving values
-            if self._parent.getUseArchiving():
-                if self._parent.getXDynScale() or not self._parent.axisAutoScale(Qwt5.QwtPlot.xBottom): #Do not open a mysql connection for autoscaled plots
-                    startdate = self._parent.axisScaleDiv(Qwt5.QwtPlot.xBottom).lowerBound()
-                    stopdate = self.__xBuffer[0] #Older value already read
+            if self.parent().getUseArchiving():
+                if self.parent().getXDynScale() or not self.parent().axisAutoScale(Qwt5.QwtPlot.xBottom): #Do not open a mysql connection for autoscaled plots
+                    startdate = self.parent().axisScaleDiv(Qwt5.QwtPlot.xBottom).lowerBound()
+                    stopdate = self._xBuffer[0] #Older value already read
                     try:
                         archived = getArchivedTrendValues(self,model,startdate,stopdate)
-                        del(archived[:-self.__xBuffer.remainingSize()]) #limit the archived values according to the maximum size of the buffer
+                        del(archived[:-self._xBuffer.remainingSize()]) #limit the archived values according to the maximum size of the buffer
                         t = numpy.zeros(len(archived), dtype=float)
-                        y = numpy.zeros((len(archived), value.dim_x), dtype=float)#self.__yBuffer.dtype)
+                        y = numpy.zeros((len(archived), ntrends), dtype=float)#self._yBuffer.dtype)
                         for i,v in enumerate(archived):
                             t[i]=v.time.totime()
                             y[i]=v.value
-                        self.__xBuffer.extendLeft(t)
-                        self.__yBuffer.extendLeft(y)
+                        self._xBuffer.extendLeft(t)
+                        self._yBuffer.extendLeft(y)
+                        if archived is not None and len(archived): self.replot()
                     except Exception,e:
                         self.trace('%s: reading from archiving failed: %s'%(datetime.now().isoformat('_'),str(e)))     
         else:
             #add the event number to the x buffer
             try:
-                self.__xBuffer.append(1.+self.__xBuffer[-1]) 
+                self._xBuffer.append(1.+self._xBuffer[-1]) 
             except IndexError: #this will happen when the x buffer is empty
-                self.__xBuffer.append(0) 
+                self._xBuffer.append(0) 
         
-        return self.__xBuffer.contents(), self.__yBuffer.contents()
+        return self._xBuffer.contents(), self._yBuffer.contents()
 
-    
+    def clearTrends(self, replot=True):
+        '''clears all stored data (buffers and copies of the curves data)
+        
+        :param replot: (bool) do a replot after clearing
+        '''
+        #clean previous curves
+        for subname in self.getCurveNames():
+            self.parent().detachRawData(subname)
+        self._curves = {}
+        self._orderedCurveNames = []
+        #clean history Buffers
+        self._xBuffer = None
+        self._yBuffer = None
+        #clean x,ydata
+        self._xValues = None
+        self._yValues = None
+        #replot
+        if replot:
+            self.parent().replot()
+        #Force immediate garbage collection (otherwise the buffered data remains in memory)
+        gc.collect()
+        
     def handleEvent(self, evt_src, evt_type, evt_value):
         ''' processes Change (and Periodic) Taurus Events: updates the data of all
         curves in the set according to the value of the attribute.
@@ -318,7 +348,7 @@ class TaurusTrendsSet(Qt.QObject, TaurusBaseComponent):
         For documentation about the parameters of this method, see
         :meth:`TaurusBaseComponent.handleEvent`'''
         if evt_type == taurus.core.TaurusEventType.Config:
-            self.setTitleText(self._parent.getDefaultCurvesTitle())
+            #self.setTitleText(self._titleText or self.parent().getDefaultCurvesTitle()) #this did not work well (it overwrites custom titles!)
             return
         
         if evt_type == taurus.core.TaurusEventType.Error:
@@ -327,29 +357,26 @@ class TaurusTrendsSet(Qt.QObject, TaurusBaseComponent):
         model = evt_src if evt_src is not None else self.getModelObj()
         if model is None: return
         
-        value = evt_value if isinstance(evt_value, PyTango.DeviceAttribute) else self.getModelValueObj()
+        value = evt_value if isinstance(evt_value, (taurus.core.TaurusAttrValue, PyTango.DeviceAttribute)) else self.getModelValueObj()
         if value is None or value.value is None: return
         
         #Check that the data dimensions are consistent with what was plotted before
-        ntrends = value.dim_x
+        if numpy.isscalar(value.value):
+            ntrends=1
+        else:
+            ntrends=len(value.value)
         if ntrends != len(self._curves):
             #clean previous curves
-            for subname in self.getCurveNames():
-                self._parent.detachRawData(subname)
-            self._curves = {}
-            self._orderedCurveNames = []
-            #clean history Buffers
-            self.__xBuffer = None
-            self.__yBuffer = None
+            self.clearTrends(replot=False)
             #create as many curves as the dim_x of the given model and add them to the TrendSet
             name = self.getModelName()
             rawdata = {'x':numpy.zeros(0), 'y':numpy.zeros(0)}
             for i in xrange(ntrends):
                 subname = "%s[%i]"%(name,i)
-                self._parent.attachRawData(rawdata,id=subname)
-                self.addCurve(subname, self._parent.curves[subname])
-            self.setTitleText(self._parent.getDefaultCurvesTitle())
-            self._parent.autoShowYAxes()
+                self.parent().attachRawData(rawdata,id=subname)
+                self.addCurve(subname, self.parent().curves[subname])
+            self.setTitleText(self._titleText or self.parent().getDefaultCurvesTitle())
+            self.parent().autoShowYAxes()
 
         #get the data from the event
         self._xValues, self._yValues = self._updateHistory(model=model,value=value)
@@ -377,12 +404,12 @@ class TaurusTrendsSet(Qt.QObject, TaurusBaseComponent):
         
         :param maxSize: (int) the maximum limit
         '''
-        self.__xBuffer.setMaxSize(maxSize)
-        self.__yBuffer.setMaxSize(maxSize)
-        self.__maxBufferSize = maxSize
+        self._xBuffer.setMaxSize(maxSize)
+        self._yBuffer.setMaxSize(maxSize)
+        self._maxBufferSize = maxSize
         
     def maxDataBufferSize(self):
-        return self.__maxBufferSize
+        return self._maxBufferSize
 
     def setForcedReadingPeriod(self, msec):
         '''
@@ -393,16 +420,30 @@ class TaurusTrendsSet(Qt.QObject, TaurusBaseComponent):
         (xIsTime==False)since there is no way of distinguishing the real from
         the fake events.
         
-        :param msec: (int ) period in milliseconds. Use msec=-1 to stop the
+        :param msec: (int) period in milliseconds. Use msec<0 to stop the
                      forced periodic reading
         '''
-        if self.ForcedReadingTimer is None:
-            self.ForcedReadingTimer = Qt.QTimer()
-            self.connect(self.ForcedReadingTimer, Qt.SIGNAL('timeout()'),self.forceReading)
-            self.insertEventFilter(self.__ONLY_OWN_EVENTS)
-        self.ForcedReadingTimer.stop()
+        if self.forcedReadingTimer is None:
+            self.forcedReadingTimer = Qt.QTimer()
+            self.connect(self.forcedReadingTimer, Qt.SIGNAL('timeout()'),self.forceReading)
+        
+        #stop the timer and remove the __ONLY_OWN_EVENTS filter
+        self.forcedReadingTimer.stop()
+        filters = self.getEventFilters()
+        if self.__ONLY_OWN_EVENTS in filters: 
+            filters.remove(self.__ONLY_OWN_EVENTS)
+            self.setEventFilters(filters)
+        
+        #if msec is positive, set the filter and start
         if msec >= 0:
-            self.ForcedReadingTimer.start(msec)
+            self.insertEventFilter(self.__ONLY_OWN_EVENTS)
+            self.forcedReadingTimer.start(msec)
+            
+    def getForcedReadingPeriod(self):
+        if self.forcedReadingTimer is None or not self.forcedReadingTimer.isActive():
+            return -1
+        else:
+            return self.forcedReadingTimer.interval()
     
     def __ONLY_OWN_EVENTS(self, s ,t, v):
         '''An event filter that rejects all events except those that originate from this object'''
@@ -456,8 +497,8 @@ class ScanTrendsSet(TaurusTrendsSet):
         #self._usePointNumber = usePointNumber
         self._currentpoint = -1
         self._plotablesFilter = lambda x:True
+        self.__datadesc = None
         self._endMarkers = []
-        self.clearTrends()
         self.setModel(name)
         self._endMacroMarkerEnabled = True
         
@@ -492,29 +533,23 @@ class ScanTrendsSet(TaurusTrendsSet):
         else:
             self.debug("Ignoring packet of type %s"%repr(pcktype))
             
-    def clearTrends(self):
+    def clearTrends(self, replot=True):
         '''
-        Erases existing trends. If the autoClear property is True for this trend
-        set, this method is called automatically every time a data_desc package
-        is received.
-        If autoClear is False, you should manually call this
+        Reimplemented from :meth:`TaurusTrendsSet.clearTrends`. 
+        
+        .. note:: If the autoClear property is True for this trend set, this method is
+                  called automatically every time a data_desc package is received.
         '''
-        #clean previous curves
-        for subname in self.getCurveNames():
-            self._parent.detachRawData(subname)
-        self._curves = {}
-        self._orderedCurveNames = []
+        #clean the datadesc
         self.__datadesc = None
         #clean markers
         for m in self._endMarkers:
             m.detach()
         self._endMarkers = []
-        #clean history Buffers
-        self.__xBuffer = None
-        self.__yBuffer = None
         #reset current point counter
         self._currentpoint = -1
-        self._parent.replot()
+        #call the superclass
+        TaurusTrendsSet.clearTrends(self, replot=replot)
     
     def onPlotablesFilterChanged(self, flt):
         '''
@@ -536,13 +571,13 @@ class ScanTrendsSet(TaurusTrendsSet):
             m = Qwt5.QwtPlotMarker()
             m.setLineStyle(m.VLine)
             m.setXValue(self._currentpoint)
-            m.attach(self._parent)
+            m.attach(self.parent())
             pen = Qt.QPen(Qt.Qt.DashLine)
             pen.setWidth(2)
             m.setLinePen(pen)
             self._endMarkers.append(m)
             self._currentpoint -= 1
-            self._parent.replot()
+            self.parent().replot()
     
     def getDataDesc(self):
         return self.__datadesc     
@@ -556,7 +591,7 @@ class ScanTrendsSet(TaurusTrendsSet):
         if self._autoClear:
             self.clearTrends()
         #decide which data to use for x
-        if self._xDataKey is None:
+        if self._xDataKey is None or self._xDataKey == "<mov>": #@todo use a standard key for <mov> and <idx>
             try:
                 self._autoXDataKey = datadesc['ref_moveables'][0]
             except KeyError, IndexError:
@@ -570,13 +605,13 @@ class ScanTrendsSet(TaurusTrendsSet):
             if e['label'] == self._autoXDataKey:
                 xinfo = e
                 break
-        self._parent.setAxisTitle(self._parent.xBottom, self._autoXDataKey)
+        self.parent().setAxisTitle(self.parent().xBottom, self._autoXDataKey)
         xmin, xmax = xinfo.get('min_value'), xinfo.get('max_value')
-        self._parent.setXDynScale(False)
+        self.parent().setXDynScale(False)
         if xmin is None or xmax is None:
-            self._parent.setAxisAutoScale(self._parent.xBottom) #autoscale if any limit is unknown
+            self.parent().setAxisAutoScale(self.parent().xBottom) #autoscale if any limit is unknown
         else:
-            self._parent.setAxisScale(self._parent.xBottom, xmin, xmax)
+            self.parent().setAxisScale(self.parent().xBottom, xmin, xmax)
         #create trends
         self._createTrends(datadesc["column_desc"])
        
@@ -591,12 +626,13 @@ class ScanTrendsSet(TaurusTrendsSet):
         self.__datadesc = datadesc
         #create as many curves as columns containing scalars
         rawdata = {'x':numpy.zeros(0), 'y':numpy.zeros(0)}
+        self.parent()._curvePens.setCurrentIndex(0)
         for dd in self.__datadesc:
             if len(stripShape(dd['shape']))== 0: #an scalar
-                label = dd["label"]
-                if label not in self._curves and self._plotablesFilter(dd) and label != self._autoXDataKey:
-                    rawdata["title"] = label
-                    curve = self._parent.attachRawData(rawdata)
+                name = dd["name"]
+                if name not in self._curves and self._plotablesFilter(name) and name != self._autoXDataKey:
+                    rawdata["title"] = dd["label"]
+                    curve = self.parent().attachRawData(rawdata)
                     prop = curve.getAppearanceProperties()
                     prop.sColor = prop.lColor
                     prop.sStyle = Qwt5.QwtSymbol.Ellipse
@@ -604,8 +640,8 @@ class ScanTrendsSet(TaurusTrendsSet):
                     prop.lWidth = 1
                     prop.lStyle = Qt.Qt.DotLine
                     curve.setAppearanceProperties(prop)
-                    self.addCurve(label, curve)
-        self._parent.autoShowYAxes()
+                    self.addCurve(name, curve)
+        self.parent().autoShowYAxes()
         self.emit(Qt.SIGNAL("dataChanged(const QString &)"), Qt.QString(self.getModel()))
     
     def _scanLineReceived(self, recordData):
@@ -630,17 +666,17 @@ class ScanTrendsSet(TaurusTrendsSet):
         #If autoclear is True, we use buffers
         if self._autoClear:
             curvenames = self.getCurveNames()
-            if self.__xBuffer is None:
-                self.__xBuffer = ArrayBuffer(numpy.zeros(128, dtype='d'), maxSize=self.maxDataBufferSize() )
-            if self.__yBuffer is None:
-                self.__yBuffer = ArrayBuffer(numpy.zeros((128, len(curvenames)),dtype='d'), maxSize=self.maxDataBufferSize() )
+            if self._xBuffer is None:
+                self._xBuffer = ArrayBuffer(numpy.zeros(128, dtype='d'), maxSize=self.maxDataBufferSize() )
+            if self._yBuffer is None:
+                self._yBuffer = ArrayBuffer(numpy.zeros((128, len(curvenames)),dtype='d'), maxSize=self.maxDataBufferSize() )
             #x values
-            self.__xBuffer.append(self._currentpoint)
+            self._xBuffer.append(self._currentpoint)
             #y values        
             y = numpy.array([recordData.get(n,numpy.NaN) for n in curvenames])
-            self.__yBuffer.append(y)
+            self._yBuffer.append(y)
             
-            self._xValues, self._yValues = self.__xBuffer.contents(), self.__yBuffer.contents()
+            self._xValues, self._yValues = self._xBuffer.contents(), self._yBuffer.contents()
     
             #assign xvalues and yvalues to each of the curves in self._curves
             for i,(n,c) in enumerate(self.getCurves()):
@@ -705,6 +741,9 @@ class TaurusTrend(TaurusPlot):
                  :ref:`TaurusTrend User's Interface Guide <trend_ui>`, 
                  :ref:`The TaurusTrend coding examples <examples_taurustrend>`
     '''
+    
+    DEFAULT_MAX_BUFFER_SIZE = 65536 #(=2**16, i.e., 64K events))
+    
     def __init__(self, parent = None, designMode = False):
         TaurusPlot.__init__(self, parent = parent, designMode = designMode)
         self.trendSets = CaselessDict()
@@ -713,7 +752,7 @@ class TaurusTrend(TaurusPlot):
         self._useArchiving = False
         self._usePollingBuffer = False
         self.setDefaultCurvesTitle('<label><[trend_index]>')
-        self._maxDataBufferSize = 1048576 #(=2**20, i.e., 1M events))
+        self._maxDataBufferSize = self.DEFAULT_MAX_BUFFER_SIZE 
         self.__qdoorname = None
         self._scansXDataKey = None
         self._scansAutoClear = True
@@ -721,16 +760,16 @@ class TaurusTrend(TaurusPlot):
         self._startingTime = time.time()
         self._archivingWarningLocked = False
         self._forcedReadingPeriod = None
-        #Use a rotated labels x timescale by default
+        self._replotTimer = None 
         self.setXIsTime(True)
+        #Use a rotated labels x timescale by default
         rotation = -45
         alignment = self.getDefaultAxisLabelsAlignment(self.xBottom, rotation)
         self.setAxisLabelRotation(self.xBottom, rotation)
         self.setAxisLabelAlignment(self.xBottom, alignment)
         #use dynamic scale by default
         self.setXDynScale(True)
-        self._scrollStep = 0.2
-        
+        self._scrollStep = 0.2        
     
     def __initActions(self):
         '''Create TaurusTrend actions'''
@@ -742,14 +781,33 @@ class TaurusTrend(TaurusPlot):
         self._usePollingBufferAction.setCheckable(True)
         self._usePollingBufferAction.setChecked(self.getUsePollingBuffer())
         self.connect(self._usePollingBufferAction, Qt.SIGNAL("toggled(bool)"), self.setUsePollingBuffer)
+        self._setForcedReadingPeriodAction = Qt.QAction("Set forced reading period...", None)
+        self.connect(self._setForcedReadingPeriodAction, Qt.SIGNAL("triggered()"), self.setForcedReadingPeriod)
+        self._clearBuffersAction = Qt.QAction("Clear Buffers", None)
+        self.connect(self._clearBuffersAction, Qt.SIGNAL("triggered()"), self.clearBuffers)
     
     def setXIsTime(self, enable, axis=Qwt5.QwtPlot.xBottom):
+        '''Reimplemented from :meth:`TaurusPlot.setXIsTime`'''
+        #set a reasonable scale
         if enable:
-            self.setAxisScale(self.xBottom, self._startingTime-60, self._startingTime)#Set a range of 1 min
+            self.setAxisScale(axis, self._startingTime-60, self._startingTime)#Set a range of 1 min
         else:
-            self.setAxisScale(self.xBottom, 0, 10) #Set a range of 10 events   
+            self.setAxisScale(axis, 0, 10) #Set a range of 10 events   
+            self.disconnect(self.axisWidget(axis), Qt.SIGNAL("scaleDivChanged ()"), self.rescheduleReplot) #disconnects the previous axis
+        #enable/disable the archiving action
         self._useArchivingAction.setEnabled(enable)
-        TaurusPlot.setXIsTime(self, enable, axis=axis)
+        #call the parent class method
+        TaurusPlot.setXIsTime(self, enable, axis=axis) #the axis is changed here
+        #set the replot timer if needed
+        if enable:
+            if self._replotTimer is None:
+                self._dirtyPlot = True
+                self._replotTimer = Qt.QTimer()
+                self.connect(self._replotTimer,Qt.SIGNAL('timeout()'),self.doReplot)
+            self.rescheduleReplot(axis)
+            self.connect(self.axisWidget(axis), Qt.SIGNAL("scaleDivChanged ()"), self.rescheduleReplot) #connects the new axis
+        else:
+            self._replotTimer = None
 
     def onScanPlotablesFilterChanged(self, flt, scanname=None):
         if scanname is None:
@@ -809,8 +867,7 @@ class TaurusTrend(TaurusPlot):
         if key is None: key = ''
         self.setAxisTitle(self.xBottom, key)
         self._scansXDataKey = key
-        
-    
+            
     def setScanDoor(self, qdoorname):
         '''
         sets the door to which TaurusTrend will listen for scans.
@@ -828,7 +885,18 @@ class TaurusTrend(TaurusPlot):
         '''
         tset = self.getTrendSet(scanname)
         tset.clearTrends()
-    
+        
+    def clearBuffers(self):
+        '''clears the buffers of existing trend sets (note that this does
+        not remove the models, it simply removes all stored data)'''
+        self.curves_lock.acquire()
+        try:
+            for ts in self.trendSets.itervalues():
+                ts.clearTrends(replot=False)
+        finally:
+            self.curves_lock.release()
+        self.replot()
+          
     def updateCurves(self, names):
         '''Defines the curves that need to be plotted. For a TaurusTrend, the
         models can refer to:
@@ -859,6 +927,10 @@ class TaurusTrend(TaurusPlot):
             # self.trendSets is a CaselessDict
             del_sets = [ name for name in self.trendSets.keys() if name not in names]
             
+            #if all trends were removed, reset the color palette
+            if len(del_sets) == len(self.trendSets):
+                self._curvePens.setCurrentIndex(0)
+            
             for name in names:
                 name = str(name)
                 if "|" in name: raise ValueError('composed ("X|Y") models are not supported by TaurusTrend')
@@ -879,9 +951,10 @@ class TaurusTrend(TaurusPlot):
             for name in del_sets:
                 name = str(name)
                 tset = self.trendSets.pop(name)
+                tset.setModel(None)
                 tset.unregisterDataChanged(self, self.curveDataChanged)
-                for subname in tset.getCurveNames():
-                    self.detachRawData(subname)
+                tset.forcedReadingTimer = None
+                tset.clearTrends(replot=False)
             if del_sets:        
                 self.autoShowYAxes()
                 
@@ -897,12 +970,7 @@ class TaurusTrend(TaurusPlot):
         
         :return: (list<str>) a copy of self.trendSets.keys()
         '''
-        self.curves_lock.acquire()
-        try:
-            ret = copy.deepcopy(self.trendSets.keys())
-        finally:
-            self.curves_lock.release()
-        return ret
+        return self.getModel()
     
     def getTrendSet(self, name):
         '''gets a trend set object by name.
@@ -943,8 +1011,8 @@ class TaurusTrend(TaurusPlot):
                                                 'New Title for Curves',
                                                 'New text to be used for the curves.'\
                                                 'You can use any of the following placeholders:\n'\
-                                                '<label>, <model>, <attr_name>, <attr_full_name>,'\
-                                                '<dev_alias>, <dev_name>, <dev_full_name>,' \
+                                                '<label>, <model>, <attr_name>, <attr_fullname>,'\
+                                                '<dev_alias>, <dev_name>, <dev_fullname>,' \
                                                 '<current_title>, <trend_index>, <[trend_index]>',
                                                 Qt.QLineEdit.Normal,
                                                 self._defaultCurvesTitle)
@@ -961,7 +1029,7 @@ class TaurusTrend(TaurusPlot):
                         curvetitle = titletext
                         for ts in self.trendSets.itervalues():
                             if curveName in ts:
-                                curvetitle = ts.compileBaseTile(curvetitle)
+                                curvetitle = ts.compileBaseTitle(curvetitle)
                                 curvetitle = curvetitle.replace('<trend_index>', "%i"%ts.index(curveName))
                                 break
                         curve = self.curves.get(curveName)
@@ -983,7 +1051,7 @@ class TaurusTrend(TaurusPlot):
         '''
         self.curves_lock.acquire()
         try:
-            if setNames is None: setNames = self.trendSets.iterkeys()
+            if setNames is None: setNames = self.getModel()
             for tname in setNames:
                 if tname in self.trendSets:
                     self.trendSets[tname].setTitleText(basetitle)
@@ -1018,8 +1086,38 @@ class TaurusTrend(TaurusPlot):
         finally:
             self.curves_lock.release()
         self.emit(Qt.SIGNAL("dataChanged(const QString &)"), Qt.QString(name))
-        self.replot()
-    
+        if not self.xIsTime: self.replot()
+        else: self._dirtyPlot = True
+
+    def doReplot(self):
+        '''calls :meth:`replot` only if there is new data to be plotted'''
+        self.debug('Replotting? %s',self._dirtyPlot)
+        if self._dirtyPlot:
+            self.replot()
+            self._dirtyPlot = False
+
+    def rescheduleReplot(self, axis=Qwt5.QwtPlot.xBottom, width=1080):
+        '''calculates the replotting frequency based on the time axis range.
+        It assumes that it is unnecessary to replot with a period less than the
+        time per pixel.
+        
+        :param axis: (Qwt5.QwtPlot.Axis) the axis to which it should associate
+        :param width: (int) the approx canvas width (in pixels). The exact value
+                      could be obtained from the widget, but an order of
+                      magnitude approximation is usually ok (and cheaper). The
+                      default value is 1080 (HD ready!)
+        
+        '''
+        if self.xIsTime:
+            sdiv = self.axisScaleDiv(axis)
+            currmin, currmax = sdiv.lowerBound(), sdiv.upperBound()
+            plot_refresh = int(1000*(currmax-currmin)/width)
+            plot_refresh = min((max((plot_refresh,250)),1800000)) #enforce limits
+            self._replotTimer.start(plot_refresh)
+            self.debug('New replot period is %1.2f seconds',(plot_refresh/1000.))
+        else:
+            self.warning('rescheduleReplot() called but X axis is not in time mode')
+
     def setPaused(self, paused = True):
         '''Pauses itself and other listeners (e.g. the trendsets) depending on it
         
@@ -1029,7 +1127,7 @@ class TaurusTrend(TaurusPlot):
             ts.setPaused(paused)
         self._isPaused = paused
     
-    def createConfig(self, curvenames=None, **kwargs):
+    def createConfig(self, tsnames=None, **kwargs):
         '''Returns a pickable dictionary containing all relevant information
         about the current plot.
         For Tango attributes it stores the attribute name and the curve properties
@@ -1047,15 +1145,19 @@ class TaurusTrend(TaurusPlot):
         
         :return: (dict) configurations (which can be loaded with applyConfig)
         '''
-        configdict = TaurusPlot.createConfig(self, curvenames=curvenames) #use the superclass configdict as a starting point
-        if curvenames is None: curvenames = CaselessList(self.trendSets.keys())
+        configdict = TaurusPlot.createConfig(self, curvenames=None) #use the superclass configdict as a starting point
+        if tsnames is None: tsnames = CaselessList(self.getModel())
+        model = CaselessList([m for m in self.getModel() if m in tsnames])
+        configdict["model"] = model #overwrite the value created by TaurusPlot.createConfig()
         configdict.pop("TangoCurves") #delete the TangoCurves key since it is meaningless in a TaurusTrend
         tsetsdict = CaselessDict()
         rawdatadict = CaselessDict(configdict["RawData"])
+        miscdict = CaselessDict(configdict["Misc"])
+        miscdict["ForcedReadingPeriod"] = self.getForcedReadingPeriod()
         self.curves_lock.acquire()
         try:
             for tsname,ts in self.trendSets.iteritems():
-                if tsname in curvenames:
+                if tsname in tsnames:
                     tsetsdict[tsname] = tsname #store a dict containing just model names (key and value are the same)
                 for cname in CaselessList(ts.getCurveNames()):
                     rawdatadict.pop(cname)#clean the rawdatadict of rawdata curves that come from trendsets (but we keep the properties!)                
@@ -1063,6 +1165,7 @@ class TaurusTrend(TaurusPlot):
             self.curves_lock.release()
         configdict["TrendSets"] = tsetsdict
         configdict["RawData"] = rawdatadict
+        configdict["Misc"] = miscdict
         return configdict
         
     def applyConfig(self, configdict, **kwargs):
@@ -1075,7 +1178,7 @@ class TaurusTrend(TaurusPlot):
         if not self.checkConfigVersion(configdict): return
         #attach the curves
         for rd in configdict["RawData"].values(): self.attachRawData(rd)
-        models = configdict["TrendSets"].values()
+        models = configdict.get("model",configdict["TrendSets"].values()) #for backwards compatibility, if the ordered list of models is not stored, it uses the unsorted dict values
         self.addModels(models)
         for m in models:
             tset = self.trendSets[m]
@@ -1087,6 +1190,9 @@ class TaurusTrend(TaurusPlot):
         self.applyAxesConfig(configdict["Axes"])
         #set other misc configurations
         self.applyMiscConfig(configdict["Misc"])
+        forcedreadingperiod = configdict["Misc"].get("ForcedReadingPeriod")
+        if forcedreadingperiod is not None:
+            self.setForcedReadingPeriod(forcedreadingperiod)
 
     @classmethod
     def getQtDesignerPluginInfo(cls):
@@ -1104,7 +1210,7 @@ class TaurusTrend(TaurusPlot):
         '''propagates a list of taurus filters to the trendsets given by tsetnames.
         See :meth:`TaurusBaseComponent.setEventFilters`
         '''
-        if tsetnames is None: tsetnames=self.trendSets.keys()
+        if tsetnames is None: tsetnames=self.getModel()
         self.curves_lock.acquire()
         try:
             for name in tsetnames:
@@ -1230,14 +1336,16 @@ class TaurusTrend(TaurusPlot):
         return self._maxDataBufferSize
             
     def resetMaxDataBufferSize(self):
-        '''Same as setMaxDataBufferSize(1048576)  (i.e. 1M of events)'''
-        self.setMaxDataBufferSize(1048576)
+        '''Same as setMaxDataBufferSize(self.DEFAULT_MAX_BUFFER_SIZE)'''
+        self.setMaxDataBufferSize(self.DEFAULT_MAX_BUFFER_SIZE)
     
     def _canvasContextMenu(self):
         ''' see :meth:`TaurusPlot._canvasContextMenu` '''
         menu = TaurusPlot._canvasContextMenu(self)
         menu.insertAction(self._setCurvesTitleAction, self._useArchivingAction)
         menu.insertAction(self._setCurvesTitleAction, self._usePollingBufferAction)
+        menu.insertAction(self._setCurvesTitleAction, self._setForcedReadingPeriodAction)
+        menu.insertAction(self._setCurvesTitleAction, self._clearBuffersAction)
         return menu
     
     def _axisContextMenu(self,axis=None):
@@ -1268,19 +1376,35 @@ class TaurusTrend(TaurusPlot):
             self.setScansXDataKey(key, scanname)
             
     
-    def setForcedReadingPeriod(self, msec, tsetnames=None):
+    def setForcedReadingPeriod(self, msec=None, tsetnames=None):
         '''Sets the forced reading period for the trend sets given by tsetnames.
         
-        :param msec: (int) period in milliseconds
+        :param msec: (int or None) period in milliseconds. If None passed, the user will be 
+                     prompted
         :param tsetnames: (seq<str> or None) names of the curves for which the forced 
                           reading is set. If None passed, this will be set for all 
                           present *and future* curves added to this trend
     
         .. seealso: :meth:`TaurusTrendSet.setForcedReadingPeriod`
         '''
+        if msec is None:
+            msec = self._forcedReadingPeriod
+            try: #API changed in QInputDialog since Qt4.4
+                qgetint = Qt.QInputDialog.getInt
+            except AttributeError:
+                qgetint = Qt.QInputDialog.getInteger
+            msec,ok = qgetint(self, 'New forced reading period', 
+                                               'Enter the new period for forced reading (in ms).\n Enter "0" for disabling', 
+                                               max(0,msec), 0, 604800000, 100)
+            if not ok: 
+                return
+            if msec == 0: 
+                msec=-1
+        
+        self._forcedReadingPeriod = msec
+        
         if tsetnames is None: 
-            tsetnames=self.trendSets.keys()
-            self._forcedReadingPeriod = msec
+            tsetnames=self.getModel()
         self.curves_lock.acquire()
         try:
             for name in tsetnames:
@@ -1288,6 +1412,29 @@ class TaurusTrend(TaurusPlot):
         finally:
             self.curves_lock.release()
             
+    def getForcedReadingPeriod(self, tsetname=None):
+        '''returns the forced reading period for the given trend (or the general period 
+        if None is given)
+        
+        :param tsetname: (str or None) name of the trend set for which the forced 
+                          reading should be returned. If None passed, the
+                          default period for all curves is returned
+    
+        .. seealso: :meth:`setForcedReadingPeriod`
+        '''
+        if tsetname is None:
+            return self._forcedReadingPeriod
+        else:
+            self.curves_lock.acquire()
+            try:
+                return self.trendSets[name].getForcedReadingPeriod()
+            finally:
+                self.curves_lock.release()
+                
+    def resetForcedReadingPeriod(self):
+        '''Equivalent to setForcedReadingPeriod(msec=-1, tsetnames=None)'''
+        self.setForcedReadingPeriod(msec=-1, tsetnames=None)
+            
     def setScrollStep(self, scrollStep):
         '''
         Sets the scroll step when in Dynamic X mode. This is used to avoid
@@ -1305,7 +1452,7 @@ class TaurusTrend(TaurusPlot):
         '''
         self._scrollStep = scrollStep
         
-    def getScrollStep(self, scrollStep):
+    def getScrollStep(self):
         '''returns the value of the scroll step
         
         :return: (float)
@@ -1320,6 +1467,7 @@ class TaurusTrend(TaurusPlot):
     usePollingBuffer = Qt.pyqtProperty("bool", getUsePollingBuffer, setUsePollingBuffer, resetUsePollingBuffer)
     maxDataBufferSize = Qt.pyqtProperty("int", getMaxDataBufferSize, setMaxDataBufferSize, resetMaxDataBufferSize)
     scrollstep = Qt.pyqtProperty("double", getScrollStep, setScrollStep, resetScrollStep)
+    forcedReadingPeriod = Qt.pyqtProperty("int", getForcedReadingPeriod, setForcedReadingPeriod, resetForcedReadingPeriod)
     
 
 def main():
@@ -1332,6 +1480,8 @@ def main():
     parser.set_description("a taurus application for plotting trends")
     parser.add_option("-x", "--x-axis-mode", dest="x_axis_mode", default='t', metavar="t|e",
                   help="interprete X values as either timestamps (t) or event numbers (e). Accepted values: t|e")
+    parser.add_option("-b", "--buffer", dest="max_buffer_size", default=TaurusTrend.DEFAULT_MAX_BUFFER_SIZE, 
+                  help="maximum number of values per curve to be plotted (default = %i) (when reached, the oldest values will be discarded)"%TaurusTrend.DEFAULT_MAX_BUFFER_SIZE)
     parser.add_option("--config", "--config-file", dest="config_file", default=None,
                   help="use the given config file for initialization")
     parser.add_option("--export", "--export-file", dest="export_file", default=None,
@@ -1358,6 +1508,8 @@ def main():
     
     #xistime option
     w.setXIsTime(options.x_axis_mode.lower() == 't')
+    #max buffer size option
+    w.setMaxDataBufferSize(int(options.max_buffer_size))
     #configuration file option
     if options.config_file is not None: w.loadConfig(options.config_file)
     #set models 
@@ -1382,7 +1534,7 @@ def main():
         sys.exit(app.exec_()) #exit without showing the widget
     
     # period option
-    if options.forced_read_period >=0:
+    if options.forced_read_period >0:
         w.setForcedReadingPeriod(options.forced_read_period)
     
     #archiving option     
diff --git a/lib/taurus/qt/qtgui/resource/catalog.html b/lib/taurus/qt/qtgui/resource/catalog.html
deleted file mode 100644
index 6bf3296..0000000
--- a/lib/taurus/qt/qtgui/resource/catalog.html
+++ /dev/null
@@ -1,835 +0,0 @@
-<html><head>
-<title>taurus Icon Catalog</title>
-<style>table { border-collapse: collapse; }</style>
-</head>
-<body>
-<h1>Index</h1>
-<ul><li><a href="#_base">Base icons</a></li>
-<li><a href="#tango-icons/mimetypes">tango-icons/mimetypes (:/mimetypes)</a></li>
-<li><a href="#tango-icons/apps">tango-icons/apps (:/apps)</a></li>
-<li><a href="#tango-icons/devices">tango-icons/devices (:/devices)</a></li>
-<li><a href="#tango-icons/actions">tango-icons/actions (:/actions)</a></li>
-<li><a href="#tango-icons/status">tango-icons/status (:/status)</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/emotes">tango-icons/emotes (:/emotes)</a></li>
-<li><a href="#tango-icons/emblems">tango-icons/emblems (:/emblems)</a></li>
-<li><a href="#external/jive">external/jive (:/jive)</a></li>
-<li><a href="#external">external (:)</a></li>
-<li><a href="#extra-icons/institutes">extra-icons/institutes (:/institutes)</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/designer">extra-icons/designer (:/designer)</a></li>
-<li><a href="#extra-icons/actions">extra-icons/actions (:/actions)</a></li>
-<li><a href="#extra-icons">extra-icons (:)</a></li>
-<li><a href="#rrze-icons/devices">rrze-icons/devices (:/devices)</a></li>
-<li><a href="#rrze-icons/actions">rrze-icons/actions (:/actions)</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="#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="#large/snapshot">large/snapshot (:/snapshot)</a></li>
-</ul>
-<h2><a name="_base">Base icons</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/" Directory: ""</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="taurus.png" alt="taurus.png"/></td><td width="400">:/logo.png</td><td width="400">taurus.png</td><td width="200">logo</td></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" 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="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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-address-book.svg" alt="tango-icons/mimetypes/x-office-address-book.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-presentation-template.svg" alt="tango-icons/mimetypes/x-office-presentation-template.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/text-x-script.svg" alt="tango-icons/mimetypes/text-x-script.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/application-certificate.svg" alt="tango-icons/mimetypes/application-certificate.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/image-x-generic.svg" alt="tango-icons/mimetypes/image-x-generic.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/application-x-executable.svg" alt="tango-icons/mimetypes/application-x-executable.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/text-html.svg" alt="tango-icons/mimetypes/text-html.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-drawing-template.svg" alt="tango-icons/mimetypes/x-office-drawing-template.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-spreadsheet.svg" alt="tango-icons/mimetypes/x-office-spreadsheet.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-spreadsheet-template.svg" alt="tango-icons/mimetypes/x-office-spreadsheet-template.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/text-x-generic.svg" alt="tango-icons/mimetypes/text-x-generic.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-drawing.svg" alt="tango-icons/mimetypes/x-office-drawing.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-document-template.svg" alt="tango-icons/mimetypes/x-office-document-template.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/font-x-generic.svg" alt="tango-icons/mimetypes/font-x-generic.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/audio-x-generic.svg" alt="tango-icons/mimetypes/audio-x-generic.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/video-x-generic.svg" alt="tango-icons/mimetypes/video-x-generic.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/text-x-generic-template.svg" alt="tango-icons/mimetypes/text-x-generic-template.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/package-x-generic.svg" alt="tango-icons/mimetypes/package-x-generic.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-calendar.svg" alt="tango-icons/mimetypes/x-office-calendar.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-document.svg" alt="tango-icons/mimetypes/x-office-document.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/mimetypes/x-office-presentation.svg" alt="tango-icons/mimetypes/x-office-presentation.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-screensaver.svg" alt="tango-icons/apps/preferences-desktop-screensaver.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/accessories-calculator.svg" alt="tango-icons/apps/accessories-calculator.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/office-calendar.svg" alt="tango-icons/apps/office-calendar.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/system-file-manager.svg" alt="tango-icons/apps/system-file-manager.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/help-browser.svg" alt="tango-icons/apps/help-browser.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/accessories-text-editor.svg" alt="tango-icons/apps/accessories-text-editor.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-theme.svg" alt="tango-icons/apps/preferences-desktop-theme.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/system-software-update.svg" alt="tango-icons/apps/system-software-update.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/system-installer.svg" alt="tango-icons/apps/system-installer.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-multimedia.svg" alt="tango-icons/apps/preferences-desktop-multimedia.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-system-windows.svg" alt="tango-icons/apps/preferences-system-windows.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/utilities-terminal.svg" alt="tango-icons/apps/utilities-terminal.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/internet-news-reader.svg" alt="tango-icons/apps/internet-news-reader.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-font.svg" alt="tango-icons/apps/preferences-desktop-font.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/accessories-character-map.svg" alt="tango-icons/apps/accessories-character-map.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-accessibility.svg" alt="tango-icons/apps/preferences-desktop-accessibility.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-keyboard-shortcuts.svg" alt="tango-icons/apps/preferences-desktop-keyboard-shortcuts.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/utilities-system-monitor.svg" alt="tango-icons/apps/utilities-system-monitor.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-assistive-technology.svg" alt="tango-icons/apps/preferences-desktop-assistive-technology.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/internet-group-chat.svg" alt="tango-icons/apps/internet-group-chat.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-remote-desktop.svg" alt="tango-icons/apps/preferences-desktop-remote-desktop.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-locale.svg" alt="tango-icons/apps/preferences-desktop-locale.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-system-session.svg" alt="tango-icons/apps/preferences-system-session.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-desktop-wallpaper.svg" alt="tango-icons/apps/preferences-desktop-wallpaper.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/internet-web-browser.svg" alt="tango-icons/apps/internet-web-browser.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/system-users.svg" alt="tango-icons/apps/system-users.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/preferences-system-network-proxy.svg" alt="tango-icons/apps/preferences-system-network-proxy.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/apps/internet-mail.svg" alt="tango-icons/apps/internet-mail.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="tango-icons/devices/camera-video.svg" alt="tango-icons/devices/camera-video.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/input-gaming.svg" alt="tango-icons/devices/input-gaming.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/drive-removable-media.svg" alt="tango-icons/devices/drive-removable-media.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/network-wired.svg" alt="tango-icons/devices/network-wired.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/media-floppy.svg" alt="tango-icons/devices/media-floppy.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/media-flash.svg" alt="tango-icons/devices/media-flash.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/printer.svg" alt="tango-icons/devices/printer.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/battery.svg" alt="tango-icons/devices/battery.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/computer.svg" alt="tango-icons/devices/computer.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/multimedia-player.svg" alt="tango-icons/devices/multimedia-player.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/audio-card.svg" alt="tango-icons/devices/audio-card.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/input-mouse.svg" alt="tango-icons/devices/input-mouse.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/network-wireless.svg" alt="tango-icons/devices/network-wireless.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/video-display.svg" alt="tango-icons/devices/video-display.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/audio-input-microphone.svg" alt="tango-icons/devices/audio-input-microphone.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/input-keyboard.svg" alt="tango-icons/devices/input-keyboard.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/drive-optical.svg" alt="tango-icons/devices/drive-optical.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/camera-photo.svg" alt="tango-icons/devices/camera-photo.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/drive-harddisk.svg" alt="tango-icons/devices/drive-harddisk.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/devices/media-optical.svg" alt="tango-icons/devices/media-optical.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="tango-icons/actions/list-add.svg" alt="tango-icons/actions/list-add.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/mail-reply-all.svg" alt="tango-icons/actions/mail-reply-all.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-seek-forward.svg" alt="tango-icons/actions/media-seek-forward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-up.svg" alt="tango-icons/actions/go-up.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-seek-backward.svg" alt="tango-icons/actions/media-seek-backward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/appointment-new.svg" alt="tango-icons/actions/appointment-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-record.svg" alt="tango-icons/actions/media-record.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-justify-left.svg" alt="tango-icons/actions/format-justify-left.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-select-all.svg" alt="tango-icons/actions/edit-select-all.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-cut.svg" alt="tango-icons/actions/edit-cut.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/mail-send-receive.svg" alt="tango-icons/actions/mail-send-receive.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-previous.svg" alt="tango-icons/actions/go-previous.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-playback-pause.svg" alt="tango-icons/actions/media-playback-pause.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/view-fullscreen.svg" alt="tango-icons/actions/view-fullscreen.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-next.svg" alt="tango-icons/actions/go-next.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-last.svg" alt="tango-icons/actions/go-last.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-home.svg" alt="tango-icons/actions/go-home.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-bottom.svg" alt="tango-icons/actions/go-bottom.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-playback-start.svg" alt="tango-icons/actions/media-playback-start.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-find.svg" alt="tango-icons/actions/edit-find.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-redo.svg" alt="tango-icons/actions/edit-redo.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/document-print.svg" alt="tango-icons/actions/document-print.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/mail-forward.svg" alt="tango-icons/actions/mail-forward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-eject.svg" alt="tango-icons/actions/media-eject.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-text-strikethrough.svg" alt="tango-icons/actions/format-text-strikethrough.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-delete.svg" alt="tango-icons/actions/edit-delete.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-text-italic.svg" alt="tango-icons/actions/format-text-italic.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/system-shutdown.svg" alt="tango-icons/actions/system-shutdown.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/system-lock-screen.svg" alt="tango-icons/actions/system-lock-screen.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/document-properties.svg" alt="tango-icons/actions/document-properties.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/list-remove.svg" alt="tango-icons/actions/list-remove.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/document-open.svg" alt="tango-icons/actions/document-open.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/bookmark-new.svg" alt="tango-icons/actions/bookmark-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/mail-reply-sender.svg" alt="tango-icons/actions/mail-reply-sender.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/document-print-preview.svg" alt="tango-icons/actions/document-print-preview.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/address-book-new.svg" alt="tango-icons/actions/address-book-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-clear.svg" alt="tango-icons/actions/edit-clear.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-top.svg" alt="tango-icons/actions/go-top.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-indent-more.svg" alt="tango-icons/actions/format-indent-more.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-jump.svg" alt="tango-icons/actions/go-jump.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/system-search.svg" alt="tango-icons/actions/system-search.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-find-replace.svg" alt="tango-icons/actions/edit-find-replace.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-justify-center.svg" alt="tango-icons/actions/format-justify-center.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-skip-forward.svg" alt="tango-icons/actions/media-skip-forward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/document-save.svg" alt="tango-icons/actions/document-save.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/contact-new.svg" alt="tango-icons/actions/contact-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-playback-stop.svg" alt="tango-icons/actions/media-playback-stop.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-copy.svg" alt="tango-icons/actions/edit-copy.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-paste.svg" alt="tango-icons/actions/edit-paste.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-justify-fill.svg" alt="tango-icons/actions/format-justify-fill.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/system-log-out.svg" alt="tango-icons/actions/system-log-out.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-justify-right.svg" alt="tango-icons/actions/format-justify-right.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/mail-message-new.svg" alt="tango-icons/actions/mail-message-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/document-save-as.svg" alt="tango-icons/actions/document-save-as.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/window-new.svg" alt="tango-icons/actions/window-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/document-new.svg" alt="tango-icons/actions/document-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-text-underline.svg" alt="tango-icons/actions/format-text-underline.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/edit-undo.svg" alt="tango-icons/actions/edit-undo.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/folder-new.svg" alt="tango-icons/actions/folder-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/tab-new.svg" alt="tango-icons/actions/tab-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/media-skip-backward.svg" alt="tango-icons/actions/media-skip-backward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/mail-mark-not-junk.svg" alt="tango-icons/actions/mail-mark-not-junk.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-down.svg" alt="tango-icons/actions/go-down.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-text-bold.svg" alt="tango-icons/actions/format-text-bold.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/view-refresh.svg" alt="tango-icons/actions/view-refresh.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/format-indent-less.svg" alt="tango-icons/actions/format-indent-less.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/mail-mark-junk.svg" alt="tango-icons/actions/mail-mark-junk.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/go-first.svg" alt="tango-icons/actions/go-first.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/actions/process-stop.svg" alt="tango-icons/actions/process-stop.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="tango-icons/status/folder-visiting.svg" alt="tango-icons/status/folder-visiting.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/network-transmit-receive.svg" alt="tango-icons/status/network-transmit-receive.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/audio-volume-medium.svg" alt="tango-icons/status/audio-volume-medium.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/folder-open.svg" alt="tango-icons/status/folder-open.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-clear.svg" alt="tango-icons/status/weather-clear.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/image-missing.svg" alt="tango-icons/status/image-missing.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/network-transmit.svg" alt="tango-icons/status/network-transmit.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/network-idle.svg" alt="tango-icons/status/network-idle.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-severe-alert.svg" alt="tango-icons/status/weather-severe-alert.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-overcast.svg" alt="tango-icons/status/weather-overcast.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/dialog-information.svg" alt="tango-icons/status/dialog-information.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/network-error.svg" alt="tango-icons/status/network-error.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/software-update-available.svg" alt="tango-icons/status/software-update-available.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-storm.svg" alt="tango-icons/status/weather-storm.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/audio-volume-muted.svg" alt="tango-icons/status/audio-volume-muted.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/printer-error.svg" alt="tango-icons/status/printer-error.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/user-trash-full.svg" alt="tango-icons/status/user-trash-full.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-few-clouds.svg" alt="tango-icons/status/weather-few-clouds.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/dialog-warning.svg" alt="tango-icons/status/dialog-warning.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/mail-attachment.svg" alt="tango-icons/status/mail-attachment.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/network-offline.svg" alt="tango-icons/status/network-offline.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/network-receive.svg" alt="tango-icons/status/network-receive.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/dialog-error.svg" alt="tango-icons/status/dialog-error.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/network-wireless-encrypted.svg" alt="tango-icons/status/network-wireless-encrypted.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/folder-drag-accept.svg" alt="tango-icons/status/folder-drag-accept.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/audio-volume-high.svg" alt="tango-icons/status/audio-volume-high.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/software-update-urgent.svg" alt="tango-icons/status/software-update-urgent.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-showers.svg" alt="tango-icons/status/weather-showers.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/battery-caution.svg" alt="tango-icons/status/battery-caution.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/audio-volume-low.svg" alt="tango-icons/status/audio-volume-low.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/image-loading.svg" alt="tango-icons/status/image-loading.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-snow.svg" alt="tango-icons/status/weather-snow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-showers-scattered.svg" alt="tango-icons/status/weather-showers-scattered.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-clear-night.svg" alt="tango-icons/status/weather-clear-night.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/status/weather-few-clouds-night.svg" alt="tango-icons/status/weather-few-clouds-night.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-development.svg" alt="tango-icons/categories/applications-development.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-system.svg" alt="tango-icons/categories/applications-system.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-office.svg" alt="tango-icons/categories/applications-office.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/preferences-desktop-peripherals.svg" alt="tango-icons/categories/preferences-desktop-peripherals.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-other.svg" alt="tango-icons/categories/applications-other.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-games.svg" alt="tango-icons/categories/applications-games.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/preferences-desktop.svg" alt="tango-icons/categories/preferences-desktop.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-multimedia.svg" alt="tango-icons/categories/applications-multimedia.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-internet.svg" alt="tango-icons/categories/applications-internet.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-accessories.svg" alt="tango-icons/categories/applications-accessories.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/preferences-system.svg" alt="tango-icons/categories/preferences-system.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/categories/applications-graphics.svg" alt="tango-icons/categories/applications-graphics.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="tango-icons/places/folder-remote.svg" alt="tango-icons/places/folder-remote.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/places/network-workgroup.svg" alt="tango-icons/places/network-workgroup.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/places/user-desktop.svg" alt="tango-icons/places/user-desktop.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/places/folder-saved-search.svg" alt="tango-icons/places/folder-saved-search.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/places/user-trash.svg" alt="tango-icons/places/user-trash.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/places/user-home.svg" alt="tango-icons/places/user-home.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/places/network-server.svg" alt="tango-icons/places/network-server.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/places/start-here.svg" alt="tango-icons/places/start-here.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/places/folder.svg" alt="tango-icons/places/folder.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></td><td width="400">:/places/folder.svg</td><td width="400">tango-icons/places/folder.svg</td><td width="200">folder</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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-cool.svg" alt="tango-icons/emotes/face-cool.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-crying.svg" alt="tango-icons/emotes/face-crying.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-angel.svg" alt="tango-icons/emotes/face-angel.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-plain.svg" alt="tango-icons/emotes/face-plain.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-smile.svg" alt="tango-icons/emotes/face-smile.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-surprise.svg" alt="tango-icons/emotes/face-surprise.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-kiss.svg" alt="tango-icons/emotes/face-kiss.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-glasses.svg" alt="tango-icons/emotes/face-glasses.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-monkey.svg" alt="tango-icons/emotes/face-monkey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-wink.svg" alt="tango-icons/emotes/face-wink.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-grin.svg" alt="tango-icons/emotes/face-grin.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-smile-big.svg" alt="tango-icons/emotes/face-smile-big.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-devilish.svg" alt="tango-icons/emotes/face-devilish.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emotes/face-sad.svg" alt="tango-icons/emotes/face-sad.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="tango-icons/emblems/emblem-symbolic-link.svg" alt="tango-icons/emblems/emblem-symbolic-link.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emblems/emblem-important.svg" alt="tango-icons/emblems/emblem-important.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emblems/emblem-photos.svg" alt="tango-icons/emblems/emblem-photos.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emblems/emblem-system.svg" alt="tango-icons/emblems/emblem-system.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emblems/emblem-readonly.svg" alt="tango-icons/emblems/emblem-readonly.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emblems/emblem-favorite.svg" alt="tango-icons/emblems/emblem-favorite.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="tango-icons/emblems/emblem-unreadable.svg" alt="tango-icons/emblems/emblem-unreadable.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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>
-</table>
-<h2><a name="extra-icons/institutes">:/institutes (extra-icons/institutes)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<th colspan="4">Resource: ":/institutes" Directory: "extra-icons/institutes"</th>
-<tr><th>Preview</th><th>Resouce</th><th>File name</th><th>Theme</th></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/institutes/logo_desy.gif" alt="extra-icons/institutes/logo_desy.gif"/></td><td width="400">:/institutes/logo_desy.gif</td><td width="400">extra-icons/institutes/logo_desy.gif</td><td width="200">logo_desy</td></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/institutes/logo_soleil.jpg" alt="extra-icons/institutes/logo_soleil.jpg"/></td><td width="400">:/institutes/logo_soleil.jpg</td><td width="400">extra-icons/institutes/logo_soleil.jpg</td><td width="200">logo_soleil</td></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/institutes/logo_maxlab.gif" alt="extra-icons/institutes/logo_maxlab.gif"/></td><td width="400">:/institutes/logo_maxlab.gif</td><td width="400">extra-icons/institutes/logo_maxlab.gif</td><td width="200">logo_maxlab</td></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/institutes/logo_xfel.png" alt="extra-icons/institutes/logo_xfel.png"/></td><td width="400">:/institutes/logo_xfel.png</td><td width="400">extra-icons/institutes/logo_xfel.png</td><td width="200">logo_xfel</td></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/institutes/logo_alba.png" alt="extra-icons/institutes/logo_alba.png"/></td><td width="400">:/institutes/logo_alba.png</td><td width="400">extra-icons/institutes/logo_alba.png</td><td width="200">logo_alba</td></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/institutes/logo_elettra.gif" alt="extra-icons/institutes/logo_elettra.gif"/></td><td width="400">:/institutes/logo_elettra.gif</td><td width="400">extra-icons/institutes/logo_elettra.gif</td><td width="200">logo_elettra</td></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/institutes/logo_esrf.png" alt="extra-icons/institutes/logo_esrf.png"/></td><td width="400">:/institutes/logo_esrf.png</td><td width="400">extra-icons/institutes/logo_esrf.png</td><td width="200">logo_esrf</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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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>
-</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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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>
-</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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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>
-</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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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>
-</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="80"><td width="80" align="center"><object data="extra-icons/actions/stop.svg" alt="extra-icons/actions/stop.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_playback_pause.svg" alt="extra-icons/actions/media_playback_pause.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_playback_stop.svg" alt="extra-icons/actions/media_playback_stop.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_seek_backward.svg" alt="extra-icons/actions/media_seek_backward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/collapse-all.svg" alt="extra-icons/actions/collapse-all.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_skip_backward.svg" alt="extra-icons/actions/media_skip_backward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_skip_forward.svg" alt="extra-icons/actions/media_skip_forward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_playback_start.svg" alt="extra-icons/actions/media_playback_start.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/go-backward.svg" alt="extra-icons/actions/go-backward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_playback_backward.svg" alt="extra-icons/actions/media_playback_backward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_playback_stop_green.svg" alt="extra-icons/actions/media_playback_stop_green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media-seek-forward-green.svg" alt="extra-icons/actions/media-seek-forward-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/expand-all.svg" alt="extra-icons/actions/expand-all.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/go-forward.svg" alt="extra-icons/actions/go-forward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media-seek-backward-green.svg" alt="extra-icons/actions/media-seek-backward-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="extra-icons/actions/media_seek_forward.svg" alt="extra-icons/actions/media_seek_forward.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/scroll_lock.png" alt="extra-icons/scroll_lock.png"/></td><td width="400">:/scroll_lock.png</td><td width="400">extra-icons/scroll_lock.png</td><td width="200">scroll_lock</td></tr>
-<tr height="80"><td width="80" align="center"><img width="48" height="48" src="extra-icons/pin.png" alt="extra-icons/pin.png"/></td><td width="400">:/pin.png</td><td width="400">extra-icons/pin.png</td><td width="200">pin</td></tr>
-<tr height="80"><td width="80" align="center"><object data="extra-icons/arrow01.svg" alt="extra-icons/arrow01.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></td><td width="400">:/arrow01.svg</td><td width="400">extra-icons/arrow01.svg</td><td width="200">arrow01</td></tr>
-<tr height="80"><td width="80" align="center"><object data="extra-icons/color-fill.svg" alt="extra-icons/color-fill.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></td><td width="400">:/color-fill.svg</td><td width="400">extra-icons/color-fill.svg</td><td width="200">color-fill</td></tr>
-</table>
-<h2><a name="rrze-icons/devices">:/devices (rrze-icons/devices)</a></h2>
-<table border="1" cellspacing="0" cellpadding="2">
-<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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-database-firebird.svg" alt="rrze-icons/devices/server-database-firebird.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-web-yellow.svg" alt="rrze-icons/devices/server-web-yellow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-database.svg" alt="rrze-icons/devices/server-database.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/workstation.svg" alt="rrze-icons/devices/workstation.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-email.svg" alt="rrze-icons/devices/server-email.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-web-secure.svg" alt="rrze-icons/devices/server-web-secure.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/wlan-controller.svg" alt="rrze-icons/devices/wlan-controller.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-web-green.svg" alt="rrze-icons/devices/server-web-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-print.svg" alt="rrze-icons/devices/server-print.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-accounting.svg" alt="rrze-icons/devices/server-accounting.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-access.svg" alt="rrze-icons/devices/server-access.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server.svg" alt="rrze-icons/devices/server.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-directory.svg" alt="rrze-icons/devices/server-directory.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-red.svg" alt="rrze-icons/devices/server-red.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-database-mysql.svg" alt="rrze-icons/devices/server-database-mysql.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-directory-yellow.svg" alt="rrze-icons/devices/server-directory-yellow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-database-yellow.svg" alt="rrze-icons/devices/server-database-yellow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-database-postgres.svg" alt="rrze-icons/devices/server-database-postgres.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-directory-green.svg" alt="rrze-icons/devices/server-directory-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/switch.svg" alt="rrze-icons/devices/switch.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/wlan-access-point.svg" alt="rrze-icons/devices/wlan-access-point.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-user.svg" alt="rrze-icons/devices/server-user.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-green.svg" alt="rrze-icons/devices/server-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-multiple.svg" alt="rrze-icons/devices/server-multiple.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-blades.svg" alt="rrze-icons/devices/server-blades.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-firewall.svg" alt="rrze-icons/devices/server-firewall.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-yellow.svg" alt="rrze-icons/devices/server-yellow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-database-otrs.svg" alt="rrze-icons/devices/server-database-otrs.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-book.svg" alt="rrze-icons/devices/server-book.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-web.svg" alt="rrze-icons/devices/server-web.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/router.svg" alt="rrze-icons/devices/router.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-subversion.svg" alt="rrze-icons/devices/server-subversion.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/database-locked.svg" alt="rrze-icons/devices/database-locked.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-database-green.svg" alt="rrze-icons/devices/server-database-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-vpn.svg" alt="rrze-icons/devices/server-vpn.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/modem.svg" alt="rrze-icons/devices/modem.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-monitoring.svg" alt="rrze-icons/devices/server-monitoring.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-file.svg" alt="rrze-icons/devices/server-file.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-radius.svg" alt="rrze-icons/devices/server-radius.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/devices/server-email-relay.svg" alt="rrze-icons/devices/server-email-relay.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="rrze-icons/actions/run.svg" alt="rrze-icons/actions/run.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/show.svg" alt="rrze-icons/actions/show.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/transfer-left_right.svg" alt="rrze-icons/actions/transfer-left_right.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/left-grey.svg" alt="rrze-icons/actions/left-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/hide.svg" alt="rrze-icons/actions/hide.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/move-waiting-to-participant-green-arrow.svg" alt="rrze-icons/actions/move-waiting-to-participant-green-arrow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/print.svg" alt="rrze-icons/actions/print.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/email-not-available.svg" alt="rrze-icons/actions/email-not-available.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/add-participant.svg" alt="rrze-icons/actions/add-participant.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/send-email-user-other.svg" alt="rrze-icons/actions/send-email-user-other.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/transfer-right_left.svg" alt="rrze-icons/actions/transfer-right_left.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/right.svg" alt="rrze-icons/actions/right.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/refuse.svg" alt="rrze-icons/actions/refuse.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/dynamic-blue-down.svg" alt="rrze-icons/actions/dynamic-blue-down.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-neutral-green.svg" alt="rrze-icons/actions/sort-neutral-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/go-bottom.svg" alt="rrze-icons/actions/go-bottom.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/dynamic-blue-left.svg" alt="rrze-icons/actions/dynamic-blue-left.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/log-out.svg" alt="rrze-icons/actions/log-out.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/switch-course-grey.svg" alt="rrze-icons/actions/switch-course-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/down-grey.svg" alt="rrze-icons/actions/down-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/action-undo.svg" alt="rrze-icons/actions/action-undo.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/dynamic-blue-right.svg" alt="rrze-icons/actions/dynamic-blue-right.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/load-settings.svg" alt="rrze-icons/actions/load-settings.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/right-grey.svg" alt="rrze-icons/actions/right-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/data-transfer.svg" alt="rrze-icons/actions/data-transfer.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/view.svg" alt="rrze-icons/actions/view.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/arrange-boxes.svg" alt="rrze-icons/actions/arrange-boxes.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-down-green.svg" alt="rrze-icons/actions/sort-down-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-up-red.svg" alt="rrze-icons/actions/sort-up-red.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/up-grey.svg" alt="rrze-icons/actions/up-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-down.svg" alt="rrze-icons/actions/sort-down.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/dial-in.svg" alt="rrze-icons/actions/dial-in.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/download.svg" alt="rrze-icons/actions/download.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/up.svg" alt="rrze-icons/actions/up.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/dynamic-blue-up.svg" alt="rrze-icons/actions/dynamic-blue-up.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/move-waiting-down-grey.svg" alt="rrze-icons/actions/move-waiting-down-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-up.svg" alt="rrze-icons/actions/sort-up.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/list-all-participants.svg" alt="rrze-icons/actions/list-all-participants.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/move-waiting-down.svg" alt="rrze-icons/actions/move-waiting-down.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/filter.svg" alt="rrze-icons/actions/filter.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/down.svg" alt="rrze-icons/actions/down.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/transfer-down_up.svg" alt="rrze-icons/actions/transfer-down_up.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/delete-all-participants.svg" alt="rrze-icons/actions/delete-all-participants.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/switch-course-book-grey.svg" alt="rrze-icons/actions/switch-course-book-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/merge-affiliation.svg" alt="rrze-icons/actions/merge-affiliation.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/left.svg" alt="rrze-icons/actions/left.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-up-green.svg" alt="rrze-icons/actions/sort-up-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-neutral.svg" alt="rrze-icons/actions/sort-neutral.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/move-waiting-up-grey.svg" alt="rrze-icons/actions/move-waiting-up-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/go-top.svg" alt="rrze-icons/actions/go-top.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/monitoring.svg" alt="rrze-icons/actions/monitoring.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-down-red.svg" alt="rrze-icons/actions/sort-down-red.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/move-participant-to-waiting-red-grey.svg" alt="rrze-icons/actions/move-participant-to-waiting-red-grey.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/send-email.svg" alt="rrze-icons/actions/send-email.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/send-email-group.svg" alt="rrze-icons/actions/send-email-group.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/switch-course.svg" alt="rrze-icons/actions/switch-course.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/transfer-up_down.svg" alt="rrze-icons/actions/transfer-up_down.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/move-waiting-up.svg" alt="rrze-icons/actions/move-waiting-up.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/upload.svg" alt="rrze-icons/actions/upload.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/move-participant-to-waiting-red.svg" alt="rrze-icons/actions/move-participant-to-waiting-red.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/log-in.svg" alt="rrze-icons/actions/log-in.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/switch-course-book.svg" alt="rrze-icons/actions/switch-course-book.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/back-to-ou.svg" alt="rrze-icons/actions/back-to-ou.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/sort-neutral-red.svg" alt="rrze-icons/actions/sort-neutral-red.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/send-email-user.svg" alt="rrze-icons/actions/send-email-user.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/split-affiliation.svg" alt="rrze-icons/actions/split-affiliation.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/workflow.svg" alt="rrze-icons/actions/workflow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/add.svg" alt="rrze-icons/actions/add.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/manage-settings.svg" alt="rrze-icons/actions/manage-settings.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/actions/approval.svg" alt="rrze-icons/actions/approval.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></td><td width="400">:/actions/approval.svg</td><td width="400">rrze-icons/actions/approval.svg</td><td width="200">approval</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="80"><td width="80" align="center"><object data="rrze-icons/status/awaiting.svg" alt="rrze-icons/status/awaiting.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/temporarily-not-available.svg" alt="rrze-icons/status/temporarily-not-available.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/binational.svg" alt="rrze-icons/status/binational.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/temporarily-not-available-clock.svg" alt="rrze-icons/status/temporarily-not-available-clock.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/hourglass.svg" alt="rrze-icons/status/hourglass.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/synchronized.svg" alt="rrze-icons/status/synchronized.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/not-available.svg" alt="rrze-icons/status/not-available.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/false.svg" alt="rrze-icons/status/false.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/female.svg" alt="rrze-icons/status/female.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/expired.svg" alt="rrze-icons/status/expired.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-yellow-clock.svg" alt="rrze-icons/status/flag-yellow-clock.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/awaiting-plus.svg" alt="rrze-icons/status/awaiting-plus.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/male.svg" alt="rrze-icons/status/male.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-green-mail.svg" alt="rrze-icons/status/flag-green-mail.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/error.svg" alt="rrze-icons/status/error.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/true-orange.svg" alt="rrze-icons/status/true-orange.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/important.svg" alt="rrze-icons/status/important.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-yellow-mail.svg" alt="rrze-icons/status/flag-yellow-mail.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-red-mail.svg" alt="rrze-icons/status/flag-red-mail.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/not-synchronized.svg" alt="rrze-icons/status/not-synchronized.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/unlocked.svg" alt="rrze-icons/status/unlocked.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/maintenance-time.svg" alt="rrze-icons/status/maintenance-time.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/warning.svg" alt="rrze-icons/status/warning.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/available.svg" alt="rrze-icons/status/available.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-green.svg" alt="rrze-icons/status/flag-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-red.svg" alt="rrze-icons/status/flag-red.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/not-known.svg" alt="rrze-icons/status/not-known.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/exclamation-mark.svg" alt="rrze-icons/status/exclamation-mark.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-green-clock.svg" alt="rrze-icons/status/flag-green-clock.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/true.svg" alt="rrze-icons/status/true.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-yellow.svg" alt="rrze-icons/status/flag-yellow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/not-specified.svg" alt="rrze-icons/status/not-specified.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/status/flag-red-clock.svg" alt="rrze-icons/status/flag-red-clock.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-helpdesk-faq.svg" alt="rrze-icons/categories/user-helpdesk-faq.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-phd-group.svg" alt="rrze-icons/categories/user-phd-group.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-other.svg" alt="rrze-icons/categories/user-other.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-student-assistant.svg" alt="rrze-icons/categories/user-student-assistant.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/book-marks.svg" alt="rrze-icons/categories/book-marks.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/mood-level-yellow.svg" alt="rrze-icons/categories/mood-level-yellow.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-disabled.svg" alt="rrze-icons/categories/user-disabled.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-examiner.svg" alt="rrze-icons/categories/user-examiner.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/affiliation-employee.svg" alt="rrze-icons/categories/affiliation-employee.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-expert.svg" alt="rrze-icons/categories/user-expert.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/bookmark.svg" alt="rrze-icons/categories/bookmark.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-digital-person.svg" alt="rrze-icons/categories/user-digital-person.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-unknown.svg" alt="rrze-icons/categories/user-unknown.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-manager.svg" alt="rrze-icons/categories/user-manager.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-helpdesk.svg" alt="rrze-icons/categories/user-helpdesk.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/affiliation-student.svg" alt="rrze-icons/categories/affiliation-student.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/mood-level-green.svg" alt="rrze-icons/categories/mood-level-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-real-person.svg" alt="rrze-icons/categories/user-real-person.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-business.svg" alt="rrze-icons/categories/user-business.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-student.svg" alt="rrze-icons/categories/user-student.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-examiner-group.svg" alt="rrze-icons/categories/user-examiner-group.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-admin.svg" alt="rrze-icons/categories/user-admin.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-enrolee.svg" alt="rrze-icons/categories/user-enrolee.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-other-female.svg" alt="rrze-icons/categories/user-other-female.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-other-business.svg" alt="rrze-icons/categories/user-other-business.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-phd.svg" alt="rrze-icons/categories/user-phd.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/affiliation-guest.svg" alt="rrze-icons/categories/affiliation-guest.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/icon-inspector.svg" alt="rrze-icons/categories/icon-inspector.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-group.svg" alt="rrze-icons/categories/user-group.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-other-new.svg" alt="rrze-icons/categories/user-other-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-admin-gear.svg" alt="rrze-icons/categories/user-admin-gear.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/book.svg" alt="rrze-icons/categories/book.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/alumni-group.svg" alt="rrze-icons/categories/alumni-group.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-employee.svg" alt="rrze-icons/categories/user-employee.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-endcustomer.svg" alt="rrze-icons/categories/user-endcustomer.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-library.svg" alt="rrze-icons/categories/user-library.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/magnifying-glass.svg" alt="rrze-icons/categories/magnifying-glass.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/mood-level-red.svg" alt="rrze-icons/categories/mood-level-red.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-partner.svg" alt="rrze-icons/categories/user-partner.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/categories/user-customer.svg" alt="rrze-icons/categories/user-customer.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><object data="rrze-icons/emblems/account-new.svg" alt="rrze-icons/emblems/account-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/message-new.svg" alt="rrze-icons/emblems/message-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/page-25.svg" alt="rrze-icons/emblems/page-25.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/for-free.svg" alt="rrze-icons/emblems/for-free.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/unix.svg" alt="rrze-icons/emblems/unix.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/subversion.svg" alt="rrze-icons/emblems/subversion.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/database-firebird.svg" alt="rrze-icons/emblems/database-firebird.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/tree-diagramm.svg" alt="rrze-icons/emblems/tree-diagramm.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/report-run.svg" alt="rrze-icons/emblems/report-run.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/doctoral-cap.svg" alt="rrze-icons/emblems/doctoral-cap.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/database-vcs-subversion.svg" alt="rrze-icons/emblems/database-vcs-subversion.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/database-mysql.svg" alt="rrze-icons/emblems/database-mysql.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/database-openldap.svg" alt="rrze-icons/emblems/database-openldap.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/page-all.svg" alt="rrze-icons/emblems/page-all.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/report.svg" alt="rrze-icons/emblems/report.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/network-cloud.svg" alt="rrze-icons/emblems/network-cloud.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/relay.svg" alt="rrze-icons/emblems/relay.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/template.svg" alt="rrze-icons/emblems/template.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/footnote-edit.svg" alt="rrze-icons/emblems/footnote-edit.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/ten-per-page.svg" alt="rrze-icons/emblems/ten-per-page.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/bridge-stone-delete.svg" alt="rrze-icons/emblems/bridge-stone-delete.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/bridge-stone.svg" alt="rrze-icons/emblems/bridge-stone.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/all-per-page.svg" alt="rrze-icons/emblems/all-per-page.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/movie-audio.svg" alt="rrze-icons/emblems/movie-audio.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/globe.svg" alt="rrze-icons/emblems/globe.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/table.svg" alt="rrze-icons/emblems/table.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/report-delete.svg" alt="rrze-icons/emblems/report-delete.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/inspector-hat.svg" alt="rrze-icons/emblems/inspector-hat.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/slide-audio.svg" alt="rrze-icons/emblems/slide-audio.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/directory-object-class.svg" alt="rrze-icons/emblems/directory-object-class.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/affiliation-abstract.svg" alt="rrze-icons/emblems/affiliation-abstract.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/email.svg" alt="rrze-icons/emblems/email.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/directory-schema.svg" alt="rrze-icons/emblems/directory-schema.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/entitlement.svg" alt="rrze-icons/emblems/entitlement.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/floppy-disc-green.svg" alt="rrze-icons/emblems/floppy-disc-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/directory-object.svg" alt="rrze-icons/emblems/directory-object.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/directory-syntax.svg" alt="rrze-icons/emblems/directory-syntax.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/media-film.svg" alt="rrze-icons/emblems/media-film.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/subversion-logo.svg" alt="rrze-icons/emblems/subversion-logo.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/firewall.svg" alt="rrze-icons/emblems/firewall.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/footnote.svg" alt="rrze-icons/emblems/footnote.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/id.svg" alt="rrze-icons/emblems/id.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/organizational-unit.svg" alt="rrze-icons/emblems/organizational-unit.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/structured-program-stay-abroad.svg" alt="rrze-icons/emblems/structured-program-stay-abroad.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/information.svg" alt="rrze-icons/emblems/information.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/lock.svg" alt="rrze-icons/emblems/lock.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/phone.svg" alt="rrze-icons/emblems/phone.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/directory-attribute.svg" alt="rrze-icons/emblems/directory-attribute.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/twenty-five-per-page.svg" alt="rrze-icons/emblems/twenty-five-per-page.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/wifi.svg" alt="rrze-icons/emblems/wifi.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/page-50.svg" alt="rrze-icons/emblems/page-50.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/organisational-unit-tree.svg" alt="rrze-icons/emblems/organisational-unit-tree.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/report-new.svg" alt="rrze-icons/emblems/report-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/rss-feed.svg" alt="rrze-icons/emblems/rss-feed.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/office-excel.svg" alt="rrze-icons/emblems/office-excel.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/geo-id.svg" alt="rrze-icons/emblems/geo-id.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/account-delete.svg" alt="rrze-icons/emblems/account-delete.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/database-postgres.svg" alt="rrze-icons/emblems/database-postgres.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/video-film.svg" alt="rrze-icons/emblems/video-film.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/footnote-new.svg" alt="rrze-icons/emblems/footnote-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/bridge-stone-new.svg" alt="rrze-icons/emblems/bridge-stone-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/directory.svg" alt="rrze-icons/emblems/directory.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/export.svg" alt="rrze-icons/emblems/export.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/task.svg" alt="rrze-icons/emblems/task.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/single-sign-on.svg" alt="rrze-icons/emblems/single-sign-on.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/at.svg" alt="rrze-icons/emblems/at.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/footnote-delete.svg" alt="rrze-icons/emblems/footnote-delete.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/report-edit.svg" alt="rrze-icons/emblems/report-edit.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/database-otrs.svg" alt="rrze-icons/emblems/database-otrs.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/affiliation.svg" alt="rrze-icons/emblems/affiliation.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/office-word.svg" alt="rrze-icons/emblems/office-word.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/tree-diagramm-delete.svg" alt="rrze-icons/emblems/tree-diagramm-delete.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/media-floppy-green.svg" alt="rrze-icons/emblems/media-floppy-green.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/mailbox.svg" alt="rrze-icons/emblems/mailbox.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/affirmation.svg" alt="rrze-icons/emblems/affirmation.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/slide.svg" alt="rrze-icons/emblems/slide.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/wide-area-network-connection.svg" alt="rrze-icons/emblems/wide-area-network-connection.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/tree-diagramm-new.svg" alt="rrze-icons/emblems/tree-diagramm-new.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/audio-itunes-u.svg" alt="rrze-icons/emblems/audio-itunes-u.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/peace-sign.svg" alt="rrze-icons/emblems/peace-sign.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/statistic.svg" alt="rrze-icons/emblems/statistic.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/database.svg" alt="rrze-icons/emblems/database.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/audio-itunes.svg" alt="rrze-icons/emblems/audio-itunes.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/webview.svg" alt="rrze-icons/emblems/webview.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/report-upload.svg" alt="rrze-icons/emblems/report-upload.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/tree-diagramm-move.svg" alt="rrze-icons/emblems/tree-diagramm-move.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/pen.svg" alt="rrze-icons/emblems/pen.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/wide-area-network-link.svg" alt="rrze-icons/emblems/wide-area-network-link.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/note.svg" alt="rrze-icons/emblems/note.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/fifty-per-page.svg" alt="rrze-icons/emblems/fifty-per-page.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/zipper.svg" alt="rrze-icons/emblems/zipper.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/account-edit.svg" alt="rrze-icons/emblems/account-edit.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/money.svg" alt="rrze-icons/emblems/money.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/folder.svg" alt="rrze-icons/emblems/folder.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/index.svg" alt="rrze-icons/emblems/index.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/promotion-data.svg" alt="rrze-icons/emblems/promotion-data.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/audio-visual-slide.svg" alt="rrze-icons/emblems/audio-visual-slide.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/emblems/tomcat.svg" alt="rrze-icons/emblems/tomcat.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></td><td width="400">:/emblems/tomcat.svg</td><td width="400">rrze-icons/emblems/tomcat.svg</td><td width="200">tomcat</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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/video-mov.svg" alt="rrze-icons/mime-types/video-mov.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/text-csv-text.svg" alt="rrze-icons/mime-types/text-csv-text.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/media-movie.svg" alt="rrze-icons/mime-types/media-movie.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/media-audio-itunes.svg" alt="rrze-icons/mime-types/media-audio-itunes.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/office-ms-word.svg" alt="rrze-icons/mime-types/office-ms-word.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/document-pdf.svg" alt="rrze-icons/mime-types/document-pdf.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/media-movie-audio.svg" alt="rrze-icons/mime-types/media-movie-audio.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/media-slide-audio.svg" alt="rrze-icons/mime-types/media-slide-audio.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/media-audio-itunes-u.svg" alt="rrze-icons/mime-types/media-audio-itunes-u.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/media-audio-visual-slide.svg" alt="rrze-icons/mime-types/media-audio-visual-slide.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/video-m4v.svg" alt="rrze-icons/mime-types/video-m4v.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/audio-mp4.svg" alt="rrze-icons/mime-types/audio-mp4.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/media-video-film.svg" alt="rrze-icons/mime-types/media-video-film.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/office-ms-excel.svg" alt="rrze-icons/mime-types/office-ms-excel.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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="80"><td width="80" align="center"><object data="rrze-icons/mime-types/audio-mp3.svg" alt="rrze-icons/mime-types/audio-mp3.svg" type="image/svg+xml" style="width:48px;height:48px;border:0;"/></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>
-</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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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="80"><td width="80" align="center"><img width="48" height="48" 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>
-</table>
-</body></html>
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/resource/external/class.png b/lib/taurus/qt/qtgui/resource/external/class.png
new file mode 100644
index 0000000..ed506e8
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/external/class.png differ
diff --git a/lib/taurus/qt/qtgui/resource/external/function.png b/lib/taurus/qt/qtgui/resource/external/function.png
new file mode 100644
index 0000000..662c40f
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/external/function.png differ
diff --git a/lib/taurus/qt/qtgui/resource/external/python-module.png b/lib/taurus/qt/qtgui/resource/external/python-module.png
new file mode 100644
index 0000000..4cb0294
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/external/python-module.png differ
diff --git a/lib/taurus/qt/qtgui/resource/external/python-package.png b/lib/taurus/qt/qtgui/resource/external/python-package.png
new file mode 100644
index 0000000..12a5abf
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/external/python-package.png differ
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/actions/collapse-selection.png b/lib/taurus/qt/qtgui/resource/extra-icons/actions/collapse-selection.png
new file mode 100644
index 0000000..1f18dad
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/extra-icons/actions/collapse-selection.png differ
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/actions/collapse.png b/lib/taurus/qt/qtgui/resource/extra-icons/actions/collapse.png
new file mode 100644
index 0000000..559855e
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/extra-icons/actions/collapse.png differ
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/actions/expand-selection.png b/lib/taurus/qt/qtgui/resource/extra-icons/actions/expand-selection.png
new file mode 100644
index 0000000..4e7b1cb
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/extra-icons/actions/expand-selection.png differ
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/actions/expand.png b/lib/taurus/qt/qtgui/resource/extra-icons/actions/expand.png
new file mode 100644
index 0000000..9455dbb
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/extra-icons/actions/expand.png differ
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/actions/media_playback_stop.svg b/lib/taurus/qt/qtgui/resource/extra-icons/actions/media_playback_stop.svg
index 79978f7..ae1d0c5 100644
--- a/lib/taurus/qt/qtgui/resource/extra-icons/actions/media_playback_stop.svg
+++ b/lib/taurus/qt/qtgui/resource/extra-icons/actions/media_playback_stop.svg
@@ -1,208 +1,660 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="800px"
-	 height="600px" viewBox="0 0 800 600" enable-background="new 0 0 800 600" xml:space="preserve">
-<g id="Layer_3" display="none">
-	<g display="inline">
-		<path fill="#3A7304" d="M406.167,516.071c-0.007,5.5,3.704,7.462,8.245,4.36l312.474-213.377c4.542-3.102,4.55-8.189,0.018-11.305
-			L414.957,81.283c-4.532-3.116-8.246-1.166-8.253,4.334L406.167,516.071z"/>
-	</g>
-	<g display="inline">
-		<path fill="#A3CB7E" d="M416.121,498.323c-0.008,5.5,3.688,7.439,8.211,4.31l282.635-195.58c4.522-3.13,4.53-8.263,0.018-11.407
-			L424.825,99.081c-4.513-3.144-8.21-1.216-8.218,4.284L416.121,498.323z"/>
-	</g>
-	<g display="inline">
-		<path fill="#A0E0A0" d="M427.074,477.575c-0.006,5.5,3.688,7.439,8.211,4.31l252.727-174.884c4.523-3.13,4.531-8.263,0.019-11.407
-			L435.729,119.829c-4.513-3.144-8.211-1.216-8.217,4.284L427.074,477.575z"/>
-	</g>
-	<g display="inline">
-		<path fill="#A0E0A0" d="M427.074,477.575c-0.006,5.5,3.688,7.439,8.211,4.31l252.727-174.884c4.523-3.13,4.531-8.263,0.019-11.407
-			L435.729,119.829c-4.513-3.144-8.211-1.216-8.217,4.284L427.074,477.575z"/>
-	</g>
-	<g display="inline">
-		
-			<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="630.6963" y1="331.2598" x2="617.9879" y2="143.5671" gradientTransform="matrix(1 0 0 1 -75.4004 0)">
-			<stop  offset="0" style="stop-color:#89BD58"/>
-			<stop  offset="1" style="stop-color:#519C0A"/>
-		</linearGradient>
-		<path fill="url(#SVGID_1_)" d="M427.074,477.575c-0.006,5.5,3.688,7.439,8.211,4.31l252.727-174.884
-			c4.523-3.13,4.531-8.263,0.019-11.407L435.729,119.829c-4.513-3.144-8.211-1.216-8.217,4.284L427.074,477.575z"/>
-	</g>
-	<g display="inline">
-		
-			<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="624.4941" y1="391.0684" x2="634.4072" y2="268.5085" gradientTransform="matrix(1 0 0 1 -75.4004 0)">
-			<stop  offset="0" style="stop-color:#70BE25"/>
-			<stop  offset="1" style="stop-color:#4E9A06"/>
-		</linearGradient>
-		<path fill="url(#SVGID_2_)" d="M427.063,477.575c0,5.5,3.691,7.426,8.201,4.279l247.77-172.823
-			c4.512-3.146,4.103-3.865-0.908-1.597c0,0-107.343,48.588-152.343,9.728s-92.726-37.207-92.726-37.207
-			c-5.497,0.19-9.994,4.846-9.994,10.346V477.575z"/>
-	</g>
-	
-		<radialGradient id="SVGID_3_" cx="457.0117" cy="-155.2236" r="136.9415" gradientTransform="matrix(0 0.6255 -0.6121 0 440.8554 0.9963)" gradientUnits="userSpaceOnUse">
-		<stop  offset="0" style="stop-color:#6FCC14;stop-opacity:0.61"/>
-		<stop  offset="0.3077" style="stop-color:#68C111;stop-opacity:0.4223"/>
-		<stop  offset="0.8482" style="stop-color:#54A309;stop-opacity:0.0926"/>
-		<stop  offset="1" style="stop-color:#4E9A06;stop-opacity:0"/>
-	</radialGradient>
-	<ellipse display="inline" fill="url(#SVGID_3_)" cx="535.869" cy="286.857" rx="103.732" ry="106"/>
-</g>
-<g id="Layer_2" display="none">
-	<g display="inline">
-		<path fill="#3A7304" d="M81.984,503.77c-0.007,5.5,3.704,7.462,8.246,4.36l312.473-213.377c4.541-3.102,4.55-8.188,0.018-11.305
-			L90.774,68.981c-4.532-3.116-8.246-1.166-8.253,4.334L81.984,503.77z"/>
-	</g>
-</g>
-<g id="Layer_4" display="none">
-	<g display="inline">
-		<path fill="#A3CB7E" d="M91.938,486.021c-0.007,5.5,3.688,7.439,8.211,4.31l282.635-195.58c4.523-3.13,4.531-8.263,0.018-11.407
-			L100.643,86.779c-4.513-3.144-8.21-1.216-8.217,4.284L91.938,486.021z"/>
-	</g>
-</g>
-<g id="Layer_5" display="none">
-	<g display="inline">
-		<path fill="#A0E0A0" d="M102.892,465.273c-0.007,5.5,3.688,7.439,8.211,4.31L363.83,294.699c4.523-3.13,4.531-8.263,0.018-11.407
-			L111.546,107.527c-4.513-3.144-8.21-1.216-8.217,4.284L102.892,465.273z"/>
-	</g>
-	<g display="inline">
-		<path fill="#A0E0A0" d="M102.892,465.273c-0.007,5.5,3.688,7.439,8.211,4.31L363.83,294.699c4.523-3.13,4.531-8.263,0.018-11.407
-			L111.546,107.527c-4.513-3.144-8.21-1.216-8.217,4.284L102.892,465.273z"/>
-	</g>
-	<g display="inline">
-		
-			<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="306.5142" y1="318.958" x2="293.8058" y2="131.2654" gradientTransform="matrix(1 0 0 1 -75.4004 0)">
-			<stop  offset="0" style="stop-color:#89BD58"/>
-			<stop  offset="1" style="stop-color:#519C0A"/>
-		</linearGradient>
-		<path fill="url(#SVGID_4_)" d="M102.892,465.273c-0.007,5.5,3.688,7.439,8.211,4.31L363.83,294.699
-			c4.523-3.13,4.531-8.263,0.018-11.407L111.546,107.527c-4.513-3.144-8.21-1.216-8.217,4.284L102.892,465.273z"/>
-	</g>
-</g>
-<g id="Layer_7" display="none">
-	<g display="inline">
-		
-			<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="300.3115" y1="378.7676" x2="310.2245" y2="256.208" gradientTransform="matrix(1 0 0 1 -75.4004 0)">
-			<stop  offset="0" style="stop-color:#70BE25"/>
-			<stop  offset="1" style="stop-color:#4E9A06"/>
-		</linearGradient>
-		<path fill="url(#SVGID_5_)" d="M102.88,465.273c0,5.5,3.691,7.426,8.202,4.279l247.77-172.823
-			c4.511-3.146,4.102-3.865-0.909-1.597c0,0-107.343,48.588-152.343,9.728s-92.726-37.207-92.726-37.207
-			c-5.497,0.19-9.994,4.846-9.994,10.346V465.273z"/>
-	</g>
-</g>
-<g id="radial_grad" display="none">
-	
-		<radialGradient id="SVGID_6_" cx="437.3447" cy="374.4004" r="136.9413" gradientTransform="matrix(0 0.6255 -0.6121 0 440.8554 0.9963)" gradientUnits="userSpaceOnUse">
-		<stop  offset="0" style="stop-color:#6FCC14;stop-opacity:0.61"/>
-		<stop  offset="0.3077" style="stop-color:#68C111;stop-opacity:0.4223"/>
-		<stop  offset="0.8482" style="stop-color:#54A309;stop-opacity:0.0926"/>
-		<stop  offset="1" style="stop-color:#4E9A06;stop-opacity:0"/>
-	</radialGradient>
-	<ellipse display="inline" fill="url(#SVGID_6_)" cx="211.687" cy="274.555" rx="103.732" ry="106"/>
-</g>
-<g id="green_stop" display="none">
-	<g display="inline">
-		<path fill="#3A7304" d="M588.097-56.792c-5.5,0-10,4.5-10,10V355c0,5.5,4.5,10,10,10h393.408c5.5,0,10-4.5,10-10V-46.792
-			c0-5.5-4.5-10-10-10H588.097z"/>
-	</g>
-	<g display="inline">
-		<path fill="#A3CB7E" d="M603.434-46.247c-5.5,0-10,4.5-10,10v380.702c0,5.5,4.5,10,10,10h362.734c5.5,0,10-4.5,10-10V-36.247
-			c0-5.5-4.5-10-10-10H603.434z"/>
-	</g>
-	<g display="inline">
-		<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="784.7002" y1="158.3394" x2="789.1625" y2="-29.9799">
-			<stop  offset="0" style="stop-color:#89BD58"/>
-			<stop  offset="1" style="stop-color:#519C0A"/>
-		</linearGradient>
-		<path fill="url(#SVGID_7_)" d="M615.703-36.23c-5.5,0-10,4.5-10,10v360.667c0,5.5,4.5,10,10,10h338.195c5.5,0,10-4.5,10-10V-26.23
-			c0-5.5-4.5-10-10-10H615.703z"/>
-	</g>
-	<g display="inline">
-		<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="784.3223" y1="192.417" x2="786.8515" y2="346.2719">
-			<stop  offset="0" style="stop-color:#70BE25"/>
-			<stop  offset="1" style="stop-color:#4E9A06"/>
-		</linearGradient>
-		<path fill="url(#SVGID_8_)" d="M615.703,344.438c-5.5,0-10-4.5-10-10V183.805c0-5.5,4.195-8.372,9.323-6.383
-			c0,0,89.806,34.838,196.014,7.37s146.63-78.242,146.63-78.242c3.426-4.303,6.229-3.323,6.229,2.177v225.711c0,5.5-4.5,10-10,10
-			H615.703z"/>
-	</g>
-	
-		<radialGradient id="SVGID_9_" cx="184.5791" cy="-574.8589" r="167.1856" gradientTransform="matrix(0 0.6255 -0.6121 0 440.8554 0.9963)" gradientUnits="userSpaceOnUse">
-		<stop  offset="0" style="stop-color:#6FCC14;stop-opacity:0.61"/>
-		<stop  offset="0.3077" style="stop-color:#68C111;stop-opacity:0.4223"/>
-		<stop  offset="0.8482" style="stop-color:#54A309;stop-opacity:0.0926"/>
-		<stop  offset="1" style="stop-color:#4E9A06;stop-opacity:0"/>
-	</radialGradient>
-	<path display="inline" opacity="0.45" fill="url(#SVGID_9_)" d="M792.729-12.96c69.943,0,126.642,57.938,126.642,129.412
-		c0,71.473-56.698,129.41-126.642,129.41c-69.945,0-126.645-57.938-126.645-129.412C666.084,44.978,722.783-12.96,792.729-12.96z"/>
-</g>
-<g id="red_stop">
-	<g>
-		<path fill="#B30909" d="M226.785,69.208c-5.5,0-10,4.5-10,10v401.09c0,5.5,4.5,10,10,10h392.72c5.5,0,10-4.5,10-10V79.208
-			c0-5.5-4.5-10-10-10H226.785z"/>
-	</g>
-	<g>
-		<path fill="#EF0C0C" d="M242.097,79.736c-5.5,0-10,4.5-10,10V469.77c0,5.5,4.5,10,10,10h362.097c5.5,0,10-4.5,10-10V89.736
-			c0-5.5-4.5-10-10-10H242.097z"/>
-	</g>
-	<g>
-		<linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="420.79" y1="120.0361" x2="424.5916" y2="377.907">
-			<stop  offset="0.1083" style="stop-color:#C73600"/>
-			<stop  offset="1" style="stop-color:#FF6B5C"/>
-		</linearGradient>
-		<path fill="url(#SVGID_10_)" d="M254.345,89.736c-5.5,0-10,4.5-10,10v360.033c0,5.5,4.5,10,10,10h337.599c5.5,0,10-4.5,10-10
-			V99.736c0-5.5-4.5-10-10-10H254.345z"/>
-	</g>
-	<g>
-		<linearGradient id="SVGID_11_" gradientUnits="userSpaceOnUse" x1="423.5361" y1="415.3027" x2="422.669" y2="264.3893">
-			<stop  offset="0" style="stop-color:#C73600"/>
-			<stop  offset="1" style="stop-color:#FF6B5C"/>
-		</linearGradient>
-		<path fill="url(#SVGID_11_)" d="M254.345,469.77c-5.5,0-10-4.5-10-10V309.42c0-5.5,4.195-8.372,9.323-6.383
-			c0,0,89.641,34.775,195.671,7.353c106.031-27.422,146.376-78.099,146.376-78.099c3.426-4.303,6.229-3.324,6.229,2.176V459.77
-			c0,5.5-4.5,10-10,10H254.345z"/>
-	</g>
-	
-		<radialGradient id="SVGID_12_" cx="330.1245" cy="-69.9717" r="169.4683" gradientTransform="matrix(0 0.6255 -0.6121 0 440.8554 0.9963)" gradientUnits="userSpaceOnUse">
-		<stop  offset="0" style="stop-color:#FFFFFF"/>
-		<stop  offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
-	</radialGradient>
-	<ellipse opacity="0.14" fill="url(#SVGID_12_)" cx="483.687" cy="207.489" rx="103.732" ry="106"/>
-</g>
-<g id="Layer_8" display="none">
-	<g display="inline">
-		<path fill="#3A7304" d="M116.972,533.356c5.5,0,10-4.5,10-10V78.332c0-5.5-4.5-10-10-10h-69.6c-5.5,0-10,4.5-10,10v445.024
-			c0,5.5,4.5,10,10,10H116.972z"/>
-	</g>
-</g>
-<g id="Layer_9" display="none">
-	<g display="inline">
-		<path fill="#A3CB7E" d="M108.012,521.729c5.5,0,10-4.5,10-10V89.958c0-5.5-4.5-10-10-10h-51.68c-5.5,0-10,4.5-10,10V511.73
-			c0,5.5,4.5,10,10,10L108.012,521.729z"/>
-	</g>
-</g>
-<g id="Layer_10" display="none">
-	<g display="inline">
-		
-			<linearGradient id="SVGID_13_" gradientUnits="userSpaceOnUse" x1="369.5581" y1="-49.4897" x2="248.5782" y2="-48.8468" gradientTransform="matrix(0 1 1 0 131.8672 -107.5625)">
-			<stop  offset="0" style="stop-color:#89BD58"/>
-			<stop  offset="1" style="stop-color:#519C0A"/>
-		</linearGradient>
-		<path fill="url(#SVGID_13_)" d="M100.843,510.687c5.5,0,10-4.5,10-10V101.002c0-5.5-4.5-10-10-10l-37.344-0.001
-			c-5.5,0-10,4.5-10,10v399.685c0,5.5,4.5,10,10,10H100.843z"/>
-	</g>
-</g>
-<g id="Layer_11" display="none">
-	<g display="inline">
-		
-			<linearGradient id="SVGID_14_" gradientUnits="userSpaceOnUse" x1="395.3843" y1="-49.6973" x2="618.248" y2="-49.6973" gradientTransform="matrix(0 1 1 0 131.8691 -107.5615)">
-			<stop  offset="0" style="stop-color:#70BE25"/>
-			<stop  offset="1" style="stop-color:#4E9A06"/>
-		</linearGradient>
-		<path fill="url(#SVGID_14_)" d="M100.844,510.687c5.5,0,10-4.5,10-10V310c0-5.5-0.424-5.521-0.943-0.045
-			c0,0-1.24,13.095-27.729-9.955c-22.656-19.716-25.753-9.564-25.753-9.564C54.813,295.696,53.5,304.5,53.5,310v190.687
-			c0,5.5,4.5,10,10,10H100.844z"/>
-	</g>
-</g>
-</svg>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 43363)  -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   x="0px"
+   y="0px"
+   width="48"
+   height="48"
+   viewBox="0 0 48 48"
+   enable-background="new 0 0 800 600"
+   xml:space="preserve"
+   id="svg2"
+   inkscape:version="0.48.1 r9760"
+   sodipodi:docname="media_playback_stop.svg"><metadata
+   id="metadata206"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
+   id="defs204" /><sodipodi:namedview
+   pagecolor="#ffffff"
+   bordercolor="#666666"
+   borderopacity="1"
+   objecttolerance="10"
+   gridtolerance="10"
+   guidetolerance="10"
+   inkscape:pageopacity="0"
+   inkscape:pageshadow="2"
+   inkscape:window-width="1007"
+   inkscape:window-height="857"
+   id="namedview202"
+   showgrid="false"
+   fit-margin-top="0"
+   fit-margin-left="0"
+   fit-margin-right="0"
+   fit-margin-bottom="0"
+   inkscape:zoom="6.0151217"
+   inkscape:cx="5.6167536"
+   inkscape:cy="28.263968"
+   inkscape:window-x="0"
+   inkscape:window-y="25"
+   inkscape:window-maximized="0"
+   inkscape:current-layer="svg2" />
+<g
+   id="Layer_3"
+   display="none"
+   style="display:none"
+   transform="translate(-399.14501,-255.753)">
+	<g
+   display="inline"
+   id="g5"
+   style="display:inline">
+		<path
+   d="m 406.167,516.071 c -0.007,5.5 3.704,7.462 8.245,4.36 L 726.886,307.054 c 4.542,-3.102 4.55,-8.189 0.018,-11.305 L 414.957,81.283 c -4.532,-3.116 -8.246,-1.166 -8.253,4.334 l -0.537,430.454 z"
+   id="path7"
+   inkscape:connector-curvature="0"
+   style="fill:#3a7304" />
+	</g>
+	<g
+   display="inline"
+   id="g9"
+   style="display:inline">
+		<path
+   d="m 416.121,498.323 c -0.008,5.5 3.688,7.439 8.211,4.31 l 282.635,-195.58 c 4.522,-3.13 4.53,-8.263 0.018,-11.407 L 424.825,99.081 c -4.513,-3.144 -8.21,-1.216 -8.218,4.284 l -0.486,394.958 z"
+   id="path11"
+   inkscape:connector-curvature="0"
+   style="fill:#a3cb7e" />
+	</g>
+	<g
+   display="inline"
+   id="g13"
+   style="display:inline">
+		<path
+   d="m 427.074,477.575 c -0.006,5.5 3.688,7.439 8.211,4.31 L 688.012,307.001 c 4.523,-3.13 4.531,-8.263 0.019,-11.407 L 435.729,119.829 c -4.513,-3.144 -8.211,-1.216 -8.217,4.284 l -0.438,353.462 z"
+   id="path15"
+   inkscape:connector-curvature="0"
+   style="fill:#a0e0a0" />
+	</g>
+	<g
+   display="inline"
+   id="g17"
+   style="display:inline">
+		<path
+   d="m 427.074,477.575 c -0.006,5.5 3.688,7.439 8.211,4.31 L 688.012,307.001 c 4.523,-3.13 4.531,-8.263 0.019,-11.407 L 435.729,119.829 c -4.513,-3.144 -8.211,-1.216 -8.217,4.284 l -0.438,353.462 z"
+   id="path19"
+   inkscape:connector-curvature="0"
+   style="fill:#a0e0a0" />
+	</g>
+	<g
+   display="inline"
+   id="g21"
+   style="display:inline">
+		
+			<linearGradient
+   id="SVGID_1_"
+   gradientUnits="userSpaceOnUse"
+   x1="630.69629"
+   y1="331.2598"
+   x2="617.98792"
+   y2="143.56709"
+   gradientTransform="translate(-75.4004,0)">
+			<stop
+   offset="0"
+   style="stop-color:#89BD58"
+   id="stop24" />
+			<stop
+   offset="1"
+   style="stop-color:#519C0A"
+   id="stop26" />
+		</linearGradient>
+		<path
+   d="m 427.074,477.575 c -0.006,5.5 3.688,7.439 8.211,4.31 L 688.012,307.001 c 4.523,-3.13 4.531,-8.263 0.019,-11.407 L 435.729,119.829 c -4.513,-3.144 -8.211,-1.216 -8.217,4.284 l -0.438,353.462 z"
+   id="path28"
+   inkscape:connector-curvature="0"
+   style="fill:url(#SVGID_1_)" />
+	</g>
+	<g
+   display="inline"
+   id="g30"
+   style="display:inline">
+		
+			<linearGradient
+   id="SVGID_2_"
+   gradientUnits="userSpaceOnUse"
+   x1="624.49408"
+   y1="391.06839"
+   x2="634.40723"
+   y2="268.50851"
+   gradientTransform="translate(-75.4004,0)">
+			<stop
+   offset="0"
+   style="stop-color:#70BE25"
+   id="stop33" />
+			<stop
+   offset="1"
+   style="stop-color:#4E9A06"
+   id="stop35" />
+		</linearGradient>
+		<path
+   d="m 427.063,477.575 c 0,5.5 3.691,7.426 8.201,4.279 l 247.77,-172.823 c 4.512,-3.146 4.103,-3.865 -0.908,-1.597 0,0 -107.343,48.588 -152.343,9.728 -45,-38.86 -92.726,-37.207 -92.726,-37.207 -5.497,0.19 -9.994,4.846 -9.994,10.346 v 187.274 z"
+   id="path37"
+   inkscape:connector-curvature="0"
+   style="fill:url(#SVGID_2_)" />
+	</g>
+	
+		<radialGradient
+   id="SVGID_3_"
+   cx="457.01169"
+   cy="-155.2236"
+   r="136.9415"
+   gradientTransform="matrix(0,0.6255,-0.6121,0,440.8554,0.9963)"
+   gradientUnits="userSpaceOnUse">
+		<stop
+   offset="0"
+   style="stop-color:#6FCC14;stop-opacity:0.61"
+   id="stop40" />
+		<stop
+   offset="0.3077"
+   style="stop-color:#68C111;stop-opacity:0.4223"
+   id="stop42" />
+		<stop
+   offset="0.8482"
+   style="stop-color:#54A309;stop-opacity:0.0926"
+   id="stop44" />
+		<stop
+   offset="1"
+   style="stop-color:#4E9A06;stop-opacity:0"
+   id="stop46" />
+	</radialGradient>
+	<ellipse
+   display="inline"
+   cx="535.86902"
+   cy="286.85699"
+   rx="103.732"
+   ry="106"
+   id="ellipse48"
+   sodipodi:cx="535.86902"
+   sodipodi:cy="286.85699"
+   sodipodi:rx="103.732"
+   sodipodi:ry="106"
+   style="fill:url(#SVGID_3_);display:inline"
+   d="m 639.60102,286.85699 c 0,58.54219 -46.4424,106 -103.732,106 -57.2896,0 -103.732,-47.45781 -103.732,-106 0,-58.54218 46.4424,-106 103.732,-106 57.2896,0 103.732,47.45782 103.732,106 z" />
+</g>
+<g
+   id="Layer_2"
+   display="none"
+   style="display:none"
+   transform="translate(-399.14501,-255.753)">
+	<g
+   display="inline"
+   id="g51"
+   style="display:inline">
+		<path
+   d="m 81.984,503.77 c -0.007,5.5 3.704,7.462 8.246,4.36 L 402.703,294.753 c 4.541,-3.102 4.55,-8.188 0.018,-11.305 L 90.774,68.981 c -4.532,-3.116 -8.246,-1.166 -8.253,4.334 L 81.984,503.77 z"
+   id="path53"
+   inkscape:connector-curvature="0"
+   style="fill:#3a7304" />
+	</g>
+</g>
+<g
+   id="Layer_4"
+   display="none"
+   style="display:none"
+   transform="translate(-399.14501,-255.753)">
+	<g
+   display="inline"
+   id="g56"
+   style="display:inline">
+		<path
+   d="m 91.938,486.021 c -0.007,5.5 3.688,7.439 8.211,4.31 l 282.635,-195.58 c 4.523,-3.13 4.531,-8.263 0.018,-11.407 L 100.643,86.779 c -4.513,-3.144 -8.21,-1.216 -8.217,4.284 l -0.488,394.958 z"
+   id="path58"
+   inkscape:connector-curvature="0"
+   style="fill:#a3cb7e" />
+	</g>
+</g>
+<g
+   id="Layer_5"
+   display="none"
+   style="display:none"
+   transform="translate(-399.14501,-255.753)">
+	<g
+   display="inline"
+   id="g61"
+   style="display:inline">
+		<path
+   d="m 102.892,465.273 c -0.007,5.5 3.688,7.439 8.211,4.31 L 363.83,294.699 c 4.523,-3.13 4.531,-8.263 0.018,-11.407 L 111.546,107.527 c -4.513,-3.144 -8.21,-1.216 -8.217,4.284 l -0.437,353.462 z"
+   id="path63"
+   inkscape:connector-curvature="0"
+   style="fill:#a0e0a0" />
+	</g>
+	<g
+   display="inline"
+   id="g65"
+   style="display:inline">
+		<path
+   d="m 102.892,465.273 c -0.007,5.5 3.688,7.439 8.211,4.31 L 363.83,294.699 c 4.523,-3.13 4.531,-8.263 0.018,-11.407 L 111.546,107.527 c -4.513,-3.144 -8.21,-1.216 -8.217,4.284 l -0.437,353.462 z"
+   id="path67"
+   inkscape:connector-curvature="0"
+   style="fill:#a0e0a0" />
+	</g>
+	<g
+   display="inline"
+   id="g69"
+   style="display:inline">
+		
+			<linearGradient
+   id="SVGID_4_"
+   gradientUnits="userSpaceOnUse"
+   x1="306.51419"
+   y1="318.95801"
+   x2="293.80579"
+   y2="131.2654"
+   gradientTransform="translate(-75.4004,0)">
+			<stop
+   offset="0"
+   style="stop-color:#89BD58"
+   id="stop72" />
+			<stop
+   offset="1"
+   style="stop-color:#519C0A"
+   id="stop74" />
+		</linearGradient>
+		<path
+   d="m 102.892,465.273 c -0.007,5.5 3.688,7.439 8.211,4.31 L 363.83,294.699 c 4.523,-3.13 4.531,-8.263 0.018,-11.407 L 111.546,107.527 c -4.513,-3.144 -8.21,-1.216 -8.217,4.284 l -0.437,353.462 z"
+   id="path76"
+   inkscape:connector-curvature="0"
+   style="fill:url(#SVGID_4_)" />
+	</g>
+</g>
+<g
+   id="Layer_7"
+   display="none"
+   style="display:none"
+   transform="translate(-399.14501,-255.753)">
+	<g
+   display="inline"
+   id="g79"
+   style="display:inline">
+		
+			<linearGradient
+   id="SVGID_5_"
+   gradientUnits="userSpaceOnUse"
+   x1="300.31149"
+   y1="378.76761"
+   x2="310.22449"
+   y2="256.20801"
+   gradientTransform="translate(-75.4004,0)">
+			<stop
+   offset="0"
+   style="stop-color:#70BE25"
+   id="stop82" />
+			<stop
+   offset="1"
+   style="stop-color:#4E9A06"
+   id="stop84" />
+		</linearGradient>
+		<path
+   d="m 102.88,465.273 c 0,5.5 3.691,7.426 8.202,4.279 l 247.77,-172.823 c 4.511,-3.146 4.102,-3.865 -0.909,-1.597 0,0 -107.343,48.588 -152.343,9.728 -45,-38.86 -92.726,-37.207 -92.726,-37.207 -5.497,0.19 -9.994,4.846 -9.994,10.346 v 187.274 z"
+   id="path86"
+   inkscape:connector-curvature="0"
+   style="fill:url(#SVGID_5_)" />
+	</g>
+</g>
+<g
+   id="radial_grad"
+   display="none"
+   style="display:none"
+   transform="translate(-399.14501,-255.753)">
+	
+		<radialGradient
+   id="SVGID_6_"
+   cx="437.3447"
+   cy="374.40039"
+   r="136.9413"
+   gradientTransform="matrix(0,0.6255,-0.6121,0,440.8554,0.9963)"
+   gradientUnits="userSpaceOnUse">
+		<stop
+   offset="0"
+   style="stop-color:#6FCC14;stop-opacity:0.61"
+   id="stop90" />
+		<stop
+   offset="0.3077"
+   style="stop-color:#68C111;stop-opacity:0.4223"
+   id="stop92" />
+		<stop
+   offset="0.8482"
+   style="stop-color:#54A309;stop-opacity:0.0926"
+   id="stop94" />
+		<stop
+   offset="1"
+   style="stop-color:#4E9A06;stop-opacity:0"
+   id="stop96" />
+	</radialGradient>
+	<ellipse
+   display="inline"
+   cx="211.687"
+   cy="274.55499"
+   rx="103.732"
+   ry="106"
+   id="ellipse98"
+   sodipodi:cx="211.687"
+   sodipodi:cy="274.55499"
+   sodipodi:rx="103.732"
+   sodipodi:ry="106"
+   style="fill:url(#SVGID_6_);display:inline"
+   d="m 315.419,274.55499 c 0,58.54219 -46.4424,106 -103.732,106 -57.28961,0 -103.73201,-47.45781 -103.73201,-106 0,-58.54218 46.4424,-106 103.73201,-106 57.2896,0 103.732,47.45782 103.732,106 z" />
+</g>
+<g
+   id="green_stop"
+   display="none"
+   style="display:none"
+   transform="translate(-399.14501,-255.753)">
+	<g
+   display="inline"
+   id="g101"
+   style="display:inline">
+		<path
+   d="m 588.097,-56.792 c -5.5,0 -10,4.5 -10,10 V 355 c 0,5.5 4.5,10 10,10 h 393.408 c 5.5,0 10,-4.5 10,-10 V -46.792 c 0,-5.5 -4.5,-10 -10,-10 H 588.097 z"
+   id="path103"
+   inkscape:connector-curvature="0"
+   style="fill:#3a7304" />
+	</g>
+	<g
+   display="inline"
+   id="g105"
+   style="display:inline">
+		<path
+   d="m 603.434,-46.247 c -5.5,0 -10,4.5 -10,10 v 380.702 c 0,5.5 4.5,10 10,10 h 362.734 c 5.5,0 10,-4.5 10,-10 V -36.247 c 0,-5.5 -4.5,-10 -10,-10 H 603.434 z"
+   id="path107"
+   inkscape:connector-curvature="0"
+   style="fill:#a3cb7e" />
+	</g>
+	<g
+   display="inline"
+   id="g109"
+   style="display:inline">
+		<linearGradient
+   id="SVGID_7_"
+   gradientUnits="userSpaceOnUse"
+   x1="784.7002"
+   y1="158.3394"
+   x2="789.16248"
+   y2="-29.9799">
+			<stop
+   offset="0"
+   style="stop-color:#89BD58"
+   id="stop112" />
+			<stop
+   offset="1"
+   style="stop-color:#519C0A"
+   id="stop114" />
+		</linearGradient>
+		<path
+   d="m 615.703,-36.23 c -5.5,0 -10,4.5 -10,10 v 360.667 c 0,5.5 4.5,10 10,10 h 338.195 c 5.5,0 10,-4.5 10,-10 V -26.23 c 0,-5.5 -4.5,-10 -10,-10 H 615.703 z"
+   id="path116"
+   inkscape:connector-curvature="0"
+   style="fill:url(#SVGID_7_)" />
+	</g>
+	<g
+   display="inline"
+   id="g118"
+   style="display:inline">
+		<linearGradient
+   id="SVGID_8_"
+   gradientUnits="userSpaceOnUse"
+   x1="784.32233"
+   y1="192.41701"
+   x2="786.8515"
+   y2="346.27191">
+			<stop
+   offset="0"
+   style="stop-color:#70BE25"
+   id="stop121" />
+			<stop
+   offset="1"
+   style="stop-color:#4E9A06"
+   id="stop123" />
+		</linearGradient>
+		<path
+   d="m 615.703,344.438 c -5.5,0 -10,-4.5 -10,-10 V 183.805 c 0,-5.5 4.195,-8.372 9.323,-6.383 0,0 89.806,34.838 196.014,7.37 106.208,-27.468 146.63,-78.242 146.63,-78.242 3.426,-4.303 6.229,-3.323 6.229,2.177 v 225.711 c 0,5.5 -4.5,10 -10,10 H 615.703 z"
+   id="path125"
+   inkscape:connector-curvature="0"
+   style="fill:url(#SVGID_8_)" />
+	</g>
+	
+		<radialGradient
+   id="SVGID_9_"
+   cx="184.5791"
+   cy="-574.85889"
+   r="167.18559"
+   gradientTransform="matrix(0,0.6255,-0.6121,0,440.8554,0.9963)"
+   gradientUnits="userSpaceOnUse">
+		<stop
+   offset="0"
+   style="stop-color:#6FCC14;stop-opacity:0.61"
+   id="stop128" />
+		<stop
+   offset="0.3077"
+   style="stop-color:#68C111;stop-opacity:0.4223"
+   id="stop130" />
+		<stop
+   offset="0.8482"
+   style="stop-color:#54A309;stop-opacity:0.0926"
+   id="stop132" />
+		<stop
+   offset="1"
+   style="stop-color:#4E9A06;stop-opacity:0"
+   id="stop134" />
+	</radialGradient>
+	<path
+   display="inline"
+   d="m 792.729,-12.96 c 69.943,0 126.642,57.938 126.642,129.412 0,71.473 -56.698,129.41 -126.642,129.41 -69.945,0 -126.645,-57.938 -126.645,-129.412 0,-71.472 56.699,-129.41 126.645,-129.41 z"
+   id="path136"
+   inkscape:connector-curvature="0"
+   style="opacity:0.45;fill:url(#SVGID_9_);display:inline" />
+</g>
+<g
+   id="red_stop"
+   transform="matrix(0.11630161,0,0,0.11398988,-25.212447,-7.8890116)">
+	<g
+   id="g139">
+		<path
+   d="m 226.785,69.208 c -5.5,0 -10,4.5 -10,10 v 401.09 c 0,5.5 4.5,10 10,10 h 392.72 c 5.5,0 10,-4.5 10,-10 V 79.208 c 0,-5.5 -4.5,-10 -10,-10 h -392.72 z"
+   id="path141"
+   inkscape:connector-curvature="0"
+   style="fill:#b30909" />
+	</g>
+	<g
+   id="g143">
+		<path
+   d="m 242.097,79.736 c -5.5,0 -10,4.5 -10,10 V 469.77 c 0,5.5 4.5,10 10,10 h 362.097 c 5.5,0 10,-4.5 10,-10 V 89.736 c 0,-5.5 -4.5,-10 -10,-10 H 242.097 z"
+   id="path145"
+   inkscape:connector-curvature="0"
+   style="fill:#ef0c0c" />
+	</g>
+	<g
+   id="g147">
+		<linearGradient
+   id="SVGID_10_"
+   gradientUnits="userSpaceOnUse"
+   x1="420.79001"
+   y1="120.0361"
+   x2="424.59161"
+   y2="377.90701">
+			<stop
+   offset="0.1083"
+   style="stop-color:#C73600"
+   id="stop150" />
+			<stop
+   offset="1"
+   style="stop-color:#FF6B5C"
+   id="stop152" />
+		</linearGradient>
+		<path
+   d="m 254.345,89.736 c -5.5,0 -10,4.5 -10,10 v 360.033 c 0,5.5 4.5,10 10,10 h 337.599 c 5.5,0 10,-4.5 10,-10 V 99.736 c 0,-5.5 -4.5,-10 -10,-10 H 254.345 z"
+   id="path154"
+   inkscape:connector-curvature="0"
+   style="fill:url(#SVGID_10_)" />
+	</g>
+	<g
+   id="g156">
+		<linearGradient
+   id="SVGID_11_"
+   gradientUnits="userSpaceOnUse"
+   x1="423.5361"
+   y1="415.3027"
+   x2="422.66901"
+   y2="264.38931">
+			<stop
+   offset="0"
+   style="stop-color:#C73600"
+   id="stop159" />
+			<stop
+   offset="1"
+   style="stop-color:#FF6B5C"
+   id="stop161" />
+		</linearGradient>
+		<path
+   d="m 254.345,469.77 c -5.5,0 -10,-4.5 -10,-10 V 309.42 c 0,-5.5 4.195,-8.372 9.323,-6.383 0,0 89.641,34.775 195.671,7.353 106.031,-27.422 146.376,-78.099 146.376,-78.099 3.426,-4.303 6.229,-3.324 6.229,2.176 V 459.77 c 0,5.5 -4.5,10 -10,10 H 254.345 z"
+   id="path163"
+   inkscape:connector-curvature="0"
+   style="fill:url(#SVGID_11_)" />
+	</g>
+	
+		<radialGradient
+   id="SVGID_12_"
+   cx="330.12451"
+   cy="-69.971703"
+   r="169.46831"
+   gradientTransform="matrix(0,0.6255,-0.6121,0,440.8554,0.9963)"
+   gradientUnits="userSpaceOnUse">
+		<stop
+   offset="0"
+   style="stop-color:#FFFFFF"
+   id="stop166" />
+		<stop
+   offset="1"
+   style="stop-color:#FFFFFF;stop-opacity:0"
+   id="stop168" />
+	</radialGradient>
+	<ellipse
+   cx="483.68701"
+   cy="207.489"
+   rx="103.732"
+   ry="106"
+   id="ellipse170"
+   sodipodi:cx="483.68701"
+   sodipodi:cy="207.489"
+   sodipodi:rx="103.732"
+   sodipodi:ry="106"
+   style="opacity:0.13999999;fill:url(#SVGID_12_)"
+   d="m 587.41901,207.489 c 0,58.54218 -46.4424,106 -103.732,106 -57.2896,0 -103.732,-47.45782 -103.732,-106 0,-58.54219 46.4424,-106 103.732,-106 57.2896,0 103.732,47.45781 103.732,106 z" />
+</g>
+<g
+   id="Layer_8"
+   display="none"
+   style="display:none"
+   transform="translate(-399.14501,-255.753)">
+	<g
+   display="inline"
+   id="g173"
+   style="display:inline">
+		<path
+   d="m 116.972,533.356 c 5.5,0 10,-4.5 10,-10 V 78.332 c 0,-5.5 -4.5,-10 -10,-10 h -69.6 c -5.5,0 -10,4.5 -10,10 v 445.024 c 0,5.5 4.5,10 10,10 h 69.6 z"
+   id="path175"
+   inkscape:connector-curvature="0"
+   style="fill:#3a7304" />
+	</g>
+</g>
+<g
+   id="Layer_9"
+   display="none"
+   style="display:none"
+   transform="translate(-399.14501,-255.753)">
+	<g
+   display="inline"
+   id="g178"
+   style="display:inline">
+		<path
+   d="m 108.012,521.729 c 5.5,0 10,-4.5 10,-10 V 89.958 c 0,-5.5 -4.5,-10 -10,-10 h -51.68 c -5.5,0 -10,4.5 -10,10 V 511.73 c 0,5.5 4.5,10 10,10 l 51.68,-10e-4 z"
+   id="path180"
+   inkscape:connector-curvature="0"
+   style="fill:#a3cb7e" />
+	</g>
+</g>
+<g
+   id="Layer_10"
+   display="none"
+   style="display:none"
+   transform="translate(-399.14501,-255.753)">
+	<g
+   display="inline"
+   id="g183"
+   style="display:inline">
+		
+			<linearGradient
+   id="SVGID_13_"
+   gradientUnits="userSpaceOnUse"
+   x1="369.55811"
+   y1="-49.4897"
+   x2="248.5782"
+   y2="-48.846802"
+   gradientTransform="matrix(0,1,1,0,131.8672,-107.5625)">
+			<stop
+   offset="0"
+   style="stop-color:#89BD58"
+   id="stop186" />
+			<stop
+   offset="1"
+   style="stop-color:#519C0A"
+   id="stop188" />
+		</linearGradient>
+		<path
+   d="m 100.843,510.687 c 5.5,0 10,-4.5 10,-10 V 101.002 c 0,-5.5 -4.5,-10 -10,-10 L 63.499,91.001 c -5.5,0 -10,4.5 -10,10 v 399.685 c 0,5.5 4.5,10 10,10 h 37.344 z"
+   id="path190"
+   inkscape:connector-curvature="0"
+   style="fill:url(#SVGID_13_)" />
+	</g>
+</g>
+<g
+   id="Layer_11"
+   display="none"
+   style="display:none"
+   transform="translate(-399.14501,-255.753)">
+	<g
+   display="inline"
+   id="g193"
+   style="display:inline">
+		
+			<linearGradient
+   id="SVGID_14_"
+   gradientUnits="userSpaceOnUse"
+   x1="395.38431"
+   y1="-49.6973"
+   x2="618.24799"
+   y2="-49.6973"
+   gradientTransform="matrix(0,1,1,0,131.8691,-107.5615)">
+			<stop
+   offset="0"
+   style="stop-color:#70BE25"
+   id="stop196" />
+			<stop
+   offset="1"
+   style="stop-color:#4E9A06"
+   id="stop198" />
+		</linearGradient>
+		<path
+   d="m 100.844,510.687 c 5.5,0 10,-4.5 10,-10 V 310 c 0,-5.5 -0.424,-5.521 -0.943,-0.045 0,0 -1.24,13.095 -27.729,-9.955 C 59.516,280.284 56.419,290.436 56.419,290.436 54.813,295.696 53.5,304.5 53.5,310 v 190.687 c 0,5.5 4.5,10 10,10 h 37.344 z"
+   id="path200"
+   inkscape:connector-curvature="0"
+   style="fill:url(#SVGID_14_)" />
+	</g>
+</g>
+</svg>
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/leds/images256/led_white_off.png b/lib/taurus/qt/qtgui/resource/extra-icons/leds/images256/led_white_off.png
new file mode 100644
index 0000000..c702c33
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/extra-icons/leds/images256/led_white_off.png differ
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/leds/images256/led_white_on.png b/lib/taurus/qt/qtgui/resource/extra-icons/leds/images256/led_white_on.png
new file mode 100644
index 0000000..efbc5d3
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/extra-icons/leds/images256/led_white_on.png differ
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/lock_locked.svg b/lib/taurus/qt/qtgui/resource/extra-icons/lock_locked.svg
new file mode 100644
index 0000000..03dae40
--- /dev/null
+++ b/lib/taurus/qt/qtgui/resource/extra-icons/lock_locked.svg
@@ -0,0 +1,2874 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   height="60.000004"
+   id="svg2"
+   inkscape:export-xdpi="76.235291"
+   inkscape:export-ydpi="76.235291"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:version="0.48.1 r9760"
+   sodipodi:version="0.32"
+   version="1.1"
+   width="60.000004"
+   sodipodi:docname="lock_locked.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       id="perspective20643"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2454"
+       inkscape:collect="always">
+      <stop
+         id="stop2456"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop2458"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="12.57571"
+       cy="67.501709"
+       fx="12.57571"
+       fy="67.501709"
+       gradientTransform="scale(1.925808,0.519262)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2460"
+       inkscape:collect="always"
+       r="8.7662792"
+       xlink:href="#linearGradient2454" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.490236,34.67523,22.83397)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1898"
+       inkscape:collect="always"
+       x1="11.5"
+       x2="11.779029"
+       xlink:href="#linearGradient12071"
+       y1="20.579729"
+       y2="14.259961" />
+    <linearGradient
+       id="linearGradient12071">
+      <stop
+         id="stop12073"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop12075"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.461806,23.89003,23.47875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1896"
+       inkscape:collect="always"
+       x1="14.217941"
+       x2="17.859085"
+       xlink:href="#linearGradient12071"
+       y1="6.8795347"
+       y2="3.9566603" />
+    <linearGradient
+       id="linearGradient9845">
+      <stop
+         id="stop9847"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop9849"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.49484536;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.453445,0,0,0.470026,30.17248,24.3894)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1894"
+       inkscape:collect="always"
+       x1="10.907269"
+       x2="30.875446"
+       xlink:href="#linearGradient9845"
+       y1="25.002281"
+       y2="36.127281" />
+    <linearGradient
+       id="linearGradient11327">
+      <stop
+         id="stop11329"
+         offset="0"
+         style="stop-color:#8f5902;stop-opacity:1;" />
+      <stop
+         id="stop11331"
+         offset="1"
+         style="stop-color:#c17d11;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,22.22637)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1892"
+       inkscape:collect="always"
+       x1="31.630468"
+       x2="8.6713638"
+       xlink:href="#linearGradient11327"
+       y1="41.791817"
+       y2="25.793524" />
+    <linearGradient
+       id="linearGradient2092">
+      <stop
+         id="stop2094"
+         offset="0"
+         style="stop-color:#fce94f;stop-opacity:1;" />
+      <stop
+         id="stop27163"
+         offset="0.20999999"
+         style="stop-color:#ffec41;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2293"
+         offset="0.83999997"
+         style="stop-color:#edd400;stop-opacity:1;" />
+      <stop
+         id="stop2100"
+         offset="1"
+         style="stop-color:#c4a00f;stop-opacity:0.94117647;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,21.67589)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1890"
+       inkscape:collect="always"
+       x1="6.72682"
+       x2="40.938126"
+       xlink:href="#linearGradient2092"
+       y1="32.161697"
+       y2="32.161697" />
+    <linearGradient
+       id="linearGradient11335">
+      <stop
+         id="stop11337"
+         offset="0"
+         style="stop-color:#555753;stop-opacity:1;" />
+      <stop
+         id="stop11339"
+         offset="1"
+         style="stop-color:#888a85;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1888"
+       inkscape:collect="always"
+       x1="19.250618"
+       x2="16.198252"
+       xlink:href="#linearGradient11335"
+       y1="9.6635771"
+       y2="6.0396547" />
+    <linearGradient
+       id="linearGradient10591">
+      <stop
+         id="stop10593"
+         offset="0"
+         style="stop-color:#babdb6;stop-opacity:1;" />
+      <stop
+         id="stop10599"
+         offset="0.5"
+         style="stop-color:#eeeeec;stop-opacity:1;" />
+      <stop
+         id="stop10595"
+         offset="1"
+         style="stop-color:#babdb6;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1886"
+       inkscape:collect="always"
+       x1="12.88666"
+       x2="20.087339"
+       xlink:href="#linearGradient10591"
+       y1="4.3602757"
+       y2="18.414022" />
+    <linearGradient
+       id="linearGradient11494">
+      <stop
+         id="stop11496"
+         offset="0"
+         style="stop-color:#2946ef;stop-opacity:1;" />
+      <stop
+         id="stop11498"
+         offset="1"
+         style="stop-color:#2929ef;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11520">
+      <stop
+         id="stop11522"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop11524"
+         offset="1.0000000"
+         style="stop-color:#dcdcdc;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       cx="24.44569"
+       cy="35.87817"
+       fx="24.44569"
+       fy="35.87817"
+       gradientTransform="matrix(35.895002,0,0,35.895002,-502.54107,-556.8092)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1366"
+       inkscape:collect="always"
+       r="20.530962"
+       xlink:href="#linearGradient11520" />
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6719"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6717"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <linearGradient
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6715"
+       inkscape:collect="always"
+       x1="302.85715"
+       x2="302.85715"
+       xlink:href="#linearGradient5048"
+       y1="366.64789"
+       y2="609.50507" />
+    <linearGradient
+       id="linearGradient4747">
+      <stop
+         id="stop4749"
+         offset="0"
+         style="stop-color:#16d277;stop-opacity:1;" />
+      <stop
+         id="stop4751"
+         offset="1"
+         style="stop-color:#069a4a;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4741">
+      <stop
+         id="stop4743"
+         offset="0"
+         style="stop-color:#16d2c3;stop-opacity:1;" />
+      <stop
+         id="stop4745"
+         offset="1"
+         style="stop-color:#069a92;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8650"
+       inkscape:collect="always">
+      <stop
+         id="stop8652"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop8654"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2304">
+      <stop
+         id="stop2306"
+         offset="0"
+         style="stop-color:#73d216" />
+      <stop
+         id="stop2308"
+         offset="1.0000000"
+         style="stop-color:#4e9a06" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient1789">
+      <stop
+         id="stop1790"
+         offset="0"
+         style="stop-color:#a0a0a0;stop-opacity:1;" />
+      <stop
+         id="stop1791"
+         offset="1"
+         style="stop-color:#a8a8a8;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient137">
+      <stop
+         id="stop138"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.70059878;" />
+      <stop
+         id="stop139"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9766">
+      <stop
+         id="stop9768"
+         offset="0"
+         style="stop-color:#6194cb;stop-opacity:1;" />
+      <stop
+         id="stop9770"
+         offset="1"
+         style="stop-color:#729fcf;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient148">
+      <stop
+         id="stop149"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.13402061;" />
+      <stop
+         id="stop150"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.051546391;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient335">
+      <stop
+         id="stop336"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop337"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(39.086521,0,0,7.6340894,-33.337669,99.207026)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2813"
+       inkscape:collect="always"
+       x1="10.496115"
+       x2="10.219901"
+       xlink:href="#linearGradient2803"
+       y1="93.338043"
+       y2="84.287079" />
+    <linearGradient
+       gradientTransform="matrix(16.544137,0,0,17.757444,-33.337669,104.44258)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2100"
+       inkscape:collect="always"
+       x1="6.5871811"
+       x2="14.511404"
+       xlink:href="#linearGradient2094"
+       y1="22.132999"
+       y2="22.132999" />
+    <linearGradient
+       gradientTransform="matrix(4.3875865,0,0,64.946869,-32.890582,116.9616)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2801"
+       inkscape:collect="always"
+       x1="35.433037"
+       x2="41.219128"
+       xlink:href="#linearGradient2795"
+       y1="4.9530048"
+       y2="4.9530048" />
+    <linearGradient
+       id="linearGradient2116"
+       inkscape:collect="always">
+      <stop
+         id="stop2118"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2120"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(17.713207,0,0,16.536418,-50.611543,100.38611)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2112"
+       inkscape:collect="always"
+       x1="73.361984"
+       x2="-2.7582901"
+       xlink:href="#linearGradient2116"
+       y1="26.652197"
+       y2="21.270376" />
+    <radialGradient
+       cx="55"
+       cy="125"
+       fx="55"
+       fy="125"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient278"
+       inkscape:collect="always"
+       r="14.375"
+       xlink:href="#linearGradient12512" />
+    <linearGradient
+       id="linearGradient4228">
+      <stop
+         id="stop4230"
+         offset="0.0000000"
+         style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4232"
+         offset="1.0000000"
+         style="stop-color:#9f9f9f;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4244">
+      <stop
+         id="stop4246"
+         offset="0.0000000"
+         style="stop-color:#e4e4e4;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4248"
+         offset="1.0000000"
+         style="stop-color:#d3d3d3;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4184">
+      <stop
+         id="stop4186"
+         offset="0.0000000"
+         style="stop-color:#838383;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4188"
+         offset="1.0000000"
+         style="stop-color:#bbbbbb;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4274">
+      <stop
+         id="stop4276"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.25490198;" />
+      <stop
+         id="stop4278"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2555">
+      <stop
+         id="stop2557"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2561"
+         offset="0.50000000"
+         style="stop-color:#e6e6e6;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2563"
+         offset="0.75000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2565"
+         offset="0.84166664"
+         style="stop-color:#e1e1e1;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2559"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12582">
+      <stop
+         id="stop12584"
+         offset="0"
+         style="stop-color:#d23d21;stop-opacity:1;" />
+      <stop
+         id="stop12586"
+         offset="0.25709054"
+         style="stop-color:#e9ca23;stop-opacity:1;" />
+      <stop
+         id="stop12588"
+         offset="0.5655992"
+         style="stop-color:#e98d47;stop-opacity:1;" />
+      <stop
+         id="stop12590"
+         offset="1"
+         style="stop-color:#e9c33e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2877">
+      <stop
+         id="stop2879"
+         offset="0"
+         style="stop-color:#75507b;stop-opacity:1;" />
+      <stop
+         id="stop2885"
+         offset="0.25709054"
+         style="stop-color:#a984af;stop-opacity:1;" />
+      <stop
+         id="stop2887"
+         offset="0.5655992"
+         style="stop-color:#513755;stop-opacity:1;" />
+      <stop
+         id="stop2881"
+         offset="1"
+         style="stop-color:#875c8e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2865">
+      <stop
+         id="stop2867"
+         offset="0"
+         style="stop-color:#73d216;stop-opacity:1;" />
+      <stop
+         id="stop11581"
+         offset="0.25568181"
+         style="stop-color:#9ced4b;stop-opacity:1;" />
+      <stop
+         id="stop11583"
+         offset="0.59400827"
+         style="stop-color:#64b813;stop-opacity:1;" />
+      <stop
+         id="stop2869"
+         offset="1"
+         style="stop-color:#8eea34;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2913">
+      <stop
+         id="stop2915"
+         offset="0"
+         style="stop-color:white;stop-opacity:0.43877551;" />
+      <stop
+         id="stop2921"
+         offset="0.5"
+         style="stop-color:white;stop-opacity:1;" />
+      <stop
+         id="stop2917"
+         offset="1"
+         style="stop-color:white;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6932">
+      <stop
+         id="stop6934"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop6936"
+         offset="1"
+         style="stop-color:#aeb2e7;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4162">
+      <stop
+         id="stop4164"
+         offset="0.0000000"
+         style="stop-color:#f79403;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4170"
+         offset="0.18691589"
+         style="stop-color:#fdb343;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4172"
+         offset="0.43008122"
+         style="stop-color:#fdb74f;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4166"
+         offset="1.0000000"
+         style="stop-color:#8f5601;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4206">
+      <stop
+         id="stop4208"
+         offset="0"
+         style="stop-color:#010f7d;stop-opacity:1;" />
+      <stop
+         id="stop4210"
+         offset="1"
+         style="stop-color:#5669c4;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4134">
+      <stop
+         id="stop4136"
+         offset="0.0000000"
+         style="stop-color:#7e807a;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4148"
+         offset="0.25000000"
+         style="stop-color:#babbb8;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4142"
+         offset="0.50000000"
+         style="stop-color:#a5a6a3;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4138"
+         offset="1.0000000"
+         style="stop-color:#333432;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4126">
+      <stop
+         id="stop4128"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4130"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.16494845;" />
+    </linearGradient>
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1558"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1554"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1550"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1546"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1542"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1538"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1536"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1532"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1528"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1526"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1522"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1518"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1514"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1510"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1506"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1502"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1498"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1494"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1490"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1486"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1482"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1478"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1474"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1470"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1466"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1462"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <linearGradient
+       id="linearGradient4750">
+      <stop
+         id="stop4752"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop4758"
+         offset="0.37931034"
+         style="stop-color:#fefefe;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4754"
+         offset="1.0000000"
+         style="stop-color:#1d1d1d;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1460"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <linearGradient
+       id="linearGradient3962">
+      <stop
+         id="stop3964"
+         offset="0.0000000"
+         style="stop-color:#d3e9ff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4134"
+         offset="0.15517241"
+         style="stop-color:#d3e9ff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4346"
+         offset="0.75000000"
+         style="stop-color:#4074ae;stop-opacity:1.0000000;" />
+      <stop
+         id="stop3966"
+         offset="1.0000000"
+         style="stop-color:#36486c;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2265"
+       inkscape:collect="always">
+      <stop
+         id="stop2267"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop2269"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.878099,-0.0173237,0.0173237,0.878099,1021.3138,469.27875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2271"
+       inkscape:collect="always"
+       x1="14.017542"
+       x2="15.415793"
+       xlink:href="#linearGradient2265"
+       y1="36.942543"
+       y2="38.268368" />
+    <linearGradient
+       id="linearGradient2257"
+       inkscape:collect="always">
+      <stop
+         id="stop2259"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2261"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(1.007254,-0.02636526,0.02636526,1.007254,1020.7435,465.29004)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2263"
+       inkscape:collect="always"
+       x1="12.004697"
+       x2="10.650805"
+       xlink:href="#linearGradient2257"
+       y1="35.688461"
+       y2="33.194965" />
+    <linearGradient
+       id="linearGradient3087">
+      <stop
+         id="stop3089"
+         offset="0"
+         style="stop-color:#3465a4;stop-opacity:1;" />
+      <stop
+         id="stop3095"
+         offset="0"
+         style="stop-color:#9fbce1;stop-opacity:1;" />
+      <stop
+         id="stop2242"
+         offset="0"
+         style="stop-color:#6b95ca;stop-opacity:1;" />
+      <stop
+         id="stop2244"
+         offset="0.75"
+         style="stop-color:#3d6aa5;stop-opacity:1;" />
+      <stop
+         id="stop3091"
+         offset="1"
+         style="stop-color:#386eb4;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.6871,470.17853)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3093"
+       inkscape:collect="always"
+       x1="9.7503242"
+       x2="16.915297"
+       xlink:href="#linearGradient3087"
+       y1="32.28376"
+       y2="39.443218" />
+    <linearGradient
+       id="linearGradient2250"
+       inkscape:collect="always">
+      <stop
+         id="stop2252"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2254"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(1019.1501,465.21085)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2256"
+       inkscape:collect="always"
+       x1="31.177404"
+       x2="40.859177"
+       xlink:href="#linearGradient2250"
+       y1="19.821514"
+       y2="9.6568537" />
+    <linearGradient
+       id="linearGradient3077">
+      <stop
+         id="stop3079"
+         offset="0"
+         style="stop-color:#98a0a9;stop-opacity:1;" />
+      <stop
+         id="stop3081"
+         offset="1"
+         style="stop-color:#c3d0dd;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.9976,470.79956)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3083"
+       inkscape:collect="always"
+       x1="38.227654"
+       x2="37.53537"
+       xlink:href="#linearGradient3077"
+       y1="13.602527"
+       y2="6.6285896" />
+    <linearGradient
+       id="linearGradient3061">
+      <stop
+         id="stop3063"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop3065"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.8782699,0,0,0.8782699,1049.7965,-403.53398)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3067"
+       inkscape:collect="always"
+       x1="50.152931"
+       x2="25.291086"
+       xlink:href="#linearGradient3061"
+       y1="-3.6324477"
+       y2="-4.3002653" />
+    <linearGradient
+       id="linearGradient3049">
+      <stop
+         id="stop3051"
+         offset="0"
+         style="stop-color:#b6b6b6;stop-opacity:1;" />
+      <stop
+         id="stop2262"
+         offset="0.5"
+         style="stop-color:#f2f2f2;stop-opacity:1;" />
+      <stop
+         id="stop2264"
+         offset="0.67612958"
+         style="stop-color:#fafafa;stop-opacity:1;" />
+      <stop
+         id="stop2268"
+         offset="0.84051722"
+         style="stop-color:#d8d8d8;stop-opacity:1;" />
+      <stop
+         id="stop2266"
+         offset="0.875"
+         style="stop-color:#f2f2f2;stop-opacity:1;" />
+      <stop
+         id="stop3053"
+         offset="1"
+         style="stop-color:#dbdbdb;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.6871,470.17853)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3055"
+       inkscape:collect="always"
+       x1="19.648342"
+       x2="20.631224"
+       xlink:href="#linearGradient3049"
+       y1="42.253601"
+       y2="6.7758031" />
+    <radialGradient
+       cx="24.8125"
+       cy="39.125"
+       fx="24.8125"
+       fy="39.125"
+       gradientTransform="matrix(1,0,0,0.374558,0,24.47041)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3047"
+       inkscape:collect="always"
+       r="17.6875"
+       xlink:href="#linearGradient3041" />
+    <linearGradient
+       id="linearGradient3041"
+       inkscape:collect="always">
+      <stop
+         id="stop3043"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop3045"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="24.8125"
+       cy="39.125"
+       fx="24.8125"
+       fy="39.125"
+       gradientTransform="matrix(1,0,0,0.374558,0,24.47041)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2260"
+       inkscape:collect="always"
+       r="17.6875"
+       xlink:href="#linearGradient3041" />
+    <linearGradient
+       gradientTransform="translate(131.91072,132.23618)"
+       gradientUnits="userSpaceOnUse"
+       id="SVGID_1_"
+       x1="43.944302"
+       x2="411.3941"
+       y1="733.39258"
+       y2="425.06561">
+      <stop
+         id="stop2170"
+         offset="0.0562"
+         style="stop-color:#003F90" />
+      <stop
+         id="stop2172"
+         offset="0.5674"
+         style="stop-color:#0093D2" />
+      <stop
+         id="stop2174"
+         offset="0.9551"
+         style="stop-color:#EDF3F7" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.9169564,0,0,0.9120098,60.201795,153.71221)"
+       gradientUnits="userSpaceOnUse"
+       id="SVGID_2_"
+       x1="43.943802"
+       x2="411.39359"
+       y1="733.39258"
+       y2="425.06561">
+      <stop
+         id="stop2179"
+         offset="0.0562"
+         style="stop-color:#525252;stop-opacity:1;" />
+      <stop
+         id="stop2181"
+         offset="0.56739998"
+         style="stop-color:#8e8e8e;stop-opacity:1;" />
+      <stop
+         id="stop2183"
+         offset="0.9551"
+         style="stop-color:#c9c9c9;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5020"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <linearGradient
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5016"
+       inkscape:collect="always"
+       x1="302.85715"
+       x2="302.85715"
+       xlink:href="#linearGradient5048"
+       y1="366.64789"
+       y2="609.50507" />
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5013"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <linearGradient
+       id="linearGradient2795">
+      <stop
+         id="stop2797"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.068627454;" />
+      <stop
+         id="stop2799"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2803">
+      <stop
+         id="stop2805"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2807"
+         offset="1.0000000"
+         style="stop-color:#cbcbcb;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2094">
+      <stop
+         id="stop2096"
+         offset="0.0000000"
+         style="stop-color:#d6e3f0;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2098"
+         offset="1.0000000"
+         style="stop-color:#95b1cf;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12512">
+      <stop
+         id="stop12513"
+         offset="0"
+         style="stop-color:#eeebc9;stop-opacity:1;" />
+      <stop
+         id="stop12517"
+         offset="1"
+         style="stop-color:#ffd420;stop-opacity:1;" />
+      <stop
+         id="stop12514"
+         offset="1"
+         style="stop-color:#ffec00;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5048">
+      <stop
+         id="stop5050"
+         offset="0"
+         style="stop-color:black;stop-opacity:0;" />
+      <stop
+         id="stop5056"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         id="stop5052"
+         offset="1"
+         style="stop-color:black;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5060"
+       inkscape:collect="always">
+      <stop
+         id="stop5062"
+         offset="0"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         id="stop5064"
+         offset="1"
+         style="stop-color:black;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2994">
+      <stop
+         id="stop2996"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop2998"
+         offset="1"
+         style="stop-color:#c9c9c9;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2974">
+      <stop
+         id="stop2976"
+         offset="0"
+         style="stop-color:#c1c1c1;stop-opacity:1;" />
+      <stop
+         id="stop2978"
+         offset="1"
+         style="stop-color:#acacac;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2966">
+      <stop
+         id="stop2968"
+         offset="0"
+         style="stop-color:#ffd1d1;stop-opacity:1;" />
+      <stop
+         id="stop3006"
+         offset="0.5"
+         style="stop-color:#ff1d1d;stop-opacity:1;" />
+      <stop
+         id="stop2970"
+         offset="1"
+         style="stop-color:#6f0000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2846">
+      <stop
+         id="stop2848"
+         offset="0.0000000"
+         style="stop-color:#8a8a8a;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2850"
+         offset="1.0000000"
+         style="stop-color:#484848;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2366">
+      <stop
+         id="stop2368"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2374"
+         offset="0.50000000"
+         style="stop-color:#ffffff;stop-opacity:0.21904762;" />
+      <stop
+         id="stop2370"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4467">
+      <stop
+         id="stop4469"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop4471"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.24761905;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4454">
+      <stop
+         id="stop4456"
+         offset="0.0000000"
+         style="stop-color:#729fcf;stop-opacity:0.20784314;" />
+      <stop
+         id="stop4458"
+         offset="1.0000000"
+         style="stop-color:#729fcf;stop-opacity:0.67619050;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4440">
+      <stop
+         id="stop4442"
+         offset="0"
+         style="stop-color:#7d7d7d;stop-opacity:1;" />
+      <stop
+         id="stop4448"
+         offset="0.50000000"
+         style="stop-color:#b1b1b1;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4444"
+         offset="1.0000000"
+         style="stop-color:#686868;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       cx="24.306795"
+       cy="42.07798"
+       fx="24.306795"
+       fy="42.07798"
+       gradientTransform="matrix(1,0,0,0.284916,0,30.08928)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4548"
+       inkscape:collect="always"
+       r="15.821514"
+       xlink:href="#linearGradient4542" />
+    <linearGradient
+       id="linearGradient259">
+      <stop
+         id="stop260"
+         offset="0.0000000"
+         style="stop-color:#fafafa;stop-opacity:1.0000000;" />
+      <stop
+         id="stop261"
+         offset="1.0000000"
+         style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient269">
+      <stop
+         id="stop270"
+         offset="0.0000000"
+         style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
+      <stop
+         id="stop271"
+         offset="1.0000000"
+         style="stop-color:#4c4c4c;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       cx="20.892099"
+       cy="114.5684"
+       fx="20.892099"
+       fy="114.5684"
+       gradientUnits="userSpaceOnUse"
+       id="aigrd2"
+       r="5.256">
+      <stop
+         id="stop15566"
+         offset="0"
+         style="stop-color:#F0F0F0" />
+      <stop
+         id="stop15568"
+         offset="1.0000000"
+         style="stop-color:#9a9a9a;stop-opacity:1.0000000;" />
+    </radialGradient>
+    <radialGradient
+       cx="20.892099"
+       cy="64.567902"
+       fx="20.892099"
+       fy="64.567902"
+       gradientUnits="userSpaceOnUse"
+       id="aigrd3"
+       r="5.257">
+      <stop
+         id="stop15573"
+         offset="0"
+         style="stop-color:#F0F0F0" />
+      <stop
+         id="stop15575"
+         offset="1.0000000"
+         style="stop-color:#9a9a9a;stop-opacity:1.0000000;" />
+    </radialGradient>
+    <linearGradient
+       id="linearGradient15662">
+      <stop
+         id="stop15664"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop15666"
+         offset="1.0000000"
+         style="stop-color:#f8f8f8;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4542"
+       inkscape:collect="always">
+      <stop
+         id="stop4544"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop4546"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2659"
+       inkscape:collect="always"
+       x1="302.85715"
+       x2="302.85715"
+       xlink:href="#linearGradient5048"
+       y1="366.64789"
+       y2="609.50507" />
+    <linearGradient
+       id="linearGradient2651">
+      <stop
+         id="stop2653"
+         offset="0"
+         style="stop-color:black;stop-opacity:0;" />
+      <stop
+         id="stop2655"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         id="stop2657"
+         offset="1"
+         style="stop-color:black;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2649"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2641"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2408"
+       inkscape:collect="always"
+       x1="18.935766"
+       x2="53.588623"
+       xlink:href="#linearGradient2402"
+       y1="23.667896"
+       y2="26.649363" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2386"
+       inkscape:collect="always"
+       x1="62.513836"
+       x2="15.984863"
+       xlink:href="#linearGradient2380"
+       y1="36.061237"
+       y2="20.60858" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1501"
+       inkscape:collect="always"
+       x1="46.834816"
+       x2="45.380436"
+       xlink:href="#linearGradient2871"
+       y1="45.264122"
+       y2="50.939667" />
+    <linearGradient
+       id="linearGradient2831">
+      <stop
+         id="stop2833"
+         offset="0"
+         style="stop-color:#1d5e23;stop-opacity:1;" />
+      <stop
+         id="stop2855"
+         offset="0.33333334"
+         style="stop-color:#329652;stop-opacity:1;" />
+      <stop
+         id="stop2835"
+         offset="1"
+         style="stop-color:#83d8ab;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2871"
+       inkscape:collect="always">
+      <stop
+         id="stop2873"
+         offset="0"
+         style="stop-color:#3465a4;stop-opacity:1;" />
+      <stop
+         id="stop2875"
+         offset="1"
+         style="stop-color:#3465a4;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2380">
+      <stop
+         id="stop2382"
+         offset="0"
+         style="stop-color:#b9e7c9;stop-opacity:1;" />
+      <stop
+         id="stop2384"
+         offset="1"
+         style="stop-color:#72cf79;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2402">
+      <stop
+         id="stop2404"
+         offset="0"
+         style="stop-color:#72cf7b;stop-opacity:1;" />
+      <stop
+         id="stop2406"
+         offset="1"
+         style="stop-color:#57c552;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2682">
+      <stop
+         id="stop2684"
+         offset="0"
+         style="stop-color:#3977c3;stop-opacity:1;" />
+      <stop
+         id="stop2686"
+         offset="1"
+         style="stop-color:#89aedc;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2690">
+      <stop
+         id="stop2692"
+         offset="0"
+         style="stop-color:#57be6f;stop-opacity:1;" />
+      <stop
+         id="stop2694"
+         offset="1"
+         style="stop-color:#c4ebca;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5903"
+       inkscape:collect="always"
+       x1="62.513836"
+       x2="15.984863"
+       xlink:href="#linearGradient2380"
+       y1="36.061237"
+       y2="20.60858" />
+    <linearGradient
+       gradientTransform="matrix(-6.0935847,-5.1483414,-5.1483414,6.0935847,846.16404,624.52042)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5908"
+       inkscape:collect="always"
+       x1="62.513836"
+       x2="15.984863"
+       xlink:href="#linearGradient2380"
+       y1="36.061237"
+       y2="20.60858" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7848"
+       inkscape:collect="always"
+       x1="18.935766"
+       x2="53.588623"
+       xlink:href="#linearGradient2402"
+       y1="23.667896"
+       y2="26.649363" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7850"
+       inkscape:collect="always"
+       x1="46.834816"
+       x2="45.380436"
+       xlink:href="#linearGradient2871"
+       y1="45.264122"
+       y2="50.939667" />
+    <linearGradient
+       gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9972"
+       inkscape:collect="always"
+       x1="28.244684"
+       x2="28.244684"
+       xlink:href="#linearGradient9910"
+       y1="60.445503"
+       y2="68.224884" />
+    <linearGradient
+       gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9968"
+       inkscape:collect="always"
+       x1="28.244684"
+       x2="28.244684"
+       xlink:href="#linearGradient9920"
+       y1="60.445503"
+       y2="68.224884" />
+    <linearGradient
+       gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9965"
+       inkscape:collect="always"
+       x1="28.244684"
+       x2="28.244684"
+       xlink:href="#linearGradient9910"
+       y1="60.445503"
+       y2="68.224884" />
+    <linearGradient
+       gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9961"
+       inkscape:collect="always"
+       x1="55.876038"
+       x2="38.061356"
+       xlink:href="#linearGradient9952"
+       y1="62.401989"
+       y2="62.827091" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6401"
+       inkscape:collect="always"
+       x1="20.064156"
+       x2="20.682873"
+       xlink:href="#linearGradient6395"
+       y1="27.140348"
+       y2="44.110912" />
+    <radialGradient
+       cx="23.25"
+       cy="37.75"
+       fx="23.25"
+       fy="37.75"
+       gradientTransform="matrix(1,0,0,0.420168,0,21.88866)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6353"
+       inkscape:collect="always"
+       r="14.875"
+       xlink:href="#linearGradient5048" />
+    <linearGradient
+       gradientTransform="matrix(0.00525957,0.999987,0.999987,-0.00525957,48.6929,-14.14491)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6349"
+       inkscape:collect="always"
+       x1="25.71875"
+       x2="25.514589"
+       xlink:href="#linearGradient2994"
+       y1="31.046875"
+       y2="30.703125" />
+    <radialGradient
+       cx="29.053354"
+       cy="27.640751"
+       fx="29.053354"
+       fy="27.640751"
+       gradientTransform="matrix(0.0153767,2.923527,2.029691,-0.01067544,20.39098,-69.72665)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6347"
+       inkscape:collect="always"
+       r="3.2408545"
+       xlink:href="#linearGradient2984" />
+    <linearGradient
+       gradientTransform="matrix(0.00525957,0.999987,0.999987,-0.00525957,42.99552,-2.496241)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6345"
+       inkscape:collect="always"
+       x1="46"
+       x2="47.6875"
+       xlink:href="#linearGradient2974"
+       y1="19.8125"
+       y2="22.625" />
+    <linearGradient
+       gradientTransform="matrix(0.00525957,0.999987,0.999987,-0.00525957,42.9955,-2.496241)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6343"
+       inkscape:collect="always"
+       x1="48.90625"
+       x2="50.988335"
+       xlink:href="#linearGradient2966"
+       y1="17.376184"
+       y2="22.250591" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5074"
+       inkscape:collect="always"
+       x1="11.75"
+       x2="37.625"
+       xlink:href="#linearGradient5068"
+       y1="14.1875"
+       y2="14.1875" />
+    <linearGradient
+       gradientTransform="translate(0,5.625)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5064"
+       inkscape:collect="always"
+       x1="30.875"
+       x2="15.625"
+       xlink:href="#linearGradient5058"
+       y1="19.4596"
+       y2="19.0846" />
+    <radialGradient
+       cx="23.25"
+       cy="37.75"
+       fx="23.25"
+       fy="37.75"
+       gradientTransform="matrix(1,0,0,0.420168,0,21.88866)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5054"
+       inkscape:collect="always"
+       r="14.875"
+       xlink:href="#linearGradient5048" />
+    <linearGradient
+       gradientTransform="translate(0,5.625)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5042"
+       inkscape:collect="always"
+       x1="15.375"
+       x2="34.250416"
+       xlink:href="#linearGradient5036"
+       y1="26.0846"
+       y2="26.0846" />
+    <linearGradient
+       id="linearGradient5036">
+      <stop
+         id="stop5038"
+         offset="0"
+         style="stop-color:#f5f5f5;stop-opacity:0.09;" />
+      <stop
+         id="stop5044"
+         offset="0.2631579"
+         style="stop-color:#ffffff;stop-opacity:0.89999998;" />
+      <stop
+         id="stop5088"
+         offset="0.74792242"
+         style="stop-color:#c7c7c7;stop-opacity:0.46000001;" />
+      <stop
+         id="stop5040"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0.78039217;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5058">
+      <stop
+         id="stop5060"
+         offset="0"
+         style="stop-color:#959791;stop-opacity:1;" />
+      <stop
+         id="stop5066"
+         offset="0.5"
+         style="stop-color:#f8f8f8;stop-opacity:1;" />
+      <stop
+         id="stop3430"
+         offset="1"
+         style="stop-color:#8c8c8c;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5068">
+      <stop
+         id="stop5070"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop5078"
+         offset="0.32894737"
+         style="stop-color:#ffffff;stop-opacity:0.69;" />
+      <stop
+         id="stop5076"
+         offset="0.65789473"
+         style="stop-color:#c2c2c2;stop-opacity:0.34;" />
+      <stop
+         id="stop5072"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3414">
+      <stop
+         id="stop3416"
+         offset="0"
+         style="stop-color:#ffd1d1;stop-opacity:1;" />
+      <stop
+         id="stop3418"
+         offset="0.5"
+         style="stop-color:#ff1d1d;stop-opacity:1;" />
+      <stop
+         id="stop3420"
+         offset="1"
+         style="stop-color:#6f0000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3408">
+      <stop
+         id="stop3410"
+         offset="0"
+         style="stop-color:#c1c1c1;stop-opacity:1;" />
+      <stop
+         id="stop3412"
+         offset="1"
+         style="stop-color:#acacac;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2984"
+       inkscape:collect="always">
+      <stop
+         id="stop2986"
+         offset="0"
+         style="stop-color:#e7e2b8;stop-opacity:1;" />
+      <stop
+         id="stop2988"
+         offset="1"
+         style="stop-color:#e7e2b8;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3399">
+      <stop
+         id="stop3401"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop3403"
+         offset="1"
+         style="stop-color:#c9c9c9;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6395"
+       inkscape:collect="always">
+      <stop
+         id="stop6397"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop6399"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9910">
+      <stop
+         id="stop9912"
+         offset="0"
+         style="stop-color:#729fcf;stop-opacity:1;" />
+      <stop
+         id="stop9918"
+         offset="0.31578946"
+         style="stop-color:#a5bfda;stop-opacity:1;" />
+      <stop
+         id="stop9914"
+         offset="1"
+         style="stop-color:#376ca4;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9920">
+      <stop
+         id="stop9922"
+         offset="0"
+         style="stop-color:#5b90c8;stop-opacity:1;" />
+      <stop
+         id="stop9924"
+         offset="0.31578946"
+         style="stop-color:#8fb0d1;stop-opacity:1;" />
+      <stop
+         id="stop9926"
+         offset="1"
+         style="stop-color:#34679d;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9952"
+       inkscape:collect="always">
+      <stop
+         id="stop9954"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop9956"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="24.8125"
+       cy="39.125"
+       fx="24.8125"
+       fy="39.125"
+       gradientTransform="matrix(1,0,0,0.374558,0,24.47041)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2746"
+       inkscape:collect="always"
+       r="17.6875"
+       xlink:href="#linearGradient3041" />
+    <radialGradient
+       cx="24.8125"
+       cy="39.125"
+       fx="24.8125"
+       fy="39.125"
+       gradientTransform="matrix(1,0,0,0.374558,0,24.47041)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2748"
+       inkscape:collect="always"
+       r="17.6875"
+       xlink:href="#linearGradient3041" />
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.6871,470.17853)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2750"
+       inkscape:collect="always"
+       x1="19.648342"
+       x2="20.631224"
+       xlink:href="#linearGradient3049"
+       y1="42.253601"
+       y2="6.7758031" />
+    <linearGradient
+       gradientTransform="matrix(0.8782699,0,0,0.8782699,1049.7965,-403.53398)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2752"
+       inkscape:collect="always"
+       x1="50.152931"
+       x2="25.291086"
+       xlink:href="#linearGradient3061"
+       y1="-3.6324477"
+       y2="-4.3002653" />
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.9976,470.79956)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2754"
+       inkscape:collect="always"
+       x1="38.227654"
+       x2="37.53537"
+       xlink:href="#linearGradient3077"
+       y1="13.602527"
+       y2="6.6285896" />
+    <linearGradient
+       gradientTransform="translate(1019.1501,465.21085)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2756"
+       inkscape:collect="always"
+       x1="31.177404"
+       x2="40.859177"
+       xlink:href="#linearGradient2250"
+       y1="19.821514"
+       y2="9.6568537" />
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.6871,470.17853)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2758"
+       inkscape:collect="always"
+       x1="9.7503242"
+       x2="16.915297"
+       xlink:href="#linearGradient3087"
+       y1="32.28376"
+       y2="39.443218" />
+    <linearGradient
+       gradientTransform="matrix(1.007254,-0.02636526,0.02636526,1.007254,1020.7435,465.29004)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2760"
+       inkscape:collect="always"
+       x1="12.004697"
+       x2="10.650805"
+       xlink:href="#linearGradient2257"
+       y1="35.688461"
+       y2="33.194965" />
+    <linearGradient
+       gradientTransform="matrix(0.878099,-0.0173237,0.0173237,0.878099,1021.3138,469.27875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2762"
+       inkscape:collect="always"
+       x1="14.017542"
+       x2="15.415793"
+       xlink:href="#linearGradient2265"
+       y1="36.942543"
+       y2="38.268368" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3603"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3605"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3607"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3611"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3613"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3617"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3619"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3623"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3625"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3629"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3631"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3635"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3637"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3641"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3643"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3647"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3649"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3653"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3655"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3659"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3663"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3665"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3669"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3673"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3675"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3679"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3681"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="11.319205"
+       cy="22.454971"
+       fx="11.319205"
+       fy="22.454971"
+       gradientTransform="matrix(0,-8.4690288,10.248644,0,454.76267,899.88684)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3755"
+       inkscape:collect="always"
+       r="16.9562"
+       xlink:href="#linearGradient2304" />
+    <radialGradient
+       cx="24.53788"
+       cy="0.40010813"
+       fx="24.53788"
+       fy="0.40010813"
+       gradientTransform="matrix(0,-20.561511,15.647805,0,476.46787,1144.4736)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3757"
+       inkscape:collect="always"
+       r="17.171415"
+       xlink:href="#linearGradient8650" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5446"
+       x1="43.944302"
+       x2="411.3941"
+       y1="733.39258"
+       y2="425.06561">
+      <stop
+         id="stop12"
+         offset="0.0562"
+         style="stop-color:#003F90" />
+      <stop
+         id="stop14"
+         offset="0.5674"
+         style="stop-color:#0093D2" />
+      <stop
+         id="stop16"
+         offset="0.9551"
+         style="stop-color:#EDF3F7" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5452"
+       x1="43.943802"
+       x2="411.39359"
+       y1="733.39258"
+       y2="425.06561">
+      <stop
+         id="stop21"
+         offset="0.0562"
+         style="stop-color:#003F90" />
+      <stop
+         id="stop23"
+         offset="0.5674"
+         style="stop-color:#0093D2" />
+      <stop
+         id="stop25"
+         offset="0.9551"
+         style="stop-color:#EDF3F7" />
+    </linearGradient>
+    <radialGradient
+       cx="12.57571"
+       cy="67.501709"
+       fx="12.57571"
+       fy="67.501709"
+       gradientTransform="scale(1.925808,0.519262)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient35088"
+       inkscape:collect="always"
+       r="8.7662792"
+       xlink:href="#linearGradient2454" />
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35090"
+       inkscape:collect="always"
+       x1="12.88666"
+       x2="20.087339"
+       xlink:href="#linearGradient10591"
+       y1="4.3602757"
+       y2="18.414022" />
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35092"
+       inkscape:collect="always"
+       x1="19.250618"
+       x2="16.198252"
+       xlink:href="#linearGradient11335"
+       y1="9.6635771"
+       y2="6.0396547" />
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,21.67589)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35094"
+       inkscape:collect="always"
+       x1="6.72682"
+       x2="40.938126"
+       xlink:href="#linearGradient2092"
+       y1="32.161697"
+       y2="32.161697" />
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,22.22637)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35096"
+       inkscape:collect="always"
+       x1="31.630468"
+       x2="8.6713638"
+       xlink:href="#linearGradient11327"
+       y1="41.791817"
+       y2="25.793524" />
+    <linearGradient
+       gradientTransform="matrix(0.453445,0,0,0.470026,30.17248,24.3894)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35098"
+       inkscape:collect="always"
+       x1="10.907269"
+       x2="30.875446"
+       xlink:href="#linearGradient9845"
+       y1="25.002281"
+       y2="36.127281" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.461806,23.89003,23.47875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35100"
+       inkscape:collect="always"
+       x1="14.217941"
+       x2="17.859085"
+       xlink:href="#linearGradient12071"
+       y1="6.8795347"
+       y2="3.9566603" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.490236,34.67523,22.83397)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35102"
+       inkscape:collect="always"
+       x1="11.5"
+       x2="11.779029"
+       xlink:href="#linearGradient12071"
+       y1="20.579729"
+       y2="14.259961" />
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35635"
+       inkscape:collect="always"
+       x1="12.88666"
+       x2="20.087339"
+       xlink:href="#linearGradient10591"
+       y1="4.3602757"
+       y2="18.414022" />
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35637"
+       inkscape:collect="always"
+       x1="19.250618"
+       x2="16.198252"
+       xlink:href="#linearGradient11335"
+       y1="9.6635771"
+       y2="6.0396547" />
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,21.67589)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35639"
+       inkscape:collect="always"
+       x1="6.72682"
+       x2="40.938126"
+       xlink:href="#linearGradient2092"
+       y1="32.161697"
+       y2="32.161697" />
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,22.22637)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35641"
+       inkscape:collect="always"
+       x1="31.630468"
+       x2="8.6713638"
+       xlink:href="#linearGradient11327"
+       y1="41.791817"
+       y2="25.793524" />
+    <linearGradient
+       gradientTransform="matrix(0.453445,0,0,0.470026,30.17248,24.3894)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35643"
+       inkscape:collect="always"
+       x1="10.907269"
+       x2="30.875446"
+       xlink:href="#linearGradient9845"
+       y1="25.002281"
+       y2="36.127281" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.461806,23.89003,23.47875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35645"
+       inkscape:collect="always"
+       x1="14.217941"
+       x2="17.859085"
+       xlink:href="#linearGradient12071"
+       y1="6.8795347"
+       y2="3.9566603" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.490236,34.67523,22.83397)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35647"
+       inkscape:collect="always"
+       x1="11.5"
+       x2="11.779029"
+       xlink:href="#linearGradient12071"
+       y1="20.579729"
+       y2="14.259961" />
+    <linearGradient
+       gradientTransform="matrix(31.442825,0,0,15.721413,163.64608,98.870782)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35650"
+       inkscape:collect="always"
+       x1="11.5"
+       x2="11.779029"
+       xlink:href="#linearGradient12071"
+       y1="20.579729"
+       y2="14.259961" />
+    <linearGradient
+       gradientTransform="matrix(31.442825,0,0,14.809689,-182.22526,119.54828)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35653"
+       inkscape:collect="always"
+       x1="14.217941"
+       x2="17.859085"
+       xlink:href="#linearGradient12071"
+       y1="6.8795347"
+       y2="3.9566603" />
+    <linearGradient
+       gradientTransform="matrix(14.541559,0,0,15.073297,19.247073,148.75198)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35656"
+       inkscape:collect="always"
+       x1="10.907269"
+       x2="30.875446"
+       xlink:href="#linearGradient9845"
+       y1="25.002281"
+       y2="36.127281" />
+    <linearGradient
+       gradientTransform="matrix(15.721413,0,0,17.134408,-9.2895887,61.732234)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35659"
+       inkscape:collect="always"
+       x1="6.72682"
+       x2="40.938126"
+       xlink:href="#linearGradient2092"
+       y1="32.161697"
+       y2="32.161697" />
+    <linearGradient
+       gradientTransform="matrix(15.721413,0,0,17.134408,-9.2895887,79.385615)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35661"
+       inkscape:collect="always"
+       x1="31.630468"
+       x2="8.6713638"
+       xlink:href="#linearGradient11327"
+       y1="41.791817"
+       y2="25.793524" />
+    <linearGradient
+       gradientTransform="matrix(15.401043,0,0,15.948654,-11.070064,104.56497)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35664"
+       inkscape:collect="always"
+       x1="12.88666"
+       x2="20.087339"
+       xlink:href="#linearGradient10591"
+       y1="4.3602757"
+       y2="18.414022" />
+    <linearGradient
+       gradientTransform="matrix(15.401043,0,0,15.948654,-11.070064,104.56497)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35666"
+       inkscape:collect="always"
+       x1="19.250618"
+       x2="16.198252"
+       xlink:href="#linearGradient11335"
+       y1="9.6635771"
+       y2="6.0396547" />
+  </defs>
+  <sodipodi:namedview
+     bordercolor="#666666"
+     borderopacity="1.0"
+     id="base"
+     inkscape:current-layer="layer1"
+     inkscape:cx="-27.394092"
+     inkscape:cy="44.67459"
+     inkscape:document-units="px"
+     inkscape:guide-bbox="true"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:window-height="1000"
+     inkscape:window-maximized="1"
+     inkscape:window-width="1280"
+     inkscape:window-x="1280"
+     inkscape:window-y="0"
+     inkscape:zoom="2.2083652"
+     pagecolor="#ffffff"
+     showgrid="false"
+     showguides="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0">
+    <sodipodi:guide
+       id="guide2280"
+       orientation="horizontal"
+       position="-330.12016,63.71184" />
+    <sodipodi:guide
+       id="guide2282"
+       orientation="vertical"
+       position="4.523254,-481.5065" />
+    <sodipodi:guide
+       id="guide2284"
+       orientation="vertical"
+       position="382.41989,-481.5065" />
+    <sodipodi:guide
+       id="guide2286"
+       orientation="horizontal"
+       position="-330.12016,-348.33208" />
+    <sodipodi:guide
+       id="guide2491"
+       orientation="horizontal"
+       position="-330.12016,418.84362" />
+    <sodipodi:guide
+       id="guide2495"
+       orientation="vertical"
+       position="84.200254,-481.5065" />
+    <sodipodi:guide
+       id="guide2497"
+       orientation="horizontal"
+       position="-330.12016,-326.70547" />
+    <sodipodi:guide
+       id="guide3687"
+       orientation="horizontal"
+       position="-330.12016,455.2674" />
+    <sodipodi:guide
+       id="guide3689"
+       orientation="vertical"
+       position="-396.13824,-481.5065" />
+    <sodipodi:guide
+       id="guide3691"
+       orientation="horizontal"
+       position="-330.12016,-393.8618" />
+    <sodipodi:guide
+       id="guide3693"
+       orientation="vertical"
+       position="455.26743,-481.5065" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" />
+        <dc:title>lock</dc:title>
+        <dc:date>July 2008</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Beate Kaspar</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title>Beate Kaspar</dc:title>
+          </cc:Agent>
+        </dc:rights>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>RRZE</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>lock</rdf:li>
+            <rdf:li>security</rdf:li>
+            <rdf:li>encryption</rdf:li>
+            <rdf:li>vpn</rdf:li>
+            <rdf:li>secure</rdf:li>
+            <rdf:li>safe</rdf:li>
+            <rdf:li>SSL</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <dc:contributor>
+          <cc:Agent>
+            <dc:title>Hendrik Eggers, Franziska Sponsel</dc:title>
+          </cc:Agent>
+        </dc:contributor>
+        <dc:description>uses <http://webcvs.freedesktop.org/tango/tango-icon-theme/scalable/actions/system-lock-screen.svg></dc:description>
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/by-sa/3.0/">
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Notice" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Attribution" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#ShareAlike" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Ebene 1"
+     transform="translate(-330.12016,-510.85568)">
+    <g
+       id="g35677"
+       transform="matrix(0.07058824,0,0,0.07058824,334.69991,502.67763)">
+      <g
+         id="g35668">
+        <rect
+           height="850"
+           id="rect2300"
+           style="fill:none;stroke:none"
+           width="850"
+           x="-64.879845"
+           y="115.85568" />
+        <path
+           d="m 41.10058,35.051105 c 0,2.514001 -7.558406,4.552001 -16.882173,4.552001 -9.323767,0 -16.8821739,-2.038 -16.8821739,-4.552001 0,-2.514 7.5584069,-4.552 16.8821739,-4.552 9.323767,0 16.882173,2.038 16.882173,4.552 z"
+           id="path2452"
+           sodipodi:cx="24.218407"
+           sodipodi:cy="35.051105"
+           sodipodi:rx="16.882174"
+           sodipodi:ry="4.552"
+           sodipodi:type="arc"
+           style="opacity:0.50857143;fill:url(#radialGradient35088);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+           transform="matrix(22.64864,0,0,17.97418,-183.8862,229.3831)" />
+        <path
+           d="m 149.64097,462.77119 0,-122.55827 c 0,-125.51812 84.12878,-182.74178 209.22253,-181.17424 125.77437,1.56753 208.8138,56.17792 208.8138,183.17269 l -0.20845,120.55982 -76.73795,0 0,-88.997 c -2.06012,-30.8929 8.56244,-134.37251 -130.98679,-134.37251 -140.51178,0 -132.25265,103.8535 -131.74913,134.98757 l 0,88.38194 -78.35452,0 z"
+           id="path2086"
+           sodipodi:nodetypes="cczcccczccc"
+           style="fill:url(#linearGradient35664);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient35666);stroke-width:37.98667145;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+        <rect
+           height="377.42322"
+           id="rect1314"
+           rx="84.899323"
+           ry="73.867165"
+           style="fill:url(#linearGradient35659);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient35661);stroke-width:37.98667526;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           width="550.18536"
+           x="92.865761"
+           y="464.39069" />
+        <rect
+           height="302.70956"
+           id="rect6903"
+           rx="46.140316"
+           ry="46.140354"
+           style="fill:none;stroke:url(#linearGradient35656);stroke-width:37.98670959;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.60109289;stroke-dasharray:none;stroke-dashoffset:0"
+           width="480.31729"
+           x="127.86926"
+           y="501.4451" />
+        <path
+           d="m 163.64595,347.00672 c 4.16875,-92.93931 30.00738,-162.92832 202.36234,-168.86158 -111.60142,15.72802 -172.30435,48.31298 -172.30435,145.47854 0,0 -2.78392,120.42879 -2.78392,120.42879 l -27.27407,0 0,-97.04575 z"
+           id="rect11343"
+           sodipodi:nodetypes="ccsccc"
+           style="fill:url(#linearGradient35653);fill-opacity:1;fill-rule:evenodd;stroke:none"
+           inkscape:connector-curvature="0" />
+        <rect
+           height="157.21413"
+           id="rect1345"
+           rx="0"
+           ry="0"
+           style="fill:url(#linearGradient35650);fill-opacity:1;fill-rule:evenodd;stroke:none"
+           width="31.442825"
+           x="509.51706"
+           y="287.52774" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/lock_locked_unpreviledged.svg b/lib/taurus/qt/qtgui/resource/extra-icons/lock_locked_unpreviledged.svg
new file mode 100644
index 0000000..43e1b60
--- /dev/null
+++ b/lib/taurus/qt/qtgui/resource/extra-icons/lock_locked_unpreviledged.svg
@@ -0,0 +1,2985 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   height="60.000004"
+   id="svg2"
+   inkscape:export-xdpi="76.235291"
+   inkscape:export-ydpi="76.235291"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:version="0.48.1 r9760"
+   sodipodi:version="0.32"
+   version="1.1"
+   width="60.000004"
+   sodipodi:docname="lock_locked.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       id="perspective20643"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2454"
+       inkscape:collect="always">
+      <stop
+         id="stop2456"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop2458"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="12.57571"
+       cy="67.501709"
+       fx="12.57571"
+       fy="67.501709"
+       gradientTransform="scale(1.925808,0.519262)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2460"
+       inkscape:collect="always"
+       r="8.7662792"
+       xlink:href="#linearGradient2454" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.490236,34.67523,22.83397)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1898"
+       inkscape:collect="always"
+       x1="11.5"
+       x2="11.779029"
+       xlink:href="#linearGradient12071"
+       y1="20.579729"
+       y2="14.259961" />
+    <linearGradient
+       id="linearGradient12071">
+      <stop
+         id="stop12073"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop12075"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.461806,23.89003,23.47875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1896"
+       inkscape:collect="always"
+       x1="14.217941"
+       x2="17.859085"
+       xlink:href="#linearGradient12071"
+       y1="6.8795347"
+       y2="3.9566603" />
+    <linearGradient
+       id="linearGradient9845">
+      <stop
+         id="stop9847"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop9849"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.49484536;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.453445,0,0,0.470026,30.17248,24.3894)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1894"
+       inkscape:collect="always"
+       x1="10.907269"
+       x2="30.875446"
+       xlink:href="#linearGradient9845"
+       y1="25.002281"
+       y2="36.127281" />
+    <linearGradient
+       id="linearGradient11327">
+      <stop
+         id="stop11329"
+         offset="0"
+         style="stop-color:#8f5902;stop-opacity:1;" />
+      <stop
+         id="stop11331"
+         offset="1"
+         style="stop-color:#c17d11;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,22.22637)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1892"
+       inkscape:collect="always"
+       x1="31.630468"
+       x2="8.6713638"
+       xlink:href="#linearGradient11327"
+       y1="41.791817"
+       y2="25.793524" />
+    <linearGradient
+       id="linearGradient2092">
+      <stop
+         id="stop2094"
+         offset="0"
+         style="stop-color:#fce94f;stop-opacity:1;" />
+      <stop
+         id="stop27163"
+         offset="0.20999999"
+         style="stop-color:#ffec41;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2293"
+         offset="0.83999997"
+         style="stop-color:#edd400;stop-opacity:1;" />
+      <stop
+         id="stop2100"
+         offset="1"
+         style="stop-color:#c4a00f;stop-opacity:0.94117647;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,21.67589)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1890"
+       inkscape:collect="always"
+       x1="6.72682"
+       x2="40.938126"
+       xlink:href="#linearGradient2092"
+       y1="32.161697"
+       y2="32.161697" />
+    <linearGradient
+       id="linearGradient11335">
+      <stop
+         id="stop11337"
+         offset="0"
+         style="stop-color:#555753;stop-opacity:1;" />
+      <stop
+         id="stop11339"
+         offset="1"
+         style="stop-color:#888a85;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1888"
+       inkscape:collect="always"
+       x1="19.250618"
+       x2="16.198252"
+       xlink:href="#linearGradient11335"
+       y1="9.6635771"
+       y2="6.0396547" />
+    <linearGradient
+       id="linearGradient10591">
+      <stop
+         id="stop10593"
+         offset="0"
+         style="stop-color:#babdb6;stop-opacity:1;" />
+      <stop
+         id="stop10599"
+         offset="0.5"
+         style="stop-color:#eeeeec;stop-opacity:1;" />
+      <stop
+         id="stop10595"
+         offset="1"
+         style="stop-color:#babdb6;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1886"
+       inkscape:collect="always"
+       x1="12.88666"
+       x2="20.087339"
+       xlink:href="#linearGradient10591"
+       y1="4.3602757"
+       y2="18.414022" />
+    <linearGradient
+       id="linearGradient11494">
+      <stop
+         id="stop11496"
+         offset="0"
+         style="stop-color:#2946ef;stop-opacity:1;" />
+      <stop
+         id="stop11498"
+         offset="1"
+         style="stop-color:#2929ef;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11520">
+      <stop
+         id="stop11522"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop11524"
+         offset="1.0000000"
+         style="stop-color:#dcdcdc;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       cx="24.44569"
+       cy="35.87817"
+       fx="24.44569"
+       fy="35.87817"
+       gradientTransform="matrix(35.895002,0,0,35.895002,-502.54107,-556.8092)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1366"
+       inkscape:collect="always"
+       r="20.530962"
+       xlink:href="#linearGradient11520" />
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6719"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6717"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <linearGradient
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6715"
+       inkscape:collect="always"
+       x1="302.85715"
+       x2="302.85715"
+       xlink:href="#linearGradient5048"
+       y1="366.64789"
+       y2="609.50507" />
+    <linearGradient
+       id="linearGradient4747">
+      <stop
+         id="stop4749"
+         offset="0"
+         style="stop-color:#16d277;stop-opacity:1;" />
+      <stop
+         id="stop4751"
+         offset="1"
+         style="stop-color:#069a4a;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4741">
+      <stop
+         id="stop4743"
+         offset="0"
+         style="stop-color:#16d2c3;stop-opacity:1;" />
+      <stop
+         id="stop4745"
+         offset="1"
+         style="stop-color:#069a92;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8650"
+       inkscape:collect="always">
+      <stop
+         id="stop8652"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop8654"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2304">
+      <stop
+         id="stop2306"
+         offset="0"
+         style="stop-color:#73d216" />
+      <stop
+         id="stop2308"
+         offset="1.0000000"
+         style="stop-color:#4e9a06" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient1789">
+      <stop
+         id="stop1790"
+         offset="0"
+         style="stop-color:#a0a0a0;stop-opacity:1;" />
+      <stop
+         id="stop1791"
+         offset="1"
+         style="stop-color:#a8a8a8;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient137">
+      <stop
+         id="stop138"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.70059878;" />
+      <stop
+         id="stop139"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9766">
+      <stop
+         id="stop9768"
+         offset="0"
+         style="stop-color:#6194cb;stop-opacity:1;" />
+      <stop
+         id="stop9770"
+         offset="1"
+         style="stop-color:#729fcf;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient148">
+      <stop
+         id="stop149"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.13402061;" />
+      <stop
+         id="stop150"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.051546391;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient335">
+      <stop
+         id="stop336"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop337"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(39.086521,0,0,7.6340894,-33.337669,99.207026)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2813"
+       inkscape:collect="always"
+       x1="10.496115"
+       x2="10.219901"
+       xlink:href="#linearGradient2803"
+       y1="93.338043"
+       y2="84.287079" />
+    <linearGradient
+       gradientTransform="matrix(16.544137,0,0,17.757444,-33.337669,104.44258)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2100"
+       inkscape:collect="always"
+       x1="6.5871811"
+       x2="14.511404"
+       xlink:href="#linearGradient2094"
+       y1="22.132999"
+       y2="22.132999" />
+    <linearGradient
+       gradientTransform="matrix(4.3875865,0,0,64.946869,-32.890582,116.9616)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2801"
+       inkscape:collect="always"
+       x1="35.433037"
+       x2="41.219128"
+       xlink:href="#linearGradient2795"
+       y1="4.9530048"
+       y2="4.9530048" />
+    <linearGradient
+       id="linearGradient2116"
+       inkscape:collect="always">
+      <stop
+         id="stop2118"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2120"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(17.713207,0,0,16.536418,-50.611543,100.38611)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2112"
+       inkscape:collect="always"
+       x1="73.361984"
+       x2="-2.7582901"
+       xlink:href="#linearGradient2116"
+       y1="26.652197"
+       y2="21.270376" />
+    <radialGradient
+       cx="55"
+       cy="125"
+       fx="55"
+       fy="125"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient278"
+       inkscape:collect="always"
+       r="14.375"
+       xlink:href="#linearGradient12512" />
+    <linearGradient
+       id="linearGradient4228">
+      <stop
+         id="stop4230"
+         offset="0.0000000"
+         style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4232"
+         offset="1.0000000"
+         style="stop-color:#9f9f9f;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4244">
+      <stop
+         id="stop4246"
+         offset="0.0000000"
+         style="stop-color:#e4e4e4;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4248"
+         offset="1.0000000"
+         style="stop-color:#d3d3d3;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4184">
+      <stop
+         id="stop4186"
+         offset="0.0000000"
+         style="stop-color:#838383;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4188"
+         offset="1.0000000"
+         style="stop-color:#bbbbbb;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4274">
+      <stop
+         id="stop4276"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.25490198;" />
+      <stop
+         id="stop4278"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2555">
+      <stop
+         id="stop2557"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2561"
+         offset="0.50000000"
+         style="stop-color:#e6e6e6;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2563"
+         offset="0.75000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2565"
+         offset="0.84166664"
+         style="stop-color:#e1e1e1;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2559"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12582">
+      <stop
+         id="stop12584"
+         offset="0"
+         style="stop-color:#d23d21;stop-opacity:1;" />
+      <stop
+         id="stop12586"
+         offset="0.25709054"
+         style="stop-color:#e9ca23;stop-opacity:1;" />
+      <stop
+         id="stop12588"
+         offset="0.5655992"
+         style="stop-color:#e98d47;stop-opacity:1;" />
+      <stop
+         id="stop12590"
+         offset="1"
+         style="stop-color:#e9c33e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2877">
+      <stop
+         id="stop2879"
+         offset="0"
+         style="stop-color:#75507b;stop-opacity:1;" />
+      <stop
+         id="stop2885"
+         offset="0.25709054"
+         style="stop-color:#a984af;stop-opacity:1;" />
+      <stop
+         id="stop2887"
+         offset="0.5655992"
+         style="stop-color:#513755;stop-opacity:1;" />
+      <stop
+         id="stop2881"
+         offset="1"
+         style="stop-color:#875c8e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2865">
+      <stop
+         id="stop2867"
+         offset="0"
+         style="stop-color:#73d216;stop-opacity:1;" />
+      <stop
+         id="stop11581"
+         offset="0.25568181"
+         style="stop-color:#9ced4b;stop-opacity:1;" />
+      <stop
+         id="stop11583"
+         offset="0.59400827"
+         style="stop-color:#64b813;stop-opacity:1;" />
+      <stop
+         id="stop2869"
+         offset="1"
+         style="stop-color:#8eea34;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2913">
+      <stop
+         id="stop2915"
+         offset="0"
+         style="stop-color:white;stop-opacity:0.43877551;" />
+      <stop
+         id="stop2921"
+         offset="0.5"
+         style="stop-color:white;stop-opacity:1;" />
+      <stop
+         id="stop2917"
+         offset="1"
+         style="stop-color:white;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6932">
+      <stop
+         id="stop6934"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop6936"
+         offset="1"
+         style="stop-color:#aeb2e7;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4162">
+      <stop
+         id="stop4164"
+         offset="0.0000000"
+         style="stop-color:#f79403;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4170"
+         offset="0.18691589"
+         style="stop-color:#fdb343;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4172"
+         offset="0.43008122"
+         style="stop-color:#fdb74f;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4166"
+         offset="1.0000000"
+         style="stop-color:#8f5601;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4206">
+      <stop
+         id="stop4208"
+         offset="0"
+         style="stop-color:#010f7d;stop-opacity:1;" />
+      <stop
+         id="stop4210"
+         offset="1"
+         style="stop-color:#5669c4;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4134">
+      <stop
+         id="stop4136"
+         offset="0.0000000"
+         style="stop-color:#7e807a;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4148"
+         offset="0.25000000"
+         style="stop-color:#babbb8;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4142"
+         offset="0.50000000"
+         style="stop-color:#a5a6a3;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4138"
+         offset="1.0000000"
+         style="stop-color:#333432;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4126">
+      <stop
+         id="stop4128"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4130"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.16494845;" />
+    </linearGradient>
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1558"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1554"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1550"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1546"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1542"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1538"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1536"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1532"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1528"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1526"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1522"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1518"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1514"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1510"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1506"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1502"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1498"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1494"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1490"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1486"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1482"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1478"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1474"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1470"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1466"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1462"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <linearGradient
+       id="linearGradient4750">
+      <stop
+         id="stop4752"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop4758"
+         offset="0.37931034"
+         style="stop-color:#fefefe;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4754"
+         offset="1.0000000"
+         style="stop-color:#1d1d1d;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1460"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <linearGradient
+       id="linearGradient3962">
+      <stop
+         id="stop3964"
+         offset="0.0000000"
+         style="stop-color:#d3e9ff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4134"
+         offset="0.15517241"
+         style="stop-color:#d3e9ff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4346"
+         offset="0.75000000"
+         style="stop-color:#4074ae;stop-opacity:1.0000000;" />
+      <stop
+         id="stop3966"
+         offset="1.0000000"
+         style="stop-color:#36486c;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2265"
+       inkscape:collect="always">
+      <stop
+         id="stop2267"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop2269"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.878099,-0.0173237,0.0173237,0.878099,1021.3138,469.27875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2271"
+       inkscape:collect="always"
+       x1="14.017542"
+       x2="15.415793"
+       xlink:href="#linearGradient2265"
+       y1="36.942543"
+       y2="38.268368" />
+    <linearGradient
+       id="linearGradient2257"
+       inkscape:collect="always">
+      <stop
+         id="stop2259"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2261"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(1.007254,-0.02636526,0.02636526,1.007254,1020.7435,465.29004)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2263"
+       inkscape:collect="always"
+       x1="12.004697"
+       x2="10.650805"
+       xlink:href="#linearGradient2257"
+       y1="35.688461"
+       y2="33.194965" />
+    <linearGradient
+       id="linearGradient3087">
+      <stop
+         id="stop3089"
+         offset="0"
+         style="stop-color:#3465a4;stop-opacity:1;" />
+      <stop
+         id="stop3095"
+         offset="0"
+         style="stop-color:#9fbce1;stop-opacity:1;" />
+      <stop
+         id="stop2242"
+         offset="0"
+         style="stop-color:#6b95ca;stop-opacity:1;" />
+      <stop
+         id="stop2244"
+         offset="0.75"
+         style="stop-color:#3d6aa5;stop-opacity:1;" />
+      <stop
+         id="stop3091"
+         offset="1"
+         style="stop-color:#386eb4;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.6871,470.17853)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3093"
+       inkscape:collect="always"
+       x1="9.7503242"
+       x2="16.915297"
+       xlink:href="#linearGradient3087"
+       y1="32.28376"
+       y2="39.443218" />
+    <linearGradient
+       id="linearGradient2250"
+       inkscape:collect="always">
+      <stop
+         id="stop2252"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2254"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(1019.1501,465.21085)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2256"
+       inkscape:collect="always"
+       x1="31.177404"
+       x2="40.859177"
+       xlink:href="#linearGradient2250"
+       y1="19.821514"
+       y2="9.6568537" />
+    <linearGradient
+       id="linearGradient3077">
+      <stop
+         id="stop3079"
+         offset="0"
+         style="stop-color:#98a0a9;stop-opacity:1;" />
+      <stop
+         id="stop3081"
+         offset="1"
+         style="stop-color:#c3d0dd;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.9976,470.79956)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3083"
+       inkscape:collect="always"
+       x1="38.227654"
+       x2="37.53537"
+       xlink:href="#linearGradient3077"
+       y1="13.602527"
+       y2="6.6285896" />
+    <linearGradient
+       id="linearGradient3061">
+      <stop
+         id="stop3063"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop3065"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.8782699,0,0,0.8782699,1049.7965,-403.53398)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3067"
+       inkscape:collect="always"
+       x1="50.152931"
+       x2="25.291086"
+       xlink:href="#linearGradient3061"
+       y1="-3.6324477"
+       y2="-4.3002653" />
+    <linearGradient
+       id="linearGradient3049">
+      <stop
+         id="stop3051"
+         offset="0"
+         style="stop-color:#b6b6b6;stop-opacity:1;" />
+      <stop
+         id="stop2262"
+         offset="0.5"
+         style="stop-color:#f2f2f2;stop-opacity:1;" />
+      <stop
+         id="stop2264"
+         offset="0.67612958"
+         style="stop-color:#fafafa;stop-opacity:1;" />
+      <stop
+         id="stop2268"
+         offset="0.84051722"
+         style="stop-color:#d8d8d8;stop-opacity:1;" />
+      <stop
+         id="stop2266"
+         offset="0.875"
+         style="stop-color:#f2f2f2;stop-opacity:1;" />
+      <stop
+         id="stop3053"
+         offset="1"
+         style="stop-color:#dbdbdb;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.6871,470.17853)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3055"
+       inkscape:collect="always"
+       x1="19.648342"
+       x2="20.631224"
+       xlink:href="#linearGradient3049"
+       y1="42.253601"
+       y2="6.7758031" />
+    <radialGradient
+       cx="24.8125"
+       cy="39.125"
+       fx="24.8125"
+       fy="39.125"
+       gradientTransform="matrix(1,0,0,0.374558,0,24.47041)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3047"
+       inkscape:collect="always"
+       r="17.6875"
+       xlink:href="#linearGradient3041" />
+    <linearGradient
+       id="linearGradient3041"
+       inkscape:collect="always">
+      <stop
+         id="stop3043"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop3045"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="24.8125"
+       cy="39.125"
+       fx="24.8125"
+       fy="39.125"
+       gradientTransform="matrix(1,0,0,0.374558,0,24.47041)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2260"
+       inkscape:collect="always"
+       r="17.6875"
+       xlink:href="#linearGradient3041" />
+    <linearGradient
+       gradientTransform="translate(131.91072,132.23618)"
+       gradientUnits="userSpaceOnUse"
+       id="SVGID_1_"
+       x1="43.944302"
+       x2="411.3941"
+       y1="733.39258"
+       y2="425.06561">
+      <stop
+         id="stop2170"
+         offset="0.0562"
+         style="stop-color:#003F90" />
+      <stop
+         id="stop2172"
+         offset="0.5674"
+         style="stop-color:#0093D2" />
+      <stop
+         id="stop2174"
+         offset="0.9551"
+         style="stop-color:#EDF3F7" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.9169564,0,0,0.9120098,60.201795,153.71221)"
+       gradientUnits="userSpaceOnUse"
+       id="SVGID_2_"
+       x1="43.943802"
+       x2="411.39359"
+       y1="733.39258"
+       y2="425.06561">
+      <stop
+         id="stop2179"
+         offset="0.0562"
+         style="stop-color:#525252;stop-opacity:1;" />
+      <stop
+         id="stop2181"
+         offset="0.56739998"
+         style="stop-color:#8e8e8e;stop-opacity:1;" />
+      <stop
+         id="stop2183"
+         offset="0.9551"
+         style="stop-color:#c9c9c9;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5020"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <linearGradient
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5016"
+       inkscape:collect="always"
+       x1="302.85715"
+       x2="302.85715"
+       xlink:href="#linearGradient5048"
+       y1="366.64789"
+       y2="609.50507" />
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5013"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <linearGradient
+       id="linearGradient2795">
+      <stop
+         id="stop2797"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.068627454;" />
+      <stop
+         id="stop2799"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2803">
+      <stop
+         id="stop2805"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2807"
+         offset="1.0000000"
+         style="stop-color:#cbcbcb;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2094">
+      <stop
+         id="stop2096"
+         offset="0.0000000"
+         style="stop-color:#d6e3f0;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2098"
+         offset="1.0000000"
+         style="stop-color:#95b1cf;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12512">
+      <stop
+         id="stop12513"
+         offset="0"
+         style="stop-color:#eeebc9;stop-opacity:1;" />
+      <stop
+         id="stop12517"
+         offset="1"
+         style="stop-color:#ffd420;stop-opacity:1;" />
+      <stop
+         id="stop12514"
+         offset="1"
+         style="stop-color:#ffec00;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5048">
+      <stop
+         id="stop5050"
+         offset="0"
+         style="stop-color:black;stop-opacity:0;" />
+      <stop
+         id="stop5056"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         id="stop5052"
+         offset="1"
+         style="stop-color:black;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5060"
+       inkscape:collect="always">
+      <stop
+         id="stop5062"
+         offset="0"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         id="stop5064"
+         offset="1"
+         style="stop-color:black;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2994">
+      <stop
+         id="stop2996"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop2998"
+         offset="1"
+         style="stop-color:#c9c9c9;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2974">
+      <stop
+         id="stop2976"
+         offset="0"
+         style="stop-color:#c1c1c1;stop-opacity:1;" />
+      <stop
+         id="stop2978"
+         offset="1"
+         style="stop-color:#acacac;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2966">
+      <stop
+         id="stop2968"
+         offset="0"
+         style="stop-color:#ffd1d1;stop-opacity:1;" />
+      <stop
+         id="stop3006"
+         offset="0.5"
+         style="stop-color:#ff1d1d;stop-opacity:1;" />
+      <stop
+         id="stop2970"
+         offset="1"
+         style="stop-color:#6f0000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2846">
+      <stop
+         id="stop2848"
+         offset="0.0000000"
+         style="stop-color:#8a8a8a;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2850"
+         offset="1.0000000"
+         style="stop-color:#484848;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2366">
+      <stop
+         id="stop2368"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2374"
+         offset="0.50000000"
+         style="stop-color:#ffffff;stop-opacity:0.21904762;" />
+      <stop
+         id="stop2370"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4467">
+      <stop
+         id="stop4469"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop4471"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.24761905;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4454">
+      <stop
+         id="stop4456"
+         offset="0.0000000"
+         style="stop-color:#729fcf;stop-opacity:0.20784314;" />
+      <stop
+         id="stop4458"
+         offset="1.0000000"
+         style="stop-color:#729fcf;stop-opacity:0.67619050;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4440">
+      <stop
+         id="stop4442"
+         offset="0"
+         style="stop-color:#7d7d7d;stop-opacity:1;" />
+      <stop
+         id="stop4448"
+         offset="0.50000000"
+         style="stop-color:#b1b1b1;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4444"
+         offset="1.0000000"
+         style="stop-color:#686868;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       cx="24.306795"
+       cy="42.07798"
+       fx="24.306795"
+       fy="42.07798"
+       gradientTransform="matrix(1,0,0,0.284916,0,30.08928)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4548"
+       inkscape:collect="always"
+       r="15.821514"
+       xlink:href="#linearGradient4542" />
+    <linearGradient
+       id="linearGradient259">
+      <stop
+         id="stop260"
+         offset="0.0000000"
+         style="stop-color:#fafafa;stop-opacity:1.0000000;" />
+      <stop
+         id="stop261"
+         offset="1.0000000"
+         style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient269">
+      <stop
+         id="stop270"
+         offset="0.0000000"
+         style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
+      <stop
+         id="stop271"
+         offset="1.0000000"
+         style="stop-color:#4c4c4c;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       cx="20.892099"
+       cy="114.5684"
+       fx="20.892099"
+       fy="114.5684"
+       gradientUnits="userSpaceOnUse"
+       id="aigrd2"
+       r="5.256">
+      <stop
+         id="stop15566"
+         offset="0"
+         style="stop-color:#F0F0F0" />
+      <stop
+         id="stop15568"
+         offset="1.0000000"
+         style="stop-color:#9a9a9a;stop-opacity:1.0000000;" />
+    </radialGradient>
+    <radialGradient
+       cx="20.892099"
+       cy="64.567902"
+       fx="20.892099"
+       fy="64.567902"
+       gradientUnits="userSpaceOnUse"
+       id="aigrd3"
+       r="5.257">
+      <stop
+         id="stop15573"
+         offset="0"
+         style="stop-color:#F0F0F0" />
+      <stop
+         id="stop15575"
+         offset="1.0000000"
+         style="stop-color:#9a9a9a;stop-opacity:1.0000000;" />
+    </radialGradient>
+    <linearGradient
+       id="linearGradient15662">
+      <stop
+         id="stop15664"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop15666"
+         offset="1.0000000"
+         style="stop-color:#f8f8f8;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4542"
+       inkscape:collect="always">
+      <stop
+         id="stop4544"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop4546"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2659"
+       inkscape:collect="always"
+       x1="302.85715"
+       x2="302.85715"
+       xlink:href="#linearGradient5048"
+       y1="366.64789"
+       y2="609.50507" />
+    <linearGradient
+       id="linearGradient2651">
+      <stop
+         id="stop2653"
+         offset="0"
+         style="stop-color:black;stop-opacity:0;" />
+      <stop
+         id="stop2655"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         id="stop2657"
+         offset="1"
+         style="stop-color:black;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2649"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2641"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2408"
+       inkscape:collect="always"
+       x1="18.935766"
+       x2="53.588623"
+       xlink:href="#linearGradient2402"
+       y1="23.667896"
+       y2="26.649363" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2386"
+       inkscape:collect="always"
+       x1="62.513836"
+       x2="15.984863"
+       xlink:href="#linearGradient2380"
+       y1="36.061237"
+       y2="20.60858" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1501"
+       inkscape:collect="always"
+       x1="46.834816"
+       x2="45.380436"
+       xlink:href="#linearGradient2871"
+       y1="45.264122"
+       y2="50.939667" />
+    <linearGradient
+       id="linearGradient2831">
+      <stop
+         id="stop2833"
+         offset="0"
+         style="stop-color:#1d5e23;stop-opacity:1;" />
+      <stop
+         id="stop2855"
+         offset="0.33333334"
+         style="stop-color:#329652;stop-opacity:1;" />
+      <stop
+         id="stop2835"
+         offset="1"
+         style="stop-color:#83d8ab;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2871"
+       inkscape:collect="always">
+      <stop
+         id="stop2873"
+         offset="0"
+         style="stop-color:#3465a4;stop-opacity:1;" />
+      <stop
+         id="stop2875"
+         offset="1"
+         style="stop-color:#3465a4;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2380">
+      <stop
+         id="stop2382"
+         offset="0"
+         style="stop-color:#b9e7c9;stop-opacity:1;" />
+      <stop
+         id="stop2384"
+         offset="1"
+         style="stop-color:#72cf79;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2402">
+      <stop
+         id="stop2404"
+         offset="0"
+         style="stop-color:#72cf7b;stop-opacity:1;" />
+      <stop
+         id="stop2406"
+         offset="1"
+         style="stop-color:#57c552;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2682">
+      <stop
+         id="stop2684"
+         offset="0"
+         style="stop-color:#3977c3;stop-opacity:1;" />
+      <stop
+         id="stop2686"
+         offset="1"
+         style="stop-color:#89aedc;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2690">
+      <stop
+         id="stop2692"
+         offset="0"
+         style="stop-color:#57be6f;stop-opacity:1;" />
+      <stop
+         id="stop2694"
+         offset="1"
+         style="stop-color:#c4ebca;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5903"
+       inkscape:collect="always"
+       x1="62.513836"
+       x2="15.984863"
+       xlink:href="#linearGradient2380"
+       y1="36.061237"
+       y2="20.60858" />
+    <linearGradient
+       gradientTransform="matrix(-6.0935847,-5.1483414,-5.1483414,6.0935847,846.16404,624.52042)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5908"
+       inkscape:collect="always"
+       x1="62.513836"
+       x2="15.984863"
+       xlink:href="#linearGradient2380"
+       y1="36.061237"
+       y2="20.60858" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7848"
+       inkscape:collect="always"
+       x1="18.935766"
+       x2="53.588623"
+       xlink:href="#linearGradient2402"
+       y1="23.667896"
+       y2="26.649363" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7850"
+       inkscape:collect="always"
+       x1="46.834816"
+       x2="45.380436"
+       xlink:href="#linearGradient2871"
+       y1="45.264122"
+       y2="50.939667" />
+    <linearGradient
+       gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9972"
+       inkscape:collect="always"
+       x1="28.244684"
+       x2="28.244684"
+       xlink:href="#linearGradient9910"
+       y1="60.445503"
+       y2="68.224884" />
+    <linearGradient
+       gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9968"
+       inkscape:collect="always"
+       x1="28.244684"
+       x2="28.244684"
+       xlink:href="#linearGradient9920"
+       y1="60.445503"
+       y2="68.224884" />
+    <linearGradient
+       gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9965"
+       inkscape:collect="always"
+       x1="28.244684"
+       x2="28.244684"
+       xlink:href="#linearGradient9910"
+       y1="60.445503"
+       y2="68.224884" />
+    <linearGradient
+       gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9961"
+       inkscape:collect="always"
+       x1="55.876038"
+       x2="38.061356"
+       xlink:href="#linearGradient9952"
+       y1="62.401989"
+       y2="62.827091" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6401"
+       inkscape:collect="always"
+       x1="20.064156"
+       x2="20.682873"
+       xlink:href="#linearGradient6395"
+       y1="27.140348"
+       y2="44.110912" />
+    <radialGradient
+       cx="23.25"
+       cy="37.75"
+       fx="23.25"
+       fy="37.75"
+       gradientTransform="matrix(1,0,0,0.420168,0,21.88866)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6353"
+       inkscape:collect="always"
+       r="14.875"
+       xlink:href="#linearGradient5048" />
+    <linearGradient
+       gradientTransform="matrix(0.00525957,0.999987,0.999987,-0.00525957,48.6929,-14.14491)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6349"
+       inkscape:collect="always"
+       x1="25.71875"
+       x2="25.514589"
+       xlink:href="#linearGradient2994"
+       y1="31.046875"
+       y2="30.703125" />
+    <radialGradient
+       cx="29.053354"
+       cy="27.640751"
+       fx="29.053354"
+       fy="27.640751"
+       gradientTransform="matrix(0.0153767,2.923527,2.029691,-0.01067544,20.39098,-69.72665)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6347"
+       inkscape:collect="always"
+       r="3.2408545"
+       xlink:href="#linearGradient2984" />
+    <linearGradient
+       gradientTransform="matrix(0.00525957,0.999987,0.999987,-0.00525957,42.99552,-2.496241)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6345"
+       inkscape:collect="always"
+       x1="46"
+       x2="47.6875"
+       xlink:href="#linearGradient2974"
+       y1="19.8125"
+       y2="22.625" />
+    <linearGradient
+       gradientTransform="matrix(0.00525957,0.999987,0.999987,-0.00525957,42.9955,-2.496241)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6343"
+       inkscape:collect="always"
+       x1="48.90625"
+       x2="50.988335"
+       xlink:href="#linearGradient2966"
+       y1="17.376184"
+       y2="22.250591" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5074"
+       inkscape:collect="always"
+       x1="11.75"
+       x2="37.625"
+       xlink:href="#linearGradient5068"
+       y1="14.1875"
+       y2="14.1875" />
+    <linearGradient
+       gradientTransform="translate(0,5.625)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5064"
+       inkscape:collect="always"
+       x1="30.875"
+       x2="15.625"
+       xlink:href="#linearGradient5058"
+       y1="19.4596"
+       y2="19.0846" />
+    <radialGradient
+       cx="23.25"
+       cy="37.75"
+       fx="23.25"
+       fy="37.75"
+       gradientTransform="matrix(1,0,0,0.420168,0,21.88866)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5054"
+       inkscape:collect="always"
+       r="14.875"
+       xlink:href="#linearGradient5048" />
+    <linearGradient
+       gradientTransform="translate(0,5.625)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5042"
+       inkscape:collect="always"
+       x1="15.375"
+       x2="34.250416"
+       xlink:href="#linearGradient5036"
+       y1="26.0846"
+       y2="26.0846" />
+    <linearGradient
+       id="linearGradient5036">
+      <stop
+         id="stop5038"
+         offset="0"
+         style="stop-color:#f5f5f5;stop-opacity:0.09;" />
+      <stop
+         id="stop5044"
+         offset="0.2631579"
+         style="stop-color:#ffffff;stop-opacity:0.89999998;" />
+      <stop
+         id="stop5088"
+         offset="0.74792242"
+         style="stop-color:#c7c7c7;stop-opacity:0.46000001;" />
+      <stop
+         id="stop5040"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0.78039217;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5058">
+      <stop
+         id="stop5060"
+         offset="0"
+         style="stop-color:#959791;stop-opacity:1;" />
+      <stop
+         id="stop5066"
+         offset="0.5"
+         style="stop-color:#f8f8f8;stop-opacity:1;" />
+      <stop
+         id="stop3430"
+         offset="1"
+         style="stop-color:#8c8c8c;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5068">
+      <stop
+         id="stop5070"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop5078"
+         offset="0.32894737"
+         style="stop-color:#ffffff;stop-opacity:0.69;" />
+      <stop
+         id="stop5076"
+         offset="0.65789473"
+         style="stop-color:#c2c2c2;stop-opacity:0.34;" />
+      <stop
+         id="stop5072"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3414">
+      <stop
+         id="stop3416"
+         offset="0"
+         style="stop-color:#ffd1d1;stop-opacity:1;" />
+      <stop
+         id="stop3418"
+         offset="0.5"
+         style="stop-color:#ff1d1d;stop-opacity:1;" />
+      <stop
+         id="stop3420"
+         offset="1"
+         style="stop-color:#6f0000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3408">
+      <stop
+         id="stop3410"
+         offset="0"
+         style="stop-color:#c1c1c1;stop-opacity:1;" />
+      <stop
+         id="stop3412"
+         offset="1"
+         style="stop-color:#acacac;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2984"
+       inkscape:collect="always">
+      <stop
+         id="stop2986"
+         offset="0"
+         style="stop-color:#e7e2b8;stop-opacity:1;" />
+      <stop
+         id="stop2988"
+         offset="1"
+         style="stop-color:#e7e2b8;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3399">
+      <stop
+         id="stop3401"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop3403"
+         offset="1"
+         style="stop-color:#c9c9c9;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6395"
+       inkscape:collect="always">
+      <stop
+         id="stop6397"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop6399"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9910">
+      <stop
+         id="stop9912"
+         offset="0"
+         style="stop-color:#729fcf;stop-opacity:1;" />
+      <stop
+         id="stop9918"
+         offset="0.31578946"
+         style="stop-color:#a5bfda;stop-opacity:1;" />
+      <stop
+         id="stop9914"
+         offset="1"
+         style="stop-color:#376ca4;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9920">
+      <stop
+         id="stop9922"
+         offset="0"
+         style="stop-color:#5b90c8;stop-opacity:1;" />
+      <stop
+         id="stop9924"
+         offset="0.31578946"
+         style="stop-color:#8fb0d1;stop-opacity:1;" />
+      <stop
+         id="stop9926"
+         offset="1"
+         style="stop-color:#34679d;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9952"
+       inkscape:collect="always">
+      <stop
+         id="stop9954"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop9956"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="24.8125"
+       cy="39.125"
+       fx="24.8125"
+       fy="39.125"
+       gradientTransform="matrix(1,0,0,0.374558,0,24.47041)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2746"
+       inkscape:collect="always"
+       r="17.6875"
+       xlink:href="#linearGradient3041" />
+    <radialGradient
+       cx="24.8125"
+       cy="39.125"
+       fx="24.8125"
+       fy="39.125"
+       gradientTransform="matrix(1,0,0,0.374558,0,24.47041)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2748"
+       inkscape:collect="always"
+       r="17.6875"
+       xlink:href="#linearGradient3041" />
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.6871,470.17853)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2750"
+       inkscape:collect="always"
+       x1="19.648342"
+       x2="20.631224"
+       xlink:href="#linearGradient3049"
+       y1="42.253601"
+       y2="6.7758031" />
+    <linearGradient
+       gradientTransform="matrix(0.8782699,0,0,0.8782699,1049.7965,-403.53398)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2752"
+       inkscape:collect="always"
+       x1="50.152931"
+       x2="25.291086"
+       xlink:href="#linearGradient3061"
+       y1="-3.6324477"
+       y2="-4.3002653" />
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.9976,470.79956)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2754"
+       inkscape:collect="always"
+       x1="38.227654"
+       x2="37.53537"
+       xlink:href="#linearGradient3077"
+       y1="13.602527"
+       y2="6.6285896" />
+    <linearGradient
+       gradientTransform="translate(1019.1501,465.21085)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2756"
+       inkscape:collect="always"
+       x1="31.177404"
+       x2="40.859177"
+       xlink:href="#linearGradient2250"
+       y1="19.821514"
+       y2="9.6568537" />
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.6871,470.17853)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2758"
+       inkscape:collect="always"
+       x1="9.7503242"
+       x2="16.915297"
+       xlink:href="#linearGradient3087"
+       y1="32.28376"
+       y2="39.443218" />
+    <linearGradient
+       gradientTransform="matrix(1.007254,-0.02636526,0.02636526,1.007254,1020.7435,465.29004)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2760"
+       inkscape:collect="always"
+       x1="12.004697"
+       x2="10.650805"
+       xlink:href="#linearGradient2257"
+       y1="35.688461"
+       y2="33.194965" />
+    <linearGradient
+       gradientTransform="matrix(0.878099,-0.0173237,0.0173237,0.878099,1021.3138,469.27875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2762"
+       inkscape:collect="always"
+       x1="14.017542"
+       x2="15.415793"
+       xlink:href="#linearGradient2265"
+       y1="36.942543"
+       y2="38.268368" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3603"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3605"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3607"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3611"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3613"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3617"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3619"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3623"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3625"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3629"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3631"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3635"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3637"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3641"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3643"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3647"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3649"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3653"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3655"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3659"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3663"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3665"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3669"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3673"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3675"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3679"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3681"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="11.319205"
+       cy="22.454971"
+       fx="11.319205"
+       fy="22.454971"
+       gradientTransform="matrix(0,-8.4690288,10.248644,0,454.76267,899.88684)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3755"
+       inkscape:collect="always"
+       r="16.9562"
+       xlink:href="#linearGradient2304" />
+    <radialGradient
+       cx="24.53788"
+       cy="0.40010813"
+       fx="24.53788"
+       fy="0.40010813"
+       gradientTransform="matrix(0,-20.561511,15.647805,0,476.46787,1144.4736)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3757"
+       inkscape:collect="always"
+       r="17.171415"
+       xlink:href="#linearGradient8650" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5446"
+       x1="43.944302"
+       x2="411.3941"
+       y1="733.39258"
+       y2="425.06561">
+      <stop
+         id="stop12"
+         offset="0.0562"
+         style="stop-color:#003F90" />
+      <stop
+         id="stop14"
+         offset="0.5674"
+         style="stop-color:#0093D2" />
+      <stop
+         id="stop16"
+         offset="0.9551"
+         style="stop-color:#EDF3F7" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5452"
+       x1="43.943802"
+       x2="411.39359"
+       y1="733.39258"
+       y2="425.06561">
+      <stop
+         id="stop21"
+         offset="0.0562"
+         style="stop-color:#003F90" />
+      <stop
+         id="stop23"
+         offset="0.5674"
+         style="stop-color:#0093D2" />
+      <stop
+         id="stop25"
+         offset="0.9551"
+         style="stop-color:#EDF3F7" />
+    </linearGradient>
+    <radialGradient
+       cx="12.57571"
+       cy="67.501709"
+       fx="12.57571"
+       fy="67.501709"
+       gradientTransform="scale(1.925808,0.519262)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient35088"
+       inkscape:collect="always"
+       r="8.7662792"
+       xlink:href="#linearGradient2454" />
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35090"
+       inkscape:collect="always"
+       x1="12.88666"
+       x2="20.087339"
+       xlink:href="#linearGradient10591"
+       y1="4.3602757"
+       y2="18.414022" />
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35092"
+       inkscape:collect="always"
+       x1="19.250618"
+       x2="16.198252"
+       xlink:href="#linearGradient11335"
+       y1="9.6635771"
+       y2="6.0396547" />
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,21.67589)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35094"
+       inkscape:collect="always"
+       x1="6.72682"
+       x2="40.938126"
+       xlink:href="#linearGradient2092"
+       y1="32.161697"
+       y2="32.161697" />
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,22.22637)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35096"
+       inkscape:collect="always"
+       x1="31.630468"
+       x2="8.6713638"
+       xlink:href="#linearGradient11327"
+       y1="41.791817"
+       y2="25.793524" />
+    <linearGradient
+       gradientTransform="matrix(0.453445,0,0,0.470026,30.17248,24.3894)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35098"
+       inkscape:collect="always"
+       x1="10.907269"
+       x2="30.875446"
+       xlink:href="#linearGradient9845"
+       y1="25.002281"
+       y2="36.127281" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.461806,23.89003,23.47875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35100"
+       inkscape:collect="always"
+       x1="14.217941"
+       x2="17.859085"
+       xlink:href="#linearGradient12071"
+       y1="6.8795347"
+       y2="3.9566603" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.490236,34.67523,22.83397)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35102"
+       inkscape:collect="always"
+       x1="11.5"
+       x2="11.779029"
+       xlink:href="#linearGradient12071"
+       y1="20.579729"
+       y2="14.259961" />
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35635"
+       inkscape:collect="always"
+       x1="12.88666"
+       x2="20.087339"
+       xlink:href="#linearGradient10591"
+       y1="4.3602757"
+       y2="18.414022" />
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35637"
+       inkscape:collect="always"
+       x1="19.250618"
+       x2="16.198252"
+       xlink:href="#linearGradient11335"
+       y1="9.6635771"
+       y2="6.0396547" />
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,21.67589)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35639"
+       inkscape:collect="always"
+       x1="6.72682"
+       x2="40.938126"
+       xlink:href="#linearGradient2092"
+       y1="32.161697"
+       y2="32.161697" />
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,22.22637)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35641"
+       inkscape:collect="always"
+       x1="31.630468"
+       x2="8.6713638"
+       xlink:href="#linearGradient11327"
+       y1="41.791817"
+       y2="25.793524" />
+    <linearGradient
+       gradientTransform="matrix(0.453445,0,0,0.470026,30.17248,24.3894)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35643"
+       inkscape:collect="always"
+       x1="10.907269"
+       x2="30.875446"
+       xlink:href="#linearGradient9845"
+       y1="25.002281"
+       y2="36.127281" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.461806,23.89003,23.47875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35645"
+       inkscape:collect="always"
+       x1="14.217941"
+       x2="17.859085"
+       xlink:href="#linearGradient12071"
+       y1="6.8795347"
+       y2="3.9566603" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.490236,34.67523,22.83397)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35647"
+       inkscape:collect="always"
+       x1="11.5"
+       x2="11.779029"
+       xlink:href="#linearGradient12071"
+       y1="20.579729"
+       y2="14.259961" />
+    <linearGradient
+       gradientTransform="matrix(31.442825,0,0,15.721413,163.64608,98.870782)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35650"
+       inkscape:collect="always"
+       x1="11.5"
+       x2="11.779029"
+       xlink:href="#linearGradient12071"
+       y1="20.579729"
+       y2="14.259961" />
+    <linearGradient
+       gradientTransform="matrix(31.442825,0,0,14.809689,-182.22526,119.54828)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35653"
+       inkscape:collect="always"
+       x1="14.217941"
+       x2="17.859085"
+       xlink:href="#linearGradient12071"
+       y1="6.8795347"
+       y2="3.9566603" />
+    <linearGradient
+       gradientTransform="matrix(14.541559,0,0,15.073297,19.247073,148.75198)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35656"
+       inkscape:collect="always"
+       x1="10.907269"
+       x2="30.875446"
+       xlink:href="#linearGradient9845"
+       y1="25.002281"
+       y2="36.127281" />
+    <linearGradient
+       gradientTransform="matrix(15.721413,0,0,17.134408,-9.2895887,61.732234)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35659"
+       inkscape:collect="always"
+       x1="6.72682"
+       x2="40.938126"
+       xlink:href="#linearGradient2092"
+       y1="32.161697"
+       y2="32.161697" />
+    <linearGradient
+       gradientTransform="matrix(15.721413,0,0,17.134408,-9.2895887,79.385615)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35661"
+       inkscape:collect="always"
+       x1="31.630468"
+       x2="8.6713638"
+       xlink:href="#linearGradient11327"
+       y1="41.791817"
+       y2="25.793524" />
+    <linearGradient
+       gradientTransform="matrix(15.401043,0,0,15.948654,-11.070064,104.56497)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35664"
+       inkscape:collect="always"
+       x1="12.88666"
+       x2="20.087339"
+       xlink:href="#linearGradient10591"
+       y1="4.3602757"
+       y2="18.414022" />
+    <linearGradient
+       gradientTransform="matrix(15.401043,0,0,15.948654,-11.070064,104.56497)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35666"
+       inkscape:collect="always"
+       x1="19.250618"
+       x2="16.198252"
+       xlink:href="#linearGradient11335"
+       y1="9.6635771"
+       y2="6.0396547" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3198"
+       inkscape:collect="always"
+       x1="356.35681"
+       x2="425.96066"
+       xlink:href="#linearGradient3177"
+       y1="164.76173"
+       y2="646.65405" />
+    <linearGradient
+       id="linearGradient3177">
+      <stop
+         id="stop3187"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+      <stop
+         id="stop3200"
+         offset="0.4375"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop3191"
+         offset="0.9375"
+         style="stop-color:#ffffff;stop-opacity:0.43333334;" />
+      <stop
+         id="stop3181"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(1.031913,0,0,0.9606757,-10.760168,19.498309)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3946"
+       inkscape:collect="always"
+       x1="337.49271"
+       x2="416.38455"
+       xlink:href="#linearGradient3167"
+       y1="402.10623"
+       y2="645.40979" />
+    <linearGradient
+       id="linearGradient3167">
+      <stop
+         id="stop3169"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop3171"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       y2="645.40979"
+       x2="416.38455"
+       y1="402.10623"
+       x1="337.49271"
+       gradientTransform="matrix(1.031913,0,0,0.9606757,-10.760168,19.498309)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3031"
+       xlink:href="#linearGradient3167"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     bordercolor="#666666"
+     borderopacity="1.0"
+     id="base"
+     inkscape:current-layer="layer1"
+     inkscape:cx="-104.82694"
+     inkscape:cy="8.4486977"
+     inkscape:document-units="px"
+     inkscape:guide-bbox="true"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:window-height="975"
+     inkscape:window-maximized="1"
+     inkscape:window-width="1280"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:zoom="2.2083652"
+     pagecolor="#ffffff"
+     showgrid="false"
+     showguides="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0">
+    <sodipodi:guide
+       id="guide2280"
+       orientation="horizontal"
+       position="-330.12016,63.71184" />
+    <sodipodi:guide
+       id="guide2282"
+       orientation="vertical"
+       position="4.523254,-481.5065" />
+    <sodipodi:guide
+       id="guide2284"
+       orientation="vertical"
+       position="382.41989,-481.5065" />
+    <sodipodi:guide
+       id="guide2286"
+       orientation="horizontal"
+       position="-330.12016,-348.33208" />
+    <sodipodi:guide
+       id="guide2491"
+       orientation="horizontal"
+       position="-330.12016,418.84362" />
+    <sodipodi:guide
+       id="guide2495"
+       orientation="vertical"
+       position="84.200254,-481.5065" />
+    <sodipodi:guide
+       id="guide2497"
+       orientation="horizontal"
+       position="-330.12016,-326.70547" />
+    <sodipodi:guide
+       id="guide3687"
+       orientation="horizontal"
+       position="-330.12016,455.2674" />
+    <sodipodi:guide
+       id="guide3689"
+       orientation="vertical"
+       position="-396.13824,-481.5065" />
+    <sodipodi:guide
+       id="guide3691"
+       orientation="horizontal"
+       position="-330.12016,-393.8618" />
+    <sodipodi:guide
+       id="guide3693"
+       orientation="vertical"
+       position="455.26743,-481.5065" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" />
+        <dc:title></dc:title>
+        <dc:date>July 2008</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Beate Kaspar</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title>Beate Kaspar</dc:title>
+          </cc:Agent>
+        </dc:rights>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>RRZE</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>lock</rdf:li>
+            <rdf:li>security</rdf:li>
+            <rdf:li>encryption</rdf:li>
+            <rdf:li>vpn</rdf:li>
+            <rdf:li>secure</rdf:li>
+            <rdf:li>safe</rdf:li>
+            <rdf:li>SSL</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <dc:contributor>
+          <cc:Agent>
+            <dc:title>Hendrik Eggers, Franziska Sponsel</dc:title>
+          </cc:Agent>
+        </dc:contributor>
+        <dc:description>uses <http://webcvs.freedesktop.org/tango/tango-icon-theme/scalable/actions/system-lock-screen.svg></dc:description>
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/by-sa/3.0/">
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Notice" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Attribution" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#ShareAlike" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Ebene 1"
+     transform="translate(-330.12016,-510.85568)">
+    <g
+       id="g35677"
+       transform="matrix(0.07058824,0,0,0.07058824,334.69991,502.67763)">
+      <g
+         id="g35668">
+        <rect
+           height="850"
+           id="rect2300"
+           style="fill:none;stroke:none"
+           width="850"
+           x="-64.879845"
+           y="115.85568" />
+        <path
+           d="m 41.10058,35.051105 c 0,2.514001 -7.558406,4.552001 -16.882173,4.552001 -9.323767,0 -16.8821739,-2.038 -16.8821739,-4.552001 0,-2.514 7.5584069,-4.552 16.8821739,-4.552 9.323767,0 16.882173,2.038 16.882173,4.552 z"
+           id="path2452"
+           sodipodi:cx="24.218407"
+           sodipodi:cy="35.051105"
+           sodipodi:rx="16.882174"
+           sodipodi:ry="4.552"
+           sodipodi:type="arc"
+           style="opacity:0.50857143;fill:url(#radialGradient35088);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+           transform="matrix(22.64864,0,0,17.97418,-183.8862,229.3831)" />
+        <path
+           d="m 149.64097,462.77119 0,-122.55827 c 0,-125.51812 84.12878,-182.74178 209.22253,-181.17424 125.77437,1.56753 208.8138,56.17792 208.8138,183.17269 l -0.20845,120.55982 -76.73795,0 0,-88.997 c -2.06012,-30.8929 8.56244,-134.37251 -130.98679,-134.37251 -140.51178,0 -132.25265,103.8535 -131.74913,134.98757 l 0,88.38194 -78.35452,0 z"
+           id="path2086"
+           sodipodi:nodetypes="cczcccczccc"
+           style="fill:url(#linearGradient35664);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient35666);stroke-width:37.98667145;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+        <rect
+           height="377.42322"
+           id="rect1314"
+           rx="84.899323"
+           ry="73.867165"
+           style="fill:url(#linearGradient35659);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient35661);stroke-width:37.98667526;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           width="550.18536"
+           x="92.865761"
+           y="464.39069" />
+        <rect
+           height="302.70956"
+           id="rect6903"
+           rx="46.140316"
+           ry="46.140354"
+           style="fill:none;stroke:url(#linearGradient35656);stroke-width:37.98670959;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.60109289;stroke-dasharray:none;stroke-dashoffset:0"
+           width="480.31729"
+           x="127.86926"
+           y="501.4451" />
+        <path
+           d="m 163.64595,347.00672 c 4.16875,-92.93931 30.00738,-162.92832 202.36234,-168.86158 -111.60142,15.72802 -172.30435,48.31298 -172.30435,145.47854 0,0 -2.78392,120.42879 -2.78392,120.42879 l -27.27407,0 0,-97.04575 z"
+           id="rect11343"
+           sodipodi:nodetypes="ccsccc"
+           style="fill:url(#linearGradient35653);fill-opacity:1;fill-rule:evenodd;stroke:none"
+           inkscape:connector-curvature="0" />
+        <rect
+           height="157.21413"
+           id="rect1345"
+           rx="0"
+           ry="0"
+           style="fill:url(#linearGradient35650);fill-opacity:1;fill-rule:evenodd;stroke:none"
+           width="31.442825"
+           x="509.51706"
+           y="287.52774" />
+      </g>
+    </g>
+    <g
+       transform="matrix(0.04174053,0,0,0.04174053,359.39241,534.49678)"
+       id="g3948">
+      <rect
+         height="718.72583"
+         id="rect2383"
+         style="fill:none;stroke:none"
+         width="718.72583"
+         x="13.351353"
+         y="142.85638" />
+      <path
+         d="m 705.08649,515.97119 c 0,176.85171 -143.36664,320.21835 -320.21836,320.21835 -176.85171,0 -320.21835,-143.36664 -320.21835,-320.21835 0,-176.85171 143.36664,-320.21835 320.21835,-320.21835 176.85172,0 320.21836,143.36664 320.21836,320.21835 z"
+         id="path3163"
+         sodipodi:cx="384.86813"
+         sodipodi:cy="515.97119"
+         sodipodi:rx="320.21835"
+         sodipodi:ry="320.21835"
+         sodipodi:type="arc"
+         style="fill:#cc0000;fill-opacity:1;fill-rule:evenodd;stroke:#a40000;stroke-width:29.08395386;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(1.0314966,0,0,1.0314966,-22.223548,-26.352844)" />
+      <path
+         d="m 705.08649,515.97119 c 0,176.85171 -143.36664,320.21835 -320.21836,320.21835 -176.85171,0 -320.21835,-143.36664 -320.21835,-320.21835 0,-176.85171 143.36664,-320.21835 320.21835,-320.21835 176.85172,0 320.21836,143.36664 320.21836,320.21835 z"
+         id="path3165"
+         sodipodi:cx="384.86813"
+         sodipodi:cy="515.97119"
+         sodipodi:rx="320.21835"
+         sodipodi:ry="320.21835"
+         sodipodi:type="arc"
+         style="opacity:0.5;fill:none;stroke:#ffffff;stroke-width:29.08395386;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         transform="matrix(0.9442024,0,0,0.9442024,11.373207,18.688447)" />
+      <path
+         inkscape:connector-curvature="0"
+         d="m 705.08649,515.97119 c 0,60.54341 -3.72007,80.91433 -15.71464,81.52944 -23.02438,1.18075 -73.83203,-31.79665 -189.95584,-36.45291 C 353.18916,555.24261 161.69716,709.31451 94.998115,652.41284 80.262439,639.84167 64.64978,547.95614 64.64978,515.97119 c 0,-176.76053 143.45782,-320.21835 320.21835,-320.21835 176.76053,0 320.21836,143.45782 320.21836,320.21835 z"
+         id="path3175"
+         sodipodi:nodetypes="csssssc"
+         style="opacity:0.34680134;fill:url(#linearGradient3198);fill-opacity:1;fill-rule:evenodd;stroke:none"
+         transform="matrix(0.9843536,0,0,0.9843536,-4.0797004,-2.0284022)" />
+      <rect
+         height="169.84805"
+         id="rect3918"
+         style="fill:#babdb6;fill-opacity:1;fill-rule:evenodd;stroke:#2e3436;stroke-width:21.81534767;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+         width="433.19046"
+         x="160.83334"
+         y="430.72388" />
+      <rect
+         height="149.59094"
+         id="rect3938"
+         style="fill:url(#linearGradient3031);fill-opacity:1;fill-rule:evenodd;stroke:none"
+         width="409.81689"
+         x="171.74101"
+         y="440.0733" />
+    </g>
+  </g>
+</svg>
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/lock_unknown.svg b/lib/taurus/qt/qtgui/resource/extra-icons/lock_unknown.svg
new file mode 100644
index 0000000..992eeaa
--- /dev/null
+++ b/lib/taurus/qt/qtgui/resource/extra-icons/lock_unknown.svg
@@ -0,0 +1,3023 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   height="60.000004"
+   id="svg2"
+   inkscape:export-xdpi="76.235291"
+   inkscape:export-ydpi="76.235291"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:version="0.48.1 r9760"
+   sodipodi:version="0.32"
+   version="1.1"
+   width="60.000004"
+   sodipodi:docname="lock_locked_unpreviledged.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       id="perspective20643"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2454"
+       inkscape:collect="always">
+      <stop
+         id="stop2456"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop2458"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="12.57571"
+       cy="67.501709"
+       fx="12.57571"
+       fy="67.501709"
+       gradientTransform="scale(1.925808,0.519262)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2460"
+       inkscape:collect="always"
+       r="8.7662792"
+       xlink:href="#linearGradient2454" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.490236,34.67523,22.83397)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1898"
+       inkscape:collect="always"
+       x1="11.5"
+       x2="11.779029"
+       xlink:href="#linearGradient12071"
+       y1="20.579729"
+       y2="14.259961" />
+    <linearGradient
+       id="linearGradient12071">
+      <stop
+         id="stop12073"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop12075"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.461806,23.89003,23.47875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1896"
+       inkscape:collect="always"
+       x1="14.217941"
+       x2="17.859085"
+       xlink:href="#linearGradient12071"
+       y1="6.8795347"
+       y2="3.9566603" />
+    <linearGradient
+       id="linearGradient9845">
+      <stop
+         id="stop9847"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop9849"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.49484536;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.453445,0,0,0.470026,30.17248,24.3894)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1894"
+       inkscape:collect="always"
+       x1="10.907269"
+       x2="30.875446"
+       xlink:href="#linearGradient9845"
+       y1="25.002281"
+       y2="36.127281" />
+    <linearGradient
+       id="linearGradient11327">
+      <stop
+         id="stop11329"
+         offset="0"
+         style="stop-color:#8f5902;stop-opacity:1;" />
+      <stop
+         id="stop11331"
+         offset="1"
+         style="stop-color:#c17d11;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,22.22637)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1892"
+       inkscape:collect="always"
+       x1="31.630468"
+       x2="8.6713638"
+       xlink:href="#linearGradient11327"
+       y1="41.791817"
+       y2="25.793524" />
+    <linearGradient
+       id="linearGradient2092">
+      <stop
+         id="stop2094"
+         offset="0"
+         style="stop-color:#fce94f;stop-opacity:1;" />
+      <stop
+         id="stop27163"
+         offset="0.20999999"
+         style="stop-color:#ffec41;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2293"
+         offset="0.83999997"
+         style="stop-color:#edd400;stop-opacity:1;" />
+      <stop
+         id="stop2100"
+         offset="1"
+         style="stop-color:#c4a00f;stop-opacity:0.94117647;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,21.67589)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1890"
+       inkscape:collect="always"
+       x1="6.72682"
+       x2="40.938126"
+       xlink:href="#linearGradient2092"
+       y1="32.161697"
+       y2="32.161697" />
+    <linearGradient
+       id="linearGradient11335">
+      <stop
+         id="stop11337"
+         offset="0"
+         style="stop-color:#555753;stop-opacity:1;" />
+      <stop
+         id="stop11339"
+         offset="1"
+         style="stop-color:#888a85;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1888"
+       inkscape:collect="always"
+       x1="19.250618"
+       x2="16.198252"
+       xlink:href="#linearGradient11335"
+       y1="9.6635771"
+       y2="6.0396547" />
+    <linearGradient
+       id="linearGradient10591">
+      <stop
+         id="stop10593"
+         offset="0"
+         style="stop-color:#babdb6;stop-opacity:1;" />
+      <stop
+         id="stop10599"
+         offset="0.5"
+         style="stop-color:#eeeeec;stop-opacity:1;" />
+      <stop
+         id="stop10595"
+         offset="1"
+         style="stop-color:#babdb6;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1886"
+       inkscape:collect="always"
+       x1="12.88666"
+       x2="20.087339"
+       xlink:href="#linearGradient10591"
+       y1="4.3602757"
+       y2="18.414022" />
+    <linearGradient
+       id="linearGradient11494">
+      <stop
+         id="stop11496"
+         offset="0"
+         style="stop-color:#2946ef;stop-opacity:1;" />
+      <stop
+         id="stop11498"
+         offset="1"
+         style="stop-color:#2929ef;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11520">
+      <stop
+         id="stop11522"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop11524"
+         offset="1.0000000"
+         style="stop-color:#dcdcdc;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       cx="24.44569"
+       cy="35.87817"
+       fx="24.44569"
+       fy="35.87817"
+       gradientTransform="matrix(35.895002,0,0,35.895002,-502.54107,-556.8092)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1366"
+       inkscape:collect="always"
+       r="20.530962"
+       xlink:href="#linearGradient11520" />
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6719"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6717"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <linearGradient
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6715"
+       inkscape:collect="always"
+       x1="302.85715"
+       x2="302.85715"
+       xlink:href="#linearGradient5048"
+       y1="366.64789"
+       y2="609.50507" />
+    <linearGradient
+       id="linearGradient4747">
+      <stop
+         id="stop4749"
+         offset="0"
+         style="stop-color:#16d277;stop-opacity:1;" />
+      <stop
+         id="stop4751"
+         offset="1"
+         style="stop-color:#069a4a;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4741">
+      <stop
+         id="stop4743"
+         offset="0"
+         style="stop-color:#16d2c3;stop-opacity:1;" />
+      <stop
+         id="stop4745"
+         offset="1"
+         style="stop-color:#069a92;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8650"
+       inkscape:collect="always">
+      <stop
+         id="stop8652"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop8654"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2304">
+      <stop
+         id="stop2306"
+         offset="0"
+         style="stop-color:#73d216" />
+      <stop
+         id="stop2308"
+         offset="1.0000000"
+         style="stop-color:#4e9a06" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient1789">
+      <stop
+         id="stop1790"
+         offset="0"
+         style="stop-color:#a0a0a0;stop-opacity:1;" />
+      <stop
+         id="stop1791"
+         offset="1"
+         style="stop-color:#a8a8a8;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient137">
+      <stop
+         id="stop138"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.70059878;" />
+      <stop
+         id="stop139"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9766">
+      <stop
+         id="stop9768"
+         offset="0"
+         style="stop-color:#6194cb;stop-opacity:1;" />
+      <stop
+         id="stop9770"
+         offset="1"
+         style="stop-color:#729fcf;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient148">
+      <stop
+         id="stop149"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.13402061;" />
+      <stop
+         id="stop150"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.051546391;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient335">
+      <stop
+         id="stop336"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop337"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(39.086521,0,0,7.6340894,-33.337669,99.207026)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2813"
+       inkscape:collect="always"
+       x1="10.496115"
+       x2="10.219901"
+       xlink:href="#linearGradient2803"
+       y1="93.338043"
+       y2="84.287079" />
+    <linearGradient
+       gradientTransform="matrix(16.544137,0,0,17.757444,-33.337669,104.44258)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2100"
+       inkscape:collect="always"
+       x1="6.5871811"
+       x2="14.511404"
+       xlink:href="#linearGradient2094"
+       y1="22.132999"
+       y2="22.132999" />
+    <linearGradient
+       gradientTransform="matrix(4.3875865,0,0,64.946869,-32.890582,116.9616)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2801"
+       inkscape:collect="always"
+       x1="35.433037"
+       x2="41.219128"
+       xlink:href="#linearGradient2795"
+       y1="4.9530048"
+       y2="4.9530048" />
+    <linearGradient
+       id="linearGradient2116"
+       inkscape:collect="always">
+      <stop
+         id="stop2118"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2120"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(17.713207,0,0,16.536418,-50.611543,100.38611)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2112"
+       inkscape:collect="always"
+       x1="73.361984"
+       x2="-2.7582901"
+       xlink:href="#linearGradient2116"
+       y1="26.652197"
+       y2="21.270376" />
+    <radialGradient
+       cx="55"
+       cy="125"
+       fx="55"
+       fy="125"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient278"
+       inkscape:collect="always"
+       r="14.375"
+       xlink:href="#linearGradient12512" />
+    <linearGradient
+       id="linearGradient4228">
+      <stop
+         id="stop4230"
+         offset="0.0000000"
+         style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4232"
+         offset="1.0000000"
+         style="stop-color:#9f9f9f;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4244">
+      <stop
+         id="stop4246"
+         offset="0.0000000"
+         style="stop-color:#e4e4e4;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4248"
+         offset="1.0000000"
+         style="stop-color:#d3d3d3;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4184">
+      <stop
+         id="stop4186"
+         offset="0.0000000"
+         style="stop-color:#838383;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4188"
+         offset="1.0000000"
+         style="stop-color:#bbbbbb;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4274">
+      <stop
+         id="stop4276"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.25490198;" />
+      <stop
+         id="stop4278"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2555">
+      <stop
+         id="stop2557"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2561"
+         offset="0.50000000"
+         style="stop-color:#e6e6e6;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2563"
+         offset="0.75000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2565"
+         offset="0.84166664"
+         style="stop-color:#e1e1e1;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2559"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12582">
+      <stop
+         id="stop12584"
+         offset="0"
+         style="stop-color:#d23d21;stop-opacity:1;" />
+      <stop
+         id="stop12586"
+         offset="0.25709054"
+         style="stop-color:#e9ca23;stop-opacity:1;" />
+      <stop
+         id="stop12588"
+         offset="0.5655992"
+         style="stop-color:#e98d47;stop-opacity:1;" />
+      <stop
+         id="stop12590"
+         offset="1"
+         style="stop-color:#e9c33e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2877">
+      <stop
+         id="stop2879"
+         offset="0"
+         style="stop-color:#75507b;stop-opacity:1;" />
+      <stop
+         id="stop2885"
+         offset="0.25709054"
+         style="stop-color:#a984af;stop-opacity:1;" />
+      <stop
+         id="stop2887"
+         offset="0.5655992"
+         style="stop-color:#513755;stop-opacity:1;" />
+      <stop
+         id="stop2881"
+         offset="1"
+         style="stop-color:#875c8e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2865">
+      <stop
+         id="stop2867"
+         offset="0"
+         style="stop-color:#73d216;stop-opacity:1;" />
+      <stop
+         id="stop11581"
+         offset="0.25568181"
+         style="stop-color:#9ced4b;stop-opacity:1;" />
+      <stop
+         id="stop11583"
+         offset="0.59400827"
+         style="stop-color:#64b813;stop-opacity:1;" />
+      <stop
+         id="stop2869"
+         offset="1"
+         style="stop-color:#8eea34;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2913">
+      <stop
+         id="stop2915"
+         offset="0"
+         style="stop-color:white;stop-opacity:0.43877551;" />
+      <stop
+         id="stop2921"
+         offset="0.5"
+         style="stop-color:white;stop-opacity:1;" />
+      <stop
+         id="stop2917"
+         offset="1"
+         style="stop-color:white;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6932">
+      <stop
+         id="stop6934"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop6936"
+         offset="1"
+         style="stop-color:#aeb2e7;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4162">
+      <stop
+         id="stop4164"
+         offset="0.0000000"
+         style="stop-color:#f79403;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4170"
+         offset="0.18691589"
+         style="stop-color:#fdb343;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4172"
+         offset="0.43008122"
+         style="stop-color:#fdb74f;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4166"
+         offset="1.0000000"
+         style="stop-color:#8f5601;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4206">
+      <stop
+         id="stop4208"
+         offset="0"
+         style="stop-color:#010f7d;stop-opacity:1;" />
+      <stop
+         id="stop4210"
+         offset="1"
+         style="stop-color:#5669c4;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4134">
+      <stop
+         id="stop4136"
+         offset="0.0000000"
+         style="stop-color:#7e807a;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4148"
+         offset="0.25000000"
+         style="stop-color:#babbb8;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4142"
+         offset="0.50000000"
+         style="stop-color:#a5a6a3;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4138"
+         offset="1.0000000"
+         style="stop-color:#333432;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4126">
+      <stop
+         id="stop4128"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4130"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.16494845;" />
+    </linearGradient>
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1558"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1554"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1550"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1546"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1542"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1538"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1536"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1532"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1528"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1526"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1522"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1518"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1514"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1510"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1506"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1502"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1498"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1494"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1490"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1486"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1482"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1478"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1474"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1470"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1466"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1462"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <linearGradient
+       id="linearGradient4750">
+      <stop
+         id="stop4752"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop4758"
+         offset="0.37931034"
+         style="stop-color:#fefefe;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4754"
+         offset="1.0000000"
+         style="stop-color:#1d1d1d;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1460"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <linearGradient
+       id="linearGradient3962">
+      <stop
+         id="stop3964"
+         offset="0.0000000"
+         style="stop-color:#d3e9ff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4134"
+         offset="0.15517241"
+         style="stop-color:#d3e9ff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4346"
+         offset="0.75000000"
+         style="stop-color:#4074ae;stop-opacity:1.0000000;" />
+      <stop
+         id="stop3966"
+         offset="1.0000000"
+         style="stop-color:#36486c;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2265"
+       inkscape:collect="always">
+      <stop
+         id="stop2267"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop2269"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.878099,-0.0173237,0.0173237,0.878099,1021.3138,469.27875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2271"
+       inkscape:collect="always"
+       x1="14.017542"
+       x2="15.415793"
+       xlink:href="#linearGradient2265"
+       y1="36.942543"
+       y2="38.268368" />
+    <linearGradient
+       id="linearGradient2257"
+       inkscape:collect="always">
+      <stop
+         id="stop2259"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2261"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(1.007254,-0.02636526,0.02636526,1.007254,1020.7435,465.29004)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2263"
+       inkscape:collect="always"
+       x1="12.004697"
+       x2="10.650805"
+       xlink:href="#linearGradient2257"
+       y1="35.688461"
+       y2="33.194965" />
+    <linearGradient
+       id="linearGradient3087">
+      <stop
+         id="stop3089"
+         offset="0"
+         style="stop-color:#3465a4;stop-opacity:1;" />
+      <stop
+         id="stop3095"
+         offset="0"
+         style="stop-color:#9fbce1;stop-opacity:1;" />
+      <stop
+         id="stop2242"
+         offset="0"
+         style="stop-color:#6b95ca;stop-opacity:1;" />
+      <stop
+         id="stop2244"
+         offset="0.75"
+         style="stop-color:#3d6aa5;stop-opacity:1;" />
+      <stop
+         id="stop3091"
+         offset="1"
+         style="stop-color:#386eb4;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.6871,470.17853)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3093"
+       inkscape:collect="always"
+       x1="9.7503242"
+       x2="16.915297"
+       xlink:href="#linearGradient3087"
+       y1="32.28376"
+       y2="39.443218" />
+    <linearGradient
+       id="linearGradient2250"
+       inkscape:collect="always">
+      <stop
+         id="stop2252"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2254"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(1019.1501,465.21085)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2256"
+       inkscape:collect="always"
+       x1="31.177404"
+       x2="40.859177"
+       xlink:href="#linearGradient2250"
+       y1="19.821514"
+       y2="9.6568537" />
+    <linearGradient
+       id="linearGradient3077">
+      <stop
+         id="stop3079"
+         offset="0"
+         style="stop-color:#98a0a9;stop-opacity:1;" />
+      <stop
+         id="stop3081"
+         offset="1"
+         style="stop-color:#c3d0dd;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.9976,470.79956)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3083"
+       inkscape:collect="always"
+       x1="38.227654"
+       x2="37.53537"
+       xlink:href="#linearGradient3077"
+       y1="13.602527"
+       y2="6.6285896" />
+    <linearGradient
+       id="linearGradient3061">
+      <stop
+         id="stop3063"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop3065"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.8782699,0,0,0.8782699,1049.7965,-403.53398)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3067"
+       inkscape:collect="always"
+       x1="50.152931"
+       x2="25.291086"
+       xlink:href="#linearGradient3061"
+       y1="-3.6324477"
+       y2="-4.3002653" />
+    <linearGradient
+       id="linearGradient3049">
+      <stop
+         id="stop3051"
+         offset="0"
+         style="stop-color:#b6b6b6;stop-opacity:1;" />
+      <stop
+         id="stop2262"
+         offset="0.5"
+         style="stop-color:#f2f2f2;stop-opacity:1;" />
+      <stop
+         id="stop2264"
+         offset="0.67612958"
+         style="stop-color:#fafafa;stop-opacity:1;" />
+      <stop
+         id="stop2268"
+         offset="0.84051722"
+         style="stop-color:#d8d8d8;stop-opacity:1;" />
+      <stop
+         id="stop2266"
+         offset="0.875"
+         style="stop-color:#f2f2f2;stop-opacity:1;" />
+      <stop
+         id="stop3053"
+         offset="1"
+         style="stop-color:#dbdbdb;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.6871,470.17853)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3055"
+       inkscape:collect="always"
+       x1="19.648342"
+       x2="20.631224"
+       xlink:href="#linearGradient3049"
+       y1="42.253601"
+       y2="6.7758031" />
+    <radialGradient
+       cx="24.8125"
+       cy="39.125"
+       fx="24.8125"
+       fy="39.125"
+       gradientTransform="matrix(1,0,0,0.374558,0,24.47041)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3047"
+       inkscape:collect="always"
+       r="17.6875"
+       xlink:href="#linearGradient3041" />
+    <linearGradient
+       id="linearGradient3041"
+       inkscape:collect="always">
+      <stop
+         id="stop3043"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop3045"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="24.8125"
+       cy="39.125"
+       fx="24.8125"
+       fy="39.125"
+       gradientTransform="matrix(1,0,0,0.374558,0,24.47041)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2260"
+       inkscape:collect="always"
+       r="17.6875"
+       xlink:href="#linearGradient3041" />
+    <linearGradient
+       gradientTransform="translate(131.91072,132.23618)"
+       gradientUnits="userSpaceOnUse"
+       id="SVGID_1_"
+       x1="43.944302"
+       x2="411.3941"
+       y1="733.39258"
+       y2="425.06561">
+      <stop
+         id="stop2170"
+         offset="0.0562"
+         style="stop-color:#003F90" />
+      <stop
+         id="stop2172"
+         offset="0.5674"
+         style="stop-color:#0093D2" />
+      <stop
+         id="stop2174"
+         offset="0.9551"
+         style="stop-color:#EDF3F7" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.9169564,0,0,0.9120098,60.201795,153.71221)"
+       gradientUnits="userSpaceOnUse"
+       id="SVGID_2_"
+       x1="43.943802"
+       x2="411.39359"
+       y1="733.39258"
+       y2="425.06561">
+      <stop
+         id="stop2179"
+         offset="0.0562"
+         style="stop-color:#525252;stop-opacity:1;" />
+      <stop
+         id="stop2181"
+         offset="0.56739998"
+         style="stop-color:#8e8e8e;stop-opacity:1;" />
+      <stop
+         id="stop2183"
+         offset="0.9551"
+         style="stop-color:#c9c9c9;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5020"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <linearGradient
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5016"
+       inkscape:collect="always"
+       x1="302.85715"
+       x2="302.85715"
+       xlink:href="#linearGradient5048"
+       y1="366.64789"
+       y2="609.50507" />
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5013"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <linearGradient
+       id="linearGradient2795">
+      <stop
+         id="stop2797"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.068627454;" />
+      <stop
+         id="stop2799"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2803">
+      <stop
+         id="stop2805"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2807"
+         offset="1.0000000"
+         style="stop-color:#cbcbcb;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2094">
+      <stop
+         id="stop2096"
+         offset="0.0000000"
+         style="stop-color:#d6e3f0;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2098"
+         offset="1.0000000"
+         style="stop-color:#95b1cf;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12512">
+      <stop
+         id="stop12513"
+         offset="0"
+         style="stop-color:#eeebc9;stop-opacity:1;" />
+      <stop
+         id="stop12517"
+         offset="1"
+         style="stop-color:#ffd420;stop-opacity:1;" />
+      <stop
+         id="stop12514"
+         offset="1"
+         style="stop-color:#ffec00;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5048">
+      <stop
+         id="stop5050"
+         offset="0"
+         style="stop-color:black;stop-opacity:0;" />
+      <stop
+         id="stop5056"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         id="stop5052"
+         offset="1"
+         style="stop-color:black;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5060"
+       inkscape:collect="always">
+      <stop
+         id="stop5062"
+         offset="0"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         id="stop5064"
+         offset="1"
+         style="stop-color:black;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2994">
+      <stop
+         id="stop2996"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop2998"
+         offset="1"
+         style="stop-color:#c9c9c9;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2974">
+      <stop
+         id="stop2976"
+         offset="0"
+         style="stop-color:#c1c1c1;stop-opacity:1;" />
+      <stop
+         id="stop2978"
+         offset="1"
+         style="stop-color:#acacac;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2966">
+      <stop
+         id="stop2968"
+         offset="0"
+         style="stop-color:#ffd1d1;stop-opacity:1;" />
+      <stop
+         id="stop3006"
+         offset="0.5"
+         style="stop-color:#ff1d1d;stop-opacity:1;" />
+      <stop
+         id="stop2970"
+         offset="1"
+         style="stop-color:#6f0000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2846">
+      <stop
+         id="stop2848"
+         offset="0.0000000"
+         style="stop-color:#8a8a8a;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2850"
+         offset="1.0000000"
+         style="stop-color:#484848;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2366">
+      <stop
+         id="stop2368"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2374"
+         offset="0.50000000"
+         style="stop-color:#ffffff;stop-opacity:0.21904762;" />
+      <stop
+         id="stop2370"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4467">
+      <stop
+         id="stop4469"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop4471"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.24761905;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4454">
+      <stop
+         id="stop4456"
+         offset="0.0000000"
+         style="stop-color:#729fcf;stop-opacity:0.20784314;" />
+      <stop
+         id="stop4458"
+         offset="1.0000000"
+         style="stop-color:#729fcf;stop-opacity:0.67619050;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4440">
+      <stop
+         id="stop4442"
+         offset="0"
+         style="stop-color:#7d7d7d;stop-opacity:1;" />
+      <stop
+         id="stop4448"
+         offset="0.50000000"
+         style="stop-color:#b1b1b1;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4444"
+         offset="1.0000000"
+         style="stop-color:#686868;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       cx="24.306795"
+       cy="42.07798"
+       fx="24.306795"
+       fy="42.07798"
+       gradientTransform="matrix(1,0,0,0.284916,0,30.08928)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4548"
+       inkscape:collect="always"
+       r="15.821514"
+       xlink:href="#linearGradient4542" />
+    <linearGradient
+       id="linearGradient259">
+      <stop
+         id="stop260"
+         offset="0.0000000"
+         style="stop-color:#fafafa;stop-opacity:1.0000000;" />
+      <stop
+         id="stop261"
+         offset="1.0000000"
+         style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient269">
+      <stop
+         id="stop270"
+         offset="0.0000000"
+         style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
+      <stop
+         id="stop271"
+         offset="1.0000000"
+         style="stop-color:#4c4c4c;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       cx="20.892099"
+       cy="114.5684"
+       fx="20.892099"
+       fy="114.5684"
+       gradientUnits="userSpaceOnUse"
+       id="aigrd2"
+       r="5.256">
+      <stop
+         id="stop15566"
+         offset="0"
+         style="stop-color:#F0F0F0" />
+      <stop
+         id="stop15568"
+         offset="1.0000000"
+         style="stop-color:#9a9a9a;stop-opacity:1.0000000;" />
+    </radialGradient>
+    <radialGradient
+       cx="20.892099"
+       cy="64.567902"
+       fx="20.892099"
+       fy="64.567902"
+       gradientUnits="userSpaceOnUse"
+       id="aigrd3"
+       r="5.257">
+      <stop
+         id="stop15573"
+         offset="0"
+         style="stop-color:#F0F0F0" />
+      <stop
+         id="stop15575"
+         offset="1.0000000"
+         style="stop-color:#9a9a9a;stop-opacity:1.0000000;" />
+    </radialGradient>
+    <linearGradient
+       id="linearGradient15662">
+      <stop
+         id="stop15664"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop15666"
+         offset="1.0000000"
+         style="stop-color:#f8f8f8;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4542"
+       inkscape:collect="always">
+      <stop
+         id="stop4544"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop4546"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2659"
+       inkscape:collect="always"
+       x1="302.85715"
+       x2="302.85715"
+       xlink:href="#linearGradient5048"
+       y1="366.64789"
+       y2="609.50507" />
+    <linearGradient
+       id="linearGradient2651">
+      <stop
+         id="stop2653"
+         offset="0"
+         style="stop-color:black;stop-opacity:0;" />
+      <stop
+         id="stop2655"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         id="stop2657"
+         offset="1"
+         style="stop-color:black;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2649"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2641"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2408"
+       inkscape:collect="always"
+       x1="18.935766"
+       x2="53.588623"
+       xlink:href="#linearGradient2402"
+       y1="23.667896"
+       y2="26.649363" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2386"
+       inkscape:collect="always"
+       x1="62.513836"
+       x2="15.984863"
+       xlink:href="#linearGradient2380"
+       y1="36.061237"
+       y2="20.60858" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1501"
+       inkscape:collect="always"
+       x1="46.834816"
+       x2="45.380436"
+       xlink:href="#linearGradient2871"
+       y1="45.264122"
+       y2="50.939667" />
+    <linearGradient
+       id="linearGradient2831">
+      <stop
+         id="stop2833"
+         offset="0"
+         style="stop-color:#1d5e23;stop-opacity:1;" />
+      <stop
+         id="stop2855"
+         offset="0.33333334"
+         style="stop-color:#329652;stop-opacity:1;" />
+      <stop
+         id="stop2835"
+         offset="1"
+         style="stop-color:#83d8ab;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2871"
+       inkscape:collect="always">
+      <stop
+         id="stop2873"
+         offset="0"
+         style="stop-color:#3465a4;stop-opacity:1;" />
+      <stop
+         id="stop2875"
+         offset="1"
+         style="stop-color:#3465a4;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2380">
+      <stop
+         id="stop2382"
+         offset="0"
+         style="stop-color:#b9e7c9;stop-opacity:1;" />
+      <stop
+         id="stop2384"
+         offset="1"
+         style="stop-color:#72cf79;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2402">
+      <stop
+         id="stop2404"
+         offset="0"
+         style="stop-color:#72cf7b;stop-opacity:1;" />
+      <stop
+         id="stop2406"
+         offset="1"
+         style="stop-color:#57c552;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2682">
+      <stop
+         id="stop2684"
+         offset="0"
+         style="stop-color:#3977c3;stop-opacity:1;" />
+      <stop
+         id="stop2686"
+         offset="1"
+         style="stop-color:#89aedc;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2690">
+      <stop
+         id="stop2692"
+         offset="0"
+         style="stop-color:#57be6f;stop-opacity:1;" />
+      <stop
+         id="stop2694"
+         offset="1"
+         style="stop-color:#c4ebca;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5903"
+       inkscape:collect="always"
+       x1="62.513836"
+       x2="15.984863"
+       xlink:href="#linearGradient2380"
+       y1="36.061237"
+       y2="20.60858" />
+    <linearGradient
+       gradientTransform="matrix(-6.0935847,-5.1483414,-5.1483414,6.0935847,846.16404,624.52042)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5908"
+       inkscape:collect="always"
+       x1="62.513836"
+       x2="15.984863"
+       xlink:href="#linearGradient2380"
+       y1="36.061237"
+       y2="20.60858" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7848"
+       inkscape:collect="always"
+       x1="18.935766"
+       x2="53.588623"
+       xlink:href="#linearGradient2402"
+       y1="23.667896"
+       y2="26.649363" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7850"
+       inkscape:collect="always"
+       x1="46.834816"
+       x2="45.380436"
+       xlink:href="#linearGradient2871"
+       y1="45.264122"
+       y2="50.939667" />
+    <linearGradient
+       gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9972"
+       inkscape:collect="always"
+       x1="28.244684"
+       x2="28.244684"
+       xlink:href="#linearGradient9910"
+       y1="60.445503"
+       y2="68.224884" />
+    <linearGradient
+       gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9968"
+       inkscape:collect="always"
+       x1="28.244684"
+       x2="28.244684"
+       xlink:href="#linearGradient9920"
+       y1="60.445503"
+       y2="68.224884" />
+    <linearGradient
+       gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9965"
+       inkscape:collect="always"
+       x1="28.244684"
+       x2="28.244684"
+       xlink:href="#linearGradient9910"
+       y1="60.445503"
+       y2="68.224884" />
+    <linearGradient
+       gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9961"
+       inkscape:collect="always"
+       x1="55.876038"
+       x2="38.061356"
+       xlink:href="#linearGradient9952"
+       y1="62.401989"
+       y2="62.827091" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6401"
+       inkscape:collect="always"
+       x1="20.064156"
+       x2="20.682873"
+       xlink:href="#linearGradient6395"
+       y1="27.140348"
+       y2="44.110912" />
+    <radialGradient
+       cx="23.25"
+       cy="37.75"
+       fx="23.25"
+       fy="37.75"
+       gradientTransform="matrix(1,0,0,0.420168,0,21.88866)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6353"
+       inkscape:collect="always"
+       r="14.875"
+       xlink:href="#linearGradient5048" />
+    <linearGradient
+       gradientTransform="matrix(0.00525957,0.999987,0.999987,-0.00525957,48.6929,-14.14491)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6349"
+       inkscape:collect="always"
+       x1="25.71875"
+       x2="25.514589"
+       xlink:href="#linearGradient2994"
+       y1="31.046875"
+       y2="30.703125" />
+    <radialGradient
+       cx="29.053354"
+       cy="27.640751"
+       fx="29.053354"
+       fy="27.640751"
+       gradientTransform="matrix(0.0153767,2.923527,2.029691,-0.01067544,20.39098,-69.72665)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6347"
+       inkscape:collect="always"
+       r="3.2408545"
+       xlink:href="#linearGradient2984" />
+    <linearGradient
+       gradientTransform="matrix(0.00525957,0.999987,0.999987,-0.00525957,42.99552,-2.496241)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6345"
+       inkscape:collect="always"
+       x1="46"
+       x2="47.6875"
+       xlink:href="#linearGradient2974"
+       y1="19.8125"
+       y2="22.625" />
+    <linearGradient
+       gradientTransform="matrix(0.00525957,0.999987,0.999987,-0.00525957,42.9955,-2.496241)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6343"
+       inkscape:collect="always"
+       x1="48.90625"
+       x2="50.988335"
+       xlink:href="#linearGradient2966"
+       y1="17.376184"
+       y2="22.250591" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5074"
+       inkscape:collect="always"
+       x1="11.75"
+       x2="37.625"
+       xlink:href="#linearGradient5068"
+       y1="14.1875"
+       y2="14.1875" />
+    <linearGradient
+       gradientTransform="translate(0,5.625)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5064"
+       inkscape:collect="always"
+       x1="30.875"
+       x2="15.625"
+       xlink:href="#linearGradient5058"
+       y1="19.4596"
+       y2="19.0846" />
+    <radialGradient
+       cx="23.25"
+       cy="37.75"
+       fx="23.25"
+       fy="37.75"
+       gradientTransform="matrix(1,0,0,0.420168,0,21.88866)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5054"
+       inkscape:collect="always"
+       r="14.875"
+       xlink:href="#linearGradient5048" />
+    <linearGradient
+       gradientTransform="translate(0,5.625)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5042"
+       inkscape:collect="always"
+       x1="15.375"
+       x2="34.250416"
+       xlink:href="#linearGradient5036"
+       y1="26.0846"
+       y2="26.0846" />
+    <linearGradient
+       id="linearGradient5036">
+      <stop
+         id="stop5038"
+         offset="0"
+         style="stop-color:#f5f5f5;stop-opacity:0.09;" />
+      <stop
+         id="stop5044"
+         offset="0.2631579"
+         style="stop-color:#ffffff;stop-opacity:0.89999998;" />
+      <stop
+         id="stop5088"
+         offset="0.74792242"
+         style="stop-color:#c7c7c7;stop-opacity:0.46000001;" />
+      <stop
+         id="stop5040"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0.78039217;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5058">
+      <stop
+         id="stop5060"
+         offset="0"
+         style="stop-color:#959791;stop-opacity:1;" />
+      <stop
+         id="stop5066"
+         offset="0.5"
+         style="stop-color:#f8f8f8;stop-opacity:1;" />
+      <stop
+         id="stop3430"
+         offset="1"
+         style="stop-color:#8c8c8c;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5068">
+      <stop
+         id="stop5070"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop5078"
+         offset="0.32894737"
+         style="stop-color:#ffffff;stop-opacity:0.69;" />
+      <stop
+         id="stop5076"
+         offset="0.65789473"
+         style="stop-color:#c2c2c2;stop-opacity:0.34;" />
+      <stop
+         id="stop5072"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3414">
+      <stop
+         id="stop3416"
+         offset="0"
+         style="stop-color:#ffd1d1;stop-opacity:1;" />
+      <stop
+         id="stop3418"
+         offset="0.5"
+         style="stop-color:#ff1d1d;stop-opacity:1;" />
+      <stop
+         id="stop3420"
+         offset="1"
+         style="stop-color:#6f0000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3408">
+      <stop
+         id="stop3410"
+         offset="0"
+         style="stop-color:#c1c1c1;stop-opacity:1;" />
+      <stop
+         id="stop3412"
+         offset="1"
+         style="stop-color:#acacac;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2984"
+       inkscape:collect="always">
+      <stop
+         id="stop2986"
+         offset="0"
+         style="stop-color:#e7e2b8;stop-opacity:1;" />
+      <stop
+         id="stop2988"
+         offset="1"
+         style="stop-color:#e7e2b8;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3399">
+      <stop
+         id="stop3401"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop3403"
+         offset="1"
+         style="stop-color:#c9c9c9;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6395"
+       inkscape:collect="always">
+      <stop
+         id="stop6397"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop6399"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9910">
+      <stop
+         id="stop9912"
+         offset="0"
+         style="stop-color:#729fcf;stop-opacity:1;" />
+      <stop
+         id="stop9918"
+         offset="0.31578946"
+         style="stop-color:#a5bfda;stop-opacity:1;" />
+      <stop
+         id="stop9914"
+         offset="1"
+         style="stop-color:#376ca4;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9920">
+      <stop
+         id="stop9922"
+         offset="0"
+         style="stop-color:#5b90c8;stop-opacity:1;" />
+      <stop
+         id="stop9924"
+         offset="0.31578946"
+         style="stop-color:#8fb0d1;stop-opacity:1;" />
+      <stop
+         id="stop9926"
+         offset="1"
+         style="stop-color:#34679d;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9952"
+       inkscape:collect="always">
+      <stop
+         id="stop9954"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop9956"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="24.8125"
+       cy="39.125"
+       fx="24.8125"
+       fy="39.125"
+       gradientTransform="matrix(1,0,0,0.374558,0,24.47041)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2746"
+       inkscape:collect="always"
+       r="17.6875"
+       xlink:href="#linearGradient3041" />
+    <radialGradient
+       cx="24.8125"
+       cy="39.125"
+       fx="24.8125"
+       fy="39.125"
+       gradientTransform="matrix(1,0,0,0.374558,0,24.47041)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2748"
+       inkscape:collect="always"
+       r="17.6875"
+       xlink:href="#linearGradient3041" />
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.6871,470.17853)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2750"
+       inkscape:collect="always"
+       x1="19.648342"
+       x2="20.631224"
+       xlink:href="#linearGradient3049"
+       y1="42.253601"
+       y2="6.7758031" />
+    <linearGradient
+       gradientTransform="matrix(0.8782699,0,0,0.8782699,1049.7965,-403.53398)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2752"
+       inkscape:collect="always"
+       x1="50.152931"
+       x2="25.291086"
+       xlink:href="#linearGradient3061"
+       y1="-3.6324477"
+       y2="-4.3002653" />
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.9976,470.79956)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2754"
+       inkscape:collect="always"
+       x1="38.227654"
+       x2="37.53537"
+       xlink:href="#linearGradient3077"
+       y1="13.602527"
+       y2="6.6285896" />
+    <linearGradient
+       gradientTransform="translate(1019.1501,465.21085)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2756"
+       inkscape:collect="always"
+       x1="31.177404"
+       x2="40.859177"
+       xlink:href="#linearGradient2250"
+       y1="19.821514"
+       y2="9.6568537" />
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.6871,470.17853)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2758"
+       inkscape:collect="always"
+       x1="9.7503242"
+       x2="16.915297"
+       xlink:href="#linearGradient3087"
+       y1="32.28376"
+       y2="39.443218" />
+    <linearGradient
+       gradientTransform="matrix(1.007254,-0.02636526,0.02636526,1.007254,1020.7435,465.29004)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2760"
+       inkscape:collect="always"
+       x1="12.004697"
+       x2="10.650805"
+       xlink:href="#linearGradient2257"
+       y1="35.688461"
+       y2="33.194965" />
+    <linearGradient
+       gradientTransform="matrix(0.878099,-0.0173237,0.0173237,0.878099,1021.3138,469.27875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2762"
+       inkscape:collect="always"
+       x1="14.017542"
+       x2="15.415793"
+       xlink:href="#linearGradient2265"
+       y1="36.942543"
+       y2="38.268368" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3603"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3605"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3607"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3611"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3613"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3617"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3619"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3623"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3625"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3629"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3631"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3635"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3637"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3641"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3643"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3647"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3649"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3653"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3655"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3659"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3663"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3665"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3669"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3673"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3675"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3679"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3681"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="11.319205"
+       cy="22.454971"
+       fx="11.319205"
+       fy="22.454971"
+       gradientTransform="matrix(0,-8.4690288,10.248644,0,454.76267,899.88684)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3755"
+       inkscape:collect="always"
+       r="16.9562"
+       xlink:href="#linearGradient2304" />
+    <radialGradient
+       cx="24.53788"
+       cy="0.40010813"
+       fx="24.53788"
+       fy="0.40010813"
+       gradientTransform="matrix(0,-20.561511,15.647805,0,476.46787,1144.4736)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3757"
+       inkscape:collect="always"
+       r="17.171415"
+       xlink:href="#linearGradient8650" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5446"
+       x1="43.944302"
+       x2="411.3941"
+       y1="733.39258"
+       y2="425.06561">
+      <stop
+         id="stop12"
+         offset="0.0562"
+         style="stop-color:#003F90" />
+      <stop
+         id="stop14"
+         offset="0.5674"
+         style="stop-color:#0093D2" />
+      <stop
+         id="stop16"
+         offset="0.9551"
+         style="stop-color:#EDF3F7" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5452"
+       x1="43.943802"
+       x2="411.39359"
+       y1="733.39258"
+       y2="425.06561">
+      <stop
+         id="stop21"
+         offset="0.0562"
+         style="stop-color:#003F90" />
+      <stop
+         id="stop23"
+         offset="0.5674"
+         style="stop-color:#0093D2" />
+      <stop
+         id="stop25"
+         offset="0.9551"
+         style="stop-color:#EDF3F7" />
+    </linearGradient>
+    <radialGradient
+       cx="12.57571"
+       cy="67.501709"
+       fx="12.57571"
+       fy="67.501709"
+       gradientTransform="scale(1.925808,0.519262)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient35088"
+       inkscape:collect="always"
+       r="8.7662792"
+       xlink:href="#linearGradient2454" />
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35090"
+       inkscape:collect="always"
+       x1="12.88666"
+       x2="20.087339"
+       xlink:href="#linearGradient10591"
+       y1="4.3602757"
+       y2="18.414022" />
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35092"
+       inkscape:collect="always"
+       x1="19.250618"
+       x2="16.198252"
+       xlink:href="#linearGradient11335"
+       y1="9.6635771"
+       y2="6.0396547" />
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,21.67589)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35094"
+       inkscape:collect="always"
+       x1="6.72682"
+       x2="40.938126"
+       xlink:href="#linearGradient2092"
+       y1="32.161697"
+       y2="32.161697" />
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,22.22637)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35096"
+       inkscape:collect="always"
+       x1="31.630468"
+       x2="8.6713638"
+       xlink:href="#linearGradient11327"
+       y1="41.791817"
+       y2="25.793524" />
+    <linearGradient
+       gradientTransform="matrix(0.453445,0,0,0.470026,30.17248,24.3894)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35098"
+       inkscape:collect="always"
+       x1="10.907269"
+       x2="30.875446"
+       xlink:href="#linearGradient9845"
+       y1="25.002281"
+       y2="36.127281" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.461806,23.89003,23.47875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35100"
+       inkscape:collect="always"
+       x1="14.217941"
+       x2="17.859085"
+       xlink:href="#linearGradient12071"
+       y1="6.8795347"
+       y2="3.9566603" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.490236,34.67523,22.83397)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35102"
+       inkscape:collect="always"
+       x1="11.5"
+       x2="11.779029"
+       xlink:href="#linearGradient12071"
+       y1="20.579729"
+       y2="14.259961" />
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35635"
+       inkscape:collect="always"
+       x1="12.88666"
+       x2="20.087339"
+       xlink:href="#linearGradient10591"
+       y1="4.3602757"
+       y2="18.414022" />
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35637"
+       inkscape:collect="always"
+       x1="19.250618"
+       x2="16.198252"
+       xlink:href="#linearGradient11335"
+       y1="9.6635771"
+       y2="6.0396547" />
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,21.67589)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35639"
+       inkscape:collect="always"
+       x1="6.72682"
+       x2="40.938126"
+       xlink:href="#linearGradient2092"
+       y1="32.161697"
+       y2="32.161697" />
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,22.22637)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35641"
+       inkscape:collect="always"
+       x1="31.630468"
+       x2="8.6713638"
+       xlink:href="#linearGradient11327"
+       y1="41.791817"
+       y2="25.793524" />
+    <linearGradient
+       gradientTransform="matrix(0.453445,0,0,0.470026,30.17248,24.3894)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35643"
+       inkscape:collect="always"
+       x1="10.907269"
+       x2="30.875446"
+       xlink:href="#linearGradient9845"
+       y1="25.002281"
+       y2="36.127281" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.461806,23.89003,23.47875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35645"
+       inkscape:collect="always"
+       x1="14.217941"
+       x2="17.859085"
+       xlink:href="#linearGradient12071"
+       y1="6.8795347"
+       y2="3.9566603" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.490236,34.67523,22.83397)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35647"
+       inkscape:collect="always"
+       x1="11.5"
+       x2="11.779029"
+       xlink:href="#linearGradient12071"
+       y1="20.579729"
+       y2="14.259961" />
+    <linearGradient
+       gradientTransform="matrix(31.442825,0,0,15.721413,163.64608,98.870782)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35650"
+       inkscape:collect="always"
+       x1="11.5"
+       x2="11.779029"
+       xlink:href="#linearGradient12071"
+       y1="20.579729"
+       y2="14.259961" />
+    <linearGradient
+       gradientTransform="matrix(31.442825,0,0,14.809689,-182.22526,119.54828)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35653"
+       inkscape:collect="always"
+       x1="14.217941"
+       x2="17.859085"
+       xlink:href="#linearGradient12071"
+       y1="6.8795347"
+       y2="3.9566603" />
+    <linearGradient
+       gradientTransform="matrix(14.541559,0,0,15.073297,19.247073,148.75198)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35656"
+       inkscape:collect="always"
+       x1="10.907269"
+       x2="30.875446"
+       xlink:href="#linearGradient9845"
+       y1="25.002281"
+       y2="36.127281" />
+    <linearGradient
+       gradientTransform="matrix(15.721413,0,0,17.134408,-9.2895887,61.732234)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35659"
+       inkscape:collect="always"
+       x1="6.72682"
+       x2="40.938126"
+       xlink:href="#linearGradient2092"
+       y1="32.161697"
+       y2="32.161697" />
+    <linearGradient
+       gradientTransform="matrix(15.721413,0,0,17.134408,-9.2895887,79.385615)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35661"
+       inkscape:collect="always"
+       x1="31.630468"
+       x2="8.6713638"
+       xlink:href="#linearGradient11327"
+       y1="41.791817"
+       y2="25.793524" />
+    <linearGradient
+       gradientTransform="matrix(15.401043,0,0,15.948654,-11.070064,104.56497)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35664"
+       inkscape:collect="always"
+       x1="12.88666"
+       x2="20.087339"
+       xlink:href="#linearGradient10591"
+       y1="4.3602757"
+       y2="18.414022" />
+    <linearGradient
+       gradientTransform="matrix(15.401043,0,0,15.948654,-11.070064,104.56497)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35666"
+       inkscape:collect="always"
+       x1="19.250618"
+       x2="16.198252"
+       xlink:href="#linearGradient11335"
+       y1="9.6635771"
+       y2="6.0396547" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3198"
+       inkscape:collect="always"
+       x1="356.35681"
+       x2="425.96066"
+       xlink:href="#linearGradient3177"
+       y1="164.76173"
+       y2="646.65405" />
+    <linearGradient
+       id="linearGradient3177">
+      <stop
+         id="stop3187"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+      <stop
+         id="stop3200"
+         offset="0.4375"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop3191"
+         offset="0.9375"
+         style="stop-color:#ffffff;stop-opacity:0.43333334;" />
+      <stop
+         id="stop3181"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(1.031913,0,0,0.9606757,-10.760168,19.498309)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3946"
+       inkscape:collect="always"
+       x1="337.49271"
+       x2="416.38455"
+       xlink:href="#linearGradient3167"
+       y1="402.10623"
+       y2="645.40979" />
+    <linearGradient
+       id="linearGradient3167">
+      <stop
+         id="stop3169"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop3171"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       y2="645.40979"
+       x2="416.38455"
+       y1="402.10623"
+       x1="337.49271"
+       gradientTransform="matrix(1.031913,0,0,0.9606757,-10.760168,19.498309)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3031"
+       xlink:href="#linearGradient3167"
+       inkscape:collect="always" />
+    <radialGradient
+       cx="25.125"
+       cy="36.75"
+       fx="25.125"
+       fy="36.75"
+       gradientTransform="matrix(1,0,0,0.595238,0,14.875)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3483"
+       inkscape:collect="always"
+       r="15.75"
+       xlink:href="#linearGradient21644" />
+    <linearGradient
+       id="linearGradient21644">
+      <stop
+         id="stop21646"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop21648"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="-19.515638"
+       cy="16.855663"
+       fx="-19.515638"
+       fy="16.855663"
+       gradientTransform="matrix(4.445991,0,0,6.8665,67.25071,-104.6679)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3485"
+       inkscape:collect="always"
+       r="8.753643"
+       xlink:href="#linearGradient12912" />
+    <linearGradient
+       id="linearGradient12912">
+      <stop
+         id="stop12914"
+         offset="0"
+         style="stop-color:#3465a4;stop-opacity:1;" />
+      <stop
+         id="stop12918"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop12916"
+         offset="1"
+         style="stop-color:#eeeeec;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       r="8.753643"
+       fy="16.855663"
+       fx="-19.515638"
+       cy="16.855663"
+       cx="-19.515638"
+       gradientTransform="matrix(4.445991,0,0,6.8665,67.25071,-104.6679)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3133"
+       xlink:href="#linearGradient12912"
+       inkscape:collect="always" />
+  </defs>
+  <sodipodi:namedview
+     bordercolor="#666666"
+     borderopacity="1.0"
+     id="base"
+     inkscape:current-layer="layer1"
+     inkscape:cx="-104.82694"
+     inkscape:cy="8.4486977"
+     inkscape:document-units="px"
+     inkscape:guide-bbox="true"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:window-height="975"
+     inkscape:window-maximized="1"
+     inkscape:window-width="1280"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:zoom="2.2083652"
+     pagecolor="#ffffff"
+     showgrid="false"
+     showguides="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0">
+    <sodipodi:guide
+       id="guide2280"
+       orientation="horizontal"
+       position="-330.12016,63.71184" />
+    <sodipodi:guide
+       id="guide2282"
+       orientation="vertical"
+       position="4.523254,-481.5065" />
+    <sodipodi:guide
+       id="guide2284"
+       orientation="vertical"
+       position="382.41989,-481.5065" />
+    <sodipodi:guide
+       id="guide2286"
+       orientation="horizontal"
+       position="-330.12016,-348.33208" />
+    <sodipodi:guide
+       id="guide2491"
+       orientation="horizontal"
+       position="-330.12016,418.84362" />
+    <sodipodi:guide
+       id="guide2495"
+       orientation="vertical"
+       position="84.200254,-481.5065" />
+    <sodipodi:guide
+       id="guide2497"
+       orientation="horizontal"
+       position="-330.12016,-326.70547" />
+    <sodipodi:guide
+       id="guide3687"
+       orientation="horizontal"
+       position="-330.12016,455.2674" />
+    <sodipodi:guide
+       id="guide3689"
+       orientation="vertical"
+       position="-396.13824,-481.5065" />
+    <sodipodi:guide
+       id="guide3691"
+       orientation="horizontal"
+       position="-330.12016,-393.8618" />
+    <sodipodi:guide
+       id="guide3693"
+       orientation="vertical"
+       position="455.26743,-481.5065" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" />
+        <dc:title></dc:title>
+        <dc:date>July 2008</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Beate Kaspar</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title>Beate Kaspar</dc:title>
+          </cc:Agent>
+        </dc:rights>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>RRZE</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>lock</rdf:li>
+            <rdf:li>security</rdf:li>
+            <rdf:li>encryption</rdf:li>
+            <rdf:li>vpn</rdf:li>
+            <rdf:li>secure</rdf:li>
+            <rdf:li>safe</rdf:li>
+            <rdf:li>SSL</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <dc:contributor>
+          <cc:Agent>
+            <dc:title>Hendrik Eggers, Franziska Sponsel</dc:title>
+          </cc:Agent>
+        </dc:contributor>
+        <dc:description>uses <http://webcvs.freedesktop.org/tango/tango-icon-theme/scalable/actions/system-lock-screen.svg></dc:description>
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/by-sa/3.0/">
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Notice" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Attribution" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#ShareAlike" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Ebene 1"
+     transform="translate(-330.12016,-510.85568)">
+    <g
+       id="g35677"
+       transform="matrix(0.07058824,0,0,0.07058824,334.69991,502.67763)">
+      <g
+         id="g35668">
+        <rect
+           height="850"
+           id="rect2300"
+           style="fill:none;stroke:none"
+           width="850"
+           x="-64.879845"
+           y="115.85568" />
+        <path
+           d="m 41.10058,35.051105 c 0,2.514001 -7.558406,4.552001 -16.882173,4.552001 -9.323767,0 -16.8821739,-2.038 -16.8821739,-4.552001 0,-2.514 7.5584069,-4.552 16.8821739,-4.552 9.323767,0 16.882173,2.038 16.882173,4.552 z"
+           id="path2452"
+           sodipodi:cx="24.218407"
+           sodipodi:cy="35.051105"
+           sodipodi:rx="16.882174"
+           sodipodi:ry="4.552"
+           sodipodi:type="arc"
+           style="opacity:0.50857143;fill:url(#radialGradient35088);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+           transform="matrix(22.64864,0,0,17.97418,-183.8862,229.3831)" />
+        <path
+           d="m 149.64097,462.77119 0,-122.55827 c 0,-125.51812 84.12878,-182.74178 209.22253,-181.17424 125.77437,1.56753 208.8138,56.17792 208.8138,183.17269 l -0.20845,120.55982 -76.73795,0 0,-88.997 c -2.06012,-30.8929 8.56244,-134.37251 -130.98679,-134.37251 -140.51178,0 -132.25265,103.8535 -131.74913,134.98757 l 0,88.38194 -78.35452,0 z"
+           id="path2086"
+           sodipodi:nodetypes="cczcccczccc"
+           style="fill:url(#linearGradient35664);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient35666);stroke-width:37.98667145;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+           inkscape:connector-curvature="0" />
+        <rect
+           height="377.42322"
+           id="rect1314"
+           rx="84.899323"
+           ry="73.867165"
+           style="fill:url(#linearGradient35659);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient35661);stroke-width:37.98667526;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+           width="550.18536"
+           x="92.865761"
+           y="464.39069" />
+        <rect
+           height="302.70956"
+           id="rect6903"
+           rx="46.140316"
+           ry="46.140354"
+           style="fill:none;stroke:url(#linearGradient35656);stroke-width:37.98670959;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.60109289;stroke-dasharray:none;stroke-dashoffset:0"
+           width="480.31729"
+           x="127.86926"
+           y="501.4451" />
+        <path
+           d="m 163.64595,347.00672 c 4.16875,-92.93931 30.00738,-162.92832 202.36234,-168.86158 -111.60142,15.72802 -172.30435,48.31298 -172.30435,145.47854 0,0 -2.78392,120.42879 -2.78392,120.42879 l -27.27407,0 0,-97.04575 z"
+           id="rect11343"
+           sodipodi:nodetypes="ccsccc"
+           style="fill:url(#linearGradient35653);fill-opacity:1;fill-rule:evenodd;stroke:none"
+           inkscape:connector-curvature="0" />
+        <rect
+           height="157.21413"
+           id="rect1345"
+           rx="0"
+           ry="0"
+           style="fill:url(#linearGradient35650);fill-opacity:1;fill-rule:evenodd;stroke:none"
+           width="31.442825"
+           x="509.51706"
+           y="287.52774" />
+      </g>
+    </g>
+    <g
+       transform="matrix(0.03529412,0,0,0.03529412,362.06234,536.37066)"
+       id="g3489">
+      <rect
+         height="850"
+         id="rect2300-5"
+         style="fill:none;stroke:none"
+         width="850"
+         x="-64.879845"
+         y="115.85572" />
+      <path
+         d="m 40.875,36.75 c 0,5.17767 -7.051515,9.375 -15.75,9.375 -8.698485,0 -15.75,-4.19733 -15.75,-9.375 0,-5.17767 7.051515,-9.375 15.75,-9.375 8.698485,0 15.75,4.19733 15.75,9.375 z"
+         id="path21642"
+         sodipodi:cx="25.125"
+         sodipodi:cy="36.75"
+         sodipodi:rx="15.75"
+         sodipodi:ry="9.375"
+         sodipodi:type="arc"
+         style="opacity:0.63068183;fill:url(#radialGradient3483);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(17.621862,0,0,5.5166352,-100.59391,697.47977)" />
+      <path
+         d="m -20.25,5.875 c -1.059019,2.63e-5 -2.147637,0.1232356 -3.28125,0.34375 -1.132925,0.2204283 -2.380162,0.5375125 -3.75,1 a 0.13496364,0.13496364 0 0 0 -0.03125,0 0.13496364,0.13496364 0 0 0 -0.03125,0.03125 0.13496364,0.13496364 0 0 0 -0.03125,0.03125 0.13496364,0.13496364 0 0 0 0,0.03125 0.13496364,0.13496364 0 0 0 0,0.03125 l 0,5.15625 a 0.13496364,0.13496364 0 0 0 0,0.03125 0.13496364,0.13496364 0 0 0 0,0.03125 0.13496364,0.13496364 0 0 0 0.03125,0.03125 0.13496364,0.134963 [...]
+         id="path1554"
+         inkscape:href="#text2215"
+         inkscape:original="M -20.25 6 C -21.298341 6.000026 -22.372769 6.1244771 -23.5 6.34375 C -24.627244 6.563073 -25.886043 6.8832479 -27.25 7.34375 L -27.25 12.5 C -26.100219 11.776335 -24.997109 11.236862 -23.9375 10.875 C -22.877902 10.502213 -21.881822 10.312521 -20.96875 10.3125 C -19.999334 10.312521 -19.259834 10.530174 -18.71875 10.96875 C -18.177686 11.396402 -17.906262 12.013726 -17.90625 12.78125 C -17.906261 13.285654 -18.039408 13.776881 -18.34375 14.28125 C -18.636843  [...]
+         inkscape:radius="0.13495015"
+         sodipodi:type="inkscape:offset"
+         style="font-size:34.15322876px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:url(#radialGradient3133);fill-opacity:1;stroke:#204a87;stroke-width:1.09947956;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.78823529;stroke-dasharray:none;font-family:Bitstream Vera Sans"
+         transform="matrix(28.302575,0,0,27.813378,922.47603,-8.2609123)"
+         xlink:href="#text2215" />
+    </g>
+  </g>
+</svg>
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/lock_unlocked.svg b/lib/taurus/qt/qtgui/resource/extra-icons/lock_unlocked.svg
new file mode 100644
index 0000000..1c75000
--- /dev/null
+++ b/lib/taurus/qt/qtgui/resource/extra-icons/lock_unlocked.svg
@@ -0,0 +1,3117 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   height="60.000004"
+   id="svg2"
+   inkscape:export-xdpi="76.235291"
+   inkscape:export-ydpi="76.235291"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape"
+   inkscape:version="0.48.1 r9760"
+   sodipodi:version="0.32"
+   version="1.1"
+   width="60.000004"
+   sodipodi:docname="lock_unknown.svg">
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       id="perspective20643"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient2454"
+       inkscape:collect="always">
+      <stop
+         id="stop2456"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop2458"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="12.57571"
+       cy="67.501709"
+       fx="12.57571"
+       fy="67.501709"
+       gradientTransform="scale(1.925808,0.519262)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2460"
+       inkscape:collect="always"
+       r="8.7662792"
+       xlink:href="#linearGradient2454" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.490236,34.67523,22.83397)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1898"
+       inkscape:collect="always"
+       x1="11.5"
+       x2="11.779029"
+       xlink:href="#linearGradient12071"
+       y1="20.579729"
+       y2="14.259961" />
+    <linearGradient
+       id="linearGradient12071">
+      <stop
+         id="stop12073"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop12075"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.461806,23.89003,23.47875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1896"
+       inkscape:collect="always"
+       x1="14.217941"
+       x2="17.859085"
+       xlink:href="#linearGradient12071"
+       y1="6.8795347"
+       y2="3.9566603" />
+    <linearGradient
+       id="linearGradient9845">
+      <stop
+         id="stop9847"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop9849"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.49484536;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.453445,0,0,0.470026,30.17248,24.3894)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1894"
+       inkscape:collect="always"
+       x1="10.907269"
+       x2="30.875446"
+       xlink:href="#linearGradient9845"
+       y1="25.002281"
+       y2="36.127281" />
+    <linearGradient
+       id="linearGradient11327">
+      <stop
+         id="stop11329"
+         offset="0"
+         style="stop-color:#8f5902;stop-opacity:1;" />
+      <stop
+         id="stop11331"
+         offset="1"
+         style="stop-color:#c17d11;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,22.22637)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1892"
+       inkscape:collect="always"
+       x1="31.630468"
+       x2="8.6713638"
+       xlink:href="#linearGradient11327"
+       y1="41.791817"
+       y2="25.793524" />
+    <linearGradient
+       id="linearGradient2092">
+      <stop
+         id="stop2094"
+         offset="0"
+         style="stop-color:#fce94f;stop-opacity:1;" />
+      <stop
+         id="stop27163"
+         offset="0.20999999"
+         style="stop-color:#ffec41;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2293"
+         offset="0.83999997"
+         style="stop-color:#edd400;stop-opacity:1;" />
+      <stop
+         id="stop2100"
+         offset="1"
+         style="stop-color:#c4a00f;stop-opacity:0.94117647;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,21.67589)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1890"
+       inkscape:collect="always"
+       x1="6.72682"
+       x2="40.938126"
+       xlink:href="#linearGradient2092"
+       y1="32.161697"
+       y2="32.161697" />
+    <linearGradient
+       id="linearGradient11335">
+      <stop
+         id="stop11337"
+         offset="0"
+         style="stop-color:#555753;stop-opacity:1;" />
+      <stop
+         id="stop11339"
+         offset="1"
+         style="stop-color:#888a85;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1888"
+       inkscape:collect="always"
+       x1="19.250618"
+       x2="16.198252"
+       xlink:href="#linearGradient11335"
+       y1="9.6635771"
+       y2="6.0396547" />
+    <linearGradient
+       id="linearGradient10591">
+      <stop
+         id="stop10593"
+         offset="0"
+         style="stop-color:#babdb6;stop-opacity:1;" />
+      <stop
+         id="stop10599"
+         offset="0.5"
+         style="stop-color:#eeeeec;stop-opacity:1;" />
+      <stop
+         id="stop10595"
+         offset="1"
+         style="stop-color:#babdb6;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1886"
+       inkscape:collect="always"
+       x1="12.88666"
+       x2="20.087339"
+       xlink:href="#linearGradient10591"
+       y1="4.3602757"
+       y2="18.414022" />
+    <linearGradient
+       id="linearGradient11494">
+      <stop
+         id="stop11496"
+         offset="0"
+         style="stop-color:#2946ef;stop-opacity:1;" />
+      <stop
+         id="stop11498"
+         offset="1"
+         style="stop-color:#2929ef;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11520">
+      <stop
+         id="stop11522"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop11524"
+         offset="1.0000000"
+         style="stop-color:#dcdcdc;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       cx="24.44569"
+       cy="35.87817"
+       fx="24.44569"
+       fy="35.87817"
+       gradientTransform="matrix(35.895002,0,0,35.895002,-502.54107,-556.8092)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1366"
+       inkscape:collect="always"
+       r="20.530962"
+       xlink:href="#linearGradient11520" />
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6719"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6717"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <linearGradient
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6715"
+       inkscape:collect="always"
+       x1="302.85715"
+       x2="302.85715"
+       xlink:href="#linearGradient5048"
+       y1="366.64789"
+       y2="609.50507" />
+    <linearGradient
+       id="linearGradient4747">
+      <stop
+         id="stop4749"
+         offset="0"
+         style="stop-color:#16d277;stop-opacity:1;" />
+      <stop
+         id="stop4751"
+         offset="1"
+         style="stop-color:#069a4a;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4741">
+      <stop
+         id="stop4743"
+         offset="0"
+         style="stop-color:#16d2c3;stop-opacity:1;" />
+      <stop
+         id="stop4745"
+         offset="1"
+         style="stop-color:#069a92;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient8650"
+       inkscape:collect="always">
+      <stop
+         id="stop8652"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop8654"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2304">
+      <stop
+         id="stop2306"
+         offset="0"
+         style="stop-color:#73d216" />
+      <stop
+         id="stop2308"
+         offset="1.0000000"
+         style="stop-color:#4e9a06" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient1789">
+      <stop
+         id="stop1790"
+         offset="0"
+         style="stop-color:#a0a0a0;stop-opacity:1;" />
+      <stop
+         id="stop1791"
+         offset="1"
+         style="stop-color:#a8a8a8;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient137">
+      <stop
+         id="stop138"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.70059878;" />
+      <stop
+         id="stop139"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9766">
+      <stop
+         id="stop9768"
+         offset="0"
+         style="stop-color:#6194cb;stop-opacity:1;" />
+      <stop
+         id="stop9770"
+         offset="1"
+         style="stop-color:#729fcf;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient148">
+      <stop
+         id="stop149"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.13402061;" />
+      <stop
+         id="stop150"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.051546391;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient335">
+      <stop
+         id="stop336"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop337"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(39.086521,0,0,7.6340894,-33.337669,99.207026)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2813"
+       inkscape:collect="always"
+       x1="10.496115"
+       x2="10.219901"
+       xlink:href="#linearGradient2803"
+       y1="93.338043"
+       y2="84.287079" />
+    <linearGradient
+       gradientTransform="matrix(16.544137,0,0,17.757444,-33.337669,104.44258)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2100"
+       inkscape:collect="always"
+       x1="6.5871811"
+       x2="14.511404"
+       xlink:href="#linearGradient2094"
+       y1="22.132999"
+       y2="22.132999" />
+    <linearGradient
+       gradientTransform="matrix(4.3875865,0,0,64.946869,-32.890582,116.9616)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2801"
+       inkscape:collect="always"
+       x1="35.433037"
+       x2="41.219128"
+       xlink:href="#linearGradient2795"
+       y1="4.9530048"
+       y2="4.9530048" />
+    <linearGradient
+       id="linearGradient2116"
+       inkscape:collect="always">
+      <stop
+         id="stop2118"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2120"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(17.713207,0,0,16.536418,-50.611543,100.38611)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2112"
+       inkscape:collect="always"
+       x1="73.361984"
+       x2="-2.7582901"
+       xlink:href="#linearGradient2116"
+       y1="26.652197"
+       y2="21.270376" />
+    <radialGradient
+       cx="55"
+       cy="125"
+       fx="55"
+       fy="125"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient278"
+       inkscape:collect="always"
+       r="14.375"
+       xlink:href="#linearGradient12512" />
+    <linearGradient
+       id="linearGradient4228">
+      <stop
+         id="stop4230"
+         offset="0.0000000"
+         style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4232"
+         offset="1.0000000"
+         style="stop-color:#9f9f9f;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4244">
+      <stop
+         id="stop4246"
+         offset="0.0000000"
+         style="stop-color:#e4e4e4;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4248"
+         offset="1.0000000"
+         style="stop-color:#d3d3d3;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4184">
+      <stop
+         id="stop4186"
+         offset="0.0000000"
+         style="stop-color:#838383;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4188"
+         offset="1.0000000"
+         style="stop-color:#bbbbbb;stop-opacity:0.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4274">
+      <stop
+         id="stop4276"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.25490198;" />
+      <stop
+         id="stop4278"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2555">
+      <stop
+         id="stop2557"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2561"
+         offset="0.50000000"
+         style="stop-color:#e6e6e6;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2563"
+         offset="0.75000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2565"
+         offset="0.84166664"
+         style="stop-color:#e1e1e1;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2559"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12582">
+      <stop
+         id="stop12584"
+         offset="0"
+         style="stop-color:#d23d21;stop-opacity:1;" />
+      <stop
+         id="stop12586"
+         offset="0.25709054"
+         style="stop-color:#e9ca23;stop-opacity:1;" />
+      <stop
+         id="stop12588"
+         offset="0.5655992"
+         style="stop-color:#e98d47;stop-opacity:1;" />
+      <stop
+         id="stop12590"
+         offset="1"
+         style="stop-color:#e9c33e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2877">
+      <stop
+         id="stop2879"
+         offset="0"
+         style="stop-color:#75507b;stop-opacity:1;" />
+      <stop
+         id="stop2885"
+         offset="0.25709054"
+         style="stop-color:#a984af;stop-opacity:1;" />
+      <stop
+         id="stop2887"
+         offset="0.5655992"
+         style="stop-color:#513755;stop-opacity:1;" />
+      <stop
+         id="stop2881"
+         offset="1"
+         style="stop-color:#875c8e;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2865">
+      <stop
+         id="stop2867"
+         offset="0"
+         style="stop-color:#73d216;stop-opacity:1;" />
+      <stop
+         id="stop11581"
+         offset="0.25568181"
+         style="stop-color:#9ced4b;stop-opacity:1;" />
+      <stop
+         id="stop11583"
+         offset="0.59400827"
+         style="stop-color:#64b813;stop-opacity:1;" />
+      <stop
+         id="stop2869"
+         offset="1"
+         style="stop-color:#8eea34;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2913">
+      <stop
+         id="stop2915"
+         offset="0"
+         style="stop-color:white;stop-opacity:0.43877551;" />
+      <stop
+         id="stop2921"
+         offset="0.5"
+         style="stop-color:white;stop-opacity:1;" />
+      <stop
+         id="stop2917"
+         offset="1"
+         style="stop-color:white;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6932">
+      <stop
+         id="stop6934"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop6936"
+         offset="1"
+         style="stop-color:#aeb2e7;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4162">
+      <stop
+         id="stop4164"
+         offset="0.0000000"
+         style="stop-color:#f79403;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4170"
+         offset="0.18691589"
+         style="stop-color:#fdb343;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4172"
+         offset="0.43008122"
+         style="stop-color:#fdb74f;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4166"
+         offset="1.0000000"
+         style="stop-color:#8f5601;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4206">
+      <stop
+         id="stop4208"
+         offset="0"
+         style="stop-color:#010f7d;stop-opacity:1;" />
+      <stop
+         id="stop4210"
+         offset="1"
+         style="stop-color:#5669c4;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4134">
+      <stop
+         id="stop4136"
+         offset="0.0000000"
+         style="stop-color:#7e807a;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4148"
+         offset="0.25000000"
+         style="stop-color:#babbb8;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4142"
+         offset="0.50000000"
+         style="stop-color:#a5a6a3;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4138"
+         offset="1.0000000"
+         style="stop-color:#333432;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4126">
+      <stop
+         id="stop4128"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4130"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.16494845;" />
+    </linearGradient>
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1558"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1554"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1550"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1546"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1542"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1538"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1536"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1532"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1528"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1526"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1522"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1518"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1514"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1510"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1506"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1502"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1498"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1494"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1490"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1486"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1482"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1478"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1474"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1470"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1466"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1462"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <linearGradient
+       id="linearGradient4750">
+      <stop
+         id="stop4752"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop4758"
+         offset="0.37931034"
+         style="stop-color:#fefefe;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4754"
+         offset="1.0000000"
+         style="stop-color:#1d1d1d;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient1460"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <linearGradient
+       id="linearGradient3962">
+      <stop
+         id="stop3964"
+         offset="0.0000000"
+         style="stop-color:#d3e9ff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4134"
+         offset="0.15517241"
+         style="stop-color:#d3e9ff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4346"
+         offset="0.75000000"
+         style="stop-color:#4074ae;stop-opacity:1.0000000;" />
+      <stop
+         id="stop3966"
+         offset="1.0000000"
+         style="stop-color:#36486c;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2265"
+       inkscape:collect="always">
+      <stop
+         id="stop2267"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop2269"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.878099,-0.0173237,0.0173237,0.878099,1021.3138,469.27875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2271"
+       inkscape:collect="always"
+       x1="14.017542"
+       x2="15.415793"
+       xlink:href="#linearGradient2265"
+       y1="36.942543"
+       y2="38.268368" />
+    <linearGradient
+       id="linearGradient2257"
+       inkscape:collect="always">
+      <stop
+         id="stop2259"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2261"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(1.007254,-0.02636526,0.02636526,1.007254,1020.7435,465.29004)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2263"
+       inkscape:collect="always"
+       x1="12.004697"
+       x2="10.650805"
+       xlink:href="#linearGradient2257"
+       y1="35.688461"
+       y2="33.194965" />
+    <linearGradient
+       id="linearGradient3087">
+      <stop
+         id="stop3089"
+         offset="0"
+         style="stop-color:#3465a4;stop-opacity:1;" />
+      <stop
+         id="stop3095"
+         offset="0"
+         style="stop-color:#9fbce1;stop-opacity:1;" />
+      <stop
+         id="stop2242"
+         offset="0"
+         style="stop-color:#6b95ca;stop-opacity:1;" />
+      <stop
+         id="stop2244"
+         offset="0.75"
+         style="stop-color:#3d6aa5;stop-opacity:1;" />
+      <stop
+         id="stop3091"
+         offset="1"
+         style="stop-color:#386eb4;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.6871,470.17853)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3093"
+       inkscape:collect="always"
+       x1="9.7503242"
+       x2="16.915297"
+       xlink:href="#linearGradient3087"
+       y1="32.28376"
+       y2="39.443218" />
+    <linearGradient
+       id="linearGradient2250"
+       inkscape:collect="always">
+      <stop
+         id="stop2252"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2254"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="translate(1019.1501,465.21085)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2256"
+       inkscape:collect="always"
+       x1="31.177404"
+       x2="40.859177"
+       xlink:href="#linearGradient2250"
+       y1="19.821514"
+       y2="9.6568537" />
+    <linearGradient
+       id="linearGradient3077">
+      <stop
+         id="stop3079"
+         offset="0"
+         style="stop-color:#98a0a9;stop-opacity:1;" />
+      <stop
+         id="stop3081"
+         offset="1"
+         style="stop-color:#c3d0dd;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.9976,470.79956)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3083"
+       inkscape:collect="always"
+       x1="38.227654"
+       x2="37.53537"
+       xlink:href="#linearGradient3077"
+       y1="13.602527"
+       y2="6.6285896" />
+    <linearGradient
+       id="linearGradient3061">
+      <stop
+         id="stop3063"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop3065"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.8782699,0,0,0.8782699,1049.7965,-403.53398)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3067"
+       inkscape:collect="always"
+       x1="50.152931"
+       x2="25.291086"
+       xlink:href="#linearGradient3061"
+       y1="-3.6324477"
+       y2="-4.3002653" />
+    <linearGradient
+       id="linearGradient3049">
+      <stop
+         id="stop3051"
+         offset="0"
+         style="stop-color:#b6b6b6;stop-opacity:1;" />
+      <stop
+         id="stop2262"
+         offset="0.5"
+         style="stop-color:#f2f2f2;stop-opacity:1;" />
+      <stop
+         id="stop2264"
+         offset="0.67612958"
+         style="stop-color:#fafafa;stop-opacity:1;" />
+      <stop
+         id="stop2268"
+         offset="0.84051722"
+         style="stop-color:#d8d8d8;stop-opacity:1;" />
+      <stop
+         id="stop2266"
+         offset="0.875"
+         style="stop-color:#f2f2f2;stop-opacity:1;" />
+      <stop
+         id="stop3053"
+         offset="1"
+         style="stop-color:#dbdbdb;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.6871,470.17853)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3055"
+       inkscape:collect="always"
+       x1="19.648342"
+       x2="20.631224"
+       xlink:href="#linearGradient3049"
+       y1="42.253601"
+       y2="6.7758031" />
+    <radialGradient
+       cx="24.8125"
+       cy="39.125"
+       fx="24.8125"
+       fy="39.125"
+       gradientTransform="matrix(1,0,0,0.374558,0,24.47041)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3047"
+       inkscape:collect="always"
+       r="17.6875"
+       xlink:href="#linearGradient3041" />
+    <linearGradient
+       id="linearGradient3041"
+       inkscape:collect="always">
+      <stop
+         id="stop3043"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop3045"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="24.8125"
+       cy="39.125"
+       fx="24.8125"
+       fy="39.125"
+       gradientTransform="matrix(1,0,0,0.374558,0,24.47041)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2260"
+       inkscape:collect="always"
+       r="17.6875"
+       xlink:href="#linearGradient3041" />
+    <linearGradient
+       gradientTransform="translate(131.91072,132.23618)"
+       gradientUnits="userSpaceOnUse"
+       id="SVGID_1_"
+       x1="43.944302"
+       x2="411.3941"
+       y1="733.39258"
+       y2="425.06561">
+      <stop
+         id="stop2170"
+         offset="0.0562"
+         style="stop-color:#003F90" />
+      <stop
+         id="stop2172"
+         offset="0.5674"
+         style="stop-color:#0093D2" />
+      <stop
+         id="stop2174"
+         offset="0.9551"
+         style="stop-color:#EDF3F7" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(0.9169564,0,0,0.9120098,60.201795,153.71221)"
+       gradientUnits="userSpaceOnUse"
+       id="SVGID_2_"
+       x1="43.943802"
+       x2="411.39359"
+       y1="733.39258"
+       y2="425.06561">
+      <stop
+         id="stop2179"
+         offset="0.0562"
+         style="stop-color:#525252;stop-opacity:1;" />
+      <stop
+         id="stop2181"
+         offset="0.56739998"
+         style="stop-color:#8e8e8e;stop-opacity:1;" />
+      <stop
+         id="stop2183"
+         offset="0.9551"
+         style="stop-color:#c9c9c9;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5020"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <linearGradient
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5016"
+       inkscape:collect="always"
+       x1="302.85715"
+       x2="302.85715"
+       xlink:href="#linearGradient5048"
+       y1="366.64789"
+       y2="609.50507" />
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5013"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <linearGradient
+       id="linearGradient2795">
+      <stop
+         id="stop2797"
+         offset="0.0000000"
+         style="stop-color:#000000;stop-opacity:0.068627454;" />
+      <stop
+         id="stop2799"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2803">
+      <stop
+         id="stop2805"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2807"
+         offset="1.0000000"
+         style="stop-color:#cbcbcb;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2094">
+      <stop
+         id="stop2096"
+         offset="0.0000000"
+         style="stop-color:#d6e3f0;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2098"
+         offset="1.0000000"
+         style="stop-color:#95b1cf;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12512">
+      <stop
+         id="stop12513"
+         offset="0"
+         style="stop-color:#eeebc9;stop-opacity:1;" />
+      <stop
+         id="stop12517"
+         offset="1"
+         style="stop-color:#ffd420;stop-opacity:1;" />
+      <stop
+         id="stop12514"
+         offset="1"
+         style="stop-color:#ffec00;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5048">
+      <stop
+         id="stop5050"
+         offset="0"
+         style="stop-color:black;stop-opacity:0;" />
+      <stop
+         id="stop5056"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         id="stop5052"
+         offset="1"
+         style="stop-color:black;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5060"
+       inkscape:collect="always">
+      <stop
+         id="stop5062"
+         offset="0"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         id="stop5064"
+         offset="1"
+         style="stop-color:black;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2994">
+      <stop
+         id="stop2996"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop2998"
+         offset="1"
+         style="stop-color:#c9c9c9;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2974">
+      <stop
+         id="stop2976"
+         offset="0"
+         style="stop-color:#c1c1c1;stop-opacity:1;" />
+      <stop
+         id="stop2978"
+         offset="1"
+         style="stop-color:#acacac;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2966">
+      <stop
+         id="stop2968"
+         offset="0"
+         style="stop-color:#ffd1d1;stop-opacity:1;" />
+      <stop
+         id="stop3006"
+         offset="0.5"
+         style="stop-color:#ff1d1d;stop-opacity:1;" />
+      <stop
+         id="stop2970"
+         offset="1"
+         style="stop-color:#6f0000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2846">
+      <stop
+         id="stop2848"
+         offset="0.0000000"
+         style="stop-color:#8a8a8a;stop-opacity:1.0000000;" />
+      <stop
+         id="stop2850"
+         offset="1.0000000"
+         style="stop-color:#484848;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2366">
+      <stop
+         id="stop2368"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop2374"
+         offset="0.50000000"
+         style="stop-color:#ffffff;stop-opacity:0.21904762;" />
+      <stop
+         id="stop2370"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4467">
+      <stop
+         id="stop4469"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop4471"
+         offset="1.0000000"
+         style="stop-color:#ffffff;stop-opacity:0.24761905;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4454">
+      <stop
+         id="stop4456"
+         offset="0.0000000"
+         style="stop-color:#729fcf;stop-opacity:0.20784314;" />
+      <stop
+         id="stop4458"
+         offset="1.0000000"
+         style="stop-color:#729fcf;stop-opacity:0.67619050;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4440">
+      <stop
+         id="stop4442"
+         offset="0"
+         style="stop-color:#7d7d7d;stop-opacity:1;" />
+      <stop
+         id="stop4448"
+         offset="0.50000000"
+         style="stop-color:#b1b1b1;stop-opacity:1.0000000;" />
+      <stop
+         id="stop4444"
+         offset="1.0000000"
+         style="stop-color:#686868;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       cx="24.306795"
+       cy="42.07798"
+       fx="24.306795"
+       fy="42.07798"
+       gradientTransform="matrix(1,0,0,0.284916,0,30.08928)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient4548"
+       inkscape:collect="always"
+       r="15.821514"
+       xlink:href="#linearGradient4542" />
+    <linearGradient
+       id="linearGradient259">
+      <stop
+         id="stop260"
+         offset="0.0000000"
+         style="stop-color:#fafafa;stop-opacity:1.0000000;" />
+      <stop
+         id="stop261"
+         offset="1.0000000"
+         style="stop-color:#bbbbbb;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient269">
+      <stop
+         id="stop270"
+         offset="0.0000000"
+         style="stop-color:#a3a3a3;stop-opacity:1.0000000;" />
+      <stop
+         id="stop271"
+         offset="1.0000000"
+         style="stop-color:#4c4c4c;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <radialGradient
+       cx="20.892099"
+       cy="114.5684"
+       fx="20.892099"
+       fy="114.5684"
+       gradientUnits="userSpaceOnUse"
+       id="aigrd2"
+       r="5.256">
+      <stop
+         id="stop15566"
+         offset="0"
+         style="stop-color:#F0F0F0" />
+      <stop
+         id="stop15568"
+         offset="1.0000000"
+         style="stop-color:#9a9a9a;stop-opacity:1.0000000;" />
+    </radialGradient>
+    <radialGradient
+       cx="20.892099"
+       cy="64.567902"
+       fx="20.892099"
+       fy="64.567902"
+       gradientUnits="userSpaceOnUse"
+       id="aigrd3"
+       r="5.257">
+      <stop
+         id="stop15573"
+         offset="0"
+         style="stop-color:#F0F0F0" />
+      <stop
+         id="stop15575"
+         offset="1.0000000"
+         style="stop-color:#9a9a9a;stop-opacity:1.0000000;" />
+    </radialGradient>
+    <linearGradient
+       id="linearGradient15662">
+      <stop
+         id="stop15664"
+         offset="0.0000000"
+         style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+      <stop
+         id="stop15666"
+         offset="1.0000000"
+         style="stop-color:#f8f8f8;stop-opacity:1.0000000;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4542"
+       inkscape:collect="always">
+      <stop
+         id="stop4544"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop4546"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1892.179,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2659"
+       inkscape:collect="always"
+       x1="302.85715"
+       x2="302.85715"
+       xlink:href="#linearGradient5048"
+       y1="366.64789"
+       y2="609.50507" />
+    <linearGradient
+       id="linearGradient2651">
+      <stop
+         id="stop2653"
+         offset="0"
+         style="stop-color:black;stop-opacity:0;" />
+      <stop
+         id="stop2655"
+         offset="0.5"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         id="stop2657"
+         offset="1"
+         style="stop-color:black;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(2.774389,0,0,1.969706,-1891.633,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2649"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <radialGradient
+       cx="605.71429"
+       cy="486.64789"
+       fx="605.71429"
+       fy="486.64789"
+       gradientTransform="matrix(-2.774389,0,0,1.969706,112.7623,-872.8854)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2641"
+       inkscape:collect="always"
+       r="117.14286"
+       xlink:href="#linearGradient5060" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2408"
+       inkscape:collect="always"
+       x1="18.935766"
+       x2="53.588623"
+       xlink:href="#linearGradient2402"
+       y1="23.667896"
+       y2="26.649363" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2386"
+       inkscape:collect="always"
+       x1="62.513836"
+       x2="15.984863"
+       xlink:href="#linearGradient2380"
+       y1="36.061237"
+       y2="20.60858" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1501"
+       inkscape:collect="always"
+       x1="46.834816"
+       x2="45.380436"
+       xlink:href="#linearGradient2871"
+       y1="45.264122"
+       y2="50.939667" />
+    <linearGradient
+       id="linearGradient2831">
+      <stop
+         id="stop2833"
+         offset="0"
+         style="stop-color:#1d5e23;stop-opacity:1;" />
+      <stop
+         id="stop2855"
+         offset="0.33333334"
+         style="stop-color:#329652;stop-opacity:1;" />
+      <stop
+         id="stop2835"
+         offset="1"
+         style="stop-color:#83d8ab;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2871"
+       inkscape:collect="always">
+      <stop
+         id="stop2873"
+         offset="0"
+         style="stop-color:#3465a4;stop-opacity:1;" />
+      <stop
+         id="stop2875"
+         offset="1"
+         style="stop-color:#3465a4;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2380">
+      <stop
+         id="stop2382"
+         offset="0"
+         style="stop-color:#b9e7c9;stop-opacity:1;" />
+      <stop
+         id="stop2384"
+         offset="1"
+         style="stop-color:#72cf79;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2402">
+      <stop
+         id="stop2404"
+         offset="0"
+         style="stop-color:#72cf7b;stop-opacity:1;" />
+      <stop
+         id="stop2406"
+         offset="1"
+         style="stop-color:#57c552;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2682">
+      <stop
+         id="stop2684"
+         offset="0"
+         style="stop-color:#3977c3;stop-opacity:1;" />
+      <stop
+         id="stop2686"
+         offset="1"
+         style="stop-color:#89aedc;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2690">
+      <stop
+         id="stop2692"
+         offset="0"
+         style="stop-color:#57be6f;stop-opacity:1;" />
+      <stop
+         id="stop2694"
+         offset="1"
+         style="stop-color:#c4ebca;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5903"
+       inkscape:collect="always"
+       x1="62.513836"
+       x2="15.984863"
+       xlink:href="#linearGradient2380"
+       y1="36.061237"
+       y2="20.60858" />
+    <linearGradient
+       gradientTransform="matrix(-6.0935847,-5.1483414,-5.1483414,6.0935847,846.16404,624.52042)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5908"
+       inkscape:collect="always"
+       x1="62.513836"
+       x2="15.984863"
+       xlink:href="#linearGradient2380"
+       y1="36.061237"
+       y2="20.60858" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7848"
+       inkscape:collect="always"
+       x1="18.935766"
+       x2="53.588623"
+       xlink:href="#linearGradient2402"
+       y1="23.667896"
+       y2="26.649363" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient7850"
+       inkscape:collect="always"
+       x1="46.834816"
+       x2="45.380436"
+       xlink:href="#linearGradient2871"
+       y1="45.264122"
+       y2="50.939667" />
+    <linearGradient
+       gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9972"
+       inkscape:collect="always"
+       x1="28.244684"
+       x2="28.244684"
+       xlink:href="#linearGradient9910"
+       y1="60.445503"
+       y2="68.224884" />
+    <linearGradient
+       gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9968"
+       inkscape:collect="always"
+       x1="28.244684"
+       x2="28.244684"
+       xlink:href="#linearGradient9920"
+       y1="60.445503"
+       y2="68.224884" />
+    <linearGradient
+       gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9965"
+       inkscape:collect="always"
+       x1="28.244684"
+       x2="28.244684"
+       xlink:href="#linearGradient9910"
+       y1="60.445503"
+       y2="68.224884" />
+    <linearGradient
+       gradientTransform="matrix(-0.493304,-0.716654,0.716654,-0.493304,-9.26781,79.4192)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient9961"
+       inkscape:collect="always"
+       x1="55.876038"
+       x2="38.061356"
+       xlink:href="#linearGradient9952"
+       y1="62.401989"
+       y2="62.827091" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6401"
+       inkscape:collect="always"
+       x1="20.064156"
+       x2="20.682873"
+       xlink:href="#linearGradient6395"
+       y1="27.140348"
+       y2="44.110912" />
+    <radialGradient
+       cx="23.25"
+       cy="37.75"
+       fx="23.25"
+       fy="37.75"
+       gradientTransform="matrix(1,0,0,0.420168,0,21.88866)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6353"
+       inkscape:collect="always"
+       r="14.875"
+       xlink:href="#linearGradient5048" />
+    <linearGradient
+       gradientTransform="matrix(0.00525957,0.999987,0.999987,-0.00525957,48.6929,-14.14491)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6349"
+       inkscape:collect="always"
+       x1="25.71875"
+       x2="25.514589"
+       xlink:href="#linearGradient2994"
+       y1="31.046875"
+       y2="30.703125" />
+    <radialGradient
+       cx="29.053354"
+       cy="27.640751"
+       fx="29.053354"
+       fy="27.640751"
+       gradientTransform="matrix(0.0153767,2.923527,2.029691,-0.01067544,20.39098,-69.72665)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient6347"
+       inkscape:collect="always"
+       r="3.2408545"
+       xlink:href="#linearGradient2984" />
+    <linearGradient
+       gradientTransform="matrix(0.00525957,0.999987,0.999987,-0.00525957,42.99552,-2.496241)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6345"
+       inkscape:collect="always"
+       x1="46"
+       x2="47.6875"
+       xlink:href="#linearGradient2974"
+       y1="19.8125"
+       y2="22.625" />
+    <linearGradient
+       gradientTransform="matrix(0.00525957,0.999987,0.999987,-0.00525957,42.9955,-2.496241)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient6343"
+       inkscape:collect="always"
+       x1="48.90625"
+       x2="50.988335"
+       xlink:href="#linearGradient2966"
+       y1="17.376184"
+       y2="22.250591" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5074"
+       inkscape:collect="always"
+       x1="11.75"
+       x2="37.625"
+       xlink:href="#linearGradient5068"
+       y1="14.1875"
+       y2="14.1875" />
+    <linearGradient
+       gradientTransform="translate(0,5.625)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5064"
+       inkscape:collect="always"
+       x1="30.875"
+       x2="15.625"
+       xlink:href="#linearGradient5058"
+       y1="19.4596"
+       y2="19.0846" />
+    <radialGradient
+       cx="23.25"
+       cy="37.75"
+       fx="23.25"
+       fy="37.75"
+       gradientTransform="matrix(1,0,0,0.420168,0,21.88866)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient5054"
+       inkscape:collect="always"
+       r="14.875"
+       xlink:href="#linearGradient5048" />
+    <linearGradient
+       gradientTransform="translate(0,5.625)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5042"
+       inkscape:collect="always"
+       x1="15.375"
+       x2="34.250416"
+       xlink:href="#linearGradient5036"
+       y1="26.0846"
+       y2="26.0846" />
+    <linearGradient
+       id="linearGradient5036">
+      <stop
+         id="stop5038"
+         offset="0"
+         style="stop-color:#f5f5f5;stop-opacity:0.09;" />
+      <stop
+         id="stop5044"
+         offset="0.2631579"
+         style="stop-color:#ffffff;stop-opacity:0.89999998;" />
+      <stop
+         id="stop5088"
+         offset="0.74792242"
+         style="stop-color:#c7c7c7;stop-opacity:0.46000001;" />
+      <stop
+         id="stop5040"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0.78039217;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5058">
+      <stop
+         id="stop5060"
+         offset="0"
+         style="stop-color:#959791;stop-opacity:1;" />
+      <stop
+         id="stop5066"
+         offset="0.5"
+         style="stop-color:#f8f8f8;stop-opacity:1;" />
+      <stop
+         id="stop3430"
+         offset="1"
+         style="stop-color:#8c8c8c;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5068">
+      <stop
+         id="stop5070"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop5078"
+         offset="0.32894737"
+         style="stop-color:#ffffff;stop-opacity:0.69;" />
+      <stop
+         id="stop5076"
+         offset="0.65789473"
+         style="stop-color:#c2c2c2;stop-opacity:0.34;" />
+      <stop
+         id="stop5072"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3414">
+      <stop
+         id="stop3416"
+         offset="0"
+         style="stop-color:#ffd1d1;stop-opacity:1;" />
+      <stop
+         id="stop3418"
+         offset="0.5"
+         style="stop-color:#ff1d1d;stop-opacity:1;" />
+      <stop
+         id="stop3420"
+         offset="1"
+         style="stop-color:#6f0000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3408">
+      <stop
+         id="stop3410"
+         offset="0"
+         style="stop-color:#c1c1c1;stop-opacity:1;" />
+      <stop
+         id="stop3412"
+         offset="1"
+         style="stop-color:#acacac;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient2984"
+       inkscape:collect="always">
+      <stop
+         id="stop2986"
+         offset="0"
+         style="stop-color:#e7e2b8;stop-opacity:1;" />
+      <stop
+         id="stop2988"
+         offset="1"
+         style="stop-color:#e7e2b8;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3399">
+      <stop
+         id="stop3401"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop3403"
+         offset="1"
+         style="stop-color:#c9c9c9;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6395"
+       inkscape:collect="always">
+      <stop
+         id="stop6397"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop6399"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9910">
+      <stop
+         id="stop9912"
+         offset="0"
+         style="stop-color:#729fcf;stop-opacity:1;" />
+      <stop
+         id="stop9918"
+         offset="0.31578946"
+         style="stop-color:#a5bfda;stop-opacity:1;" />
+      <stop
+         id="stop9914"
+         offset="1"
+         style="stop-color:#376ca4;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9920">
+      <stop
+         id="stop9922"
+         offset="0"
+         style="stop-color:#5b90c8;stop-opacity:1;" />
+      <stop
+         id="stop9924"
+         offset="0.31578946"
+         style="stop-color:#8fb0d1;stop-opacity:1;" />
+      <stop
+         id="stop9926"
+         offset="1"
+         style="stop-color:#34679d;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9952"
+       inkscape:collect="always">
+      <stop
+         id="stop9954"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop9956"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="24.8125"
+       cy="39.125"
+       fx="24.8125"
+       fy="39.125"
+       gradientTransform="matrix(1,0,0,0.374558,0,24.47041)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2746"
+       inkscape:collect="always"
+       r="17.6875"
+       xlink:href="#linearGradient3041" />
+    <radialGradient
+       cx="24.8125"
+       cy="39.125"
+       fx="24.8125"
+       fy="39.125"
+       gradientTransform="matrix(1,0,0,0.374558,0,24.47041)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2748"
+       inkscape:collect="always"
+       r="17.6875"
+       xlink:href="#linearGradient3041" />
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.6871,470.17853)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2750"
+       inkscape:collect="always"
+       x1="19.648342"
+       x2="20.631224"
+       xlink:href="#linearGradient3049"
+       y1="42.253601"
+       y2="6.7758031" />
+    <linearGradient
+       gradientTransform="matrix(0.8782699,0,0,0.8782699,1049.7965,-403.53398)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2752"
+       inkscape:collect="always"
+       x1="50.152931"
+       x2="25.291086"
+       xlink:href="#linearGradient3061"
+       y1="-3.6324477"
+       y2="-4.3002653" />
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.9976,470.79956)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2754"
+       inkscape:collect="always"
+       x1="38.227654"
+       x2="37.53537"
+       xlink:href="#linearGradient3077"
+       y1="13.602527"
+       y2="6.6285896" />
+    <linearGradient
+       gradientTransform="translate(1019.1501,465.21085)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2756"
+       inkscape:collect="always"
+       x1="31.177404"
+       x2="40.859177"
+       xlink:href="#linearGradient2250"
+       y1="19.821514"
+       y2="9.6568537" />
+    <linearGradient
+       gradientTransform="matrix(0.87827,0,0,0.87827,1021.6871,470.17853)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2758"
+       inkscape:collect="always"
+       x1="9.7503242"
+       x2="16.915297"
+       xlink:href="#linearGradient3087"
+       y1="32.28376"
+       y2="39.443218" />
+    <linearGradient
+       gradientTransform="matrix(1.007254,-0.02636526,0.02636526,1.007254,1020.7435,465.29004)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2760"
+       inkscape:collect="always"
+       x1="12.004697"
+       x2="10.650805"
+       xlink:href="#linearGradient2257"
+       y1="35.688461"
+       y2="33.194965" />
+    <linearGradient
+       gradientTransform="matrix(0.878099,-0.0173237,0.0173237,0.878099,1021.3138,469.27875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2762"
+       inkscape:collect="always"
+       x1="14.017542"
+       x2="15.415793"
+       xlink:href="#linearGradient2265"
+       y1="36.942543"
+       y2="38.268368" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3603"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3605"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3607"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3611"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3613"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3617"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3619"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3623"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3625"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3629"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3631"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3635"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3637"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3641"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3643"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3647"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3649"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3653"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3655"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3659"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3663"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3665"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3669"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3673"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3675"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3679"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="18.63378"
+       cy="17.486208"
+       fx="18.934305"
+       fy="17.810213"
+       gradientTransform="scale(1.036822,0.964486)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3681"
+       inkscape:collect="always"
+       r="40.692665"
+       xlink:href="#linearGradient4750" />
+    <radialGradient
+       cx="11.319205"
+       cy="22.454971"
+       fx="11.319205"
+       fy="22.454971"
+       gradientTransform="matrix(0,-8.4690288,10.248644,0,454.76267,899.88684)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3755"
+       inkscape:collect="always"
+       r="16.9562"
+       xlink:href="#linearGradient2304" />
+    <radialGradient
+       cx="24.53788"
+       cy="0.40010813"
+       fx="24.53788"
+       fy="0.40010813"
+       gradientTransform="matrix(0,-20.561511,15.647805,0,476.46787,1144.4736)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3757"
+       inkscape:collect="always"
+       r="17.171415"
+       xlink:href="#linearGradient8650" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5446"
+       x1="43.944302"
+       x2="411.3941"
+       y1="733.39258"
+       y2="425.06561">
+      <stop
+         id="stop12"
+         offset="0.0562"
+         style="stop-color:#003F90" />
+      <stop
+         id="stop14"
+         offset="0.5674"
+         style="stop-color:#0093D2" />
+      <stop
+         id="stop16"
+         offset="0.9551"
+         style="stop-color:#EDF3F7" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient5452"
+       x1="43.943802"
+       x2="411.39359"
+       y1="733.39258"
+       y2="425.06561">
+      <stop
+         id="stop21"
+         offset="0.0562"
+         style="stop-color:#003F90" />
+      <stop
+         id="stop23"
+         offset="0.5674"
+         style="stop-color:#0093D2" />
+      <stop
+         id="stop25"
+         offset="0.9551"
+         style="stop-color:#EDF3F7" />
+    </linearGradient>
+    <radialGradient
+       cx="12.57571"
+       cy="67.501709"
+       fx="12.57571"
+       fy="67.501709"
+       gradientTransform="scale(1.925808,0.519262)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient35088"
+       inkscape:collect="always"
+       r="8.7662792"
+       xlink:href="#linearGradient2454" />
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35090"
+       inkscape:collect="always"
+       x1="12.88666"
+       x2="20.087339"
+       xlink:href="#linearGradient10591"
+       y1="4.3602757"
+       y2="18.414022" />
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35092"
+       inkscape:collect="always"
+       x1="19.250618"
+       x2="16.198252"
+       xlink:href="#linearGradient11335"
+       y1="9.6635771"
+       y2="6.0396547" />
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,21.67589)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35094"
+       inkscape:collect="always"
+       x1="6.72682"
+       x2="40.938126"
+       xlink:href="#linearGradient2092"
+       y1="32.161697"
+       y2="32.161697" />
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,22.22637)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35096"
+       inkscape:collect="always"
+       x1="31.630468"
+       x2="8.6713638"
+       xlink:href="#linearGradient11327"
+       y1="41.791817"
+       y2="25.793524" />
+    <linearGradient
+       gradientTransform="matrix(0.453445,0,0,0.470026,30.17248,24.3894)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35098"
+       inkscape:collect="always"
+       x1="10.907269"
+       x2="30.875446"
+       xlink:href="#linearGradient9845"
+       y1="25.002281"
+       y2="36.127281" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.461806,23.89003,23.47875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35100"
+       inkscape:collect="always"
+       x1="14.217941"
+       x2="17.859085"
+       xlink:href="#linearGradient12071"
+       y1="6.8795347"
+       y2="3.9566603" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.490236,34.67523,22.83397)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35102"
+       inkscape:collect="always"
+       x1="11.5"
+       x2="11.779029"
+       xlink:href="#linearGradient12071"
+       y1="20.579729"
+       y2="14.259961" />
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35635"
+       inkscape:collect="always"
+       x1="12.88666"
+       x2="20.087339"
+       xlink:href="#linearGradient10591"
+       y1="4.3602757"
+       y2="18.414022" />
+    <linearGradient
+       gradientTransform="matrix(0.480246,0,0,0.497322,29.22711,23.01153)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35637"
+       inkscape:collect="always"
+       x1="19.250618"
+       x2="16.198252"
+       xlink:href="#linearGradient11335"
+       y1="9.6635771"
+       y2="6.0396547" />
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,21.67589)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35639"
+       inkscape:collect="always"
+       x1="6.72682"
+       x2="40.938126"
+       xlink:href="#linearGradient2092"
+       y1="32.161697"
+       y2="32.161697" />
+    <linearGradient
+       gradientTransform="matrix(0.490236,0,0,0.534297,29.28263,22.22637)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35641"
+       inkscape:collect="always"
+       x1="31.630468"
+       x2="8.6713638"
+       xlink:href="#linearGradient11327"
+       y1="41.791817"
+       y2="25.793524" />
+    <linearGradient
+       gradientTransform="matrix(0.453445,0,0,0.470026,30.17248,24.3894)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35643"
+       inkscape:collect="always"
+       x1="10.907269"
+       x2="30.875446"
+       xlink:href="#linearGradient9845"
+       y1="25.002281"
+       y2="36.127281" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.461806,23.89003,23.47875)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35645"
+       inkscape:collect="always"
+       x1="14.217941"
+       x2="17.859085"
+       xlink:href="#linearGradient12071"
+       y1="6.8795347"
+       y2="3.9566603" />
+    <linearGradient
+       gradientTransform="matrix(0.980472,0,0,0.490236,34.67523,22.83397)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35647"
+       inkscape:collect="always"
+       x1="11.5"
+       x2="11.779029"
+       xlink:href="#linearGradient12071"
+       y1="20.579729"
+       y2="14.259961" />
+    <linearGradient
+       gradientTransform="matrix(31.442825,0,0,15.721413,163.64608,98.870782)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35650"
+       inkscape:collect="always"
+       x1="11.5"
+       x2="11.779029"
+       xlink:href="#linearGradient12071"
+       y1="20.579729"
+       y2="14.259961" />
+    <linearGradient
+       gradientTransform="matrix(31.442825,0,0,14.809689,-182.22526,119.54828)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35653"
+       inkscape:collect="always"
+       x1="14.217941"
+       x2="17.859085"
+       xlink:href="#linearGradient12071"
+       y1="6.8795347"
+       y2="3.9566603" />
+    <linearGradient
+       gradientTransform="matrix(14.541559,0,0,15.073297,19.247073,148.75198)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35656"
+       inkscape:collect="always"
+       x1="10.907269"
+       x2="30.875446"
+       xlink:href="#linearGradient9845"
+       y1="25.002281"
+       y2="36.127281" />
+    <linearGradient
+       gradientTransform="matrix(15.721413,0,0,17.134408,-9.2895887,61.732234)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35659"
+       inkscape:collect="always"
+       x1="6.72682"
+       x2="40.938126"
+       xlink:href="#linearGradient2092"
+       y1="32.161697"
+       y2="32.161697" />
+    <linearGradient
+       gradientTransform="matrix(15.721413,0,0,17.134408,-9.2895887,79.385615)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35661"
+       inkscape:collect="always"
+       x1="31.630468"
+       x2="8.6713638"
+       xlink:href="#linearGradient11327"
+       y1="41.791817"
+       y2="25.793524" />
+    <linearGradient
+       gradientTransform="matrix(15.401043,0,0,15.948654,-11.070064,104.56497)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35664"
+       inkscape:collect="always"
+       x1="12.88666"
+       x2="20.087339"
+       xlink:href="#linearGradient10591"
+       y1="4.3602757"
+       y2="18.414022" />
+    <linearGradient
+       gradientTransform="matrix(15.401043,0,0,15.948654,-11.070064,104.56497)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient35666"
+       inkscape:collect="always"
+       x1="19.250618"
+       x2="16.198252"
+       xlink:href="#linearGradient11335"
+       y1="9.6635771"
+       y2="6.0396547" />
+    <linearGradient
+       id="linearGradient3177">
+      <stop
+         id="stop3187"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+      <stop
+         id="stop3200"
+         offset="0.4375"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop3191"
+         offset="0.9375"
+         style="stop-color:#ffffff;stop-opacity:0.43333334;" />
+      <stop
+         id="stop3181"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       gradientTransform="matrix(1.031913,0,0,0.9606757,-10.760168,19.498309)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3946"
+       inkscape:collect="always"
+       x1="337.49271"
+       x2="416.38455"
+       xlink:href="#linearGradient3167"
+       y1="402.10623"
+       y2="645.40979" />
+    <linearGradient
+       id="linearGradient3167">
+      <stop
+         id="stop3169"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop3171"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="25.125"
+       cy="36.75"
+       fx="25.125"
+       fy="36.75"
+       gradientTransform="matrix(1,0,0,0.595238,0,14.875)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3483"
+       inkscape:collect="always"
+       r="15.75"
+       xlink:href="#linearGradient21644" />
+    <linearGradient
+       id="linearGradient21644">
+      <stop
+         id="stop21646"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop21648"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <radialGradient
+       cx="-19.515638"
+       cy="16.855663"
+       fx="-19.515638"
+       fy="16.855663"
+       gradientTransform="matrix(4.445991,0,0,6.8665,67.25071,-104.6679)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3485"
+       inkscape:collect="always"
+       r="8.753643"
+       xlink:href="#linearGradient12912" />
+    <linearGradient
+       id="linearGradient12912">
+      <stop
+         id="stop12914"
+         offset="0"
+         style="stop-color:#3465a4;stop-opacity:1;" />
+      <stop
+         id="stop12918"
+         offset="0.5"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop12916"
+         offset="1"
+         style="stop-color:#eeeeec;stop-opacity:1;" />
+    </linearGradient>
+    <radialGradient
+       r="8.753643"
+       fy="16.855663"
+       fx="-19.515638"
+       cy="16.855663"
+       cx="-19.515638"
+       gradientTransform="matrix(4.445991,0,0,6.8665,67.25071,-104.6679)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3133"
+       xlink:href="#linearGradient12912"
+       inkscape:collect="always" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2454"
+       id="radialGradient4550"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="scale(1.925808,0.519262)"
+       cx="12.57571"
+       cy="67.501709"
+       fx="12.57571"
+       fy="67.501709"
+       r="8.7662792" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient10591"
+       id="linearGradient4552"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(15.401043,0,0,15.948654,-11.070064,104.56497)"
+       x1="12.88666"
+       y1="4.3602757"
+       x2="20.087339"
+       y2="18.414022" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11335"
+       id="linearGradient4554"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(15.401043,0,0,15.948654,-11.070064,104.56497)"
+       x1="19.250618"
+       y1="9.6635771"
+       x2="16.198252"
+       y2="6.0396547" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2092"
+       id="linearGradient4556"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(15.721413,0,0,17.134408,-9.2895887,61.732234)"
+       x1="6.72682"
+       y1="32.161697"
+       x2="40.938126"
+       y2="32.161697" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11327"
+       id="linearGradient4558"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(15.721413,0,0,17.134408,-9.2895887,79.385615)"
+       x1="31.630468"
+       y1="41.791817"
+       x2="8.6713638"
+       y2="25.793524" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9845"
+       id="linearGradient4560"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(14.541559,0,0,15.073297,19.247073,148.75198)"
+       x1="10.907269"
+       y1="25.002281"
+       x2="30.875446"
+       y2="36.127281" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12071"
+       id="linearGradient4562"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(31.442825,0,0,14.809689,-182.22526,119.54828)"
+       x1="14.217941"
+       y1="6.8795347"
+       x2="17.859085"
+       y2="3.9566603" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12071"
+       id="linearGradient4564"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(31.442825,0,0,15.721413,163.64608,98.870782)"
+       x1="11.5"
+       y1="20.579729"
+       x2="11.779029"
+       y2="14.259961" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12071"
+       id="linearGradient4567"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.2194937,0,0,1.1097469,324.2514,509.65674)"
+       x1="11.5"
+       y1="20.579729"
+       x2="11.779029"
+       y2="14.259961" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12071"
+       id="linearGradient4570"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(2.2194937,0,0,1.0453899,299.83695,511.11633)"
+       x1="14.217941"
+       y1="6.8795347"
+       x2="17.859085"
+       y2="3.9566603" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9845"
+       id="linearGradient4573"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0264631,0,0,1.0639975,336.05853,513.17777)"
+       x1="10.907269"
+       y1="25.002281"
+       x2="30.875446"
+       y2="36.127281" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2092"
+       id="linearGradient4576"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1097469,0,0,1.2094877,334.04417,507.0352)"
+       x1="6.72682"
+       y1="32.161697"
+       x2="40.938126"
+       y2="32.161697" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11327"
+       id="linearGradient4578"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1097469,0,0,1.2094877,334.04417,508.28132)"
+       x1="31.630468"
+       y1="41.791817"
+       x2="8.6713638"
+       y2="25.793524" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient10591"
+       id="linearGradient4581"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0871325,0,0,1.1257874,311.91849,510.05869)"
+       x1="12.88666"
+       y1="4.3602757"
+       x2="20.087339"
+       y2="18.414022" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11335"
+       id="linearGradient4583"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0871325,0,0,1.1257874,311.91849,510.05869)"
+       x1="19.250618"
+       y1="9.6635771"
+       x2="16.198252"
+       y2="6.0396547" />
+  </defs>
+  <sodipodi:namedview
+     bordercolor="#666666"
+     borderopacity="1.0"
+     id="base"
+     inkscape:current-layer="layer1"
+     inkscape:cx="26.789307"
+     inkscape:cy="22.033407"
+     inkscape:document-units="px"
+     inkscape:guide-bbox="true"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:window-height="975"
+     inkscape:window-maximized="1"
+     inkscape:window-width="1280"
+     inkscape:window-x="0"
+     inkscape:window-y="25"
+     inkscape:zoom="8.8334608"
+     pagecolor="#ffffff"
+     showgrid="false"
+     showguides="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0">
+    <sodipodi:guide
+       id="guide2280"
+       orientation="horizontal"
+       position="-330.12016,63.71184" />
+    <sodipodi:guide
+       id="guide2282"
+       orientation="vertical"
+       position="4.523254,-481.5065" />
+    <sodipodi:guide
+       id="guide2284"
+       orientation="vertical"
+       position="382.41989,-481.5065" />
+    <sodipodi:guide
+       id="guide2286"
+       orientation="horizontal"
+       position="-330.12016,-348.33208" />
+    <sodipodi:guide
+       id="guide2491"
+       orientation="horizontal"
+       position="-330.12016,418.84362" />
+    <sodipodi:guide
+       id="guide2495"
+       orientation="vertical"
+       position="84.200254,-481.5065" />
+    <sodipodi:guide
+       id="guide2497"
+       orientation="horizontal"
+       position="-330.12016,-326.70547" />
+    <sodipodi:guide
+       id="guide3687"
+       orientation="horizontal"
+       position="-330.12016,455.2674" />
+    <sodipodi:guide
+       id="guide3689"
+       orientation="vertical"
+       position="-396.13824,-481.5065" />
+    <sodipodi:guide
+       id="guide3691"
+       orientation="horizontal"
+       position="-330.12016,-393.8618" />
+    <sodipodi:guide
+       id="guide3693"
+       orientation="vertical"
+       position="455.26743,-481.5065" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <cc:license
+           rdf:resource="http://creativecommons.org/licenses/by-sa/3.0/" />
+        <dc:title></dc:title>
+        <dc:date>July 2008</dc:date>
+        <dc:creator>
+          <cc:Agent>
+            <dc:title>Beate Kaspar</dc:title>
+          </cc:Agent>
+        </dc:creator>
+        <dc:rights>
+          <cc:Agent>
+            <dc:title>Beate Kaspar</dc:title>
+          </cc:Agent>
+        </dc:rights>
+        <dc:publisher>
+          <cc:Agent>
+            <dc:title>RRZE</dc:title>
+          </cc:Agent>
+        </dc:publisher>
+        <dc:subject>
+          <rdf:Bag>
+            <rdf:li>lock</rdf:li>
+            <rdf:li>security</rdf:li>
+            <rdf:li>encryption</rdf:li>
+            <rdf:li>vpn</rdf:li>
+            <rdf:li>secure</rdf:li>
+            <rdf:li>safe</rdf:li>
+            <rdf:li>SSL</rdf:li>
+          </rdf:Bag>
+        </dc:subject>
+        <dc:contributor>
+          <cc:Agent>
+            <dc:title>Hendrik Eggers, Franziska Sponsel</dc:title>
+          </cc:Agent>
+        </dc:contributor>
+        <dc:description>uses <http://webcvs.freedesktop.org/tango/tango-icon-theme/scalable/actions/system-lock-screen.svg></dc:description>
+      </cc:Work>
+      <cc:License
+         rdf:about="http://creativecommons.org/licenses/by-sa/3.0/">
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Reproduction" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#Distribution" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Notice" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#Attribution" />
+        <cc:permits
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
+        <cc:requires
+           rdf:resource="http://creativecommons.org/ns#ShareAlike" />
+      </cc:License>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Ebene 1"
+     transform="translate(-330.12016,-510.85568)">
+    <rect
+       height="60.000004"
+       id="rect2300"
+       style="fill:none;stroke:none"
+       width="60.000004"
+       x="330.12015"
+       y="510.85568" />
+    <path
+       d="m 41.10058,35.051105 a 16.882174,4.552 0 1 1 -33.7643469,0 16.882174,4.552 0 1 1 33.7643469,0 z"
+       id="path2452"
+       sodipodi:cx="24.218407"
+       sodipodi:cy="35.051105"
+       sodipodi:rx="16.882174"
+       sodipodi:ry="4.552"
+       sodipodi:type="arc"
+       style="opacity:0.50857143;fill:url(#radialGradient4550);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(1.5987276,0,0,1.2687657,321.71971,518.86938)" />
+    <path
+       d="m 323.2628,535.34383 0,-8.65117 c 0,-8.8601 5.93851,-12.89942 14.76865,-12.78877 8.87819,0.11065 14.7398,3.9655 14.7398,12.92984 l -0.0147,8.5101 -5.4168,0 0,-6.28214 c -0.14542,-2.18067 0.60441,-9.48512 -9.24613,-9.48512 -9.91848,0 -9.33548,7.33084 -9.29994,9.52854 l 0,6.23872 -5.5309,0 z"
+       id="path2086"
+       sodipodi:nodetypes="cczcccczccc"
+       style="fill:url(#linearGradient4581);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4583);stroke-width:2.68141222;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       inkscape:connector-curvature="0" />
+    <rect
+       height="26.641642"
+       id="rect1314"
+       rx="5.9928937"
+       ry="5.2141533"
+       style="fill:url(#linearGradient4576);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4578);stroke-width:2.68141246;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       width="38.836617"
+       x="341.25513"
+       y="535.45813" />
+    <rect
+       height="21.367735"
+       id="rect6903"
+       rx="3.2569637"
+       ry="3.2569664"
+       style="fill:none;stroke:url(#linearGradient4573);stroke-width:2.68141508;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:0.60109289;stroke-dasharray:none;stroke-dashoffset:0"
+       width="33.904751"
+       x="343.72598"
+       y="538.07373" />
+    <path
+       d="m 324.25139,527.17222 c 0.29426,-6.56042 2.11817,-11.50082 14.2844,-11.91964 -7.87775,1.11022 -12.16266,3.41033 -12.16266,10.26908 0,0 -0.19651,8.50085 -0.19651,8.50085 l -1.92523,0 0,-6.85029 z"
+       id="rect11343"
+       sodipodi:nodetypes="ccsccc"
+       style="fill:url(#linearGradient4570);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       inkscape:connector-curvature="0" />
+    <rect
+       height="11.097468"
+       id="rect1345"
+       rx="0"
+       ry="0"
+       style="fill:url(#linearGradient4567);fill-opacity:1;fill-rule:evenodd;stroke:none"
+       width="2.2194936"
+       x="348.66583"
+       y="522.97369" />
+  </g>
+</svg>
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_close.png b/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_close.png
new file mode 100644
index 0000000..6e3cdac
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_close.png differ
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_close_black.png b/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_close_black.png
new file mode 100644
index 0000000..0aa35b7
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_close_black.png differ
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_close_gray.png b/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_close_gray.png
new file mode 100644
index 0000000..c59e8b3
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_close_gray.png differ
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_close_white.png b/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_close_white.png
new file mode 100644
index 0000000..7386675
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_close_white.png differ
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_undock.png b/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_undock.png
new file mode 100644
index 0000000..7190f28
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_undock.png differ
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_undock_black.png b/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_undock_black.png
new file mode 100644
index 0000000..4a32735
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_undock_black.png differ
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_undock_gray.png b/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_undock_gray.png
new file mode 100644
index 0000000..6ed20be
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_undock_gray.png differ
diff --git a/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_undock_white.png b/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_undock_white.png
new file mode 100644
index 0000000..f6fd9fa
Binary files /dev/null and b/lib/taurus/qt/qtgui/resource/extra-icons/titlebar_undock_white.png differ
diff --git a/lib/taurus/qt/qtgui/resource/taurus_resource_utils.py b/lib/taurus/qt/qtgui/resource/taurus_resource_utils.py
index c1c5622..5976544 100644
--- a/lib/taurus/qt/qtgui/resource/taurus_resource_utils.py
+++ b/lib/taurus/qt/qtgui/resource/taurus_resource_utils.py
@@ -26,7 +26,8 @@
 """This module provides widgets that display the database in a tree format"""
 
 __all__ = ['getPixmap', 'getThemePixmap', 'getIcon', 'getThemeIcon', 'getStandardIcon',
-           'getElementTypeToolTip', 'getElementTypeIcon', 'getElementTypePixmap', 'getElementTypeSize',
+           'getElementTypeToolTip', 'getElementTypeIconName', 'getElementTypeIcon',
+           'getElementTypePixmap', 'getElementTypeSize',
            'getSWDevHealthToolTip', 'getSWDevHealthIcon', 'getSWDevHealthPixmap',
            'getThemeMembers' ]
 
@@ -34,7 +35,7 @@ __docformat__ = 'restructuredtext'
 
 import os
 
-import PyQt4.Qt as Qt
+from taurus.qt import Qt
 
 import taurus.core
 import taurus.core.util
@@ -146,8 +147,9 @@ def getIcon(key):
     :param key: (str) a string with the pixmap resource key (ex.: ':/status/folder_open.svg')
     
     :return: (PyQt4.QtGui.QIcon) a PyQt4.QtGui.QIcon for the given key"""
-
-    return Qt.QIcon(key)
+    if key.startswith(':'):
+        return Qt.QIcon(key)
+    return getThemeIcon(key)
 
 def getThemePixmap(key, size=None):
     """Returns a PyQt4.QtGui.QPixmap object for the given key and size. Key should be a valid theme
@@ -245,24 +247,35 @@ def getElementTypeSize(elemType):
         return
     return data[__IDX_ELEM_TYPE_SIZE]
 
-def getElementTypeIcon(elemType, fallback=None):
-    """Gets a PyQt4.QtGui.QIcon object for the given :class:`taurus.core.TaurusElementType`.
+def getElementTypeIconName(elemType):
+    """Gets an icon name string for the given :class:`taurus.core.TaurusElementType`.
     
-    If an icon cannot be found for the given :class:`taurus.core.TaurusElementType`,
-    fallback is returned.
+    If an icon name cannot be found for the given :class:`taurus.core.TaurusElementType`,
+    None is returned.
     
     :param elemType: (TaurusElementType) the taurus element type
-    :param fallback: (PyQt4.QtGui.QIcon) the fallback icon. Default is None.
-    
-    :return: (PyQt4.QtGui.QIcon) a PyQt4.QtGui.QIcon for the given :class:`taurus.core.TaurusElementType`"""
     
+    :return: (str) a string representing the icon name for the given 
+             :class:`taurus.core.TaurusElementType`"""
     if elemType is None:
         return
     data = _ELEM_TYPE_MAP.get(elemType)
     if data is None:
         return
-    themeIconName = data[__IDX_ELEM_TYPE_ICON]
+    return data[__IDX_ELEM_TYPE_ICON]
+
+def getElementTypeIcon(elemType, fallback=None):
+    """Gets a PyQt4.QtGui.QIcon object for the given :class:`taurus.core.TaurusElementType`.
     
+    If an icon cannot be found for the given :class:`taurus.core.TaurusElementType`,
+    fallback is returned.
+    
+    :param elemType: (TaurusElementType) the taurus element type
+    :param fallback: (PyQt4.QtGui.QIcon) the fallback icon. Default is None.
+    
+    :return: (PyQt4.QtGui.QIcon) a PyQt4.QtGui.QIcon for the given :class:`taurus.core.TaurusElementType`"""
+
+    themeIconName = getElementTypeIconName(elemType)
     icon = getThemeIcon(themeIconName)
     if icon.isNull() and fallback is not None:
         icon = fallback
diff --git a/lib/taurus/qt/qtgui/shell/__init__.py b/lib/taurus/qt/qtgui/shell/__init__.py
index cdcc41a..32286d1 100644
--- a/lib/taurus/qt/qtgui/shell/__init__.py
+++ b/lib/taurus/qt/qtgui/shell/__init__.py
@@ -27,5 +27,10 @@
 
 __docformat__ = 'restructuredtext'
 
-from .taurusshell import *
-from .spockshell import *
+try:
+    from .taurusshell import *
+except:
+    from taurus.qt.qtgui.display import create_fallback as __create
+    TaurusShell = __create("TaurusShell")
+    
+#from .spockshell import *
diff --git a/lib/taurus/qt/qtgui/shell/taurusshell.py b/lib/taurus/qt/qtgui/shell/taurusshell.py
index b68985c..e061971 100644
--- a/lib/taurus/qt/qtgui/shell/taurusshell.py
+++ b/lib/taurus/qt/qtgui/shell/taurusshell.py
@@ -32,7 +32,7 @@ __docformat__ = 'restructuredtext'
 
 import os
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 try:
     import spyderlib
diff --git a/lib/taurus/core/tango/img/__init__.py b/lib/taurus/qt/qtgui/style/__init__.py
similarity index 66%
copy from lib/taurus/core/tango/img/__init__.py
copy to lib/taurus/qt/qtgui/style/__init__.py
index 2d4fb4b..b4d6b45 100644
--- a/lib/taurus/core/tango/img/__init__.py
+++ b/lib/taurus/qt/qtgui/style/__init__.py
@@ -23,18 +23,30 @@
 ##
 #############################################################################
 
-"""The img package. It contains specific part of tango devices dedicated to
-images (CCDs, detectors, etc)"""
+"""This module provides Qt styles"""
+
+__all__ = ["setTaurusStyle"]
 
 __docformat__ = 'restructuredtext'
 
-from img import *
+import imp
+
+from taurus.qt import Qt
+
+def setTaurusStyle(newStyle):
+
+    app = Qt.QApplication.instance()
+    
+    if app is None:
+        raise RuntimeError("Must initialize a QApplication before setting style")
+    
+    mod = imp.load_module(newStyle, *imp.find_module(newStyle, __path__))
+    
+    style = mod.getStyle()
+    styleSheet = mod.getStyleSheet()
+    
+    if style is not None:
+        app.setStyle(style)
+    if styleSheet is not None:
+        app.setStyleSheet(styleSheet)
 
-def registerExtensions():
-    """Registers the image extensions in the :class:`taurus.core.tango.TangoFactory`"""
-    import taurus
-    factory = taurus.Factory('tango')
-    factory.registerDeviceClass('PyImageViewer', PyImageViewer)
-    factory.registerDeviceClass('ImgGrabber', ImgGrabber)
-    factory.registerDeviceClass('ImgBeamAnalyzer', ImgBeamAnalyzer)
-    factory.registerDeviceClass('CCDPVCAM', CCDPVCAM)
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/style/nebula.py b/lib/taurus/qt/qtgui/style/nebula.py
new file mode 100644
index 0000000..2f6a569
--- /dev/null
+++ b/lib/taurus/qt/qtgui/style/nebula.py
@@ -0,0 +1,185 @@
+#!/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 qt style called nebula"""
+
+__all__ = ["getStyle", "getStyleSheet"]
+
+__docformat__ = 'restructuredtext'
+
+from taurus.qt import Qt
+
+_NEBULA_KEYS = {
+    'border_radius' : '4px',
+    'titlebar_background_color' : 'qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgb(200, 200, 200), stop: 1 rgb(150, 150, 150))',
+    'selected_titlebar_background_color' : 'qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgb(60, 150, 255), stop: 1 rgb(0, 65, 200))',
+    'single_titlebar_background_color' : 'qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 rgb(90, 180, 255), stop: 1 rgb(30, 95, 250))',
+    'titlebar_color' : 'white',
+    'selected_titlebar_color' : 'white',
+    'content_background_color' : 'qlineargradient(x1: 0, y1: 0, x2: 1.0, y2: 1.0, stop: 0 rgb(224, 224, 224), stop: 1 rgb(255, 255, 255))'
+}
+
+_NEBULA_STYLESHEET = \
+"""QToolBox:tab {{
+    color: {titlebar_color};
+    border-width: 0px;
+    border-style: solid;
+    border-color: rgb(0, 65, 200);
+    border-top-left-radius: 0px;
+    border-top-right-radius: {border_radius};
+    border-bottom-left-radius: {border_radius};
+    border-bottom-right-radius: {border_radius};
+    background-color: {titlebar_background_color};
+}}
+
+QToolBox:tab:selected {{
+    background-color: {selected_titlebar_background_color};
+}}
+
+QToolBox:tab:first {{
+    border-top-left-radius: 0px;
+    border-top-right-radius: 0px;
+}}
+
+QToolBox:tab:last {{
+    border-bottom-left-radius: 0px;
+    border-bottom-right-radius: 0px;
+}}
+
+QToolBox:tab:only-one {{
+    background-color: {single_titlebar_background_color};
+}}
+
+QDockWidget {{
+    color: {titlebar_color};
+    background-color: {content_background_color};
+    titlebar-close-icon: url(:/titlebar_close_black.png);
+    titlebar-normal-icon: url(:/titlebar_undock_black.png);
+}}
+
+QDockWidget::title {{
+    text-align: left;
+    padding-left: {border_radius};
+
+    border-top-left-radius: {border_radius};
+    border-top-right-radius: {border_radius};
+    border-bottom-left-radius: {border_radius};
+    border-bottom-right-radius: {border_radius};
+
+    background-color: {selected_titlebar_background_color};
+}}
+
+ QGroupBox {{
+    border: 1px solid;
+    border-color: rgb(0, 65, 200);
+    border-radius: {border_radius};
+    margin-top: 1.5ex;
+    padding-top: 8px;
+    background-color: {content_background_color};
+ }}
+
+QGroupBox::title {{
+    subcontrol-origin: margin;
+    subcontrol-position: top left;
+    padding-top: 1px;
+    padding-right: 3px;
+    padding-bottom: 2px;
+    padding-left: 3px;
+    border-width: 0px;
+    border-radius: {border_radius};
+    color:white;
+    background-color: {selected_titlebar_background_color};
+    left: 5px;
+}}
+
+ QGroupBox::indicator {{
+    width: 15px;
+    height: 15px;
+}}
+
+QTabWidget {{
+    
+}}
+
+QTabWidget::tab-bar {{
+    left: 6px;
+}}
+
+QTabWidget::pane {{
+    border: 1px solid;
+    border-color: rgb(0, 65, 200);
+    border-top-left-radius: {border_radius};
+    border-top-right-radius: {border_radius};
+    border-bottom-left-radius: {border_radius};
+    border-bottom-right-radius: {border_radius};
+    background-color: {content_background_color};
+}}
+
+QTabBar::tab {{
+    color:white;
+    border-bottom-color: rgb(0, 65, 200);
+    background-color: {titlebar_background_color};
+    min-width: 8ex;
+    padding: 2px;
+}}
+
+QTabBar::tab:top {{
+    border-top-left-radius: {border_radius};
+    border-top-right-radius: {border_radius};
+}}
+
+QTabBar::tab:bottom {{
+    border-bottom-left-radius: {border_radius};
+    border-bottom-right-radius: {border_radius};
+}}
+
+QTabBar::tab:selected {{
+    background-color: {selected_titlebar_background_color};
+}}
+
+
+/*
+ QMainWindow::separator {{
+    background: yellow;
+    width: 2px;
+    height: 2px;
+ }}
+
+ QMainWindow::separator:hover {{
+    background: red;
+ }}
+ 
+ */
+ 
+
+"""
+
+NEBULA_STYLESHEET = _NEBULA_STYLESHEET.format(**_NEBULA_KEYS)
+
+def getStyle():
+    return None
+
+def getStyleSheet():
+    return NEBULA_STYLESHEET
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/table/__init__.py b/lib/taurus/qt/qtgui/table/__init__.py
index 4185294..71f098a 100644
--- a/lib/taurus/qt/qtgui/table/__init__.py
+++ b/lib/taurus/qt/qtgui/table/__init__.py
@@ -27,7 +27,10 @@
 
 __docformat__ = 'restructuredtext'
 
+from .qtable import *
 from .qlogtable import *
+from .taurustable import *
+from .taurusdbtable import *
 from .taurusvaluestable import *
 from .taurusdevicepropertytable import *
 from .taurusgrid import *
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/table/qlogtable.py b/lib/taurus/qt/qtgui/table/qlogtable.py
index 9c6c12f..d367df7 100644
--- a/lib/taurus/qt/qtgui/table/qlogtable.py
+++ b/lib/taurus/qt/qtgui/table/qlogtable.py
@@ -33,11 +33,10 @@ __docformat__ = 'restructuredtext'
 import operator
 import logging
 import datetime
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 import taurus.core.util
-
-from taurus.qt.qtgui.resource.qrc_extra_icons import *
+from taurus.qt.qtgui.resource import getIcon, getThemeIcon
 
 def getBrushForLevel(level):
     if level <= taurus.Trace      : return Qt.QBrush(Qt.Qt.lightGray), Qt.QBrush(Qt.Qt.black)
@@ -116,9 +115,10 @@ class QLoggingTableModel(Qt.QAbstractTableModel, logging.Handler):
                 return Qt.QVariant(t)
             elif column == TIME:
                 dt = datetime.datetime.fromtimestamp(record.created)
-                return Qt.QVariant(dt.strftime("%H:%M:%S"))
+                return Qt.QVariant(str(dt))
+                #return Qt.QVariant(dt.strftime("%H:%M:%S"))
             elif column == MSG:
-                return Qt.QVariant(record.msg)
+                return Qt.QVariant(record.getMessage())
             elif column == NAME:
                 return Qt.QVariant(record.name)
             elif column == THREAD:
@@ -335,7 +335,7 @@ class QLoggingWidget(Qt.QWidget):
         tb = self._toolbar = Qt.QToolBar("Taurus logger toolbar")
         tb.setFloatable(False)
         
-        self._scrollLockButton = Qt.QPushButton(Qt.QIcon(":/scroll_lock.png"),"")
+        self._scrollLockButton = Qt.QPushButton(getIcon(":/scroll_lock.png"),"")
         self._scrollLockButton.setCheckable(True)
         self._scrollLockButton.setChecked(table.getScrollLock())
         self._scrollLockButton.setFlat(True)
diff --git a/lib/taurus/core/tango/img/__init__.py b/lib/taurus/qt/qtgui/table/qtable.py
similarity index 65%
copy from lib/taurus/core/tango/img/__init__.py
copy to lib/taurus/qt/qtgui/table/qtable.py
index 2d4fb4b..4f5d6a7 100644
--- a/lib/taurus/core/tango/img/__init__.py
+++ b/lib/taurus/qt/qtgui/table/qtable.py
@@ -23,18 +23,25 @@
 ##
 #############################################################################
 
-"""The img package. It contains specific part of tango devices dedicated to
-images (CCDs, detectors, etc)"""
+"""This module provides base table widget"""
+
+__all__ = ["QBaseTableWidget"]
 
 __docformat__ = 'restructuredtext'
 
-from img import *
+from taurus.qt import Qt
+from taurus.qt.qtgui.model import QBaseModelWidget
+
+
+class QBaseTableWidget(QBaseModelWidget):
 
-def registerExtensions():
-    """Registers the image extensions in the :class:`taurus.core.tango.TangoFactory`"""
-    import taurus
-    factory = taurus.Factory('tango')
-    factory.registerDeviceClass('PyImageViewer', PyImageViewer)
-    factory.registerDeviceClass('ImgGrabber', ImgGrabber)
-    factory.registerDeviceClass('ImgBeamAnalyzer', ImgBeamAnalyzer)
-    factory.registerDeviceClass('CCDPVCAM', CCDPVCAM)
\ No newline at end of file
+    def tableView(self):
+        return self.viewWidget()
+        
+    def createViewWidget(self):
+        table = Qt.QTableView(self)
+        table.setSortingEnabled(True)
+        table.setAlternatingRowColors(True)
+        table.setSelectionBehavior(Qt.QAbstractItemView.SelectRows)
+        table.setSelectionMode(Qt.QAbstractItemView.ExtendedSelection)
+        return table
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/table/taurusdbtable.py b/lib/taurus/qt/qtgui/table/taurusdbtable.py
new file mode 100644
index 0000000..5bd6320
--- /dev/null
+++ b/lib/taurus/qt/qtgui/table/taurusdbtable.py
@@ -0,0 +1,122 @@
+#!/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__ = ["TaurusDbTableWidget"]
+
+__docformat__ = 'restructuredtext'
+
+from taurus.qt import Qt
+from taurus.core import TaurusElementType, TaurusDatabase
+from taurus.qt.qtcore.model import *
+from taurus.qt.qtgui.resource import getElementTypeIcon, getElementTypeIconName
+from taurustable import TaurusBaseTableWidget
+
+
+class TaurusDbTableWidget(TaurusBaseTableWidget):
+    """A class:`taurus.qt.qtgui.tree.TaurusBaseTableWidget` that connects to a
+    :class:`taurus.core.TaurusDatabase` model. It can show the list of database
+    elements in two different perspectives:
+    
+    - device : a device list based perspective
+    - server : a server list based perspective
+    
+    Filters can be inserted into this widget to restrict the items that are
+    seen.
+    """
+    
+    KnownPerspectives = {
+        TaurusElementType.Device : {
+            "label"   : "Devices",
+            "icon"    : getElementTypeIconName(TaurusElementType.Device),
+            "tooltip" : "View by device",
+            "model"   : [TaurusDbDeviceProxyModel, TaurusDbBaseModel,],
+        },
+        TaurusElementType.Server : {
+            "label" : "Servers",
+            "icon" : getElementTypeIconName(TaurusElementType.Server),
+            "tooltip" : "View by server",
+            "model" : [TaurusDbServerProxyModel, TaurusDbPlainServerModel,],
+        },
+    }
+
+    DftPerspective = TaurusElementType.Device
+
+    def getModelClass(self):
+        return TaurusDatabase
+    
+    def sizeHint(self):
+        return Qt.QSize(1024, 512)
+
+    @classmethod
+    def getQtDesignerPluginInfo(cls):
+        ret = TaurusBaseTableWidget.getQtDesignerPluginInfo()
+        ret['module'] = 'taurus.qt.qtgui.table'
+        ret['group'] = 'Taurus Item Widgets'
+        ret['icon'] = ":/designer/table.png"
+        return ret
+
+
+def main_TaurusDbTableWidget(host, perspective=TaurusElementType.Device):
+    w = TaurusDbTableWidget(perspective=perspective)
+    w.setWindowIcon(getElementTypeIcon(perspective))
+    w.setWindowTitle("A Taurus Table Example")
+    w.setModel(host)
+    w.show()
+    return w
+
+def demo():
+    """Table panels"""
+    import taurus
+    db = taurus.Database()
+    host = db.getNormalName()
+    w = main_TaurusDbTableWidget(host, TaurusElementType.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="DB model 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()
+
diff --git a/lib/taurus/qt/qtgui/table/taurusdevicepropertytable.py b/lib/taurus/qt/qtgui/table/taurusdevicepropertytable.py
index ca74863..f65781b 100644
--- a/lib/taurus/qt/qtgui/table/taurusdevicepropertytable.py
+++ b/lib/taurus/qt/qtgui/table/taurusdevicepropertytable.py
@@ -29,7 +29,8 @@ taurusdevicepropertytable.py:
 
 __all__ = ["TaurusPropTable"]
 
-from PyQt4 import QtCore, QtGui, Qt, Qwt5
+from taurus.qt import Qt, QtCore, QtGui
+from PyQt4 import Qwt5
 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 986aa47..aa9f57d 100644
--- a/lib/taurus/qt/qtgui/table/taurusgrid.py
+++ b/lib/taurus/qt/qtgui/table/taurusgrid.py
@@ -39,7 +39,7 @@ import operator
 import traceback
 from functools import partial
 
-from PyQt4 import QtGui, QtCore
+from taurus.qt import QtGui, QtCore
 
 import taurus
 from taurus.core import TaurusManager
@@ -854,7 +854,6 @@ if __name__ == '__main__':
         print '\t/usr/bin/python taurusgrid.py "model=lt.*/VC.*/.*/((C*)|(P*)|(I*))" cols=IP,CCG,PNV rows=LT01,LT02 others=False rowframe=True colframe=False'
         exit()
         
-    from PyQt4 import QtGui,QtCore        
     app = QtGui.QApplication(sys.argv[0:1])
     gui = TaurusGrid()
 
diff --git a/lib/taurus/qt/qtcore/model/__init__.py b/lib/taurus/qt/qtgui/table/taurustable.py
similarity index 55%
copy from lib/taurus/qt/qtcore/model/__init__.py
copy to lib/taurus/qt/qtgui/table/taurustable.py
index 8f426fe..2d57f14 100644
--- a/lib/taurus/qt/qtcore/model/__init__.py
+++ b/lib/taurus/qt/qtgui/table/taurustable.py
@@ -23,37 +23,29 @@
 ##
 #############################################################################
 
-"""This package provides taurus Qt models
+"""This module provides a base widget that can be used to display a taurus 
+model in a table widget"""
 
-Pure PyQt view based widgets can be used to display the contents of the several
-model classes provided here.
+__all__ = ["TaurusBaseTableWidget"]
 
-Displaying the device list in a :class:`PyQt4.QtGui.QTreeView`::
-
-    view = Qt.QTreeView()
-    db = taurus.Database()
-    model = taurus.qt.qtcore.TaurusDbDeviceModel()
-    model.setDataSource(db)
-    view.setModel(model)
-
-Same example but in a :class:`PyQt4.QtGui.QTableView`::
+__docformat__ = 'restructuredtext'
 
-    view = Qt.QTableView()
-    db = taurus.Database()
-    model = taurus.qt.qtcore.TaurusDbPlainDeviceModel()
-    model.setDataSource(db)
-    view.setModel(model)
+from taurus.qt.qtgui.model import TaurusBaseModelWidget
+from qtable import QBaseTableWidget
 
-And now inside a :class:`PyQt4.QtGui.QComboBox`::
 
-    view = Qt.QComboBox()
-    db = taurus.Database()
-    model = taurus.qt.qtcore.TaurusDbPlainDeviceModel()
-    model.setDataSource(db)
-    view.setModel(model)
+class TaurusBaseTableWidget(QBaseTableWidget, TaurusBaseModelWidget):
+    """A class:`taurus.qt.qtgui.tree.QBaseTableWidget` that connects to a
+    taurus model.
     
-"""
+    Filters can be inserted into this widget to restrict the items that are
+    seen."""
+    
+    def __init__(self, parent=None, designMode=False, with_filter_widget=True,
+                 perspective=None, proxy=None):
+        self.call__init__(QBaseTableWidget, parent, designMode=designMode,
+                          with_filter_widget=with_filter_widget)
+        self.call__init__(TaurusBaseModelWidget, designMode=designMode,
+                          perspective=perspective, proxy=proxy)
 
-__docformat__ = 'restructuredtext'
 
-from taurusdatabasemodel import *
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/table/taurusvaluestable.py b/lib/taurus/qt/qtgui/table/taurusvaluestable.py
index a0ed23d..0af3b39 100644
--- a/lib/taurus/qt/qtgui/table/taurusvaluestable.py
+++ b/lib/taurus/qt/qtgui/table/taurusvaluestable.py
@@ -33,7 +33,7 @@ __docformat__ = 'restructuredtext'
 
 import numpy
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 import PyTango
 
diff --git a/lib/taurus/qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py b/lib/taurus/qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py
index 61b6de2..006b802 100644
--- a/lib/taurus/qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py
+++ b/lib/taurus/qt/qtgui/taurusgui/PermanentCustomPanelsDlg.py
@@ -28,7 +28,7 @@
 PermanentCustomPanelDlg.py: 
 """
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 from ui.ui_PermanentCustomPanelsDlg import Ui_PermanentCustomPanelsDlg
 
 class PermanentCustomPanelsDlg(Qt.QDialog):
diff --git a/lib/taurus/qt/qtgui/taurusgui/__init__.py b/lib/taurus/qt/qtgui/taurusgui/__init__.py
index 1711153..ac6a7e0 100644
--- a/lib/taurus/qt/qtgui/taurusgui/__init__.py
+++ b/lib/taurus/qt/qtgui/taurusgui/__init__.py
@@ -41,3 +41,5 @@ __docformat__ = 'restructuredtext'
 import utils 
 from paneldescriptionwizard import *
 from taurusgui import *
+from appsettingswizard import *
+from macrolistener import *
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/taurusgui/app_settings_wizard/appsettingswizard.py b/lib/taurus/qt/qtgui/taurusgui/appsettingswizard.py
similarity index 96%
rename from lib/taurus/qt/qtgui/taurusgui/app_settings_wizard/appsettingswizard.py
rename to lib/taurus/qt/qtgui/taurusgui/appsettingswizard.py
index 9b3a50a..a848275 100644
--- a/lib/taurus/qt/qtgui/taurusgui/app_settings_wizard/appsettingswizard.py
+++ b/lib/taurus/qt/qtgui/taurusgui/appsettingswizard.py
@@ -24,18 +24,20 @@
 ###########################################################################
 
 """
-This Wizard provide functionality of creation of configuration file 
-for constructing a GUI based on TaurusGUI  
+This Wizard provide functionality for creating from scratch a configuration
+directory for a TaurusGUI based application.
 
-The configuration file determines the default, permanent, pre-defined
+The files in the configuration dir determine the default, permanent, pre-defined
 contents of the GUI. While the user may add/remove more elements at run
 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"]
+
 import os, sys, shutil,re
 import datetime
-from PyQt4 import Qt
+from taurus.qt import Qt
 import taurus.qt.qtgui.resource
 import taurus.qt.qtgui.extra_macroexecutor.common
 import taurus.qt.qtgui.panel
@@ -50,9 +52,9 @@ from taurus.qt.qtgui.util import ExternalAppAction
         
 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
+    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):
@@ -236,7 +238,7 @@ class ProjectPage(BasePage):
                                     'Could not create the project directory.\nReason:%s'%repr(e),
                                      Qt.QMessageBox.Cancel)
                 return False
-        fname = os.path.join(dirname, self.wizard().getConfigFileName())
+        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)),
@@ -428,7 +430,7 @@ class CustomLogoPage(BasePage):
             return None
                 
     def _selectImage(self):
-            fileName = Qt.QFileDialog.getOpenFileName(self, self.tr("Open File"), Qt.QDir.homePath() , self.tr("Images (*.png *.xpm *.jpg *.jpeg)"))
+            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()
         
@@ -844,7 +846,11 @@ class PanelsPage(BasePage):
         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):
         Qt.QDialog.__init__(self, parent)
         self.setModal(True)
@@ -1272,23 +1278,36 @@ class OutroPage(BasePage):
             if os.path.normpath(src) != os.path.normpath(dst):
                 shutil.copy(src, dst)
                 logfile.write('File copied: %s --> %s\n'%(src, dst))
-        #write config file
-        cfgfilename = os.path.join(pdir, self.wizard().getConfigFileName())
-        f = open(cfgfilename, 'w')
+        #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('Config file created: "%s"\n'%cfgfilename)
+        logfile.write('XML Config file created: "%s"\n'%xmlcfgfilename)
+        #write python config file
+        pycfgfilename = os.path.join(pdir, '%s.py'%self.wizard().getConfigFilePrefix())
+        f = open(pycfgfilename, 'w')
+        f.write("XML_CONFIG = '%s'"%self.wizard().getXmlConfigFileName())
+        f.close()
+        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)
         #write launcher script
         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 --config-file=%s')%self.wizard().getConfigFileName())
+                 'taurusgui %s $*')%os.path.basename(pdir.rstrip('/')))
         f.close()
         logfile.write('Unix launcher created: "%s"\n'%launcherfilename)
 
         #if all went ok...
         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:
@@ -1303,23 +1322,35 @@ class OutroPage(BasePage):
          
 
 class AppSettingsWizard(Qt.QWizard):
+    """
+    This Wizard provide functionality for creating from scratch a configuration
+    directory for a TaurusGUI based application.
+    
+    The files in the configuration dir determine the default, permanent, pre-defined
+    contents of the GUI. While the user may add/remove more elements at run
+    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'))
-    def __init__(self, parent=None, jdrawCommand='jdraw', configFileName='config.xml'):
+    def __init__(self, parent=None, jdrawCommand='jdraw', configFilePrefix='config'):
         Qt.QWizard.__init__(self, parent)
         self.installEventFilter(self)
         self._item_funcs = {}
         self._pages = {}
         self._jdrawCommand = jdrawCommand
-        self._configFileName = configFileName
+        self._configFilePrefix = configFilePrefix
         self._loadPages()
         self._substitutions = {}
         self._projectWarnings = []
     
     def getProjectWarnings(self):
         return self._projectWarnings
+    
+    def getConfigFilePrefix(self):
+        return self._configFilePrefix
         
-    def getConfigFileName(self):
-        return self._configFileName
+    def getXmlConfigFileName(self):
+        return "%s.xml"%self._configFilePrefix
      
     @staticmethod
     def getValueFromNode(rootNode, nodeName, default=None):
@@ -1466,7 +1497,7 @@ class AppSettingsWizard(Qt.QWizard):
         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 make 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
@@ -1483,7 +1514,7 @@ class AppSettingsWizard(Qt.QWizard):
                 contents = f.read()
                 f.close()
                 for ref in re.findall(r'file_name:\"(.+?)\"',contents):
-                    refsrc = os.path.join(src,ref) #this is ok for both relative and absolute references
+                    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
diff --git a/lib/taurus/qt/qtgui/taurusgui/conf/tgconf_example01/config.py b/lib/taurus/qt/qtgui/taurusgui/conf/tgconf_example01/config.py
index 047fa45..72256ae 100644
--- a/lib/taurus/qt/qtgui/taurusgui/conf/tgconf_example01/config.py
+++ b/lib/taurus/qt/qtgui/taurusgui/conf/tgconf_example01/config.py
@@ -35,7 +35,7 @@ user will find when launching the GUI for the first time.
 #==============================================================================
 # Import section. You probably want to keep this line. Don't edit this block 
 # unless you know what you are doing
-from taurus.qt.qtgui.taurusgui.utils import PanelDescription, ExternalApp, Qt_Qt
+from taurus.qt.qtgui.taurusgui.utils import PanelDescription, ExternalApp, ToolBarDescription, AppletDescription
 # (end of import section)
 #==============================================================================
 
@@ -45,7 +45,18 @@ from taurus.qt.qtgui.taurusgui.utils import PanelDescription, ExternalApp, Qt_Qt
 #===============================================================================
 GUI_NAME = 'EXAMPLE 01'
 ORGANIZATION = 'Taurus'
-#CUSTOM_LOGO = <full path to GUI-specific logo>
+
+#===============================================================================
+# Specific logo. It can be an absolute path,or relative to the app dir or a 
+# resource path. If commented out, ":/taurus.png" will be used
+#===============================================================================
+#CUSTOM_LOGO = <path GUI-specific logo 
+
+#===============================================================================
+# You can provide an URI for a manual in html format
+# (comment out or make MANUAL_URI=None to skip creating a Manual panel) 
+#===============================================================================
+MANUAL_URI = 'http://packages.python.org/taurus'
 
 #===============================================================================
 # If you want to have a main synoptic panel, set the SYNOPTIC variable
@@ -73,12 +84,10 @@ nxbrowser = PanelDescription('NeXus Browser',
 
 i0 = PanelDescription('BigInstrument',
                        classname = 'TaurusAttrForm',
-                       area = Qt_Qt.TopDockWidgetArea,
                        model = 'sys/tg_test/1')
 
 i1 = PanelDescription('instrument1',
                        classname = 'TaurusForm',
-                       area = Qt_Qt.TopDockWidgetArea,
                        model = ['sys/tg_test/1/double_scalar',
                                 'sys/tg_test/1/short_scalar_ro',
                                 'sys/tg_test/1/float_spectrum_ro',
@@ -86,16 +95,38 @@ i1 = PanelDescription('instrument1',
 
 i2 = PanelDescription('instrument2',
                        classname = 'TaurusForm',
-                       area = Qt_Qt.TopDockWidgetArea,
                        model = ['sys/tg_test/1/wave',
                                 'sys/tg_test/1/boolean_scalar'])
 
 trend = PanelDescription('Trend',
                         classname = 'TaurusTrend',
-                        area = Qt_Qt.TopDockWidgetArea,
                         model = ['sys/tg_test/1/double_scalar'])
 
 #===============================================================================
+# Define custom toolbars to be shown. To define a toolbar, instantiate a
+# ToolbarDescription object (see documentation for the gblgui_utils module)
+#===============================================================================
+
+dummytoolbar = ToolBarDescription('Empty Toolbar',
+                        classname = 'QToolBar',
+                        modulename = 'PyQt4.Qt')
+
+#panictoolbar = ToolBarDescription('Panic Toolbar',
+#                        classname = 'PanicToolbar',
+#                        modulename = 'tangopanic')
+
+#===============================================================================
+# Define custom applets to be shown in the applets bar (the wide bar that
+# contains the logos). To define an applet, instantiate an AppletDescription
+# object (see documentation for the gblgui_utils module)
+#===============================================================================
+
+mon2 = AppletDescription('Dummy Monitor',
+                        classname = 'TaurusMonitorTiny',
+                        model='eval://1000*rand(2)')
+
+
+#===============================================================================
 # Define which External Applications are to be inserted.
 # To define an external application, instantiate an ExternalApp object
 # See TaurusMainWindow.addExternalAppLauncher for valid values of ExternalApp
@@ -114,6 +145,7 @@ pymca = ExternalApp(['pymca'])
 #MACROEDITORS_PATH = 
 
 #===============================================================================
-# Monitor widget
+# Monitor widget (This is obsolete now, you can get the same result defining a
+# custom applet with classname='TaurusMonitorTiny')
 #===============================================================================
-MONITOR = ['sys/tg_test/1/double_scalar_rww']
+# MONITOR = ['sys/tg_test/1/double_scalar_rww']
diff --git a/lib/taurus/qt/qtgui/taurusgui/macrolistener.py b/lib/taurus/qt/qtgui/taurusgui/macrolistener.py
new file mode 100644
index 0000000..7704b60
--- /dev/null
+++ b/lib/taurus/qt/qtgui/taurusgui/macrolistener.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 an object that can be added to a TaurusGui manage the
+widgets 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
+"""
+
+__all__=['MacroBroker']
+__docformat__ = 'restructuredtext'
+
+
+import os, sys
+import datetime
+import taurus
+from taurus.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
+
+class MacroBroker(Qt.QObject, TaurusBaseComponent):
+    def __init__(self, parent):
+        '''Passing the parent object (the main window) is mandatory'''
+        Qt.QObject.__init__(self, parent)
+        TaurusBaseComponent.__init__(self, self.__class__.__name__)
+        
+        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):
+        TaurusBaseComponent.setModel(self, doorname)
+        self._onDoorChanged(doorname)
+        
+    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 
+        '''
+        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)
+        if not isinstance(door, Qt.QObject):
+            msg= "cannot connect to door %s"%doorname
+            Qt.QMessageBox.critical(self,'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) #@todo: we may be able to remove this once the experimentConfigurationChanged signals from the door is implemented
+        #@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
+        from taurus.qt.qtgui.button import TaurusCommandButton
+        
+        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'))
+        
+        #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)
+        
+        #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)
+        
+        #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)
+        
+        #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)
+        
+        #puts doorDebug
+        self.__doorDebug = DoorDebug()
+        Qt.qApp.SDM.connectReader("doorDebugChanged", self.__doorDebug.onDoorDebugChanged)
+        mainwindow.createPanel(self.__doorDebug, 'DoorDebug', registerconfig=False)
+        
+        #puts doorResult
+        self.__doorResult = DoorResult(mainwindow)
+        Qt.qApp.SDM.connectReader("doorResultChanged", self.__doorResult.onDoorResultChanged)
+        mainwindow.createPanel(self.__doorResult, 'DoorResult', registerconfig=False)
+        
+        #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'
+        #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
+        
+        
+        
+            
+    def onExpConfChanged(self, expconf):
+        '''
+        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` 
+                        for more details 
+        '''
+        mainwindow = self.parent()
+        
+        #extract the info of what to plot from the expconf (segregated by type of plot)
+          #for each trend1d, create a taurustrend and set the x and the plotablesfilter
+          #for each plot1d, create a taurusplot and set its source
+          #for each imageplot, create a taurusimage and set its source
+        
+        #puts a TaurusTrend connected to the door for showing scan trends
+        from taurus.qt.qtgui.plot import TaurusTrend
+        self.__scanTrend = TaurusTrend()
+        self.__scanTrend.setXIsTime(False)
+        self.__scanTrend.setScansAutoClear(False)
+        Qt.qApp.SDM.connectReader("doorName", self.__scanTrend.setScanDoor)
+        Qt.qApp.SDM.connectReader("plotablesFilter", self.__scanTrend.onScanPlotablesFilterChanged)
+        mainwindow.createPanel(self.__scanTrend, '1D Scans', registerconfig=True)
+        
+        
+#class Trend1DDescription(PanelDescription):
+#    def __init__(self, ):      
diff --git a/lib/taurus/qt/qtgui/taurusgui/paneldescriptionwizard.py b/lib/taurus/qt/qtgui/taurusgui/paneldescriptionwizard.py
index 9239bb7..62bdbce 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 PyQt4 import Qt
+from taurus.qt import Qt
 import sys
 import weakref
 from taurus.qt.qtgui.taurusgui.utils import PanelDescription
@@ -148,39 +148,39 @@ class BlackListValidator(Qt.QValidator):
             self._previousState = state
         return state, pos
 
-class NamePage(Qt.QWizardPage):
-    
-    def __init__(self, parent = None):
-        Qt.QWizardPage.__init__(self, parent)
-        
-        self.setTitle('Name')
-        self.setSubTitle('Choose a name for the new panel (it must not exist already)')
-        
-        #contents    
-        self.nameLE = Qt.QLineEdit()
-        self.registerField("panelname*",self.nameLE)
-        self.diagnosticLabel = Qt.QLabel('')
-        
-        layout = Qt.QHBoxLayout()
-        layout.addWidget(Qt.QLabel("Panel Name"))
-        layout.addWidget(self.nameLE)
-        layout.addWidget(self.diagnosticLabel)
-        self.setLayout(layout)
-    
-    def initializePage(self):
-        gui = self.wizard().getGui()
-        if hasattr(gui, 'getPanelNames'):
-            pnames = gui.getPanelNames()
-            v = BlackListValidator(blackList=pnames, parent=self.nameLE)
-            self.nameLE.setValidator(v)
-            self.connect(v, Qt.SIGNAL('stateChanged'),self._onValidatorStateChanged)
-    
-    def _onValidatorStateChanged(self, state, previous):
-        if state == Qt.QValidator.Acceptable:
-            self.diagnosticLabel.setText('')
-        else:
-            self.diagnosticLabel.setText('<b>(Name already exists)</b>')
-        
+#class NamePage(Qt.QWizardPage):
+#    
+#    def __init__(self, parent = None):
+#        Qt.QWizardPage.__init__(self, parent)
+#        
+#        self.setTitle('Name')
+#        self.setSubTitle('Choose a name for the new panel (it must not exist already)')
+#        
+#        #contents    
+#        self.nameLE = Qt.QLineEdit()
+#        self.registerField("panelname*",self.nameLE)
+#        self.diagnosticLabel = Qt.QLabel('')
+#        
+#        layout = Qt.QHBoxLayout()
+#        layout.addWidget(Qt.QLabel("Panel Name"))
+#        layout.addWidget(self.nameLE)
+#        layout.addWidget(self.diagnosticLabel)
+#        self.setLayout(layout)
+#    
+#    def initializePage(self):
+#        gui = self.wizard().getGui()
+#        if hasattr(gui, 'getPanelNames'):
+#            pnames = gui.getPanelNames()
+#            v = BlackListValidator(blackList=pnames, parent=self.nameLE)
+#            self.nameLE.setValidator(v)
+#            self.connect(v, Qt.SIGNAL('stateChanged'),self._onValidatorStateChanged)
+#    
+#    def _onValidatorStateChanged(self, state, previous):
+#        if state == Qt.QValidator.Acceptable:
+#            self.diagnosticLabel.setText('')
+#        else:
+#            self.diagnosticLabel.setText('<b>(Name already exists)</b>')
+#        
     
         
 class WidgetPage(Qt.QWizardPage):
@@ -191,11 +191,20 @@ class WidgetPage(Qt.QWizardPage):
         
         self.setFinalPage(True)
         self.setTitle('Panel type')
-        self.setSubTitle('Click on the type of panel you want')
+        self.setSubTitle('Choose a name and type for the new panel')
         self.setButtonText(Qt.QWizard.NextButton, 'Advanced settings...')
         
         self.widgetDescription = {'widgetname':None, 'modulename':None, 'classname':None}
         
+        #name part
+        self.nameLE = Qt.QLineEdit()
+        self.registerField("panelname*",self.nameLE)
+        self.diagnosticLabel = Qt.QLabel('')
+        nameLayout = Qt.QHBoxLayout()
+        nameLayout.addWidget(Qt.QLabel("Panel Name"))
+        nameLayout.addWidget(self.nameLE)
+        nameLayout.addWidget(self.diagnosticLabel)
+        
         #contents    
         available = TaurusWidgetFactory().getWidgetClassNames()
         candidates=['TaurusForm','TaurusTrend', 'TaurusArrayEditor',
@@ -219,26 +228,45 @@ class WidgetPage(Qt.QWizardPage):
         
         self.widgetTypeLB = Qt.QLabel("<b>Widget Type:</b>")
         
-        self.connect(self.choiceWidget, Qt.SIGNAL('choiceMade'),self.onChoiceMade)
+        self.connect(self.choiceWidget, Qt.SIGNAL('choiceMade'),self.onChoiceMade)        
         
         layout = Qt.QVBoxLayout()
+        layout.addLayout(nameLayout)
         layout.addWidget(self.choiceWidget)
         layout.addWidget(self.widgetTypeLB)
         self.setLayout(layout)
     
+    def initializePage(self):
+        gui = self.wizard().getGui()
+        if hasattr(gui, 'getPanelNames'):
+            pnames = gui.getPanelNames()
+            v = BlackListValidator(blackList=pnames, parent=self.nameLE)
+            self.nameLE.setValidator(v)
+            self.connect(v, Qt.SIGNAL('stateChanged'),self._onValidatorStateChanged)
+    
     def validatePage(self):
-        if self.wizard().getPanelDescription() is None:
+        paneldesc = self.wizard().getPanelDescription()
+        if paneldesc is None:
             Qt.QMessageBox.information(self, 'You must choose a panel type', 'Choose a panel type by clicking on one of the proposed types')
             return False
         try:
-            w = self.wizard().getPanelDescription().getWidget()
+            w = paneldesc.getWidget()
             if not isinstance(w, Qt.QWidget): 
                 raise ValueError
+            #set the name now because it might have changed since the PanelDescription was created
+            paneldesc.name = str(self.field('panelname').toString())
+            #allow the wizard to proceed
             return True
         except Exception,e:
             Qt.QMessageBox.warning(self, 'Invalid panel', 'The requested panel cannot be created. \nReason:\n%s'%repr(e))
             return False
     
+    def _onValidatorStateChanged(self, state, previous):
+        if state == Qt.QValidator.Acceptable:
+            self.diagnosticLabel.setText('')
+        else:
+            self.diagnosticLabel.setText('<b>(Name already exists)</b>')
+    
     def onChoiceMade(self, choice):
         if choice == self.OTHER_TXT:
             wdesc, ok = ExpertWidgetChooserDlg.getDialog()
@@ -249,8 +277,7 @@ class WidgetPage(Qt.QWizardPage):
         else:
             self.widgetDescription['classname'] = choice
         
-        panelname = str(self.field('panelname').toString())
-        self.wizard().setPanelDescription( PanelDescription(panelname, **self.widgetDescription))      
+        self.wizard().setPanelDescription( PanelDescription('', **self.widgetDescription))   #the name will be set in self.validatePage   
         paneltype = str(self.widgetDescription['widgetname'] or self.widgetDescription['classname'])
         self.widgetTypeLB.setText("<b>Widget Type:</b> %s"%paneltype)
         
@@ -485,7 +512,9 @@ class CommItemDelegate(Qt.QStyledItemDelegate):
         model.setData(index, Qt.QVariant(editor.currentText()))        
 
 class PanelDescriptionWizard(Qt.QWizard):
-    
+    '''A wizard-style dialog for configuring a new TaurusGui panel. 
+    Use :meth:`getDialog` for launching it
+    '''
     def __init__(self, parent=None, gui=None):
         Qt.QWizard.__init__(self, parent)
 #        self.setPixmap(Qt.QWizard.LogoPixmap, getPixmap(":/logo.png"))
@@ -494,26 +523,43 @@ class PanelDescriptionWizard(Qt.QWizard):
         if gui is None: gui = parent
         if gui is not None:
             self._gui = weakref.proxy(gui)
-        #self.setOption(self.HaveFinishButtonOnEarlyPages, True)
-        self.namePG = NamePage()
+        ###self.setOption(self.HaveFinishButtonOnEarlyPages, True)
+        #self.namePG = NamePage()
         self.widgetPG = WidgetPage()
         self.advSettingsPG = AdvSettingsPage()
         
-        self.addPage(self.namePG)
+        ###self.addPage(self.namePG)
         self.addPage(self.widgetPG)
         self.addPage(self.advSettingsPG)
         
     def getGui(self):
+        '''returns a reference to the GUI to which the dialog is associated'''
         return self._gui
         
     def getPanelDescription(self):
+        '''Returns the panel description with the choices made so far
+        
+        :return: (PanelDescription) the panel description
+        '''
         return self._panelDescription
     
     def setPanelDescription(self, desc):
+        '''Sets the Panel description
+        
+        :param desc: (PanelDescription)
+        '''
         self._panelDescription = desc
         
     @staticmethod    
     def getDialog(parent):
+        """Static method for launching a new Dialog.
+        
+        :param parent: parent widget for the new dialog
+        
+        :return: (tuple<PanelDescription,bool>) tuple of a description object 
+                 and a state flag. The state is True if the dialog was accepted
+                 and False otherwise
+        """
         dlg = PanelDescriptionWizard(parent)
         dlg.exec_()
         return dlg.getPanelDescription(), (dlg.result() == dlg.Accepted)   
diff --git a/lib/taurus/qt/qtgui/taurusgui/parser.out b/lib/taurus/qt/qtgui/taurusgui/parser.out
deleted file mode 100644
index 99321f8..0000000
--- a/lib/taurus/qt/qtgui/taurusgui/parser.out
+++ /dev/null
@@ -1,762 +0,0 @@
-Created by PLY version 3.3 (http://www.dabeaz.com/ply)
-
-Grammar
-
-Rule 0     S' -> jdfile
-Rule 1     jdfile -> JDFILE SYMBOL LBRACKET global element_list RBRACKET
-Rule 2     jdfile -> JDFILE LBRACKET global RBRACKET
-Rule 3     global -> GLOBAL LBRACKET RBRACKET
-Rule 4     global -> GLOBAL LBRACKET parameter_list RBRACKET
-Rule 5     element_list -> element_list element
-Rule 6     element_list -> element
-Rule 7     element -> obj LBRACKET RBRACKET
-Rule 8     element -> obj LBRACKET parameter_list RBRACKET
-Rule 9     obj -> JDLINE
-Rule 10    obj -> JDRECTANGLE
-Rule 11    obj -> JDROUNDRECTANGLE
-Rule 12    obj -> JDGROUP
-Rule 13    obj -> JDELLIPSE
-Rule 14    obj -> JDBAR
-Rule 15    obj -> JDSWINGOBJECT
-Rule 16    obj -> JDLABEL
-Rule 17    obj -> JDPOLYLINE
-Rule 18    obj -> JDIMAGE
-Rule 19    obj -> JDAXIS
-Rule 20    obj -> JDSLIDER
-Rule 21    parameter_list -> parameter_list parameter
-Rule 22    parameter_list -> parameter
-Rule 23    parameter -> SYMBOL TWOP param_value
-Rule 24    parameter -> SYMBOL TWOP LBRACKET RBRACKET
-Rule 25    parameter -> SYMBOL TWOP LBRACKET parameter_list RBRACKET
-Rule 26    parameter -> SYMBOL TWOP LBRACKET element_list RBRACKET
-Rule 27    param_value -> value_list
-Rule 28    value_list -> value_list COMMA value
-Rule 29    value_list -> value
-Rule 30    value -> NUMBER
-Rule 31    value -> TEXT
-Rule 32    value -> true
-Rule 33    value -> false
-
-Terminals, with rules where they appear
-
-COMMA                : 28
-GLOBAL               : 3 4
-JDAXIS               : 19
-JDBAR                : 14
-JDELLIPSE            : 13
-JDFILE               : 1 2
-JDGROUP              : 12
-JDIMAGE              : 18
-JDLABEL              : 16
-JDLINE               : 9
-JDPOLYLINE           : 17
-JDRECTANGLE          : 10
-JDROUNDRECTANGLE     : 11
-JDSLIDER             : 20
-JDSWINGOBJECT        : 15
-LBRACKET             : 1 2 3 4 7 8 24 25 26
-NUMBER               : 30
-RBRACKET             : 1 2 3 4 7 8 24 25 26
-SYMBOL               : 1 23 24 25 26
-TEXT                 : 31
-TWOP                 : 23 24 25 26
-error                : 
-false                : 33
-true                 : 32
-
-Nonterminals, with rules where they appear
-
-element              : 5 6
-element_list         : 1 5 26
-global               : 1 2
-jdfile               : 0
-obj                  : 7 8
-param_value          : 23
-parameter            : 21 22
-parameter_list       : 4 8 21 25
-value                : 28 29
-value_list           : 27 28
-
-Parsing method: LALR
-
-state 0
-
-    (0) S' -> . jdfile
-    (1) jdfile -> . JDFILE SYMBOL LBRACKET global element_list RBRACKET
-    (2) jdfile -> . JDFILE LBRACKET global RBRACKET
-
-    JDFILE          shift and go to state 2
-
-    jdfile                         shift and go to state 1
-
-state 1
-
-    (0) S' -> jdfile .
-
-
-
-state 2
-
-    (1) jdfile -> JDFILE . SYMBOL LBRACKET global element_list RBRACKET
-    (2) jdfile -> JDFILE . LBRACKET global RBRACKET
-
-    SYMBOL          shift and go to state 3
-    LBRACKET        shift and go to state 4
-
-
-state 3
-
-    (1) jdfile -> JDFILE SYMBOL . LBRACKET global element_list RBRACKET
-
-    LBRACKET        shift and go to state 5
-
-
-state 4
-
-    (2) jdfile -> JDFILE LBRACKET . global RBRACKET
-    (3) global -> . GLOBAL LBRACKET RBRACKET
-    (4) global -> . GLOBAL LBRACKET parameter_list RBRACKET
-
-    GLOBAL          shift and go to state 7
-
-    global                         shift and go to state 6
-
-state 5
-
-    (1) jdfile -> JDFILE SYMBOL LBRACKET . global element_list RBRACKET
-    (3) global -> . GLOBAL LBRACKET RBRACKET
-    (4) global -> . GLOBAL LBRACKET parameter_list RBRACKET
-
-    GLOBAL          shift and go to state 7
-
-    global                         shift and go to state 8
-
-state 6
-
-    (2) jdfile -> JDFILE LBRACKET global . RBRACKET
-
-    RBRACKET        shift and go to state 9
-
-
-state 7
-
-    (3) global -> GLOBAL . LBRACKET RBRACKET
-    (4) global -> GLOBAL . LBRACKET parameter_list RBRACKET
-
-    LBRACKET        shift and go to state 10
-
-
-state 8
-
-    (1) jdfile -> JDFILE SYMBOL LBRACKET global . element_list RBRACKET
-    (5) element_list -> . element_list element
-    (6) element_list -> . element
-    (7) element -> . obj LBRACKET RBRACKET
-    (8) element -> . obj LBRACKET parameter_list RBRACKET
-    (9) obj -> . JDLINE
-    (10) obj -> . JDRECTANGLE
-    (11) obj -> . JDROUNDRECTANGLE
-    (12) obj -> . JDGROUP
-    (13) obj -> . JDELLIPSE
-    (14) obj -> . JDBAR
-    (15) obj -> . JDSWINGOBJECT
-    (16) obj -> . JDLABEL
-    (17) obj -> . JDPOLYLINE
-    (18) obj -> . JDIMAGE
-    (19) obj -> . JDAXIS
-    (20) obj -> . JDSLIDER
-
-    JDLINE          shift and go to state 25
-    JDRECTANGLE     shift and go to state 13
-    JDROUNDRECTANGLE shift and go to state 20
-    JDGROUP         shift and go to state 16
-    JDELLIPSE       shift and go to state 17
-    JDBAR           shift and go to state 23
-    JDSWINGOBJECT   shift and go to state 15
-    JDLABEL         shift and go to state 11
-    JDPOLYLINE      shift and go to state 19
-    JDIMAGE         shift and go to state 21
-    JDAXIS          shift and go to state 22
-    JDSLIDER        shift and go to state 24
-
-    element                        shift and go to state 18
-    obj                            shift and go to state 12
-    element_list                   shift and go to state 14
-
-state 9
-
-    (2) jdfile -> JDFILE LBRACKET global RBRACKET .
-
-    $end            reduce using rule 2 (jdfile -> JDFILE LBRACKET global RBRACKET .)
-
-
-state 10
-
-    (3) global -> GLOBAL LBRACKET . RBRACKET
-    (4) global -> GLOBAL LBRACKET . parameter_list RBRACKET
-    (21) parameter_list -> . parameter_list parameter
-    (22) parameter_list -> . parameter
-    (23) parameter -> . SYMBOL TWOP param_value
-    (24) parameter -> . SYMBOL TWOP LBRACKET RBRACKET
-    (25) parameter -> . SYMBOL TWOP LBRACKET parameter_list RBRACKET
-    (26) parameter -> . SYMBOL TWOP LBRACKET element_list RBRACKET
-
-    RBRACKET        shift and go to state 28
-    SYMBOL          shift and go to state 27
-
-    parameter                      shift and go to state 29
-    parameter_list                 shift and go to state 26
-
-state 11
-
-    (16) obj -> JDLABEL .
-
-    LBRACKET        reduce using rule 16 (obj -> JDLABEL .)
-
-
-state 12
-
-    (7) element -> obj . LBRACKET RBRACKET
-    (8) element -> obj . LBRACKET parameter_list RBRACKET
-
-    LBRACKET        shift and go to state 30
-
-
-state 13
-
-    (10) obj -> JDRECTANGLE .
-
-    LBRACKET        reduce using rule 10 (obj -> JDRECTANGLE .)
-
-
-state 14
-
-    (1) jdfile -> JDFILE SYMBOL LBRACKET global element_list . RBRACKET
-    (5) element_list -> element_list . element
-    (7) element -> . obj LBRACKET RBRACKET
-    (8) element -> . obj LBRACKET parameter_list RBRACKET
-    (9) obj -> . JDLINE
-    (10) obj -> . JDRECTANGLE
-    (11) obj -> . JDROUNDRECTANGLE
-    (12) obj -> . JDGROUP
-    (13) obj -> . JDELLIPSE
-    (14) obj -> . JDBAR
-    (15) obj -> . JDSWINGOBJECT
-    (16) obj -> . JDLABEL
-    (17) obj -> . JDPOLYLINE
-    (18) obj -> . JDIMAGE
-    (19) obj -> . JDAXIS
-    (20) obj -> . JDSLIDER
-
-    RBRACKET        shift and go to state 32
-    JDLINE          shift and go to state 25
-    JDRECTANGLE     shift and go to state 13
-    JDROUNDRECTANGLE shift and go to state 20
-    JDGROUP         shift and go to state 16
-    JDELLIPSE       shift and go to state 17
-    JDBAR           shift and go to state 23
-    JDSWINGOBJECT   shift and go to state 15
-    JDLABEL         shift and go to state 11
-    JDPOLYLINE      shift and go to state 19
-    JDIMAGE         shift and go to state 21
-    JDAXIS          shift and go to state 22
-    JDSLIDER        shift and go to state 24
-
-    element                        shift and go to state 31
-    obj                            shift and go to state 12
-
-state 15
-
-    (15) obj -> JDSWINGOBJECT .
-
-    LBRACKET        reduce using rule 15 (obj -> JDSWINGOBJECT .)
-
-
-state 16
-
-    (12) obj -> JDGROUP .
-
-    LBRACKET        reduce using rule 12 (obj -> JDGROUP .)
-
-
-state 17
-
-    (13) obj -> JDELLIPSE .
-
-    LBRACKET        reduce using rule 13 (obj -> JDELLIPSE .)
-
-
-state 18
-
-    (6) element_list -> element .
-
-    RBRACKET        reduce using rule 6 (element_list -> element .)
-    JDLINE          reduce using rule 6 (element_list -> element .)
-    JDRECTANGLE     reduce using rule 6 (element_list -> element .)
-    JDROUNDRECTANGLE reduce using rule 6 (element_list -> element .)
-    JDGROUP         reduce using rule 6 (element_list -> element .)
-    JDELLIPSE       reduce using rule 6 (element_list -> element .)
-    JDBAR           reduce using rule 6 (element_list -> element .)
-    JDSWINGOBJECT   reduce using rule 6 (element_list -> element .)
-    JDLABEL         reduce using rule 6 (element_list -> element .)
-    JDPOLYLINE      reduce using rule 6 (element_list -> element .)
-    JDIMAGE         reduce using rule 6 (element_list -> element .)
-    JDAXIS          reduce using rule 6 (element_list -> element .)
-    JDSLIDER        reduce using rule 6 (element_list -> element .)
-
-
-state 19
-
-    (17) obj -> JDPOLYLINE .
-
-    LBRACKET        reduce using rule 17 (obj -> JDPOLYLINE .)
-
-
-state 20
-
-    (11) obj -> JDROUNDRECTANGLE .
-
-    LBRACKET        reduce using rule 11 (obj -> JDROUNDRECTANGLE .)
-
-
-state 21
-
-    (18) obj -> JDIMAGE .
-
-    LBRACKET        reduce using rule 18 (obj -> JDIMAGE .)
-
-
-state 22
-
-    (19) obj -> JDAXIS .
-
-    LBRACKET        reduce using rule 19 (obj -> JDAXIS .)
-
-
-state 23
-
-    (14) obj -> JDBAR .
-
-    LBRACKET        reduce using rule 14 (obj -> JDBAR .)
-
-
-state 24
-
-    (20) obj -> JDSLIDER .
-
-    LBRACKET        reduce using rule 20 (obj -> JDSLIDER .)
-
-
-state 25
-
-    (9) obj -> JDLINE .
-
-    LBRACKET        reduce using rule 9 (obj -> JDLINE .)
-
-
-state 26
-
-    (4) global -> GLOBAL LBRACKET parameter_list . RBRACKET
-    (21) parameter_list -> parameter_list . parameter
-    (23) parameter -> . SYMBOL TWOP param_value
-    (24) parameter -> . SYMBOL TWOP LBRACKET RBRACKET
-    (25) parameter -> . SYMBOL TWOP LBRACKET parameter_list RBRACKET
-    (26) parameter -> . SYMBOL TWOP LBRACKET element_list RBRACKET
-
-    RBRACKET        shift and go to state 33
-    SYMBOL          shift and go to state 27
-
-    parameter                      shift and go to state 34
-
-state 27
-
-    (23) parameter -> SYMBOL . TWOP param_value
-    (24) parameter -> SYMBOL . TWOP LBRACKET RBRACKET
-    (25) parameter -> SYMBOL . TWOP LBRACKET parameter_list RBRACKET
-    (26) parameter -> SYMBOL . TWOP LBRACKET element_list RBRACKET
-
-    TWOP            shift and go to state 35
-
-
-state 28
-
-    (3) global -> GLOBAL LBRACKET RBRACKET .
-
-    JDLINE          reduce using rule 3 (global -> GLOBAL LBRACKET RBRACKET .)
-    JDRECTANGLE     reduce using rule 3 (global -> GLOBAL LBRACKET RBRACKET .)
-    JDROUNDRECTANGLE reduce using rule 3 (global -> GLOBAL LBRACKET RBRACKET .)
-    JDGROUP         reduce using rule 3 (global -> GLOBAL LBRACKET RBRACKET .)
-    JDELLIPSE       reduce using rule 3 (global -> GLOBAL LBRACKET RBRACKET .)
-    JDBAR           reduce using rule 3 (global -> GLOBAL LBRACKET RBRACKET .)
-    JDSWINGOBJECT   reduce using rule 3 (global -> GLOBAL LBRACKET RBRACKET .)
-    JDLABEL         reduce using rule 3 (global -> GLOBAL LBRACKET RBRACKET .)
-    JDPOLYLINE      reduce using rule 3 (global -> GLOBAL LBRACKET RBRACKET .)
-    JDIMAGE         reduce using rule 3 (global -> GLOBAL LBRACKET RBRACKET .)
-    JDAXIS          reduce using rule 3 (global -> GLOBAL LBRACKET RBRACKET .)
-    JDSLIDER        reduce using rule 3 (global -> GLOBAL LBRACKET RBRACKET .)
-    RBRACKET        reduce using rule 3 (global -> GLOBAL LBRACKET RBRACKET .)
-
-
-state 29
-
-    (22) parameter_list -> parameter .
-
-    RBRACKET        reduce using rule 22 (parameter_list -> parameter .)
-    SYMBOL          reduce using rule 22 (parameter_list -> parameter .)
-
-
-state 30
-
-    (7) element -> obj LBRACKET . RBRACKET
-    (8) element -> obj LBRACKET . parameter_list RBRACKET
-    (21) parameter_list -> . parameter_list parameter
-    (22) parameter_list -> . parameter
-    (23) parameter -> . SYMBOL TWOP param_value
-    (24) parameter -> . SYMBOL TWOP LBRACKET RBRACKET
-    (25) parameter -> . SYMBOL TWOP LBRACKET parameter_list RBRACKET
-    (26) parameter -> . SYMBOL TWOP LBRACKET element_list RBRACKET
-
-    RBRACKET        shift and go to state 37
-    SYMBOL          shift and go to state 27
-
-    parameter                      shift and go to state 29
-    parameter_list                 shift and go to state 36
-
-state 31
-
-    (5) element_list -> element_list element .
-
-    RBRACKET        reduce using rule 5 (element_list -> element_list element .)
-    JDLINE          reduce using rule 5 (element_list -> element_list element .)
-    JDRECTANGLE     reduce using rule 5 (element_list -> element_list element .)
-    JDROUNDRECTANGLE reduce using rule 5 (element_list -> element_list element .)
-    JDGROUP         reduce using rule 5 (element_list -> element_list element .)
-    JDELLIPSE       reduce using rule 5 (element_list -> element_list element .)
-    JDBAR           reduce using rule 5 (element_list -> element_list element .)
-    JDSWINGOBJECT   reduce using rule 5 (element_list -> element_list element .)
-    JDLABEL         reduce using rule 5 (element_list -> element_list element .)
-    JDPOLYLINE      reduce using rule 5 (element_list -> element_list element .)
-    JDIMAGE         reduce using rule 5 (element_list -> element_list element .)
-    JDAXIS          reduce using rule 5 (element_list -> element_list element .)
-    JDSLIDER        reduce using rule 5 (element_list -> element_list element .)
-
-
-state 32
-
-    (1) jdfile -> JDFILE SYMBOL LBRACKET global element_list RBRACKET .
-
-    $end            reduce using rule 1 (jdfile -> JDFILE SYMBOL LBRACKET global element_list RBRACKET .)
-
-
-state 33
-
-    (4) global -> GLOBAL LBRACKET parameter_list RBRACKET .
-
-    JDLINE          reduce using rule 4 (global -> GLOBAL LBRACKET parameter_list RBRACKET .)
-    JDRECTANGLE     reduce using rule 4 (global -> GLOBAL LBRACKET parameter_list RBRACKET .)
-    JDROUNDRECTANGLE reduce using rule 4 (global -> GLOBAL LBRACKET parameter_list RBRACKET .)
-    JDGROUP         reduce using rule 4 (global -> GLOBAL LBRACKET parameter_list RBRACKET .)
-    JDELLIPSE       reduce using rule 4 (global -> GLOBAL LBRACKET parameter_list RBRACKET .)
-    JDBAR           reduce using rule 4 (global -> GLOBAL LBRACKET parameter_list RBRACKET .)
-    JDSWINGOBJECT   reduce using rule 4 (global -> GLOBAL LBRACKET parameter_list RBRACKET .)
-    JDLABEL         reduce using rule 4 (global -> GLOBAL LBRACKET parameter_list RBRACKET .)
-    JDPOLYLINE      reduce using rule 4 (global -> GLOBAL LBRACKET parameter_list RBRACKET .)
-    JDIMAGE         reduce using rule 4 (global -> GLOBAL LBRACKET parameter_list RBRACKET .)
-    JDAXIS          reduce using rule 4 (global -> GLOBAL LBRACKET parameter_list RBRACKET .)
-    JDSLIDER        reduce using rule 4 (global -> GLOBAL LBRACKET parameter_list RBRACKET .)
-    RBRACKET        reduce using rule 4 (global -> GLOBAL LBRACKET parameter_list RBRACKET .)
-
-
-state 34
-
-    (21) parameter_list -> parameter_list parameter .
-
-    RBRACKET        reduce using rule 21 (parameter_list -> parameter_list parameter .)
-    SYMBOL          reduce using rule 21 (parameter_list -> parameter_list parameter .)
-
-
-state 35
-
-    (23) parameter -> SYMBOL TWOP . param_value
-    (24) parameter -> SYMBOL TWOP . LBRACKET RBRACKET
-    (25) parameter -> SYMBOL TWOP . LBRACKET parameter_list RBRACKET
-    (26) parameter -> SYMBOL TWOP . LBRACKET element_list RBRACKET
-    (27) param_value -> . value_list
-    (28) value_list -> . value_list COMMA value
-    (29) value_list -> . value
-    (30) value -> . NUMBER
-    (31) value -> . TEXT
-    (32) value -> . true
-    (33) value -> . false
-
-    LBRACKET        shift and go to state 43
-    NUMBER          shift and go to state 41
-    TEXT            shift and go to state 40
-    true            shift and go to state 44
-    false           shift and go to state 38
-
-    value_list                     shift and go to state 39
-    param_value                    shift and go to state 45
-    value                          shift and go to state 42
-
-state 36
-
-    (8) element -> obj LBRACKET parameter_list . RBRACKET
-    (21) parameter_list -> parameter_list . parameter
-    (23) parameter -> . SYMBOL TWOP param_value
-    (24) parameter -> . SYMBOL TWOP LBRACKET RBRACKET
-    (25) parameter -> . SYMBOL TWOP LBRACKET parameter_list RBRACKET
-    (26) parameter -> . SYMBOL TWOP LBRACKET element_list RBRACKET
-
-    RBRACKET        shift and go to state 46
-    SYMBOL          shift and go to state 27
-
-    parameter                      shift and go to state 34
-
-state 37
-
-    (7) element -> obj LBRACKET RBRACKET .
-
-    RBRACKET        reduce using rule 7 (element -> obj LBRACKET RBRACKET .)
-    JDLINE          reduce using rule 7 (element -> obj LBRACKET RBRACKET .)
-    JDRECTANGLE     reduce using rule 7 (element -> obj LBRACKET RBRACKET .)
-    JDROUNDRECTANGLE reduce using rule 7 (element -> obj LBRACKET RBRACKET .)
-    JDGROUP         reduce using rule 7 (element -> obj LBRACKET RBRACKET .)
-    JDELLIPSE       reduce using rule 7 (element -> obj LBRACKET RBRACKET .)
-    JDBAR           reduce using rule 7 (element -> obj LBRACKET RBRACKET .)
-    JDSWINGOBJECT   reduce using rule 7 (element -> obj LBRACKET RBRACKET .)
-    JDLABEL         reduce using rule 7 (element -> obj LBRACKET RBRACKET .)
-    JDPOLYLINE      reduce using rule 7 (element -> obj LBRACKET RBRACKET .)
-    JDIMAGE         reduce using rule 7 (element -> obj LBRACKET RBRACKET .)
-    JDAXIS          reduce using rule 7 (element -> obj LBRACKET RBRACKET .)
-    JDSLIDER        reduce using rule 7 (element -> obj LBRACKET RBRACKET .)
-
-
-state 38
-
-    (33) value -> false .
-
-    COMMA           reduce using rule 33 (value -> false .)
-    RBRACKET        reduce using rule 33 (value -> false .)
-    SYMBOL          reduce using rule 33 (value -> false .)
-
-
-state 39
-
-    (27) param_value -> value_list .
-    (28) value_list -> value_list . COMMA value
-
-    RBRACKET        reduce using rule 27 (param_value -> value_list .)
-    SYMBOL          reduce using rule 27 (param_value -> value_list .)
-    COMMA           shift and go to state 47
-
-
-state 40
-
-    (31) value -> TEXT .
-
-    COMMA           reduce using rule 31 (value -> TEXT .)
-    RBRACKET        reduce using rule 31 (value -> TEXT .)
-    SYMBOL          reduce using rule 31 (value -> TEXT .)
-
-
-state 41
-
-    (30) value -> NUMBER .
-
-    COMMA           reduce using rule 30 (value -> NUMBER .)
-    RBRACKET        reduce using rule 30 (value -> NUMBER .)
-    SYMBOL          reduce using rule 30 (value -> NUMBER .)
-
-
-state 42
-
-    (29) value_list -> value .
-
-    COMMA           reduce using rule 29 (value_list -> value .)
-    RBRACKET        reduce using rule 29 (value_list -> value .)
-    SYMBOL          reduce using rule 29 (value_list -> value .)
-
-
-state 43
-
-    (24) parameter -> SYMBOL TWOP LBRACKET . RBRACKET
-    (25) parameter -> SYMBOL TWOP LBRACKET . parameter_list RBRACKET
-    (26) parameter -> SYMBOL TWOP LBRACKET . element_list RBRACKET
-    (21) parameter_list -> . parameter_list parameter
-    (22) parameter_list -> . parameter
-    (5) element_list -> . element_list element
-    (6) element_list -> . element
-    (23) parameter -> . SYMBOL TWOP param_value
-    (24) parameter -> . SYMBOL TWOP LBRACKET RBRACKET
-    (25) parameter -> . SYMBOL TWOP LBRACKET parameter_list RBRACKET
-    (26) parameter -> . SYMBOL TWOP LBRACKET element_list RBRACKET
-    (7) element -> . obj LBRACKET RBRACKET
-    (8) element -> . obj LBRACKET parameter_list RBRACKET
-    (9) obj -> . JDLINE
-    (10) obj -> . JDRECTANGLE
-    (11) obj -> . JDROUNDRECTANGLE
-    (12) obj -> . JDGROUP
-    (13) obj -> . JDELLIPSE
-    (14) obj -> . JDBAR
-    (15) obj -> . JDSWINGOBJECT
-    (16) obj -> . JDLABEL
-    (17) obj -> . JDPOLYLINE
-    (18) obj -> . JDIMAGE
-    (19) obj -> . JDAXIS
-    (20) obj -> . JDSLIDER
-
-    RBRACKET        shift and go to state 50
-    SYMBOL          shift and go to state 27
-    JDLINE          shift and go to state 25
-    JDRECTANGLE     shift and go to state 13
-    JDROUNDRECTANGLE shift and go to state 20
-    JDGROUP         shift and go to state 16
-    JDELLIPSE       shift and go to state 17
-    JDBAR           shift and go to state 23
-    JDSWINGOBJECT   shift and go to state 15
-    JDLABEL         shift and go to state 11
-    JDPOLYLINE      shift and go to state 19
-    JDIMAGE         shift and go to state 21
-    JDAXIS          shift and go to state 22
-    JDSLIDER        shift and go to state 24
-
-    obj                            shift and go to state 12
-    parameter_list                 shift and go to state 49
-    element_list                   shift and go to state 48
-    element                        shift and go to state 18
-    parameter                      shift and go to state 29
-
-state 44
-
-    (32) value -> true .
-
-    COMMA           reduce using rule 32 (value -> true .)
-    RBRACKET        reduce using rule 32 (value -> true .)
-    SYMBOL          reduce using rule 32 (value -> true .)
-
-
-state 45
-
-    (23) parameter -> SYMBOL TWOP param_value .
-
-    RBRACKET        reduce using rule 23 (parameter -> SYMBOL TWOP param_value .)
-    SYMBOL          reduce using rule 23 (parameter -> SYMBOL TWOP param_value .)
-
-
-state 46
-
-    (8) element -> obj LBRACKET parameter_list RBRACKET .
-
-    RBRACKET        reduce using rule 8 (element -> obj LBRACKET parameter_list RBRACKET .)
-    JDLINE          reduce using rule 8 (element -> obj LBRACKET parameter_list RBRACKET .)
-    JDRECTANGLE     reduce using rule 8 (element -> obj LBRACKET parameter_list RBRACKET .)
-    JDROUNDRECTANGLE reduce using rule 8 (element -> obj LBRACKET parameter_list RBRACKET .)
-    JDGROUP         reduce using rule 8 (element -> obj LBRACKET parameter_list RBRACKET .)
-    JDELLIPSE       reduce using rule 8 (element -> obj LBRACKET parameter_list RBRACKET .)
-    JDBAR           reduce using rule 8 (element -> obj LBRACKET parameter_list RBRACKET .)
-    JDSWINGOBJECT   reduce using rule 8 (element -> obj LBRACKET parameter_list RBRACKET .)
-    JDLABEL         reduce using rule 8 (element -> obj LBRACKET parameter_list RBRACKET .)
-    JDPOLYLINE      reduce using rule 8 (element -> obj LBRACKET parameter_list RBRACKET .)
-    JDIMAGE         reduce using rule 8 (element -> obj LBRACKET parameter_list RBRACKET .)
-    JDAXIS          reduce using rule 8 (element -> obj LBRACKET parameter_list RBRACKET .)
-    JDSLIDER        reduce using rule 8 (element -> obj LBRACKET parameter_list RBRACKET .)
-
-
-state 47
-
-    (28) value_list -> value_list COMMA . value
-    (30) value -> . NUMBER
-    (31) value -> . TEXT
-    (32) value -> . true
-    (33) value -> . false
-
-    NUMBER          shift and go to state 41
-    TEXT            shift and go to state 40
-    true            shift and go to state 44
-    false           shift and go to state 38
-
-    value                          shift and go to state 51
-
-state 48
-
-    (26) parameter -> SYMBOL TWOP LBRACKET element_list . RBRACKET
-    (5) element_list -> element_list . element
-    (7) element -> . obj LBRACKET RBRACKET
-    (8) element -> . obj LBRACKET parameter_list RBRACKET
-    (9) obj -> . JDLINE
-    (10) obj -> . JDRECTANGLE
-    (11) obj -> . JDROUNDRECTANGLE
-    (12) obj -> . JDGROUP
-    (13) obj -> . JDELLIPSE
-    (14) obj -> . JDBAR
-    (15) obj -> . JDSWINGOBJECT
-    (16) obj -> . JDLABEL
-    (17) obj -> . JDPOLYLINE
-    (18) obj -> . JDIMAGE
-    (19) obj -> . JDAXIS
-    (20) obj -> . JDSLIDER
-
-    RBRACKET        shift and go to state 52
-    JDLINE          shift and go to state 25
-    JDRECTANGLE     shift and go to state 13
-    JDROUNDRECTANGLE shift and go to state 20
-    JDGROUP         shift and go to state 16
-    JDELLIPSE       shift and go to state 17
-    JDBAR           shift and go to state 23
-    JDSWINGOBJECT   shift and go to state 15
-    JDLABEL         shift and go to state 11
-    JDPOLYLINE      shift and go to state 19
-    JDIMAGE         shift and go to state 21
-    JDAXIS          shift and go to state 22
-    JDSLIDER        shift and go to state 24
-
-    element                        shift and go to state 31
-    obj                            shift and go to state 12
-
-state 49
-
-    (25) parameter -> SYMBOL TWOP LBRACKET parameter_list . RBRACKET
-    (21) parameter_list -> parameter_list . parameter
-    (23) parameter -> . SYMBOL TWOP param_value
-    (24) parameter -> . SYMBOL TWOP LBRACKET RBRACKET
-    (25) parameter -> . SYMBOL TWOP LBRACKET parameter_list RBRACKET
-    (26) parameter -> . SYMBOL TWOP LBRACKET element_list RBRACKET
-
-    RBRACKET        shift and go to state 53
-    SYMBOL          shift and go to state 27
-
-    parameter                      shift and go to state 34
-
-state 50
-
-    (24) parameter -> SYMBOL TWOP LBRACKET RBRACKET .
-
-    RBRACKET        reduce using rule 24 (parameter -> SYMBOL TWOP LBRACKET RBRACKET .)
-    SYMBOL          reduce using rule 24 (parameter -> SYMBOL TWOP LBRACKET RBRACKET .)
-
-
-state 51
-
-    (28) value_list -> value_list COMMA value .
-
-    COMMA           reduce using rule 28 (value_list -> value_list COMMA value .)
-    RBRACKET        reduce using rule 28 (value_list -> value_list COMMA value .)
-    SYMBOL          reduce using rule 28 (value_list -> value_list COMMA value .)
-
-
-state 52
-
-    (26) parameter -> SYMBOL TWOP LBRACKET element_list RBRACKET .
-
-    RBRACKET        reduce using rule 26 (parameter -> SYMBOL TWOP LBRACKET element_list RBRACKET .)
-    SYMBOL          reduce using rule 26 (parameter -> SYMBOL TWOP LBRACKET element_list RBRACKET .)
-
-
-state 53
-
-    (25) parameter -> SYMBOL TWOP LBRACKET parameter_list RBRACKET .
-
-    RBRACKET        reduce using rule 25 (parameter -> SYMBOL TWOP LBRACKET parameter_list RBRACKET .)
-    SYMBOL          reduce using rule 25 (parameter -> SYMBOL TWOP LBRACKET parameter_list RBRACKET .)
-
diff --git a/lib/taurus/qt/qtgui/taurusgui/parsetab.py b/lib/taurus/qt/qtgui/taurusgui/parsetab.py
deleted file mode 100644
index ea20a8e..0000000
--- a/lib/taurus/qt/qtgui/taurusgui/parsetab.py
+++ /dev/null
@@ -1,62 +0,0 @@
-
-# parsetab.py
-# This file is automatically generated. Do not edit.
-_tabversion = '3.2'
-
-_lr_method = 'LALR'
-
-_lr_signature = '-*\xa7\x0e\xa8C\x08P\xa5\xbd\x02\x8e\x8d\xdc{\x85'
-    
-_lr_action_items = {'false':([35,47,],[38,38,]),'JDSWINGOBJECT':([8,14,18,28,31,33,37,43,46,48,],[15,15,-6,-3,-5,-4,-7,15,-8,15,]),'TEXT':([35,47,],[40,40,]),'SYMBOL':([2,10,26,29,30,34,36,38,39,40,41,42,43,44,45,49,50,51,52,53,],[3,27,27,-22,27,-21,27,-33,-27,-31,-30,-29,27,-32,-23,27,-24,-28,-26,-25,]),'GLOBAL':([4,5,],[7,7,]),'JDELLIPSE':([8,14,18,28,31,33,37,43,46,48,],[17,17,-6,-3,-5,-4,-7,17,-8,17,]),'LBRACKET':([2,3,7,11,12,13,15,16,17,19,20,21,22,23,24,25,35,],[4,5,10,-16,30,-10, [...]
-
-_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,14,43,48,],[12,12,12,12,]),'parameter_list':([10,30,43,],[26,36,49,]),'element_list':([8,43,],[14,48,]),'value_list':([35,],[39,]),'global':([4,5,],[6,8,]),'value':([35,47,],[42,51,]),'element':([8,14,43,48,],[18,31,18,31,]),'param_value':([35,],[45,]),'parameter':([10,26,30,36,43,49,],[29,34,29,34,29,34,]),'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/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',106),
-  ('jdfile -> JDFILE LBRACKET global RBRACKET','jdfile',4,'p_jdfile_empty','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',114),
-  ('global -> GLOBAL LBRACKET RBRACKET','global',3,'p_global','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',122),
-  ('global -> GLOBAL LBRACKET parameter_list RBRACKET','global',4,'p_global','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',123),
-  ('element_list -> element_list element','element_list',2,'p_element_list','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',130),
-  ('element_list -> element','element_list',1,'p_element','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',137),
-  ('element -> obj LBRACKET RBRACKET','element',3,'p_single_element','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',141),
-  ('element -> obj LBRACKET parameter_list RBRACKET','element',4,'p_single_element','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',142),
-  ('obj -> JDLINE','obj',1,'p_obj','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',186),
-  ('obj -> JDRECTANGLE','obj',1,'p_obj','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',187),
-  ('obj -> JDROUNDRECTANGLE','obj',1,'p_obj','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',188),
-  ('obj -> JDGROUP','obj',1,'p_obj','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',189),
-  ('obj -> JDELLIPSE','obj',1,'p_obj','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',190),
-  ('obj -> JDBAR','obj',1,'p_obj','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',191),
-  ('obj -> JDSWINGOBJECT','obj',1,'p_obj','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',192),
-  ('obj -> JDLABEL','obj',1,'p_obj','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',193),
-  ('obj -> JDPOLYLINE','obj',1,'p_obj','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',194),
-  ('obj -> JDIMAGE','obj',1,'p_obj','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',195),
-  ('obj -> JDAXIS','obj',1,'p_obj','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',196),
-  ('obj -> JDSLIDER','obj',1,'p_obj','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',197),
-  ('parameter_list -> parameter_list parameter','parameter_list',2,'p_parameter_list','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',201),
-  ('parameter_list -> parameter','parameter_list',1,'p_parameter','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',206),
-  ('parameter -> SYMBOL TWOP param_value','parameter',3,'p_single_parameter','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',210),
-  ('parameter -> SYMBOL TWOP LBRACKET RBRACKET','parameter',4,'p_complex_parameter','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',219),
-  ('parameter -> SYMBOL TWOP LBRACKET parameter_list RBRACKET','parameter',5,'p_complex_parameter','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',220),
-  ('parameter -> SYMBOL TWOP LBRACKET element_list RBRACKET','parameter',5,'p_complex_parameter','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',221),
-  ('param_value -> value_list','param_value',1,'p_param_value_number_list','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',229),
-  ('value_list -> value_list COMMA value','value_list',3,'p_value_list','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',236),
-  ('value_list -> value','value_list',1,'p_value_list_value','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',240),
-  ('value -> NUMBER','value',1,'p_value_number','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',244),
-  ('value -> TEXT','value',1,'p_value_text','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',248),
-  ('value -> true','value',1,'p_value_bool','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',252),
-  ('value -> false','value',1,'p_value_bool','/home/tcoutinho/workspace/taurus/lib/taurus/qt/qtgui/graphic/jdraw/jdraw_parser.py',253),
-]
diff --git a/lib/taurus/qt/qtgui/taurusgui/taurusgui.py b/lib/taurus/qt/qtgui/taurusgui/taurusgui.py
index e99f55d..fbe1863 100644
--- a/lib/taurus/qt/qtgui/taurusgui/taurusgui.py
+++ b/lib/taurus/qt/qtgui/taurusgui/taurusgui.py
@@ -25,33 +25,91 @@
 
 """This package provides the TaurusGui class"""
 
+__all__=["DockWidgetPanel", "TaurusGui"]
+
 __docformat__ = 'restructuredtext'
 
 
 import os, sys
 import weakref, inspect, copy
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 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.plot import TaurusTrend, TaurusMonitorTiny
 from taurus.qt.qtgui.input import GraphicalChoiceDlg
 
 try:
-    from taurus.qt.qtgui.extra_pool import PoolMotorSlim, PoolChannel
+    from taurus.qt.qtgui.extra_pool import PoolMotorSlim, IORegisterTV, PoolChannelTV
     HAS_EXTRA_POOL = True
 except ImportError:
     HAS_EXTRA_POOL = False
 
-from taurus.qt.qtgui.taurusgui.utils import PanelDescription, ExternalApp
+from taurus.qt.qtgui.taurusgui.utils import ExternalApp, PanelDescription, ToolBarDescription, AppletDescription
 from PermanentCustomPanelsDlg import PermanentCustomPanelsDlg
 import taurus.qt.qtgui.resource
 from taurus.core.util import etree
 
 
+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
+        Qt.QDialog.__init__(self, parent, flags)
+        
+        from ui.ui_PanelAssociationsDlg import Ui_PanelAssociationsDlg
+        self.ui = Ui_PanelAssociationsDlg()
+        self.ui.setupUi(self)
+        
+        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()
+        currentinstrumentIdx= self.ui.instrumentCB.currentIndex()
+        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())
+        
+        #restore the index
+        idx = self.ui.instrumentCB.findText(currentinstrument)
+        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)
+        if panelname is None:
+            self.ui.panelCB.setCurrentIndex(0)
+            return
+        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 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)
+        
+
 class DockWidgetPanel(Qt.QDockWidget, TaurusBaseWidget):
     '''
     This is an extended QDockWidget which provides some methods for being used
@@ -62,8 +120,10 @@ class DockWidgetPanel(Qt.QDockWidget, TaurusBaseWidget):
         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
+        #self._widget = self.widget()  #keep a pointer that may change if the widget changes
         name = unicode(name)
         self.setWindowTitle(name)
         self.setObjectName(name)
@@ -71,19 +131,6 @@ class DockWidgetPanel(Qt.QDockWidget, TaurusBaseWidget):
         
         #store a weakref of the main window
         self._mainwindow =  weakref.proxy(mainwindow)
-        
-        #create and connect the toggleViewAction associated with this panel
-        self.connect(self,Qt.SIGNAL('visibilityChanged(bool)'), self.onVisibilityChanged)
-    
-    def onVisibilityChanged(self, visible):
-        if visible:
-            self.onSelected()
-            
-    def onSelected(self):
-        self.debug('panel "%s" selected'%unicode(self.objectName()))
-        w = self.widget()
-        if w is not None:
-            w.emit(Qt.SIGNAL("panelSelected"), unicode(self.objectName()))
     
     def isCustom(self):
         return self._custom
@@ -131,8 +178,7 @@ class DockWidgetPanel(Qt.QDockWidget, TaurusBaseWidget):
         if isinstance(self.widget(),BaseConfigurableClass):
             configdict['widget'] = self.widget().createConfig()
         return configdict
-
-
+    
 
 class TaurusGui(TaurusMainWindow):
     '''
@@ -149,28 +195,23 @@ class TaurusGui(TaurusMainWindow):
         be added in the near future.
     '''
     
-    def __init__(self, parent=None, confname=None, xmlconffile=None):
+    IMPLICIT_ASSOCIATION = '__[IMPLICIT]__'
+    
+    def __init__(self, parent=None, confname=None):
         TaurusMainWindow.__init__(self, parent, False, True)
         
         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')
         
-        if HAS_EXTRA_POOL:
-            self.info('extra_pool available: using PoolMotorSlim and PoolChannel widgets')
-            self._customWidgetMap ={'SimuMotor':PoolMotorSlim,
-                                    'Motor':PoolMotorSlim,
-                                    'PseudoMotor':PoolMotorSlim,
-                                    'PseudoCounter':PoolChannel,
-                                    'CTExpChannel':PoolChannel,
-                                    'ZeroDExpChannel':PoolChannel,
-                                    'OneDExpChannel':PoolChannel,
-                                    'TwoDExpChannel':PoolChannel}
-        else:
-            self.info('extra_pool not available: using generic widgets for motors and channels')
+        from taurus.TaurusCustomSettings import T_FORM_CUSTOM_WIDGET_MAP
+        self.setCustomWidgetMap(T_FORM_CUSTOM_WIDGET_MAP)
         
         #Create a global SharedDataManager
         Qt.qApp.SDM =  SharedDataManager(self)
@@ -182,15 +223,26 @@ class TaurusGui(TaurusMainWindow):
         self.__initSharedDataConnections()
         self.__initToolsMenu()
                 
-        if confname is not None:
-            self.loadConfiguration(confname)
-        if xmlconffile is not None:            
-            self.loadXmlConfigurationFile(xmlconffile)
+        self.loadConfiguration(confname)
         
-        self.updatePerspectivesMenu()
         self.splashScreen().finish(self)
-        self.statusBar().showMessage('%s is ready'%Qt.qApp.applicationName())
-            
+        
+        #connect the main window itself as a reader/writer of "short messages"
+        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()
+        self.emit(Qt.SIGNAL('newShortMessage'), msg)
+        
+    def closeEvent(self, event):
+        try:
+            self.__macroBroker.removeTemporaryPanels()
+        except:
+            print 'nooop'
+            raise
+        TaurusMainWindow.closeEvent(self,event)
+        
     def __initViewMenu(self):        
         #Panels view menu
         self.__panelsMenu =  Qt.QMenu('Panels',self)
@@ -200,13 +252,9 @@ class TaurusGui(TaurusMainWindow):
         self.viewMenu.addSeparator()
         self.viewMenu.addMenu(self.__panelsMenu)
         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.addSeparator()
-        #Perspectives
-        self.viewMenu.addSeparator()
-#        self.viewMenu.addAction(self.loadPerspectiveAction)
-        self.viewMenu.addMenu(self.perspectivesMenu)
-        self.viewMenu.addAction(self.savePerspectiveAction)
-        
+      
         #view locking
         self.viewMenu.addSeparator()
         self._lockviewAction = Qt.QAction(taurus.qt.qtgui.resource.getThemeIcon("system-lock-screen"),"Lock View", self)
@@ -214,8 +262,7 @@ class TaurusGui(TaurusMainWindow):
         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  
         self.panelsToolBar = self.addToolBar("Panels")
@@ -237,106 +284,45 @@ class TaurusGui(TaurusMainWindow):
         self.jorgsBar.setIconSize(Qt.QSize(60,60))
         self.jorgsBar.setMovable(False)
         
-    def createMacroInfrastructure(self, msname='', doorname='', meditpath=''):
-        '''
-        Put here code for initializing infrastructure needed for macro execution 
-        '''
-        from taurus.qt.qtgui.extra_macroexecutor import TaurusMacroExecutorWidget, TaurusSequencerWidget, TaurusMacroConfigurationDialog, \
-                                                     TaurusMacroDescriptionViewer, DoorOutput, DoorDebug, DoorResult
-        from taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.macroparameterseditor import ParamEditorManager
-        
-        #Create macroconfiguration dialog & action
-        self.splashScreen().showMessage("setting up Macro config dialog")
-        self.__macroConfigurationDialog = TaurusMacroConfigurationDialog(self)
-        self.macroConfigurationAction = self.taurusMenu.addAction(taurus.qt.qtgui.resource.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')
-        
-        #put a Macro Executor
-        self.splashScreen().showMessage('setting up macro-related components')
-        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")
-        self.createPanel(self.__macroExecutor, 'Macros', Qt.Qt.TopDockWidgetArea, registerconfig=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")
-        self.createPanel(self.__sequencer, 'Sequences', Qt.Qt.TopDockWidgetArea, registerconfig=True)
-        
-        #puts a macrodescriptionviewer
-        self.__macroDescriptionViewer = TaurusMacroDescriptionViewer(self)
-        Qt.qApp.SDM.connectReader("macroserverName", self.__macroDescriptionViewer.setModel)
-        Qt.qApp.SDM.connectReader("macroName", self.__macroDescriptionViewer.onMacroNameChanged)
-        self.createPanel(self.__macroDescriptionViewer, 'MacroDescription', Qt.Qt.BottomDockWidgetArea, registerconfig=True)
-        
-        #puts a doorOutput
-        self.__doorOutput = DoorOutput(self)
-        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)
-        self.createPanel(self.__doorOutput, 'DoorOutput', Qt.Qt.BottomDockWidgetArea, registerconfig=False)
-        
-        #puts doorDebug
-        self.__doorDebug = DoorDebug(self)
-        Qt.qApp.SDM.connectReader("doorDebugChanged", self.__doorDebug.onDoorDebugChanged)
-        self.createPanel(self.__doorDebug, 'DoorDebug', Qt.Qt.BottomDockWidgetArea, registerconfig=False)
-        
-        #puts doorResult
-        self.__doorResult = DoorResult(self)
-        Qt.qApp.SDM.connectReader("doorResultChanged", self.__doorResult.onDoorResultChanged)
-        self.createPanel(self.__doorResult, 'DoorResult', Qt.Qt.BottomDockWidgetArea, registerconfig=False)
-        
-        #puts a TaurusTrend connected to the door for showing scan trends
-        self.__scanTrend = TaurusTrend()
-        self.__scanTrend.setXIsTime(False)
-        self.__scanTrend.setScansAutoClear(False)
-        Qt.qApp.SDM.connectReader("doorName", self.__scanTrend.setScanDoor)
-        Qt.qApp.SDM.connectReader("plotablesFilter", self.__scanTrend.onScanPlotablesFilterChanged)
-        self.createPanel(self.__scanTrend, '1D Scans', Qt.Qt.RightDockWidgetArea, registerconfig=True)
-        
-        #The app-wide door
-        self.__qdoor = None
-        
-        #connect to macroserver and door if given
-        if msname: self.emit(Qt.SIGNAL("macroserverNameChanged"), msname)
-        if doorname: self.emit(Qt.SIGNAL("doorNameChanged"), doorname)
-        if meditpath:
-            ParamEditorManager().parsePaths(meditpath)
-            ParamEditorManager().browsePaths()
-        
     def __initSharedDataConnections(self):        
         #register the TAURUSGUI itself as a writer/reader for several shared data items
         self.splashScreen().showMessage("setting up shared data connections")
         Qt.qApp.SDM.connectWriter("macroserverName", self, 'macroserverNameChanged')
         Qt.qApp.SDM.connectWriter("doorName", self, 'doorNameChanged')
-        Qt.qApp.SDM.connectReader("doorName", self.onDoorNameChanged)
-        Qt.qApp.SDM.connectReader("SelectedInstrument", self.setFocusToPanel)
+        Qt.qApp.SDM.connectReader("SelectedInstrument", self.onSelectedInstrument)
+        Qt.qApp.SDM.connectWriter("SelectedInstrument", self, 'SelectedInstrument')
         Qt.qApp.SDM.connectReader("executionStarted", self.setFocusToPanel)
 
     def __initToolsMenu(self):
         if self.toolsMenu is None:
             self.toolsMenu = Qt.QMenu("Tools")
-        
         self.toolsMenu.addAction(taurus.qt.qtgui.resource.getThemeIcon("preferences-desktop-personal"),"select panel Configuration", self.updatePermanentCustomPanels)
+        self.toolsMenu.addAction(taurus.qt.qtgui.resource.getIcon(":/apps/preferences-system-session.svg"),"manage instrument-panel associations", self.onShowAssociationDialog)
         
     def setCustomWidgetMap(self, map):
+        '''
+        Sets the widget map that is used application-wide. This widget map will
+        be used by default in all TaurusForm Panels belonging to this gui.
+        
+        :param map: (dict<str,Qt.QWidget>) a dictionary whose keys are device
+                    type strings (e.g. see :class:`PyTango.DeviceInfo`) and
+                    whose values are widgets to be used
+                    
+        .. seealso:: :meth:`TaurusForm.setCustomWidgetMap`, :meth:`getCustomWidgetMap`
+        '''
         self._customWidgetMap = map
         
     def getCustomWidgetMap(self):
+        '''
+        Returns the default map used to create custom widgets by the TaurusForms
+        belonging to this GUI
+        
+        :return: (dict<str,Qt.QWidget>) a dictionary whose keys are device
+                 type strings (i.e. see :class:`PyTango.DeviceInfo`) and whose
+                 values are widgets to be used
+        
+        .. seealso:: :meth:`setCustomWidgetMap`
+        '''
         return self._customWidgetMap   
        
     def createConfig(self, *args, **kwargs):
@@ -344,55 +330,87 @@ class TaurusGui(TaurusMainWindow):
         self.updatePermanentCustomPanels(showAlways=False)
         return TaurusMainWindow.createConfig(self, *args, **kwargs)        
  
-    def removePanel(self, name):
+    def removePanel(self, name=None):
         ''' remove the given panel from the GUI
         
-        :param name: (str) the name of the panel to be removed'''
+        :param name: (str or None) the name of the panel to be removed
+                     If None given, the user will be prompted
+        '''
+        if name is None:
+            items = self.getPanelNames()
+            name,ok = Qt.QInputDialog.getItem (self, "Remove Panel", "Panel to be removed", items, 0, False)
+            if not ok:
+                return
         name = unicode(name)
         if name not in self.__panels: return
         panel = self.__panels.pop(name)
         self.__panelsMenu.removeAction(panel.toggleViewAction())
         self.unregisterConfigurableItem(name, raiseOnError=False)
+        self.removeDockWidget(panel)
         panel.setParent(None)
-        panel.destroy()
-    
-    def createPanel(self, widget, name, area, registerconfig=True, custom=False, permanent=False):
+        panel.setAttribute(Qt.Qt.WA_DeleteOnClose)
+        panel.close()
+        
+    def createPanel(self, widget, name, floating=False, registerconfig=True, custom=False, 
+                    permanent=False, icon=None, instrumentkey=None):
         '''
-        Creates a panel in the given area containing the given widget.
+        Creates a panel containing the given widget.
         
         :param wiget: (QWidget) the widget to be contained in the panel
         :param name: (str) the name of the panel. It will be used in tabs as well as for configuration
-        :param area: (QDockWidgetArea or None) the area in which the panel is to be created. If None, The TopDockWidgetArea will be used and the panel will be floating
+        :param floating: (bool) whether the panel should be docked or floating. (see note below)
         :param registerconfig: (bool) if True, the panel will be registered as a delegate for configuration
         :param custom: (bool) if True the panel is to be considered a "custom panel"
-        :param permanent: (bool) set this to True for custom panels that need to be recreated when restoring the app  
+        :param permanent: (bool) set this to True for custom panels that need to be recreated when restoring the app 
+        :param icon: (QIcon) icon for the panel  
+        :param instrumentkey: (str) name of an instrument to which this panel is to be associated
         
         :return: (DockWidgetPanel) the created panel
-         
+        
+        .. note:: On a previous version, there was a mandatory parameter called
+                  `area` (which accepted a Qt.DockWidgetArea or None as values)
+                  this parameter has now been substituted by the keyword
+                  argument `floating`. In order to provide backwards
+                  compatibility, the "floating" keyword argument stays at the
+                  same position as the old `area` argument and if a Qt.DockWidgetArea
+                  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]  
         
-        if area is None:
-            area = Qt.Qt.RightDockWidgetArea
-            floating = True
-        else: 
-            floating = False
-        
         # create a panel
-        otherpanels = self.findPanelsInArea(area)
         panel = DockWidgetPanel(None, widget, name, self)
-        if len(otherpanels)== 0:
-            self.addDockWidget(area, panel)
+        if len(self.__panels)== 0:
+            self.addDockWidget(Qt.Qt.TopDockWidgetArea, panel) #we will only place panels in this area
         else:
-            self.tabifyDockWidget(otherpanels[-1], panel)
+            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:
+                #see if there is an item whose name is the same as that of the panel
+                for syn in self.__synoptics:
+                    if name in syn.get_item_list():
+                        self.setInstrumentAssociation(name, name)
+                        break
+            else:
+                self.setInstrumentAssociation(instrumentkey, name)
+        
         #add toggle view action for this panel to the panels menu  
         self.__panelsMenu.addAction(panel.toggleViewAction())
+        if icon is not None:
+            panel.toggleViewAction().setIcon(icon)
         
         #set flags
         panel.setCustom(custom)
@@ -402,12 +420,19 @@ class TaurusGui(TaurusMainWindow):
         if registerconfig: 
             self.registerConfigDelegate(panel, name=name)
         self.__panels[name] = panel
-            
-#        #connect the "relocationRequested" signal
-#        self.connect(panel, Qt.SIGNAL('relocationRequested'), self.movePanel)
-        return panel
+        
+        #connect the panel visibility changes
+        self.connect(panel,Qt.SIGNAL('visibilityChanged(bool)'),self._onPanelVisibilityChanged)
 
-   
+        return panel
+    
+    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
         
@@ -423,7 +448,7 @@ class TaurusGui(TaurusMainWindow):
         #first create the panels if they don't actually exist
         for name in permCustomPanels:
             if name not in self.__panels:
-                self.createPanel(None, name, None, custom=True, permanent=True) #at this point we still don't know where to put the widget... 
+                self.createPanel(None, name, custom=True, permanent=True) 
         
     def _getPermanentCustomPanels(self):
         ''' 
@@ -464,7 +489,7 @@ class TaurusGui(TaurusMainWindow):
             
     def createCustomPanel(self, paneldesc=None):
         '''
-        Creates a panel which can be filled with a widget.
+        Creates a panel from a Panel Description and sets it as "custom panel".
         
         :param paneldesc: (PanelDescription) description of the panel to be created
                      
@@ -485,9 +510,9 @@ class TaurusGui(TaurusMainWindow):
             w.setModifiableByUser(True)
             w.setModelInConfig(True)
         
-
-        self.createPanel(w, paneldesc.name, paneldesc.area, custom=True, registerconfig=False)
-        self.statusBar().showMessage('Panel %s created. Drag items to it or use the context menu to customize it'%w.name)
+        self.createPanel(w, paneldesc.name, floating=paneldesc.floating, custom=True, registerconfig=False, instrumentkey=paneldesc.instrumentkey)
+        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):
         '''
@@ -522,9 +547,8 @@ class TaurusGui(TaurusMainWindow):
             name = '%s_%i'%(prefix, i)
             i+=1
             
-        synopticpanel = self.createPanel(synoptic, name, Qt.Qt.BottomDockWidgetArea)
+        synopticpanel = self.createPanel(synoptic, name, icon=taurus.qt.qtgui.resource.getThemeIcon('image-x-generic'))
         toggleSynopticAction = synopticpanel.toggleViewAction()
-        toggleSynopticAction.setIcon(taurus.qt.qtgui.resource.getThemeIcon('image-x-generic'))
         self.quickAccessToolBar.addAction(toggleSynopticAction)
                 
     def createInstrumentsFromPool(self, macroservername):
@@ -548,12 +572,14 @@ class TaurusGui(TaurusMainWindow):
             return []
         for i in instruments:
             i_name, i_unknown, i_type, i_pools = i.split()
-            i_view = PanelDescription(i_name,classname='TaurusForm', area=Qt.Qt.LeftDockWidgetArea, model=[])
+            i_view = PanelDescription(i_name,classname='TaurusForm', floating=False, model=[])
             instrument_dict[i_name] = i_view
         
-        motors = ms.getElementNamesOfType('Motor')
-        channels = ms.getElementNamesOfType('ExpChannel')
-        pool_elements = motors + channels
+        motors = sorted(ms.getElementNamesOfType('Motor'))
+        channels = sorted(ms.getElementNamesOfType('ExpChannel'))
+        ioregisters = sorted(ms.getElementNamesOfType('IORegister'))
+        
+        pool_elements = motors + channels + ioregisters
         for e_name in pool_elements:
             e = taurus.Device(e_name)
             instrument = e['Instrument'].value
@@ -563,8 +589,7 @@ class TaurusGui(TaurusMainWindow):
                 instrument_dict[i_name].model.append(e_name)
                 
         return instrument_dict.values()
-    
-    
+      
     def __getVarFromXML(self, root, nodename, default=None):
         name = root.find(nodename)
         if name is None or name.text is None:
@@ -572,230 +597,157 @@ class TaurusGui(TaurusMainWindow):
         else:
             return name.text
     
-    def loadXmlConfigurationFile(self, fname=None):    
-        if (fname is None) or len(fname)==0:
-            fname = Qt.QFileDialog.getOpenFileName(self, self.tr("Open File"),Qt.QDir.homePath(), self.tr("XML (*.xml); All files (*.*)" ))
-            if fname is None:
-                sys.exit(1)
-            else:
-                fname=unicode(fname)        
-        try:
-            xmlFile = open(fname, 'r')
-            xml = xmlFile.read()
-            xmlFile.close()
-            self._confDirectory = os.path.dirname(fname)
-            self._confFileName = os.path.basename(fname)
-        except Exception, e:
-            msg = 'Cannot read the file: "%s"' % fname
-            self.error(msg)
-            self.traceback(level=taurus.Info)
-            fname =None
-            result = Qt.QMessageBox.critical(self,'Initialization error', '%s\nReason:"%s"'% (msg,repr(e)), Qt.QMessageBox.Abort)
-            sys.exit()
-            
-        self.loadXmlConfiguration(xml)
-    
-
-    
-    def loadXmlConfiguration(self, xml):
-        #
-        try:
-            root = etree.fromstring(xml)
-        except:
-            msg = 'XML Syntax Error'
-            self.error(msg)
-            self.traceback(level=taurus.Info)
-            Qt.QMessageBox.critical(self,'Initialization error', msg, Qt.QMessageBox.Abort)
-            sys.exit()
-            
-        APPNAME = self.__getVarFromXML(root,"GUI_NAME", None)
-        if APPNAME is None:
-            msg = 'Could not find the GUI_NAME'
-            self.error(msg)
-            Qt.QMessageBox.critical(self,'Initialization error', msg, Qt.QMessageBox.Abort)
-            sys.exit()
-       
-        ORGNAME = self.__getVarFromXML(root,"ORGANIZATION", 'Taurus')
-        CUSTOMLOGO = self.__getVarFromXML(root,"CUSTOM_LOGO", ':/taurus.png')
-        
-        Qt.qApp.setApplicationName(APPNAME)
-        Qt.qApp.setOrganizationName(ORGNAME)
-        self.resetQSettings()
-        
-        self.setWindowTitle(APPNAME)
-        windowIcon = taurus.qt.qtgui.resource.getIcon(CUSTOMLOGO)
-        self.setWindowIcon(windowIcon)
-        self.jorgsBar.addAction(taurus.qt.qtgui.resource.getIcon(":/logo.png"),ORGNAME)
-        self.jorgsBar.addAction(taurus.qt.qtgui.resource.getIcon(CUSTOMLOGO),APPNAME)
-        
-        #configure the macro infrastructure
-        MACROSERVER_NAME = self.__getVarFromXML(root,"MACROSERVER_NAME", None)
-        DOOR_NAME = self.__getVarFromXML(root,"DOOR_NAME", '')
-        MACROEDITORS_PATH = self.__getVarFromXML(root,"MACROEDITORS_PATH", '')
-        if MACROSERVER_NAME is not None:
-            self.createMacroInfrastructure(msname=MACROSERVER_NAME, doorname=DOOR_NAME, meditpath=MACROEDITORS_PATH)
-         
-        SYNOPTIC = []
-        synoptic = root.find("SYNOPTIC")
-        if (synoptic is not None) and (synoptic.text is not None):
-            for child in synoptic:
-                if (child.get("str") is not None):
-                    if len(child.get("str")):
-                        SYNOPTIC.append(child.get("str"))
-                    
-        for s in SYNOPTIC:
-            self.createMainSynoptic(s)
-        
-             
-        #create instrument panels and custom panels
-        CUSTOM_PANELS = []
-        
-        panelDescriptions = root.find("PanelDescriptions")
-        if (panelDescriptions is not None):
-            for child in panelDescriptions:
-                    if (child.tag == "PanelDescription"):
-                        pd = PanelDescription.fromXml(etree.tostring(child))
-                        if pd is not None:
-                            CUSTOM_PANELS.append(pd)
-                            
-        INSTRUMENTS_FROM_POOL = (self.__getVarFromXML(root,"INSTRUMENTS_FROM_POOL", 'False').lower() == 'true')                   
-        if INSTRUMENTS_FROM_POOL:
-            POOLINSTRUMENTS = self.createInstrumentsFromPool(MACROSERVER_NAME) #auto create instruments from pool 
-        else:
-            POOLINSTRUMENTS = []
-
-        for p in CUSTOM_PANELS + POOLINSTRUMENTS:
-            try:
-                w = p.getWidget(sdm=Qt.qApp.SDM, setModel=False)
-                if hasattr(w,'setCustomWidgetMap'):
-                    w.setCustomWidgetMap(self.getCustomWidgetMap())
-                if p.model is not None:
-                    w.setModel(p.model)
-                #create a panel
-                self.createPanel(w, p.name, p.area)
-                #connect the widget
-                Qt.qApp.SDM.connectWriter("SelectedInstrument", w, "panelSelected")
-                
-            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)
-                if result == Qt.QMessageBox.Abort:
-                    sys.exit()
-                    
-        
-        #add external applications
-        EXTERNAL_APPS = [] 
-        
-        externalAppsNode = root.find("ExternalApps")
-        if (externalAppsNode is not None):
-            for child in externalAppsNode:
-                    if (child.tag == "ExternalApp"):
-                        ea = ExternalApp.fromXml(etree.tostring(child))
-                        if ea is not None:
-                            EXTERNAL_APPS.append(ea)
-        
-        for a in EXTERNAL_APPS:
-            self.addExternalAppLauncher(a.getAction())
-        
-        #add a beam monitor  
-            
-        MONITOR = self.__getVarFromXML(root,"MONITOR", '')
-        monitorNode = root.find("MONITOR")
-        
-        if MONITOR:
-            self.__monitor = TaurusMonitorTiny()
-            self.__monitor.setModel(MONITOR)
-            self.jorgsBar.addWidget(self.__monitor)
-            self.registerConfigDelegate(self.__monitor, 'monitor')
-        
-        #read QSettings 
-        self.loadSettings()
-        #If no valid ini file is found in the standard locations, try with a fallback ini file
-        if self.getQSettings().allKeys().isEmpty(): 
-            #open the fall back file (aka "factory" settings)
-            rname,ext = os.path.splitext(self._confFileName)
-            iniFileName = self.__getVarFromXML(root,"INIFILENAME", '%s.ini'%rname) #the name of the fallback file can be specified in the conf file using "INIFILE". It defaults to <confname>.ini
-            factorySettings = Qt.QSettings(iniFileName, Qt.QSettings.IniFormat)
-            #clone the perspectives found in the "factory" settings
-            for p in self.getPerspectivesList(settings=factorySettings):
-                self.loadPerspective(name=p, settings=factorySettings)
-                self.savePerspective(name=p)
-            #finally load the settings
-            self.loadSettings(settings=factorySettings)
-        
-    
     def loadConfiguration(self, confname):
         '''Reads a configuration file
         
-        :param confname: (str) the  name of a conf module located in the PYTHONPATH
+        :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 "TaurusGUI_conf_<confname>".
+                         it will try to import "tgconf_<confname>.
+                         Alternatively, confname can be the path to the configuration 
+                         directory (not necessarily in the python path).
         '''
-        altconfname = "tgconf_%s"%confname
         
-        confsubdir = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'conf') #the path to a conf subdirectory
-        oldpath = sys.path
-        sys.path = [confsubdir] + sys.path #add the config dir to the pythonpath
+        #import the python config file
         try:
-            try: 
-                conf = __import__(confname)
-            except ImportError:
-                try:
-                    conf = __import__(altconfname)
+            if os.path.isdir(confname): #if confname is a dir name
+                import imp
+                path, name = os.path.split(confname)
+                name, ext = os.path.splitext(name) 
+                file, filename, data = imp.find_module(name, [path])
+                conf = imp.load_module(name, file, 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)
                 except ImportError:
-                    msg = 'Could not find %s or %s in %s or the Python path'%(confname, altconfname, confsubdir)
-                    self.error(msg)
-                    Qt.QMessageBox.critical(self,'Initialization error', msg, Qt.QMessageBox.Abort)
-                    sys.exit()
+                    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
         except Exception, e:
-            msg = 'Error loading configuration file: %s'%repr(e)
+            msg = 'Error loading configuration: %s'%repr(e)
             self.error(msg)
             Qt.QMessageBox.critical(self,'Initialization error', msg, Qt.QMessageBox.Abort)
             sys.exit()
-        sys.path = oldpath #restore the previous sys.path
+            
+        #In any case, once we have imported it we can get the configuration directory:
         self._confDirectory = os.path.dirname(conf.__file__)
         
-        APPNAME = getattr(conf,'GUI_NAME', confname)
-        ORGNAME = getattr(conf,'ORGANIZATION', 'Taurus')
-        CUSTOMLOGO =  getattr(conf, 'CUSTOM_LOGO', getattr(conf,'LOGO', ":/taurus.png"))
-        if not CUSTOMLOGO.startswith(':'):
-            CUSTOMLOGO = os.path.join(self._confDirectory, CUSTOMLOGO)
+        #Get the xml root node from the xml configuration file 
+        XML_CONFIG = getattr(conf,'XML_CONFIG', None)
+        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
+                xmlFile = open(xmlfname, 'r')
+                xmlstring = xmlFile.read()
+                xmlFile.close()
+                xmlroot = etree.fromstring(xmlstring)
+            except Exception, e:
+                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)
+                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')))
+        if CUSTOMLOGO.startswith(':'):
+            customIcon = taurus.qt.qtgui.resource.getIcon(CUSTOMLOGO)
+        else:
+            customIcon = Qt.QIcon(os.path.join(self._confDirectory, CUSTOMLOGO))
         Qt.qApp.setApplicationName(APPNAME)
         Qt.qApp.setOrganizationName(ORGNAME)
-        self.resetQSettings() 
+        Qt.QApplication.instance().basicConfig()
         
+        #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') )
+        if SINGLEINSTANCE:
+            if not self.checkSingleInstance():
+                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)
+                sys.exit(1)
+        
+        #some initialization 
+        self.resetQSettings() 
         self.setWindowTitle(APPNAME)
-        windowIcon = taurus.qt.qtgui.resource.getIcon(CUSTOMLOGO)
-        self.setWindowIcon(windowIcon)
+        self.setWindowIcon(customIcon)
         self.jorgsBar.addAction(taurus.qt.qtgui.resource.getIcon(":/logo.png"),ORGNAME)
-        self.jorgsBar.addAction(taurus.qt.qtgui.resource.getIcon(CUSTOMLOGO),APPNAME)
+        self.jorgsBar.addAction(customIcon,APPNAME)
+        
+        #manual panel
+        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', icon = taurus.qt.qtgui.resource.getThemeIcon('help-browser'))
                     
-        #configure the macro infrastructure
-        MACROSERVER_NAME = getattr(conf,'MACROSERVER_NAME', None)
-        DOOR_NAME = getattr(conf,'DOOR_NAME','')
-        MACROEDITORS_PATH = getattr(conf,'MACROEDITORS_PATH','')
+        #configure the macro infrastructure       
+        MACROSERVER_NAME = getattr(conf,'MACROSERVER_NAME', self.__getVarFromXML(xmlroot,"MACROSERVER_NAME", None))
         if MACROSERVER_NAME is not None:
-            self.createMacroInfrastructure(msname=MACROSERVER_NAME, doorname=DOOR_NAME, meditpath=MACROEDITORS_PATH)
+            from taurus.qt.qtgui.taurusgui import MacroBroker
+            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", ''))
+        if DOOR_NAME:
+            self.emit(Qt.SIGNAL("doorNameChanged"), DOOR_NAME)
+        
+        MACROEDITORS_PATH = getattr(conf,'MACROEDITORS_PATH', self.__getVarFromXML(xmlroot,"MACROEDITORS_PATH", ''))
+        if MACROEDITORS_PATH:
+            from taurus.qt.qtgui.extra_macroexecutor.macroparameterseditor.macroparameterseditor import ParamEditorManager
+            ParamEditorManager().parsePaths(MACROEDITORS_PATH)
+            ParamEditorManager().browsePaths()
             
-        #Synoptic  
-        SYNOPTIC = getattr(conf, 'SYNOPTIC', [])
-        if isinstance(SYNOPTIC, basestring):
+        #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)
             SYNOPTIC = [SYNOPTIC]
+        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:
+                    str = child.get("str")
+                    if str is not None and len(str): #we do not append empty strings
+                        SYNOPTIC.append(str)
         for s in SYNOPTIC:
             self.createMainSynoptic(s)
             
-        #create instrument panels and custom panels
-        CUSTOM_PANELS = [obj for name,obj in inspect.getmembers(conf) if isinstance(obj, PanelDescription)]
-        if getattr(conf,'INSTRUMENTS_FROM_POOL',False):
+        #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:
             POOLINSTRUMENTS = self.createInstrumentsFromPool(MACROSERVER_NAME) #auto create instruments from pool 
         else:
             POOLINSTRUMENTS = []
-
+        
+        #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):
+            for child in panelDescriptions:
+                if (child.tag == "PanelDescription"):
+                    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:
                 w = p.getWidget(sdm=Qt.qApp.SDM, setModel=False)
@@ -803,10 +755,10 @@ class TaurusGui(TaurusMainWindow):
                     w.setCustomWidgetMap(self.getCustomWidgetMap())
                 if p.model is not None:
                     w.setModel(p.model)
+                if p.instrumentkey is None:
+                    instrumentkey = self.IMPLICIT_ASSOCIATION
                 #create a panel
-                self.createPanel(w, p.name, p.area)
-                #connect the widget
-                Qt.qApp.SDM.connectWriter("SelectedInstrument", w, "panelSelected")
+                self.createPanel(w, p.name, floating=p.floating, instrumentkey=instrumentkey)
                 
             except Exception,e:
                 msg='Cannot create panel %s'%getattr(p,'name','__Unknown__')
@@ -815,34 +767,101 @@ class TaurusGui(TaurusMainWindow):
                 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 a separator in the panels view submenu (it separates the panels created from the config file from the user-created panels)
+        self.__panelsMenu.addSeparator()
+        
+        #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):
+            for child in toolBarDescriptions:
+                if (child.tag == "ToolBarDescription"):
+                    d = ToolBarDescription.fromXml(etree.tostring(child))
+                    if d is not None:
+                        CUSTOM_TOOLBARS.append(d)
         
-        #add external applications
+        #create toolbars based on the descriptions gathered before
+        for d in CUSTOM_TOOLBARS:
+            try:
+                w = d.getWidget(sdm=Qt.qApp.SDM, setModel=False)
+                if d.model is not None:
+                    w.setModel(d.model)
+                w.setWindowTitle(d.name)
+                #add the toolbar to the window
+                self.addToolBar(w)
+                #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):
+                    self.registerConfigDelegate(w, d.name)
+                
+            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)
+                if result == Qt.QMessageBox.Abort:
+                    sys.exit()
+
+        CUSTOM_APPLETS = []
+        #for backwards compatibility
+        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)]
+        
+        #add applet descriptions from xml config
+        appletDescriptions = xmlroot.find("AppletDescriptions")
+        if (appletDescriptions is not None):
+            for child in appletDescriptions:
+                if (child.tag == "AppletDescription"):
+                    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:
+                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__')
+                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)
+                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)]
+                
+        externalAppsNode = xmlroot.find("ExternalApps")
+        if (externalAppsNode is not None):
+            for child in externalAppsNode:
+                if (child.tag == "ExternalApp"):
+                    ea = ExternalApp.fromXml(etree.tostring(child))
+                    if ea is not None:
+                        EXTERNAL_APPS.append(ea)
+        
         for a in EXTERNAL_APPS:
             self.addExternalAppLauncher(a.getAction())
         
-        #add a beam monitor
-        MONITOR = getattr(conf, 'MONITOR', [])
-        if MONITOR:
-            self.__monitor = TaurusMonitorTiny()
-            self.__monitor.setModel(MONITOR)
-            self.jorgsBar.addWidget(self.__monitor)
-            self.registerConfigDelegate(self.__monitor, 'monitor')
-        
-        #read QSettings 
-        self.loadSettings()
-        #If no valid ini file is found in the standard locations, try with a fallback ini file
-        if self.getQSettings().allKeys().isEmpty(): 
-            #open the fall back file (aka "factory" settings)
-            iniFileName = os.path.join(self._confDirectory, getattr(conf, 'INIFILE', "%s.ini"%conf.__name__)) #the name of the fallback file can be specified in the conf file using "INIFILE". It defaults to <confdir>/<confname>.ini
-            factorySettings = Qt.QSettings(iniFileName, Qt.QSettings.IniFormat)
-            #clone the perspectives found in the "factory" settings
-            for p in self.getPerspectivesList(settings=factorySettings):
-                self.loadPerspective(name=p, settings=factorySettings)
-                self.savePerspective(name=p)
-            #finally load the settings
-            self.loadSettings(settings=factorySettings)
+        #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
+        
+        #read the settings (or the factory settings if the regular file is not found)
+        self.loadSettings(factorySettingsFileName=iniFileName)
             
     def setLockView(self, locked):
         self.setModifiableByUser(not locked)
@@ -859,39 +878,45 @@ class TaurusGui(TaurusMainWindow):
             action.setEnabled(modifiable)
         
         self._lockviewAction.setChecked(not modifiable)
-        TaurusMainWindow.setModifiableByUser(self, modifiable)
-        
-                          
-    
-    def onDoorNameChanged(self, doorname):
-        ''' Slot to be called when the door name has changed
+        TaurusMainWindow.setModifiableByUser(self, modifiable)                      
+
+    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 doorname: (str) the tango name of the door device 
+        :param msg: (str) the short descriptive message to be handled 
         '''
-        if self.__qdoor 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")
-             
-        if doorname == "": return #@todo send signal with doorName to macroExecutorWidget in case of "" also send it to disconnect doorstateled
-        door = taurus.Device(doorname)
-        if not isinstance(door, Qt.QObject):
-            msg= "cannot connect to door %s"%doorname
-            Qt.QMessageBox.critical(self,'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")
-        #@todo: connect as a writer of other data as well
+        self.statusBar().showMessage(msg)
+    
+#    def onDoorNameChanged(self, doorname):
+#        ''' Slot to be called when the door name has changed
+#        
+#        :param doorname: (str) the tango name of the 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")
+#             
+#        if doorname == "": return #@todo send signal with doorName to macroExecutorWidget in case of "" also send it to disconnect doorstateled
+#        door = taurus.Device(doorname)
+#        if not isinstance(door, Qt.QObject):
+#            msg= "cannot connect to door %s"%doorname
+#            Qt.QMessageBox.critical(self,'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")
+#        #@todo: connect as a writer of other data as well
     
 #    def onSelectedInstrumentChanged(self, instrumentname):
 #        ''' Slot to be called when the selected instrument has changed (e.g. by user
@@ -920,7 +945,81 @@ class TaurusGui(TaurusMainWindow):
         '''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 
         
+        :param instrumentname: (str or None) The name of the instrument whose associated panel is wanted
+                
+        :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 
+        
+        :param instrumentname: (str) The name of the instrument 
+        :param panelname: (str or None) The name of the associated 
+                          panel or None to remove the association 
+                          for this instrument.
+        '''
+        instrumentname = unicode(instrumentname)
+        #remove a previous association if it exists
+        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
+                
+        :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) 
+    
+    def setAllInstrumentAssociations(self, associationsdict):
+        '''
+        Sets the dictionary of instrument-panel associations
+                
+        :return: (dict<str,str>) a dict whose keys are the instruments names
+                 and whose values are the corresponding associated panels (or None).
+        '''
+        self.__instrumentToPanelMap = copy.deepcopy(associationsdict)
+        self.__panelToInstrumentMap = {}
+        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)
+        
+        :param instrumentname: (str) The name that identifies the instrument.
+        '''
+        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
         
@@ -940,7 +1039,10 @@ class TaurusGui(TaurusMainWindow):
         ''' tabifies all panels in a given area.
         
         :param area: (Qt.DockWidgetArea)
+        
+        .. warning:: This method is deprecated
         '''
+        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
         p0 = panels[0]
@@ -955,8 +1057,9 @@ class TaurusGui(TaurusMainWindow):
                      returned.
         :param area:  (Qt.DockWidgetArea or str )
         
-        
+        .. warning:: This method is deprecated
         '''
+        raise DeprecationWarning('findPanelsInArea is no longer supported (now all panels reside in the same DockWidget Area)')
         if area == 'FLOATING':
             return [p for p in self.__panels.values() if p.isFloating()]
         else:
@@ -967,34 +1070,56 @@ class TaurusGui(TaurusMainWindow):
         '''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 main():    
+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")
-    parser.add_option("--config-file", "--config-file", dest="config_file", default=None,
-                  help="use the given XML configuration file for initialization")
-    
+    parser.add_option("", "--config-dir", dest="config_dir", default=None,
+                  help="use the given configuration directory for initialization")
+    parser.add_option("", "--new-gui", action="store_true", dest="new_gui", default=None,
+                  help="launch a wizard for creating a new TaurusGUI application")
+
     app = TaurusApplication(cmd_line_parser=parser, app_name="taurusgui",
                             app_version=taurus.Release.version)
     args = app.get_command_line_args()
     options = app.get_command_line_options()
-
-    if options.config_file is None:
-        if len(args) != 1:
-            parser.print_help(sys.stderr)
-            sys.exit(1)
-        confname = args[0] 
-        gui = TaurusGui(None, confname=confname)
+    
+    if options.new_gui: #launch app settings wizard instead of taurusgui
+        from taurus.qt.qtgui.taurusgui import AppSettingsWizard
+        Qt.QMessageBox.information(None, 'Alpha-quality warning', 
+                                   'The Applications settings wizard is still under heavy development.\n Use it at your own risk and report any problems',
+                                   Qt.QMessageBox.Ok)
+        wizard = AppSettingsWizard()
+        wizard.show()
+        sys.exit(app.exec_())
+        
+    confname = options.config_dir
+    if confname is None and len(args) == 1: #for backwards compat, we allow to specify the confname without the "--config-dir" parameter
+        confname = args[0]
     else:
-        gui = TaurusGui(None, xmlconffile=options.config_file)
+        parser.print_help(sys.stderr)
+        sys.exit(1)
+        
+    gui = TaurusGui(None, confname=confname)
+    
     gui.show()
-    sys.exit(app.exec_())
+    ret = app.exec_()
+    
+    taurus.info('Finished execution of TaurusGui')
+    sys.exit(ret)
    
        
 if __name__ == "__main__":
diff --git a/lib/taurus/qt/qtgui/taurusgui/ui/PanelAssociationsDlg.ui b/lib/taurus/qt/qtgui/taurusgui/ui/PanelAssociationsDlg.ui
new file mode 100644
index 0000000..80f4591
--- /dev/null
+++ b/lib/taurus/qt/qtgui/taurusgui/ui/PanelAssociationsDlg.ui
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>PanelAssociationsDlg</class>
+ <widget class="QDialog" name="PanelAssociationsDlg">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>402</width>
+    <height>122</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Panel-Instrument associations</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <item>
+    <layout class="QGridLayout" name="gridLayout">
+     <item row="0" column="0">
+      <spacer name="verticalSpacer">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>40</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item row="1" column="0">
+      <widget class="QLabel" name="label">
+       <property name="text">
+        <string>Instrument</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item row="1" column="2">
+      <widget class="QLabel" name="label_2">
+       <property name="text">
+        <string>Panel</string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="0">
+      <widget class="QComboBox" name="instrumentCB">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="editable">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="1">
+      <widget class="QLabel" name="label_3">
+       <property name="text">
+        <string><-></string>
+       </property>
+       <property name="alignment">
+        <set>Qt::AlignCenter</set>
+       </property>
+      </widget>
+     </item>
+     <item row="2" column="2">
+      <widget class="QComboBox" name="panelCB">
+       <property name="sizePolicy">
+        <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+         <horstretch>0</horstretch>
+         <verstretch>0</verstretch>
+        </sizepolicy>
+       </property>
+       <property name="editable">
+        <bool>false</bool>
+       </property>
+      </widget>
+     </item>
+     <item row="3" column="0">
+      <spacer name="verticalSpacer_2">
+       <property name="orientation">
+        <enum>Qt::Vertical</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>20</width>
+         <height>40</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+    </layout>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QPushButton" name="refreshBT">
+       <property name="text">
+        <string>Refresh</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>
+     <item>
+      <widget class="QDialogButtonBox" name="buttonBox">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="standardButtons">
+        <set>QDialogButtonBox::Apply|QDialogButtonBox::Close|QDialogButtonBox::Ok</set>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>accepted()</signal>
+   <receiver>PanelAssociationsDlg</receiver>
+   <slot>accept()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>248</x>
+     <y>254</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>157</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>buttonBox</sender>
+   <signal>rejected()</signal>
+   <receiver>PanelAssociationsDlg</receiver>
+   <slot>reject()</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>316</x>
+     <y>260</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>286</x>
+     <y>274</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/lib/taurus/qt/qtgui/taurusgui/ui/ui_PanelAssociationsDlg.py b/lib/taurus/qt/qtgui/taurusgui/ui/ui_PanelAssociationsDlg.py
new file mode 100644
index 0000000..cc2ed60
--- /dev/null
+++ b/lib/taurus/qt/qtgui/taurusgui/ui/ui_PanelAssociationsDlg.py
@@ -0,0 +1,90 @@
+# -*- 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 719eaf3..ce81f6e 100644
--- a/lib/taurus/qt/qtgui/taurusgui/utils.py
+++ b/lib/taurus/qt/qtgui/taurusgui/utils.py
@@ -28,13 +28,18 @@ by specific TaurusGui-based GUIs"""
 
 __docformat__ = 'restructuredtext'
 
-
-from PyQt4.Qt import Qt as Qt_Qt
 from taurus.qt.qtgui.util import ExternalAppAction
 from taurus.qt.qtgui.util import TaurusWidgetFactory
 from taurus.core.util import etree
 import os,sys
 
+#this is here only for backwards compatibility. It should not be used at all
+class Qt_Qt: 
+    LeftDockWidgetArea = 1
+    RightDockWidgetArea = 2
+    BottomDockWidgetArea = 3
+    TopDockWidgetArea = 4
+
 TAURUSGUI_AREAS = {'Left':Qt_Qt.LeftDockWidgetArea,
                 'Right':Qt_Qt.RightDockWidgetArea, 
                 'Top':Qt_Qt.TopDockWidgetArea, 
@@ -102,22 +107,20 @@ class ExternalApp(object):
         return ExternalApp(" ".join((command,params)), text=text, icon=icon)
         
 
-class PanelDescription(object):
+class TaurusGuiComponentDescription(object):
     '''
-    A description of a teurusgui panel. 
-    This class is not a panel, but a container of the information required to
-    build a panel.
+    A base class for describing a taurusgui component. 
     '''
     def __init__(self,name, classname=None, modulename=None, widgetname=None, 
-                 area=None, sharedDataWrite=None, sharedDataRead=None, 
-                 model=None):
+                 sharedDataWrite=None, sharedDataRead=None, 
+                 model=None, floating=True, **kwargs):
         if classname is None and (modulename is None or widgetname is None) :
             raise ValueError('Either classname or both modulename and widgetname must be given')
         self._name = name
         self._classname = classname
         self._modulename = modulename
         self._widgetname = widgetname
-        self._area = area
+        self._floating = floating
         if sharedDataWrite is None: sharedDataWrite = {}
         self._sharedDataWrite = sharedDataWrite
         if sharedDataRead is None: sharedDataRead = {}
@@ -149,10 +152,18 @@ class PanelDescription(object):
         self._widgetname = widgetname
         
     def getArea(self):
+        raise DeprecationWarning('getArea is deprecated')
         return self._area
     
     def setArea(self, area):
-        self._area = area
+        raise DeprecationWarning('setArea is deprecated')
+        self._area = area        
+        
+    def isFloating(self):
+        return self._floating
+    
+    def setFloating(self, floating):
+        self._floating = floating
         
     def getSharedDataWrite(self):
         return self._sharedDataWrite
@@ -220,8 +231,8 @@ class PanelDescription(object):
         modulename.text = self._modulename
         widgetname = etree.SubElement(root, "widgetname")
         widgetname.text = self._widgetname
-        area = etree.SubElement(root, "area")
-        area.text = self._area
+        floating = etree.SubElement(root, "floating")
+        floating.text = str(self._floating)
 
         sharedDataWrite = etree.SubElement(root, "sharedDataWrite")
         for k,v in self._sharedDataWrite.iteritems():
@@ -275,11 +286,11 @@ class PanelDescription(object):
         else:
             widgetname = None
         
-        areaNode = root.find("area")
-        if (areaNode is not None) and (areaNode.text is not None):
-            area = areaNode.text
+        floatingNode = root.find("floating")
+        if (floatingNode is not None) and (floatingNode.text is not None):
+            floating = floatingNode.text == str(True)
         else:
-            area = None
+            floating = True
         
         sharedDataWrite = {}
         sharedDataWriteNode = root.find("sharedDataWrite")
@@ -309,7 +320,7 @@ class PanelDescription(object):
         
         
         return PanelDescription(name, classname=classname, modulename=modulename, widgetname=widgetname, 
-                                area=area, sharedDataWrite=sharedDataWrite, sharedDataRead=sharedDataRead, 
+                                floating=floating, sharedDataWrite=sharedDataWrite, sharedDataRead=sharedDataRead, 
                                 model=model)
         
     #===============================================================================
@@ -319,10 +330,32 @@ class PanelDescription(object):
     classname = property(fget=getClassname, fset=setClassname)
     modulename = property(fget=getModulename, fset=setModulename)
     widgetname = property(fget=getWidgetname, fset=setWidgetname)
-    area = property(fget=getArea, fset=setArea)
+    floating = property(fget=isFloating, fset=setFloating)
     sharedDataWrite = property(fget=getSharedDataWrite, fset=setSharedDataWrite)
     sharedDataRead = property(fget=getSharedDataRead, fset=setSharedDataRead) 
     model = property(fget=getModel, fset=setModel) 
 
 
+class PanelDescription(TaurusGuiComponentDescription):
+    '''
+    A description of a taurusgui panel. 
+    This class is not a panel, but a container of the information required to
+    build a panel.
+    '''
+    def __init__(self, *args, **kwargs):
+        self.instrumentkey = kwargs.pop('instrumentkey', None)
+        TaurusGuiComponentDescription.__init__(self, *args, **kwargs)
         
+
+class ToolBarDescription(TaurusGuiComponentDescription):
+    '''
+    A description of a toolbar to be inserted in a TaurusGUI. 
+    '''
+    pass
+
+
+class AppletDescription(TaurusGuiComponentDescription): 
+    '''
+    A description of a widget to be inserted in the "applets bar" of the TaurusGUI. 
+    '''
+    pass
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/tree/__init__.py b/lib/taurus/qt/qtgui/tree/__init__.py
index d8e14bc..4779c0b 100644
--- a/lib/taurus/qt/qtgui/tree/__init__.py
+++ b/lib/taurus/qt/qtgui/tree/__init__.py
@@ -27,5 +27,7 @@
 
 __docformat__ = 'restructuredtext'
 
+from .qtree import *
+from .taurustree import *
 from .taurusdbtree import *
 from .taurusdevicetree import *
diff --git a/lib/taurus/qt/qtgui/tree/qtree.py b/lib/taurus/qt/qtgui/tree/qtree.py
new file mode 100644
index 0000000..e682dd4
--- /dev/null
+++ b/lib/taurus/qt/qtgui/tree/qtree.py
@@ -0,0 +1,379 @@
+#!/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 base tree widget"""
+
+__all__ = ["QBaseTreeWidget"]
+
+__docformat__ = 'restructuredtext'
+
+from taurus.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
+
+
+class _NavigationLabel(Qt.QWidget):
+    """Internal widget providing a navigation label & icon"""
+    
+    def __init__(self, pixmap, text, cont, index, parent=None):
+        super(_NavigationLabel, self).__init__(parent)
+        self._index = index
+        
+        l = Qt.QHBoxLayout()
+        l.setContentsMargins(0,0,0,0)
+        self.setLayout(l)
+        if pixmap is not None:
+            p = Qt.QLabel()
+            p.setPixmap(pixmap)
+            l.addWidget(p)
+        self._label = Qt.QLabel(text)
+        l.addWidget(self._label)
+        if cont:
+            l.addWidget(Qt.QLabel(u" \u00bb "))
+    
+    def label(self):
+        return self._label
+    
+    def index(self):
+        return self._index
+
+
+class _NavigationWidget(Qt.QFrame):
+    """Internal widget that provides a navigation path to be placed in a toolbar"""
+     
+    def __init__(self, treeWidget, toolBarWidget, parent=None):
+        super(_NavigationWidget, self).__init__(parent)
+        self._tree = treeWidget
+        self._toolbar = toolBarWidget
+        l = Qt.QHBoxLayout()
+        l.setContentsMargins(4, 0, 4, 0)
+        self.setLayout(l)
+   
+    def treeWidget(self):
+        return self._tree
+
+    def viewWidget(self):
+        return self.treeWidget().viewWidget()
+
+    def toolBarWidget(self):
+        return self._toolbar
+    
+    def clean(self):
+        l = self.layout()
+        w = l.takeAt(0)
+        while w is not None:
+            w = w.widget()
+            Qt.QObject.disconnect(w, Qt.SIGNAL("clicked()"), self.onGotoNode)
+            w.setParent(None)
+            w = l.takeAt(0)
+
+    def updateSelection(self, index):
+        self.clean()
+        treeWidget = self.treeWidget()
+        viewWidget = treeWidget.viewWidget()
+        model = viewWidget.model()
+        src_model = treeWidget.getBaseQModel()
+        toolbar = self.toolBarWidget()
+        size = None
+        rootPixmap = getThemeIcon("go-home").pixmap(toolbar.iconSize())
+        rootText = u"Top"
+        
+        l = self.layout()
+        n = 0
+        while index.isValid():
+            src_index = treeWidget._mapToSource(index)
+            name = src_model.pyData(src_index, Qt.Qt.DisplayRole)
+            font = src_model.pyData(src_index, Qt.Qt.FontRole)
+            tooltip = src_model.pyData(src_index, Qt.Qt.ToolTipRole)
+            decoration = src_model.pyData(src_index, Qt.Qt.DecorationRole) 
+            pixmap = None
+            if isinstance(decoration, Qt.QIcon):
+                pixmap = decoration.pixmap(toolbar.iconSize())
+            elif isinstance(decoration, Qt.QPixmap):
+                pixmap = decoration
+            button = _NavigationLabel(pixmap, name, n>0, Qt.QPersistentModelIndex(index))
+            font = font or model.DftFont
+            button.setFont(font)
+            button.setToolTip(tooltip)
+            Qt.QObject.connect(button.label(), Qt.SIGNAL("linkActivated(const QString &)"), self.onGotoNode)
+            l.insertWidget(0, button)
+            index = index.parent()
+            n += 1
+        rootButton = _NavigationLabel(rootPixmap, rootText, n>0, Qt.QPersistentModelIndex(index))
+        rootButton.setFont(model.DftFont)
+        #Qt.QObject.connect(rootButton.label(), Qt.SIGNAL("linkActivated(const QString &)"), self.onGotoNode)
+        l.insertWidget(0, rootButton)
+        
+        lastLabel = l.itemAt(l.count()-1).widget()
+        
+    def onGotoNode(self, *args):
+        label = self.sender()
+        persistent_index = label.parent().index()
+        index = Qt.QModelIndex(persistent_index)
+        tree = self.viewWidget()
+        tree.setRootIndex(index)
+        tree.setCurrentIndex(index.child(0, 0))
+
+
+class NavigationToolBar(BaseToolBar):
+    
+    def __init__(self, view=None, parent=None, designMode=False):
+        BaseToolBar.__init__(self, name="Taurus selection toolbar", view=view,
+                             parent=parent, designMode=designMode)
+        
+        af = ActionFactory()
+        self._goIntoAction = af.createAction(self, "Go Into",
+                                             icon=getThemeIcon("go-down"),
+                                             tip="Go into the selected item",
+                                             triggered=self.goInto)
+        self._goUpAction = af.createAction(self, "Go Up",
+                                            icon=getThemeIcon("go-up"),
+                                            tip="Go up one level",
+                                            triggered=self.goUp)
+        self._goTopAction = af.createAction(self, "Go Top",
+                                            icon=getThemeIcon("go-top"),
+                                            tip="Go to top level",
+                                            triggered=self.goTop)
+        self.addAction(self._goIntoAction)
+        self.addAction(self._goUpAction)
+        self.addAction(self._goTopAction)
+        self._navigationWidget = _NavigationWidget(view, self, parent=self)
+        self._navigationAction = self.addWidget(self._navigationWidget)
+
+    def goIntoAction(self):
+        return self._goIntoAction
+    
+    def goTopAction(self):
+        return self._goTopAction
+    
+    def goUpAction(self):
+        return self._goUpAction
+    
+    def goInto(self):
+        self.emit(Qt.SIGNAL("goIntoTriggered"))
+
+    def goUp(self):
+        self.emit(Qt.SIGNAL("goUpTriggered"))
+
+    def goTop(self):
+        self.emit(Qt.SIGNAL("goTopTriggered"))
+
+
+class ExpansionBar(BaseToolBar):
+    
+    def __init__(self, view=None, parent=None, designMode=False):
+        BaseToolBar.__init__(self, name="Taurus selection toolbar", view=view,
+                             parent=parent, designMode=designMode)
+
+        af = ActionFactory()
+        self._expandAllAction = af.createAction(self, "Expand All",
+            icon=getIcon(":/actions/expand.png"),
+            tip="Expand all items",
+            triggered=self.onExpandAll)
+        self._collapseAllAction = af.createAction(self, "Collapse All",
+            icon=getIcon(":/actions/collapse.png"),
+            tip="Collapse all items",
+            triggered=self.onCollapseAll)
+        self._expandSelectionAction = af.createAction(self, "Expand selection",
+            icon=getIcon(":/actions/expand-selection.png"),
+            tip="Expand selection",
+            triggered=self.onExpandSelection)
+        self._collapseSelectionAction = af.createAction(self, "Collapse All",
+            icon=getIcon(":/actions/collapse-selection.png"),
+            tip="Collapse selection",
+            triggered=self.onCollapseSelection)
+        self.addAction(self._expandAllAction)
+        self.addAction(self._collapseAllAction)
+        self.addAction(self._expandSelectionAction)
+        self.addAction(self._collapseSelectionAction)
+    
+    def onExpandAll(self):
+        self.emit(Qt.SIGNAL("expandTriggered"))
+    
+    def onCollapseAll(self):
+        self.emit(Qt.SIGNAL("collapseTriggered"))
+    
+    def onExpandSelection(self):
+        self.emit(Qt.SIGNAL("expandSelectionTriggered"))
+    
+    def onCollapseSelection(self):
+        self.emit(Qt.SIGNAL("collapseSelectionTriggered"))
+
+
+class QBaseTreeWidget(QBaseModelWidget):
+    """A pure Qt tree widget implementing a tree with a navigation toolbar"""
+    
+    def __init__(self, parent=None, designMode=False, with_navigation_bar=True,
+                 with_filter_widget=True):
+        self._with_navigation_bar = with_navigation_bar
+        QBaseModelWidget.__init__(self, parent, with_filter_widget=with_filter_widget)
+    
+    def createToolArea(self):
+        ta = QBaseModelWidget.createToolArea(self)
+        
+        e_bar = self._expandBar = ExpansionBar(view=self, parent=self)
+        self.connect(e_bar, Qt.SIGNAL("expandTriggered"), self.expandAllTree)
+        self.connect(e_bar, Qt.SIGNAL("collapseTriggered"), self.collapseAllTree)
+        self.connect(e_bar, Qt.SIGNAL("expandSelectionTriggered"), self.expandSelectionTree)
+        self.connect(e_bar, Qt.SIGNAL("collapseSelectionTriggered"), self.collapseSelectionTree)
+        ta.append(e_bar)
+        
+        if self._with_navigation_bar:
+            n_bar = self._navigationToolBar = NavigationToolBar(view=self, parent=self)
+            self.connect(n_bar, Qt.SIGNAL("goIntoTriggered"), self.goIntoTree)
+            self.connect(n_bar, Qt.SIGNAL("goTopTriggered"), self.goTopTree)
+            self.connect(n_bar, Qt.SIGNAL("goUpTriggered"), self.goUpTree)
+            ta.append(n_bar)
+        else:
+            self._navigationToolBar = None
+        return ta
+    
+    def createViewWidget(self):
+        tree = Qt.QTreeView()
+        tree.setSortingEnabled(True)
+        tree.setUniformRowHeights(True)
+        tree.setAlternatingRowColors(True)
+        tree.setSelectionBehavior(Qt.QAbstractItemView.SelectRows)
+        tree.setSelectionMode(Qt.QAbstractItemView.ExtendedSelection)
+        tree.setDragEnabled(True)
+        tree.setDropIndicatorShown(True)
+
+        self.connect(tree, Qt.SIGNAL("expanded(QModelIndex)"), self.onExpanded)
+        self.connect(tree, Qt.SIGNAL("clicked(QModelIndex)"), self._onClicked)
+        self.connect(tree, Qt.SIGNAL("doubleClicked(QModelIndex)"), self._onDoubleClicked)
+        h = tree.header()
+        h.setResizeMode(0, Qt.QHeaderView.Stretch)
+        return tree
+    
+    def treeView(self):
+        return self.viewWidget()
+
+    def goIntoAction(self):
+        return self._navigationToolBar.goIntoAction()
+    
+    def goTopAction(self):
+        return self._navigationToolBar.goTopAction()
+    
+    def goUpAction(self):
+        return self._navigationToolBar.goUpAction()
+    
+    def expandAllTree(self):
+        self.statusBar().showMessage("Expanding all items... (it may take a few seconds)")
+        tree = self.viewWidget()
+        Qt.QTimer.singleShot(0, self._expandTree)
+    
+    def _expandTree(self):
+        tree = self.viewWidget()
+        tree.expandAll()
+        self.statusBar().showMessage("All items expanded!", 3000)
+    
+    def onExpanded(self):
+        self.resizeColumns()
+    
+    def collapseAllTree(self):
+        self.viewWidget().collapseAll()
+    
+    def expandSelectionTree(self):
+        tree = self.viewWidget()
+        index = tree.currentIndex()
+        if index.isValid():
+            tree.expand(index)
+        
+    def collapseSelectionTree(self):
+        tree = self.viewWidget()
+        index = tree.currentIndex()
+        if index.isValid():
+            tree.collapse(index)
+    
+    def resizeColumns(self):
+        tree = self.viewWidget()
+        model = tree.model()
+        if model is None:
+            return
+        for c in range(model.columnCount()):
+            tree.resizeColumnToContents(c)
+    
+    def goIntoTree(self):
+        tree = self.viewWidget()
+        index = tree.currentIndex()
+        base_index = self._mapToSource(index)
+        
+        if not index.isValid():
+            return
+        
+        # do not enter if the item doesn't have any children
+        if base_index.internalPointer().childCount() == 0:
+            return
+    
+        tree.setRootIndex(index)
+        tree.setCurrentIndex(index.child(0, 0))
+        self._updateToolBar()
+    
+    def goUpTree(self):
+        tree = self.viewWidget()
+        index = tree.rootIndex()
+        if not index.isValid():
+            return
+        index_parent = index.parent()
+        
+        tree.setRootIndex(index_parent)
+        tree.setCurrentIndex(index)
+        self._updateToolBar()
+    
+    def goTopTree(self):
+        tree = self.viewWidget()
+        current_root = tree.rootIndex()
+        p = current_root.parent()
+        while p.isValid():
+            p = p.parent()
+        tree.setRootIndex(p)
+        tree.setCurrentIndex(p)
+        self._updateToolBar()
+    
+    def _updateToolBar(self, current=None, previous=None):
+        if not self._with_navigation_bar:
+            return
+        tree = self.viewWidget()
+        if current is None:
+            current = tree.currentIndex()
+        goInto = False
+        
+        base_current = self._mapToSource(current)
+        if current.isValid():
+            ip = base_current.internalPointer()
+            if ip is not None:
+                goInto = ip.childCount() > 0
+        self._navigationToolBar._goIntoAction.setEnabled(goInto)
+        self._expandBar._expandSelectionAction.setEnabled(goInto)
+        self._expandBar._collapseSelectionAction.setEnabled(goInto)
+        
+        goUp = tree.rootIndex().isValid()
+        self._navigationToolBar._goUpAction.setEnabled(goUp)
+        self._navigationToolBar._goTopAction.setEnabled(goUp)
+        
+        index = tree.rootIndex()
+        self._navigationToolBar._navigationWidget.updateSelection(index)
+    
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/tree/taurusdbtree.py b/lib/taurus/qt/qtgui/tree/taurusdbtree.py
index 33d5e44..27c8a15 100644
--- a/lib/taurus/qt/qtgui/tree/taurusdbtree.py
+++ b/lib/taurus/qt/qtgui/tree/taurusdbtree.py
@@ -25,425 +25,21 @@
 
 """This module provides widgets that display the database in a tree format"""
 
-__all__ = ["QDbTreeWidget", "TaurusDbTreeWidget"]
+__all__ = ["TaurusDbTreeWidget"]
 
 __docformat__ = 'restructuredtext'
 
-import PyQt4.Qt as Qt
-
-import taurus.core
-
+from taurus.qt import Qt
+from taurus.core import TaurusElementType, TaurusDatabase
 from taurus.qt.qtcore.model import *
-import taurus.qt.qtgui.base
-import taurus.qt.qtgui.resource
-
-ElemType = taurus.core.TaurusElementType
-TaurusBaseWidget = taurus.qt.qtgui.base.TaurusBaseWidget
-getThemeIcon = taurus.qt.qtgui.resource.getThemeIcon
-getIcon = taurus.qt.qtgui.resource.getIcon
-getElementTypeIcon = taurus.qt.qtgui.resource.getElementTypeIcon
-
-
-class _NavigationLabel(Qt.QWidget):
-    """Internal widget providing a navigation label & icon"""
-    
-    def __init__(self, pixmap, text, cont, index, parent=None):
-        super(_NavigationLabel, self).__init__(parent)
-        self._index = index
-        
-        l = Qt.QHBoxLayout()
-        l.setContentsMargins(0,0,0,0)
-        self.setLayout(l)
-        if pixmap is not None:
-            p = Qt.QLabel()
-            p.setPixmap(pixmap)
-            l.addWidget(p)
-        self._label = Qt.QLabel(text)
-        l.addWidget(self._label)
-        if cont:
-            l.addWidget(Qt.QLabel(u" \u00bb "))
-    
-    def label(self):
-        return self._label
-    
-    def index(self):
-        return self._index
-
-
-class _NavigationWidget(Qt.QFrame):
-    """Internal widget that provides a navigation path to be placed in a toolbar"""
-     
-    def __init__(self, treeWidget, toolBarWidget, parent=None):
-        super(_NavigationWidget, self).__init__(parent)
-        self._tree = treeWidget
-        self._toolbar = toolBarWidget
-        l = Qt.QHBoxLayout()
-        l.setContentsMargins(4, 0, 4, 0)
-        self.setLayout(l)
-   
-    def treeWidget(self):
-        return self._tree
-
-    def viewWidget(self):
-        return self.treeWidget().treeView()    
-
-    def toolBarWidget(self):
-        return self._toolbar
-    
-    def clean(self):
-        l = self.layout()
-        w = l.takeAt(0)
-        while w is not None:
-            w = w.widget()
-            Qt.QObject.disconnect(w, Qt.SIGNAL("clicked()"), self.onGotoNode)
-            w.setParent(None)
-            w = l.takeAt(0)
-
-    def updateSelection(self, index):
-        self.clean()
-        treeWidget = self.treeWidget()
-        viewWidget = treeWidget.treeView()
-        model = viewWidget.model()
-        src_model = treeWidget.getBaseQModel()
-        toolbar = self.toolBarWidget()
-        size = None
-        rootPixmap = getThemeIcon("go-home").pixmap(toolbar.iconSize())
-        rootText = u"Top"
-        
-        l = self.layout()
-        n = 0
-        while index.isValid():
-            src_index = treeWidget._mapToSource(index)
-            name = src_model.pyData(src_index, Qt.Qt.DisplayRole)
-            font = src_model.pyData(src_index, Qt.Qt.FontRole)
-            tooltip = src_model.pyData(src_index, Qt.Qt.ToolTipRole)
-            decoration = src_model.pyData(src_index, Qt.Qt.DecorationRole) 
-            pixmap = None
-            if isinstance(decoration, Qt.QIcon):
-                pixmap = decoration.pixmap(toolbar.iconSize())
-            elif isinstance(decoration, Qt.QPixmap):
-                pixmap = decoration
-            button = _NavigationLabel(pixmap, name, n>0, Qt.QPersistentModelIndex(index))
-            font = font or model.DftFont
-            button.setFont(font)
-            button.setToolTip(tooltip)
-            Qt.QObject.connect(button.label(), Qt.SIGNAL("linkActivated(const QString &)"), self.onGotoNode)
-            l.insertWidget(0, button)
-            index = index.parent()
-            n += 1
-        rootButton = _NavigationLabel(rootPixmap, rootText, n>0, Qt.QPersistentModelIndex(index))
-        rootButton.setFont(model.DftFont)
-        #Qt.QObject.connect(rootButton.label(), Qt.SIGNAL("linkActivated(const QString &)"), self.onGotoNode)
-        l.insertWidget(0, rootButton)
-        
-        lastLabel = l.itemAt(l.count()-1).widget()
-        
-    def onGotoNode(self, *args):
-        label = self.sender()
-        persistent_index = label.parent().index()
-        index = Qt.QModelIndex(persistent_index)
-        tree = self.viewWidget()
-        tree.setRootIndex(index)
-        tree.setCurrentIndex(index.child(0, 0))
-
-
-class _FilterWidget(Qt.QWidget):
-    """Internal widget providing quick filter to be placed in a toolbar"""
-    
-    def __init__(self, parent = None, designMode = False):
-        name = self.__class__.__name__
-        super(_FilterWidget, self).__init__(parent)
-        self.init()
-        
-    def init(self):
-        l = Qt.QHBoxLayout()
-        l.setContentsMargins(0,0,0,0)
-        self.setLayout(l)
-        
-        filterLineEdit = self._filterLineEdit = Qt.QLineEdit()
-        filterLineEdit.setSizePolicy(Qt.QSizePolicy(Qt.QSizePolicy.Preferred, Qt.QSizePolicy.Preferred))
-        filterLineEdit.setToolTip("Quick filter")
-        Qt.QObject.connect(filterLineEdit, Qt.SIGNAL("textChanged(const QString &)"), self._filterChanged)
-        l.addWidget(filterLineEdit)
-
-        clearFilterButton = self._clearFilterButton = Qt.QPushButton(getThemeIcon("edit-clear"), "")
-        clearFilterButton.setToolTip("Clear filter")
-        Qt.QObject.connect(clearFilterButton, Qt.SIGNAL("clicked()"), self._clearFilter)
-        l.addWidget(clearFilterButton)
-
-    def filterLineEdit(self):
-        return self._filterLineEdit
-    
-    def _clearFilter(self):
-        self.filterLineEdit().setText("")
-
-    def _filterChanged(self, text=None):
-        text = text or self.filterLineEdit().text()
-        self.emit(Qt.SIGNAL("filterChanged"), text)
+from taurus.qt.qtgui.base import TaurusBaseWidget
+from taurus.qt.qtgui.resource import getThemeIcon, getElementTypeIcon, getElementTypeIconName
+from taurustree import TaurusBaseTreeWidget
 
-
-class QDbTreeWidget(Qt.QWidget):
-    """A pure Qt widget implementing a tree with a navigation toolbar"""
-    
-    def __init__(self, parent = None):
-        super(QDbTreeWidget, self).__init__(parent)
-        self._baseQModel = None
-        self.__init()
-        
-    def __init(self):
-        l = Qt.QGridLayout()
-        l.setContentsMargins(0,0,0,0)
-        self.setLayout(l)
-
-        tb = self._toolbar = Qt.QToolBar("Taurus tree toolbar")
-        tb.setIconSize(Qt.QSize(16,16))
-        tb.setFloatable(False)
-
-        tree = self._tree = Qt.QTreeView()
-
-        sb = self._statusbar = Qt.QStatusBar()
-        sb.setSizeGripEnabled(False)
-        
-        filterWidget = self._filterWidget = _FilterWidget()
-        Qt.QObject.connect(filterWidget, Qt.SIGNAL("filterChanged"), self.setFilter)
-        tb.addWidget(filterWidget)
-        
-        tb.addSeparator()
-        self._selectAllAction = tb.addAction(getThemeIcon("edit-select-all"), "Select All", self.selectAllTree)
-        tb.addSeparator()
-        self._expandAllAction = tb.addAction(getIcon(":/actions/expand-all.svg"), "Expand All", self.expandAllTree)
-        self._collapseAllAction = tb.addAction(getIcon(":/actions/collapse-all.svg"), "Collapse All", tree.collapseAll)
-        tb.addSeparator()
-        self._refreshAction = tb.addAction(getThemeIcon("view-refresh"), "Refresh", self.refreshTree)
-        tb.addSeparator()
-        self._goIntoAction = tb.addAction(getThemeIcon("go-down"), "Go Into", self.goIntoTree)
-        self._goUpAction = tb.addAction(getThemeIcon("go-up"), "Go Up", self.goUpTree)
-        self._goTopAction = tb.addAction(getThemeIcon("go-top"), "Go Top", self.goTopTree)
-        
-        self._goIntoAction.setToolTip("Go into the selected item")
-        self._goUpAction.setToolTip("Go up one level")
-        self._goTopAction.setToolTip("Go to top level")
-
-        tb.addSeparator()
-        self._navigationBar = _NavigationWidget(self, tb)
-        tb.addWidget(self._navigationBar )
-        l.setMenuBar(tb)
-
-        tree.setSortingEnabled(True)
-        tree.setUniformRowHeights(True)
-        tree.setAlternatingRowColors(True)
-        tree.setSelectionBehavior(Qt.QTreeView.SelectRows)
-        tree.setSelectionMode(Qt.QTreeView.ExtendedSelection)
-        tree.setDragEnabled(True)
-        tree.setDropIndicatorShown(True)
-        
-        Qt.QObject.connect(tree, Qt.SIGNAL("expanded(QModelIndex)"), self.onExpanded)
-        Qt.QObject.connect(tree, Qt.SIGNAL("clicked(QModelIndex)"), self._onClicked)
-        Qt.QObject.connect(tree, Qt.SIGNAL("doubleClicked(QModelIndex)"), self._onDoubleClicked)
-        h = tree.header()
-        h.setResizeMode(0, Qt.QHeaderView.Stretch)
-        l.addWidget(tree, 0, 0)
-        l.addWidget(sb, 1 ,0)
-
-    def resizeColumns(self):
-        tree = self.treeView()
-        model = tree.model()
-        if model is None:
-            return
-        for c in range(model.columnCount()):
-            tree.resizeColumnToContents(c)
-
-    def refreshTree(self):
-        self.getQModel().refresh(True)
-
-    def selectAllTree(self):
-        tree = self.treeView()
-        tree.selectAll()
-
-    def expandAllTree(self):
-        self._statusbar.showMessage("Expanding all nodes... (it may take a few seconds)")
-        tree = self.treeView()
-        Qt.QTimer.singleShot(0, self._expandTree)
-
-    def _expandTree(self):
-        tree = self.treeView()
-        tree.expandAll()
-        self._statusbar.showMessage("All nodes expanded!", 3000)
-
-    def onExpanded(self):
-        self.resizeColumns()
-        
-    def _onClicked (self, index):
-        '''Emits an "itemClicked" signal with with the clicked item and column as arguments'''
-        item = self._mapToSource(index).internalPointer()
-        self.emit(Qt.SIGNAL('itemClicked'),item, index.column())
-        
-    def _onDoubleClicked (self, index):
-        '''Emits an "itemDoubleClicked" signal with the clicked item and column as arguments'''
-        item = self._mapToSource(index).internalPointer()
-        self.emit(Qt.SIGNAL('itemDoubleClicked'),item, index.column())
-
-    def treeView(self):
-        return self._tree
-    
-    def toolBar(self):
-        return self._toolbar
-
-    def goIntoAction(self):
-        return self._goIntoAction
-    
-    def goTopAction(self):
-        return self._goTopAction
-    
-    def goUpAction(self):
-        return self._goUpAction
-
-    def getQModel(self):
-        return self.treeView().model()
-
-    def getBaseQModel(self):
-        return self._baseQModel
-
-    def usesProxyQModel(self):
-        return isinstance(self.getQModel(), Qt.QAbstractProxyModel)
-
-    def _mapToSource(self, index):
-        if not self.usesProxyQModel():
-            return index
-        model = self.getQModel()
-        while isinstance(model, Qt.QAbstractProxyModel):
-            index = model.mapToSource(index)
-            model = model.sourceModel()
-        return index
-
-    def setQModel(self, qmodel):
-        
-        self._baseQModel = qmodel
-        while isinstance(self._baseQModel, Qt.QAbstractProxyModel):
-            self._baseQModel = self._baseQModel.sourceModel()
-        
-        tree = self.treeView()
-        old_selection_model = tree.selectionModel()
-        CC = 'currentChanged(const QModelIndex &,const QModelIndex &)'
-        SC = 'selectionChanged(QItemSelection &, QItemSelection &)'
-        if old_selection_model is not None:
-            Qt.QObject.disconnect(old_selection_model, Qt.SIGNAL(CC),
-                                  self.treeCurrentIndexChanged)
-            Qt.QObject.disconnect(old_selection_model, Qt.SIGNAL(SC),
-                                  self.treeSelectionChanged)
-        tree.setModel(qmodel)
-        new_selection_model = tree.selectionModel()
-        if new_selection_model is not None:
-            Qt.QObject.connect(new_selection_model, Qt.SIGNAL(CC),
-                               self.treeCurrentIndexChanged)
-            Qt.QObject.connect(new_selection_model, Qt.SIGNAL(SC),
-                               self.treeSelectionChanged)
-        tree.setCurrentIndex(tree.rootIndex())
-        self._updateToolBar()
-    
-    def treeSelectionChanged(self, selected, deselected):
-        self.emit(Qt.SIGNAL("itemSelectionChanged"))
-    
-    def treeCurrentIndexChanged(self, current, previous):
-        # if there is a proxy model we have to translate the selection
-        base_current = self._mapToSource(current)
-        base_previous = self._mapToSource(previous)
-        
-        self._updateToolBar(current)
-        
-        if base_current.isValid():
-            currentTaurusTreeItem = base_current.internalPointer()
-        else:
-            currentTaurusTreeItem = None
-            
-        if base_previous.isValid():
-            previousTaurusTreeItem = base_previous.internalPointer()
-        else:
-            previousTaurusTreeItem = None
-        self.emit(Qt.SIGNAL("currentItemChanged"), currentTaurusTreeItem, previousTaurusTreeItem)
-
-    def goIntoTree(self):
-        index = self._tree.currentIndex()
-        base_index = self._mapToSource(index)
-        
-        if not index.isValid():
-            return
-        
-        # do not enter if the item doesn't have any children
-        if base_index.internalPointer().childCount() == 0:
-            return
-
-        self._tree.setRootIndex(index)
-        self._tree.setCurrentIndex(index.child(0, 0))
-        self._updateToolBar()
-    
-    def goUpTree(self):
-        tree = self.treeView()
-        index = tree.rootIndex()
-        if not index.isValid():
-            return
-        index_parent = index.parent()
-        
-        tree.setRootIndex(index_parent)
-        tree.setCurrentIndex(index)
-        self._updateToolBar()
-
-    def goTopTree(self):
-        tree = self.treeView()
-        current_root = tree.rootIndex()
-        p = current_root.parent()
-        while p.isValid():
-            p = p.parent()
-        tree.setRootIndex(p)
-        tree.setCurrentIndex(p)
-        self._updateToolBar()
-            
-    def _updateToolBar(self, current=None, previous=None):
-        tree = self.treeView()
-        if current is None:
-            current = tree.currentIndex()
-        goInto = False
-        
-        base_current = self._mapToSource(current)
-        if current.isValid():
-            ip = base_current.internalPointer()
-            if ip is not None:
-                goInto = ip.childCount() > 0
-        self._goIntoAction.setEnabled(goInto)
-        
-        goUp = tree.rootIndex().isValid()
-        self._goUpAction.setEnabled(goUp)
-        self._goTopAction.setEnabled(goUp)
-        
-        index = tree.rootIndex()
-        self._navigationBar.updateSelection(index)
-    
-    def selectedItems(self):
-        """Returns a list of all selected non-hidden items
-        
-        :return: (list<TaurusTreeItem>)
-        """
-        return [self._mapToSource(index).internalPointer() for index in self._tree.selectedIndexes()]
-    
-    def setFilter(self, filter):
-        if not self.usesProxyQModel():
-            return
-        proxy_model = self.getQModel()
-        if len(filter) > 0 and filter[0] != '^':
-            filter = '^' + filter
-        proxy_model.setFilterRegExp(filter)
-        #proxy_model.setFilterFixedString(filter)
-        #proxy_model.setFilterWildcard(filter)
-        #self.update()
-    
-    def refresh(self):
-        self.getQModel().refresh()
-
-
-class TaurusDbTreeWidget(QDbTreeWidget, TaurusBaseWidget):
-    """A class:`taurus.qt.qtgui.tree.QTrauTree` that connects to a
-    :class:`taurus.core.TaurusDatabase` model. It can show the list of database elements
-    in four different perspectives:
+class TaurusDbTreeWidget(TaurusBaseTreeWidget):
+    """A class:`taurus.qt.qtgui.tree.TaurusBaseTreeWidget` that connects to a
+    :class:`taurus.core.TaurusDatabase` model. It can show the list of database
+    elements in four different perspectives:
     
     - device : a three level hierarchy of devices (domain/family/name)
     - server : a server based perspective
@@ -453,64 +49,42 @@ class TaurusDbTreeWidget(QDbTreeWidget, TaurusBaseWidget):
     seen.
     """
     
-    KnownPerspectives = { ElemType.Device : [TaurusDbDeviceProxyModel, TaurusDbDeviceModel,],
-                          ElemType.Server : [TaurusDbServerProxyModel, TaurusDbServerModel,],
-                     ElemType.DeviceClass : [TaurusDbDeviceClassProxyModel, TaurusDbDeviceClassModel,], }
+    KnownPerspectives = {
+        TaurusElementType.Device : {
+            "label"   : "By device",
+            "icon"    : getElementTypeIconName(TaurusElementType.Device),
+            "tooltip" : "View by device tree",
+            "model"   : [TaurusDbDeviceProxyModel, TaurusDbDeviceModel,],
+        },
+        'PlainDevice' : {
+            "label"   : "By plain device",
+            "icon"    : getElementTypeIconName(TaurusElementType.Device),
+            "tooltip" : "View by plain device tree",
+            "model"   : [TaurusDbDeviceProxyModel, TaurusDbPlainDeviceModel,],
+        },
+
+        TaurusElementType.Server : {
+            "label" : "By server",
+            "icon" : getElementTypeIconName(TaurusElementType.Server),
+            "tooltip" : "View by server tree",
+            "model" : [TaurusDbServerProxyModel, TaurusDbServerModel,],
+        },
+        TaurusElementType.DeviceClass : {
+            "label" : "By class",
+            "icon" : getElementTypeIconName(TaurusElementType.DeviceClass),
+            "tooltip" : "View by class tree",
+            "model" : [TaurusDbDeviceClassProxyModel, TaurusDbDeviceClassModel,], 
+        },
+    }
+
+    DftPerspective = TaurusElementType.Device
 
-    DftPerspective = ElemType.Device
-
-    def __init__(self, parent=None, designMode=False, perspective=None, proxy=None):
-        name = self.__class__.__name__
-        if perspective is None: 
-            perspective = self.DftPerspective
-        self._perspective = perspective
-        self._proxyModel = proxy
-        self.call__init__wo_kw(QDbTreeWidget, parent)
-        self.call__init__(TaurusBaseWidget, name, designMode=designMode)
-        self.__init()
-    
-    def __init(self):
-        qmodel_classes = self.KnownPerspectives[self._perspective]
-        qmodel_class, qmodel_proxy_classes = qmodel_classes[-1], qmodel_classes[:-1]
-        qmodel_proxy_classes.reverse()
-        qmodel = qmodel_class(self)
-        qmodel_source = qmodel
-        if self._proxyModel is None:
-            for qmodel_proxy_class in qmodel_proxy_classes:
-                qproxy = qmodel_proxy_class(self)
-                qproxy.setSourceModel(qmodel_source)
-                qmodel_source = qproxy
-        else:
-            self._proxyModel.setSourceModel(qmodel_source)
-            qmodel_source = self._proxyModel
-        self.setQModel(qmodel_source)
+    def getModelClass(self):
+        return TaurusDatabase
     
     def sizeHint(self):
         return Qt.QSize(1024, 512)
 
-    def perspective(self):
-        return self._perspective
-        
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # TaurusBaseWidget overwriting
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-
-    def updateStyle(self):
-        """overwritten from class:`taurus.qt.qtgui.base.TaurusBaseWidget`. It is called when
-        the taurus model changes."""
-        self.resizeColumns()
-    
-    def setModel(self, m):
-        TaurusBaseWidget.setModel(self, m)
-
-        tree, db = self.treeView(), self.getModelObj()
-        model = tree.model()
-        if model is None: return
-        model.setDataSource(db)
-    
-    def getModelClass(self):
-        return taurus.core.TaurusDatabase
-
     @classmethod
     def getQtDesignerPluginInfo(cls):
         ret = TaurusBaseWidget.getQtDesignerPluginInfo()
@@ -518,27 +92,6 @@ class TaurusDbTreeWidget(QDbTreeWidget, TaurusBaseWidget):
         ret['group'] = 'Taurus Item Widgets'
         ret['icon'] = ":/designer/listview.png"
         return ret
-    
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # QT property definition
-    #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    
-    #: This property holds the unique URI string representing the model name 
-    #: with which this widget will get its data from. The convention used for 
-    #: the string can be found :ref:`here <model-concept>`.
-    #: 
-    #: In case the property :attr:`useParentModel` is set to True, the model 
-    #: text must start with a '/' followed by the attribute name.
-    #:
-    #: **Access functions:**
-    #:
-    #:     * :meth:`TaurusBaseWidget.getModel`
-    #:     * :meth:`TaurusBaseWidget.setModel`
-    #:     * :meth:`TaurusBaseWidget.resetModel`
-    #:
-    #: .. seealso:: :ref:`model-concept`
-    model = Qt.pyqtProperty("QString", TaurusBaseWidget.getModel, setModel,
-                            TaurusBaseWidget.resetModel)
 
 
 class _TaurusTreePanel(Qt.QWidget, TaurusBaseWidget):
@@ -565,28 +118,28 @@ class _TaurusTreePanel(Qt.QWidget, TaurusBaseWidget):
 #        l.addWidget(tb, 0, 0)
         
         main_panel = Qt.QTabWidget()
-        self._device_tree_view = TaurusDbTreeWidget(perspective=ElemType.Device)
+        self._device_tree_view = TaurusDbTreeWidget(perspective=TaurusElementType.Device)
         self._device_table_view = Qt.QTableView()
         self._device_table_view.setModel(TaurusDbBaseModel())
         self._device_list_view = Qt.QListView()
         self._device_list_view.setModel(TaurusDbSimpleDeviceModel())
-        self._server_tree_view = TaurusDbTreeWidget(perspective=ElemType.Server)
-        self._class_tree_view = TaurusDbTreeWidget(perspective=ElemType.DeviceClass)
+        self._server_tree_view = TaurusDbTreeWidget(perspective=TaurusElementType.Server)
+        self._class_tree_view = TaurusDbTreeWidget(perspective=TaurusElementType.DeviceClass)
         
         self._device_combo_view = Qt.QWidget()
         combo_form = Qt.QFormLayout()
         self._device_combo_view.setLayout(combo_form)
         
-        self._combo_dev_tree_widget = TaurusDbTreeWidget(perspective=ElemType.Device)
+        self._combo_dev_tree_widget = TaurusDbTreeWidget(perspective=TaurusElementType.Device)
         qmodel = self._combo_dev_tree_widget.getQModel()
-        qmodel.setSelectables([ElemType.Member])
+        qmodel.setSelectables([TaurusElementType.Member])
         device_combo = Qt.QComboBox()
         device_combo.setModel(qmodel)
         device_combo.setMaxVisibleItems(20)
         device_combo.setView(self._combo_dev_tree_widget.treeView())
         combo_form.addRow("Device selector (by device hierarchy):", device_combo)
         
-        self._combo_attr_tree_widget = TaurusDbTreeWidget(perspective=ElemType.Device)
+        self._combo_attr_tree_widget = TaurusDbTreeWidget(perspective=TaurusElementType.Device)
         qmodel = self._combo_attr_tree_widget.getQModel()
         device_combo = Qt.QComboBox()
         device_combo.setModel(qmodel)
@@ -597,7 +150,7 @@ class _TaurusTreePanel(Qt.QWidget, TaurusBaseWidget):
         self._combo_dev_table_view = Qt.QTableView()
         self._combo_dev_table_view.setModel(TaurusDbBaseModel())
         qmodel = self._combo_dev_table_view.model()
-        qmodel.setSelectables([ElemType.Device])
+        qmodel.setSelectables([TaurusElementType.Device])
         device_combo = Qt.QComboBox()
         device_combo.setModel(qmodel)
         device_combo.setMaxVisibleItems(20)
@@ -689,7 +242,7 @@ class _TaurusTreePanel(Qt.QWidget, TaurusBaseWidget):
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
     
     def getModelClass(self):
-        return taurus.core.TaurusDatabase
+        return TaurusDatabase
     
     @Qt.pyqtSignature("setModel(QString)")
     def setModel(self, model):
@@ -723,13 +276,13 @@ class _TaurusTreePanel(Qt.QWidget, TaurusBaseWidget):
 
 def main_TaurusTreePanel(host):
     w = _TaurusTreePanel()
-    w.setWindowIcon(getElementTypeIcon(ElemType.Device))
+    w.setWindowIcon(getElementTypeIcon(TaurusElementType.Device))
     w.setWindowTitle("A Taurus Tree Example")
     w.setModel(host)
     w.show()
     return w
 
-def main_TaurusDbTreeWidget(host, perspective=ElemType.Device):
+def main_TaurusDbTreeWidget(host, perspective=TaurusElementType.Device):
     w = TaurusDbTreeWidget(perspective=perspective)
     w.setWindowIcon(getElementTypeIcon(perspective))
     w.setWindowTitle("A Taurus Tree Example")
@@ -739,11 +292,11 @@ def main_TaurusDbTreeWidget(host, perspective=ElemType.Device):
 
 def demo():
     """DB panels"""
-
+    import taurus
     db = taurus.Database()
     host = db.getNormalName()
     w =main_TaurusTreePanel(host)
-    # w = main_TaurusDbTreeWidget(host, ElemType.Device)
+    # w = main_TaurusDbTreeWidget(host, TaurusElementType.Device)
     
     return w
 
diff --git a/lib/taurus/qt/qtgui/tree/taurusdevicetree.py b/lib/taurus/qt/qtgui/tree/taurusdevicetree.py
index 3e9d9e0..3b1c95f 100755
--- a/lib/taurus/qt/qtgui/tree/taurusdevicetree.py
+++ b/lib/taurus/qt/qtgui/tree/taurusdevicetree.py
@@ -36,7 +36,8 @@ import subprocess
 try:import icons_dev_tree
 except:icons_dev_tree = None
 
-from PyQt4 import QtCore, QtGui, Qt, Qwt5
+from taurus.qt import Qt, QtCore, QtGui
+from PyQt4 import Qwt5
 
 import taurus.core
 from taurus.core.util import DEVICE_STATE_PALETTE,ATTRIBUTE_QUALITY_PALETTE
diff --git a/lib/taurus/qt/qtgui/graphic/taurusgraphicview.py b/lib/taurus/qt/qtgui/tree/taurustree.py
similarity index 56%
copy from lib/taurus/qt/qtgui/graphic/taurusgraphicview.py
copy to lib/taurus/qt/qtgui/tree/taurustree.py
index b7937dc..dc5e55d 100644
--- a/lib/taurus/qt/qtgui/graphic/taurusgraphicview.py
+++ b/lib/taurus/qt/qtgui/tree/taurustree.py
@@ -23,43 +23,32 @@
 ##
 #############################################################################
 
-"""
-taurusgraphicview.py: 
-"""
+"""This module provides a base widget that can be used to display a taurus 
+model in a tree widget"""
 
-#__all__ = []
+__all__ = ["TaurusBaseTreeWidget"]
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
+from taurus.qt.qtgui.model import TaurusBaseModelWidget
+from qtree import QBaseTreeWidget
 
-from taurus.qt.qtgui.base import TaurusBaseWidget
 
-class TaurusGraphicsView(Qt.QGraphicsView, TaurusBaseWidget):
-    
-    def __init__(self, parent = None, designMode = False):
-        name = self.__class__.__name__
-        self.call__init__wo_kw(Qt.QGraphicsView, parent)
-        self.call__init__(TaurusBaseWidget, name, designMode=designMode)
-        self.defineStyle()
+class TaurusBaseTreeWidget(QBaseTreeWidget, TaurusBaseModelWidget):
 
-    def defineStyle(self):
-        self.updateStyle()
+    def __init__(self, parent=None, designMode=False, with_navigation_bar=True,
+                 with_filter_widget=True, perspective=None, proxy=None):
+        self.call__init__(QBaseTreeWidget, parent, designMode=designMode,
+                          with_navigation_bar=with_navigation_bar,
+                          with_filter_widget=with_filter_widget)
+        self.call__init__(TaurusBaseModelWidget, designMode=designMode,
+                          perspective=perspective, proxy=proxy)
 
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
-    # TaurusBaseWidget over writing
+    # TaurusBaseWidget overwriting
     #-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-
 
-    def isReadOnly(self):
-        return True
-
     def updateStyle(self):
-        self.update()
-
-    @classmethod
-    def getQtDesignerPluginInfo(cls):
-        ret = TaurusBaseWidget.getQtDesignerPluginInfo()
-        ret['module'] = 'taurus.qt.qtgui.graphic'
-        ret['group'] = 'Taurus Display Widgets'
-        ret['icon'] = ":/designer/graphicsview.png"
-        return ret
+        """overwritten from class:`taurus.qt.qtgui.base.TaurusBaseWidget`. It is called when
+        the taurus model changes."""
+        self.resizeColumns()
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/util/__init__.py b/lib/taurus/qt/qtgui/util/__init__.py
index eebee87..15da35e 100644
--- a/lib/taurus/qt/qtgui/util/__init__.py
+++ b/lib/taurus/qt/qtgui/util/__init__.py
@@ -31,4 +31,5 @@ __docformat__ = 'restructuredtext'
 from .taurusactionfactory import *
 from .taurusaction import *
 from .tauruscolor import *
-from .tauruswidgetfactory import *
\ No newline at end of file
+from .tauruswidgetfactory import *
+from .taurusscreenshot import *
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/util/taurusaction.py b/lib/taurus/qt/qtgui/util/taurusaction.py
index f0bf0e2..6de6843 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 PyQt4 import Qt
+from taurus.qt import Qt
 from taurus.qt.qtcore.configuration import BaseConfigurableClass
 from taurus.qt.qtgui.resource import getThemeIcon
 
@@ -247,6 +247,7 @@ class AttributeAllConfigAction(TaurusAction):
         self.setText("All...")
         
     def actionTriggered(self):
+        raise NotImplementedError('This action is not yet implemented')
         taurus_widget = self.parent()
         import dialog
         d = dialog.AttributeConfigDialog()
diff --git a/lib/taurus/qt/qtgui/util/taurusactionfactory.py b/lib/taurus/qt/qtgui/util/taurusactionfactory.py
index 412f43d..8ad22cc 100644
--- a/lib/taurus/qt/qtgui/util/taurusactionfactory.py
+++ b/lib/taurus/qt/qtgui/util/taurusactionfactory.py
@@ -32,9 +32,9 @@ __docformat__ = 'restructuredtext'
 import os
 import xml.dom.minidom
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 import taurus.core.util
-
+import taurus.qt.qtgui.resource
 import taurusaction
 
 class ActionFactory(taurus.core.util.Singleton, taurus.core.util.Logger):
@@ -117,4 +117,30 @@ class ActionFactory(taurus.core.util.Singleton, taurus.core.util.Logger):
             menu = taurusaction.TaurusMenu(widget)
             menu.buildFromXML(m_node)
         return menu
-            
\ No newline at end of file
+    
+    def createAction(self, parent, text, shortcut=None, icon=None, tip=None,
+                     toggled=None, triggered=None, data=None,
+                     context=Qt.Qt.WindowShortcut):
+        """Create a QAction"""
+        action = Qt.QAction(text, parent)
+        if triggered is not None:
+            parent.connect(action, Qt.SIGNAL("triggered()"), triggered)
+        if toggled is not None:
+            parent.connect(action, Qt.SIGNAL("toggled(bool)"), toggled)
+            action.setCheckable(True)
+        if icon is not None:
+            if isinstance(icon, (str, unicode)):
+                icon = taurus.qt.qtgui.resource.getThemeIcon(icon)
+            action.setIcon( icon )
+        if shortcut is not None:
+            action.setShortcut(shortcut)
+        if tip is not None:
+            action.setToolTip(tip)
+            action.setStatusTip(tip)
+        if data is not None:
+            action.setData(data)
+        #TODO: Hard-code all shortcuts and choose context=Qt.WidgetShortcut
+        # (this will avoid calling shortcuts from another dockwidget
+        #  since the context thing doesn't work quite well with these widgets)
+        action.setShortcutContext(context)
+        return action
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/util/tauruscolor.py b/lib/taurus/qt/qtgui/util/tauruscolor.py
index 3e9fbe0..0ae148c 100644
--- a/lib/taurus/qt/qtgui/util/tauruscolor.py
+++ b/lib/taurus/qt/qtgui/util/tauruscolor.py
@@ -27,7 +27,7 @@
 
 __docformat__ = 'restructuredtext'
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 import taurus.core.util
 
diff --git a/lib/taurus/qt/qtgui/util/taurusropepatch.py b/lib/taurus/qt/qtgui/util/taurusropepatch.py
new file mode 100644
index 0000000..d19dd4e
--- /dev/null
+++ b/lib/taurus/qt/qtgui/util/taurusropepatch.py
@@ -0,0 +1,95 @@
+#!/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/>.
+##
+#############################################################################
+
+"""Rope patch for better performances. Based on spyderlib.rope_patch"""
+
+__all__ = ["apply"]
+
+__docformat__ = 'restructuredtext'
+
+def apply():
+    """Monkey patching rope for better performances"""
+    import rope
+    if rope.VERSION not in ('0.9.3', '0.9.2'):
+        raise ImportError, "rope %s can't be patched" % rope.VERSION
+    
+    # Patching pycore.PyCore, so that forced builtin modules (i.e. modules 
+    # that were declared as 'extension_modules' in rope preferences)
+    # will be indeed recognized as builtins by rope, as expected
+    from rope.base import pycore
+    class PatchedPyCore(pycore.PyCore):
+        def get_module(self, name, folder=None):
+            """Returns a `PyObject` if the module was found."""
+            # check if this is a builtin module
+            pymod = self._builtin_module(name)
+            if pymod is not None:
+                return pymod
+            module = self.find_module(name, folder)
+            if module is None:
+                raise pycore.ModuleNotFoundError(
+                                            'Module %s not found' % name)
+            return self.resource_to_pyobject(module)
+    pycore.PyCore = PatchedPyCore
+    
+    # Patching BuiltinFunction for the calltip/doc functions to be 
+    # able to retrieve the function signatures with forced builtins
+    from rope.base import builtins, pyobjects
+    from spyderlib.utils.dochelpers import getargs
+    class PatchedBuiltinFunction(builtins.BuiltinFunction):
+        def __init__(self, returned=None, function=None, builtin=None,
+                     argnames=[], parent=None):
+            builtins._BuiltinElement.__init__(self, builtin, parent)
+            pyobjects.AbstractFunction.__init__(self)
+            self.argnames = argnames
+            if not argnames and builtin:
+                self.argnames = getargs(self.builtin)
+            if self.argnames is None:
+                self.argnames = []
+            self.returned = returned
+            self.function = function
+    builtins.BuiltinFunction = PatchedBuiltinFunction
+
+    # Patching BuiltinName for the go to definition feature to simply work 
+    # with forced builtins
+    from rope.base import libutils
+    import inspect
+    class PatchedBuiltinName(builtins.BuiltinName):
+        def _pycore(self):
+            p = self.pyobject
+            while p.parent is not None:
+                p = p.parent
+            if isinstance(p, builtins.BuiltinModule) and p.pycore is not None:
+                return p.pycore
+        def get_definition_location(self):
+            if not inspect.isbuiltin(self.pyobject):
+                _lines, lineno = inspect.getsourcelines(self.pyobject.builtin)
+                path = inspect.getfile(self.pyobject.builtin)
+                pycore = self._pycore()
+                if pycore and pycore.project:
+                    resource = libutils.path_to_resource(pycore.project, path)
+                    module = pyobjects.PyModule(pycore, None, resource)
+                    return (module, lineno)
+            return (None, None)
+    builtins.BuiltinName = PatchedBuiltinName
diff --git a/lib/taurus/qt/qtgui/util/taurusscreenshot.py b/lib/taurus/qt/qtgui/util/taurusscreenshot.py
new file mode 100644
index 0000000..051fb5a
--- /dev/null
+++ b/lib/taurus/qt/qtgui/util/taurusscreenshot.py
@@ -0,0 +1,135 @@
+#!/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 Qt color management for taurus"""
+
+__all__ = ["Grabber", "grabWidget"]
+
+__docformat__ = 'restructuredtext'
+
+import time
+import threading
+import os.path
+from taurus.core.util import Logger
+from taurus.qt import Qt
+
+
+_LOGGER = None
+
+def _getLogger():
+    global _LOGGER
+    if _LOGGER is None:
+        _LOGGER = Logger('Grabber')
+    return _LOGGER
+
+class GrabberThread(threading.Thread):
+    
+    def __init__(self, widget, fileName, period):
+        threading.Thread.__init__(self, name="Grabber")
+        self.daemon = True
+        if period <= 0:
+            raise ValueError("period MUST be greater than 0")
+        self._period = period
+        self._continue = True
+        self._grabber = Grabber(widget, fileName)
+        
+    def run(self):
+        period = self._period
+        while self._continue:
+            self._grabber.grabTrigger()
+            time.sleep(period)
+    
+    def stop(self):
+        self._continue = False
+    
+
+class Grabber(Qt.QObject, Logger):
+    
+    def __init__(self, widget, fileName):
+        Qt.QObject.__init__(self)
+        Logger.__init__(self)
+        self._widget = widget
+        self._fileName = fileName
+        self.connect(self, Qt.SIGNAL("grab"), self.onGrab)
+    
+    def grabTrigger(self):
+        self.emit(Qt.SIGNAL("grab"))
+        
+    def onGrab(self):
+        Grabber._grabWidget(self._widget, self._fileName)
+    
+    @staticmethod
+    def _grabWidget(widget, fileName):
+        _getLogger().debug("Grabbing widget to '%s':", fileName)
+        try:
+            pixmap = Qt.QPixmap.grabWidget(widget)
+            if fileName.endswith('.svg'):
+                import taurus.qt.QtSvg
+                generator = taurus.qt.QtSvg.QSvgGenerator()
+                generator.setFileName(fileName)
+                generator.setSize(pixmap.size());
+                if hasattr(generator, 'setViewBox'):
+                    viewBox = Qt.QRect(Qt.QPoint(0, 0), pixmap.size())
+                    generator.setViewBox(viewBox)
+                generator.setTitle("Taurus widget")
+                generator.setDescription("An SVG drawing created by the taurus "
+                                         "widget grabber")
+                painter = Qt.QPainter()
+                painter.begin(generator)
+                try:
+                    painter.drawPixmap(0, 0, -1, -1, pixmap)
+                finally:
+                    painter.end()
+            else:
+                pixmap.save(fileName, quality=100)
+        except:
+            _getLogger().warning("Could not save file into '%s':", fileName,
+                                 exc_info=1)
+    
+    @staticmethod
+    def grabWidget(widget, fileName, period=None):
+        """Grabs the given widget into the given image filename. If period is
+        not given (or given with None) means grab immediately once and return.
+        If period is given and >0 means grab the image every period seconds
+        
+        .. warning:
+            this method **MUST** be called from the same thread which created
+            the widget
+
+        :param widget: (Qt.QWidget) the qt widget to be grabbed
+        :param fileName: (str) the name of the image file
+        :param period: (float) period (seconds)
+        """
+        if period is None:
+            return Grabber._grabWidget(widget, fileName)
+        ret = GrabberThread(widget, fileName, period)
+        ret.start()
+        return ret
+
+
+def grabWidget(widget, fileName, period=None):
+    return Grabber.grabWidget(widget, fileName, period=period)
+    
+grabWidget.__doc__ = Grabber.grabWidget.__doc__
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/util/tauruswidget_template b/lib/taurus/qt/qtgui/util/tauruswidget_template
index 3c7a710..3cab2f0 100644
--- a/lib/taurus/qt/qtgui/util/tauruswidget_template
+++ b/lib/taurus/qt/qtgui/util/tauruswidget_template
@@ -2,7 +2,7 @@
 
 """ module containing the Tau Widget: <_TauClass_> """
 
-from PyQt4 import QtGui, QtCore
+from taurus.qt import QtGui, QtCore
 import tau.core
 from tau.widget import TauBaseWidget
 
diff --git a/lib/taurus/qt/qtgui/util/tauruswidgetfactory.py b/lib/taurus/qt/qtgui/util/tauruswidgetfactory.py
index 52db637..5031a8e 100644
--- a/lib/taurus/qt/qtgui/util/tauruswidgetfactory.py
+++ b/lib/taurus/qt/qtgui/util/tauruswidgetfactory.py
@@ -27,18 +27,44 @@
 tauruswidgetfactory.py: 
 """
 
-__all__ = ["TaurusWidgetFactory"]
+__all__ = ["TaurusWidgetFactory", "getWidgetsOfType"]
 
 __docformat__ = 'restructuredtext'
 
 import imp
 import os.path
 
-from PyQt4 import Qt
+from taurus.qt import Qt
 
 import taurus.core.util
 import taurus.qt.qtgui.base
 
+
+def _getWidgetsOfType(widget, widgets, class_or_type_or_tuple):
+    
+    if isinstance(widget, class_or_type_or_tuple):
+        widgets.append(widget)
+    for w in widget.children():
+        if isinstance(w, Qt.QWidget):
+            _getWidgetsOfType(w, widgets, class_or_type_or_tuple)
+
+def getWidgetsOfType(widget, class_or_type_or_tuple):
+    """Returns all widgets in a hierarchy of a certain type
+    
+    :param widget: the widget to be inspected
+    :type widget: Qt.QWidget
+    :param class-or-type-or-tuple: type to be checked
+    :type class-or-type-or-tuple: type class or a tuple of type classes
+    
+    :return:
+        a sequence containning all widgets in the hierarchy that match the given
+        type
+    :rtype: seq<Qt.QWidget>"""
+    widgets = []
+    _getWidgetsOfType(widget, widgets, class_or_type_or_tuple)
+    return widgets
+
+
 class TaurusWidgetFactory(taurus.core.util.Singleton, taurus.core.util.Logger):
     """The TaurusWidgetFactory is a utility class that provides information
     about all Qt widgets (Taurus and non Taurus) that are found in the
diff --git a/lib/taurus/qt/taurusqtoptions.py b/lib/taurus/qt/taurusqtoptions.py
new file mode 100644
index 0000000..b0a8307
--- /dev/null
+++ b/lib/taurus/qt/taurusqtoptions.py
@@ -0,0 +1,93 @@
+#!/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 = False
+
+def get_logger():
+    import taurus.core.util
+    return taurus.core.util.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
+
+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
+            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()
+
diff --git a/lib/taurus/qt/uic/__init__.py b/lib/taurus/qt/uic/__init__.py
index c995856..e474b3d 100644
--- a/lib/taurus/qt/uic/__init__.py
+++ b/lib/taurus/qt/uic/__init__.py
@@ -35,6 +35,7 @@ import optparse
 import lxml.etree
 
 import taurus.qt.qtgui.util
+from taurus.qt import Qt
 
 import tau2taurus_map
 
@@ -124,11 +125,15 @@ def tau2taurus(xml_source):
         extends_node.text = new_super_name
         new_custom_widget_name_list.append(new_class_name)
         new_custom_widget_node_list.append(new_custom_widget_node)
-    
-    custom_widgets_node = xml_source.find(".//customwidgets")
-    custom_widgets_node.clear() # remove all children
-    custom_widgets_node.extend(new_custom_widget_node_list)
-    
+
+    if len(new_custom_widget_node_list) > 0:
+        custom_widgets_node = xml_source.find(".//customwidgets")
+        if custom_widgets_node is None:
+            ui_node = xml_source.getroot()
+            custom_widgets_node = lxml.etree.SubElement(ui_node, "customwidgets")
+        custom_widgets_node.clear() # remove all children
+        custom_widgets_node.extend(new_custom_widget_node_list)
+
     return xml_source
 
 def resolve_inheritance(xml_source):
@@ -152,22 +157,37 @@ def resolve_inheritance(xml_source):
         class_name = class_node.text
         if not class_name in widget_klasses:
             continue
-        
         extends_node = custom_widget.find("extends")
         super_name = extends_node.text
         if super_name in custom_widget_list:
             continue
-        if not super_name in widget_klasses:
+        if super_name in dir(Qt):
             continue
-    
-        module_name, widget_klass = widget_klasses[super_name]
-        xml = _build_widget(module_name, widget_klass, widget_klasses, custom_widget_list)
+        if super_name not in widget_klasses:
+            xml = _build_plain_widget(super_name)
+        else:
+            module_name, widget_klass = widget_klasses[super_name]
+            xml = _build_widget(module_name, widget_klass, widget_klasses, custom_widget_list)
         new_custom_widgets.extend(xml)
     
-    custom_widgets_node = xml_source.find(".//customwidgets")
-    custom_widgets_node.extend(new_custom_widgets)
+    if len(new_custom_widgets) > 0:
+        custom_widgets_node = xml_source.find(".//customwidgets")
+        if custom_widgets_node is None:
+            ui_node = xml_source.getroot()
+            custom_widgets_node = lxml.etree.SubElement(ui_node, "customwidgets")
+        custom_widgets_node.extend(new_custom_widgets)
     return xml_source
 
+def _build_plain_widget(widget_klass_name):
+    custom_widget_node = lxml.etree.Element("customwidget")
+    ret = [ custom_widget_node ]
+    class_node = lxml.etree.SubElement(custom_widget_node, "class")
+    header_node = lxml.etree.SubElement(custom_widget_node, "header")
+    
+    class_node.text = widget_klass_name
+    header_node.text = ""
+    return ret
+
 def _build_widget(module_name, widget_klass, widget_klasses, existing_widgets):
     """Builds a set of "customwidget" xml nodes necessary for the given widget"""
     
@@ -187,9 +207,13 @@ def _build_widget(module_name, widget_klass, widget_klasses, existing_widgets):
     
     existing_widgets.append(widget_klass_name)
     
-    if widget_super_klass_name in widget_klasses and widget_super_klass_name not in existing_widgets:
-        super_module_name, super_klass = widget_klasses[widget_super_klass_name]
-        new_custom_widget_nodes = _build_widget(super_module_name, super_klass, widget_klasses, existing_widgets)
+    if widget_super_klass_name not in widget_klasses and widget_super_klass_name not in dir(Qt):
+        new_custom_widget_nodes = _build_plain_widget(widget_super_klass_name)
         ret.extend(new_custom_widget_nodes)
+    else:
+        if widget_super_klass_name in widget_klasses and widget_super_klass_name not in existing_widgets:
+            super_module_name, super_klass = widget_klasses[widget_super_klass_name]
+            new_custom_widget_nodes = _build_widget(super_module_name, super_klass, widget_klasses, existing_widgets)
+            ret.extend(new_custom_widget_nodes)
     
     return ret
\ No newline at end of file
diff --git a/scripts/taurusgui b/scripts/macroexecutor
similarity index 93%
copy from scripts/taurusgui
copy to scripts/macroexecutor
index 00ce858..b3acfd2 100755
--- a/scripts/taurusgui
+++ b/scripts/macroexecutor
@@ -23,5 +23,5 @@
 ##
 #############################################################################
 
-from taurus.qt.qtgui.taurusgui import main
-main()
+from taurus.qt.qtgui.extra_macroexecutor.macroexecutor import main
+main()
\ No newline at end of file
diff --git a/scripts/taurusgui b/scripts/sequencer
similarity index 93%
copy from scripts/taurusgui
copy to scripts/sequencer
index 00ce858..73a4652 100755
--- a/scripts/taurusgui
+++ b/scripts/sequencer
@@ -23,5 +23,5 @@
 ##
 #############################################################################
 
-from taurus.qt.qtgui.taurusgui import main
-main()
+from taurus.qt.qtgui.extra_macroexecutor.sequenceeditor import main
+main()
\ No newline at end of file
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py b/scripts/tauruscurve
old mode 100644
new mode 100755
similarity index 84%
copy from lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
copy to scripts/tauruscurve
index d50df2e..515bd93
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
+++ b/scripts/tauruscurve
@@ -23,8 +23,8 @@
 ##
 #############################################################################
 
-"""
-__init__.py: 
-"""
-
-from sequenceeditor import TaurusSequencer, TaurusSequencerWidget
\ No newline at end of file
+try:
+	from taurus.qt.qtgui.extra_guiqwt.plot import taurusCurveDlgMain
+	taurusCurveDlgMain()
+except Exception, e:
+	print 'taurusCurveDlgMain cannot be launched.\n Reason: %s\n\n'%repr(e)
diff --git a/scripts/taurusgui b/scripts/taurusgui
index 00ce858..22ba33f 100755
--- a/scripts/taurusgui
+++ b/scripts/taurusgui
@@ -23,5 +23,5 @@
 ##
 #############################################################################
 
-from taurus.qt.qtgui.taurusgui import main
+from taurus.qt.qtgui.taurusgui.taurusgui import main
 main()
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py b/scripts/taurusimage
old mode 100644
new mode 100755
similarity index 84%
copy from lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
copy to scripts/taurusimage
index d50df2e..ab60a16
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
+++ b/scripts/taurusimage
@@ -23,8 +23,8 @@
 ##
 #############################################################################
 
-"""
-__init__.py: 
-"""
-
-from sequenceeditor import TaurusSequencer, TaurusSequencerWidget
\ No newline at end of file
+try:
+	from taurus.qt.qtgui.extra_guiqwt.plot import taurusImageDlgMain
+	taurusImageDlgMain()
+except Exception, e:
+	print 'taurusImageDlgMain cannot be launched.\n Reason: %s\n\n'%repr(e)
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py b/scripts/taurustrend1d
old mode 100644
new mode 100755
similarity index 85%
copy from lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
copy to scripts/taurustrend1d
index d50df2e..37b6b29
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
+++ b/scripts/taurustrend1d
@@ -23,8 +23,8 @@
 ##
 #############################################################################
 
-"""
-__init__.py: 
-"""
-
-from sequenceeditor import TaurusSequencer, TaurusSequencerWidget
\ No newline at end of file
+try:
+	from taurus.qt.qtgui.extra_guiqwt.plot import taurusTrendDlgMain
+	taurusTrendDlgMain()
+except Exception, e:
+	print 'TaurusTrend1D cannot be launched.\n Reason: %s\n\n'%repr(e)
diff --git a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py b/scripts/taurustrend2d
old mode 100644
new mode 100755
similarity index 84%
copy from lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
copy to scripts/taurustrend2d
index d50df2e..3ff9a64
--- a/lib/taurus/qt/qtgui/extra_macroexecutor/sequenceeditor/__init__.py
+++ b/scripts/taurustrend2d
@@ -23,8 +23,8 @@
 ##
 #############################################################################
 
-"""
-__init__.py: 
-"""
-
-from sequenceeditor import TaurusSequencer, TaurusSequencerWidget
\ No newline at end of file
+try:
+	from taurus.qt.qtgui.extra_guiqwt.taurustrend2d import taurusTrend2DMain
+	taurusTrend2DMain()
+except Exception, e:
+	print 'TaurusTrend2D cannot be launched.\n Reason: %s\n\n'%repr(e)
diff --git a/setup.py b/setup.py
index beda030..20a8e0b 100644
--- a/setup.py
+++ b/setup.py
@@ -72,10 +72,11 @@ packages = [
     'taurus.core.util.argparse',
     'taurus.core.resource',
     'taurus.core.simulation',
+    'taurus.core.evaluation',
     'taurus.core.tango',
-    'taurus.core.tango.sardana', 
+    'taurus.core.tango.sardana',
     'taurus.core.tango.img',
-    'taurus.core.tango.macroserver',
+    'taurus.core.tango.sardana',
     
     'taurus.qt',
 
@@ -85,7 +86,7 @@ packages = [
     'taurus.qt.qtcore.mimetypes',
     'taurus.qt.qtcore.model',
     'taurus.qt.qtcore.tango',
-    'taurus.qt.qtcore.tango.macroserver',
+    'taurus.qt.qtcore.tango.sardana',
     'taurus.qt.qtcore.util',
 
     'taurus.qt.qtdesigner',
@@ -95,6 +96,7 @@ packages = [
     'taurus.qt.qtgui.application',
     'taurus.qt.qtgui.base',
     'taurus.qt.qtgui.button',
+    'taurus.qt.qtgui.console',
     'taurus.qt.qtgui.container',
     'taurus.qt.qtgui.dialog',
     'taurus.qt.qtgui.display',
@@ -104,12 +106,14 @@ packages = [
     'taurus.qt.qtgui.graphic.jdraw',
     'taurus.qt.qtgui.image',
     'taurus.qt.qtgui.input',
+    'taurus.qt.qtgui.model',
     'taurus.qt.qtgui.panel',
     'taurus.qt.qtgui.panel.ui',
     'taurus.qt.qtgui.plot',
     'taurus.qt.qtgui.plot.ui',
     'taurus.qt.qtgui.resource',
     'taurus.qt.qtgui.shell',
+    'taurus.qt.qtgui.style',
     'taurus.qt.qtgui.table',
     'taurus.qt.qtgui.taurusgui',
     'taurus.qt.qtgui.taurusgui.conf',
@@ -136,6 +140,13 @@ extra_packages = [
     'taurus.qt.qtgui.extra_taurusservers',
     
     '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',
 ]
 
 provides = [
@@ -144,19 +155,20 @@ provides = [
     'taurus.qt',
 ]
 
-requires = [ 
+requires = [
     'numpy (>=1.1)',
     'PyTango (>=7.1)',
     'PyQt4 (>=4.4)',
     'PyQt4.Qwt5 (>=5.2.0)',   # plotting
     'ply (>=2.3)',            # jdraw parser
     'lxml (>=2.1)',           # tau2taurus, taurusuic4
-    'spyder (>=2.0)',         # shell
+    'spyder (>=2.0)',         # shell, editor
 ]
 
 def get_resource_package_data():
     data = ['*.rcc']
-    tango_icons_dir = abspath('lib','taurus','qt','qtgui','resource', 'tango-icons')
+    tango_icons_dir = abspath('lib', 'taurus', 'qt', 'qtgui', 'resource',
+                              'tango-icons')
     for tango_icon_item in os.listdir(tango_icons_dir):
         if tango_icon_item.startswith("."):
             continue
@@ -171,6 +183,7 @@ package_data = {
     'taurus.qt.qtgui.util'     : ['tauruswidget_template', 
                                   'tauruswidget_qtdesignerplugin_template'],
     'taurus.qt.uic'            : ['pyuic4/*'],
+    'taurus.qt.qtgui.taurusgui.conf.tgconf_example01' : ['images/*'],
 }
 
 def get_script_files():
@@ -269,13 +282,12 @@ class build_resources(Command):
             result[1].extend(result2[1])
             result[2].extend(result2[2])
             result[3].extend(result2[3])
-            result[4].extend(result2[4])
 
             catalog.write("<h1>Index</h1>\n<ul>")
-            for anchor in result[4]:
+            for anchor in result[3]:
                 catalog.write("<li>%s</li>\n" % anchor)
             catalog.write("</ul>\n")
-            catalog.writelines(result[3])
+            catalog.writelines(result[2])
         finally:
             catalog.write("""</body></html>""")
             catalog.close()
@@ -334,16 +346,7 @@ class build_resources(Command):
         else:
             print("[DONE]", file=out)
         
-        # Generate python resource file
-        print("Generating %s... " % pyrcc_filename, file=out, end='')
-        out.flush()
-        cmd = 'pyrcc4 -compress 1 -o %s %s' % (pyrcc_filename, qrc_filename)
-        if os.system(cmd):
-            print("[FAILED]", file=out)
-        else:
-            print("[DONE]", file=out)
-        
-        return [ [qrc_filename], [rcc_filename], [pyrcc_filename], [html], [anchor] ]
+        return [ [qrc_filename], [rcc_filename], [html], [anchor] ]
     
     def _build_res(self, abs_dir, bases=list()):
         """Builds the resources in the abs_dir recursively.
@@ -368,7 +371,6 @@ class build_resources(Command):
                 result[1].extend(ret[1])
                 result[2].extend(ret[2])
                 result[3].extend(ret[3])
-                result[4].extend(ret[4])
             elif os.path.splitext(abs_elem)[1][1:].lower() in build_resources.AllowedExt:
                 local_elems.append(elem)
         
@@ -414,8 +416,8 @@ class build_resources(Command):
                 html += '</table>\n'
                 f.close()
             result[0].append(qrc_filename)
-            result[3].append(html)
-            result[4].append(anchor)
+            result[2].append(html)
+            result[3].append(anchor)
             print("[DONE]", file=out)
             
             # Generate binary rcc file
@@ -428,15 +430,6 @@ class build_resources(Command):
                 result[1].append(rcc_filename)
                 print("[DONE]", file=out)
             
-            # Generate python resource file
-            print("Generating %s... " % pyrcc_filename, file=out, end='')
-            out.flush()
-            cmd = 'pyrcc4 -compress 1 -o %s %s' % (pyrcc_filename, qrc_filename)
-            if os.system(cmd):
-                print("[FAILED]", file=out)
-            else:
-                result[2].append(pyrcc_filename)
-                print("[DONE]", file=out)
         return result
 
 
@@ -624,7 +617,7 @@ class build_doc_api(Command):
         
         docpreffix = abspath('doc', 'source', 'devel', 'api')
         templatespath = abspath('doc')
-        rstCreator = auto_rst4api.Auto_rst4API_Creator(exclude_patterns=['.*\.ui'],
+        rstCreator = auto_rst4api.Auto_rst4API_Creator(exclude_patterns=['.*\.ui', '_[^\.]*[^_]'],
                                                        templatespath=templatespath,
                                                        overwrite_old=buildcmd.all_files,
                                                        verbose=self.distribution.verbose)

-- 
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