diff --git a/src/dialogs.py b/src/dialogs.py
index 64695c16afd5d16e4788e5a381856bb50edd73d3..c5cba1ea75d56a514f984b955b3bb60d933a94dc 100644
--- a/src/dialogs.py
+++ b/src/dialogs.py
@@ -2063,12 +2063,12 @@ class SingleMessageWindow:
 
 		if gajim.config.get('saveposition'):
 			# get window position and size from config
-			gtkgui_helpers.move_window(self.window,
-				gajim.config.get('single-msg-x-position'),
-				gajim.config.get('single-msg-y-position'))
 			gtkgui_helpers.resize_window(self.window,
 				gajim.config.get('single-msg-width'),
 				gajim.config.get('single-msg-height'))
+			gtkgui_helpers.move_window(self.window,
+				gajim.config.get('single-msg-x-position'),
+				gajim.config.get('single-msg-y-position'))
 		self.window.show_all()
 
 	def on_single_message_window_destroy(self, widget):
diff --git a/src/gtkgui_helpers.py b/src/gtkgui_helpers.py
index c697164608675a70c7050ffb551a69b25e7e4d15..1bfe3955f7db150b71a077f1f08bf8b1d42d6bb4 100644
--- a/src/gtkgui_helpers.py
+++ b/src/gtkgui_helpers.py
@@ -247,6 +247,11 @@ def move_window(window, x, y):
 		x = 0
 	if y < 0:
 		y = 0
+	w, h = window.get_size()
+	if x + w > screen_w:
+		x = screen_w - w
+	if y + h > screen_h:
+		y = screen_h - h
 	window.move(x, y)
 
 def resize_window(window, w, h):
diff --git a/src/message_window.py b/src/message_window.py
index c1eaf8fc6d5f72b7b5df001158b78a8a8f0d1b02..1a7ce786cfef0b1b10421c78c90cee5478f7cff5 100644
--- a/src/message_window.py
+++ b/src/message_window.py
@@ -870,8 +870,8 @@ class MessageWindowMgr(gobject.GObject):
 
 		# Position and size window based on saved state and window mode
 		if not self.one_window_opened(contact, acct, type):
-			self._position_window(win, acct, type)
 			self._resize_window(win, acct, type)
+			self._position_window(win, acct, type)
 
 		self._windows[win_key] = win
 		return win
diff --git a/src/roster_window.py b/src/roster_window.py
index 7da8e52930071640f873975c8c8f7860b710bb00..039309550d2b658be53f25610df0b9509d5b2886 100644
--- a/src/roster_window.py
+++ b/src/roster_window.py
@@ -5420,12 +5420,12 @@ class RosterWindow:
 		# no need of this variable
 		self.have_new_chat_accel = False # Is the "Ctrl+N" shown ?
 		if gajim.config.get('saveposition'):
-			gtkgui_helpers.move_window(self.window,
-				gajim.config.get('roster_x-position'),
-				gajim.config.get('roster_y-position'))
 			gtkgui_helpers.resize_window(self.window,
 				gajim.config.get('roster_width'),
 				gajim.config.get('roster_height'))
+			gtkgui_helpers.move_window(self.window,
+				gajim.config.get('roster_x-position'),
+				gajim.config.get('roster_y-position'))
 
 		self.popups_notification_height = 0
 		self.popup_notification_windows = []