diff --git a/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java b/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java
index 6112a30..12281af 100644
--- a/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java
+++ b/webconsole/src/main/java/org/apache/felix/webconsole/AbstractWebConsolePlugin.java
@@ -620,6 +620,7 @@
         + "    </script>"
 
         + "    <script src=\"{2}/res/ui/jquery-1.3.2.min.js\" language=\"JavaScript\"></script>"
+        + "    <script src=\"{2}/res/ui/jquery.cookies-2.1.0.min.js\" language=\"JavaScript\"></script>"
         + "    <script src=\"{2}/res/ui/jquery.tablesorter-2.0.3.min.js\" language=\"JavaScript\"></script>"
 
         + "    <script src=\"{2}/res/ui/admin.js\" language=\"JavaScript\"></script>"
diff --git a/webconsole/src/main/resources/res/ui/bundles.js b/webconsole/src/main/resources/res/ui/bundles.js
index 588a9ec..a5ab7e5 100644
--- a/webconsole/src/main/resources/res/ui/bundles.js
+++ b/webconsole/src/main/resources/res/ui/bundles.js
@@ -243,13 +243,20 @@
             }
             return node.innerHTML;
         };
+        // check for cookie
+        var cv = $.cookies.get("webconsolebundlelist");
+        var lo = (cv ? cv.split(",") : [1,0]);
         $("#plugin_table").tablesorter({
             headers: {
         	    0: { sorter:"digit"},
                 5: { sorter: false }
             },
-            sortList: [[1,0]],
+            sortList: [cv],
             textExtraction:extractMethod 
         });
+        $("#plugin_table").bind("sortEnd", function() {
+        	var table = $("#plugin_table").eq(0).attr("config");
+        	$.cookies.set("webconsolebundlelist", table.sortList.toString());
+        });
     });
 }
