diff --git a/configure.in b/configure.in
index 06fa2c5..2224d4a 100644
--- a/configure.in
+++ b/configure.in
@@ -131,14 +131,17 @@ int main ()
 LIBS="$LIBS_save"
 
 
+MM_ARG_ENABLE_WARNINGS([GPARTED_WFLAGS], [-Wall], [-Wall -Wextra], [G PANGO ATK GDK GDK_PIXBUF GTK GLIBMM GIOMM PANGOMM CAIROMM GDKMM GTKMM])
+
+
 dnl GTKMM
 PKG_CHECK_MODULES([GTKMM], [gtkmm-2.4 > 2.8])
 AC_SUBST([GTKMM_LIBS])
 AC_SUBST([GTKMM_CFLAGS])
 
 
-dnl GTKMM 2.16 needed for gtk_show_uri()
-PKG_CHECK_EXISTS([gtkmm-2.4 >= 2.16.0],
+dnl GTKMM 2.22 needed for ALIGN_START/ALIGN_END
+PKG_CHECK_EXISTS([gtkmm-2.4 >= 2.22],
   [AC_DEFINE([HAVE_GTK_SHOW_URI], 1, [Define to 1 if you have gtk_show_uri])],
   [])
 
diff --git a/include/Dialog_Base_Partition.h b/include/Dialog_Base_Partition.h
index 58d9439..0e50269 100644
--- a/include/Dialog_Base_Partition.h
+++ b/include/Dialog_Base_Partition.h
@@ -19,6 +19,9 @@
 #ifndef DIALOG_BASE_PARTITION
 #define DIALOG_BASE_PARTITION
 
+// Include this first, so that it can play tricks with deprecations.
+#include <gtkmm/box.h>
+
 #include "../include/Frame_Resizer_Extended.h"
 #include "../include/Partition.h"
 
@@ -27,9 +30,7 @@
 #include <gtkmm/label.h>
 #include <gtkmm/spinbutton.h>
 #include <gtkmm/table.h>
-#include <gtkmm/box.h>
-#include <gtkmm/tooltips.h>
-#include <gtkmm/optionmenu.h>
+#include <gtkmm/comboboxtext.h>
 
 namespace GParted
 {
@@ -70,8 +71,7 @@ protected:
 
 	Gtk::HBox hbox_main ;
 	Gtk::SpinButton spinbutton_before, spinbutton_size, spinbutton_after;
-	Gtk::OptionMenu optionmenu_alignment ;
-	Gtk::Menu menu_alignment ;
+	Gtk::ComboBoxText combo_alignment ;
 
 	//used to enable/disable OKbutton...
 	int ORIG_BEFORE, ORIG_SIZE, ORIG_AFTER ;
@@ -98,7 +98,6 @@ private:
 	Gtk::Label label_minmax ;
 	Gtk::Table table_resize;
 	Gtk::HBox hbox_table, hbox_resizer, hbox_resize_move;
-	Gtk::Tooltips tooltips;
 	Gtk::Button button_resize_move ;
 	Gtk::Image *image_temp ;
 
diff --git a/include/Dialog_Partition_Info.h b/include/Dialog_Partition_Info.h
index a824369..098fb13 100644
--- a/include/Dialog_Partition_Info.h
+++ b/include/Dialog_Partition_Info.h
@@ -24,6 +24,9 @@
 #include "../include/Partition.h"
 #include "../include/i18n.h"
 
+#include <cairomm/context.h>
+#include <pangomm/layout.h>
+#include <gdkmm/general.h>
 #include <gtkmm/dialog.h>
 #include <gtkmm/stock.h>
 #include <gtkmm/frame.h>
@@ -58,7 +61,7 @@ private:
 	Gtk::Image *image;
 	Gtk::Table *table;
 
-	Glib::RefPtr<Gdk::GC> gc;
+	Cairo::RefPtr<Cairo::Context> cr;
 	Glib::RefPtr<Pango::Layout> pango_layout;
 
 	Gdk::Color color_partition, color_used, color_unused, color_text ;
diff --git a/include/Dialog_Partition_New.h b/include/Dialog_Partition_New.h
index b870ad8..656cccf 100644
--- a/include/Dialog_Partition_New.h
+++ b/include/Dialog_Partition_New.h
@@ -21,7 +21,7 @@
 
 #include "../include/Dialog_Base_Partition.h"
 
-#include <gtkmm/optionmenu.h>
+#include <gtkmm/comboboxtext.h>
 
 namespace GParted
 {
@@ -43,15 +43,14 @@ private:
 	void Build_Filesystems_Menu( bool only_unformatted ) ;
 	
 	Gtk::Table table_create;
-	Gtk::OptionMenu optionmenu_type, optionmenu_filesystem;
-	Gtk::Menu menu_type, menu_filesystem;
+	Gtk::ComboBoxText combo_type, combo_filesystem;
 	Gtk::Entry entry;
 
 	std::vector<FS> FILESYSTEMS ;
 	int cylinder_size ;
 	
 	//signal handlers
-	void optionmenu_changed( bool );
+	void combo_changed( bool );
 
 	Gdk::Color color_temp;
 	unsigned short new_count, first_creatable_fs ;
diff --git a/include/DrawingAreaVisualDisk.h b/include/DrawingAreaVisualDisk.h
index c86c2f4..86672d6 100644
--- a/include/DrawingAreaVisualDisk.h
+++ b/include/DrawingAreaVisualDisk.h
@@ -20,6 +20,8 @@
 
 #include "../include/Partition.h"
 
+#include <cairomm/context.h>
+#include <gdkmm/general.h>
 #include <gtkmm/drawingarea.h>
 
 namespace GParted
@@ -100,13 +102,13 @@ private:
 			y_used_unused_start = used_unused_height =
 			x_text = y_text = 0 ;
 			
-			pango_layout .clear() ;
+			pango_layout .reset() ;
 			logicals .clear() ;
 		}
 
 		~visual_partition()
 		{
-			pango_layout .clear() ;
+			pango_layout .reset() ;
 			logicals .clear() ;
 		}
 	};
@@ -115,7 +117,7 @@ private:
 	const visual_partition * selected_vp ;
 	int TOT_SEP, MIN_SIZE ;
 
-	Glib::RefPtr<Gdk::GC> gc;
+	Cairo::RefPtr<Cairo::Context> cr;
 	Gdk::Color color_used, color_unused, color_text;
 };
 
diff --git a/include/Frame_Resizer_Base.h b/include/Frame_Resizer_Base.h
index 7aedecb..1d7f0ea 100644
--- a/include/Frame_Resizer_Base.h
+++ b/include/Frame_Resizer_Base.h
@@ -22,6 +22,8 @@
 #include <gtkmm/frame.h>
 #include <gtkmm/drawingarea.h>
 #include <gdkmm/cursor.h>
