Index: simwerkz.cc
===================================================================
--- simwerkz.cc	(revision 2832)
+++ simwerkz.cc	(working copy)
@@ -1509,7 +1509,7 @@
 	uint8 offset = (besch->get_styp()==1  &&  besch->get_wtyp()!=air_wt) ? 1 : 0;
 	if(  bauigel.get_count()>1  ) {
 		// Set tooltip first (no dummygrounds, if bauigel.calc_casts() is called).
-		win_set_static_tooltip( tooltip_with_price("Building costs estimates", -bauigel.calc_costs() ) );
+		win_set_static_tooltip( tooltip_with_price("Building costs estimates", -bauigel.calc_costs() ), 0, 0 );
 
 		// make dummy route from bauigel
 		for(  uint32 j=0;  j<bauigel.get_count();  j++   ) {
@@ -1676,7 +1676,7 @@
 
 	if(  bauigel.get_count()>1  ) {
 		// Set tooltip first (no dummygrounds, if bauigel.calc_casts() is called).
-		win_set_static_tooltip( tooltip_with_price("Building costs estimates", -bauigel.calc_costs() ) );
+		win_set_static_tooltip( tooltip_with_price("Building costs estimates", -bauigel.calc_costs() ), 0, 0 );
 
 		// make dummy route from bauigel
 		for(  uint32 j=0;  j<bauigel.get_count();  j++  ) {
@@ -2070,7 +2070,7 @@
 				marked[sp->get_player_nr()].insert( way_obj );
 			}
 		}
-		win_set_static_tooltip( tooltip_with_price("Building costs estimates", -cost_estimate ) );
+		win_set_static_tooltip( tooltip_with_price("Building costs estimates", -cost_estimate ), 0, 0 );
 	}
 }
 
@@ -3842,7 +3842,7 @@
  * if this player is public, make all connected tiles a public stop */
 bool wkz_make_stop_public_t::init( karte_t *, spieler_t * )
 {
-	win_set_static_tooltip( NULL );
+	win_set_static_tooltip( NULL, 0, 0 );
 	return true;
 }
 
@@ -3853,7 +3853,7 @@
 
 const char *wkz_make_stop_public_t::move( karte_t *welt, spieler_t *sp, uint16, koord3d p )
 {
-	win_set_static_tooltip( NULL );
+	win_set_static_tooltip( NULL, 0, 0 );
 	const planquadrat_t *pl = welt->lookup(p.get_2d());
 	if(pl!=NULL) {
 		halthandle_t halt = pl->get_halt();
@@ -3861,7 +3861,7 @@
 			sint64 costs = halt->calc_maintenance();
 			// set only tooltip if it costs (us)
 			if(costs>0) {
-				win_set_static_tooltip( tooltip_with_price("Building costs estimates", -((costs*60)<<(welt->ticks_bits_per_tag-18)) ) );
+				win_set_static_tooltip( tooltip_with_price("Building costs estimates", -((costs*60)<<(welt->ticks_bits_per_tag-18)) ), 0, 0 );
 			}
 		}
 	}
Index: gui/werkzeug_waehler.cc
===================================================================
--- gui/werkzeug_waehler.cc	(revision 2832)
+++ gui/werkzeug_waehler.cc	(working copy)
@@ -144,7 +144,7 @@
 	if(xdiff>=0  &&  xdiff<tool_icon_width  &&  ydiff>=0  &&  mx>=pos.x  &&  my>=pos.y+16) {
 		const int tipnr = xdiff+(tool_icon_width*ydiff);
 		if (tipnr < (int)tools.get_count()) {
-			win_set_tooltip(get_maus_x() + 16, get_maus_y() - 16, tools[tipnr]->get_tooltip(welt->get_active_player()));
+			win_set_tooltip(get_maus_x() + 16, get_maus_y() - 16, tools[tipnr]->get_tooltip(welt->get_active_player()), 0, 0);
 		}
 	}
 
