Changes in 4.4.0
-----------------
** Improvement
    * [FELIX-6232] - Allow Webconsole to install parallel versions of bundles
** Bug
    * [FELIX-6185] - jQuery <3.4.0 is vulnerable to prototype pollution attacks
    * [FELIX-5661] - The heuristic to derive the password type from the metatype id does not work reliably

Changes in 4.3.16
-----------------
** Bug
    * [FELIX-6171] - Webconsole OsgiManager throws NPE
    * [FELIX-6172] - Already Registered Servlet Exception with WebConsole


Changes in 4.3.14
-----------------
** Improvement
    * [FELIX-6037] - Commons FileUpload 1.4 breaks bundle uploads
    * [FELIX-6168] - Enable WebConsole login only after specified Security Providers are present


Changes in 4.3.12
-----------------
** Bug
    * [FELIX-6132] - XSS possible in service console

Changes in 4.3.10
-----------------
** Improvement
    * [FELIX-5934] - The web console stores unsalted hashed password
** Bug
    * [FELIX-6128] - Escape bundle name and manifest headers
    * [FELIX-6127] - Escape name hint in configuration listing


Changes in 4.3.8
----------------
** Improvement
    * [FELIX-5901] - Update to latest jQuery UI 1.12.1
** Bug
    * [FELIX-5893] - JQuery Security bug CVE-2015-9251 in Web Console


Changes from 4.3.2 to 4.3.4
---------------------------
** Bug
    * [FELIX-5638] - Unintended Web Console RESTful API change

Changes from 4.3.0 to 4.3.2
---------------------------
** Bug
    * [FELIX-5620] - Bundle start/stop buttons are missing
** Improvement
    * [FELIX-5566] - Stop/update/refresh/start bundles when updating through the webconsole for faster turnaround
    * [FELIX-5602] - Use Java 6 as base java version


Changes from 4.2.18 to 4.3.0
----------------------------
** Improvement
    * [FELIX-5504] - Switch from org.json to new simple json writer in utils
    * [FELIX-5509] - Remove method keyVal from WebConsoleUtil


Changes from 4.2.16 to 4.2.18
-----------------------------
** Bug
    * [FELIX-4840] - Asynchronous IO fails in webconsole plugin
    * [FELIX-5387] - NPE for requests missing 'felix-webconsole-locale' cookie

** Improvement
    * [FELIX-5445] - Web Console: Properly display non-string property arrays in name hint
    * [FELIX-5484] - Webconsole configuration factory name hint array rendering


Changes from 4.2.14 to 4.2.16
-----------------------------
** Bug
    * [FELIX-4941] - Configuration Properties not defined in Metatype are lost after update
    * [FELIX-4795] - Servlet API 3.x not supported 
    * [FELIX-5223] - [IE11][Edge]: Fields in OSGI Configuration Manager are not editable 


Changes from 4.2.12 to 4.2.14
-----------------------------
** Bug
    * [FELIX-5042] - Get system bundle by location, not number for global bundle list
    * [FELIX-5060] - Unnecessary import of org.osgi.service.component


Changes from 4.2.10 to 4.2.12
-----------------------------
** Bug
    * [FELIX-2880] - The Webconsole does not handle Vector<PrimitiveWrapper>
    * [FELIX-3366] - The Configuration Webconsole Plugin seems to ignore the ocd ref element
    * [FELIX-4849] - Do not call setContentLength after calling sendRedirect
    * [FELIX-4995] - NPE when updating Apache Felix OSGi Management Console configuration without a password
    * [FELIX-5004] - Null is passed to BundleInfoProvider if plugin root is null
    * [FELIX-5031] - NPE in Web Console configuration plugin when metatype service is missing
    * [FELIX-5041] - Cannot build web console with JDK 1.8 due to javadoc problems

** Improvement
    * [FELIX-5018] - [webconsole] "create factory configuration" link for config screen
    * [FELIX-5019] - [webconsole] "referer" parameter for configuration open/create link


Changes from 4.2.8 to 4.2.10
----------------------------
** Bug
    * [FELIX-4852] - Unbinding configuration does not have desired effect
    * [FELIX-4886] - Check for ConfigAdmin#listConfigurations returning null


Changes from 4.2.6 to 4.2.8
---------------------------
** Bug
    * [FELIX-3695] - When bundle filter doesn't match, the tool bars are duplicated
    * [FELIX-4800] - Bundle search in /system/console/bundles produces 405
