diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index 14755d2197..b3998dfd19 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -2628,8 +2628,6 @@ static void ScanInfo(byte *buf, int len)
 	uint32 grfid;
 	const char *name;
 	const char *info;
-	int name_len;
-	int info_len;
 
 	if (!check_length(len, 8, "Info")) return; buf++;
 	version = grf_load_byte(&buf);
@@ -2641,17 +2639,13 @@ static void ScanInfo(byte *buf, int len)
 	if (GB(grfid, 24, 8) == 0xFF) SETBIT(_cur_grfconfig->flags, GCF_SYSTEM);
 
 	len -= 6;
-	name = (const char*)buf;
-	name_len = ttd_strnlen(name, len);
+	name = grf_load_string(&buf, len);
+	_cur_grfconfig->name = TranslateTTDPatchCodes(name);
 
-	if (name_len < len) {
-		_cur_grfconfig->name = TranslateTTDPatchCodes(name);
-
-		len -= name_len + 1;
-		info = name + name_len + 1;
-		info_len = ttd_strnlen(info, len);
-
-		if (info_len < len) _cur_grfconfig->info  = TranslateTTDPatchCodes(info);
+	len -= strlen(name) + 1;
+	if (len > 0) {
+		info = grf_load_string(&buf, len);
+		_cur_grfconfig->info = TranslateTTDPatchCodes(info);
 	}
 
 	/* GLS_INFOSCAN only looks for the action 8, so we can skip the rest of the file */