diff --git a/ChangeLog b/ChangeLog
index 02db63f16..6c19c3b7b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2008-03-27  Andres G. Aragoneses  <aaragoneses@novell.com>
+
+	* glib/Program.cs: Add new static class for utility property, moving
+	the code to call g_set_prgname() from gtk/Application.cs to here,
+	and changing return value of g_set_program_name from bool to void.
+	* gtk/Application.cs: Use Program.Name as a replacement of 
+	calling the native function g_set_prgname().
+	* glib/Makefile.am: add Program.cs.
+
 2008-03-21  Mike Kestner  <mkestner@novell.com>
 
 	* bootstrap-2.12: bump svn version
diff --git a/glib/Makefile.am b/glib/Makefile.am
index 4239cba73..be60955ef 100644
--- a/glib/Makefile.am
+++ b/glib/Makefile.am
@@ -53,6 +53,7 @@ sources =		 			\
 	Object.cs				\
 	ObjectManager.cs			\
 	Opaque.cs				\
+	Program.cs				\
 	PropertyAttribute.cs			\
 	Signal.cs				\
 	SignalArgs.cs				\
diff --git a/glib/Program.cs b/glib/Program.cs
new file mode 100644
index 000000000..f946ea4c7
--- /dev/null
+++ b/glib/Program.cs
@@ -0,0 +1,53 @@
+// GLib.Program.cs - GProgram class implementation
+//
+// Author: Andres G. Aragoneses <aaragoneses@novell.com>
+//
+// Copyright (c) 2008 Novell, Inc
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of version 2 of the Lesser GNU General 
+// Public License as published by the Free Software Foundation.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this program; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+
+namespace GLib {
+
+	using System;
+	using System.Text;
+	using System.Runtime.InteropServices;
+
+	public class Program
+	{
+
+		//this is a static class
+		private Program ()
+		{
+		}
+
+		public static string Name {
+			get {
+				return GLib.Marshaller.PtrToStringGFree(g_get_prgname());
+			}
+			set { 
+				IntPtr native_name = GLib.Marshaller.StringToPtrGStrdup (value);
+				g_set_prgname (native_name);
+				GLib.Marshaller.Free (native_name);
+			}
+		}
+
+		[DllImport("libglib-2.0-0.dll")]
+		static extern void g_set_prgname (IntPtr name);
+
+		[DllImport("libglib-2.0-0.dll")]
+		static extern IntPtr g_get_prgname ();
+	}
+}
diff --git a/gtk/Application.cs b/gtk/Application.cs
index 398ec26ca..9beddc2be 100755
--- a/gtk/Application.cs
+++ b/gtk/Application.cs
@@ -39,15 +39,9 @@ namespace Gtk {
 		[DllImport("libgtk-win32-2.0-0.dll")]
 		static extern bool gtk_init_check (ref int argc, ref IntPtr argv);
 
-		[DllImport("libglib-2.0-0.dll")]
-		static extern bool g_set_prgname (IntPtr name);
-
 		static void SetPrgname ()
 		{
-			string name = System.IO.Path.GetFileNameWithoutExtension (Environment.GetCommandLineArgs () [0]);
-			IntPtr native_name = GLib.Marshaller.StringToPtrGStrdup (name);
-			g_set_prgname (native_name);
-			GLib.Marshaller.Free (native_name);
+			GLib.Program.Name = System.IO.Path.GetFileNameWithoutExtension (Environment.GetCommandLineArgs () [0]);
 		}
 
 		public static void Init ()