** Improvement
    * [FELIX-3006] - Please create a logout button for the web console screen

Changes from 4.2.4 to 4.2.6
---------------------------
** Bug
    * [FELIX-4203] - ConfigAdmin plugin does not return json
    * [FELIX-4734] - Web Console RESTful API should wait for asynchonous operations until they complete 
    * [FELIX-4735] - Cannot create a new factory configuration from Web Admin Console
** Improvement
    * [FELIX-3849] - Support setting configuration binding
    * [FELIX-4007] - enable multiline inputs in Web Console Configuration
    * [FELIX-4704] - Show ranking in web console services plugin
    * [FELIX-4710] - Web Console: Display templated name hint for factory configuration entries
    * [FELIX-4737] - Provide an option to use system bundle context to get bundles/services (Support for subsystems)
    * [FELIX-4746] - Escape outputting filter parameter in service servlet
** Task
    * [FELIX-4738] - Deprecate WebConsoleUtil#keyVal

Changes from 4.2.0 to 4.2.4
---------------------------
** Bug
    * [FELIX-3817] - Form parameters might clash with configuration parameters
    * [FELIX-4558] - Web Console Service plugin doesn&#39;t list properties with value 0
    * [FELIX-4562] - Web Console License plugin fails to load files
    * [FELIX-4572] - Web Console may cause NPE on refresh packages
    * [FELIX-4610] - WebConsole doesn&#39;t start with Java Security enabled
    * [FELIX-4652] - Security problem with AbstractWebConsolePlugin.spoolResource
    * [FELIX-4660] - Security problem in WebConsoleUtil.getParameter() method
    * [FELIX-4662] - WebConsole Xdialog javascript function is not working correctly
                
** New Feature
    * [FELIX-3848] - Differentiate between unbound and new configuration
    * [FELIX-4711] - Web Console: False AJAX error displayed on deleting or unbinding config

Changes from 4.0.0 to 4.2.0
---------------------------

** Bug
    * [FELIX-3318] - NPE in WebConsole when trying to uninstall a bundle
    * [FELIX-3570] - Commons IO dependency issue
    * [FELIX-3605] - Configuration Status plugin has an error in IE/Compatibility View
    * [FELIX-3663] - Java Runtime in the System Information tab appears as 'null(build null)' in Skelmir CEE-J VM
    * [FELIX-3666] - NPE when uninstalling a bundle
    * [FELIX-3694] - In some cases web console cannot edit configs without metatype
    * [FELIX-3783] - ConfigurationAdminConfigurationPrinter failing if Configuration Admin API not bound
    * [FELIX-3784] - Configuration Admin tab not working when Metatype Service API is missing
    * [FELIX-3795] - JS Error in Configuration Status printing
    * [FELIX-3814] - Javascript error when directly invoking a configuration with IE8
    * [FELIX-3829] - NullPointerException when creating configuration with multi-value password properties
    * [FELIX-3841] - CSS issues in IE with Web Console menus
    * [FELIX-3936] - Main menu items hidden in the Configuration Status page
    * [FELIX-3946] - NullPointerException in BundleServlet.bundleDetails when not called through HTTP
    * [FELIX-3965] - threads configuration status generates invalid results
    * [FELIX-3969] - web console shows invalid bundle symbolic name
    * [FELIX-3986] - ThreadDumper comparators are not correctly implemented
    * [FELIX-4074] - Plugin class name changed for config manager plugin, might be disabled on update
 
** Improvement
    * [FELIX-2234] - Reduce status information from bundle plugin
    * [FELIX-3594] - Service should be sorted by ID in service configuration printer
    * [FELIX-3798] - Make default category configurable
    * [FELIX-3799] - Sort plugin plugin links by title
    * [FELIX-3851] - Allow for refresh after bundle update/install
    * [FELIX-3861] - Set felix.webconsole.category on Web Console plugins
    * [FELIX-3951] - Let users able to specify the directory used to temporarily store uploaded files

** New Feature
    * [FELIX-2896] - Add support for bundle info providers
    * [FELIX-3769] - Improve the way Web Console UI manages growing number of plugins.
    * [FELIX-3770] - Upgrade jquery-ui to 1.9.1

