diff --git a/app/adapters/application.js b/app/adapters/application.js
index c087b2cd23f9dd1dcb92bab9ea74c2b1215b7c5e..8b0b00fd56eb9ff139e0ea0d6f9cfc59f42b73d0 100644
--- a/app/adapters/application.js
+++ b/app/adapters/application.js
@@ -1,5 +1,5 @@
 import JSONAPIAdapter from '@ember-data/adapter/json-api';
-import { inject as service } from '@ember/service';
+import { service } from '@ember/service';
 import ENV from 'papermerge/config/environment';
 
 
diff --git a/app/authenticators/auth-token.js b/app/authenticators/auth-token.js
index 8a00242ffeb8429d1deda1beed7e661b8f36a0c8..6dc1171ad34dc4bbe511fd75260496d5dec5a66a 100644
--- a/app/authenticators/auth-token.js
+++ b/app/authenticators/auth-token.js
@@ -1,5 +1,5 @@
 import Base from 'ember-simple-auth/authenticators/base';
-import { base_url } from 'papermerge/utils';
+import { base_url } from 'papermerge/utils/host';
 
 
 export default class AuthToken extends Base {
diff --git a/app/controllers/login.js b/app/controllers/login.js
index d9ea8ea91d158ab0d14702b840d3de9cb43190fd..520e58758ffff4309771cc9aee8902821488e951 100644
--- a/app/controllers/login.js
+++ b/app/controllers/login.js
@@ -2,7 +2,7 @@ import Controller from '@ember/controller';
 import { service } from '@ember/service';
 import { action } from '@ember/object';
 import { tracked } from '@glimmer/tracking';
-import { base_url } from 'papermerge/utils';
+import { base_url } from 'papermerge/utils/host';
 
 
 export default class LoginController extends Controller {
diff --git a/app/services/requests.js b/app/services/requests.js
index a370cbeffa40c4e49aff87bd53b0ea17d5865348..afab04b13526576e569848a9497899b5d2709a7f 100644
--- a/app/services/requests.js
+++ b/app/services/requests.js
@@ -3,11 +3,12 @@ import Service from '@ember/service';
 import { computed } from '@ember/object';
 import { service } from '@ember/service';
 import {
-  base_url,
   insert_blob,
   extract_file_name
 } from 'papermerge/utils';
 
+import { base_url } from 'papermerge/utils/host';
+
 
 export default class Requests extends Service {
   @service session;
diff --git a/app/services/websockets.js b/app/services/websockets.js
index 408c2846d20ae5790fc45913507d5906a56b32e0..a3ebbbbbcce1f9aae8a465f8cedf41f56bbeed8c 100644
--- a/app/services/websockets.js
+++ b/app/services/websockets.js
@@ -1,5 +1,5 @@
 import Service from '@ember/service';
-import { ws_base_url } from 'papermerge/utils';
+import { ws_base_url } from 'papermerge/utils/host';
 
 
 export default class Websockets extends Service {
diff --git a/app/services/ws_nodes_move.js b/app/services/ws_nodes_move.js
index e0d4c5bfb74f1fed7d230db2999ac55f9ba4b83d..7bb45103fed7e73feb377856bb07e996b5f00860 100644
--- a/app/services/ws_nodes_move.js
+++ b/app/services/ws_nodes_move.js
@@ -1,4 +1,4 @@
-import { ws_base_url } from 'papermerge/utils';
+import { ws_base_url } from 'papermerge/utils/host';
 import Service from '@ember/service';
 
 
diff --git a/app/utils/host.js b/app/utils/host.js
new file mode 100644
index 0000000000000000000000000000000000000000..70219f4b8703128903c0daaff8f46fd733854257
--- /dev/null
+++ b/app/utils/host.js
@@ -0,0 +1,54 @@
+import ENV from 'papermerge/config/environment';
+
+
+function base_url() {
+  /*
+  Returns backend's REST API base url.
+
+  base url is extracted from `window` object, which
+  means this method is valid only in browser environment.
+
+  Notice there is no `/` at the end of returned string.
+  */
+  let base = `${window.location.protocol}//${window.location.host}`;
+
+  if (ENV.APP.HOST) {
+    // user can override BACKEND HOST by providing
+    // ENV.APP.HOST value
+    // e.g. ENV.APP.HOST = 'http://127.0.0.1:8000';
+    base = ENV.APP.HOST;
+  }
+
+  if (!ENV.APP.NAMESPACE) {
+    return base;
+  }
+
+  return `${base}/${ENV.APP.NAMESPACE}`;
+}
+
+
+function ws_base_url() {
+  /*
+  websockets base url
+  */
+  let base = `ws://${window.location.host}`;
+
+  if (ENV.APP.WS_HOST) {
+    // user can override BACKEND HOST by providing
+    // ENV.APP.HOST value
+    // e.g. ENV.APP.HOST = 'ws://127.0.0.1:8000';
+    base = ENV.WS_APP.HOST;
+  }
+
+  if (!ENV.APP.WS_NAMESPACE) {
+    return base;
+  }
+
+  return `${base}/${ENV.APP.WS_NAMESPACE}`;
+}
+
+
+export {
+  base_url,
+  ws_base_url,
+};
diff --git a/app/utils/index.js b/app/utils/index.js
index db4624e6659d259bdf3b51ee60f111ccbf1599de..e2559edd6324cd5719e1c7cc545f51b469b0117b 100644
--- a/app/utils/index.js
+++ b/app/utils/index.js
@@ -63,56 +63,6 @@ function are_sets_equal(set1, set2) {
   return same_size(set1, set2) && same_values(set1, set2);
 }
 
-function base_url() {
-  /*
-  Returns backend's REST API base url
-
-  Notice there is no `/` at the end of returned string.
-  */
-  let base = `${window.location.protocol}:/${window.location.host}`;
-
-  if (!ENV.APP.HOST) {
-
-    if (!ENV.APP.NAMESPACE) {
-      return base;
-    }
-
-    return `${base}/${ENV.APP.NAMESPACE}`;
-  }
-
-  if (!ENV.APP.NAMESPACE) {
-    return `${ENV.APP.HOST}`;
-  }
-
-  return `${ENV.APP.HOST}/${ENV.APP.NAMESPACE}`;
-}
-
-function ws_base_url() {
-  /*
-  websockets base url
-  */
-  let base = `ws://${window.location.host}`;
-
-  if (window.location.protocol == "https:") {
-    base = `wss://${window.location.host}`;
-  }
-
-  if (!ENV.APP.WS_HOST) {
-
-    if (!ENV.APP.WS_NAMESPACE) {
-      return base;
-    }
-
-    return `${base}/${ENV.APP.WS_NAMESPACE}`;
-  }
-
-  if (!ENV.APP.WS_NAMESPACE) {
-    return `${ENV.APP.WS_HOST}`;
-  }
-
-  return `${ENV.APP.WS_HOST}/${ENV.APP.WS_NAMESPACE}`;
-}
-
 /**
  * Extracts file name from a response with accessible Content-Disposition header
  */
@@ -158,8 +108,6 @@ function insert_blob(file_name, blob) {
 export {
   group_perms_by_model,
   are_sets_equal,
-  base_url,
-  ws_base_url,
   insert_blob,
   extract_file_name
 };
diff --git a/config/environment.js b/config/environment.js
index be4e8a28315608b867ce6d493ca91b4f3378e085..10fba31aa51a9b26e881c315fc6896185c16eaaa 100644
--- a/config/environment.js
+++ b/config/environment.js
@@ -28,6 +28,7 @@ module.exports = function (environment) {
   if (environment === 'development') {
     ENV.APP.HOST = 'http://127.0.0.1:8000';
     ENV.APP.WS_HOST = 'ws://127.0.0.1:8000';
+
     // ENV.APP.LOG_RESOLVER = true;
     // ENV.APP.LOG_ACTIVE_GENERATION = true;
     // ENV.APP.LOG_TRANSITIONS = true;
@@ -53,8 +54,6 @@ module.exports = function (environment) {
 
   if (environment === 'production') {
     // here you can enable a production-specific feature
-    ENV.APP.HOST = 'http://papermerge.local';
-    ENV.APP.WS_HOST = 'ws://papermerge.local';
   }
 
   return ENV;