diff --git a/builtin/mainmenu/common.lua b/builtin/mainmenu/common.lua
index 1fd89ff7793533abb3225c08edc265d75d6c7bb3..da36678280fc484d3417811130fd908cabbb2306 100644
--- a/builtin/mainmenu/common.lua
+++ b/builtin/mainmenu/common.lua
@@ -248,14 +248,18 @@ end
 
 --------------------------------------------------------------------------------
 function is_server_protocol_compat(server_proto_min, server_proto_max)
-	return min_supp_proto <= (server_proto_max or 24) and max_supp_proto >= (server_proto_min or 13)
+	if (not server_proto_min) or (not server_proto_max) then
+		-- There is no info. Assume the best and act as if we would be compatible.
+		return true
+	end
+	return min_supp_proto <= server_proto_max and max_supp_proto >= server_proto_min
 end
 --------------------------------------------------------------------------------
 function is_server_protocol_compat_or_error(server_proto_min, server_proto_max)
 	if not is_server_protocol_compat(server_proto_min, server_proto_max) then
 		local server_prot_ver_info, client_prot_ver_info
-		local s_p_min = server_proto_min or 13
-		local s_p_max = server_proto_max or 24
+		local s_p_min = server_proto_min
+		local s_p_max = server_proto_max
 
 		if s_p_min ~= s_p_max then
 			server_prot_ver_info = fgettext_ne("Server supports protocol versions between $1 and $2. ",
diff --git a/builtin/settingtypes.txt b/builtin/settingtypes.txt
index 864485ccef3863d1f8eca50fe4a95e33d0f999c6..4d354a7ef341c645c5236d844b61faf7a337b6b5 100644
--- a/builtin/settingtypes.txt
+++ b/builtin/settingtypes.txt
@@ -247,7 +247,7 @@ remote_port (Remote port) int 30000 1 65535
 #    Enable if you want to connect to 0.4.12 servers and before.
 #    Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.
 #    Disabling this option will protect your password better.
-send_pre_v25_init (Support older servers) bool true
+send_pre_v25_init (Support older servers) bool false
 
 #    Save the map received by the client on disk.
 enable_local_map_saving (Saving map received from server) bool false
diff --git a/minetest.conf.example b/minetest.conf.example
index 03a917a39fe1888ab34282b2ecf328b7b6ce25fe..48c54c320ef24f1f64ab73146e4b2d2489707537 100644
--- a/minetest.conf.example
+++ b/minetest.conf.example
@@ -261,7 +261,7 @@
 #    Servers starting with 0.4.13 will work, 0.4.12-dev servers may work.
 #    Disabling this option will protect your password better.
 #    type: bool
-# send_pre_v25_init = true
+# send_pre_v25_init = false
 
 #    Save the map received by the client on disk.
 #    type: bool
@@ -1485,7 +1485,7 @@
 # profiler.default_report_format = txt
 
 #    The file path relative to your worldpath in which profiles will be saved to.
-#    
+#
 #    type: string
 # profiler.report_path = ""
 
diff --git a/src/client.h b/src/client.h
index a7eb22ad945160d3cf451bc2afdd157eaca6e3b5..b479062a0cd8870a0268c3b18c5c27fee91a58f4 100644
--- a/src/client.h
+++ b/src/client.h
@@ -499,6 +499,9 @@ class Client : public con::PeerHandler, public InventoryManager, public IGameDef
 	u8 getProtoVersion()
 	{ return m_proto_ver; }
 
+	bool connectedToServer()
+	{ return m_con.Connected(); }
+
 	float mediaReceiveProgress();
 
 	void afterContentReceived(IrrlichtDevice *device);
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index 42b232afc8f6ac18bb4818352cc2f6ebd25740c2..7c6f7ef3d2bfbaf6b60e46281c494dd5c15c9573 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -190,7 +190,7 @@ void set_default_settings(Settings *settings)
 	settings->setDefault("minimap_shape_round", "true");
 	settings->setDefault("minimap_double_scan_height", "true");
 
-	settings->setDefault("send_pre_v25_init", "true");
+	settings->setDefault("send_pre_v25_init", "false");
 
 	settings->setDefault("curl_timeout", "5000");
 	settings->setDefault("curl_parallel_limit", "8");
diff --git a/src/game.cpp b/src/game.cpp
index 1a036d03a7a45d15b5d869d1d2ce096d5d40c6da..5a3b108797f2ffd6c26fe224306f1a1ef366c8f6 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -2403,7 +2403,26 @@ bool Game::connectToServer(const std::string &playername,
 			wait_time += dtime;
 			// Only time out if we aren't waiting for the server we started
 			if ((*address != "") && (wait_time > 10)) {
-				*error_message = "Connection timed out.";
+				bool sent_old_init = g_settings->getFlag("send_pre_v25_init");
+				// If no pre v25 init was sent, and no answer was received,
+				// but the low level connection could be established
+				// (meaning that we have a peer id), then we probably wanted
+				// to connect to a legacy server. In this case, tell the user
+				// to enable the option to be able to connect.
+				if (!sent_old_init &&
+						(client->getProtoVersion() == 0) &&
+						client->connectedToServer()) {
+					*error_message = "Connection failure: init packet not "
+					"recognized by server.\n"
+					"Most likely the server uses an old protocol version (<v25).\n"
+					"Please ask the server owner to update to 0.4.13 or later.\n"
+					"To still connect to the server in the meantime,\n"
+					"you can enable the 'send_pre_v25_init' setting by editing minetest.conf,\n"
+					"or by enabling the 'Client -> Network -> Support older Servers'\n"
+					"entry in the advanced settings menu.";
+				} else {
+					*error_message = "Connection timed out.";
+				}
 				errorstream << *error_message << std::endl;
 				break;
 			}