** Task
    * [FELIX-3778] - Create all-in-one WebConsole build again
    * [FELIX-3833] - Consider backwards compatibility break with label map due to Categories
    * [FELIX-3834] - Create separate language fragment bundles
    * [FELIX-3874] - Create new status printer module


Changes from 3.1.8 to 4.0.0
---------------------------

** Bug
    * [FELIX-1865] - Metatype resolving mechanism does not seem to work correctly
    * [FELIX-2707] - Webconsole does not resolve resource bundle properly
    * [FELIX-2708] - Webconsole causes NPE in Bundle.getResource(String)
    * [FELIX-2727] - WebConsole logs an error not being able to create the DepPackServlet
    * [FELIX-2830] - Tablesorter loses it's styling if placed in JQuery TAB component
    * [FELIX-2855] - WebConsole cannot read the list of enabled plugins when using FileInstall
    * [FELIX-2879] - Metatype Service confuses the id of the OCD with the Designate.pid/factoryPid.
    * [FELIX-2889] - Invalid JSON content in http response after starting or stopping a bundle.
    * [FELIX-2971] - Configuration changes cannot be made via Felix Web Console in IE7
    * [FELIX-2979] - Declarative Services Components page only displayed if Configuration Admin and Metatype Service API is available
    * [FELIX-3010] - XSS in Felix Web Console
    * [FELIX-3028] - Better handle configuration unbinding
    * [FELIX-3116] - Saving configuration shows "AJAX error" dialog
    * [FELIX-3132] - Extensions not properly supported
    * [FELIX-3268] - Cannot build webconsole and webconsole-plugins with JDK 7
    * [FELIX-3284] - NullPointerException may be thrown if asynchronous bundle update fails
    * [FELIX-3285] - Wrong vector and array handling in Configuration Admin plugin
    * [FELIX-3311] - Cookie handling seems not to work anymore
    * [FELIX-3320] - WebConsole UX: actions and status on bundle details don't update properly
    * [FELIX-3404] - Web Admin Log Plugin stops listing of log entries if message is null.
    * [FELIX-3405] - NPE in Web Console
    * [FELIX-3406] - Localization in Web Console doesn't work anymore
    * [FELIX-3408] - Web Console date chooser shows garbage text
    * [FELIX-3433] - WebConsole default ajax error handlers doesn't work with IE
    * [FELIX-3469] - Type mismatch JS error using the memoryusage plugin
    * [FELIX-3473] - web console config manager plugin no longer works with J9
    * [FELIX-3485] - ui-bg_glass_55_fbf9ee_1x400.png does not exist in admin_compat.css

** Improvement
    * [FELIX-2117] - Use DynamicImport instead of Optional Packages
    * [FELIX-2697] - Allow enable/disable internal plugins dynamically
    * [FELIX-3014] - Have a way to "deep link" to a particular tab within Configuration Status
    * [FELIX-3022] - Add Uptime indication to Status page
    * [FELIX-3024] - Add Delete and Unbind buttons to Configuration Detail dialogs
    * [FELIX-3025] - Add a configuration status list with a short bundle list
    * [FELIX-3027] - Make download links for single configuration status file (or ZIP file) more prominent
    * [FELIX-3040] - Configuration status dump should contain a timestamp when the dump has been taken
    * [FELIX-3099] - Separate Deployment Admin plugin
    * [FELIX-3100] - Separate SCR plugin
    * [FELIX-3107] - Separate Shell Plugin
    * [FELIX-3111] - Separate OBR Plugin
    * [FELIX-3168] - Add support for new PASSWORD attribute type of Metatype service
    * [FELIX-3236] - Make language selection cookie longer lasting
    * [FELIX-3282] - Generate default fields for configurations without descriptor
    * [FELIX-3290] - Improve Cookie handling of the Web Console
    * [FELIX-3298] - Add animal sniffer plugin to ensure no using any non-Java 1.4 API
    * [FELIX-3315] - Log plugin does not show the bundle that has logged the event
    * [FELIX-3316] - Log plugin should provide more detailed exception column
    * [FELIX-3417] - Web Console Inconsistent status text
    * [FELIX-3418] - Sort threads by name in Configuration Status -> Threads
    * [FELIX-3482] - Text wrapping goes out of bounds in Configuration Status
    * [FELIX-3491] - Better activity indication when pressing refresh/update bundle buttons 
    * [FELIX-3502] - Improve Threads web console printer

