diff --git a/app/services/websockets.js b/app/services/websockets.js
index a3ebbbbbcce1f9aae8a465f8cedf41f56bbeed8c..b28a099e8719baffcd1ca17d62c83180306e21d9 100644
--- a/app/services/websockets.js
+++ b/app/services/websockets.js
@@ -1,33 +1,8 @@
-import Service from '@ember/service';
-import { ws_base_url } from 'papermerge/utils/host';
+import WSBaseService  from 'papermerge/services/ws/base';
 
 
-export default class Websockets extends Service {
-
-
-  constructor(owner, args) {
-    super(owner, args);
-
-    let that = this;
-
-    this._socket = new WebSocket(`${ws_base_url()}/document/`);
-    this._handlers = [];
-
-    this._socket.onmessage = function(event) {
-      that._handlers.forEach((item) => {
-        let json_data;
-
-        try {
-          json_data = JSON.parse(event.data);
-          item.handler.apply(item.context, [json_data, event]);
-        } catch (err) {
-          console.log(`Error ${err} while parsing incoming data: ${event.data}`);
-        }
-      });
-    }
-  }
-
-  addHandler(handler, context) {
-    this._handlers.push({handler, context});
+export default class Websockets extends WSBaseService {
+  url() {
+    return '/document/';
   }
 }
\ No newline at end of file
diff --git a/app/services/ws/base.js b/app/services/ws/base.js
new file mode 100644
index 0000000000000000000000000000000000000000..5f45c215f15e26f541e9ca19e2d0931a4b0cfbf7
--- /dev/null
+++ b/app/services/ws/base.js
@@ -0,0 +1,34 @@
+import { ws_base_url } from 'papermerge/utils/host';
+import Service from '@ember/service';
+
+
+export default class WSBaseService extends Service {
+
+
+  constructor(owner, args) {
+    super(owner, args);
+
+    let that = this;
+
+    this._socket = new WebSocket(`${ws_base_url()}${this.url()}`);
+    this._handlers = [];
+
+    this._socket.onmessage = function(event) {
+      that._handlers.forEach((item) => {
+        let json_data;
+
+        try {
+          json_data = JSON.parse(event.data);
+          item.handler.apply(item.context, [json_data, event]);
+        } catch (err) {
+          console.log(`Error ${err} while parsing incoming data: ${event.data}`);
+        }
+      });
+    }
+  }
+
+  addHandler(handler, context) {
+    this._handlers.push({handler, context});
+  }
+
+}
diff --git a/app/services/ws_inbox_refresh.js b/app/services/ws_inbox_refresh.js
index 707bf5c25b0109e90c8fef3b2c40efcdeab5324a..40799276be87705c88246488c526539915442f43 100644
--- a/app/services/ws_inbox_refresh.js
+++ b/app/services/ws_inbox_refresh.js
@@ -1,33 +1,8 @@
-import { ws_base_url } from 'papermerge/utils/host';
-import Service from '@ember/service';
+import WSBaseService from 'papermerge/services/ws/base';
 
 
-export default class WSInboxRefresh extends Service {
-
-
-  constructor(owner, args) {
-    super(owner, args);
-
-    let that = this;
-
-    this._socket = new WebSocket(`${ws_base_url()}/nodes/inbox-refresh/`);
-    this._handlers = [];
-
-    this._socket.onmessage = function(event) {
-      that._handlers.forEach((item) => {
-        let json_data;
-
-        try {
-          json_data = JSON.parse(event.data);
-          item.handler.apply(item.context, [json_data, event]);
-        } catch (err) {
-          console.log(`Error ${err} while parsing incoming data: ${event.data}`);
-        }
-      });
-    }
-  }
-
-  addHandler(handler, context) {
-    this._handlers.push({handler, context});
+export default class WSInboxRefresh extends WSBaseService {
+  url() {
+    return '/nodes/inbox-refresh/';
   }
 }
\ No newline at end of file
diff --git a/app/services/ws_nodes_move.js b/app/services/ws_nodes_move.js
index 7bb45103fed7e73feb377856bb07e996b5f00860..930fec417be91334d2d91c4e0cce4018cdf5a445 100644
--- a/app/services/ws_nodes_move.js
+++ b/app/services/ws_nodes_move.js
@@ -1,33 +1,8 @@
-import { ws_base_url } from 'papermerge/utils/host';
-import Service from '@ember/service';
+import WSBaseService  from 'papermerge/services/ws/base';
 
 
-export default class WSNodesMove extends Service {
-
-
-  constructor(owner, args) {
-    super(owner, args);
-
-    let that = this;
-
-    this._socket = new WebSocket(`${ws_base_url()}/nodes/move`);
-    this._handlers = [];
-
-    this._socket.onmessage = function(event) {
-      that._handlers.forEach((item) => {
-        let json_data;
-
-        try {
-          json_data = JSON.parse(event.data);
-          item.handler.apply(item.context, [json_data, event]);
-        } catch (err) {
-          console.log(`Error ${err} while parsing incoming data: ${event.data}`);
-        }
-      });
-    }
-  }
-
-  addHandler(handler, context) {
-    this._handlers.push({handler, context});
+export default class WSNodesMove extends WSBaseService {
+  url() {
+    return '/nodes/move/';
   }
 }
\ No newline at end of file