diff --git a/_test/cases/lib/exe/js_js_compress.test.php b/_test/cases/lib/exe/js_js_compress.test.php
index 48b36af15ecf030263ac09ba0e174f71aeb6be1e..f46cbe227b4c4596fd4f9881fc8f07d24f199bf6 100644
--- a/_test/cases/lib/exe/js_js_compress.test.php
+++ b/_test/cases/lib/exe/js_js_compress.test.php
@@ -19,6 +19,11 @@ class js_js_compress_test extends UnitTestCase {
         $this->assertEqual(js_compress($text), 'var foo=6;');
     }
 
+    function test_mlcomcond(){
+        $text = '/*@if (@_win32)';
+        $this->assertEqual(js_compress($text), '/*@if(@_win32)');
+    }
+
     function test_slcom1(){
         $text = '// an comment';
         $this->assertEqual(js_compress($text), '');
diff --git a/lib/exe/js.php b/lib/exe/js.php
index de996a11732946b9a0466f32a93fdf8af77e146e..75b9b1f1cacc1d8c49aa8d9e12b7d366e41ba970 100644
--- a/lib/exe/js.php
+++ b/lib/exe/js.php
@@ -143,11 +143,11 @@ function js_out(){
     js_runonstart('scrollToMarker()');
     js_runonstart('focusMarker()');
 
-    // initialize init pseudo event
+/*    // initialize init pseudo event
     echo 'if (document.addEventListener) {'.NL;
     echo '    document.addEventListener("DOMContentLoaded", window.fireoninit, null);'.NL;
     echo '}'.NL;
-    echo 'addEvent(window,"load",window.fireoninit);'.NL;
+    echo 'addEvent(window,"load",window.fireoninit);'.NL;*/
 
     // end output buffering and get contents
     $js = ob_get_contents();
@@ -245,8 +245,8 @@ function js_compress($s){
     while($i < $len){
         $ch = $s{$i};
 
-        // multiline comments
-        if($ch == '/' && $s{$i+1} == '*'){
+        // multiline comments (keeping IE conditionals)
+        if($ch == '/' && $s{$i+1} == '*' && $s{$i+2} != '@'){
             $endC = strpos($s,'*/',$i+2);
             if($endC === false) trigger_error('Found invalid /*..*/ comment', E_USER_ERROR);
             $i = $endC + 2;
diff --git a/lib/scripts/events.js b/lib/scripts/events.js
index 262e5ec2d2cd2082d3f66970c8f33b51c6672bfb..31a81f6da2052d8434ca0b6751aeb1a08af85d05 100644
--- a/lib/scripts/events.js
+++ b/lib/scripts/events.js
@@ -67,26 +67,71 @@ fixEvent.stopPropagation = function() {
  * on window load at last.
  *
  * @author based upon some code by Dean Edwards
- * @author Andreas Gohr
- * @see    http://dean.edwards.name/weblog/2005/09/busted/
+ * @author Dean Edwards
+ * @link   http://dean.edwards.name/weblog/2006/06/again/
  */
 window.fireoninit = function() {
   // quit if this function has already been called
   if (arguments.callee.done) return;
   // flag this function so we don't do the same thing twice
   arguments.callee.done = true;
+  // kill the timer
+  if (_timer) {
+     clearInterval(_timer);
+     _timer = null;
+  }
 
-    if (typeof window.oninit == 'function') {
+  if (typeof window.oninit == 'function') {
         window.oninit();
   }
 };
 
 /**
- * This is a pseudo Event that will be fired by the above function
+ * Run the fireoninit function as soon as possible after
+ * the DOM was loaded, using different methods for different
+ * Browsers
+ *
+ * @author Dean Edwards
+ * @link   http://dean.edwards.name/weblog/2006/06/again/
+ */
+  // for Mozilla
+  if (document.addEventListener) {
+    document.addEventListener("DOMContentLoaded", window.fireoninit, null);
+  }
+
+  // for Internet Explorer (using conditional comments)
+  /*@cc_on @*/
+  /*@if (@_win32)
+    document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
+    var script = document.getElementById("__ie_onload");
+    script.onreadystatechange = function() {
+        if (this.readyState == "complete") {
+            window.fireoninit(); // call the onload handler
+        }
+    };
+  /*@end @*/
+
+  // for Safari
+  if (/WebKit/i.test(navigator.userAgent)) { // sniff
+    var _timer = setInterval(function() {
+        if (/loaded|complete/.test(document.readyState)) {
+            window.fireoninit(); // call the onload handler
+        }
+    }, 10);
+  }
+
+  // for other browsers
+  window.onload = window.fireoninit;
+
+
+/**
+ * This is a pseudo Event that will be fired by the fireoninit
+ * function above.
  *
  * Use addInitEvent to bind to this event!
  *
- * @author Andreas Gohr
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @see fireoninit()
  */
 window.oninit = function(){};