Index: build.xml
===================================================================
--- build.xml	(revision 3677)
+++ build.xml	(working copy)
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 <!--
-		File: build.xml 
+		File: build.xml xxx 
 		
 		Copyright (C) 2006, 2012 mkgmap contributors
 		
@@ -237,7 +237,7 @@
 		<javac srcdir="${src}" destdir="${build.classes}" encoding="utf-8" debug="true" includeantruntime="false">
 			<include name="**/*.java" />
 			<classpath refid="main"/>
-			<exclude name="**/optional/*.java"/>
+			<exclude name="**/dem/optional/*.java"/>
 		</javac>
 	</target>
 
Index: src/uk/me/parabola/mkgmap/combiners/OverviewBuilder.java
===================================================================
--- src/uk/me/parabola/mkgmap/combiners/OverviewBuilder.java	(revision 3677)
+++ src/uk/me/parabola/mkgmap/combiners/OverviewBuilder.java	(working copy)
@@ -385,4 +385,10 @@
 		}
 		return list;
 	}
+
+	public void setRes(int resolution) {
+		LevelInfo[] mapLevels = new LevelInfo[1];
+		mapLevels[0] = new LevelInfo(0, resolution);
+		overviewSource.setMapLevels(mapLevels);
+	}
 }
Index: src/uk/me/parabola/mkgmap/main/Main.java
===================================================================
--- src/uk/me/parabola/mkgmap/main/Main.java	(revision 3677)
+++ src/uk/me/parabola/mkgmap/main/Main.java	(working copy)
@@ -41,7 +41,9 @@
 
 import uk.me.parabola.imgfmt.ExitException;
 import uk.me.parabola.imgfmt.MapFailedException;
+import uk.me.parabola.imgfmt.app.map.MapReader;
 import uk.me.parabola.imgfmt.app.srt.Sort;
+import uk.me.parabola.imgfmt.app.trergn.Zoom;
 import uk.me.parabola.log.Logger;
 import uk.me.parabola.mkgmap.ArgumentProcessor;
 import uk.me.parabola.mkgmap.CommandArgs;
@@ -56,6 +58,7 @@
 import uk.me.parabola.mkgmap.combiners.OverviewBuilder;
 import uk.me.parabola.mkgmap.combiners.OverviewMap;
 import uk.me.parabola.mkgmap.combiners.TdbBuilder;
+import uk.me.parabola.mkgmap.general.LevelInfo;
 import uk.me.parabola.mkgmap.osmstyle.StyleFileLoader;
 import uk.me.parabola.mkgmap.osmstyle.StyleImpl;
 import uk.me.parabola.mkgmap.reader.osm.Style;
@@ -531,10 +534,13 @@
 		log.info("Combining maps");
 
 		args.setSort(getSort(args));
-
+		OverviewBuilder ovb = null;
 		// Get them all set up.
-		for (Combiner c : combiners)
+		for (Combiner c : combiners){
 			c.init(args);
+			if (c instanceof OverviewBuilder)
+				ovb = (OverviewBuilder) c;
+		}
 
 		Collections.sort(filenames, new Comparator<FilenameTask>() {
 			public int compare(FilenameTask o1, FilenameTask o2) {
@@ -561,7 +567,7 @@
 		// will contain img files for which an additional ovm file was found
 		HashSet<String> foundOvmFiles = new HashSet<>();
 		// try OverviewBuilder with special files  
-		if (tdbBuilderAdded){
+		if (tdbBuilderAdded && ovb != null){
 			for (FilenameTask file : filenames) {
 				if (file == null || file.isCancelled())
 					continue;
@@ -576,15 +582,34 @@
 					fileInfo.setArgs(file.getArgs());
 					// add the real input file 
 					foundOvmFiles.add(file.getFilename());
-					for (Combiner c : combiners){
-						if (c instanceof OverviewBuilder)
-							c.onMapEnd(fileInfo);
-					}
+					ovb.onMapEnd(fileInfo);
 				} catch (FileNotFoundException ignored) {
 				}
 			} 
 		}
 		
+		if (foundOvmFiles.isEmpty() && ovb != null){
+			String overviewLevels = args.get("overview-levels", null);
+			if (overviewLevels != null){
+				LevelInfo[] levels = LevelInfo.createFromString(overviewLevels); 
+				for (int i = 0; i < levels.length; i++)
+					levels[i] = new LevelInfo(levels.length-i-1,levels[i].getBits());
+				ovb.setRes(levels[0].getBits());
+			} else {
+				int minRes = 23;
+				for (FilenameTask file : filenames) {
+					try (MapReader mapReader = new MapReader(file.getFilename())){
+						Zoom[] levels = mapReader.getLevels();
+						if (levels[1].getResolution() < minRes)
+							minRes = levels[1].getResolution();
+					} catch (IOException ignored) {
+					}				
+					
+				}
+				ovb.setRes(minRes);
+			}
+		}
+		
 		// Tell them about each filename (OverviewBuilder excluded) 
 		for (FilenameTask file : filenames) {
 			if (file == null || file.isCancelled())
@@ -622,6 +647,7 @@
 		boolean indexOpt = args.exists("index");
 		boolean gmapOpt = args.exists("gmapsupp");
 		boolean tdbOpt = args.exists("tdbfile");
+		
 		if (tdbOpt || createTdbFiles){ 
 			addTdbBuilder();
 		}
