diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index bc27a4af3928647add254248b384b0fab7041fca..6733cb4aef9458e927831c76ae76382d7e50b595 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -23,10 +23,8 @@ tests:
     stage: tests
     script:
         - apt update
-        - apt install -y libgl1-mesa-glx xvfb
+        - apt install -y libgl1-mesa-glx xvfb graphviz xdg-utils libcairo2-dev libjpeg-dev libgif-dev
         - pip install tox
-        - apt install -y graphviz xdg-utils
-        - apt install -y libcairo2-dev libjpeg-dev libgif-dev
         - xvfb-run tox -v --recreate
 
 build_and_deploy_docs:
@@ -37,13 +35,13 @@ build_and_deploy_docs:
     dependencies:
         - tests
     before_script:
-        - pip install awscli
         - apt update
-        - apt install -y graphviz libgl1-mesa-glx xvfb xdg-utils
-        - apt install -y libcairo2-dev libjpeg-dev libgif-dev
-        - echo "Bucket $BUCKET_NAME ${BUCKET_NAME}"
+        - apt install -y graphviz libgl1-mesa-glx xvfb xdg-utils libcairo2-dev libjpeg-dev libgif-dev
+        - pip install awscli
     script:
-        - echo "Bucket $BUCKET_NAME ${BUCKET_NAME}"
+        - echo "Bucket=${BUCKET_NAME}"
+        - echo "AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}"
+        - echo "CI_COMMIT_REF_SLUG=${CI_COMMIT_REF_SLUG}"
         - pip install -r requirements_dev.txt -r requirements_continuous_integration.txt
         - python setup.py install
         - xvfb-run make docs
diff --git a/benchmarks/play_model_benchmark.py b/benchmarks/play_model_benchmark.py
index a3c087e8ab8ed33a24bd447cd3203b85eb1a28f2..41c15ef0ef1cbbeebcf547ffa967dc9c31fecbe6 100644
--- a/benchmarks/play_model_benchmark.py
+++ b/benchmarks/play_model_benchmark.py
@@ -1,16 +1,13 @@
 import random
-import time
-from collections import deque
 
 import numpy as np
 from benchmarker import Benchmarker
 
 from flatland.envs.generators import complex_rail_generator
 from flatland.envs.rail_env import RailEnv
-from flatland.utils.rendertools import RenderTool
 
 
-def main(render=True, delay=0.0):
+def main():
     random.seed(1)
     np.random.seed(1)
 
@@ -19,18 +16,8 @@ def main(render=True, delay=0.0):
                   rail_generator=complex_rail_generator(nr_start_goal=5, nr_extra=20, min_dist=12),
                   number_of_agents=5)
 
-    if render:
-        env_renderer = RenderTool(env, gl="QTSVG")
-
     n_trials = 20
-    eps = 1.
-    eps_end = 0.005
-    eps_decay = 0.998
     action_dict = dict()
-    scores_window = deque(maxlen=100)
-    done_window = deque(maxlen=100)
-    scores = []
-    dones_list = []
     action_prob = [0] * 4
 
     def max_lt(seq, val):
@@ -46,82 +33,32 @@ def main(render=True, delay=0.0):
             idx -= 1
         return None
 
-    iFrame = 0
-    tStart = time.time()
     for trials in range(1, n_trials + 1):
 
         # Reset environment
         obs = env.reset()
-        if render:
-            env_renderer.set_new_rail()
 
         for a in range(env.get_num_agents()):
             norm = max(1, max_lt(obs[a], np.inf))
             obs[a] = np.clip(np.array(obs[a]) / norm, -1, 1)
 
-        # env.obs_builder.util_print_obs_subtree(tree=obs[0], num_elements_per_node=5)
-
-        score = 0
-        env_done = 0
-
         # Run episode
         for step in range(100):
-            # if trials > 114:
-            # env_renderer.renderEnv(show=True)
-            # print(step)
             # Action
             for a in range(env.get_num_agents()):
                 action = np.random.randint(0, 4)
                 action_prob[action] += 1
                 action_dict.update({a: action})
 
-            if render:
-                env_renderer.renderEnv(show=True, frames=True, iEpisode=trials, iStep=step, action_dict=action_dict)
-                if delay > 0:
-                    time.sleep(delay)
-
-            iFrame += 1
-
             # Environment step
             next_obs, all_rewards, done, _ = env.step(action_dict)
             for a in range(env.get_num_agents()):
                 norm = max(1, max_lt(next_obs[a], np.inf))
                 next_obs[a] = np.clip(np.array(next_obs[a]) / norm, -1, 1)
-            # Update replay buffer and train agent
-            for a in range(env.get_num_agents()):
-                # agent.step(obs[a], action_dict[a], all_rewards[a], next_obs[a], done[a])
-                score += all_rewards[a]
 
-            obs = next_obs.copy()
             if done['__all__']:
-                env_done = 1
                 break
-        # Epsilon decay
-        eps = max(eps_end, eps_decay * eps)  # decrease epsilon
-
-        done_window.append(env_done)
-        scores_window.append(score)  # save most recent score
-        scores.append(np.mean(scores_window))
-        dones_list.append((np.mean(done_window)))
-
-        print(('\rTraining {} Agents.\tEpisode {}\tAverage Score: {:.0f}\tDones: {:.2f}%' +
-               '\tEpsilon: {:.2f} \t Action Probabilities: \t {}').format(
-            env.get_num_agents(),
-            trials,
-            np.mean(scores_window),
-            100 * np.mean(done_window),
-            eps, action_prob / np.sum(action_prob)),
-            end=" ")
         if trials % 100 == 0:
-            tNow = time.time()
-            rFps = iFrame / (tNow - tStart)
-            print(('\rTraining {} Agents.\tEpisode {}\tAverage Score: {:.0f}\tDones: {:.2f}%' +
-                   '\tEpsilon: {:.2f} fps: {:.2f} \t Action Probabilities: \t {}').format(
-                env.get_num_agents(),
-                trials,
-                np.mean(scores_window),
-                100 * np.mean(done_window),
-                eps, rFps, action_prob / np.sum(action_prob)))
             action_prob = [1] * 4
 
 
@@ -129,4 +66,4 @@ if __name__ == "__main__":
     with Benchmarker(cycle=20, extra=1) as bench:
         @bench("Everything")
         def _(bm):
-            main(render=False, delay=0)
+            main()
diff --git a/setup.py b/setup.py
index ce7b232fd005d696bb2803733d455904c75352df..649a4ac69bdf11c8800a571bb067e1ed16141129 100644
--- a/setup.py
+++ b/setup.py
@@ -21,13 +21,12 @@ with open('HISTORY.rst') as history_file:
 
 
 
-# install pycairo
+# install pycairo on Windows
 if os.name == 'nt':
     p = platform.architecture()
     is64bit = p[0] == '64bit'
     if sys.version[0:3] == '3.5':
         if is64bit:
-
             url = 'https://download.lfd.uci.edu/pythonlibs/t4jqbe6o/pycairo-1.18.0-cp35-cp35m-win_amd64.whl'
         else:
             url = 'https://download.lfd.uci.edu/pythonlibs/t4jqbe6o/pycairo-1.18.0-cp35-cp35m-win32.whl'
@@ -47,7 +46,7 @@ if os.name == 'nt':
     try:
         import pycairo
     except:
-        call_cmd = "pip install " + url
+        call_cmd = "pip install --user " + url
         os.system(call_cmd)
 
         import site