diff --git a/webconsole/src/main/resources/res/ui/jquery.cookies-2.1.0.min.js b/webconsole/src/main/resources/res/ui/jquery.cookies-2.1.0.min.js
new file mode 100644
index 0000000..143a9e6
--- /dev/null
+++ b/webconsole/src/main/resources/res/ui/jquery.cookies-2.1.0.min.js
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) 2005 - 2009, James Auldridge
+ * All rights reserved.
+ *
+ * Licensed under the BSD, MIT, and GPL (your choice!) Licenses:
+ *  http://code.google.com/p/cookies/wiki/License
+ *
+ */
+var jaaulde=window.jaaulde||{};jaaulde.utils=jaaulde.utils||{};jaaulde.utils.cookies=(function()
+{var cookies=[];var defaultOptions={hoursToLive:null,path:'/',domain:null,secure:false};var resolveOptions=function(options)
+{var returnValue;if(typeof options!=='object'||options===null)
+{returnValue=defaultOptions;}
+else
+{returnValue={hoursToLive:(typeof options.hoursToLive==='number'&&options.hoursToLive!==0?options.hoursToLive:defaultOptions.hoursToLive),path:(typeof options.path==='string'&&options.path!==''?options.path:defaultOptions.path),domain:(typeof options.domain==='string'&&options.domain!==''?options.domain:defaultOptions.domain),secure:(typeof options.secure==='boolean'&&options.secure?options.secure:defaultOptions.secure)};}
+return returnValue;};var expiresGMTString=function(hoursToLive)
+{var dateObject=new Date();dateObject.setTime(dateObject.getTime()+(hoursToLive*60*60*1000));return dateObject.toGMTString();};var assembleOptionsString=function(options)
+{options=resolveOptions(options);return((typeof options.hoursToLive==='number'?'; expires='+expiresGMTString(options.hoursToLive):'')+'; path='+options.path+
+(typeof options.domain==='string'?'; domain='+options.domain:'')+
+(options.secure===true?'; secure':''));};var splitCookies=function()
+{cookies={};var pair,name,value,separated=document.cookie.split(';');for(var i=0;i<separated.length;i=i+1)
+{pair=separated[i].split('=');name=pair[0].replace(/^\s*/,'').replace(/\s*$/,'');value=decodeURIComponent(pair[1]);cookies[name]=value;}
+return cookies;};var constructor=function(){};constructor.prototype.get=function(cookieName)
+{var returnValue;splitCookies();if(typeof cookieName==='string')
+{returnValue=(typeof cookies[cookieName]!=='undefined')?cookies[cookieName]:null;}
+else if(typeof cookieName==='object'&&cookieName!==null)
+{returnValue={};for(var item in cookieName)
+{if(typeof cookies[cookieName[item]]!=='undefined')
+{returnValue[cookieName[item]]=cookies[cookieName[item]];}
+else
+{returnValue[cookieName[item]]=null;}}}
+else
+{returnValue=cookies;}
+return returnValue;};constructor.prototype.filter=function(cookieNameRegExp)
+{var returnValue={};splitCookies();if(typeof cookieNameRegExp==='string')
+{cookieNameRegExp=new RegExp(cookieNameRegExp);}
+for(var cookieName in cookies)
+{if(cookieName.match(cookieNameRegExp))
+{returnValue[cookieName]=cookies[cookieName];}}
+return returnValue;};constructor.prototype.set=function(cookieName,value,options)
+{if(typeof value==='undefined'||value===null)
+{if(typeof options!=='object'||options===null)
+{options={};}
+value='';options.hoursToLive=-8760;}
+var optionsString=assembleOptionsString(options);document.cookie=cookieName+'='+encodeURIComponent(value)+optionsString;};constructor.prototype.del=function(cookieName,options)
+{var allCookies={};if(typeof options!=='object'||options===null)
+{options={};}
+if(typeof cookieName==='boolean'&&cookieName===true)
+{allCookies=this.get();}
+else if(typeof cookieName==='string')
+{allCookies[cookieName]=true;}
+for(var name in allCookies)
+{if(typeof name==='string'&&name!=='')
+{this.set(name,null,options);}}};constructor.prototype.test=function()
+{var returnValue=false,testName='cT',testValue='data';this.set(testName,testValue);if(this.get(testName)===testValue)
+{this.del(testName);returnValue=true;}
+return returnValue;};constructor.prototype.setOptions=function(options)
+{if(typeof options!=='object')
+{options=null;}
+defaultOptions=resolveOptions(options);};return new constructor();})();(function()
+{if(window.jQuery)
+{(function($)
+{$.cookies=jaaulde.utils.cookies;var extensions={cookify:function(options)
+{return this.each(function()
+{var i,resolvedName=false,resolvedValue=false,name='',value='',nameAttrs=['name','id'],nodeName,inputType;for(i in nameAttrs)
+{if(!isNaN(i))
+{name=$(this).attr(nameAttrs[i]);if(typeof name==='string'&&name!=='')
+{resolvedName=true;break;}}}
+if(resolvedName)
+{nodeName=this.nodeName.toLowerCase();if(nodeName!=='input'&&nodeName!=='textarea'&&nodeName!=='select'&&nodeName!=='img')
+{value=$(this).html();resolvedValue=true;}
+else
+{inputType=$(this).attr('type');if(typeof inputType==='string'&&inputType!=='')
+{inputType=inputType.toLowerCase();}
+if(inputType!=='radio'&&inputType!=='checkbox')
+{value=$(this).val();resolvedValue=true;}}
+if(resolvedValue)
+{if(typeof value!=='string'||value==='')
+{value=null;}
+$.cookies.set(name,value,options);}}});},cookieFill:function()
+{return this.each(function()
+{var i,resolvedName=false,name='',value,nameAttrs=['name','id'],iteration=0,nodeName;for(i in nameAttrs)
+{if(!isNaN(i))
+{name=$(this).attr(nameAttrs[i]);if(typeof name==='string'&&name!=='')
+{resolvedName=true;break;}}}
+if(resolvedName)
+{value=$.cookies.get(name);if(value!==null)
+{nodeName=this.nodeName.toLowerCase();if(nodeName==='input'||nodeName==='textarea'||nodeName==='select')
+{$(this).val(value);}
+else
+{$(this).html(value);}}}
+iteration=0;});},cookieBind:function(options)
+{return this.each(function()
+{$(this).cookieFill().change(function()
+{$(this).cookify(options);});});}};$.each(extensions,function(i)
+{$.fn[i]=this;});})(window.jQuery);}})();
\ No newline at end of file