** New Feature
    * [FELIX-2709] - Allow webconsole context root be obtained from framework properties

** Task
    * [FELIX-2904] - Inlined required/embedded dependencies
    * [FELIX-3279] - Drop default build and use bare profile as the single build
    * [FELIX-3280] - Update to use parent POM 2.1
    * [FELIX-3281] - Use bundle plugin 2.3.6 and BND annotations for package export
    * [FELIX-3490] - Notice included OSGi classes


Changes from 3.1.6 to 3.1.8
---------------------------

** Bug
    * [FELIX-2713] - Problem in HtmlConfigurationWriter
    * [FELIX-2729] - Webconsole - Configuration fails to print configuration for bundles without MetatypeService config
    * [FELIX-2735] - ClassCastException in PermissionsConfigurationPrinter
    * [FELIX-2793] - Plugin request is not detected as html request if context path contains a dot
    * [FELIX-2795] - Parameters are not removed from symbolic name when installing a bundle


Changes from 3.1.2 to 3.1.6
---------------------------

** Bug
    * [FELIX-2570] - HTML is escaped in ModeAwareConfigurationPrinter when in &quot;web&quot; mode
    * [FELIX-2573] - switching the console language bugs the jqueryUI datepicker component
    * [FELIX-2609] - WebConsole doesn't work with JDK 1.3.1_06 because of Locale
    * [FELIX-2610] -  WebConsole doesn't work with JDK 1.3.1_06 because of problem in MessageFormat
    * [FELIX-2617] - webconsole has option to change the language but doesn't show the currently selected one
    * [FELIX-2627] - can't install war files via webconsole
    * [FELIX-2635] - PluginHolder.setServletContext() must nullify servlet context after plugins destroying 
    * [FELIX-2644] - cannot disable plugin
    * [FELIX-2650] - ConfigurationPrinter with other modes than web should be excluded from web
    * [FELIX-2658] - Deprecate ConfigurationPrinter.PROPERTY_MODES constant
    * [FELIX-2659] - ConfigurationRender.searchMethod must catch problems more broadly

** Improvement
    * [FELIX-2541] - [Licenses Page] Add support for DEPENDENCIES files
    * [FELIX-2614] - Mark unresolved packages
    * [FELIX-2616] - Russian l10n files for Web Console
    * [FELIX-2639] - Improve Security Provider support
    * [FELIX-2652] - Allow attachment providers which do not implement the interface
    * [FELIX-2660] - Prevent Bundle ConfigurationPrinter from being used in the web output
    * [FELIX-2668] - Add localization for the meta-type
    * [FELIX-2674] - Too much error logging after fixing FELIX-2644

** New Feature
    * [FELIX-2638] - Make a single configuration printer output available via http
    * [FELIX-2649] - Support for configuration printers without requiring them to implement the interface

** Task
    * [FELIX-2540] - Ensure inclusion of the DEPENDENCIES file in the build artifacts
    * [FELIX-2684] - Fix legal files and add a changelog.txt


Changes from 3.1.0 to 3.1.2
---------------------------

** Sub-task
    * [FELIX-2412] - Update Web Console legal files

** Bug
    * [FELIX-2287] - Webcosole: showing all resources from a repository doesn't work
    * [FELIX-2288] - Felix SCR API problem/misunderstanding
    * [FELIX-2299] - OBR web console plugin doesn't show some bundles as installed
    * [FELIX-2424] - Internal Server Error requesting /system/console or /system/console/
    * [FELIX-2447] - Clicking on a service link does not display the service details
    * [FELIX-2448] - PermissionAdmin and WireAdmin plugins cause internal server error if service API is missing
    * [FELIX-2470] - No class def found error - Wire Admin (see screenshot)
    * [FELIX-2471] - No class def found error - Permissions Admin (see screenshot)
    * [FELIX-2508] - Web Console does not show all components
    * [FELIX-2535] - Cyrillic characters are not displayed properly.

** Improvement
    * [FELIX-2240] - Web Console should allow user to select http service to bind to
    * [FELIX-2277] - Allow the user to select display language
    * [FELIX-2282] - Optimize Services Printer
    * [FELIX-2391] - Potential dead locking issue in OsgiManager.init
    * [FELIX-2509] - Render more data for component details


Changes from 3.0.0 to 3.1.0
---------------------------

