--- a/ocaml/xenops/balloon.ml
+++ b/ocaml/xenops/balloon.ml
@@ -18,46 +18,34 @@
 module D = Debug.Debugger(struct let name = "xenops" end)
 open D
 
-let proc_xen_balloon = "/proc/xen/balloon"
-let _balloon_key_current_allocation = "Current allocation"
+let sysfs_stem = "/sys/devices/system/xen_memory/xen_memory0/"
 
-let _current_allocation = "Current allocation"
-let _requested_target = "Requested target"
-let _low_mem_balloon = "Low-mem balloon"
-let _high_mem_balloon = "High-mem balloon"
+let _current_allocation = "info/current_kb"
+let _requested_target = "target_kb"
+let _low_mem_balloon = "info/low_kb"
+let _high_mem_balloon = "info/high_kb"
 
 (** Indicates whether or not we're running with XIU (Xen-In Userspace) *)
 let on_xiu () = Xenctrl.is_fake ()
 
 (** Reads /proc/xen/balloon into a string * int64 option association list *)
 let parse_proc_xen_balloon () =
-	let assoc = ref [] in
-	let f line =
-		match String.split ':' line with
-		| [ k; rest ] -> (
-			let v =
-				let int64 x =
-					try Some (Int64.of_string x)
-					with Failure("int_of_string") -> None in
-				match List.filter (fun x -> x <> "") (String.split ' ' rest) with
-				| [ v; "kB" ] -> int64 v
-				| [ v; "MB" ] -> Opt.map Memory.kib_of_mib (int64 v)
-				| _           -> None
-				in
-			assoc := (k, v) :: !assoc
-			)
-		| _ -> ()
-		in
 	if on_xiu () then
-		List.iter f [ "Current allocation:   204800 kB";
-		              "Requested target:     204800 kB";
-		              "Low-mem balloon:      566784 kB";
-		              "High-mem balloon:          0 kB";
-		              "Driver pages:           1024 kB";
-		              "Xen hard limit:          ??? kB"; ]
-	else
-		Unixext.readfile_line f proc_xen_balloon;
-	!assoc  
+		[ _current_allocation, Some 100L;
+		  _requested_target, Some 100L;
+		  _low_mem_balloon, Some 100L;
+		  _high_mem_balloon, Some 100L;]
+	else 
+		let keys = [
+			_current_allocation;
+			_requested_target;
+			_low_mem_balloon;
+			_high_mem_balloon] in
+		List.map (fun key -> 
+					  let s = (Unixext.string_of_file (sysfs_stem ^ key)) in
+					  let stripped = Stringext.String.strip Stringext.String.isspace s in
+					  (key, Some (Int64.of_string stripped))) keys 
+			
 
 (** Sets the current memory target for a running VM, to the given value (in KiB), *)
 (** by writing the target to XenStore. The value is automatically rounded down to *)
@@ -69,3 +57,4 @@
 	(* Debugging information: *)
 	let mem_mib = Memory.mib_of_kib_used mem_kib in
 	debug "domain %d set memory target to %Ld MiB" domid mem_mib;
+	
