diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpInfoHoverCreator.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpInfoHoverCreator.java
index 02a88aa..b946c37 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpInfoHoverCreator.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpInfoHoverCreator.java
@@ -304,8 +304,8 @@
 			public void keyReleased(final KeyEvent e) {}
 		});
 		
-		setBackgroundColor(getShell().getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND));
-		setForegroundColor(getShell().getDisplay().getSystemColor(SWT.COLOR_INFO_FOREGROUND));
+		setBackgroundColor(RHelpUIServlet.getDocBackgroundColor());
+		setForegroundColor(RHelpUIServlet.getDocForegroundColor());
 		
 		if ((this.mode & MODE_FOCUS) != 0) {
 			initActions(this.handlerCollection);
diff --git a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpUIServlet.java b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpUIServlet.java
index 99b895b..710b2c4 100644
--- a/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpUIServlet.java
+++ b/r/org.eclipse.statet.r.ui/src/org/eclipse/statet/internal/r/ui/rhelp/RHelpUIServlet.java
@@ -14,6 +14,8 @@
 
 package org.eclipse.statet.internal.r.ui.rhelp;
 
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+
 import java.io.PrintWriter;
 import java.nio.file.Path;
 import java.util.HashMap;
@@ -35,6 +37,7 @@
 import org.eclipse.jface.util.IPropertyChangeListener;
 import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.FontData;
 import org.eclipse.swt.graphics.RGB;
 import org.eclipse.swt.widgets.Display;
@@ -86,6 +89,16 @@
 		".SMATCH-J { background: plum; }\n",
 	};
 	
