Index: src/uk/me/parabola/mkgmap/build/MapBuilder.java
===================================================================
--- src/uk/me/parabola/mkgmap/build/MapBuilder.java	(revision 3741)
+++ src/uk/me/parabola/mkgmap/build/MapBuilder.java	(working copy)
@@ -13,11 +13,10 @@
 
 package uk.me.parabola.mkgmap.build;
 
-import java.io.BufferedReader;
 import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
 import java.nio.charset.Charset;
+import java.nio.charset.MalformedInputException;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -825,25 +824,30 @@
 	 */
 	private void getMapInfo() {
 		if (licenseFileName != null) {
-			File file = new File(licenseFileName);
-
+			List<String> licenseArray = new ArrayList<>();
 			try {
-				BufferedReader reader = Files.newBufferedReader(file.toPath(), Charset.forName("utf-8"));
-				String text;
-
-				// repeat until all lines is read
-				while ((text = reader.readLine()) != null) {
-					if (!text.isEmpty()) {
-						mapInfo.add(text);
+				File file = new File(licenseFileName);
+				try {
+					licenseArray = Files.readAllLines(file.toPath(), StandardCharsets.US_ASCII);
+				}
+				catch (MalformedInputException e1) {
+					try {
+						licenseArray = Files.readAllLines(file.toPath(), StandardCharsets.UTF_8);
 					}
+					catch (MalformedInputException e2) {
+						try {
+							licenseArray = Files.readAllLines(file.toPath(), StandardCharsets.UTF_16);
+						}
+						catch (MalformedInputException e3) {
+							licenseArray = Files.readAllLines(file.toPath(), Charset.defaultCharset());
+						}
+					}
 				}
-
-				reader.close();
-			} catch (FileNotFoundException e) {
-				throw new ExitException("Could not open license file " + licenseFileName);
-			} catch (IOException e) {
-				throw new ExitException("Error reading license file " + licenseFileName);
 			}
+			catch (Exception e) {
+				throw new ExitException("Error reading license file " + licenseFileName, e);
+			}
+			mapInfo.addAll(licenseArray);
 		} else {
 			mapInfo.add("Map data (c) OpenStreetMap and its contributors");
 			mapInfo.add("http://www.openstreetmap.org/copyright");
Index: src/uk/me/parabola/mkgmap/main/Main.java
===================================================================
--- src/uk/me/parabola/mkgmap/main/Main.java	(revision 3741)
+++ src/uk/me/parabola/mkgmap/main/Main.java	(working copy)
@@ -142,7 +142,13 @@
 			++numExitExceptions;
 		} catch (ExitException e) {
 			++numExitExceptions;
-			System.err.println(e.getMessage());
+			String message = e.getMessage();
+			Throwable cause = e.getCause();
+			while (cause != null) {
+				message += "\r\n" + cause.toString();
+				cause = cause.getCause();
+			}
+			System.err.println(message);
 		}
 		
 		System.out.println("Number of ExitExceptions: " + numExitExceptions);
Index: src/uk/me/parabola/mkgmap/reader/osm/OsmMapDataSource.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/OsmMapDataSource.java	(revision 3741)
+++ src/uk/me/parabola/mkgmap/reader/osm/OsmMapDataSource.java	(working copy)
@@ -23,6 +23,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.Charset;
+import java.nio.charset.MalformedInputException;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -145,19 +147,27 @@
 			List<String> copyrightArray = new ArrayList<>();
 			try {
 				File file = new File(copyrightFileName);
-				BufferedReader reader = Files.newBufferedReader(file.toPath(), Charset.forName("utf-8"));
-
-				String text;
-				while ((text = reader.readLine()) != null) {
-					copyrightArray.add(text);
+				try {
+					copyrightArray = Files.readAllLines(file.toPath(), StandardCharsets.US_ASCII);
 				}
-
-				reader.close();
-			} catch (FileNotFoundException e) {
-				throw new ExitException("Could not open copyright file " + copyrightFileName);
-			} catch (IOException e) {
-				throw new ExitException("Error reading copyright file " + copyrightFileName);
+				catch (MalformedInputException e1) {
+					try {
+						copyrightArray = Files.readAllLines(file.toPath(), StandardCharsets.UTF_8);
+					}
+					catch (MalformedInputException e2) {
+						try {
+							copyrightArray = Files.readAllLines(file.toPath(), StandardCharsets.UTF_16);
+						}
+						catch (MalformedInputException e3) {
+							copyrightArray = Files.readAllLines(file.toPath(), Charset.defaultCharset());
+						}
+					}
+					
+				}
 			}
+			catch (Exception e) {
+				throw new ExitException("Error reading copyright file " + copyrightFileName, e);
+			}
 			String[] copyright = new String[copyrightArray.size()];
 			copyrightArray.toArray(copyright);
 			return copyright;
