Index: doc/options.txt
===================================================================
--- doc/options.txt	(revision 3620)
+++ doc/options.txt	(working copy)
@@ -126,6 +126,10 @@
 same code page and sorting options (e.g. --code-page, --latin1) must
 be used as were used to compile the individual map tiles.
 
+;--omit-highway-refs-from-index
+:    Causes labels containing a road reference with a highway shield to be
+omitted from the address index. 
+
 ;--bounds=directory|zipfile
 :     A directory or a zip file containing the preprocessed bounds files. 
 Bounds files in a zip file must be located in the zip file's root directory.
Index: resources/help/en/options
===================================================================
--- resources/help/en/options	(revision 3620)
+++ resources/help/en/options	(working copy)
@@ -125,6 +125,10 @@
   same code page and sorting options (e.g. --code-page, --latin1) must
   be used as were used to compile the individual map tiles.
   
+--omit-highway-refs-from-index
+    Causes labels containing a road reference with a highway shield to be
+    omitted from the address index. 
+
 --x-split-name-index
     A temporary option to enable indexing each part of a street name separately.
     So for example if the street is "Aleksandra Gryglewskiego" then you will be able to
@@ -296,18 +300,18 @@
   Area name is displayed on Garmin units (or at least on eTrex) as the second 
   part of the mapname in the list of the individual maps.
    
---copyright-message=note
-	Specify a copyright message for files that do not contain one.
+--copyright-message=note
+	Specify a copyright message for files that do not contain one.
+
+--copyright-file=file
+	Specify copyright messages from a file.
+	Note that the first copyright message is not displayed on a device, but is 
+	shown in BaseCamp. The copyright file must include at least two lines.
+
+--license-file=file
+	Specify a file which content will be added as license. 
+  All entries of all maps will be merged in the overview map.
 
---copyright-file=file
-	Specify copyright messages from a file.
-	Note that the first copyright message is not displayed on a device, but is 
-	shown in BaseCamp. The copyright file must include at least two lines.
-
---license-file=file
-	Specify a file which content will be added as license. 
-  All entries of all maps will be merged in the overview map.
-
 Optimization options:
 
 --reduce-point-density=NUM
Index: src/uk/me/parabola/imgfmt/app/Label.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/Label.java	(revision 3620)
+++ src/uk/me/parabola/imgfmt/app/Label.java	(working copy)
@@ -142,4 +142,8 @@
 	public int hashCode() {
 		return offset;
 	}
+
+	public static boolean hasHighwayShield(String s) {
+		return SHIELDS.matcher(s).find();
+	}
 }
Index: src/uk/me/parabola/imgfmt/app/mdr/MDRFile.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/mdr/MDRFile.java	(revision 3620)
+++ src/uk/me/parabola/imgfmt/app/mdr/MDRFile.java	(working copy)
@@ -71,8 +71,10 @@
 
 	private final MdrSection[] sections;
 	private PointerSizes sizes;
+	private boolean omitHighwayRefsFromIndex = false;
 
 	public MDRFile(ImgChannel chan, MdrConfig config) {
+		omitHighwayRefsFromIndex = config.isOmitHighwayRefsFromIndex();
 		Sort sort = config.getSort();
 
 		forDevice = config.isForDevice();
@@ -221,6 +223,9 @@
 				continue;
 			
 			String name = lab.getText();
+			if (omitHighwayRefsFromIndex && Label.hasHighwayShield(name))
+				continue;
+
 			String cleanName = cleanUpName(name);
 			int strOff = createString(cleanName);
 
Index: src/uk/me/parabola/imgfmt/app/mdr/MdrConfig.java
===================================================================
--- src/uk/me/parabola/imgfmt/app/mdr/MdrConfig.java	(revision 3620)
+++ src/uk/me/parabola/imgfmt/app/mdr/MdrConfig.java	(working copy)
@@ -33,6 +33,7 @@
 	private Sort sort;
 	private File outputDir;
 	private boolean splitName;
+	private boolean omitHighwayRefsFromIndex;
 
 	/**
 	 * True if we are creating the file, rather than reading it.
@@ -96,4 +97,12 @@
 	public boolean isSplitName() {
 		return splitName;
 	}
+
+	public void setOmitHighwayRefsFromIndex(boolean omit) {
+		omitHighwayRefsFromIndex = omit;
+	}
+
+	public boolean isOmitHighwayRefsFromIndex() {
+		return omitHighwayRefsFromIndex;
+	}
 }
Index: src/uk/me/parabola/mkgmap/combiners/GmapsuppBuilder.java
===================================================================
--- src/uk/me/parabola/mkgmap/combiners/GmapsuppBuilder.java	(revision 3620)
+++ src/uk/me/parabola/mkgmap/combiners/GmapsuppBuilder.java	(working copy)
@@ -84,6 +84,7 @@
 	private final Map<Integer, MdrBuilder> mdrBuilderMap = new LinkedHashMap<Integer, MdrBuilder>();
 	private final Map<Integer, Sort> sortMap = new LinkedHashMap<Integer, Sort>();
 	private boolean splitName;
+	private boolean omitHighwayRefsFromIndex;
 
 
 	public void init(CommandArgs args) {
@@ -92,6 +93,7 @@
 		overallDescription = args.getDescription();
 		outputDir = args.getOutputDir();
 		splitName = args.get("split-name-index", false);
+		omitHighwayRefsFromIndex = args.get("omit-highway-refs-from-index", false);
 	}
 
 	/**
@@ -108,7 +110,7 @@
 			return mdrBuilder;
 
 		mdrBuilder = new MdrBuilder();
-		mdrBuilder.initForDevice(sort, outputDir, splitName);
+		mdrBuilder.initForDevice(sort, outputDir, splitName, omitHighwayRefsFromIndex);
 		mdrBuilderMap.put(familyId, mdrBuilder);
 		return mdrBuilder;
 	}
Index: src/uk/me/parabola/mkgmap/combiners/MdrBuilder.java
===================================================================
--- src/uk/me/parabola/mkgmap/combiners/MdrBuilder.java	(revision 3620)
+++ src/uk/me/parabola/mkgmap/combiners/MdrBuilder.java	(working copy)
@@ -112,6 +112,7 @@
 		config.setOutputDir(outputDir);
 		config.setSort(sort);
 		config.setSplitName(args.get("split-name-index", false));
+		config.setOmitHighwayRefsFromIndex (args.get("omit-highway-refs-from-index", false));
 
 		// Wrap the MDR channel with the MDRFile object
 		mdrFile = new MDRFile(mdrChan, config);
@@ -129,7 +130,7 @@
 		}
 	}
 
-	void initForDevice(Sort sort, String outputDir, boolean splitName) {
+	void initForDevice(Sort sort, String outputDir, boolean splitName, boolean omitHighwayRefsFromIndex ) {
 		// Set the options that we are using for the mdr.
 		MdrConfig config = new MdrConfig();
 		config.setHeaderLen(568);
@@ -137,6 +138,7 @@
 		config.setForDevice(true);
 		config.setSort(sort);
 		config.setSplitName(splitName);
+		config.setOmitHighwayRefsFromIndex (omitHighwayRefsFromIndex);
 
 		// Wrap the MDR channel with the MDRFile object
 		try {
