diff a/application/org.openjdk.jmc.flightrecorder.flameview/pom.xml b/application/org.openjdk.jmc.flightrecorder.flameview/pom.xml
--- a/application/org.openjdk.jmc.flightrecorder.flameview/pom.xml
+++ b/application/org.openjdk.jmc.flightrecorder.flameview/pom.xml
@@ -128,10 +128,22 @@
 							<url>https://cdn.jsdelivr.net/gh/spiermar/d3-flame-graph@2.0.3/dist/d3-flamegraph.min.js</url>
 							<unpack>false</unpack>
 							<outputDirectory>${download-maven-plugin.output}</outputDirectory>
 						</configuration>
 					</execution>
+					<execution>
+						<id>d3-flamegraph-js-ie</id>
+						<phase>${download-maven-plugin.phase}</phase>
+						<goals>
+							<goal>wget</goal>
+						</goals>
+						<configuration>
+							<url>https://cdn.jsdelivr.net/gh/aptmac/d3-flame-graph@internet-explorer-compatibility/dist/d3-flamegraph-ie.min.js</url>
+							<unpack>false</unpack>
+							<outputDirectory>${download-maven-plugin.output}</outputDirectory>
+						</configuration>
+					</execution>
 				</executions>
 			</plugin>
 			<!-- The formatter currently dislikes the javascript for some reason, but this is how to enable JavaScript formatting
 			<plugin>
 				<groupId>com.diffplug.spotless</groupId>
diff a/application/org.openjdk.jmc.flightrecorder.flameview/src/main/java/org/openjdk/jmc/flightrecorder/flameview/views/FlameGraphView.java b/application/org.openjdk.jmc.flightrecorder.flameview/src/main/java/org/openjdk/jmc/flightrecorder/flameview/views/FlameGraphView.java
--- a/application/org.openjdk.jmc.flightrecorder.flameview/src/main/java/org/openjdk/jmc/flightrecorder/flameview/views/FlameGraphView.java
+++ b/application/org.openjdk.jmc.flightrecorder.flameview/src/main/java/org/openjdk/jmc/flightrecorder/flameview/views/FlameGraphView.java
@@ -75,10 +75,12 @@
 import org.openjdk.jmc.flightrecorder.stacktrace.FrameSeparator.FrameCategorization;
 import org.openjdk.jmc.flightrecorder.ui.FlightRecorderUI;
 import org.openjdk.jmc.flightrecorder.ui.messages.internal.Messages;
 import org.openjdk.jmc.ui.CoreImages;
 import org.openjdk.jmc.ui.common.util.AdapterUtil;
