diff --git a/src/components/experiment-list/experiment-list-element.js b/src/components/experiment-list/experiment-list-element.js
index 5998ea77bc86b910d422260b1db6c7d58889f600..afed554d4ce4d216b27027d314c2fa8aafcd5821 100644
--- a/src/components/experiment-list/experiment-list-element.js
+++ b/src/components/experiment-list/experiment-list-element.js
@@ -1,8 +1,8 @@
 import React from 'react';
 import timeDDHHMMSS from '../../utility/time-filter.js';
 import ExperimentStorageService from '../../services/experiments/storage/experiment-storage-service.js';
-import ExperimentExecutionService from '../../services/experiments/execution/experiment-execution-service.js';
 import ExperimentServerService from '../../services/experiments/execution/experiment-server-service.js';
+import ExperimentExecutionService from '../../services/experiments/execution/experiment-execution-service.js';
 
 import './experiment-list-element.css';
 
@@ -15,7 +15,7 @@ const SHORT_DESCRIPTION_LENGTH = 200;
 export default class ExperimentListElement extends React.Component {
   constructor(props) {
     super(props);
-    this.state = {availableServers: [], experimentStarting: false};
+    this.state = {};
 
     this.canLaunchExperiment = (this.props.experiment.private && this.props.experiment.owned) ||
     !this.props.experiment.private;
@@ -34,41 +34,12 @@ export default class ExperimentListElement extends React.Component {
 
     this.handleClickOutside = this.handleClickOutside.bind(this);
     document.addEventListener('mousedown', this.handleClickOutside);
-
-    this.onUpdateServerAvailability = this.onUpdateServerAvailability.bind(this);
-    ExperimentServerService.instance.addListener(
-      ExperimentServerService.EVENTS.UPDATE_SERVER_AVAILABILITY,
-      this.onUpdateServerAvailability
-    );
-
-    this.onStartExperiment = this.onStartExperiment.bind(this);
-    ExperimentExecutionService.instance.addListener(
-      ExperimentExecutionService.EVENTS.START_EXPERIMENT,
-      this.onStartExperiment
-    );
   }
 
   componentWillUnmount() {
     document.removeEventListener('mousedown', this.handleClickOutside);
-
-    ExperimentServerService.instance.removeListener(
-      ExperimentServerService.EVENTS.UPDATE_SERVER_AVAILABILITY,
-      this.onUpdateServerAvailability
-    );
-    ExperimentServerService.instance.removeListener(
-      ExperimentExecutionService.EVENTS.START_EXPERIMENT,
-      this.onStartExperiment
-    );
   }
 
-  onUpdateServerAvailability(availableServers) {
-    this.setState({availableServers: availableServers});
-  };
-
-  onStartExperiment(experiment) {
-    this.setState({experimentStarting: experiment === this.props.experiment});
-  };
-
   handleClickOutside(event) {
     if (this.wrapperRef && !this.wrapperRef.current.contains(event.target)) {
       this.setState({selected: false});
@@ -82,7 +53,7 @@ export default class ExperimentListElement extends React.Component {
     if (clusterAvailability && clusterAvailability.free > CLUSTER_THRESHOLDS.AVAILABLE) {
       status = 'Available';
     }
-    else if (!this.state.availableServers || this.state.availableServers.length === 0) {
+    else if (!this.props.availableServers || this.props.availableServers.length === 0) {
       status = 'Unavailable';
     }
     else {
@@ -90,7 +61,7 @@ export default class ExperimentListElement extends React.Component {
     }
 
     let cluster = `Cluster availability: ${clusterAvailability.free} / ${clusterAvailability.total}`;
-    let backends = `Backends: ${this.state.availableServers.length}`;
+    let backends = `Backends: ${this.props.availableServers.length}`;
 
     return `${status}\n${cluster}\n${backends}`;
   }
@@ -102,7 +73,7 @@ export default class ExperimentListElement extends React.Component {
     if (clusterAvailability && clusterAvailability.free > CLUSTER_THRESHOLDS.AVAILABLE) {
       status = 'server-status-available';
     }
-    else if (!this.state.availableServers || this.state.availableServers.length === 0) {
+    else if (!this.props.availableServers || this.props.availableServers.length === 0) {
       status = 'server-status-unavailable';
     }
     else {
@@ -165,20 +136,20 @@ export default class ExperimentListElement extends React.Component {
             return exp.id === pageState.selected;
           }}>
             <div className='btn-group' role='group' >
-              {this.canLaunchExperiment && this.state.availableServers.length > 0 &&
+              {this.canLaunchExperiment && this.props.availableServers.length > 0 &&
                 exp.configuration.experimentFile && exp.configuration.bibiConfSrc
                 ? <button onClick={() => {
                   ExperimentExecutionService.instance.startNewExperiment(exp, false);
                 }}
                 //TODO: adjust disabled state to be reactive
-                disabled={this.state.experimentStarting /*|| pageState.deletingExperiment*/}
+                disabled={this.props.startingExperiment === exp /*|| pageState.deletingExperiment*/}
                 className='btn btn-default' >
                   <i className='fa fa-plus'></i> Launch
                 </button>
                 : null}
 
-              {this.canLaunchExperiment && this.state.availableServers.length === 0
-                ? <button disabled={this.canLaunchExperiment && this.state.availableServers.length === 0}
+              {this.canLaunchExperiment && this.props.availableServers.length === 0
+                ? <button disabled={this.canLaunchExperiment && this.props.availableServers.length === 0}
                   className='btn btn-default disabled enable-tooltip'
                   title='Sorry, no available servers.'>
                   <i className='fa fa-plus'></i> Launch
@@ -186,7 +157,7 @@ export default class ExperimentListElement extends React.Component {
                 : null}
 
               {this.canLaunchExperiment && config.brainProcesses > 1 &&
-                this.state.availableServers.length > 0 &&
+                this.props.availableServers.length > 0 &&
                 exp.configuration.experimentFile && exp.configuration.bibiConfSrc
 
                 ? <button className='btn btn-default'>
@@ -194,7 +165,7 @@ export default class ExperimentListElement extends React.Component {
                 </button>
                 : null}
 
-              {this.canLaunchExperiment && this.state.availableServers.length > 1 &&
+              {this.canLaunchExperiment && this.props.availableServers.length > 1 &&
                 exp.configuration.experimentFile && exp.configuration.bibiConfSrc
 
                 ? <button className='btn btn-default' >
diff --git a/src/components/experiment-list/experiment-list.js b/src/components/experiment-list/experiment-list.js
index c0768eb567fc6d9339895ee10bfb551db5300764..1479829d5330edb1a5c265dacd6d379414891cc3 100644
--- a/src/components/experiment-list/experiment-list.js
+++ b/src/components/experiment-list/experiment-list.js
@@ -1,6 +1,8 @@
 import React from 'react';
 
 import ExperimentStorageService from '../../services/experiments/storage/experiment-storage-service.js';
+import ExperimentServerService from '../../services/experiments/execution/experiment-server-service.js';
+import ExperimentExecutionService from '../../services/experiments/execution/experiment-execution-service.js';
 
 import NrpHeader from '../nrp-header/nrp-header.js';
 import ExperimentListElement from './experiment-list-element.js';
@@ -26,8 +28,40 @@ export default class ExperimentList extends React.Component {
     catch (error) {
       console.error(`Failed to fetch the list of experiments. Error: ${error}`);
     }
+
+    this.onUpdateServerAvailability = this.onUpdateServerAvailability.bind(this);
+    ExperimentServerService.instance.addListener(
+      ExperimentServerService.EVENTS.UPDATE_SERVER_AVAILABILITY,
+      this.onUpdateServerAvailability
+    );
+
+    this.onStartExperiment = this.onStartExperiment.bind(this);
+    ExperimentExecutionService.instance.addListener(
+      ExperimentExecutionService.EVENTS.START_EXPERIMENT,
+      this.onStartExperiment
+    );
   }
 
+  componentWillUnmount() {
+    ExperimentServerService.instance.removeListener(
+      ExperimentServerService.EVENTS.UPDATE_SERVER_AVAILABILITY,
+      this.onUpdateServerAvailability
+    );
+
+    ExperimentServerService.instance.removeListener(
+      ExperimentExecutionService.EVENTS.START_EXPERIMENT,
+      this.onStartExperiment
+    );
+  }
+
+  onUpdateServerAvailability(availableServers) {
+    this.setState({availableServers: availableServers});
+  };
+
+  onStartExperiment(experiment) {
+    this.setState({startingExperiment: experiment});
+  };
+
   render() {
     return (
       <div className='experiment-page'>
@@ -41,6 +75,8 @@ export default class ExperimentList extends React.Component {
               return (
                 <li key={experiment.id} className='nostyle'>
                   <ExperimentListElement experiment={experiment}
+                    availableServers={this.state.availableServers}
+                    startingExperiment={this.state.startingExperiment}
                     pageState={this.state.pageState} />
                 </li>
               );