diff -ru gnome-utils-2.4.0-orig/gcalctool-4.3.3/gcalctool/calctool.c gnome-utils-2.4.0/gcalctool-4.3.3/gcalctool/calctool.c
--- gnome-utils-2.4.0-orig/gcalctool-4.3.3/gcalctool/calctool.c	2004-02-22 16:43:21.000000000 +0100
+++ gnome-utils-2.4.0/gcalctool-4.3.3/gcalctool/calctool.c	2004-02-22 16:49:29.000000000 +0100
@@ -346,7 +346,7 @@
     { GDK_percent, 0 },
     '%',
     M_NONE,
-    do_calc
+    do_immed
 },
 {
     N_("Sqrt"),
diff -ru gnome-utils-2.4.0-orig/gcalctool-4.3.3/gcalctool/functions.c gnome-utils-2.4.0/gcalctool-4.3.3/gcalctool/functions.c
--- gnome-utils-2.4.0-orig/gcalctool-4.3.3/gcalctool/functions.c	2004-02-22 16:43:21.000000000 +0100
+++ gnome-utils-2.4.0/gcalctool-4.3.3/gcalctool/functions.c	2004-02-22 16:50:20.000000000 +0100
@@ -303,11 +303,6 @@
     } else if (IS_KEY(v->cur_op, KEY_DIV.value[0])) {     /* Division. */
         mpdiv(v->MPresult, v->MPdisp_val, v->MPresult);
 
-    } else if (IS_KEY(v->cur_op, KEY_PER.value[0])) {     /* % */
-        mpmul(v->MPresult, v->MPdisp_val, v->MPresult);
-        MPstr_to_num("0.01", DEC, MP1);
-        mpmul(v->MPresult, MP1, v->MPresult);
-
     } else if (IS_KEY(v->cur_op, KEY_YTOX.value[0])) {    /* y^x */
         mppwr2(v->MPresult, v->MPdisp_val, v->MPresult);
 
@@ -552,6 +547,12 @@
         dval = setbool(~ibool(dval));               
         mpcdm(&dval, v->MPdisp_val);
 
+    } else if (key_equal(v->current, KEY_PER)) {          /* % */
+        mpstr(v->MPdisp_val, MP1);
+        i = 100;
+        mpcim(&i, MP2);
+        mpdiv(MP1, MP2, v->MPdisp_val);
+
     } else if (key_equal(v->current, KEY_REC)) {          /* 1/x */
         i = 1;
         mpcim(&i, MP1);