+import org.openjdk.jmc.ui.common.util.Environment;
+import org.openjdk.jmc.ui.common.util.Environment.OSType;
 import org.openjdk.jmc.ui.handlers.MCContextMenuManager;
 import org.openjdk.jmc.ui.misc.DisplayToolkit;
 
 public class FlameGraphView extends ViewPart implements ISelectionListener {
 	private static final String UNCLASSIFIABLE_FRAME = getStacktraceMessage(STACKTRACE_UNCLASSIFIABLE_FRAME);
@@ -95,18 +97,24 @@
 		String jsD3V4 = "jslibs/d3.v4.min.js";
 		// from: https://cdnjs.cloudflare.com/ajax/libs/d3-tip/0.9.1/d3-tip.min.js
 		String jsD3Tip = "jslibs/d3-tip.min.js";
 		// from: https://cdn.jsdelivr.net/gh/spiermar/d3-flame-graph@2.0.3/dist/d3-flamegraph.min.js
 		String jsD3FlameGraph = "jslibs/d3-flamegraph.min.js";
+		// from: https://cdn.jsdelivr.net/gh/aptmac/d3-flame-graph@internet-explorer-compatibility/dist/d3-flamegraph-ie.min.js
+		String jsD3FlameGraphIE = "jslibs/d3-flamegraph-ie.min.js";
 		// jmc flameview coloring functions
 		String jsFlameviewColoring = "flameviewColoring.js";
 
+		if (Environment.getOSType().equals(OSType.WINDOWS)) {
+			jsD3FlameGraph = jsD3FlameGraphIE;
+		}
+
 		String jsIeLibraries = loadLibraries(jsHtml5shiv, jsRespond);
 		String jsD3Libraries = loadLibraries(jsD3V4, jsD3Tip, jsD3FlameGraph);
 
 		// formatter arguments for the template: %1 - CSSs, %2 - IE9 specific scripts, %3 - 3rd party scripts %4 - 4th Flameview Coloring
-		HTML_PAGE = String.format(fileContent("page.template"), fileContent(cssD3Flamegraph), jsIeLibraries,
+		HTML_PAGE = String.format(fileContent("template.html"), fileContent(cssD3Flamegraph), jsIeLibraries,
 				jsD3Libraries, fileContent(jsFlameviewColoring));
 	}
 
 	private static final ExecutorService MODEL_EXECUTOR = Executors.newFixedThreadPool(1);
 	private FrameSeparator frameSeparator;
diff a/application/org.openjdk.jmc.flightrecorder.flameview/src/main/js/flameviewColoring.js b/application/org.openjdk.jmc.flightrecorder.flameview/src/main/js/flameviewColoring.js
--- a/application/org.openjdk.jmc.flightrecorder.flameview/src/main/js/flameviewColoring.js
+++ b/application/org.openjdk.jmc.flightrecorder.flameview/src/main/js/flameviewColoring.js
@@ -55,78 +55,89 @@
 const packageConsideredDepth = 3;
 const packageMarkerJava = "java";
 const packageMarkerSun = "sun";
 const packageMarkerComSunAndJdk = "comSunAndJdk";
 const packageMarkerRest = "rest";
-const packagesIdentifierMap = new Map().set("java.", packageMarkerJava).set("sun.", packageMarkerSun).set("com.sun.", 
-		packageMarkerComSunAndJdk).set("jdk.", packageMarkerComSunAndJdk);
-const packageColorMap = new Map().set("", rootPackageColor);
-
-const colorByPackage = function (p) {
+const packagesIdentifierMap = {
+	"java.": packageMarkerJava,
+	"sun.": packageMarkerSun,
+	"com.sun.": packageMarkerComSunAndJdk,
+	"jdk.": packageMarkerComSunAndJdk
+}
+const packageColorMap = {
+	"": rootPackageColor
+}
+
+function colorByPackage (p) {
 	if (p === undefined) {
 		return invalidPackageColor;
 	} else {
 		const packageNameStrip = stripPackageName(p);
-		const packageSelectedColor = packageColorMap.get(packageNameStrip);
+		const packageSelectedColor = packageColorMap[packageNameStrip];
 		if (packageSelectedColor === undefined) {
 			const packageMarkerSelected = getPackageMarker(packageNameStrip);
 			const packageNameStripHash = packageNameStrip.hashCode();
 			switch (packageMarkerSelected) {
 			case packageMarkerJava:
-				packageColorMap.set(packageNameStrip, packageJavaColorLightGray);
+				packageColorMap[packageNameStrip] = packageJavaColorLightGray;
 				break;
 			case packageMarkerComSunAndJdk:
-				packageColorMap.set(packageNameStrip, packageComSunAndJdkColorDarkGray);
+				packageColorMap[packageNameStrip] = packageComSunAndJdkColorDarkGray;
 				break;
 			case packageMarkerSun:
-				packageColorMap.set(packageNameStrip, packageSunDarkColorGray);
+				packageColorMap[packageNameStrip] = packageSunDarkColorGray;
 				break;
 			case packageMarkerRest:
 				const packageRestSelectedColor = createHslColorString(adjustHslPropertyByHash(packageNameStripHash, packageRestValueH, packageRestValueHMax), packageRestSLValues[0], packageRestSLValues[1]);
-				packageColorMap.set(packageNameStrip, packageRestSelectedColor);
+				packageColorMap[packageNameStrip] = packageRestSelectedColor;
 				break;
 			}
-			return packageColorMap.get(packageNameStrip);
+			return packageColorMap[packageNameStrip];
 		} else {
 			return packageSelectedColor;
 		}
 	}
-};
-
-const getPackageMarker = function(p){
-	for(let k of packagesIdentifierMap.keys()){
-		if(p.startsWith(k)){
-			return packagesIdentifierMap.get(k);
-		}
-	}
-	return packageMarkerRest;
-};
-
-const stripPackageName = function (p) {
+}
+
+// string.startsWith() is ECMAScript 6; incompatible with Internet Explorer
+function startsWith (package, identifier) {
+	return package.lastIndexOf(identifier, 0) === 0;
+}
+
+function getPackageMarker (p) {
+    for (var identifier in packagesIdentifierMap) {
+        if (startsWith(p, identifier)) {
+            return packagesIdentifierMap[identifier];
+        }
+    }
+    return packageMarkerRest;
+}
+
+function stripPackageName (p) {
 	const splitString = p.split("\u002E");
 	const number = Math.min(splitString.length, packageConsideredDepth);
 	return splitString.slice(0, number).join("\u002E");
-};
+}
 
-const adjustHslPropertyByHash = function (hash, min, max) {
+function adjustHslPropertyByHash (hash, min, max) {
 	const proposedValue = hash % (max - min) + min;
 	return Math.min(proposedValue, max);
-};
+}
 
-const createHslColorString = function(h,s,l){
+function createHslColorString (h,s,l) {
 	return "hsl\u0028" + h + "\u002c " + s + "\u0025\u002c " + l + "\u0025\u0029";
-};
+}
 
-const colorCell = function (d) {
+function colorCell (d) {
 	return colorByPackage(d.data.p);
-};
+}
 
-const adjustTip = function (d) {
+function adjustTip (d) {
 	var tipMessage = d.data.n + htmlTagBr;
 	if( d.data.d === undefined) {
 		tipMessage +=  "package: " + d.data.p + htmlTagBr;
 	} else {
 		tipMessage += "description: " + d.data.d + htmlTagBr;
 	}
 	tipMessage += "samples: " + d.data.v;
 	return tipMessage;
-};
+}
diff a/application/org.openjdk.jmc.flightrecorder.flameview/src/main/resources/page.template b/application/org.openjdk.jmc.flightrecorder.flameview/src/main/resources/template.html
--- a/application/org.openjdk.jmc.flightrecorder.flameview/src/main/resources/page.template
+++ b/application/org.openjdk.jmc.flightrecorder.flameview/src/main/resources/template.html
