diff --git a/.gitsubprojects b/.gitsubprojects
index d0bb5bc511e1e0322521f27b26972747897561ca..7f7fdc34544f967a63434005e4fc6978e9772efc 100644
--- a/.gitsubprojects
+++ b/.gitsubprojects
@@ -4,7 +4,7 @@
 #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 bd0c110 )
-git_subproject( SimIL https://github.com/gmrvvis/SimIL.git bbc4bd7f )
+git_subproject( SimIL https://github.com/gmrvvis/SimIL.git 5df45828 )
 git_subproject( scoop https://github.com/gmrvvis/scoop.git b3326cd )
 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 266b12686ba6692a87025029d893fb051a95acc1..437689be8e8785cf2e78b10f128c923c66465c2f 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.3 )
+project( visimpl VERSION 1.8.4 )
 set( visimpl_VERSION_ABI 6 )
 
 SET( VISIMPL_LICENSE "GPL")
diff --git a/sumrice/LoaderThread.cpp b/sumrice/LoaderThread.cpp
index a94fe263161de0b5531aaeb4bb92a10e75f79b87..ed79b6bb91ddc44c64da5a8fc5e6a295a487be01 100644
--- a/sumrice/LoaderThread.cpp
+++ b/sumrice/LoaderThread.cpp
@@ -207,4 +207,10 @@ void LoaderThread::setRESTConfiguration(const simil::LoaderRestData::Configurati
     m_rest->setConfiguration(m_restConfig);
   }
 }
+
 #endif
+
+std::string LoaderThread::filename() const
+{
+  return m_arg1;
+}
diff --git a/sumrice/LoaderThread.h b/sumrice/LoaderThread.h
index daf5fce86be61dc9c2d6ca5a9a43d8100902fc99..8d15dbc8144ff4b1ab6dfcee36277a2f5f31eee2 100644
--- a/sumrice/LoaderThread.h
+++ b/sumrice/LoaderThread.h
@@ -98,6 +98,11 @@ class SUMRICE_API LoaderThread
      */
     simil::TDataType type() const;
 
+    /** \brief Returns the name of the file loaded.
+     *
+     */
+    std::string filename() const;
+
 #ifdef SIMIL_WITH_REST_API
     /** \brief Sets the REST loader protocol configuration.
      * \param[in] o REST protocol configuration.
diff --git a/visimpl/DomainManager.cpp b/visimpl/DomainManager.cpp
index f3be64bddd82bd25f2a6c28fdd732d8cd7b8bdab..10816a9ac1a638c9e5140f1248187d978e6a56dc 100644
--- a/visimpl/DomainManager.cpp
+++ b/visimpl/DomainManager.cpp
@@ -47,8 +47,8 @@ namespace visimpl
     colors.emplace_back( 1.0f , glm::vec4( 0.0f , 0.0f , 1.0f , 0.5f ));
 
     TSizeFunction sizes;
-    sizes.emplace_back( 0.0f , 8.0f );
-    sizes.emplace_back( 1.0f , 6.0f );
+    sizes.emplace_back( 0.0f , 6.0f );
+    sizes.emplace_back( 1.0f , 18.0f );
 
     _selectionModel = std::make_shared< StaticGradientModel >(
       camera , leftPlane , rightPlane , sizes , colors ,
@@ -326,6 +326,9 @@ namespace visimpl
       _currentRenderer ,
       _selectionModel->isClippingEnabled( ));
 
+    const TSizeFunction defaultSizes{ { 0.0f , 50.0f }, { 1.0f , 15.0f } };
+
+    group->getModel()->setParticleSize(defaultSizes);
     group->getModel( )->setAccumulativeMode( _accumulativeMode );
 
     std::vector< uint32_t > ids;
diff --git a/visimpl/MainWindow.cpp b/visimpl/MainWindow.cpp
index f5a2b14e8d9949d293d7a858f161bb9e7a96c96b..5e5d534c31389281245d0c3c6feb1673d56f0b32 100644
--- a/visimpl/MainWindow.cpp
+++ b/visimpl/MainWindow.cpp
@@ -1581,6 +1581,18 @@ namespace visimpl
 
   void MainWindow::setCircuitSizeScaleFactor( vec3 scaleFactor )
   {
+    _circuitScaleX->blockSignals( true );
+    _circuitScaleY->blockSignals( true );
+    _circuitScaleZ->blockSignals( true );
+
+    _circuitScaleX->setValue(scaleFactor.x);
+    _circuitScaleY->setValue(scaleFactor.y);
+    _circuitScaleZ->setValue(scaleFactor.z);
+
+    _circuitScaleX->blockSignals( true );
+    _circuitScaleY->blockSignals( true );
+    _circuitScaleZ->blockSignals( true );
+
     _openGLWidget->circuitScaleFactor( scaleFactor );
   }
 
@@ -1608,12 +1620,7 @@ namespace visimpl
 
   void MainWindow::updateCircuitScaleValue( void )
   {
-    auto scale = _openGLWidget->circuitScaleFactor( );
-
-    scale.x = _circuitScaleX->value( );
-    scale.y = _circuitScaleY->value( );
-    scale.z = _circuitScaleZ->value( );
-
+    vec3 scale{ _circuitScaleX->value( ), _circuitScaleY->value( ), _circuitScaleZ->value( )};
     _openGLWidget->circuitScaleFactor( scale );
   }
 
@@ -1962,7 +1969,8 @@ namespace visimpl
 
   void MainWindow::addGroupControls( std::shared_ptr< VisualGroup > group ,
                                      unsigned int currentIndex ,
-                                     unsigned int size )
+                                     unsigned int size,
+                                     QColor groupColor)
   {
     QWidget* container = new QWidget( );
     auto itemLayout = new QHBoxLayout( container );
@@ -1970,15 +1978,27 @@ namespace visimpl
     container->setProperty( GROUP_NAME_ ,
                             QString::fromStdString( group->name( )));
 
-    const auto colors = _openGLWidget->colorPalette( ).colors( );
-    const auto paletteIdx = currentIndex % colors.size( );
-    const auto color = colors[ paletteIdx ].toRgb( );
-    const auto variations = generateColorPair( color );
+    if(groupColor == QColor{0,0,0})
+    {
+      const auto colors = _openGLWidget->colorPalette( ).colors( );
+      const auto paletteIdx = currentIndex % colors.size( );
+      const auto color = colors[ paletteIdx ].toRgb( );
+      const auto variations = generateColorPair( color );
+
+      TTransferFunction colorVariation;
+      colorVariation.push_back( std::make_pair( 0.0f , variations.first ));
+      colorVariation.push_back( std::make_pair( 1.0f , variations.second ));
+      group->colorMapping( colorVariation );
+    }
+    else
+    {
+      const auto variations = generateColorPair( groupColor );
 
-    TTransferFunction colorVariation;
-    colorVariation.push_back( std::make_pair( 0.0f , variations.first ));
-    colorVariation.push_back( std::make_pair( 1.0f , variations.second ));
-    group->colorMapping( colorVariation );
+      TTransferFunction colorVariation;
+      colorVariation.push_back( std::make_pair( 0.0f , variations.first ));
+      colorVariation.push_back( std::make_pair( 1.0f , variations.second ));
+      group->colorMapping( colorVariation );
+    }
 
     auto tfWidget = new TransferFunctionWidget( container );
     tfWidget->setColorPoints( group->colorMapping( ));
@@ -1991,8 +2011,11 @@ namespace visimpl
 
     const auto presetName = QString( "Group selection %1" ).arg( currentIndex );
     QGradientStops stops;
-    stops << qMakePair( 0.0 , variations.first )
-          << qMakePair( 1.0 , variations.second );
+
+    const auto mapping = group->colorMapping();
+    auto addColorMapping = [&stops](const visimpl::TTFColor &c){ stops << qMakePair(c.first, c.second); };
+    std::for_each(mapping.cbegin(), mapping.cend(), addColorMapping);
+
     tfWidget->addPreset( TransferFunctionWidget::Preset( presetName , stops ));
 
     connect( tfWidget , SIGNAL( colorChanged( )) ,
@@ -2103,8 +2126,11 @@ namespace visimpl
       const auto group = _domainManager->createGroup(
         filteredGIDs , _openGLWidget->getGidPositions( ) , groupName );
 
+      const auto color = _subsetEvents->getSubsetColor( groupName );
+      QColor groupColor = QColor::fromRgbF(color.x(), color.y(), color.z());
+
       addGroupControls( group , _domainManager->getGroupAmount( ) - 1 ,
-                        filteredGIDs.size( ));
+                        filteredGIDs.size( ), groupColor);
 
       visimpl::Selection selection;
       selection.name = groupName;
@@ -2479,9 +2505,12 @@ namespace visimpl
 
   void MainWindow::onDataLoaded( )
   {
+    setWindowTitle("SimPart");
+
     if ( !m_loader ) return;
 
     const auto error = m_loader->errors( );
+    const auto filename = QString::fromStdString(m_loader->filename());
     if ( !error.empty( ))
     {
       closeLoadingDialog( );
@@ -2509,6 +2538,8 @@ namespace visimpl
         player = new simil::SpikesPlayer( );
         player->LoadData( spikeData );
 
+        _subsetEvents = spikeData->subsetsEvents();
+
         m_loader = nullptr;
       }
         break;
@@ -2558,6 +2589,9 @@ namespace visimpl
       m_loaderDialog->setSpikesValue( player->spikesSize( ));
       m_loaderDialog->repaint( );
     }
+
+    setWindowTitle("SimPart - " + filename);
+
     _openGLWidget->setPlayer( player , dataType );
     _modeSelectionWidget->setCurrentIndex( 0 );
 
@@ -2621,8 +2655,6 @@ namespace visimpl
     {
       bool ok = false;
       auto groupName = button->property( GROUP_NAME_ ).toString( );
-
-      if ( !ok ) return;
       auto group = _domainManager->getGroup( groupName.toStdString( ));
 
       groupName = QInputDialog::getText( this , tr( "Group Name" ) ,
@@ -3333,6 +3365,8 @@ namespace visimpl
                                     QLineEdit::Normal , tr( "New position" ) ,
                                     &ok );
 
+      if(!ok) return; // user cancelled
+
       if ( ok && !name.isEmpty( ))
       {
         QString tempName( name );
diff --git a/visimpl/MainWindow.h b/visimpl/MainWindow.h
index e46280ecbcecf2af2b3cd5f1c384795f65ab7d09..a3626ed05ac111fb0edb98b15f4e8085747f7f6b 100644
--- a/visimpl/MainWindow.h
+++ b/visimpl/MainWindow.h
@@ -223,7 +223,8 @@ namespace visimpl
 
     void addGroupControls( std::shared_ptr< VisualGroup > group ,
                            unsigned int index ,
-                           unsigned int size );
+                           unsigned int size,
+                           QColor groupColor = QColor{0,0,0});
 
     void clearGroups( void );
 
diff --git a/visimpl/OpenGLWidget.cpp b/visimpl/OpenGLWidget.cpp
index 078d3f4dc3b0a045bd18878e847a6f6b9fc75776..2da90204e4c8e3fe151a9db0ae5316621e44b908 100644
--- a/visimpl/OpenGLWidget.cpp
+++ b/visimpl/OpenGLWidget.cpp
@@ -69,7 +69,7 @@ namespace visimpl
   const InitialConfig _initialConfigSimBlueConfig =
     std::make_tuple( 0.5f , 20.0f , 20.0f , 1.0f );
   const InitialConfig _initialConfigSimH5 =
-    std::make_tuple( 0.005f , 20.0f , 0.1f , 500.0f );
+    std::make_tuple( 0.1f , 20.0f , 1.5f , 5.0f );
   const InitialConfig _initialConfigSimCSV =
     //std::make_tuple( 0.005f, 20.0f, 0.1f, 50000.0f );
     std::make_tuple( 0.2f , 2.0f , 1.5f , 5.0f );
@@ -789,9 +789,8 @@ namespace visimpl
       _frameCount = 0;
     }
 
-    update( );
-    //if ( _idleUpdate && _player )
-    //update( );
+    if ( _idleUpdate && _player )
+     update( );
   }
 
   void
@@ -949,7 +948,7 @@ namespace visimpl
   {
     if ( _homePosition.isEmpty( ))
     {
-      _focusOn( _boundingBoxHome );
+      _focusOn( _domainManager.getBoundingBox() );
       _homePosition = cameraPosition( ).toString( );
     }
 
@@ -1010,6 +1009,8 @@ namespace visimpl
 
     _scaleFactorExternal = true;
 
+    _homePosition.clear(); // reset home position to force re-computation.
+
     if ( update && _player )
     {
       _updateData( true );
diff --git a/visimpl/SubsetImporter.cpp b/visimpl/SubsetImporter.cpp
index 1cc86a3379d34456a9c52b152473638ba55313a0..3be9500bf0232221193236b647373aea2b798715 100644
--- a/visimpl/SubsetImporter.cpp
+++ b/visimpl/SubsetImporter.cpp
@@ -36,12 +36,14 @@ namespace visimpl
   , _subsetEventManager( nullptr )
   , _buttonAccept( nullptr )
   , _buttonCancel( nullptr )
+  , _selectGroups{nullptr}
+  , _selectConnections{nullptr}
   {
     init( );
 
     setWindowIcon(QIcon(tr(":/visimpl.png")));
     setWindowTitle(tr("Import Subsets"));
-    setMinimumSize(400, 400);
+    setMinimumSize(600, 400);
   }
 
   void SubsetImporter::init( void )
@@ -75,20 +77,30 @@ namespace visimpl
 
     _buttonAccept = new QPushButton( tr("Accept") );
     _buttonCancel = new QPushButton( tr("Cancel") );
+    _selectGroups = new QPushButton(tr("Select groups"));
+    _selectConnections = new QPushButton(tr("Select connections"));
+    _selectAll = new QPushButton(tr("Select all"));
 
     auto line = new QFrame( );
     line->setFrameShape( QFrame::HLine );
     line->setFrameShadow( QFrame::Sunken );
 
-    layoutBottom->addWidget( line, 0, 0, 1, 5 );
-    layoutBottom->addWidget( _buttonCancel, 1, 1, 1, 1 );
-    layoutBottom->addWidget( _buttonAccept, 1, 3, 1, 1 );
+    layoutBottom->addWidget(_selectGroups, 0,0,1,2);
+    layoutBottom->addWidget(_selectConnections, 0,2,1,2);
+    layoutBottom->addWidget(_selectAll, 0,4,1,2);
+    layoutBottom->addWidget( line, 1, 0, 1, 6 );
+    layoutBottom->addWidget( _buttonCancel, 2, 1, 1, 2 );
+    layoutBottom->addWidget( _buttonAccept, 2, 3, 1, 2 );
 
     layoutUpper->addWidget( gbSubsets );
     layoutUpper->addWidget( foot );
 
     connect( _buttonCancel, SIGNAL( clicked( void )), this, SLOT( reject()));
     connect( _buttonAccept, SIGNAL( clicked( void )), this, SLOT( accept( )));
+    connect( _selectGroups, SIGNAL( clicked( void )), this, SLOT( selectSubsets()));
+    connect( _selectConnections, SIGNAL( clicked( void )), this, SLOT( selectSubsets( )));
+    connect( _selectAll, SIGNAL( clicked( void )), this, SLOT( selectSubsets( )));
+
   }
 
   void SubsetImporter::reload( const simil::SubsetEventManager* subsetEventMngr )
@@ -117,7 +129,7 @@ namespace visimpl
       checkBox->setChecked( true );
 
       container->setLayout( layout );
-      container->setFixedHeight(30);
+      container->setFixedHeight(40);
       layout->addWidget( checkBox, 0, 0, 1, 2 );
       layout->addWidget( label, 0, 2, 1, 1 );
 
@@ -149,4 +161,37 @@ namespace visimpl
 
     return result;
   }
+
+  void SubsetImporter::selectSubsets()
+  {
+    auto button = qobject_cast<QPushButton *>(sender());
+
+    if(button == _selectGroups)
+    {
+      for(auto subset: _subsets)
+      {
+        auto isGroup = subset.first.find("group") != std::string::npos;
+        std::get< sl_checkbox >( subset.second )->setChecked(isGroup);
+      }
+    }
+    else
+    {
+      if(button == _selectConnections)
+      {
+        for(auto subset: _subsets)
+        {
+          auto isConnection = subset.first.find("connection") != std::string::npos;
+          std::get< sl_checkbox >( subset.second )->setChecked(isConnection);
+        }
+      }
+      else
+      {
+        for(auto subset: _subsets)
+        {
+          std::get< sl_checkbox >( subset.second )->setChecked(true);
+        }
+      }
+    }
+  }
+
 }
diff --git a/visimpl/SubsetImporter.h b/visimpl/SubsetImporter.h
index a1ee7fa94982b5c864f87e9326148b18589fc303..cb086adf700e8941cbad8cf679bf4ecf51ea61e4 100644
--- a/visimpl/SubsetImporter.h
+++ b/visimpl/SubsetImporter.h
@@ -53,6 +53,9 @@ namespace visimpl
 
     const std::vector< std::string > selectedSubsets( void ) const;
 
+  protected slots:
+    void selectSubsets();
+
   protected:
     const simil::SubsetEventManager* _subsetEventManager;
 
@@ -61,6 +64,9 @@ namespace visimpl
 
     QPushButton* _buttonAccept;
     QPushButton* _buttonCancel;
+    QPushButton* _selectGroups;
+    QPushButton* _selectConnections;
+    QPushButton* _selectAll;
 
     QListWidget* _listSubsets;
 
diff --git a/visimpl/particlelab/StaticGradientModel.cpp b/visimpl/particlelab/StaticGradientModel.cpp
index 32ea56a19d0dca5fab07d4bba0decc3b9b5662f4..69a045247d7d516d3347a115a65f7c1ef25f2114 100644
--- a/visimpl/particlelab/StaticGradientModel.cpp
+++ b/visimpl/particlelab/StaticGradientModel.cpp
@@ -163,7 +163,7 @@ namespace visimpl
       glUniform1fv( cache.getLocation( "gradientTimes" ) , maxSize ,
                     timeStamps );
       glUniform4fv( cache.getLocation( "gradientColors" ) , maxSize ,
-                    ( float* ) colors );
+                    (float*)colors );
     }
 
     glUniform1f( cache.getLocation( "particlePreVisibility" ) ,
@@ -194,4 +194,4 @@ namespace visimpl
     }
 
   }
-}
\ No newline at end of file
+}