** Bug
    * [FELIX-2243] - Bundle Plugin 'Find All&quot; button generates error with Opera
    * [FELIX-2244] - Bundles Printer fails when imports contains range.
    * [FELIX-2256] - Some small visual defects in the WebConsole
    * [FELIX-2257] - Bundle sort order is not stored in a cookie anymore
    * [FELIX-2260] - Potential NullPointerException in ServicesServlet.writeJSON()
    * [FELIX-2261] - On the Servlets page the list of using bundles is not displayed
    * [FELIX-2263] - OsgiManager servlet should commit response
    * [FELIX-2272] - SCR plugin shows misleading message
    * [FELIX-2274] - 404 when plugin is missing
    * [FELIX-2285] - Bundles Plugin doesn't render the bundles name in IE
    * [FELIX-2286] - Various rendering issues with IE
    * [FELIX-2338] - Problem in the Configuration Render
    * [FELIX-2390] - WebConsole Config Manager problem

** Improvement
    * [FELIX-1141] - Provide feedback for operations
    * [FELIX-2207] - License plugin should support Bundle-License manifest header
    * [FELIX-2245] - Log Plugin - level sorting should be by level
    * [FELIX-2246] - Lazy initialization of plugins
    * [FELIX-2250] - Security Policy configuration printer
    * [FELIX-2251] - Wire Admin configuration printer
    * [FELIX-2253] - Display progress indiciator on configuration status page
    * [FELIX-2259] - ServicesServlet should use BundleContext.getAllServiceReferences instead of getServiceReferences
    * [FELIX-2267] - Improved locale detection
    * [FELIX-2284] - Add common utility method for converting object (array) to string
    * [FELIX-2291] - Show available number of processors on the System Information page

** New Feature
    * [FELIX-1764] - Add support for pluggable access control


Changes from 2.0.6 to 3.0.0
---------------------------

** Bug
    * [FELIX-1992] - Change the use of the &#xA7; character as a separator in the BundleRepositoryRender class
    * [FELIX-2005] - Configuration done using &quot;org.apache.felix.webconsole.internal.servlet.OsgiManager&quot; PID is not used by WebConsole
    * [FELIX-2007] - JavaScript error on bundle page
    * [FELIX-2009] - Reconfiguring the web console location fails
    * [FELIX-2022] - [Branding] webconsole.product.image not treated correctly when referencing http resource
    * [FELIX-2023] - [Branding] webconsole.product.name is not used in HTML page title and header tags
    * [FELIX-2029] - Support for &quot;default&quot; locale does not work
    * [FELIX-2034] - WebConsole fails to register if Http Service is registered after Web Console start
    * [FELIX-2086] - Use a different symbolic name for the bare web console bundle
    * [FELIX-2105] - Make Web Console compatible with OSGi/Minimum-1.1 EE
    * [FELIX-2118] - IE7 does not properly load license files into &lt;pre&gt; element
    * [FELIX-2119] - Bundle update fails, if OBR is not installed
    * [FELIX-2120] - OBR plugin should hide the repository table, if OBR service is not available
    * [FELIX-2122] - Possible NullPointerException reporting failure to instantiate a plugin
    * [FELIX-2123] - Latest commit to ConfigurationRender is not OSGi/Minumum-1.0 compatible
    * [FELIX-2124] - remove internal usage of deprecated Action interface
    * [FELIX-2142] - The Config Manager doesn't show configurations which values are pritive arrays
    * [FELIX-2147] - ConfigurationPrinter services not unregistered on destroy
    * [FELIX-2149] - Configuration Status tabs are not properly left aligned
    * [FELIX-2157] - Login dialog delay
    * [FELIX-2183] - Global AJAX error handler can be improved
    * [FELIX-2188] - Layout problems with old pluggins
    * [FELIX-2198] - ConfigManager plugin logs NullPointerException if ConfigurationAdmin Service is not availble
    * [FELIX-2204] - Localization causes a problem in WebConsole configuration
    * [FELIX-2206] - Localization causes a problem in Configuration Printers
    * [FELIX-2214] - Event plugin - template &amp; localization files must be UTF-8.
    * [FELIX-2216] - Web console needs to be able to use service bundles like obr installed after it
    * [FELIX-2219] - Showing bundle details of an uninstalled bundles reports &quot;Internal Server Error&quot;
    * [FELIX-2235] - Deployment plugin fails with internal server error

