diff --git a/exec/load/dns.js b/exec/load/dns.js
index 24ba0c967e2e7ce72a70e0b79b65397cc882ba4a..0d289b4fb027c4f75dff43480c747f740ff3c3d5 100644
--- a/exec/load/dns.js
+++ b/exec/load/dns.js
@@ -48,7 +48,7 @@ function DNS(servers) {
 
 		function get_string(resp, offset) {
 			var len = ascii(resp[offset]);
-			return {'len':len + 1, 'string':resp.substr(1, len)};
+			return {'len':len + 1, 'string':resp.substr(offset + 1, len)};
 		}
 
 		function get_name(resp, offset) {
@@ -145,7 +145,14 @@ function DNS(servers) {
 					tmp.exchange = get_name(resp, offset + 2).name;
 					return tmp;
 				case 16: // TXT
-					return get_string(resp, offset).string;
+					tmp = [];
+					tmp2 = 0;
+					do {
+						tmp3 = get_string(resp, offset + tmp2);
+						tmp.push(tmp3.string);
+						tmp2 += tmp3.len;
+					} while (tmp2 < len);
+					return tmp;
 				case 28:
 					return format("%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x:%02x%02x",
 					               ascii(resp[offset + 0]),  ascii(resp[offset + 1]),