+	static Color getDocBackgroundColor() {
+		return nonNullAssert(JFaceResources.getColorRegistry()
+				.get("org.eclipse.statet.workbench.themes.DocViewBackgroundColor") ); //$NON-NLS-1$
+	}
+	
+	static Color getDocForegroundColor() {
+		return nonNullAssert(JFaceResources.getColorRegistry()
+				.get("org.eclipse.statet.workbench.themes.DocViewColor") ); //$NON-NLS-1$
+	}
+	
 	
 	private static void appendCssColor(final StringBuilder sb, final RGB color) {
 		sb.append('#');
@@ -107,12 +120,15 @@
 	}
 	
 	private static void appendELinkColors(final StringBuilder sb, final RGB foregroundColor) {
-		final RGB hyperlinkColor= JFaceResources.getColorRegistry().getRGB(JFacePreferences.HYPERLINK_COLOR);
+		final RGB hyperlinkColor= nonNullAssert(JFaceResources.getColorRegistry()
+				.getRGB(JFacePreferences.HYPERLINK_COLOR) );
+		final RGB hyperlinkActiveColor= nonNullAssert(JFaceResources.getColorRegistry()
+				.getRGB(JFacePreferences.ACTIVE_HYPERLINK_COLOR) );
 		sb.append("a { color: "); //$NON-NLS-1$
 				appendCssColor(sb, hyperlinkColor);
 				sb.append("; }\n");//$NON-NLS-1$
 		sb.append("a:hover, a:active, a:focus { color: "); //$NON-NLS-1$
-				appendCssColor(sb, JFaceResources.getColorRegistry().getRGB(JFacePreferences.ACTIVE_HYPERLINK_COLOR));
+				appendCssColor(sb, hyperlinkActiveColor);
 				sb.append("; }\n"); //$NON-NLS-1$
 		sb.append("a:visited { color: "); //$NON-NLS-1$
 		appendCssColor(sb, new RGB(
@@ -145,11 +161,15 @@
 		
 		@Override
 		protected void collectCss(final StringBuilder sb) {
-			final RGB foregroundColor= JFaceResources.getColorRegistry().getRGB("org.eclipse.statet.workbench.themes.DocViewColor"); //$NON-NLS-1$
-			final RGB docBackgroundColor= JFaceResources.getColorRegistry().getRGB("org.eclipse.statet.workbench.themes.DocViewBackgroundColor"); //$NON-NLS-1$
-			final RGB borderColor= Display.getCurrent().getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW).getRGB();
+			final RGB docBackgroundColor= nonNullAssert(JFaceResources.getColorRegistry()
+					.getRGB("org.eclipse.statet.workbench.themes.DocViewBackgroundColor") ); //$NON-NLS-1$
+			final RGB docForegroundColor= nonNullAssert(JFaceResources.getColorRegistry()
+					.getRGB("org.eclipse.statet.workbench.themes.DocViewColor") ); //$NON-NLS-1$
+			final RGB borderColor= Display.getCurrent()
+					.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW).getRGB();
 			
-			{	final FontDescriptor docFontDescr= JFaceResources.getFontDescriptor("org.eclipse.statet.workbench.themes.DocViewFont"); //$NON-NLS-1$
+			{	final FontDescriptor docFontDescr= JFaceResources
+						.getFontDescriptor("org.eclipse.statet.workbench.themes.DocViewFont"); //$NON-NLS-1$
 				final FontData fontData= docFontDescr.getFontData()[0];
 				
 				sb.append("body { font-family: '"); //$NON-NLS-1$
@@ -157,16 +177,16 @@
 						sb.append("'; font-size:"); //$NON-NLS-1$
 						sb.append(fontData.getHeight());
 						sb.append("pt; color:"); //$NON-NLS-1$
-						appendCssColor(sb, foregroundColor);
+						appendCssColor(sb, docForegroundColor);
 						sb.append("; background:"); //$NON-NLS-1$
 						appendCssColor(sb, docBackgroundColor);
 						sb.append("; }\n"); //$NON-NLS-1$
 			}
 			
-			appendELinkColors(sb, foregroundColor);
+			appendELinkColors(sb, docForegroundColor);
 			
 			sb.append("div.toc a, div.toc a:visited { color: "); //$NON-NLS-1$
-					appendCssColor(sb, foregroundColor);
+					appendCssColor(sb, docForegroundColor);
 					sb.append("; }\n"); //$NON-NLS-1$
 			
 			sb.append("@media screen {\n"); //$NON-NLS-1$
@@ -202,8 +222,10 @@
 		@Override
 		protected void collectCss(final StringBuilder sb) {
 			final Display display= Display.getCurrent();
-			final RGB infoForegroundColor= display.getSystemColor(SWT.COLOR_INFO_FOREGROUND).getRGB();
-			final RGB infoBackgroundColor= display.getSystemColor(SWT.COLOR_INFO_BACKGROUND).getRGB();
+			final RGB docBackgroundColor= nonNullAssert(JFaceResources.getColorRegistry()
+					.getRGB("org.eclipse.statet.workbench.themes.DocViewBackgroundColor") ); //$NON-NLS-1$
+			final RGB docForegroundColor= nonNullAssert(JFaceResources.getColorRegistry()
+					.getRGB("org.eclipse.statet.workbench.themes.DocViewColor") ); //$NON-NLS-1$
 			final int vIndent= Math.max(1, LayoutUtils.defaultVSpacing() / 4);
 			final int hIndent= Math.max(3, LayoutUtils.defaultHSpacing() / 2);
 			
@@ -214,16 +236,16 @@
 						sb.append("'; font-size: "); //$NON-NLS-1$
 						sb.append(fontData.getHeight());
 						sb.append("pt; color: "); //$NON-NLS-1$
-						appendCssColor(sb, infoForegroundColor);
+						appendCssColor(sb, docForegroundColor);
 						sb.append("; background: "); //$NON-NLS-1$
-						appendCssColor(sb, infoBackgroundColor);
+						appendCssColor(sb, docBackgroundColor);
 						sb.append("; margin: 0 "); //$NON-NLS-1$
 						sb.append(hIndent);
 						sb.append("px "); //$NON-NLS-1$
 						sb.append(vIndent);
 						sb.append("px; }\n"); //$NON-NLS-1$
 			}
-			appendELinkColors(sb, infoForegroundColor);
+			appendELinkColors(sb, docForegroundColor);
 			
 			sb.append("h2, h3#description { display: none; }\n"); //$NON-NLS-1$
 			sb.append("h3 { font-size: 90%; margin-bottom: 0.4em; }\n"); //$NON-NLS-1$