Index: gui/components/gui_chart.cc
===================================================================
--- gui/components/gui_chart.cc	(revision 2832)
+++ gui/components/gui_chart.cc	(working copy)
@@ -28,9 +28,6 @@
 
 gui_chart_t::gui_chart_t() : gui_komponente_t()
 {
-	// no toolstips at the start
-	tooltipkoord = koord::invalid;
-
 	seed = 0;
 	show_x_axis = true;
 	show_y_axis = true;
@@ -135,14 +132,12 @@
 
 	// display current value?
 	int tooltip_n=-1;
-	if(tooltipkoord!=koord::invalid) {
-		if(umgebung_t::left_to_right_graphs) {
-			tooltip_n = x_elements-1-(tooltipkoord.x*x_elements+4)/(groesse.x|1);
-		}
-		else {
-			tooltip_n = (tooltipkoord.x*x_elements+4)/(groesse.x|1);
-		}
+	if(umgebung_t::left_to_right_graphs) {
+		tooltip_n = x_elements-1-((get_maus_x()-offset.x)*x_elements+4)/(groesse.x|1);
 	}
+	else {
+		tooltip_n = ((get_maus_x()-offset.x)*x_elements+4)/(groesse.x|1);
+	}
 
 	// draw chart's curves
 	for (slist_iterator_tpl<curve_t> i(curves); i.next();) {
@@ -156,9 +151,9 @@
 				display_fillbox_wh_clip(tmpx+factor*(groesse.x / (x_elements - 1))*i-2, offset.y+baseline- (int)(tmp/scale)-2, 5, 5, c.color, true);
 
 				// display tooltip?
-				if(i==tooltip_n  &&  abs((int)(baseline-(int)(tmp/scale)-tooltipkoord.y))<10) {
+				if(i==tooltip_n  &&  abs((int)(baseline-(int)(tmp/scale)-(get_maus_y()-offset.y)))<10) {
 					number_to_string(tooltip, tmp, c.precision);
-					win_set_tooltip( get_maus_x()+16, get_maus_y()-16, tooltip );
+					win_set_tooltip( get_maus_x()+16, get_maus_y()-16, tooltip, c.color, 0 );
 				}
 
 				// draw line between two financial markers; this is only possible from the second value on
@@ -236,12 +231,4 @@
  */
 void gui_chart_t::infowin_event(const event_t *ev)
 {
-	if(IS_LEFTREPEAT(ev)  ||  IS_LEFTCLICK(ev)) {
-		// tooptip to show?
-		tooltipkoord = koord(ev->mx,ev->my);
-	}
-	else {
-		tooltipkoord = koord::invalid;
-		tooltip[0] = 0;
-	}
 }
Index: gui/components/gui_chart.h
===================================================================
--- gui/components/gui_chart.h	(revision 2832)
+++ gui/components/gui_chart.h	(working copy)
@@ -116,8 +116,6 @@
 
 	int seed;
 
-	koord tooltipkoord;
-
 	bool show_x_axis, show_y_axis;
 
 	/**
Index: gui/components/gui_numberinput.cc
===================================================================
--- gui/components/gui_numberinput.cc	(revision 2832)
+++ gui/components/gui_numberinput.cc	(working copy)
@@ -308,6 +308,6 @@
 
 	if(getroffen( get_maus_x()-offset.x, get_maus_y()-offset.y )) {
 		sprintf( tooltip, translator::translate("enter a value between %i and %i"), min_value, max_value );
-		win_set_tooltip(get_maus_x() + 16, get_maus_y() - 16, tooltip );
+		win_set_tooltip(get_maus_x() + 16, get_maus_y() - 16, tooltip, 0, 0 );
 	}
 }
Index: gui/components/gui_tab_panel.cc
===================================================================
--- gui/components/gui_tab_panel.cc	(revision 2832)
+++ gui/components/gui_tab_panel.cc	(working copy)
@@ -140,7 +140,7 @@
 
 			if(text_x < mx && text_x+width+8 > mx) {
 				// tooltip or change
-				win_set_tooltip(get_maus_x() + 16, get_maus_y() - 16, i->tooltip );
+				win_set_tooltip(get_maus_x() + 16, get_maus_y() - 16, i->tooltip, 0, 0 );
 				break;
 			}
 
Index: gui/components/gui_button.cc
===================================================================
--- gui/components/gui_button.cc	(revision 2832)
+++ gui/components/gui_button.cc	(working copy)
@@ -417,6 +417,6 @@
 	}
 
 	if(translated_tooltip &&  getroffen( get_maus_x()-offset.x, get_maus_y()-offset.y )) {
-		win_set_tooltip(get_maus_x() + 16, get_maus_y() - 16, translated_tooltip );
+		win_set_tooltip(get_maus_x() + 16, get_maus_y() - 16, translated_tooltip, 0, 0 );
 	}
 }
Index: simwin.cc
===================================================================
--- simwin.cc	(revision 2832)
+++ simwin.cc	(working copy)
@@ -107,6 +107,8 @@
 static int tooltip_ypos = 0;
 static const char * tooltip_text = 0;
 static const char * static_tooltip_text = 0;
+static uint8 tooltip_color = 0;
+static uint8 tooltip_textcolor = 0;
 
 static bool show_ticker=0;
 
@@ -659,6 +661,8 @@
 	// first: empty kill list
 	process_kill_list();
 	// then display windows
+	uint8 current_tooltip_color = tooltip_color;
+	uint8 current_tooltip_textcolor = tooltip_color;
 	const char *current_tooltip = tooltip_text;
 	const sint16 x = get_maus_x();
 	const sint16 y = get_maus_y();
@@ -670,16 +674,22 @@
 		display_win(i);
 		if(  !getroffen  &&  tooltip_text!=NULL  ) {
 			current_tooltip = tooltip_text;
+			current_tooltip_color = tooltip_color;
+			current_tooltip_textcolor = tooltip_textcolor;
 		}
 		if(  (!wins[i].rollup  &&  wins[i].gui->getroffen(x-wins[i].pos.x,y-wins[i].pos.y))  ||
 		     (wins[i].rollup  &&  x>=wins[i].pos.x  &&  x<wins[i].pos.x+wins[i].gui->get_fenstergroesse().x  &&  y>=wins[i].pos.y  &&  y<wins[i].pos.y+16)
 		) {
 			// prissi: tooltips are only allowed for non overlapping windows
 			current_tooltip = tooltip_text;
+			current_tooltip_color = tooltip_color;
+			current_tooltip_textcolor = tooltip_textcolor;
 		}
 		inside_event_handling = NULL;
 	}
 	tooltip_text = current_tooltip;
+	tooltip_color = current_tooltip_color;
+	tooltip_textcolor = current_tooltip_textcolor;
 }
 
 
@@ -1025,13 +1035,13 @@
 			// Hajo: check if there is a tooltip to display
 			if(tooltip_text!=NULL  &&  *tooltip_text) {
 				const sint16 width = proportional_string_width(tooltip_text)+7;
-				display_ddd_proportional(min(tooltip_xpos,disp_width-width), max(menu_height+7,tooltip_ypos), width, 0, umgebung_t::tooltip_color, umgebung_t::tooltip_textcolor, tooltip_text, true);
+				display_ddd_proportional(min(tooltip_xpos,disp_width-width), max(menu_height+7,tooltip_ypos), width, 0, tooltip_color ? tooltip_color : umgebung_t::tooltip_color, tooltip_textcolor ? tooltip_textcolor : umgebung_t::tooltip_textcolor, tooltip_text, true);
 				// Hajo: clear tooltip to avoid sticky tooltips
 				tooltip_text = 0;
 			}
 			else if(static_tooltip_text!=NULL  &&  *static_tooltip_text) {
 				const sint16 width = proportional_string_width(static_tooltip_text)+7;
-				display_ddd_proportional(min(get_maus_x()+16,disp_width-width), max(menu_height+7,get_maus_y()-16), width, 0, umgebung_t::tooltip_color, umgebung_t::tooltip_textcolor, static_tooltip_text, true);
+				display_ddd_proportional(min(get_maus_x()+16,disp_width-width), max(menu_height+7,get_maus_y()-16), width, 0, tooltip_color ? tooltip_color : umgebung_t::tooltip_color, tooltip_textcolor ? tooltip_textcolor : umgebung_t::tooltip_textcolor, static_tooltip_text, true);
 			}
 		}
 
@@ -1206,11 +1216,13 @@
  * Sets the tooltip to display.
  * @author Hj. Malthaner
  */
-void win_set_tooltip(int xpos, int ypos, const char *text)
+void win_set_tooltip(int xpos, int ypos, const char *text, uint8 color, uint8 textcolor)
 {
 	tooltip_xpos = xpos;
 	tooltip_ypos = max(32+7,ypos);
 	tooltip_text = text;
+	tooltip_color = color;
+	tooltip_textcolor = textcolor;
 }
 
 
@@ -1219,7 +1231,9 @@
  * Sets the tooltip to display.
  * @author Hj. Malthaner
  */
-void win_set_static_tooltip(const char *text)
+void win_set_static_tooltip(const char *text, uint8 color, uint8 textcolor)
 {
 	static_tooltip_text = text;
+	tooltip_color = color;
+	tooltip_textcolor = textcolor;
 }
Index: simwin.h
===================================================================
--- simwin.h	(revision 2832)
+++ simwin.h	(working copy)
@@ -157,15 +157,17 @@
 
 /**
  * Sets the tooltip to display.
+ * Specifying 0 for color/textcolor uses the environment default.
  * @author Hj. Malthaner
  */
-void win_set_tooltip(int xpos, int ypos, const char *text);
+void win_set_tooltip(int xpos, int ypos, const char *text, uint8 color, uint8 textcolor);
 
 /**
  * Sets a static tooltip that follows the mouse
  * *MUST* be explicitely unset!
+ * Specifying 0 for color/textcolor uses the environment default.
  * @author Hj. Malthaner
  */
-void win_set_static_tooltip(const char *text);
+void win_set_static_tooltip(const char *text, uint8 color, uint8 textcolor);
 
 #endif
Index: simmenu.cc
===================================================================
--- simmenu.cc	(revision 2832)
+++ simmenu.cc	(working copy)
@@ -943,7 +943,7 @@
 		}
 	}
 	// delete tooltip.
-	win_set_static_tooltip( NULL );
+	win_set_static_tooltip( NULL, 0, 0 );
 }
 
 
Index: dataobj/umgebung.cc
===================================================================
--- dataobj/umgebung.cc	(revision 2832)
+++ dataobj/umgebung.cc	(working copy)
@@ -146,7 +146,7 @@
 	max_acceleration=50;
 
 	show_tooltips = true;
-	tooltip_color = 4;
+	tooltip_color = COL_LIGHT_TURQUOISE;
 	tooltip_textcolor = COL_BLACK;
 
 	cursor_overlay_color = COL_ORANGE;
