Index: src/gui/dialogs/lobby_main.cpp
===================================================================
--- src/gui/dialogs/lobby_main.cpp	(revision 42756)
+++ src/gui/dialogs/lobby_main.cpp	(working copy)
@@ -309,8 +309,13 @@
 {
 	tgrid& grid = chat_log_container_->page_grid(id);
 	tscroll_label& log = find_widget<tscroll_label>(&grid, "log_text", false);
+	const bool chatbox_at_end = log.vertical_scrollbar_at_end();
+	const unsigned chatbox_position = log.get_vertical_scrollbar_item_position();
 	log.set_label(log.label() + "\n" + preferences::get_chat_timestamp(time(0)) + text);
-	log.scroll_vertical_scrollbar(tscrollbar_::END);
+	if (chatbox_at_end)
+		log.scroll_vertical_scrollbar(tscrollbar_::END);
+	else
+		log.set_vertical_scrollbar_item_position(chatbox_position);
 }
 
 void tlobby_main::do_notify(t_notify_mode mode)
Index: src/gui/widgets/scrollbar_container.hpp
===================================================================
--- src/gui/widgets/scrollbar_container.hpp	(revision 42756)
+++ src/gui/widgets/scrollbar_container.hpp	(working copy)
@@ -164,9 +164,28 @@
 	/***** ***** ***** scrollbar helpers ***** ****** *****/
 
 	/**
+         * Returns at_end status of the vertical scrollbar.
+         *
+         */
+        bool vertical_scrollbar_at_end();
+
+	/**
+         * Returns current position of the vertical scrollbar.
+         *
+         */
+        unsigned get_vertical_scrollbar_item_position() const;
+
+	/**
+	 * Move the vertical scrollbar to a position.
+	 *
+	 * @param position              The position to scroll to.
+	 */
+	void set_vertical_scrollbar_item_position(const unsigned position);
+
+	/**
 	 * Scrolls the vertical scrollbar.
 	 *
-	 * @param scroll              The position to scroll to.
+	 * @param scroll              The position to scroll to (enumerate).
 	 */
 	void scroll_vertical_scrollbar(const tscrollbar_::tscroll scroll);
 
Index: src/gui/widgets/scrollbar_container.cpp
===================================================================
--- src/gui/widgets/scrollbar_container.cpp	(revision 42756)
+++ src/gui/widgets/scrollbar_container.cpp	(working copy)
@@ -891,6 +891,29 @@
 	}
 }
 
+bool tscrollbar_container::vertical_scrollbar_at_end()
+{
+	assert(vertical_scrollbar_);
+
+	return vertical_scrollbar_->at_end();
+}
+
+unsigned tscrollbar_container::get_vertical_scrollbar_item_position() const
+{
+	assert(vertical_scrollbar_);
+
+	return vertical_scrollbar_->get_item_position();
+}
+
+void tscrollbar_container::set_vertical_scrollbar_item_position(
+		const unsigned position)
+{
+	assert(vertical_scrollbar_);
+
+	vertical_scrollbar_->set_item_position(position);
+	scrollbar_moved();
+}
+
 void tscrollbar_container::scroll_vertical_scrollbar(
 		const tscrollbar_::tscroll scroll)
 {
Index: changelog
===================================================================
--- changelog	(revision 42756)
+++ changelog	(working copy)
@@ -57,6 +57,7 @@
    * added "leaf litter" terrain
    * added new "mine rail tracks" terrain
  * User interface:
+   * Fixed bug #16059: Don't scroll to end of chat list when new chat message
    * Added the era AI in the list of AI shown when opening a game
    * Added dialog for installation of add-on dependencies
    * Removed the unused gui2 menu bar