** Improvement
    * [FELIX-567] - Search for exported/imported packages
    * [FELIX-569] - Improve Configuration Page
    * [FELIX-957] - Migrate Bundle Repository Page to JQuery
    * [FELIX-1051] - Localize the web console
    * [FELIX-1910] - Normal URLs instead of Javascript links in Licenses screen
    * [FELIX-1956] - Collect duplicate &amp; reusable code in WebConsoleUtil
    * [FELIX-1958] - Branding L&amp;F issues 
    * [FELIX-1993] - Enhance configuration printer support
    * [FELIX-1996] - Console should warn when config is bound to a different bundle
    * [FELIX-2017] - Potential NullPointerException when running Web Console in Equinox
    * [FELIX-2099] - Cleanup logging
    * [FELIX-2125] - Localization of the bundle headers &amp; bundle name
    * [FELIX-2146] - Tab sorting and access of Configuration Status page is unstable
    * [FELIX-2148] - Support selection of default ConfigurationPrinter to display by URL
    * [FELIX-2158] - Localization of plugin titles
    * [FELIX-2162] - The bundle repository page can't scale
    * [FELIX-2167] - Simplify UpdateHelper.updateFromBundleLocation method
    * [FELIX-2171] - The OBR page should be able to display detailed information about a bundle
    * [FELIX-2189] - Shell Plugin Should Only be Available if shell is available
    * [FELIX-2199] - Extract Configuration Printers as top-level classes.
    * [FELIX-2203] - provide localization of plugin titles
    * [FELIX-2218] - webconsole dialog font size
    * [FELIX-2226] - Support direct details view of a resource by symbolic name and version
    * [FELIX-2227] - Request to OBR plugin should just act as if list=a parameter is set
    * [FELIX-2228] - Encoding issues with search queries in the OBR plugin
    * [FELIX-2229] - Provide German Translation for the Web Console
    * [FELIX-2238] - Bring back icons for backwards compatibility

** New Feature
    * [FELIX-1441] - Search manifest entries of bundles
    * [FELIX-1959] - Move towards unified L&amp;F and extended branding support

** Task
    * [FELIX-1988] - Integrate jQuery UI integration into the Web Console Trunk
    * [FELIX-2098] - Removed unused AssemblyListRender
    * [FELIX-2165] - Remove deprecated Action interface
    * [FELIX-2217] - Web Console OBR plugin should work with old OBR and new bundlerepository API
    * [FELIX-2220] - Use Manifest Header parser from new utils bundle


Changes from 2.0.4 to 2.0.6
---------------------------

** Bug
    * [FELIX-1961] - NPE when invoking install/update panel
    * [FELIX-1983] - WebConsole HttpContext should flush response after setting response status

** Improvement
    * [FELIX-1976] - Define Web Console build without embedded libraries
    * [FELIX-1977] - Improve message if a plugin cannot be installed

** New Feature
    * [FELIX-1957] - Make Web Console compatible with OSGi/Minimum-1.0 EE


Changes from 2.0.2 to 2.0.4
---------------------------

** Bug
    * [FELIX-1800] - Bound configurations for which there exists no bundle cannot be edited
    * [FELIX-1912] - Bundles without categories are never displayed in the bundle repository list
    * [FELIX-1930] - Clicking action on bundles detail page shows full bundle list while URL stays on bundles/&lt;id&gt;

** Improvement
    * [FELIX-1894] - Show more fragment information in bundle details
    * [FELIX-1895] - Show configuration property names in configuration forms
    * [FELIX-1916] - Rename &quot;Location&quot; label to &quot;Bundle Location&quot; in the bundle details display
    * [FELIX-1931] - Keep sort order of bundle list across page reloads (eg. in a cookie)

** New Feature
    * [FELIX-1808] - Support unbinding configurations through the Web Console
    * [FELIX-1884] - WebConsole should have a Services plugin


Changes from 2.0.0 to 2.0.2
---------------------------

** Bug
    * [FELIX-1370] - Sometimes the configuration for org.apache.felix.webconsole.internal.servlet.OsgiManager is ignored
    * [FELIX-1674] - typo in scr and webconsole - &quot;unsatisifed&quot;


Changes from 1.2.10 to 2.0.0
----------------------------

