diff --git a/src/common/config.py b/src/common/config.py
index e35e349f5e6625fdb764680e85a9c48282a1d229..976fa226baae1e687d7224400d4c092e5d83d859 100644
--- a/src/common/config.py
+++ b/src/common/config.py
@@ -82,6 +82,15 @@ class Config:
 		'openwith': [ opt_str, 'gnome-open' ],
 		'custombrowser': [ opt_str, 'firefox' ],
 		'custommailapp': [ opt_str, 'mozilla-thunderbird -compose' ],
+		'gc-x-position': [opt_int, 0],
+		'gc-y-position': [opt_int, 0],
+		'gc-width': [opt_int, 675],
+		'gc-height': [opt_int, 400],
+		'gc-hpaned-position': [opt_int, 535],
+		'chat-x-position': [opt_int, 0],
+		'chat-y-position': [opt_int, 0],
+		'chat-width': [opt_int, 415],
+		'chat-height': [opt_int, 430],
 		'x-position': [ opt_int, 0 ],
 		'y-position': [ opt_int, 0 ],
 		'width': [ opt_int, 150 ],
diff --git a/src/groupchat_window.py b/src/groupchat_window.py
index 7c5f3cc787d023e74cea1aeeeab61a744fc3c83d..ec0587d6bf82e735a733dd6ea5eb0560a1c55980 100644
--- a/src/groupchat_window.py
+++ b/src/groupchat_window.py
@@ -48,6 +48,8 @@ class GroupchatWindow(chat.Chat):
 		self.room_creation = {}
 		self.nick_hits = {}
 		self.last_key_tabs = {}
+		self.hpaneds = {} # used for auto positioning
+		self.hpaned_position = gajim.config.get('gc-hpaned-position')
 		self.new_room(room_jid, nick)
 		self.show_title()
 		self.xml.signal_connect('on_groupchat_window_destroy', 
@@ -62,6 +64,14 @@ class GroupchatWindow(chat.Chat):
 			self.on_chat_notebook_switch_page)
 		self.xml.signal_connect('on_close_window_activate',
 			self.on_close_window_activate)
+
+		# get size and position from config
+		if gajim.config.get('saveposition'):
+			self.window.move(gajim.config.get('gc-x-position'),
+					gajim.config.get('gc-y-position'))
+			self.window.resize(gajim.config.get('gc-width'),
+					gajim.config.get('gc-height'))
+
 		self.window.show_all()
 
 	def save_var(self, jid):
@@ -88,14 +98,25 @@ class GroupchatWindow(chat.Chat):
 		"""close window"""
 		for room_jid in self.xmls:
 			if time.time() - self.last_message_time[room_jid] < 2:
-				dialog = dialogs.ConfirmationDialog(_('You just received a new message in room "%s".'), \
-					_('If you close this window, this message will be lost.') % \
-					room_jid.split('@')[0])
+				dialog = dialogs.ConfirmationDialog(
+		_('You just received a new message in room "%s"') %room_jid.split('@')[0],
+			_('If you close this window, this message will be lost.')
+					)
 				if dialog.get_response() != gtk.RESPONSE_OK:
 					return True #stop the propagation of the event
 		for room_jid in self.xmls:
