diff --git a/.gitsubprojects b/.gitsubprojects
index fbfeee2002e7fc8f8b5d5d8a832378924541079f..d0bb5bc511e1e0322521f27b26972747897561ca 100644
--- a/.gitsubprojects
+++ b/.gitsubprojects
@@ -1,10 +1,10 @@
 # -*- mode: cmake -*-
-#git_subproject( ZeroEQ https://github.com/HBPVis/ZeroEQ.git 580ec27 )
+#git_subproject( ZeroEQ https://github.com/HBPVis/ZeroEQ.git 7289016 )
 #git_subproject( Lexis https://github.com/HBPVis/Lexis.git c24dc07 )
 #git_subproject( gmrvlex https://github.com/vg-lab/gmrvlex.git c20b194 )
 #git_subproject( Brion https://github.com/BlueBrain/Brion.git 073f356 )
-git_subproject( ReTo https://github.com/gmrvvis/ReTo.git e21091c )
+git_subproject( ReTo https://github.com/gmrvvis/ReTo.git bd0c110 )
 git_subproject( SimIL https://github.com/gmrvvis/SimIL.git bbc4bd7f )
 git_subproject( scoop https://github.com/gmrvvis/scoop.git b3326cd )
-git_subproject( plab https://github.com/vg-lab/particlelab.git 675f9088 )
-git_subproject( acuterecorder https://github.com/vg-lab/AcuteRecorder.git 0b84c2b1 )
+git_subproject( plab https://github.com/vg-lab/particlelab.git f7fecd1 )
+git_subproject( acuterecorder https://github.com/vg-lab/AcuteRecorder.git e17cce7 )
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e8b5c962912449567922c9719daec5a97b1d71d3..ce8262e6c5a5549476cad778045aafdc1e984590 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -9,7 +9,7 @@
 cmake_minimum_required( VERSION 3.1 FATAL_ERROR )
 
 # visimpl project and version
-project( visimpl VERSION 1.8.1 )
+project( visimpl VERSION 1.8.2 )
 set( visimpl_VERSION_ABI 6 )
 
 SET( VISIMPL_LICENSE "GPL")
diff --git a/stackviz/MainWindow.cpp b/stackviz/MainWindow.cpp
index 299567871e61ec3d81d59e7f616a2f076666bf7a..c0cd685bb4b3b994f2db0de1bc4e80fb8b32d01c 100644
--- a/stackviz/MainWindow.cpp
+++ b/stackviz/MainWindow.cpp
@@ -1001,7 +1001,7 @@ void MainWindow::aboutDialog( void )
 #endif
 
 #ifdef VISIMPL_USE_ZEROEQ
-    "</li><li>ZeroEQ " + ZEROEQ_REV_STRING +
+    "</li><li>ZeroEQ " + zeroeq::Version::getRevString().c_str() +
 #else
     "</li><li>ZeroEQ " + tr ("support not built.") +
 #endif
@@ -1575,4 +1575,4 @@ void MainWindow::openGroupsThroughDialog()
   }
 
   QApplication::restoreOverrideCursor();
-}
\ No newline at end of file
+}
diff --git a/sumrice/CloseDataDialog.h b/sumrice/CloseDataDialog.h
index 7683f30746a13719a6a1e1407ea749412d4f3a16..0dd883c5e8d01369bc7b1ec559555f1760904dc4 100644
--- a/sumrice/CloseDataDialog.h
+++ b/sumrice/CloseDataDialog.h
@@ -26,6 +26,8 @@
 // Qt
 #include <QDialog>
 
+#include <sumrice/api.h>
+
 class QRadioButton;
 class QShowEvent;
 
@@ -34,7 +36,7 @@ class QShowEvent;
  *        choose closing options for REST datasets.
  *
  */
-class CloseDataDialog
+class SUMRICE_API CloseDataDialog
 : public QDialog
 {
     Q_OBJECT
diff --git a/sumrice/ConfigureRESTDialog.h b/sumrice/ConfigureRESTDialog.h
index 7f765441ebf4c627b3609e7c04c5e8d7cbe7c722..b0882f96798848837f168dd2f8648253bdec3f58 100644
--- a/sumrice/ConfigureRESTDialog.h
+++ b/sumrice/ConfigureRESTDialog.h
@@ -23,16 +23,19 @@
 #ifndef SUMRICE_CONFIGURERESTDIALOG_H_
 #define SUMRICE_CONFIGURERESTDIALOG_H_
 
+// Qt
 #include <QDialog>
 #include <QWidget>
 
+#include <sumrice/api.h>
+
 class QSpinBox;
 
 /** \class RESTConfigurationWidget
  * \brief Implements a widget with the REST configuration options.
  *
  */
-class RESTConfigurationWidget
+class SUMRICE_API RESTConfigurationWidget
 : public QWidget
 {
     Q_OBJECT
@@ -83,7 +86,7 @@ class RESTConfigurationWidget
  * \brief Implements a dialog to configure REST connection options.
  *
  */
-class ConfigureRESTDialog
+class SUMRICE_API ConfigureRESTDialog
 : public QDialog
 {
     Q_OBJECT
diff --git a/sumrice/ConnectRESTDialog.h b/sumrice/ConnectRESTDialog.h
index 48353f2a2241337b63cb9439b88545427a9457c2..8756585090f958e03d3a31e1ef93754a29321fb8 100644
--- a/sumrice/ConnectRESTDialog.h
+++ b/sumrice/ConnectRESTDialog.h
@@ -24,6 +24,7 @@
 #define SUMRICE_CONNECTRESTDIALOG_H_
 
 // Sumrice
+#include <sumrice/api.h>
 #include <sumrice/ConfigureRESTDialog.h>
 
 // Qt
@@ -36,7 +37,7 @@ class QLineEdit;
  * \brief Implements a dialog for a REST connection configuration.
  *
  */
-class ConnectRESTDialog
+class SUMRICE_API ConnectRESTDialog
 : public QDialog
 {
     Q_OBJECT
diff --git a/sumrice/DataInspector.h b/sumrice/DataInspector.h
index 02de720370a9bbb272f4144eb7575f3aa3f59626..49d34161ce3ef5b0020510ce93a73796ac408aa3 100644
--- a/sumrice/DataInspector.h
+++ b/sumrice/DataInspector.h
@@ -30,10 +30,13 @@
 // Simil
 #include <simil/simil.h>
 
+#include <sumrice/api.h>
+
 class QWidget;
 class QLabel;
 
-class DataInspector : public QGroupBox
+class SUMRICE_API DataInspector 
+: public QGroupBox
 {
   Q_OBJECT
 public:
diff --git a/sumrice/DisplayManagerWidget.h b/sumrice/DisplayManagerWidget.h
index b66c0b9c641eb1d30ac3ac712031e17ec8267515..fc01336d9eb553c17631725dbb14087e91b737ef 100644
--- a/sumrice/DisplayManagerWidget.h
+++ b/sumrice/DisplayManagerWidget.h
@@ -24,6 +24,7 @@
 #define DISPLAYMANAGERWIDGET_H_
 
 #include <sumrice/sumrice.h>
+#include <sumrice/api.h>
 
 class QGridLayout;
 class QWidget;
@@ -65,7 +66,7 @@ namespace visimpl
                       > TDisplayHistogramTuple;
 
 
-  class DisplayManagerWidget : public QWidget
+  class SUMRICE_API DisplayManagerWidget : public QWidget
   {
     Q_OBJECT;
 
diff --git a/sumrice/StackViz.h b/sumrice/StackViz.h
index 2b126281e3dd293c2fdbc6fcdf278b134f13adb8..e0d85e4d660f1e9f8e35dcf8966ace9aaeaf3cd3 100644
--- a/sumrice/StackViz.h
+++ b/sumrice/StackViz.h
@@ -23,6 +23,7 @@
 #ifndef STACKVIZ_H_
 #define STACKVIZ_H_
 
+// Qt
 #include <QMainWindow>
 #include <QDockWidget>
 #include <QPushButton>
@@ -33,6 +34,7 @@
 #include <QScrollArea>
 #include <QCheckBox>
 
+#include <sumrice/api.h>
 #include <sumrice/sumrice.h>
 #include <simil/simil.h>
 
@@ -41,7 +43,7 @@ namespace visimpl
 
   class DisplayManagerWidget;
 
-  class StackViz
+  class SUMRICE_API StackViz
   : public QWidget
   {
     Q_OBJECT
diff --git a/sumrice/Utils.cpp b/sumrice/Utils.cpp
index 6a6ada056930331e4f973481ed55fea748f4b5a5..5b483a86ac6445567cf21fe3f83eaf8016a36830 100644
--- a/sumrice/Utils.cpp
+++ b/sumrice/Utils.cpp
@@ -179,7 +179,7 @@ void visimpl::ZeroEQConfig::connect( const std::string& h , const uint16_t p ,
   {
     m_publisher = std::make_shared< zeroeq::Publisher >( uri_publisher ,
                                                          m_session );
-    m_subscriber = std::make_shared< zeroeq::Subscriber >( uri_subscriber );
+    m_subscriber = std::make_shared< zeroeq::Subscriber >( zeroeq::URIs{uri_subscriber} );
   }
   catch ( const std::exception& e )
   {
diff --git a/sumrice/Utils.h b/sumrice/Utils.h
index d7e811f9fada1d2dbc9d9d9c65334a3118192a2f..8b5ebd4cd414d3658c031a4603c03db9533fe6bd 100644
--- a/sumrice/Utils.h
+++ b/sumrice/Utils.h
@@ -12,6 +12,8 @@
 #include <memory>
 #include <thread>
 
+#include <sumrice/api.h>
+
 #ifdef VISIMPL_USE_ZEROEQ
 
 #include <zeroeq/zeroeq.h>
@@ -23,9 +25,9 @@
 
 namespace visimpl
 {
-  bool isValidIPAddress( const std::string& address );
+  bool SUMRICE_API isValidIPAddress( const std::string& address );
 
-  std::pair< QColor , QColor > generateColorPair( const scoop::Color& color );
+  std::pair< QColor , QColor > SUMRICE_API generateColorPair( const scoop::Color& color );
 
   template< class ForwardIt , class T , class Compare >
   ForwardIt lower_bound( ForwardIt first , ForwardIt last ,
@@ -53,7 +55,7 @@ namespace visimpl
 
 #ifdef VISIMPL_USE_ZEROEQ
 
-  class ZeroEQConfig
+  class SUMRICE_API ZeroEQConfig
   {
   public:
     /** \brief Singleton instance method.
diff --git a/visimpl/MainWindow.cpp b/visimpl/MainWindow.cpp
index ffabe20eb1bb8c68c41306aea917919c4a1e16d3..f25dc0c174ab3c5604f6961c287d4ffd04daad6f 100644
--- a/visimpl/MainWindow.cpp
+++ b/visimpl/MainWindow.cpp
@@ -87,9 +87,9 @@ template< class T >
 void ignore( const T& )
 { }
 
-constexpr const char* POSITION_KEY = "positionData";
-constexpr const char* PLANES_COLOR_KEY = "clippingPlanesColor";
-constexpr const char* GROUP_NAME = "groupName";
+constexpr const char* POSITION_KEY_ = "positionData";
+constexpr const char* PLANES_COLOR_KEY_ = "clippingPlanesColor";
+constexpr const char* GROUP_NAME_ = "groupName";
 
 namespace visimpl
 {
@@ -755,7 +755,7 @@ namespace visimpl
       #endif
 
       #ifdef VISIMPL_USE_ZEROEQ
-      "</li><li>ZeroEQ " + ZEROEQ_REV_STRING +
+      "</li><li>ZeroEQ " + zeroeq::Version::getRevString().c_str() +
       #else
       "</li><li>ZeroEQ " + tr( "support not built." ) +
       #endif
@@ -1113,7 +1113,7 @@ namespace visimpl
                                         clippingColor.name( ));
     _frameClippingColor->setMinimumSize( 20 , 20 );
     _frameClippingColor->setMaximumSize( 20 , 20 );
-    _frameClippingColor->setProperty( PLANES_COLOR_KEY , clippingColor.name( ));
+    _frameClippingColor->setProperty( PLANES_COLOR_KEY_ , clippingColor.name( ));
 
     _buttonSelectionFromClippingPlanes = new QPushButton( "To selection" );
     _buttonSelectionFromClippingPlanes->setToolTip(
@@ -1966,7 +1966,7 @@ namespace visimpl
     QWidget* container = new QWidget( );
     auto itemLayout = new QHBoxLayout( container );
     container->setLayout( itemLayout );
-    container->setProperty( GROUP_NAME ,
+    container->setProperty( GROUP_NAME_ ,
                             QString::fromStdString( group->name( )));
 
     const auto colors = _openGLWidget->colorPalette( ).colors( );
@@ -1983,7 +1983,7 @@ namespace visimpl
     tfWidget->setColorPoints( group->colorMapping( ));
     tfWidget->setSizeFunction( group->sizeFunction( ));
     tfWidget->setDialogIcon( QIcon( ":/visimpl.png" ));
-    tfWidget->setProperty( GROUP_NAME ,
+    tfWidget->setProperty( GROUP_NAME_ ,
                            QString::fromStdString( group->name( )));
 
     itemLayout->addWidget( tfWidget );
@@ -2010,14 +2010,14 @@ namespace visimpl
     auto nameButton = new QPushButton( group->name( ).c_str( ));
     nameButton->setFlat( true );
     nameButton->setObjectName( "nameButton" );
-    nameButton->setProperty( GROUP_NAME ,
+    nameButton->setProperty( GROUP_NAME_ ,
                              QString::fromStdString( group->name( )));
 
     connect( nameButton , SIGNAL( clicked( )) , this ,
              SLOT( onGroupNameClicked( )) );
 
     auto deleteButton = new QPushButton( QIcon( ":/icons/close.svg" ) , "" );
-    deleteButton->setProperty( GROUP_NAME ,
+    deleteButton->setProperty( GROUP_NAME_ ,
                                QString::fromStdString( group->name( )));
 
     connect( deleteButton , SIGNAL( clicked( )) , this ,
@@ -2074,7 +2074,7 @@ namespace visimpl
     while ( !_groupsVisButtons.empty( ))
     {
       auto container = std::get< 0 >( _groupsVisButtons.at( 0 ));
-      auto groupName = container->property( GROUP_NAME ).toString( );
+      auto groupName = container->property( GROUP_NAME_ ).toString( );
 
       removeVisualGroup( groupName );
     }
@@ -2164,7 +2164,7 @@ namespace visimpl
     {
       auto container = std::get< gr_container >( button );
       auto checkBox = std::get< gr_checkbox >( button );
-      auto name = container->property( GROUP_NAME )
+      auto name = container->property( GROUP_NAME_ )
         .toString( ).toStdString( );
       auto group = _openGLWidget->domainManager( )->getGroup( name );
 
@@ -2398,7 +2398,7 @@ namespace visimpl
     auto tfw = qobject_cast< TransferFunctionWidget* >( sender( ));
     if ( tfw )
     {
-      auto groupName = tfw->property( GROUP_NAME ).toString( );
+      auto groupName = tfw->property( GROUP_NAME_ ).toString( );
       updateGroupColors( groupName.toStdString( ) , tfw->getColors( ) ,
                          tfw->getSizeFunction( ));
     }
@@ -2410,7 +2410,7 @@ namespace visimpl
     if ( tfw )
     {
       bool ok = false;
-      auto groupName = tfw->property( GROUP_NAME ).toString( );
+      auto groupName = tfw->property( GROUP_NAME_ ).toString( );
 
       if ( !ok ) return;
       updateGroupColors( groupName.toStdString( ) , tfw->getPreviewColors( ) ,
@@ -2619,7 +2619,7 @@ namespace visimpl
     if ( button )
     {
       bool ok = false;
-      auto groupName = button->property( GROUP_NAME ).toString( );
+      auto groupName = button->property( GROUP_NAME_ ).toString( );
 
       if ( !ok ) return;
       auto group = _domainManager->getGroup( groupName.toStdString( ));
@@ -2985,7 +2985,7 @@ namespace visimpl
     auto button = qobject_cast< QPushButton* >( sender( ));
     if ( button )
     {
-      const auto groupName = button->property( GROUP_NAME ).toString( );
+      const auto groupName = button->property( GROUP_NAME_ ).toString( );
       removeVisualGroup( groupName );
     }
   }
@@ -2995,7 +2995,7 @@ namespace visimpl
     auto findGroup = [ this , name ]( tGroupRow& r )
     {
       QWidget* container = std::get< gr_container >( r );
-      auto groupName = container->property( GROUP_NAME ).toString( );
+      auto groupName = container->property( GROUP_NAME_ ).toString( );
       return groupName.compare( name , Qt::CaseInsensitive ) == 0;
     };
     auto it = std::find_if( _groupsVisButtons.begin( ) ,
@@ -3187,7 +3187,7 @@ namespace visimpl
       const auto rotation = o.value( "rotation" ).toString( );
 
       auto action = new QAction( name );
-      action->setProperty( POSITION_KEY ,
+      action->setProperty( POSITION_KEY_ ,
                            position + ";" + radius + ";" + rotation );
 
       connect( action , SIGNAL( triggered( bool )) , this ,
@@ -3268,7 +3268,7 @@ namespace visimpl
     auto insertPosition = [ &positionsObjs ]( const QAction* a )
     {
       if ( !a ) return;
-      const auto posData = a->property( POSITION_KEY ).toString( );
+      const auto posData = a->property( POSITION_KEY_ ).toString( );
       const auto parts = posData.split( ";" );
       Q_ASSERT( parts.size( ) == 3 );
       const auto position = parts.first( );
@@ -3349,7 +3349,7 @@ namespace visimpl
     auto action = new QAction( name );
 
     const auto position = _openGLWidget->cameraPosition( );
-    action->setProperty( POSITION_KEY , position.toString( ));
+    action->setProperty( POSITION_KEY_ , position.toString( ));
 
     connect( action , SIGNAL( triggered( bool )) , this ,
              SLOT( applyCameraPosition( )) );
@@ -3395,7 +3395,7 @@ namespace visimpl
     auto action = qobject_cast< QAction* >( sender( ));
     if ( action )
     {
-      auto positionString = action->property( POSITION_KEY ).toString( );
+      auto positionString = action->property( POSITION_KEY_ ).toString( );
       CameraPosition position( positionString );
       _openGLWidget->setCameraPosition( position );
     }
@@ -3506,11 +3506,11 @@ namespace visimpl
   void MainWindow::changePlanesColor( const QColor& color_ )
   {
     const auto currentColor = QColor(
-      _frameClippingColor->property( PLANES_COLOR_KEY ).toString( ));
+      _frameClippingColor->property( PLANES_COLOR_KEY_ ).toString( ));
     if ( currentColor == color_ ) return;
 
     _frameClippingColor->setStyleSheet( "background-color: " + color_.name( ));
-    _frameClippingColor->setProperty( PLANES_COLOR_KEY , color_.name( ));
+    _frameClippingColor->setProperty( PLANES_COLOR_KEY_ , color_.name( ));
   }
 
   void MainWindow::sendZeroEQPlaybackOperation( const unsigned int op )