diff --git a/gui/text.cpp b/gui/text.cpp
index 90482fe..dc7a2d1 100644
--- a/gui/text.cpp
+++ b/gui/text.cpp
@@ -38,12 +38,16 @@
     mFontHeight = 0;
 	maxWidth = 0;
 	charSkip = 0;
+	isHighlighted = false;
+	hasHighlightColor = false;
 
     if (!node)      return;
 
     // Initialize color to solid black
     memset(&mColor, 0, sizeof(COLOR));
     mColor.alpha = 255;
+	memset(&mHighlightColor, 0, sizeof(COLOR));
+    mHighlightColor.alpha = 255;
 
     attr = node->first_attribute("color");
     if (attr)
@@ -51,6 +55,13 @@
         std::string color = attr->value();
         ConvertStrToColor(color, &mColor);
     }
+	attr = node->first_attribute("highlightcolor");
+    if (attr)
+    {
+        std::string color = attr->value();
+		ConvertStrToColor(color, &mHighlightColor);
+		hasHighlightColor = true;
+    }
 
     // Load the font, and possibly override the color
     child = node->first_node("font");
@@ -66,6 +77,14 @@
             std::string color = attr->value();
             ConvertStrToColor(color, &mColor);
         }
+
+		attr = child->first_attribute("highlightcolor");
+        if (attr)
+        {
+            std::string color = attr->value();
+			ConvertStrToColor(color, &mHighlightColor);
+			hasHighlightColor = true;
+        }
     }
 
     // Load the placement
@@ -117,7 +136,10 @@
             y -= mFontHeight;
     }
 
-    gr_color(mColor.red, mColor.green, mColor.blue, mColor.alpha);
+    if (hasHighlightColor && isHighlighted)
+		gr_color(mHighlightColor.red, mHighlightColor.green, mHighlightColor.blue, mHighlightColor.alpha);
+	else
+		gr_color(mColor.red, mColor.green, mColor.blue, mColor.alpha);
 
 	if (maxWidth)
 		gr_textExW(x, y, displayValue.c_str(), fontResource, maxWidth + x);
