diff --git a/scripts/system/users.js b/scripts/system/users.js
index 3b97b9d685..08c354be87 100644
--- a/scripts/system/users.js
+++ b/scripts/system/users.js
@@ -366,6 +366,8 @@ var usersWindow = (function () {
         MENU_ITEM_AFTER = "Chat...",
 
         SETTING_USERS_WINDOW_MINIMIZED = "UsersWindow.Minimized",
+        SETINGS_USERS_WINDOW_OFFSET = "UsersWindow.Offset",
+        // +ve x, y values are offset from left, top of screen; -ve from right, bottom.
 
         isVisible = true,
         isMinimized = false,
@@ -816,7 +818,6 @@ var usersWindow = (function () {
             }
         }
 
-
         if (isMovingWindow) {
             windowPosition = {
                 x: event.x - movingClickOffset.x,
@@ -848,13 +849,22 @@ var usersWindow = (function () {
     }
 
     function onMouseReleaseEvent() {
+        var offset = {};
+
         if (isMovingScrollbar) {
             Overlays.editOverlay(scrollbarBar, {
                 backgroundAlpha: SCROLLBAR_BAR_ALPHA
             });
             isMovingScrollbar = false;
         }
-        isMovingWindow = false;
+
+        if (isMovingWindow) {
+            // Save offset of bottom of window to nearest edge of the window.
+            offset.x = (windowPosition.x + WINDOW_WIDTH / 2 < viewport.x / 2) ? windowPosition.x : windowPosition.x - viewport.x;
+            offset.y = (windowPosition.y < viewport.y / 2) ? windowPosition.y : windowPosition.y - viewport.y;
+            Settings.setValue(SETINGS_USERS_WINDOW_OFFSET, JSON.stringify(offset));
+            isMovingWindow = false;
+        }
     }
 
     function onScriptUpdate() {
@@ -892,7 +902,9 @@ var usersWindow = (function () {
     }
 
     function setUp() {
-        var textSizeOverlay;
+        var textSizeOverlay,
+            offsetSetting,
+            offset = {};
 
         textSizeOverlay = Overlays.addOverlay("text", {
             font: WINDOW_FONT,
@@ -904,7 +916,18 @@ var usersWindow = (function () {
         Overlays.deleteOverlay(textSizeOverlay);
 
         viewport = Controller.getViewportDimensions();
-        windowPosition = { x: 0, y: viewport.y };
+
+        offsetSetting = Settings.getValue(SETINGS_USERS_WINDOW_OFFSET);
+        if (offsetSetting !== "") {
+            offset = JSON.parse(Settings.getValue(SETINGS_USERS_WINDOW_OFFSET));
+        }
+        if (offset.hasOwnProperty("x") && offset.hasOwnProperty("y")) {
+            windowPosition.x = offset.x < 0 ? viewport.x + offset.x : offset.x;
+            windowPosition.y = offset.y <= 0 ? viewport.y + offset.y : offset.y;
+
+        } else {
+            windowPosition = { x: 0, y: viewport.y };
+        }
 
         calculateWindowHeight();