diff --git a/org.eclipse.jdt.debug.tests/testprograms/ModelPresentationTests.java b/org.eclipse.jdt.debug.tests/testprograms/ModelPresentationTests.java
new file mode 100644
index 0000000..e8d8fa8
--- /dev/null
+++ b/org.eclipse.jdt.debug.tests/testprograms/ModelPresentationTests.java
@@ -0,0 +1,22 @@
+/*******************************************************************************
+ *  Copyright (c) 2020 Julian Honnen
+ *
+ *  This program and the accompanying materials
+ *  are made available under the terms of the Eclipse Public License 2.0
+ *  which accompanies this distribution, and is available at
+ *  https://www.eclipse.org/legal/epl-2.0/
+ *
+ *  SPDX-License-Identifier: EPL-2.0
+ *
+ *  Contributors:
+ *     Julian Honnen <julian.honnen@vector.com> - initial API and implementation
+ *******************************************************************************/
+
+public class ModelPresentationTests {
+
+	public static void main(String[] args) {
+		Object stringArray = new String[0];
+		System.out.println(stringArray);
+	}
+
+}
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java
index 98a5c47..e16bd72 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java
@@ -206,7 +206,7 @@
 			"org.eclipse.debug.tests.targets.HcrClass9", "TestContributedStepFilterClass", "TerminateAll_01", "TerminateAll_02", "StepResult1",
 			"StepResult2", "StepResult3", "StepUncaught", "TriggerPoint_01", "BulkThreadCreationTest", "MethodExitAndException",
 			"Bug534319earlyStart", "Bug534319lateStart", "Bug534319singleThread", "Bug534319startBetwen", "MethodCall", "Bug538303", "Bug540243",
-			"OutSync", "OutSync2", "ConsoleOutputUmlaut", "ErrorRecurrence" };
+			"OutSync", "OutSync2", "ConsoleOutputUmlaut", "ErrorRecurrence", "ModelPresentationTests" };
 
 	/**
 	 * the default timeout
diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/ui/presentation/ModelPresentationTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/ui/presentation/ModelPresentationTests.java
index 7a7ead3..b996ff5 100644
--- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/ui/presentation/ModelPresentationTests.java
+++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/ui/presentation/ModelPresentationTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 IBM Corporation and others.
+ * Copyright (c) 2011, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -13,8 +13,14 @@
  *******************************************************************************/
 package org.eclipse.jdt.debug.tests.ui.presentation;
 
+import org.eclipse.debug.ui.IDebugModelPresentation;
 import org.eclipse.jdt.core.Signature;
+import org.eclipse.jdt.debug.core.IJavaLineBreakpoint;
+import org.eclipse.jdt.debug.core.IJavaObject;
+import org.eclipse.jdt.debug.core.IJavaStackFrame;
+import org.eclipse.jdt.debug.core.IJavaThread;
 import org.eclipse.jdt.debug.core.IJavaValue;
+import org.eclipse.jdt.debug.core.IJavaVariable;
 import org.eclipse.jdt.debug.tests.AbstractDebugTest;
 import org.eclipse.jdt.internal.debug.ui.JDIModelPresentation;
 
@@ -136,4 +142,33 @@
 			pres.dispose();
 		}
 	}
+
+	/**
+	 * Tests displayVariableTypeNames option
+	 */
+	public void testShowTypeTest() throws Exception {
+		String typeName = "ModelPresentationTests";
+		IJavaLineBreakpoint bp = createLineBreakpoint(19, typeName);
+		JDIModelPresentation pres = new JDIModelPresentation();
+
+		IJavaThread thread = null;
+		try {
+			thread = launchToLineBreakpoint(typeName, bp);
+
+			IJavaStackFrame frame = (IJavaStackFrame) thread.getTopStackFrame();
+			IJavaVariable stringArrayVariable = findVariable(frame, "stringArray");
+			long id = ((IJavaObject) stringArrayVariable.getValue()).getUniqueId();
+
+			assertEquals("stringArray= String[0]  (id=" + id + ")", pres.getText(stringArrayVariable));
+
+			pres.setAttribute(IDebugModelPresentation.DISPLAY_VARIABLE_TYPE_NAMES, Boolean.TRUE);
+
+			assertEquals("String[] stringArray= String[0]  (id=" + id + ")", pres.getText(stringArrayVariable));
+
+		} finally {
+			terminateAndRemove(thread);
+			removeAllBreakpoints();
+			pres.dispose();
+		}
+	}
 }
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIModelPresentation.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIModelPresentation.java
index c5696fa..3008731 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIModelPresentation.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/JDIModelPresentation.java
@@ -1295,22 +1295,8 @@
 			javaValue = (IJavaValue) var.getValue();
 		} catch (DebugException e1) {
 		}
-		boolean showTypes= isShowVariableTypeNames();
 		StringBuilder buff= new StringBuilder();
-		String typeName= DebugUIMessages.JDIModelPresentation_unknown_type__2;
-		try {
-			if (javaValue != null) {
-				typeName = javaValue.getReferenceTypeName();
-				if (showTypes) {
-					typeName = getQualifiedName(typeName);
-				}
-			}
-		} catch (DebugException exception) {
-		}
-		if (showTypes) {
-			buff.append(typeName);
-			buff.append(' ');
-		}
+		appendTypeName(javaValue, buff);
 		buff.append(varLabel);
 
 		// add declaring type name if required
@@ -1335,6 +1321,22 @@
 		return buff.toString();
 	}
 
+	private void appendTypeName(IJavaValue javaValue, StringBuilder buff) {
+		if (!isShowVariableTypeNames()) {
+			return;
+		}
+
+		String typeName = DebugUIMessages.JDIModelPresentation_unknown_type__2;
+		try {
+			if (javaValue != null) {
+				typeName = getQualifiedName(javaValue.getReferenceTypeName());
+			}
+		} catch (DebugException exception) {
+		}
+		buff.append(typeName);
+		buff.append(' ');
+	}
+
 	/**
 	 * Returns text for the given value based on user preferences to display
 	 * toString() details.
