diff --git a/app/controllers/.gitkeep b/app/controllers/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/app/controllers/deployments/single.js b/app/controllers/deployments/single.js
index cd0b8dc87d7042f302fb68d7167095f6da77a98e..d03195c2d6e2c555c55389e4408190dba99534be 100644
--- a/app/controllers/deployments/single.js
+++ b/app/controllers/deployments/single.js
@@ -9,6 +9,7 @@ const observables = [
 
 export default Ember.Controller.extend({
     graphingService: Ember.inject.service(),
+    changelogQueue: Ember.inject.service(),
 
     init() {
         this.debug('initializing controller');
@@ -31,4 +32,9 @@ export default Ember.Controller.extend({
         this.debug('creating graph', filteredInstances);
         return this.get('graphingService').createGraph(filteredInstances); // TODO: update instead of complete recalculation?
     }),
+    actions: {
+        applyQueueUpdates() {
+            this.get('changelogQueue').apply();
+        }
+    }
 });
\ No newline at end of file
diff --git a/app/services/changelog-queue.js b/app/services/changelog-queue.js
new file mode 100644
index 0000000000000000000000000000000000000000..61c39118e0912495a1be49f8b6ff91fae9ec4b8e
--- /dev/null
+++ b/app/services/changelog-queue.js
@@ -0,0 +1,25 @@
+import Ember from 'ember';
+
+export default Ember.Service.extend({
+    changelogParser: Ember.inject.service(),
+    _private: {
+        queue: Ember.A()
+    },
+    reset() {
+        this.get('_private.queue').clear();
+    },
+    append(changelogs){
+        const queue = this.get('_private.queue');
+        queue.pushObjects(changelogs);
+    },
+    apply() {
+        this.get('changelogParser').parse(this.get('_private.queue'));
+        this.reset();
+    },
+    available: Ember.computed('empty', function() {
+        return !this.get('empty');
+    }),
+    empty: Ember.computed('_private.queue.[]', function() {
+        return this.get('_private.queue.length') === 0;
+    })
+});
\ No newline at end of file
diff --git a/app/services/changelog-stream.js b/app/services/changelog-stream.js
index a1eee0b9d7e2f57a4c60d48d89c07abd3c2cb8f5..ec511b9c954f88a905908932867e2a80f7c9a417 100644
--- a/app/services/changelog-stream.js
+++ b/app/services/changelog-stream.js
@@ -1,8 +1,8 @@
 import Ember from 'ember';
 
 export default Ember.Service.extend({
+    changelogQueue: Ember.inject.service(),
     shouldClose: false,
-    changelogParser: Ember.inject.service(),
     init() {
         this._super(...arguments);
         this.debug('session', this.get('systemId'));
@@ -11,7 +11,7 @@ export default Ember.Service.extend({
         this.set('shouldClose', false);
 
         this.debug('setting up websocket', systemId);
-        const socket = new WebSocket(`ws://localhost:8080/v1/changelogstream/${systemId}`);
+        const socket = new WebSocket(`ws://localhost:8080/v1/changelogstream/${systemId}`); // TODO: from environment!
         this.set('socket', socket);
 
         socket.onopen = this.get('events.onOpen').bind(this);
@@ -33,6 +33,7 @@ export default Ember.Service.extend({
         window.onbeforeunload = this.get('disconnect').bind(this);
     },
     disconnect() {
+        this.get('changelogQueue').reset();
         this.debug('disconnect');
         this.set('shouldClose', true);
         this.get('socket').close();
@@ -49,12 +50,12 @@ export default Ember.Service.extend({
         },
         onMessage(message) {
             const changelogsJson = message.data;
-            this.debug('new changelog received', changelogsJson);
+            this.debug('new changelogs received', changelogsJson);
             try {
-                const changelog = JSON.parse(changelogsJson);
-                this.get('changelogParser').parse(changelog);
+                const changelogs = JSON.parse(changelogsJson);
+                this.get('changelogQueue').append(changelogs);
             } catch (e) {
-                console.error('could not parse changelog json', e, changelogsJson);
+                console.error('could not parse changelogs json', e, changelogsJson);
             }
         }
     }
diff --git a/app/templates/deployments/single.hbs b/app/templates/deployments/single.hbs
index 369bd73de964b292b1d53e533ab09b9f7aa742d6..326f84ae40f93ba6d7a6b05fed68a01fb3fbe418 100644
--- a/app/templates/deployments/single.hbs
+++ b/app/templates/deployments/single.hbs
@@ -1,4 +1,9 @@
 {{#architecture-viewer graph=graphModel}}
+
+    <button {{action 'applyQueueUpdates'}} type="button" class="btn {{if changelogQueue.empty 'btn-default' 'btn-warning'}}" disabled={{ changelogQueue.empty }} title="Updates are possible when the deployment changed and new information is ready to get visualized!">
+        <i class="glyphicon glyphicon-refresh"></i> Apply Updates
+    </button>
+
     {{!-- show entity details in sidebar if subroute (details) is used --}}
     {{outlet}}
 {{/architecture-viewer}}
\ No newline at end of file