+#include <gdkmm/general.h>
+#include <cairomm/context.h>
  
 class Frame_Resizer_Base : public Gtk::Frame
 {
@@ -71,9 +73,7 @@ protected:
 	void Draw_Resize_Grip( ArrowType ) ;
 
 	Gtk::DrawingArea drawingarea ;
-	Glib::RefPtr<Gdk::GC> gc_drawingarea ;
-	Glib::RefPtr<Gdk::Pixmap> pixmap ;
-	Glib::RefPtr<Gdk::GC> gc_pixmap ;
+	Cairo::RefPtr<Cairo::Context> cr;
 
 	Gdk::Color color_used, color_unused, color_arrow, color_background, color_partition, color_arrow_rectangle;
 
diff --git a/include/HBoxOperations.h b/include/HBoxOperations.h
index e624173..1ba9150 100644
--- a/include/HBoxOperations.h
+++ b/include/HBoxOperations.h
@@ -18,9 +18,11 @@
 #ifndef HBOX_OPERATIONS
 #define HBOX_OPERATIONS
 
+// Include this first, so that it can play tricks with deprecations.
+#include <gtkmm/box.h>
+
 #include "../include/Operation.h"
 
-#include <gtkmm/box.h>
 #include <gtkmm/liststore.h>
 #include <gtkmm/menu.h>
 #include <gtkmm/scrolledwindow.h>
diff --git a/include/Utils.h b/include/Utils.h
index 180416b..36cf9b8 100644
--- a/include/Utils.h
+++ b/include/Utils.h
@@ -25,6 +25,9 @@
 #ifndef UTILS
 #define UTILS
 
+// Include this first, so that it can play tricks with deprecations.
+#include <gtkmm/box.h>
+
 #include "../include/i18n.h"
 
 #include <gtkmm/label.h>
@@ -126,7 +129,7 @@ public:
 	static Sector round( double double_value ) ;
 	static Gtk::Label * mk_label( const Glib::ustring & text,
 				      bool use_markup = true,
-			      	      Gtk::AlignmentEnum x_align = Gtk::ALIGN_LEFT,
+			      	      Gtk::AlignmentEnum x_align = Gtk::ALIGN_START,
 			      	      Gtk::AlignmentEnum y_align = Gtk::ALIGN_CENTER,
 				      bool wrap = false,
 				      bool selectable = false,
diff --git a/include/Win_GParted.h b/include/Win_GParted.h
index 0235de7..5459ed9 100644
--- a/include/Win_GParted.h
+++ b/include/Win_GParted.h
@@ -194,7 +194,6 @@ private:
 	Gtk::Image *image ;
 	Gtk::ScrolledWindow *scrollwindow;
 	Gtk::Label label_device_info1, label_device_info2, *label;
-	Gtk::Tooltips tooltips ;
 	Gtk::Table *table ;
 	Gtk::MenuItem *menu_item;
 	Gtk::ProgressBar pulsebar ;
diff --git a/src/DialogFeatures.cc b/src/DialogFeatures.cc
index c451f26..67b1b4c 100644
--- a/src/DialogFeatures.cc
+++ b/src/DialogFeatures.cc
@@ -57,7 +57,7 @@ DialogFeatures::DialogFeatures()
 	str_temp  = _("This chart shows the actions supported on file systems.") ;
 	str_temp += "\n" ;
 	str_temp += _("Not all actions are available on all file systems, in part due to the nature of file systems and limitations in the required software.") ;
-	hbox ->pack_start( * Utils::mk_label( str_temp, true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, true ),
+	hbox ->pack_start( * Utils::mk_label( str_temp, true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, true ),
 			   Gtk::PACK_SHRINK );
 	hbox2 -> pack_start( *hbox ) ;
 	
diff --git a/src/Dialog_Base_Partition.cc b/src/Dialog_Base_Partition.cc
index 52c1fd0..922f966 100644
--- a/src/Dialog_Base_Partition.cc
+++ b/src/Dialog_Base_Partition.cc
@@ -92,22 +92,21 @@ Dialog_Base_Partition::Dialog_Base_Partition()
 			sigc::mem_fun(*this, &Dialog_Base_Partition::on_spinbutton_value_changed), AFTER ) ) ;
 
 	//add alignment
-	/*TO TRANSLATORS: used as label for a list of choices.   Align to: <optionmenu with choices> */
+	/*TO TRANSLATORS: used as label for a list of choices.   Align to: <combobox with choices> */
 	table_resize .attach( * Utils::mk_label( static_cast<Glib::ustring>( _("Align to:") ) + "\t" ),
 	                      0, 1, 3, 4, Gtk::FILL );
 
 	//fill partition alignment menu
 	/*TO TRANSLATORS: Menu option for drop down menu "Align to:" */
-	menu_alignment .items() .push_back( Gtk::Menu_Helpers::MenuElem( _("Cylinder") ) ) ;
+	combo_alignment .append( _("Cylinder") ) ;
 	/*TO TRANSLATORS: Menu option for label "Align to:" */
-	menu_alignment .items() .push_back( Gtk::Menu_Helpers::MenuElem( _("MiB") ) ) ;
+	combo_alignment .append( _("MiB") ) ;
 	/*TO TRANSLATORS: Menu option for drop down menu "Align to:" */
-	menu_alignment .items() .push_back( Gtk::Menu_Helpers::MenuElem( _("None") ) ) ;
+	combo_alignment .append( _("None") ) ;
 
-	optionmenu_alignment .set_menu( menu_alignment );
-	optionmenu_alignment .set_history( ALIGN_MEBIBYTE );  //Default setting
+	combo_alignment .set_active( ALIGN_MEBIBYTE );  //Default setting
 
-	table_resize .attach( optionmenu_alignment, 1, 2, 3, 4, Gtk::FILL );
+	table_resize .attach( combo_alignment, 1, 2, 3, 4, Gtk::FILL );
 
 	this->add_button( Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL );
 	this ->show_all_children() ;
@@ -168,7 +167,7 @@ Partition Dialog_Base_Partition::Get_New_Partition( Byte_Value sector_size )
 		selected_partition .sectors_unused = selected_partition .get_sector_length() - selected_partition .sectors_used ;
 
 	//set alignment
-	switch ( optionmenu_alignment .get_history() )
+	switch ( combo_alignment .get_active_row_number() )
 	{
 		case  0 :  selected_partition .alignment = ALIGN_CYLINDER;  break;
 		case  1 :  selected_partition .alignment = ALIGN_MEBIBYTE;
diff --git a/src/Dialog_Disklabel.cc b/src/Dialog_Disklabel.cc
index 2bfd6f6..d8a7f17 100644
--- a/src/Dialog_Disklabel.cc
+++ b/src/Dialog_Disklabel.cc
@@ -50,7 +50,7 @@ Dialog_Disklabel::Dialog_Disklabel( const Glib::ustring & device_path, const std
 
 	str_temp = _("Default is to create an MS-DOS partition table.") ;
 	str_temp += "\n" ;
-	vbox ->pack_start( * Utils::mk_label( str_temp, true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, true ),
+	vbox ->pack_start( * Utils::mk_label( str_temp, true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, true ),
 			   Gtk::PACK_SHRINK );
 	
 	//advanced
@@ -72,7 +72,7 @@ Dialog_Disklabel::Dialog_Disklabel( const Glib::ustring & device_path, const std
 	this ->labeltypes = disklabeltypes ;
 	
 	for ( unsigned int t = 0 ; t < labeltypes .size() ; t++ )
-		combo_labeltypes .append_text( labeltypes[ t ] ) ;
+		combo_labeltypes .append( labeltypes[ t ] ) ;
 	
 	combo_labeltypes .set_active( 0 ) ;
 	hbox ->pack_start( combo_labeltypes, Gtk::PACK_SHRINK ) ;
diff --git a/src/Dialog_Partition_Info.cc b/src/Dialog_Partition_Info.cc
index fd4c12f..13fea32 100644
--- a/src/Dialog_Partition_Info.cc
+++ b/src/Dialog_Partition_Info.cc
@@ -58,7 +58,7 @@ Dialog_Partition_Info::Dialog_Partition_Info( const Partition & partition )
 		for ( unsigned int t = 0 ; t < partition .messages .size() ; t++ )
 			vbox ->pack_start( * Utils::mk_label( "<i>" + partition .messages[t] + "</i>",
 					 		      true,
-					 		      Gtk::ALIGN_LEFT,
+					 		      Gtk::ALIGN_START,
 					 		      Gtk::ALIGN_CENTER,
 					 		      true ),
 					   Gtk::PACK_SHRINK ) ;
@@ -73,7 +73,7 @@ Dialog_Partition_Info::Dialog_Partition_Info( const Partition & partition )
 
 void Dialog_Partition_Info::drawingarea_on_realize()
 {
-	gc = Gdk::GC::create( drawingarea .get_window() ) ;
+	cr = drawingarea .get_window() ->create_cairo_context();
 	
 	drawingarea .get_window() ->set_background( color_partition ) ;
 }
@@ -83,17 +83,20 @@ bool Dialog_Partition_Info::drawingarea_on_expose( GdkEventExpose *ev )
 	if ( partition .type != GParted::TYPE_UNALLOCATED ) 
 	{
 		//used
-		gc ->set_foreground( color_used );
-		drawingarea .get_window() ->draw_rectangle( gc, true, BORDER, BORDER, used, 44 ) ;
+		Gdk::Cairo::set_source_color( cr, color_used );
+		cr ->rectangle( BORDER, BORDER, used, 44 );
+		cr ->fill();
 		
 		//unused
-		gc ->set_foreground( color_unused );
-		drawingarea .get_window() ->draw_rectangle( gc, true, BORDER + used, BORDER, unused, 44 ) ;
+		Gdk::Cairo::set_source_color( cr, color_unused );
+		cr ->rectangle( BORDER + used, BORDER, unused, 44 );
+		cr ->fill();
 	}
 	
 	//text
-	gc ->set_foreground( color_text );
-	drawingarea .get_window() ->draw_layout( gc, 180, BORDER + 6, pango_layout ) ;
+	Gdk::Cairo::set_source_color( cr, color_text );
+	cr ->move_to( 180, BORDER + 6 );
+	pango_layout ->show_in_cairo_context( cr );
 	
 	return true;
 }
@@ -153,7 +156,7 @@ void Dialog_Partition_Info::Display_Info()
 			0, 1,
 			top, bottom,
 			Gtk::FILL ) ;
-	table ->attach( * Utils::mk_label( Utils::get_filesystem_string( partition .filesystem ), true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ),
+	table ->attach( * Utils::mk_label( Utils::get_filesystem_string( partition .filesystem ), true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ),
 			1, 2,
 			top++, bottom++,
 			Gtk::FILL ) ;
@@ -163,7 +166,7 @@ void Dialog_Partition_Info::Display_Info()
 			0, 1,
 			top, bottom,
 			Gtk::FILL) ;
-	table ->attach( * Utils::mk_label( Utils::format_size( partition .get_sector_length(), partition .sector_size ), true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ),
+	table ->attach( * Utils::mk_label( Utils::format_size( partition .get_sector_length(), partition .sector_size ), true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ),
 			1, 2,
 			top++, bottom++,
 			Gtk::FILL ) ;
@@ -179,7 +182,7 @@ void Dialog_Partition_Info::Display_Info()
 				0, 1,
 				top, bottom,
 				Gtk::FILL ) ;
-		table ->attach( * Utils::mk_label( Utils::format_size( partition .sectors_used, partition .sector_size ), true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ),
+		table ->attach( * Utils::mk_label( Utils::format_size( partition .sectors_used, partition .sector_size ), true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ),
 				1, 2,
 				top, bottom,
 				Gtk::FILL ) ;
@@ -193,7 +196,7 @@ void Dialog_Partition_Info::Display_Info()
 				0, 1,
 				top, bottom,
 				Gtk::FILL ) ;
-		table ->attach( * Utils::mk_label( Utils::format_size( partition .sectors_unused, partition .sector_size ), true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ),
+		table ->attach( * Utils::mk_label( Utils::format_size( partition .sectors_unused, partition .sector_size ), true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ),
 				1, 2,
 				top, bottom,
 				Gtk::FILL ) ;
@@ -210,7 +213,7 @@ void Dialog_Partition_Info::Display_Info()
 				0, 1,
 				top, bottom,
 				Gtk::FILL ) ;
-		table ->attach( * Utils::mk_label( Glib::build_path( ", ", partition .flags ), true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ),
+		table ->attach( * Utils::mk_label( Glib::build_path( ", ", partition .flags ), true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ),
 				1, 2, 
 				top++, bottom++,
 				Gtk::FILL ) ;
@@ -224,12 +227,12 @@ void Dialog_Partition_Info::Display_Info()
 		//path
 		table ->attach( * Utils::mk_label( "<b>" + Glib::ustring( _("Path:") ) + "</b>",
 						   true,
-						   Gtk::ALIGN_LEFT,
-						   Gtk::ALIGN_TOP ),
+						   Gtk::ALIGN_START,
+						   Gtk::ALIGN_START ),
 				0, 1,
 				top, bottom,
 				Gtk::FILL ) ;
-		table ->attach( * Utils::mk_label( Glib::build_path( "\n", partition .get_paths() ), true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ),
+		table ->attach( * Utils::mk_label( Glib::build_path( "\n", partition .get_paths() ), true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ),
 				1, 2,
 				top++, bottom++,
 				Gtk::FILL ) ;
@@ -290,7 +293,7 @@ void Dialog_Partition_Info::Display_Info()
 			str_temp = _("Not mounted") ;
 		}
 
-		table ->attach( * Utils::mk_label( str_temp, true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ), 1, 2, top++, bottom++, Gtk::FILL ) ;
+		table ->attach( * Utils::mk_label( str_temp, true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ), 1, 2, top++, bottom++, Gtk::FILL ) ;
 	}
 
 	//label
@@ -300,7 +303,7 @@ void Dialog_Partition_Info::Display_Info()
 				0, 1,
 				top, bottom,
 				Gtk::FILL) ;
-		table ->attach( * Utils::mk_label( partition .label, true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ),
+		table ->attach( * Utils::mk_label( partition .label, true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ),
 				1, 2,
 				top++, bottom++,
 				Gtk::FILL) ;
@@ -313,7 +316,7 @@ void Dialog_Partition_Info::Display_Info()
 				0, 1,
 				top, bottom,
 				Gtk::FILL) ;
-		table ->attach( * Utils::mk_label( partition .uuid, true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ),
+		table ->attach( * Utils::mk_label( partition .uuid, true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ),
 				1, 2,
 				top++, bottom++,
 				Gtk::FILL) ;
@@ -327,7 +330,7 @@ void Dialog_Partition_Info::Display_Info()
 			0, 1,
 			top, bottom,
 			Gtk::FILL ) ;
-	table ->attach( * Utils::mk_label( Utils::num_to_str( partition .sector_start ), true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ),
+	table ->attach( * Utils::mk_label( Utils::num_to_str( partition .sector_start ), true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ),
 			1, 2,
 			top++, bottom++,
 			Gtk::FILL ) ;
@@ -337,7 +340,7 @@ void Dialog_Partition_Info::Display_Info()
 			0, 1,
 			top, bottom,
 			Gtk::FILL ) ;
-	table ->attach( * Utils::mk_label( Utils::num_to_str( partition.sector_end ), true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ),
+	table ->attach( * Utils::mk_label( Utils::num_to_str( partition.sector_end ), true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ),
 			1, 2,
 			top++, bottom++,
 			Gtk::FILL ) ; 
@@ -347,7 +350,7 @@ void Dialog_Partition_Info::Display_Info()
 			0, 1,
 			top, bottom,
 			Gtk::FILL ) ;
-	table ->attach( * Utils::mk_label( Utils::num_to_str( partition .get_sector_length() ), true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ),
+	table ->attach( * Utils::mk_label( Utils::num_to_str( partition .get_sector_length() ), true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ),
 			1, 2,
 			top++, bottom++,
 			Gtk::FILL ) ;
@@ -355,10 +358,10 @@ void Dialog_Partition_Info::Display_Info()
 
 Dialog_Partition_Info::~Dialog_Partition_Info()
 {
-	this ->get_colormap() ->free_colors( color_used, 1 ) ;
-	this ->get_colormap() ->free_colors( color_unused, 1 ) ;
-	this ->get_colormap() ->free_colors( color_text, 1 ) ;
-	this ->get_colormap() ->free_colors( color_partition, 1 ) ;
+	this ->get_colormap() ->free_color( color_used ) ;
+	this ->get_colormap() ->free_color( color_unused ) ;
+	this ->get_colormap() ->free_color( color_text ) ;
+	this ->get_colormap() ->free_color( color_partition ) ;
 }
 
 } //GParted
diff --git a/src/Dialog_Partition_New.cc b/src/Dialog_Partition_New.cc
index 7ecb2e5..b176e4b 100644
--- a/src/Dialog_Partition_New.cc
+++ b/src/Dialog_Partition_New.cc
@@ -75,45 +75,46 @@ void Dialog_Partition_New::Set_Data( const Partition & partition,
 	table_create .set_row_spacings( 5 ) ;
 	hbox_main .pack_start( table_create, Gtk::PACK_SHRINK );
 	
-	/*TO TRANSLATORS: used as label for a list of choices.   Create as: <optionmenu with choices> */
+	/*TO TRANSLATORS: used as label for a list of choices.   Create as: <combobox with choices> */
 	table_create .attach( * Utils::mk_label( static_cast<Glib::ustring>( _("Create as:") ) + "\t" ), 
 			      0, 1, 0, 1,
 			      Gtk::FILL );
 	
-	//fill partitiontype menu
-	menu_type .items() .push_back( Gtk::Menu_Helpers::MenuElem( _("Primary Partition") ) ) ;
-	menu_type .items() .push_back( Gtk::Menu_Helpers::MenuElem( _("Logical Partition") ) ) ;
-	menu_type .items() .push_back( Gtk::Menu_Helpers::MenuElem( _("Extended Partition") ) ) ;
+	//fill partitiontype combobox
+	combo_type .append( _("Primary Partition") );
+	combo_type .append( _("Logical Partition") );
+	combo_type .append( _("Extended Partition") );
 	
 	//determine which PartitionType is allowed
 	if ( disktype != "msdos" && disktype != "dvh" )
 	{
-		menu_type .items()[ 1 ] .set_sensitive( false ); 
-		menu_type .items()[ 2 ] .set_sensitive( false );
-		menu_type .set_active( 0 );
+		std::vector<Gtk::CellRenderer*> cells = combo_type .get_cells();
+		cells[ 1 ] ->set_sensitive( false ); 
+		cells[ 2 ] ->set_sensitive( false );
+		combo_type .set_active( 0 );
 	}
 	else if ( partition .inside_extended )
 	{
-		menu_type .items()[ 0 ] .set_sensitive( false ); 
-		menu_type .items()[ 2 ] .set_sensitive( false );
-		menu_type .set_active( 1 );
+		std::vector<Gtk::CellRenderer*> cells = combo_type .get_cells();
+		cells[ 0 ] ->set_sensitive( false ); 
+		cells[ 2 ] ->set_sensitive( false );
+		combo_type .set_active( 1 );
 	}
 	else
 	{
-		menu_type .items()[ 1 ] .set_sensitive( false ); 
+		std::vector<Gtk::CellRenderer*> cells = combo_type .get_cells();
+		cells[ 1 ] ->set_sensitive( false ); 
 		if ( any_extended )
-			menu_type .items()[ 2 ] .set_sensitive( false );
+			cells[ 2 ] ->set_sensitive( false );
 	}
 	
-	optionmenu_type .set_menu( menu_type );
-	
 	//160 is the ideal width for this table column.
 	//(when one widget is set, the rest wil take this width as well)
-	optionmenu_type .set_size_request( 160, -1 ); 
+	combo_type .set_size_request( 160, -1 ); 
 	
-	optionmenu_type .signal_changed() .connect( 
-		sigc::bind<bool>( sigc::mem_fun( *this, &Dialog_Partition_New::optionmenu_changed ), true ) );
-	table_create .attach( optionmenu_type, 1, 2, 0, 1, Gtk::FILL );
+	combo_type .signal_changed() .connect( 
+		sigc::bind<bool>( sigc::mem_fun( *this, &Dialog_Partition_New::combo_changed ), true ) );
+	table_create .attach( combo_type, 1, 2, 0, 1, Gtk::FILL );
 	
 	//file systems to choose from 
 	table_create .attach( * Utils::mk_label( static_cast<Glib::ustring>( _("File system:") ) + "\t" ),
@@ -122,10 +123,9 @@ void Dialog_Partition_New::Set_Data( const Partition & partition,
 	
 	Build_Filesystems_Menu( only_unformatted ) ;
 	 
-	optionmenu_filesystem .set_menu( menu_filesystem );
-	optionmenu_filesystem .signal_changed() .connect( 
-		sigc::bind<bool>( sigc::mem_fun( *this, &Dialog_Partition_New::optionmenu_changed ), false ) );
-	table_create .attach( optionmenu_filesystem, 1, 2, 1, 2, Gtk::FILL );
+	combo_filesystem .signal_changed() .connect( 
+		sigc::bind<bool>( sigc::mem_fun( *this, &Dialog_Partition_New::combo_changed ), false ) );
+	table_create .attach( combo_filesystem, 1, 2, 1, 2, Gtk::FILL );
 
 	//Label
 	table_create .attach( * Utils::mk_label( Glib::ustring( _("Label:") ) ),
@@ -147,8 +147,8 @@ void Dialog_Partition_New::Set_Data( const Partition & partition,
 	MB_PER_PIXEL = TOTAL_MB / 500.00 ;
 	
 	//set first enabled file system
-	optionmenu_filesystem .set_history( first_creatable_fs ) ;
-	optionmenu_changed( false ) ;
+	combo_filesystem .set_active( first_creatable_fs ) ;
+	combo_changed( false ) ;
 	
 	//set spinbuttons initial values
 	spinbutton_after .set_value( 0 ) ;
@@ -159,9 +159,9 @@ void Dialog_Partition_New::Set_Data( const Partition & partition,
 	if ( TOTAL_MB < 2 )
 		frame_resizer_base ->set_sensitive( false ) ;
 
-	//connect signal handler for Dialog_Base_Partiton optionmenu_alignment
-	optionmenu_alignment .signal_changed() .connect( 
-		sigc::bind<bool>( sigc::mem_fun( *this, &Dialog_Partition_New::optionmenu_changed ), false ) );
+	//connect signal handler for Dialog_Base_Partition combo_alignment
+	combo_alignment .signal_changed() .connect( 
+		sigc::bind<bool>( sigc::mem_fun( *this, &Dialog_Partition_New::combo_changed ), false ) );
 
 	this ->show_all_children() ;
 }
@@ -172,7 +172,7 @@ Partition Dialog_Partition_New::Get_New_Partition( Byte_Value sector_size )
 	PartitionType part_type ;
 	Sector new_start, new_end;
 		
-	switch ( optionmenu_type .get_history() )
+	switch ( combo_type .get_active_row_number() )
 	{
 		case 0	:	part_type = GParted::TYPE_PRIMARY;  break;
 		case 1	:	part_type = GParted::TYPE_LOGICAL;  break;
@@ -197,7 +197,7 @@ Partition Dialog_Partition_New::Get_New_Partition( Byte_Value sector_size )
 	part_temp .Set(	selected_partition .device_path,
 			String::ucompose( _("New Partition #%1"), new_count ),
 			new_count, part_type,
-			FILESYSTEMS[ optionmenu_filesystem .get_history() ] .filesystem,
+			FILESYSTEMS[ combo_filesystem .get_active_row_number() ] .filesystem,
 			new_start, new_end,
 			sector_size,
 			selected_partition .inside_extended, false ) ;
@@ -224,7 +224,7 @@ Partition Dialog_Partition_New::Get_New_Partition( Byte_Value sector_size )
 	}
 
 	//set alignment
-	switch ( optionmenu_alignment .get_history() )
+	switch ( combo_alignment .get_active_row_number() )
 	{
 		case  0 :  part_temp .alignment = GParted::ALIGN_CYLINDER;  break;
 		case  1 :  part_temp .alignment = GParted::ALIGN_MEBIBYTE;
@@ -248,32 +248,33 @@ Partition Dialog_Partition_New::Get_New_Partition( Byte_Value sector_size )
 	return part_temp;
 }
 
-void Dialog_Partition_New::optionmenu_changed( bool type )
+void Dialog_Partition_New::combo_changed( bool type )
 {
-	//optionmenu_type
+	//combo_type
 	if ( type )
 	{
-		if ( optionmenu_type .get_history() == GParted::TYPE_EXTENDED &&
-		     menu_filesystem .items() .size() < FILESYSTEMS .size() )
+		if ( combo_type .get_active_row_number() == GParted::TYPE_EXTENDED &&
+		     combo_filesystem .get_model() ->children() .size() < FILESYSTEMS .size() )
 		{
-			menu_filesystem .items() .push_back( 
-				Gtk::Menu_Helpers::MenuElem( Utils::get_filesystem_string( GParted::FS_EXTENDED ) ) ) ;
-			optionmenu_filesystem .set_history( menu_filesystem .items() .size() -1 ) ;
-			optionmenu_filesystem .set_sensitive( false ) ;
+			combo_filesystem .append( 
+				Utils::get_filesystem_string( GParted::FS_EXTENDED ) ) ;
+			combo_filesystem .set_active( combo_filesystem .get_model() ->children() .size() -1 ) ;
+			combo_filesystem .set_sensitive( false ) ;
 		}
-		else if ( optionmenu_type .get_history() != GParted::TYPE_EXTENDED &&
-			  menu_filesystem .items() .size() == FILESYSTEMS .size() ) 
+		else if ( combo_type .get_active_row_number() != GParted::TYPE_EXTENDED &&
+			  combo_filesystem .get_model() ->children() .size() == FILESYSTEMS .size() ) 
 		{
-			menu_filesystem .items() .remove( menu_filesystem .items() .back() ) ;
-			optionmenu_filesystem .set_sensitive( true ) ;
-			optionmenu_filesystem .set_history( first_creatable_fs ) ;
+			combo_filesystem .remove_text(
+				Utils::get_filesystem_string( GParted::FS_EXTENDED ) ) ;
+			combo_filesystem .set_sensitive( true ) ;
+			combo_filesystem .set_active( first_creatable_fs ) ;
 		}
 	}
 	
-	//optionmenu_filesystem and optionmenu_alignment
+	//combo_filesystem and combo_alignment
 	if ( ! type )
 	{
-		fs = FILESYSTEMS[ optionmenu_filesystem .get_history() ] ;
+		fs = FILESYSTEMS[ combo_filesystem .get_active_row_number() ] ;
 
 		if ( fs .MIN < MEBIBYTE )
 			fs .MIN = MEBIBYTE ;
@@ -308,7 +309,7 @@ void Dialog_Partition_New::optionmenu_changed( bool type )
 
 	//set fitting resizer colors
 	//backgroundcolor..
-	color_temp .set( optionmenu_type .get_history() == 2 ? "darkgrey" : "white" ) ;
+	color_temp .set( combo_type .get_active_row_number() == 2 ? "darkgrey" : "white" ) ;
 	frame_resizer_base ->override_default_rgb_unused_color( color_temp );
 	
 	//partitioncolor..
@@ -321,34 +322,36 @@ void Dialog_Partition_New::optionmenu_changed( bool type )
 void Dialog_Partition_New::Build_Filesystems_Menu( bool only_unformatted ) 
 {
 	bool set_first=false;
+	std::vector<Gtk::CellRenderer*> cells = combo_filesystem .get_cells();
+
 	//fill the file system menu with the file systems (except for extended) 
 	for ( unsigned int t = 0 ; t < FILESYSTEMS .size( ) ; t++ ) 
 	{
 		//skip extended (btrfs, luks, lvm2, and unknown removed in Set_Data())
 		if( FILESYSTEMS[ t ] .filesystem == GParted::FS_EXTENDED )
 			continue ;
-		menu_filesystem .items() .push_back( 
-			Gtk::Menu_Helpers::MenuElem( Utils::get_filesystem_string( FILESYSTEMS[ t ] .filesystem ) ) ) ;
-		menu_filesystem .items() .back() .set_sensitive(
+		combo_filesystem .append( 
+			Utils::get_filesystem_string( FILESYSTEMS[ t ] .filesystem ) ) ;
+		cells .back() ->set_sensitive(
 			! only_unformatted && FILESYSTEMS[ t ] .create &&
 			this ->selected_partition .get_byte_length() >= FILESYSTEMS[ t ] .MIN ) ;
 		//use ext2 as default filesystem
 		if ( Utils::get_filesystem_string( FILESYSTEMS[ t ] .filesystem ) == "ext2" &&
-			menu_filesystem .items() .back() .sensitive() )
+			cells .back() ->get_sensitive() )
 		{
-			first_creatable_fs=menu_filesystem .items() .size() - 1;
+			first_creatable_fs=combo_filesystem .get_model() ->children() .size() - 1;
 			set_first=true;
 		}
 	}
 	
 	//unformatted is always available
-	menu_filesystem .items() .back() .set_sensitive( true ) ;
+	cells .back() ->set_sensitive( true ) ;
 	
 	if(!set_first)
 	{
 		//find and set first enabled file system
-		for ( unsigned int t = 0 ; t < menu_filesystem .items() .size() ; t++ )
-			if ( menu_filesystem .items()[ t ] .sensitive() )
+		for ( unsigned int t = 0 ; t < combo_filesystem .get_model() ->children() .size() ; t++ )
+			if ( cells[ t ] ->get_sensitive() )
 			{
 				first_creatable_fs = t ;
 				break ;
diff --git a/src/Dialog_Progress.cc b/src/Dialog_Progress.cc
index 0131c12..d431da6 100644
--- a/src/Dialog_Progress.cc
+++ b/src/Dialog_Progress.cc
@@ -49,13 +49,13 @@ Dialog_Progress::Dialog_Progress( const std::vector<Operation *> & operations )
 	str_temp += "\n";
 	vbox ->pack_start( * Utils::mk_label( str_temp ), Gtk::PACK_SHRINK );
 
-	label_current .set_alignment( Gtk::ALIGN_LEFT );
+	label_current .set_alignment( Gtk::ALIGN_START );
 	vbox ->pack_start( label_current, Gtk::PACK_SHRINK ) ;
 
 	progressbar_current .set_pulse_step( 0.01 ) ;
 	vbox ->pack_start( progressbar_current, Gtk::PACK_SHRINK );
 	
-	label_current_sub .set_alignment( Gtk::ALIGN_LEFT );
+	label_current_sub .set_alignment( Gtk::ALIGN_START );
 	vbox ->pack_start( label_current_sub, Gtk::PACK_SHRINK );
 	
 	vbox ->pack_start( * Utils::mk_label( "<b>" + Glib::ustring( _("Completed Operations:") ) + "</b>" ),
@@ -80,7 +80,7 @@ Dialog_Progress::Dialog_Progress( const std::vector<Operation *> & operations )
 
 	treeview_operations .get_column( 0 ) ->set_expand( true ) ;
 	treeview_operations .get_column( 0 ) ->set_cell_data_func( 
-		* ( treeview_operations .get_column( 0 ) ->get_first_cell_renderer() ),
+		* ( treeview_operations .get_column( 0 ) ->get_first_cell() ),
 		sigc::mem_fun(*this, &Dialog_Progress::on_cell_data_description) ) ;
 
 	//fill 'er up
@@ -145,7 +145,7 @@ void Dialog_Progress::on_signal_update( const OperationDetail & operationdetail
 				break ;
 			case STATUS_NONE:
 				static_cast< Glib::RefPtr<Gdk::Pixbuf> >(
-					treerow[ treeview_operations_columns .status_icon ] ) .clear() ;
+					treerow[ treeview_operations_columns .status_icon ] ) .reset() ;
 				break ;
 		}
 
@@ -162,7 +162,7 @@ void Dialog_Progress::on_signal_update( const OperationDetail & operationdetail
 	else//it's an new od which needs to be added to the model.
 	{
 		unsigned int pos = operationdetail .get_treepath() .rfind( ":" ) ;
-		if ( pos >= 0 && pos < operationdetail .get_treepath() .length() )
+		if ( pos < operationdetail .get_treepath() .length() )
 			iter = treestore_operations ->get_iter( operationdetail .get_treepath() 
 							.substr( 0, operationdetail .get_treepath() .rfind( ":" ) ) ) ;
 		else
diff --git a/src/DrawingAreaVisualDisk.cc b/src/DrawingAreaVisualDisk.cc
index 1ef54e6..b970d13 100644
--- a/src/DrawingAreaVisualDisk.cc
+++ b/src/DrawingAreaVisualDisk.cc
@@ -211,46 +211,38 @@ void DrawingAreaVisualDisk::calc_text( std::vector<visual_partition> & visual_pa
 void DrawingAreaVisualDisk::draw_partition( const visual_partition & vp ) 
 {
 	//partition...
-	gc ->set_foreground( vp .color );
-	get_window() ->draw_rectangle( gc, 
-			 	       true,
-				       vp .x_start,
-				       vp .y_start,
-				       vp .length,
-				       vp .height );
+	Gdk::Cairo::set_source_color( cr, vp .color );
+	cr ->rectangle( vp .x_start, vp .y_start, vp .length, vp .height );
+	cr ->fill();
 			
 	//used..
 	if ( vp .used_length > 0 )
 	{
-		gc ->set_foreground( color_used );
-		get_window() ->draw_rectangle( gc,
-					       true,
-					       vp .x_used_start, 
-					       vp .y_used_unused_start, 
-					       vp .used_length,
-					       vp .used_unused_height );
+		Gdk::Cairo::set_source_color( cr, color_used );
+		cr ->rectangle( vp .x_used_start,
+				vp .y_used_unused_start,
+				vp .used_length,
+				vp .used_unused_height );
+		cr ->fill();
 	}
 		
 	//unused
 	if ( vp .unused_length > 0 )
 	{
-		gc ->set_foreground( color_unused );
-		get_window() ->draw_rectangle( gc,
-					       true,
-					       vp .x_unused_start, 
-					       vp .y_used_unused_start, 
-					       vp .unused_length,
-					       vp .used_unused_height );
+		Gdk::Cairo::set_source_color( cr, color_unused );
+		cr ->rectangle( vp .x_unused_start,
+				vp .y_used_unused_start,
+				vp .unused_length,
+				vp .used_unused_height );
+		cr ->fill();
 	}
 
 	//text
 	if ( vp .x_text > 0 )
 	{
-		gc ->set_foreground( color_text );
-		get_window() ->draw_layout( gc,
-					    vp .x_text,
-					    vp .y_text,
-					    vp .pango_layout ) ;
+		Gdk::Cairo::set_source_color( cr, color_text );
+		cr ->move_to( vp .x_text, vp .y_text );
+		vp .pango_layout ->show_in_cairo_context( cr );
 	}
 }
 
@@ -300,11 +292,13 @@ void DrawingAreaVisualDisk::on_realize()
 {
 	Gtk::DrawingArea::on_realize() ;
 
-	gc = Gdk::GC::create( get_window() );
-	gc ->set_line_attributes( 2,
-				  Gdk::LINE_ON_OFF_DASH,
-				  Gdk::CAP_BUTT,
-				  Gdk::JOIN_MITER ) ;
+	cr = get_window() ->create_cairo_context();
+	cr ->set_line_width( 2.0 );
+	std::vector<double> dashes;
+	dashes .push_back( 1.0 );
+	cr ->set_dash( dashes, 0 );
+	cr ->set_line_cap( Cairo::LINE_CAP_BUTT );
+	cr ->set_line_join( Cairo::LINE_JOIN_MITER );
 }
 	
 bool DrawingAreaVisualDisk::on_expose_event( GdkEventExpose * event )
@@ -316,13 +310,12 @@ bool DrawingAreaVisualDisk::on_expose_event( GdkEventExpose * event )
 	//selection 
 	if ( selected_vp )
 	{
-		gc ->set_foreground( color_used ) ;
-		get_window() ->draw_rectangle( gc,
-					       false,
-					       selected_vp ->x_start + BORDER/2 ,
-					       selected_vp ->y_start + BORDER/2 ,
-					       selected_vp ->length - BORDER,
-			       		       selected_vp ->height - BORDER ) ;
+		Gdk::Cairo::set_source_color( cr, color_used ) ;
+		cr ->rectangle( selected_vp ->x_start + BORDER/2 ,
+				selected_vp ->y_start + BORDER/2 ,
+				selected_vp ->length - BORDER,
+				selected_vp ->height - BORDER ) ;
+		cr ->stroke();
 	}
 
 	return ret_val ;
@@ -416,7 +409,7 @@ void DrawingAreaVisualDisk::free_colors( std::vector<visual_partition> & visual_
 {
 	for ( unsigned int t = 0 ; t < visual_partitions .size() ; t++ )
 	{
-		get_colormap() ->free_colors( visual_partitions[ t ] .color, 1 ) ;
+		get_colormap() ->free_color( visual_partitions[ t ] .color ) ;
 
 		if ( visual_partitions[ t ] .logicals .size() > 0 )
 			free_colors( visual_partitions[ t ] .logicals ) ;
@@ -428,9 +421,9 @@ DrawingAreaVisualDisk::~DrawingAreaVisualDisk()
 	clear() ;
 
 	//free the allocated colors
-	get_colormap() ->free_colors( color_used, 1 ) ;
-	get_colormap() ->free_colors( color_unused, 1 ) ;
-	get_colormap() ->free_colors( color_text, 1 ) ;
+	get_colormap() ->free_color( color_used ) ;
+	get_colormap() ->free_color( color_unused ) ;
+	get_colormap() ->free_color( color_text ) ;
 }
 
 } //GParted
diff --git a/src/Frame_Resizer_Base.cc b/src/Frame_Resizer_Base.cc
index 746e55d..d9a3d59 100644
--- a/src/Frame_Resizer_Base.cc
+++ b/src/Frame_Resizer_Base.cc
@@ -70,14 +70,14 @@ void Frame_Resizer_Base::init()
 
 void Frame_Resizer_Base::set_rgb_partition_color( const Gdk::Color & color )
 {
-	this ->get_colormap() ->free_colors( color_partition, 1 ) ;
+	this ->get_colormap() ->free_color( color_partition ) ;
 	this ->color_partition = color ;
 	this ->get_colormap() ->alloc_color( color_partition ) ;
 }
 
 void Frame_Resizer_Base::override_default_rgb_unused_color( const Gdk::Color & color ) 
 {
-	this ->get_colormap() ->free_colors( color_unused, 1 ) ;
+	this ->get_colormap() ->free_color( color_unused ) ;
 	this ->color_unused = color ;
 	this ->get_colormap() ->alloc_color( color_unused ) ;
 }
@@ -130,11 +130,7 @@ int Frame_Resizer_Base::get_x_end()
 
 void Frame_Resizer_Base::drawingarea_on_realize()
 {
-	gc_drawingarea = Gdk::GC::create( drawingarea .get_window() );
-	pixmap = Gdk::Pixmap::create( drawingarea .get_window(),
-				      drawingarea .get_allocation() .get_width(),
-				      drawingarea .get_allocation() .get_height() );
-	gc_pixmap = Gdk::GC::create( pixmap );
+	cr = drawingarea .get_window() ->create_cairo_context();
 	
 	drawingarea .add_events( Gdk::POINTER_MOTION_MASK );
 	drawingarea .add_events( Gdk::BUTTON_PRESS_MASK );
@@ -367,34 +363,37 @@ void Frame_Resizer_Base::Draw_Partition()
 	if ( drawingarea .get_window() )
 	{
 		//i couldn't find a clear() for a pixmap, that's why ;)
-		gc_pixmap ->set_foreground( color_background );
-		pixmap ->draw_rectangle( gc_pixmap, true, 0, 0, 536, 50 );
+		Gdk::Cairo::set_source_color( cr, color_background );
+		cr ->rectangle( 0, 0, 536, 50 );
+		cr ->fill();
 		
 		//the two rectangles on each side of the partition
-		gc_pixmap ->set_foreground( color_arrow_rectangle );
-		pixmap ->draw_rectangle( gc_pixmap, true, 0, 0, 10, 50 );
-		pixmap ->draw_rectangle( gc_pixmap, true, 526, 0, 10, 50 );
+		Gdk::Cairo::set_source_color( cr, color_arrow_rectangle );
+		cr ->rectangle( 0, 0, 10, 50 );
+		cr ->fill();
+		cr ->rectangle( 526, 0, 10, 50 );
+		cr ->fill();
 		
 		//partition
-		gc_pixmap ->set_foreground( color_partition );
-		pixmap ->draw_rectangle( gc_pixmap, true, X_START, 0, X_END - X_START, 50 );
+		Gdk::Cairo::set_source_color( cr, color_partition );
+		cr ->rectangle( X_START, 0, X_END - X_START, 50 );
+		cr ->fill();
 		
 		//used
-		gc_pixmap ->set_foreground( color_used );
-		pixmap ->draw_rectangle( gc_pixmap, true, X_START +BORDER, BORDER, USED, 34 );
+		Gdk::Cairo::set_source_color( cr, color_used );
+		cr ->rectangle( X_START +BORDER, BORDER, USED, 34 );
+		cr ->fill();
 		
 		//unused
-		gc_pixmap ->set_foreground( color_unused );
-		pixmap ->draw_rectangle( gc_pixmap, true, X_START +BORDER +USED, BORDER, UNUSED, 34 );
+		Gdk::Cairo::set_source_color( cr, color_unused );
+		cr ->rectangle( X_START +BORDER +USED, BORDER, UNUSED, 34 );
+		cr ->fill();
 		
 		//resize grips
 		if ( ! fixed_start )
 			Draw_Resize_Grip( ARROW_LEFT ) ;
 		
 		Draw_Resize_Grip( ARROW_RIGHT ) ;
-		
-		//and draw everything to "real" screen..
-		drawingarea .get_window() ->draw_drawable( gc_drawingarea, pixmap, 0, 0, 0, 0 ) ;
 	}
 }
 
@@ -414,26 +413,29 @@ void Frame_Resizer_Base::Draw_Resize_Grip( ArrowType arrow_type )
 	}
 	
 	//attach resize arrows to the partition
-	gc_pixmap ->set_foreground( color_arrow_rectangle );
-	pixmap ->draw_rectangle( gc_pixmap,
-				 false,
-				 arrow_type == ARROW_LEFT ? X_START - GRIPPER : X_END +1,
-				 5,
-				 9,
-				 40 ) ;
+	Gdk::Cairo::set_source_color( cr, color_arrow_rectangle );
+	cr ->rectangle( arrow_type == ARROW_LEFT ? X_START - GRIPPER : X_END +1,
+			5,
+			9,
+			40 ) ;
+	cr ->stroke();
 	
-	gc_pixmap ->set_foreground( color_arrow );
-	pixmap ->draw_polygon( gc_pixmap, true, arrow_points );
+	Gdk::Cairo::set_source_color( cr, color_arrow );
+	cr ->move_to( arrow_points[ 0 ] .get_x(), arrow_points[ 0 ] .get_y() );
+	cr ->line_to( arrow_points[ 1 ] .get_x(), arrow_points[ 1 ] .get_y() );
+	cr ->line_to( arrow_points[ 2 ] .get_x(), arrow_points[ 2 ] .get_y() );
+	cr ->close_path();
+	cr ->fill();
 }
 
 Frame_Resizer_Base::~Frame_Resizer_Base()
 { 
-	this ->get_colormap() ->free_colors( color_used, 1 ) ;
-	this ->get_colormap() ->free_colors( color_unused, 1 ) ;
-	this ->get_colormap() ->free_colors( color_arrow, 1 ) ;
-	this ->get_colormap() ->free_colors( color_background, 1 ) ;
-	this ->get_colormap() ->free_colors( color_partition, 1 ) ;
-	this ->get_colormap() ->free_colors( color_arrow_rectangle, 1 ) ;
+	this ->get_colormap() ->free_color( color_used ) ;
+	this ->get_colormap() ->free_color( color_unused ) ;
+	this ->get_colormap() ->free_color( color_arrow ) ;
+	this ->get_colormap() ->free_color( color_background ) ;
+	this ->get_colormap() ->free_color( color_partition ) ;
+	this ->get_colormap() ->free_color( color_arrow_rectangle ) ;
 	
 	delete cursor_resize;
 	delete cursor_move;
diff --git a/src/Frame_Resizer_Extended.cc b/src/Frame_Resizer_Extended.cc
index 81bc0ea..58d14c0 100644
--- a/src/Frame_Resizer_Extended.cc
+++ b/src/Frame_Resizer_Extended.cc
@@ -155,27 +155,31 @@ bool Frame_Resizer_Extended::drawingarea_on_mouse_motion( GdkEventMotion * ev )
 void Frame_Resizer_Extended::Draw_Partition() 
 {
 	//i couldn't find a clear() for a pixmap, that's why ;)
-	gc_pixmap ->set_foreground( color_background );
-	pixmap ->draw_rectangle( gc_pixmap, true, 0, 0, 536, 50 );
+	Gdk::Cairo::set_source_color( cr, color_background );
+	cr->rectangle( 0, 0, 536, 50 );
+	cr->fill();
 	
 	//the two rectangles on each side of the partition
-	gc_pixmap ->set_foreground( color_arrow_rectangle );
-	pixmap ->draw_rectangle( gc_pixmap, true, 0, 0, 10, 50 );
-	pixmap ->draw_rectangle( gc_pixmap, true, 526, 0, 10, 50 );
+	Gdk::Cairo::set_source_color( cr, color_arrow_rectangle );
+	cr->rectangle( 0, 0, 10, 50 );
+	cr->fill();
+	cr->rectangle( 526, 0, 10, 50 );
+	cr->fill();
 	
 	//used
-	gc_pixmap ->set_foreground( color_used );
-	pixmap ->draw_rectangle( gc_pixmap, true, USED_START + BORDER, BORDER, USED, 34 );
+	Gdk::Cairo::set_source_color( cr, color_used );
+	cr->rectangle( USED_START + BORDER, BORDER, USED, 34 );
+	cr->fill();
 	
 	//partition
-	gc_pixmap ->set_foreground( color_partition );
+	Gdk::Cairo::set_source_color( cr, color_partition );
 	for( short t = 0; t < 9 ; t++ )
-		pixmap ->draw_rectangle( gc_pixmap, false, X_START +t, t, X_END - X_START -t*2, 50 - t*2 );
+	{
+		cr->rectangle( X_START +t, t, X_END - X_START -t*2, 50 - t*2 );
+		cr->stroke();
+	}
 			
 	//resize grips
 	Draw_Resize_Grip( ARROW_LEFT ) ;
 	Draw_Resize_Grip( ARROW_RIGHT ) ;
-	
-	//and draw everything to "real" screen..
-	drawingarea .get_window() ->draw_drawable( gc_drawingarea, pixmap, 0, 0, 0, 0 ) ;
 }
diff --git a/src/Makefile.am b/src/Makefile.am
index 2def664..427a338 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,5 +1,7 @@
 INCLUDES =						\
 	$(GTKMM_CFLAGS) 				\
+	$(GPARTED_WFLAGS)				\
+	-Wno-unused-result -Wno-unused-parameter	\
 	-DGPARTED_DATADIR=\""$(datadir)"\"			\
 	-DGNOMELOCALEDIR=\""$(datadir)/locale"\"
 
diff --git a/src/TreeView_Detail.cc b/src/TreeView_Detail.cc
index 8ca9735..4dd645e 100644
--- a/src/TreeView_Detail.cc
+++ b/src/TreeView_Detail.cc
@@ -48,7 +48,7 @@ TreeView_Detail::TreeView_Detail()
 	//PARTITION
 	//colored text in Partition column 
 	Gtk::CellRendererText *cell_renderer_text = 
-		dynamic_cast<Gtk::CellRendererText*>( get_column( 0 ) ->get_first_cell_renderer() );
+		dynamic_cast<Gtk::CellRendererText*>( get_column( 0 ) ->get_first_cell() );
 	get_column( 0 ) ->add_attribute( cell_renderer_text ->property_foreground(), 
 					 treeview_detail_columns .text_color );
 	
@@ -63,12 +63,12 @@ TreeView_Detail::TreeView_Detail()
 					 treeview_detail_columns .text_color );
 	
 	//pixbuf and text are both left aligned
-	get_column( 1 ) ->get_first_cell_renderer() ->property_xalign() = Gtk::ALIGN_LEFT ;
-	cell_renderer_text ->property_xalign() = Gtk::ALIGN_LEFT ;
+	get_column( 1 ) ->get_first_cell() ->property_xalign() = Gtk::ALIGN_START ;
+	cell_renderer_text ->property_xalign() = Gtk::ALIGN_START ;
 	
 	//MOUNT POINT
 	//colored text in mount point column 
-	cell_renderer_text = dynamic_cast<Gtk::CellRendererText*>( get_column( 2 ) ->get_first_cell_renderer() );
+	cell_renderer_text = dynamic_cast<Gtk::CellRendererText*>( get_column( 2 ) ->get_first_cell() );
 	get_column( 2 ) ->add_attribute( cell_renderer_text ->property_foreground(), 
 					 treeview_detail_columns .mount_text_color );
 
diff --git a/src/Win_GParted.cc b/src/Win_GParted.cc
index cd8ecaa..33b4398 100644
--- a/src/Win_GParted.cc
+++ b/src/Win_GParted.cc
@@ -222,12 +222,12 @@ void Win_GParted::init_toolbar()
 	toolbutton ->signal_clicked() .connect( sigc::mem_fun( *this, &Win_GParted::activate_new ) );
 	toolbar_main .append( *toolbutton );
 	TOOLBAR_NEW = index++ ;
-	toolbutton ->set_tooltip(tooltips, _("Create a new partition in the selected unallocated space") );		
+	toolbutton ->set_tooltip_text( _("Create a new partition in the selected unallocated space") );		
 	toolbutton = Gtk::manage(new Gtk::ToolButton(Gtk::Stock::DELETE));
 	toolbutton ->signal_clicked().connect( sigc::mem_fun(*this, &Win_GParted::activate_delete) );
 	toolbar_main.append(*toolbutton);
 	TOOLBAR_DEL = index++ ;
-	toolbutton ->set_tooltip(tooltips, _("Delete the selected partition") );		
+	toolbutton ->set_tooltip_text( _("Delete the selected partition") );		
 	toolbar_main.append( *(Gtk::manage(new Gtk::SeparatorToolItem)) );
 	index++ ;
 	
@@ -249,7 +249,7 @@ void Win_GParted::init_toolbar()
 	toolbutton ->signal_clicked().connect( sigc::mem_fun(*this, &Win_GParted::activate_resize) );
 	toolbar_main.append(*toolbutton);
 	TOOLBAR_RESIZE_MOVE = index++ ;
-	toolbutton ->set_tooltip(tooltips, _("Resize/Move the selected partition") );		
+	toolbutton ->set_tooltip_text( _("Resize/Move the selected partition") );		
 	toolbar_main.append( *(Gtk::manage(new Gtk::SeparatorToolItem)) );
 	index++ ;
 
@@ -258,12 +258,12 @@ void Win_GParted::init_toolbar()
 	toolbutton ->signal_clicked().connect( sigc::mem_fun(*this, &Win_GParted::activate_copy) );
 	toolbar_main.append(*toolbutton);
 	TOOLBAR_COPY = index++ ;
-	toolbutton ->set_tooltip(tooltips, _("Copy the selected partition to the clipboard") );		
+	toolbutton ->set_tooltip_text( _("Copy the selected partition to the clipboard") );		
 	toolbutton = Gtk::manage(new Gtk::ToolButton(Gtk::Stock::PASTE));
 	toolbutton ->signal_clicked().connect( sigc::mem_fun(*this, &Win_GParted::activate_paste) );
 	toolbar_main.append(*toolbutton);
 	TOOLBAR_PASTE = index++ ;
-	toolbutton ->set_tooltip(tooltips, _("Paste the partition from the clipboard") );		
+	toolbutton ->set_tooltip_text( _("Paste the partition from the clipboard") );		
 	toolbar_main.append( *(Gtk::manage(new Gtk::SeparatorToolItem)) );
 	index++ ;
 	
@@ -275,7 +275,7 @@ void Win_GParted::init_toolbar()
 		toolbar_main.append(*toolbutton);
 		TOOLBAR_UNDO = index++ ;
 		toolbutton ->set_sensitive( false );
-		toolbutton ->set_tooltip(tooltips, _("Undo Last Operation") );
+		toolbutton ->set_tooltip_text( _("Undo Last Operation") );
 	}
 	
 	toolbutton = Gtk::manage(new Gtk::ToolButton(Gtk::Stock::APPLY));
@@ -283,7 +283,7 @@ void Win_GParted::init_toolbar()
 	toolbar_main.append(*toolbutton);
 	TOOLBAR_APPLY = index++ ;
 	toolbutton ->set_sensitive( false );
-	toolbutton ->set_tooltip(tooltips, _("Apply All Operations") );		
+	toolbutton ->set_tooltip_text( _("Apply All Operations") );		
 	
 	//initialize and pack combo_devices
 	liststore_devices = Gtk::ListStore::create( treeview_devices_columns ) ;
@@ -451,7 +451,7 @@ void Win_GParted::init_device_info()
 			0, 1,
 			top, bottom,
 			Gtk::FILL ) ;
-	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ) ) ;
+	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ) ) ;
 	table ->attach( * device_info .back(), 1, 2, top++, bottom++, Gtk::FILL ) ;
 	
 	//size
@@ -459,18 +459,18 @@ void Win_GParted::init_device_info()
 			0, 1,
 			top, bottom,
 			Gtk::FILL ) ;
-	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ) ) ;
+	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ) ) ;
 	table ->attach( * device_info .back(), 1, 2, top++, bottom++, Gtk::FILL ) ;
 	
 	//path
 	table ->attach( * Utils::mk_label( " <b>" + static_cast<Glib::ustring>( _("Path:") ) + "</b>",
 					   true,
-					   Gtk::ALIGN_LEFT,
-					   Gtk::ALIGN_TOP ),
+					   Gtk::ALIGN_START,
+					   Gtk::ALIGN_START ),
 			0, 1,
 			top, bottom,
 			Gtk::FILL ) ;
-	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ) ) ;
+	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ) ) ;
 	table ->attach( * device_info .back(), 1, 2, top++, bottom++, Gtk::FILL ) ;
 	
 	vbox_info .pack_start( *table, Gtk::PACK_SHRINK );
