diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index f4c80560c52184c76170d3c5ea8e5d9b0294eb73..fc8b4a67c5d6df3984f716eedc367e3b5cae114b 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,9 @@
+1999-11-05  Jeff Sturm  <jsturm@sigma6.com>
+
+	* boehm.cc (_Jv_GCSetInitialHeapSize): Swapped size & current.
+	* prims.cc (parse_heap_size): Use end, not spec.  Use 1024
+	multipler for `k'.
+
 1999-11-05  Tom Tromey  <tromey@cygnus.com>
 
 	* java/lang/natThread.cc (stop): Removed argument name.
diff --git a/libjava/boehm.cc b/libjava/boehm.cc
index 33800edb410dfba97d3d0a1404742de0bd22d1b7..2ecad740d9341245156f6c54d7e0bda454f227b2 100644
--- a/libjava/boehm.cc
+++ b/libjava/boehm.cc
@@ -375,7 +375,7 @@ _Jv_GCSetInitialHeapSize (size_t size)
 {
   size_t current = GC_get_heap_size ();
   if (size > current)
-    GC_expand_hp (current - size);
+    GC_expand_hp (size - current);
 }
 
 void
diff --git a/libjava/prims.cc b/libjava/prims.cc
index 6e6c63399234d9b5aace7db117a7f17b12620e58..6b37d55eb90d1002dab15e743295eed6697a45c0 100644
--- a/libjava/prims.cc
+++ b/libjava/prims.cc
@@ -822,10 +822,10 @@ parse_heap_size (const char *spec)
 {
   char *end;
   unsigned long val = strtoul (spec, &end, 10);
-  if (*spec == 'k' || *spec == 'K')
-    val *= 1000;
-  else if (*spec == 'm' || *spec == 'M')
-    val *= 1000000;
+  if (*end == 'k' || *end == 'K')
+    val *= 1024;
+  else if (*end == 'm' || *end == 'M')
+    val *= 1048576;
   return (size_t) val;
 }