diff --git a/include/Copy_Blocks.h b/include/Copy_Blocks.h
index f5e622e..7e09901 100644
--- a/include/Copy_Blocks.h
+++ b/include/Copy_Blocks.h
@@ -40,12 +40,12 @@ class copy_blocks {
 	Glib::Timer timer_total;
 	bool success;
 	Glib::ustring error_message;
-	bool set_progress_info();
 	void copy_thread();
 	bool cancel;
 	bool cancel_safe;
 	void set_cancel( bool force );
 public:
+	bool set_progress_info();
 	copy_blocks( const Glib::ustring & in_src_device,
 		     const Glib::ustring & in_dst_device,
 		     Sector src_start,
diff --git a/src/Copy_Blocks.cc b/src/Copy_Blocks.cc
index 4d22280..ca266c4 100644
--- a/src/Copy_Blocks.cc
+++ b/src/Copy_Blocks.cc
@@ -94,6 +94,12 @@ static bool mainquit(copy_blocks *cb)
 	return false;
 }
 
+static gboolean _set_progress_info( gpointer data )
+{
+	copy_blocks *cb = (copy_blocks *)data;
+	return cb->set_progress_info();
+}
+
 void copy_blocks::copy_thread()
 {
 	if ( ped_device_open( lp_device_src ) &&
@@ -132,9 +138,7 @@ void copy_blocks::copy_thread()
 		copy_block();
 		if ( timer_progress_timeout .elapsed() >= 0.5 )
 		{
-			Glib::signal_idle().connect( sigc::mem_fun(
-							     *this,
-							     &copy_blocks::set_progress_info) );
+			g_idle_add( _set_progress_info, this );
 			timer_progress_timeout.reset();
 		}
 	}
@@ -151,9 +155,7 @@ void copy_blocks::copy_thread()
 	}
 
 	//set progress bar current info on completion
-	Glib::signal_idle().connect( sigc::mem_fun(
-					     *this,
-					     &copy_blocks::set_progress_info) );
+	g_idle_add( _set_progress_info, this );
 	g_idle_add( (GSourceFunc)mainquit, this );
 }
 
diff --git a/src/Makefile.am b/src/Makefile.am
index 28feb63..3e51404 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -4,7 +4,7 @@ INCLUDES =						\
 	-DGPARTED_DATADIR=\""$(datadir)"\"			\
 	-DGNOMELOCALEDIR=\""$(datadir)/locale"\"
 
-AM_CFLAGS = -Wall	
+AM_CFLAGS = -Wall	-g
 
 AM_CXXFLAGS = -Wall	
 
diff --git a/src/Utils.cc b/src/Utils.cc
index 694cf0e..c4c9310 100644
--- a/src/Utils.cc
+++ b/src/Utils.cc
@@ -434,6 +434,12 @@ static void set_locale()
 	setenv( "LC_ALL", "C", 1 );
 }
 
+static void _store_exit_status( GPid pid, gint status, gpointer data )
+{
+	utils_execute_command_status *sp = (utils_execute_command_status *)data;
+	sp->store_exit_status( pid, status );
+}
+
 int Utils::execute_command( const Glib::ustring & command,
 			    Glib::ustring & output,
 			    Glib::ustring & error,
@@ -463,9 +469,7 @@ int Utils::execute_command( const Glib::ustring & command,
 	}
 	fcntl( out, F_SETFL, O_NONBLOCK );
 	fcntl( err, F_SETFL, O_NONBLOCK );
-	Glib::signal_child_watch().connect( sigc::mem_fun(
-			  status, &utils_execute_command_status::store_exit_status ),
-					    pid );
+	g_child_watch_add( pid, _store_exit_status, &status );
 	output.clear();
 	error.clear();
 	//Lock mutex so we have time to setup pipecapture for output and error streams