@@ -488,7 +488,7 @@ void Win_GParted::init_device_info()
 			0, 1,
 			top, bottom,
 			Gtk::FILL );
-	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ) ) ;
+	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ) ) ;
 	table ->attach( * device_info .back(), 1, 2, top++, bottom++, Gtk::FILL ) ;
 	
 	//heads
@@ -496,7 +496,7 @@ void Win_GParted::init_device_info()
 			0, 1,
 			top, bottom,
 			Gtk::FILL ) ;
-	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ) ) ;
+	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ) ) ;
 	table ->attach( * device_info .back(), 1, 2, top++, bottom++, Gtk::FILL ) ;
 	
 	//sectors/track
@@ -504,7 +504,7 @@ void Win_GParted::init_device_info()
 			0, 1,
 			top, bottom,
 			Gtk::FILL ) ;
-	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ) ) ;
+	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ) ) ;
 	table ->attach( * device_info .back(), 1, 2, top++, bottom++, Gtk::FILL );
 	
 	//cylinders
@@ -512,7 +512,7 @@ void Win_GParted::init_device_info()
 			0, 1,
 			top, bottom,
 			Gtk::FILL ) ;
-	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ) ) ;
+	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ) ) ;
 	table ->attach( * device_info .back(), 1, 2, top++, bottom++, Gtk::FILL ) ;
 	
 	//total sectors
