Index: gui/money_frame.cc
===================================================================
--- gui/money_frame.cc	(revision 2832)
+++ gui/money_frame.cc	(working copy)
@@ -71,7 +71,7 @@
  */
 const char *money_frame_t::display_money(int type, char *buf, int old)
 {
-	money_to_string(buf, sp->get_finance_history_year(old, type) / 100.0 );
+	money_to_string(buf, (sp->*finance_history_fn)(old, type) / 100.0 );
 	return(buf);
 }
 
@@ -81,7 +81,7 @@
  */
 int money_frame_t::get_money_colour(int type, int old)
 {
-	sint64 i = sp->get_finance_history_year(old, type);
+	sint64 i = (sp->*finance_history_fn)(old, type);
 	if (i < 0) return MONEY_MINUS;
 	if (i > 0) return MONEY_PLUS;
 	return COL_YELLOW;
@@ -115,7 +115,7 @@
 		old_transport(NULL, COL_WHITE, gui_label_t::right),
 		powerline(NULL, COL_WHITE, gui_label_t::money),
 		old_powerline(NULL, COL_WHITE, gui_label_t::money),
-		maintenance_label("This Month",COL_WHITE, gui_label_t::right),
+		maintenance_label("Next Month",COL_WHITE, gui_label_t::right),
 		maintenance_money(NULL, COL_RED, gui_label_t::money),
 		warn("", COL_YELLOW, gui_label_t::left),
 		scenario("", COL_BLACK, gui_label_t::left),
@@ -159,6 +159,7 @@
 	year_month_tabs.add_tab(&mchart, translator::translate("Months"));
 	year_month_tabs.set_pos(koord(112, top+11*BUTTONSPACE-6));
 	year_month_tabs.set_groesse(koord(443, 125));
+	year_month_tabs.add_listener(this);
 	add_komponente(&year_month_tabs);
 
 	const sint16 tyl_x = left+140+55;
@@ -239,6 +240,8 @@
 
 	add_komponente(&warn);
 
+	finance_history_fn = &spieler_t::get_finance_history_year;
+
 	// easier headquarter access
 	old_level = sp->get_headquarter_level();
 	old_pos = sp->get_headquarter_pos();
@@ -329,21 +332,21 @@
 	old_omoney.set_text(display_money(COST_OPERATING_PROFIT, str_buf[13], 1));
 
 	// transported goods
-	money_to_string(str_buf[20], sp->get_finance_history_year(0, COST_ALL_TRANSPORTED) );
+	money_to_string(str_buf[20], (sp->*finance_history_fn)(0, COST_ALL_TRANSPORTED) );
 	str_buf[20][strlen(str_buf[20])-4] = 0;	// remove comma
 	transport.set_text(str_buf[20]);
 	transport.set_color(get_money_colour(COST_ALL_TRANSPORTED, 0));
 
-	money_to_string(str_buf[21], sp->get_finance_history_year(1, COST_ALL_TRANSPORTED) );
+	money_to_string(str_buf[21], (sp->*finance_history_fn)(1, COST_ALL_TRANSPORTED) );
 	str_buf[21][strlen(str_buf[21])-4] = 0;	// remove comma
 	old_transport.set_text(str_buf[21]);
 	old_transport.set_color(get_money_colour(COST_ALL_TRANSPORTED, 0));
 
-	//money_to_string(str_buf[22], sp->get_finance_history_year(0, COST_POWERLINES) );
+	//money_to_string(str_buf[22], (sp->*finance_history_fn)(0, COST_POWERLINES) );
 	powerline.set_text(display_money(COST_POWERLINES, str_buf[22], 0)); //set_text(str_buf[22]);
 	powerline.set_color(get_money_colour(COST_POWERLINES, 0));
 
-	//money_to_string(str_buf[23], sp->get_finance_history_year(1, COST_POWERLINES) );
+	//money_to_string(str_buf[23], (sp->*finance_history_fn)(1, COST_POWERLINES) );
 	old_powerline.set_text(display_money(COST_POWERLINES, str_buf[23], 1));
 	old_powerline.set_color(get_money_colour(COST_POWERLINES, 1));
 
@@ -452,6 +455,25 @@
 
 bool money_frame_t::action_triggered( gui_action_creator_t *komp,value_t /* */)
 {
+	if(komp==&year_month_tabs) {
+		// when a new tab is selected, update the labels and
+		// which function populates the table of data.
+		// @author Ben Love
+		gui_komponente_t* active_tab = year_month_tabs.get_aktives_tab();
+		if(active_tab==&chart) {
+			finance_history_fn = &spieler_t::get_finance_history_year;
+			tylabel.set_text("This Year");
+			lylabel.set_text("Last Year");
+			tylabel2.set_text("This Year");
+		}
+		else if(active_tab==&mchart) {
+			finance_history_fn = &spieler_t::get_finance_history_month;
+			tylabel.set_text("This Month");
+			lylabel.set_text("Last Month");
+			tylabel2.set_text("This Month");
+		}
+		return true;
+	}
 	if(komp==&headquarter) {
 		sp->get_welt()->set_werkzeug( werkzeug_t::general_tool[WKZ_HEADQUARTER], sp );
 		return true;
Index: gui/money_frame.h
===================================================================
--- gui/money_frame.h	(revision 2832)
+++ gui/money_frame.h	(working copy)
@@ -91,6 +91,20 @@
 	static char digit[4];
 	gui_tab_panel_t year_month_tabs;
 
+	// typedef a member function pointer for spieler_t.
+	// see finance_history_fn for details.
+	typedef sint64 (spieler_t::*finance_history_fn_t)(int, int);
+	/**
+	 * Function ptr to retrieve finance_history data from spieler_t.
+	 * This function ALWAYS points to either:
+	 *  spieler_t::get_finance_history_year()
+	 *  spieler_t::get_finance_history_month()
+	 * dependant on active tab of year_month_tabs.
+	 *@author Ben Love
+	 */
+	finance_history_fn_t finance_history_fn;
+
+
 	button_t headquarter, goto_headquarter;
 	char headquarter_tooltip[1024];
 	world_view_t headquarter_view;
