diff --git a/handbook/survey/nerd.html b/handbook/survey/nerd.html
index 0189b3aeb..bf299aeb9 100644
--- a/handbook/survey/nerd.html
+++ b/handbook/survey/nerd.html
@@ -1,6 +1,7 @@
+<!DOCTYPE html>
 <html>
 <head>
-<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>Handbook placeholder page</title>
 <link rel="stylesheet" type="text/css" href="../../css/main2.css" />
 </head>
diff --git a/handbook/survey/newcavefile.html b/handbook/survey/newcavefile.html
index acf783b1d..aba08952c 100644
--- a/handbook/survey/newcavefile.html
+++ b/handbook/survey/newcavefile.html
@@ -1,5 +1,7 @@
+<!DOCTYPE html>
 <html>
 <head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
 <title>Handbook placeholder page</title>
 <link rel="stylesheet" type="text/css" href="../../css/main2.css" />
@@ -22,34 +24,34 @@ at the bottom as this shows that this file is <code>::expoweb::/cave_data/augstb
 &lt;/head&gt;
 &lt;body&gt;
 &lt;cave&gt;
-&lt;non_public&gt;True&lt;/non_public&gt;
-&lt;caveslug&gt;1623-4&lt;/caveslug&gt;
-&lt;official_name&gt;Ritscherbachh&ouml;hle&lt;/official_name&gt;
-&lt;area&gt;1623&lt;/area&gt;
-&lt;area&gt;11&lt;/area&gt;
-&lt;kataster_code&gt;1/T(W) +&lt;/kataster_code&gt;
-&lt;kataster_number&gt;4&lt;/kataster_number&gt; 
-&lt;unofficial_number&gt;&lt;/unofficial_number&gt;
+	&lt;non_public&gt;True&lt;/non_public&gt;
+	&lt;caveslug&gt;1623-4&lt;/caveslug&gt;
+	&lt;official_name&gt;Ritscherbachh&ouml;hle&lt;/official_name&gt;
+	&lt;area&gt;1623&lt;/area&gt;
+	&lt;area&gt;11&lt;/area&gt;
+	&lt;kataster_code&gt;1/T(W) +&lt;/kataster_code&gt;
+	&lt;kataster_number&gt;4&lt;/kataster_number&gt; 
+	&lt;unofficial_number&gt;&lt;/unofficial_number&gt;
 
-&lt;entrance&gt;
-  &lt;entranceslug&gt;1623-4&lt;/entranceslug&gt;
-  &lt;letter&gt;&lt;/letter&gt;
-&lt;/entrance&gt;
+	&lt;entrance&gt;
+		&lt;entranceslug&gt;1623-4&lt;/entranceslug&gt;
+		&lt;letter&gt;&lt;/letter&gt;
+	&lt;/entrance&gt;
 
-&lt;explorers&gt;H&ouml;hlenforschervereinigung Altaussee, 1937&lt;/explorers&gt;
-&lt;underground_description&gt;&lt;/underground_description&gt;
-&lt;equipment&gt;&lt;/equipment&gt;
-&lt;references&gt;&lt;/references&gt;
-&lt;survey&gt;Plan at 1:100 by Alfred Auer, 1968 &lt;/survey&gt;
-&lt;kataster_status&gt;&lt;/kataster_status&gt;
-&lt;underground_centre_line&gt;&lt;/underground_centre_line&gt;
-&lt;notes&gt;&lt;/notes&gt;
-&lt;length&gt;12.3m&lt;/length&gt;
-&lt;depth&gt;1.07m&lt;/depth&gt;
-&lt;extent&gt;&lt;/extent&gt;
-&lt;survex_file&gt;&lt;/survex_file&gt;
-&lt;description_file&gt;augstb/4.htm&lt;/description_file&gt;
-&lt;url&gt;augstb/4.htm&lt;/url&gt;
+	&lt;explorers&gt;H&ouml;hlenforschervereinigung Altaussee, 1937&lt;/explorers&gt;
+	&lt;underground_description&gt;&lt;/underground_description&gt;
+	&lt;equipment&gt;&lt;/equipment&gt;
+	&lt;references&gt;&lt;/references&gt;
+	&lt;survey&gt;Plan at 1:100 by Alfred Auer, 1968 &lt;/survey&gt;
+	&lt;kataster_status&gt;&lt;/kataster_status&gt;
+	&lt;underground_centre_line&gt;&lt;/underground_centre_line&gt;
+	&lt;notes&gt;&lt;/notes&gt;
+	&lt;length&gt;12.3m&lt;/length&gt;
+	&lt;depth&gt;1.07m&lt;/depth&gt;
+	&lt;extent&gt;&lt;/extent&gt;
+	&lt;survex_file&gt;&lt;/survex_file&gt;
+	&lt;description_file&gt;augstb/4.htm&lt;/description_file&gt;
+	&lt;url&gt;augstb/4.htm&lt;/url&gt;
 &lt;/cave&gt;
 &lt;/body&gt;
 &lt;/html&gt;