@@ -520,7 +520,7 @@ void Win_GParted::init_device_info()
 			0, 1,
 			top, bottom,
 			Gtk::FILL );
-	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ) ) ;
+	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ) ) ;
 	table ->attach( * device_info .back(), 1, 2, top++, bottom++, Gtk::FILL ) ;
 
 	//sector size
@@ -528,7 +528,7 @@ void Win_GParted::init_device_info()
 			0, 1,
 			top, bottom,
 			Gtk::FILL );
-	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false, true ) ) ;
+	device_info .push_back( Utils::mk_label( "", true, Gtk::ALIGN_START, Gtk::ALIGN_CENTER, false, true ) ) ;
 	table ->attach( * device_info .back(), 1, 2, top++, bottom++, Gtk::FILL ) ;
 
 	vbox_info .pack_start( *table, Gtk::PACK_SHRINK );
@@ -578,7 +578,7 @@ void Win_GParted::refresh_combo_devices()
 		hbox ->pack_start( * Utils::mk_label( devices[ i ] .get_path() ), Gtk::PACK_SHRINK ) ;
 		hbox ->pack_start( * Utils::mk_label( "   (" + Utils::format_size( devices[ i ] .length, devices[ i ] .sector_size ) + ")",
 					              true,
-						      Gtk::ALIGN_RIGHT ),
+						      Gtk::ALIGN_END ),
 				   Gtk::PACK_EXPAND_WIDGET ) ;
 		
 		menu ->items() .push_back( * manage( new Gtk::RadioMenuItem( radio_group ) ) ) ;
@@ -587,7 +587,7 @@ void Win_GParted::refresh_combo_devices()
 			sigc::bind<unsigned int>( sigc::mem_fun(*this, &Win_GParted::radio_devices_changed), i ) ) ;
 	}
 				
-	menubar_main .items()[ 0 ] .get_submenu() ->items()[ 1 ] .remove_submenu() ;
+	menubar_main .items()[ 0 ] .get_submenu() ->items()[ 1 ] .unset_submenu() ;
 
 	if ( menu ->items() .size() )
 	{
@@ -1167,7 +1167,6 @@ void Win_GParted::menu_gparted_features()
 		dialog .load_filesystems( gparted_core .get_filesystems() ) ;
 
 		//recreate format menu...
-		menu_partition .items()[ MENU_FORMAT ] .remove_submenu() ;
 		menu_partition .items()[ MENU_FORMAT ] .set_submenu( * create_format_menu() ) ;
 		menu_partition .items()[ MENU_FORMAT ] .get_submenu() ->show_all_children() ;
 	}
