diff --git a/lib/plugins/extension/action.php b/lib/plugins/extension/action.php
index 3f2ccaace18473df16bf2c26870e2daf85b9b587..9e48f134b1f7d527804450ddf60d73d0d33febee 100644
--- a/lib/plugins/extension/action.php
+++ b/lib/plugins/extension/action.php
@@ -28,25 +28,23 @@ class action_plugin_extension extends DokuWiki_Action_Plugin {
      * @param Doku_Event $event
      * @param            $param
      */
-    public function info(Doku_Event &$event, $param){
+    public function info(Doku_Event &$event, $param) {
         global $USERINFO;
         global $INPUT;
 
-
         if($event->data != 'plugin_extension') return;
         $event->preventDefault();
         $event->stopPropagation();
 
-        if(empty($_SERVER['REMOTE_USER']) || !auth_isadmin($_SERVER['REMOTE_USER'], $USERINFO['grps'])){
+        if(empty($_SERVER['REMOTE_USER']) || !auth_isadmin($_SERVER['REMOTE_USER'], $USERINFO['grps'])) {
             http_status(403);
             echo 'Forbidden';
             exit;
         }
 
-        header('Content-Type: text/html; charset=utf-8');
-
         $ext = $INPUT->str('ext');
         if(!$ext) {
+            http_status(400);
             echo 'no extension given';
             return;
         }
@@ -55,11 +53,32 @@ class action_plugin_extension extends DokuWiki_Action_Plugin {
         $extension = plugin_load('helper', 'extension_extension');
         $extension->setExtension($ext);
 
-        /** @var helper_plugin_extension_list $list */
-        $list = plugin_load('helper', 'extension_list');
-
-
-        echo $list->make_info($extension);
+        $act = $INPUT->str('act');
+        switch($act) {
+            case 'enable':
+            case 'disable':
+                $json = new JSON();
+                $extension->$act(); //enables/disables
+
+                $reverse = ($act == 'disable') ? 'enable' : 'disable';
+
+                $return = array(
+                    'state'   => $act.'d', // isn't English wonderful? :-)
+                    'reverse' => $reverse,
+                    'label'   => $extension->getLang('btn_'.$reverse)
+                );
+
+                header('Content-Type: application/json');
+                echo $json->encode($return);
+                break;
+
+            case 'info':
+            default:
+                /** @var helper_plugin_extension_list $list */
+                $list = plugin_load('helper', 'extension_list');
+                header('Content-Type: text/html; charset=utf-8');
+                echo $list->make_info($extension);
+        }
     }
 
 }
diff --git a/lib/plugins/extension/script.js b/lib/plugins/extension/script.js
index bd3c977588d77d9bf0cd13156f03de4866a957f0..fab88162d8c6c1f62e23bcb9e5745ffc326435ad 100644
--- a/lib/plugins/extension/script.js
+++ b/lib/plugins/extension/script.js
@@ -1,9 +1,11 @@
 jQuery(function(){
 
+    var $extmgr = jQuery('#extension__manager');
+
     /**
      * Confirm uninstalling
      */
-    jQuery('#extension__manager input.uninstall').click(function(e){
+    $extmgr.find('input.uninstall').click(function(e){
         if(!window.confirm(LANG.plugins.extension.reallydel)){
             e.preventDefault();
             return false;
@@ -15,7 +17,7 @@ jQuery(function(){
      * very simple lightbox
      * @link http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/super-simple-lightbox-with-css-and-jquery/
      */
-    jQuery('#extension__manager a.extension_screenshot').click(function(e) {
+    $extmgr.find('a.extension_screenshot').click(function(e) {
         e.preventDefault();
 
         //Get clicked link href
@@ -41,10 +43,49 @@ jQuery(function(){
         return false;
     });
 
+    /**
+     * Enable/Disable extension via AJAX
+     */
+    $extmgr.find('input.disable, input.enable').click(function (e) {
+        e.preventDefault();
+        var $btn = jQuery(this);
+
+        // get current state
+        var extension = $btn.attr('name').split('[')[2];
+        extension = extension.substr(0, extension.length - 1);
+        var act = ($btn.hasClass('disable')) ? 'disable' : 'enable';
+
+        // disable while we wait
+        $btn.attr('disabled', 'disabled');
+        $btn.css('cursor', 'wait');
+
+        // execute
+        jQuery.get(
+            DOKU_BASE + 'lib/exe/ajax.php',
+            {
+                call: 'plugin_extension',
+                ext:  extension,
+                act:  act
+            },
+            function (data) {
+                $btn.css('cursor', '')
+                    .removeAttr('disabled')
+                    .removeClass('disable')
+                    .removeClass('enable')
+                    .val(data.label)
+                    .addClass(data.reverse)
+                .parents('li')
+                    .removeClass('disabled')
+                    .removeClass('enabled')
+                    .addClass(data.state);
+            }
+        );
+    });
+
     /**
      * AJAX detail infos
      */
-    jQuery('#extension__manager a.info').click(function(e){
+    $extmgr.find('a.info').click(function(e){
         e.preventDefault();
 
         var $link = jQuery(this);
@@ -60,7 +101,8 @@ jQuery(function(){
             DOKU_BASE + 'lib/exe/ajax.php',
             {
                 call: 'plugin_extension',
-                ext: $link.data('extid')
+                ext: $link.data('extid'),
+                act: 'info'
             },
             function(data){
                 $link.parent().append(data);