-			gajim.connections[self.account].send_gc_status(self.nicks[room_jid], \
+			gajim.connections[self.account].send_gc_status(self.nicks[room_jid],
 				room_jid, 'offline', 'offline')
+
+		if gajim.config.get('saveposition'):
+		# save window position and size
+			gajim.config.set('gc-hpaned-position', self.hpaned_position)
+			x, y = self.window.get_position()
+			gajim.config.set('gc-x-position', x)
+			gajim.config.set('gc-y-position', y)
+			width, height = self.window.get_size()
+			gajim.config.set('gc-width', width)
+			gajim.config.set('gc-height', height)
 	
 	def on_groupchat_window_destroy(self, widget):
 		chat.Chat.on_window_destroy(self, widget, 'gc')
@@ -292,7 +313,7 @@ class GroupchatWindow(chat.Chat):
 		room_jid = self.get_active_jid()
 		gajim.connections[self.account].request_gc_config(room_jid)
 
-	def on_add_bookmark_menuitem_activate(self, widget):
+	def on_bookmark_room_menuitem_activate(self, widget):
 		room_jid = self.get_active_jid()
 		bm = { 'name': room_jid,
 			   'jid': room_jid,
@@ -475,17 +496,17 @@ class GroupchatWindow(chat.Chat):
 
 	def ban(self, widget, room_jid, jid):
 		"""ban a user"""
-		gajim.connections[self.account].gc_set_affiliation(room_jid, jid, \
+		gajim.connections[self.account].gc_set_affiliation(room_jid, jid,
 			'outcast')
 
 	def grant_membership(self, widget, room_jid, jid):
 		"""grant membership privilege to a user"""
-		gajim.connections[self.account].gc_set_affiliation(room_jid, jid, \
+		gajim.connections[self.account].gc_set_affiliation(room_jid, jid,
 			'member')
 
 	def revoke_membership(self, widget, room_jid, jid):
 		"""revoke membership privilege to a user"""
-		gajim.connections[self.account].gc_set_affiliation(room_jid, jid, \
+		gajim.connections[self.account].gc_set_affiliation(room_jid, jid,
 			'none')
 
 	def grant_admin(self, widget, room_jid, jid):
@@ -494,7 +515,7 @@ class GroupchatWindow(chat.Chat):
 
 	def revoke_admin(self, widget, room_jid, jid):
 		"""revoke administrative privilege to a user"""
-		gajim.connections[self.account].gc_set_affiliation(room_jid, jid, \
+		gajim.connections[self.account].gc_set_affiliation(room_jid, jid,
 			'member')
 
 	def grant_owner(self, widget, room_jid, jid):
@@ -619,12 +640,13 @@ class GroupchatWindow(chat.Chat):
 
 		chat.Chat.remove_tab(self, room_jid, 'gc')
 		if len(self.xmls) > 0:
-			gajim.connections[self.account].send_gc_status(self.nicks[room_jid], \
+			gajim.connections[self.account].send_gc_status(self.nicks[room_jid],
 				room_jid, 'offline', 'offline')
 			del self.nicks[room_jid]
 			del self.list_treeview[room_jid]
 			del self.subjects[room_jid]
 			del self.name_labels[room_jid]
+			del self.hpaneds[room_jid]
 
 	def new_room(self, room_jid, nick):
 		self.names[room_jid] = room_jid.split('@')[0]
@@ -636,8 +658,13 @@ class GroupchatWindow(chat.Chat):
 		self.room_creation[room_jid] = time.time()
 		self.nick_hits[room_jid] = []
 		self.last_key_tabs[room_jid] = False
+		self.hpaneds[room_jid] = self.xmls[room_jid].get_widget('hpaned')
 		self.list_treeview[room_jid] = self.xmls[room_jid].get_widget(
 			'list_treeview')
+		# we want to know when the the widget resizes, because that is
+		# an indication that the hpaned has moved...
+		# TODO: Find a better indicator that the hpaned has moved.
+		self.list_treeview[room_jid].connect('size-allocate', self.on_treeview_size_allocate)
 		conversation_textview = self.xmls[room_jid].get_widget(
 			'conversation_textview')
 		self.name_labels[room_jid] = self.xmls[room_jid].get_widget(
@@ -654,14 +681,14 @@ class GroupchatWindow(chat.Chat):
 		xm = gtk.glade.XML(GTKGUI_GLADE, 'gc_actions_menu', APP)
 		self.gc_actions_menu = xm.get_widget('gc_actions_menu')
 
-		configure_menuitem, change_subject_menuitem, add_bookmark_menuitem = self.gc_actions_menu.get_children()
+		configure_menuitem, change_subject_menuitem, bookmark_room_menuitem = self.gc_actions_menu.get_children()
 
 		configure_menuitem.connect('activate',
 			self.on_configure_room_menuitem_activate)
 		change_subject_menuitem.connect('activate',
 			self.on_change_subject_menuitem_activate)
-		add_bookmark_menuitem.connect('activate',
-			self.on_add_bookmark_menuitem_activate)
+		bookmark_room_menuitem.connect('activate',
+			self.on_bookmark_room_menuitem_activate)
 
 		# connect the buttons to their respective functions
 		actions_button = self.xmls[room_jid].get_widget(
@@ -696,10 +723,22 @@ class GroupchatWindow(chat.Chat):
 		column.set_visible(False)
 		self.list_treeview[room_jid].set_expander_column(column)
 
+		# set the position of the current hpaned
+		self.hpaneds[room_jid] = self.xmls[room_jid].get_widget(
+			'hpaned')
+		self.hpaneds[room_jid].set_position(self.hpaned_position)
+
 		self.redraw_tab(room_jid)
 		self.show_title()
 		conversation_textview.grab_focus()
 
+	def on_treeview_size_allocate(self, widget, allocation):
+		"""The MUC treeview has resized. Move the hpaneds in all tabs to match"""
+		thisroom_jid = self.get_active_jid()
+		self.hpaned_position = self.hpaneds[thisroom_jid].get_position()
+		for room_jid in self.xmls:
+			self.hpaneds[room_jid].set_position(self.hpaned_position)
+
 	def tree_cell_data_func(self, column, renderer, model, iter, data=None):
 		if model.iter_parent(iter):
 			bgcolor = gajim.config.get('userbgcolor')
@@ -708,7 +747,6 @@ class GroupchatWindow(chat.Chat):
 			bgcolor = gajim.config.get('groupbgcolor')
 			renderer.set_property('cell-background', bgcolor)
 			
-
 	def on_actions_button_clicked(self, button):
 		"""popup action menu"""
 		self.gc_actions_menu.popup(None, None, None, 1, 0)
diff --git a/src/gtkgui.glade b/src/gtkgui.glade
index 6bdbbbf8ac1db7836bb60a3e70339cdbe16e6cba..8b55fad49eb7db4ab06be00c82eb441d028ec870 100644
--- a/src/gtkgui.glade
+++ b/src/gtkgui.glade
@@ -15208,7 +15208,7 @@ the Jabber network.</property>
       <property name="use_underline">True</property>
 
       <child internal-child="image">
-	<widget class="GtkImage" id="image678">
+	<widget class="GtkImage" id="image684">
 	  <property name="visible">True</property>
 	  <property name="stock">gtk-properties</property>
 	  <property name="icon_size">1</property>
@@ -15228,7 +15228,7 @@ the Jabber network.</property>
       <property name="use_underline">True</property>
 
       <child internal-child="image">
-	<widget class="GtkImage" id="image679">
+	<widget class="GtkImage" id="image685">
 	  <property name="visible">True</property>
 	  <property name="stock">gtk-edit</property>
 	  <property name="icon_size">1</property>
@@ -15242,13 +15242,13 @@ the Jabber network.</property>
   </child>
 
   <child>
-    <widget class="GtkImageMenuItem" id="add_bookmark1">
+    <widget class="GtkImageMenuItem" id="bookmark_room_menuitem">
       <property name="visible">True</property>
-      <property name="label" translatable="yes">Add _Bookmark</property>
+      <property name="label" translatable="yes">_Bookmark This Room</property>
       <property name="use_underline">True</property>
 
       <child internal-child="image">
-	<widget class="GtkImage" id="image680">
+	<widget class="GtkImage" id="image686">
 	  <property name="visible">True</property>
 	  <property name="stock">gtk-add</property>
 	  <property name="icon_size">1</property>
diff --git a/src/tabbed_chat_window.py b/src/tabbed_chat_window.py
index fa79a56f8c6740ccb9ef81a973721c0257b8d68f..1907270e4b62af8ac2d6bdc4ac8e717ba7f0275f 100644
--- a/src/tabbed_chat_window.py
+++ b/src/tabbed_chat_window.py
@@ -58,6 +58,14 @@ class TabbedChatWindow(chat.Chat):
 			self.on_chat_notebook_key_press_event)
 		self.xml.signal_connect('on_chat_notebook_switch_page', 
 			self.on_chat_notebook_switch_page)
+
+		if gajim.config.get('saveposition'):
+		# get window position and size from config
+			self.window.move(gajim.config.get('chat-x-position'),
+					gajim.config.get('chat-y-position'))
+			self.window.resize(gajim.config.get('chat-width'),
+					gajim.config.get('chat-height'))
+
 		self.window.show_all()
 
 	def save_var(self, jid):
@@ -181,6 +189,15 @@ class TabbedChatWindow(chat.Chat):
 				if dialog.get_response() != gtk.RESPONSE_OK:
 					return True #stop the propagation of the event
 
+		if gajim.config.get('saveposition'):
+		# save the window size and position
+			x, y = self.window.get_position()
+			gajim.config.set('chat-x-position', x)
+			gajim.config.set('chat-y-position', y)
+			width, height = self.window.get_size()
+			gajim.config.set('chat-width', width)
+			gajim.config.set('chat-height', height)
+
 	def on_tabbed_chat_window_destroy(self, widget):
 		#clean self.plugin.windows[self.account]['chats']
 		chat.Chat.on_window_destroy(self, widget, 'chats')