Index: src/uk/me/parabola/mkgmap/reader/hgt/HGTReader.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/hgt/HGTReader.java	(revision 4159)
+++ src/uk/me/parabola/mkgmap/reader/hgt/HGTReader.java	(working copy)
@@ -18,9 +18,11 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.nio.ByteBuffer;
+import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.zip.ZipEntry;
@@ -75,6 +77,8 @@
 				knownAsMissing = missingSet.contains(fileName);
 		}
 		if (!knownAsMissing) {
+			List<String> viewFinderNames = calcViewFinderName(lat,lon);
+
 			for (String dir : dirs) {
 				dir = dir.trim();
 				File f = new File (dir);
@@ -109,6 +113,14 @@
 						path = fName;
 						return;
 					}
+					for (String viewFinderName : viewFinderNames) {
+						fName = Utils.joinPath(dir, viewFinderName);
+						checkZip(fName, fileName); // try to find the viewfinder zip 
+						if (res > 0) {
+							path = fName;
+							return;
+						}
+					}
 				} else {
 					if (dir.endsWith(".zip")) {
 						checkZip(dir, fileName); // try to find *.hgt in zip file
@@ -143,6 +155,72 @@
 	}
 	
 	/**
+	 * Calculate name for SRTM source used here:
+	 * http://viewfinderpanoramas.org/Coverage%20map%20viewfinderpanoramas_org3.htm
+	 * The combine several hgt files in one zip.
+	 * @param lat
+	 * @param lon
+	 * @return List of zip names which might contain the needed hgt file 
+	 */
+	private List<String> calcViewFinderName(int lat, int lon) {
+		List<String> names = new ArrayList<>();
+		if (lat >= 63 && lat <= 66 && lon >= -25 && lon <= -14) {
+			// special case Iceland
+			names.add("ISL.zip");
+			return names;
+		}
+		int numPart = lon / 6 + 30;
+		if (lon > 0 || lon % 6 == 0)
+			numPart++;
+		
+		String stdName = (lat < 0) ? "S" : "" + (char)(Math.floor(Math.abs(lat)/4) + 65) + numPart + ".zip";
+		names.add(stdName);
+		
+		// special cases Greenland
+		if (lat >= 59 && lat <= 63 && lon >= -52 && lon <= -41 ) {
+			names.set(0, "GL-South.zip"); 
+		}
+		if (stdName.startsWith("Q") && numPart >= 22 && numPart <= 23)
+			names.set(0, "GL-West.zip"); 
+		if (stdName.startsWith("R") && numPart >= 21 && numPart <= 23)
+			names.set(0, "GL-West.zip"); 
+		if (stdName.startsWith("S") && numPart >= 19 && numPart <= 23)
+			names.set(0, "GL-West.zip"); 
+		
+		if (lat >= 64 && lat <= 75 && lon >= -42 && lon <= -18) {
+			names.set(0, "GL-East.zip"); // see also Iceland
+		}
+		if (stdName.startsWith("S") && numPart >= 19 && numPart <= 20)
+			names.set(0, "GL-North.zip"); 
+		if (stdName.startsWith("T") && numPart >= 18 && numPart <= 19)
+			names.add("GL-North.zip"); // overlap
+		if (stdName.startsWith("T") && numPart >= 20 && numPart <= 28)
+			names.set(0, "GL-North.zip"); 
+		if (stdName.startsWith("U") && numPart >= 19 && numPart <= 22)
+			names.add("GL-North.zip");  // overlap
+		if (stdName.startsWith("U") && numPart >= 23 && numPart <= 29)
+			names.set(0, "GL-North.zip"); 
+
+		if (lat <= -66) {
+			// Antarctica
+			if ("SP23.zip".equals(stdName) || "SR15.zip".equals(stdName) || "SQ23.zip".equals(stdName)) {
+				
+			} else {
+				names.clear();
+				if (lon < -90)
+					names.add("01-15.zip"); // AN1
+				else if (lon < 0)
+					names.add("16-30.zip"); // AN2
+				else if (lon < 90)
+					names.add("31-45.zip"); // AN3
+				else 
+					names.add("46-60.zip"); // AN4
+			}
+		}
+		return names;
+	}
+
+	/**
 	 * try to find the needed file. Different hgt providers use slightly different methods to
 	 * pack their data. 
 	 * @param zipFile