@@ -59,6 +61,10 @@ at the bottom as this shows that this file is <code>::expoweb::/cave_data/augstb
 <p>As you can see, this is an XML tag format similar to HTML but with tags defined to hold cave survey data. These files are processed by troggle in real-time to produce an HTML file on the fly which is sent to your browser so that it 
 looks <a href="http://expo.survex.com/augstb/4.htm">like this</a> 
 
+<p>An explanation of what the field names mean and how they are used is on 
+the <a href="caveentryfields.html">cave entry fields</a> page. There is not an exact correspondance between
+the form and the file format however.
+
 <p>When you fill in the online form you creating a file just like the one above: troggle takes the input data from the form and creates the file. Troggle also stores the cave information in it's live memory when you use the form method. 
 <p>If  instead of using the form you create the file by hand and upload it to the server you will also need find a nerd to run the cave import procedure before troggle "knows" that the cave exists.
 <h3>Cave entrances</h3>
diff --git a/handbook/survey/newrig.html b/handbook/survey/newrig.html
index 6cc995592..f8cd4d586 100644
--- a/handbook/survey/newrig.html
+++ b/handbook/survey/newrig.html
@@ -1,5 +1,7 @@
+<!DOCTYPE html>
 <html>
 <head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>CUCC Expo Surveying Handbook: Drawing Up</title>
 <link rel="stylesheet" type="text/css" href="../../css/main2.css" />
 </head>
diff --git a/noinfo/create_dplong_table.py b/noinfo/create_dplong_table.py
index e1944a1d5..0656953b2 100755
--- a/noinfo/create_dplong_table.py
+++ b/noinfo/create_dplong_table.py
@@ -43,16 +43,15 @@ def print_caveline(number, l, d, w, cave):
 
 def parse_csvfile():
 	caveslist = []
-	print "Calculating SMK-system extent... ",
+	print ("Calculating SMK-system extent... "),
 	os.popen("cavern -v7 ../loser/smk-system.svx -o noinfo/smk-system.3d")
 	l,d,w = map(float, chomp(os.popen(CS_BINARY + " noinfo/smk-system -c ").read()).split("\t"))
 	caveslist.append(["", l,d,w, {"Name" : "<i>Schwarzmooskogelh&ouml;hlensystem</i>", "Autogen file" : ""}])
-	print "done\nParsing Cave list"
-        for cavefile in os.listdir("noinfo/cave_data"):
-          
-	cavetabfiles = dir("noinfo/cave_data/")
-	fieldnames=chomp(cavetabfile.next()).replace('"','').split(",")
-	cavetab = csv.DictReader(cavetabfile, fieldnames)
+	print ("done\nParsing Cave list")
+	for cavefile in os.listdir("noinfo/cave_data"):
+		cavetabfiles = dir("noinfo/cave_data/")
+		fieldnames=chomp(cavetabfile.next()).replace('"','').split(",")
+		cavetab = csv.DictReader(cavetabfile, fieldnames)
 	
 	# Gratuitiously complicated progress bar widget.
 	k = 0