Index: src/uk/me/parabola/mkgmap/reader/osm/OsmMapDataSource.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/OsmMapDataSource.java	(revision 4506)
+++ src/uk/me/parabola/mkgmap/reader/osm/OsmMapDataSource.java	(working copy)
@@ -325,6 +325,9 @@
 		setStyle(StyleImpl.readStyle(props));
 
 		usedTags.addAll(style.getUsedTags());
+		// make sure that we don't remove tags which are only used with the mkgmap:from-node: prefix 
+		style.getUsedTags().stream().filter(s -> s.startsWith(POIGeneratorHook.FROM_NODE_PREFIX))
+				.map(s -> s.substring(POIGeneratorHook.FROM_NODE_PREFIX.length())).forEach(usedTags::add);
 		usedTags.addAll(NameFinder.getNameTags(props));
 		converter = new StyledConverter(style, mapper, props);
 	}
Index: src/uk/me/parabola/mkgmap/reader/osm/POIGeneratorHook.java
===================================================================
--- src/uk/me/parabola/mkgmap/reader/osm/POIGeneratorHook.java	(revision 4506)
+++ src/uk/me/parabola/mkgmap/reader/osm/POIGeneratorHook.java	(working copy)
@@ -331,6 +331,9 @@
 		return noPOIs;
 
 	}
+	
+	/** Prefix that is added to tags which are copied from the original node. */
+	public static final String FROM_NODE_PREFIX = "mkgmap:from-node:";
 
 	private static Node createPOI(Element source, Coord poiCoord, short poiTypeTagKey, double wayLength) {
 		Node poi = new Node(source.getOriginalId(), poiCoord);
@@ -341,6 +344,16 @@
 		if (poiTypeTagKey == LINE2POI_TAG) {
 			poi.addTag(WAY_LENGTH_TAG, String.valueOf(Math.round(wayLength)));
 		}
+		
+		if (poiCoord instanceof CoordPOI) {
+			// add the original tags of the node with the prefix mkgmap:from-node:
+			for (Entry<String, String> entry : ((CoordPOI) poiCoord).getNode().getTagEntryIterator()) {
+				if (!entry.getKey().startsWith("mkgmap:")) {
+					poi.addTag(FROM_NODE_PREFIX + entry.getKey(), entry.getValue());
+				}
+			}
+		}
+
 		if (log.isDebugEnabled()) {
 			log.debug("Create POI",poi.toTagString(),"from",source.getId(),source.toTagString());
 		}