** Sub-task
    * [FELIX-1014] - Hardcoded list of webconsole plugins in OSGiManager
    * [FELIX-1015] - Hardcoded HTML Header/Footer in AbstractWebConsolePlugin
    * [FELIX-1043] - Support WebConsole plugins without requiring extending the AbstractWebConsolePlugin
    * [FELIX-1211] - How to provide resources like CSS or JavaScript files for plugins
    * [FELIX-1281] - Provide official constants of web console request attributes
    * [FELIX-1599] - Validate TabWorld license


** Bug
    * [FELIX-1020] - Footer redered before content in bundle plugin
    * [FELIX-1160] - WebConsole Manifest.MF should specify required version for Servlet API (2.4)
    * [FELIX-1164] - Updating a configuration containing a property configured with unbound array size
    * [FELIX-1224] - Component display depends on ManagedService[Factory] instances to be registered for components
    * [FELIX-1230] - Configuration Page depends on ManagedService[Factory] instances to be registered for components
    * [FELIX-1270] - Displaying the bundle detail view resolves a bundle
    * [FELIX-1275] - On the Bundles page, when bundle details are displayed inline, the links to imported and importing bundles are invalid.
    * [FELIX-1389] - Main div is not closed
    * [FELIX-1415] - &quot;Reload&quot; button in webconsole bundles list doesn't work
    * [FELIX-1460] - Can't view installed but unresolved bundle details page
    * [FELIX-1622] - NullPointerException
    * [FELIX-1623] - Configuration status tabs not correctly rendered in FireFox 3.5
    * [FELIX-1630] - Make WebConsole more independent
    * [FELIX-1632] - Remove reference to KXml from NOTICE and LICENSE and update OSGi copyright years
    * [FELIX-1636] - Html footer and header are always added to the response for a servlet plugin

** Improvement
    * [FELIX-1171] - Enhance Configuration Status Page
    * [FELIX-1191] - Add logging to OBR support plugin
    * [FELIX-1215] - Provide hyperlinks when referring to bundles
    * [FELIX-1217] - Move install/update to separate page
    * [FELIX-1221] - Display the alias ID created by Karaf Features when showing service details
    * [FELIX-1282] - Cleanup bundle: do not export SCR API, only embedd header parser
    * [FELIX-1283] - Order page titles in top navigation ignoring case
    * [FELIX-1569] - Remove deprecated Render interface
    * [FELIX-1637] - Support additional CSS references provided by plugins

** New Feature
    * [FELIX-1644] - Reintroduce button to update a single bundle

** Task
    * [FELIX-1013] - Improve console extensibility
    * [FELIX-1607] - Enhance the Web Console Event Plugin


Changes from 1.2.8 to 1.2.10
----------------------------

** Bug
    * [FELIX-1003] - Saving Apache Felix OSGI Management Console on Safari cause Error 404
    * [FELIX-1028] - NPE in configuration view when running webconsole with Equinox
    * [FELIX-1048] - Handle fragment bundles differently than &quot;normal&quot; bundles
    * [FELIX-1061] - [PATCH] webconsole silently ignores bundles which have no Bundle-SymbolicName header

** Improvement
    * [FELIX-1042] - [PATCH] Add log service to web console
    * [FELIX-1049] - Display symbolic name and version in bundle list
    * [FELIX-1050] - Display complete manifest entry
    * [FELIX-1139] - Remove fixed width of layout
    * [FELIX-1143] - Upgrade to Felix Parent POM 1.2.0


Changes from 1.2.2 to 1.2.8
---------------------------

** Bug
    * [FELIX-871] - Bundle Repository page displays NullPointerException if no RepositoryAdmin service is available
    * [FELIX-873] - Server Stop should be Framework stop and does not work correctly
    * [FELIX-874] - Bundle startlevel of new bundle cannot be set from the bundle installation form
    * [FELIX-885] - Saving a factory configuraiton instance creates a new instance instead of updating the old instance
    * [FELIX-913] - IllegalStateException thrown on startup due to OsgiManager trying to unregister a not yet registered resource
    * [FELIX-916] - Web Console does not start if the org.osgi.service.log package is missing
    * [FELIX-918] - Relative redirect on config page does not work in WebSphere
    * [FELIX-975] - Several UI Problems with IE

