diff --git a/lib/exe/js.php b/lib/exe/js.php
index 1698036580cff5a0401fb9c3e03c07503aa457f9..183ae6d4c9f29375b6feff72044f55d4c2ec8eb3 100644
--- a/lib/exe/js.php
+++ b/lib/exe/js.php
@@ -55,6 +55,7 @@ function js_out(){
                 DOKU_INC.'lib/scripts/tw-sack.js',
                 DOKU_INC.'lib/scripts/ajax.js',
                 DOKU_INC.'lib/scripts/index.js',
+                DOKU_INC.'lib/scripts/drag.js',
                 DOKU_INC.'lib/scripts/textselection.js',
                 DOKU_INC.'lib/scripts/toolbar.js',
                 DOKU_INC.'lib/scripts/edit.js',
diff --git a/lib/scripts/edit.js b/lib/scripts/edit.js
index 8516fd1862496ecf11da6949d6a697022a3696b0..36861973a8983f6feb4f03675926ef18d3e04c5d 100644
--- a/lib/scripts/edit.js
+++ b/lib/scripts/edit.js
@@ -11,37 +11,41 @@
  * Style the buttons through the toolbutton class
  *
  * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Michal Rezler <m.rezler@centrum.cz> 
  */
 function createToolButton(icon,label,key,id,classname){
-    var btn = document.createElement('button');
-    var ico = document.createElement('img');
+    var $ = jQuery;
+    var btn = $('<button>');
+    var ico = $('<img />');
 
     // preapare the basic button stuff
-    btn.className = 'toolbutton';
+    btn.attr('class', 'toolbutton');
     if(classname){
-        btn.className += ' '+classname;
+        btn.attr('class', 'toolbutton '+classname);
     }
-    btn.title = label;
+    
+    btn.attr('title', label);
     if(key){
-        btn.title += ' ['+key.toUpperCase()+']';
-        btn.accessKey = key;
+        btn.attr('title', label + ' ['+key.toUpperCase()+']')
+            .attr('accessKey', key);    
     }
 
     // set IDs if given
     if(id){
-        btn.id = id;
-        ico.id = id+'_ico';
+        btn.attr('id', id);
+        ico.attr('id', id+'_ico');
     }
 
     // create the icon and add it to the button
     if(icon.substr(0,1) == '/'){
-        ico.src = icon;
+        ico.attr('src', icon);
     }else{
-        ico.src = DOKU_BASE+'lib/images/toolbar/'+icon;
+        ico.attr('src', DOKU_BASE+'lib/images/toolbar/'+icon);
     }
-    btn.appendChild(ico);
-
-    return btn;
+    btn.append(ico);
+                     
+    // we have to return a javascript object (for compatibility reasons)                             
+    return btn[0];
 }
 
 /**
@@ -60,45 +64,56 @@ function createToolButton(icon,label,key,id,classname){
  */
 function createPicker(id,props,edid){
     var icobase = props['icobase'];
-    var list    = props['list'];
+    var list = props['list'];
+    var $ = jQuery;
 
     // create the wrapping div
-    var picker            = document.createElement('div');
-    picker.className      = 'picker';
+    var picker = $('<div></div>');
+    
+    var className = 'picker';
     if(props['class']){
-        picker.className += ' '+props['class'];
+        className += ' '+props['class'];
     }
-    picker.id               = id;
-    picker.style.position   = 'absolute';
-    picker.style.marginLeft = '-10000px'; // no display:none, to keep access keys working
-    picker.style.marginTop  = '-10000px';
+    
+    picker.attr('class', className)
+        .attr('id', id)
+        .css('position', 'absolute')
+        .css('marginLeft', '-10000px') // no display:none, to keep access keys working
+        .css('marginTop', '-10000px');
 
     for(var key in list){
         if (!list.hasOwnProperty(key)) continue;
 
         if(isNaN(key)){
             // associative array -> treat as image/value pairs
-            var btn = document.createElement('button');
-            btn.className = 'pickerbutton';
-            var ico = document.createElement('img');
-            if(list[key].substr(0,1) == '/'){
-                ico.src = list[key];
-            }else{
-                ico.src = DOKU_BASE+'lib/images/'+icobase+'/'+list[key];
+            var btn = $('<button>');
+            btn.attr('class', 'pickerbutton')
+                .attr('title', key);
+            
+            var ico = $('<img>');
+            if (list[key].substr(0,1) == '/') {
+                var src = list[key];
+            } else {
+                var src = DOKU_BASE+'lib/images/'+icobase+'/'+list[key];
             }
-            btn.title     = key;
-            btn.appendChild(ico);
-            addEvent(btn,'click',bind(pickerInsert,key,edid));
-            picker.appendChild(btn);
-        }else if(typeof (list[key]) == 'string'){
+            
+            ico.attr('src', src);
+            btn.append(ico);
+            
+            btn.bind('click', bind(pickerInsert, key, edid));
+            picker.append(btn);
+        }else if (typeof (list[key]) == 'string'){
             // a list of text -> treat as text picker
-            var btn = document.createElement('button');
-            btn.className = 'pickerbutton';
-            var txt = document.createTextNode(list[key]);
-            btn.title     = list[key];
-            btn.appendChild(txt);
-            addEvent(btn,'click',bind(pickerInsert,list[key],edid));
-            picker.appendChild(btn);
+            var btn = $('<button>');
+            btn.attr('class', 'pickerbutton')
+                .attr('title', list[key]);
+            
+            var txt = $(document.createTextNode(list[key]));
+            btn.append(txt);
+            
+            btn.bind('click', bind(pickerInsert, list[key], edid));
+            
+            picker.append(btn);
         }else{
             // a list of lists -> treat it as subtoolbar
             initToolbar(picker,edid,list);
@@ -106,9 +121,11 @@ function createPicker(id,props,edid){
         }
 
     }
-    var body = document.getElementsByTagName('body')[0];
-    body.appendChild(picker);
-    return picker;
+    var body = $('body');
+    body.append(picker);
+    
+    // we have to return a javascript object (for compatibility reasons)
+    return picker[0];
 }
 
 /**
@@ -132,7 +149,7 @@ function pickerInsert(text,edid){
  */
 function addBtnActionSignature(btn, props, edid) {
     if(typeof(SIG) != 'undefined' && SIG != ''){
-        addEvent(btn,'click',bind(insertAtCarret,edid,SIG));
+        btn.bind('click', bind(insertAtCarret,edid,SIG));
         return true;
     }
     return false;
@@ -220,14 +237,14 @@ function keyHandler(e){
 
 //FIXME consolidate somewhere else
 addInitEvent(function(){
-    var field = $('wiki__text');
-    if(!field) return;
+    var field = jQuery('#wiki__text');
+    if(field.length == 0) return;
     // in Firefox, keypress doesn't send the correct keycodes,
     // in Opera, the default of keydown can't be prevented
     if (is_opera) {
-        addEvent(field,'keypress',keyHandler);
+        field.bind('keypress', keyHandler);
     } else {
-        addEvent(field,'keydown',keyHandler);
+        field.bind('keydown', keyHandler);
     }
 });