** Improvement
    * [FELIX-564] - Allow changing the sort order in the bundle list
    * [FELIX-858] - Use new layout from event plugin in bundle plugin
    * [FELIX-863] - Merge license and NOTICE information of OBR bundle embedded in web console with the main license and NOTICE files
    * [FELIX-875] - Support updating the system bundle
    * [FELIX-882] - Use Logger to log messages in the OsgiManager instead of the servlet context log
    * [FELIX-888] - JSON information and actions for a bundle should be possible with symbolic name
    * [FELIX-904] - Dependencies should be included as jars and not as classes
    * [FELIX-919] - Use new table layout for the components list
    * [FELIX-933] - Config Manager Plugin should support displaying a form even if no configuration is stored
    * [FELIX-955] - Cleanup Bundle Repository Page
    * [FELIX-956] - Enhance log output in case of failed resource resolution

** New Feature
    * [FELIX-878] - Allow to get configurations directly in json format


Changes from 1.2.0 to 1.2.2
---------------------------

** Bug
    * [FELIX-738] - First access to &quot;Bundles&quot; web console tab takes a long time if the server has no internet access 
    * [FELIX-752] - webconsole 1.2.0 seems to depend on SCR
    * [FELIX-767] - NOTICE file should list OSGi under &quot;includes&quot; and &quot;uses&quot;
    * [FELIX-774] - Checkboxes do not work in configuration admin
    * [FELIX-780] - ArrayIndexOutOfBoundsException in webconsole
    * [FELIX-802] - Bundle and other displays incomplete and show JavaScript error(s)
    * [FELIX-856] - Web Console fails to start if HttpService is only available after the WebConsole bundle start
    * [FELIX-859] - Event display shows double lines between event properties for some events

** Improvement
    * [FELIX-757] - Add status message about bundle
    * [FELIX-793] - Improve update and install through web console
    * [FELIX-857] - Do not rely on Declarative Services for plugins of the Web Console itself

** New Feature
    * [FELIX-781] - Add basic thread dump to Configuration Status page
    * [FELIX-790] - Add console plugin to display OSGi events


Changes from 1.0.0 to 1.2.0
---------------------------

** Bug
    * [FELIX-563] - Add support to access the Felix ShellService
    * [FELIX-583] - org.apache.felix.webconsole.internal.compendium.ConfigManager.listConfigurations(): ManagedServiceFactory instances are listed twice: with pid and factoryPid
    * [FELIX-584] - org.apache.felix.webconsole.internal.compendium.AjaxConfigManagerAction.applyConfiguration(): &quot;create&quot; action is not handled properly
    * [FELIX-585] - org.apache.felix.webconsole.internal.compendium.ConfigManager.listConfigurations(): Configuration instances for ManagedServiceFactoy instances cause IllegalArgumentException
    * [FELIX-586] - org.apache.felix.webconsole.internal.compendium.BaseConfigManager.getAttributeDefinitionMap(): implementation does not properly handle Configuration instances of a ManagedServiceFactory
    * [FELIX-587] - org.apache.felix.webconsole.internal.compendium.AjaxConfigManagerAction.configForm(): Configuration instance for a ManagedServiceFactory will cause Exception
    * [FELIX-592] - Console does not work properly in Internet Explorer
    * [FELIX-600] - Insert Delay before refreshing packages after install/update
    * [FELIX-662] - ConfigManager should check for empty value before converting into a specific type

** Improvement
    * [FELIX-566] - More RESTful management console URLs
    * [FELIX-574] - Replace Action and Render service interfaces by the Servlet interface
    * [FELIX-614] - Change behaviour of little arrow on single bundle/component display
    * [FELIX-671] - Web Console OBR description
    * [FELIX-742] - Order configurations alphabetically
    * [FELIX-743] - Support configuration filtering
    * [FELIX-744] - Support configuration creation from the GET request
    * [FELIX-745] - Mark optional imports as such
    * [FELIX-746] - Display Bundle Doc URL as a link
    * [FELIX-747] - Enable bundle installation through OBR again

** New Feature
    * [FELIX-604] - Add License/Notice page
    * [FELIX-691] - Add support for the deployment admin


Initial Release 1.0.0
---------------------
** Improvement
    * [FELIX-570] - Add flag to InstallAction asking for PackageAdmin.refreshPackages after package update

** Task
    * [FELIX-562] - Move OSGi Console to Apache Felix
