This file contains all changes done on the 1.4 version.

Release Notes - Wicket - Version 1.4.19

** Bug
    * [WICKET-3915] - Inconsistent behavior id under special circumstances 
    * [WICKET-3929] - PropertyModel/PropertyResolver breaks when using a List as the root object
    * [WICKET-3949] - ClassCastException: IOException cannot be cast to NotSerializableException
    * [WICKET-3952] - NPE while opening hangman in wicket-examples
    * [WICKET-3962] - the wrong option in select components is rendered (Combination of reusing panels and defaultFormProcessing==false)
    * [WICKET-3993] - Wrong ASCII Key Code for END Key. AutoComplete not working properly
    * [WICKET-3994] - MockWebApplication double invocation of cycle.detach()
    * [WICKET-3996] - Slovenian (sl) properties file is corrupted in 1.4.18
    * [WICKET-3998] - CreditCardValidator returns incorrect cardId for VISA
    * [WICKET-3999] - Error in the save function of CookieValuePersister
    * [WICKET-4032] - ComponentStringResourceLoader must not include the index of repeater items in resource lookup but still resolve properties to them
    * [WICKET-4080] - domready events not always fired in IE
    * [WICKET-4111] - addDomReadyEvent broken for IE

** Improvement
    * [WICKET-3145] - MockWebApplication does not allow to manually clear cookiesOfThisSession
    * [WICKET-3888] - ResourceReference in 1.4 should optionally behave like PackageResourceReference in 1.5 and use the Session's locale and style
    * [WICKET-3937] - Improve AJAX FunctionsExecutor robustness with try/catch

** New Feature
    * [WICKET-3901] - Provide a hook in form processing after models have been updated to validate model objects with values in place
    * [WICKET-3966] - Create Fragment.getAssociatedMarkupId


Release Notes - Wicket - Version 1.4.18
                
** Bug
    * WICKET-3023 - Ajax does not work with XHTML
    * WICKET-3328 - Selection remains after removing collapsed node in the tree.
    * WICKET-3449 - Tree doesn't update correctly
    * WICKET-3471 - WicketTester checkUsability is called before the request has started
    * WICKET-3520 - SHOW_NO_EXCEPTION_PAGE responding with HTTP status 500 is overwritten by redirect
    * WICKET-3563 - Interaction betwen IAjaxRegionMarkupIdProvider, renderPlaceholderTag and visibility
    * WICKET-3575 - ResourceLink uses the wrong PageMap, if used as a PopupLink
    * WICKET-3586 - EnclosureContainer should honor relevantChild.determineVisibility
    * WICKET-3587 - InspectorPage's RequestPage doesn't properly print the collected data
    * WICKET-3605 - Ajax header-contribution omits IE conditional comments
    * WICKET-3606 - wicket-ajax.js replaceOuterhtmlIE() fails when the page title has to be updated with Ajax
    * WICKET-3615 - ModalWindow does not work in Opera 11.10 and MSIE 6
    * WICKET-3616 - Wicket Tester behavior changed - Form Tester Ajax Submit clears already filled in TextField 
    * WICKET-3650 - parentFolderPlaceholder default value in Settings implementation is inconsistent with the javadoc
    * WICKET-3656 - Maven quickstart gives warnings about missing plugin versions
    * WICKET-3666 - IValidationError should extend IClusterable
    * WICKET-3668 - Session.getPageMaps is not thread safe.
    * WICKET-3671 - ListItem partakes in stringresource key generation, resulting in formName.repeaterName.0.fieldName like keys.
    * WICKET-3711 - FormTester doesn't treat SubmitLink and AjaxSubmitLink correctly
    * WICKET-3715 - FileUpload writeToTempFile() method throws NPE for sessionless requests
    * WICKET-3727 - MultiFileUploadField internationalisation does not work
    * WICKET-3739 - wicket-datetime datepicker fails to display calendar with js error in calendar.js:3225 in IE8
    * WICKET-3766 - Strings#escapeMarkup() creates invalid XML for control characters
    * WICKET-3774 - html file are not encoding to utf-8
    * WICKET-3779 - Session MetaData changes aren't synchronized and don't call dirty()
    * WICKET-3780 - Warning text outdated in InheritedMarkupMarkupLoader
    * WICKET-3820 - New Chrome merges text in replaceOuterHtml, breaking wicket-ajax
    * WICKET-3840 - AjaxSubmitLink does not respect its getForm()
    * WICKET-3842 - The wicket:enclosure attribute doesn't work properly
    * WICKET-3843 - NPE with wicket:enclosure attribute and hierarchy mismatch
    * WICKET-3868 - Feedback message should be handled the same way everywhere.
    * WICKET-3872 - MarkupContainer.removeAll() does not detach models recursively
    * WICKET-3887 - Problems concerning IE9 with &quot;ActiveX Filtering&quot; enabled
    * WICKET-3921 - No HTTP response cache headers are set in Wicket Ajax redirects
            
** Improvement
    * WICKET-3446 - Upgrade to new Guice 3.0
    * WICKET-3550 - Make Select component generic
    * WICKET-3580 - Remove ISortStateLocator.setSortState() method.
    * WICKET-3585 - Let AbstractResourceStreamWriter implement empty getContentType()
    * WICKET-3607 - make ModalWindow CSS contibution more configurable
    * WICKET-3630 - Patch to make ModalWindow's WindowClosedBehavior extensible
    * WICKET-3709 - SignInPanel shouldn't hard code input field size
    * WICKET-3710 - org/ apache/wicket/markup/html/tree/AbstractTree.java treeNodesRemoved loops forever
    * WICKET-3856 - Relax wicket:enclosure warning suggesting the usage of EnclosureContainer
    * WICKET-3873 - Allow validators to detach by mixing in IDetachable
    * WICKET-3895 - Ignore the exception when closing a connection used to get the resource last modification time
    * WICKET-3903 - Split AutoLabelResolver into wicket:for and wicket:label
    * WICKET-3904 - Error Message Typo - should be <head> element not header
    
** New Feature
    * WICKET-1469 - New Wicket tag 'wicket:for'
    * WICKET-3738 - Provide an API for retrieving form component label when one is not set via setLabel(IModel)
    * WICKET-3857 - Allow validators access to component's model


Release Notes - Wicket - Version 1.4.17

** Sub-task
    * [WICKET-3488] - Form can't be replaced when submitted

** Bug
    * [WICKET-3466] - AJAX with prototype explample not working at IE
    * [WICKET-3467] - Upload example failing at localhost on IE
    * [WICKET-3469] - Referrer Leaking with ExternalLink
    * [WICKET-3473] - Inline Javascript evaluated is executed before head contributions are loaded
    * [WICKET-3477] - Exception when setting session default timezone with GatherExtendedBrowserInfo
    * [WICKET-3479] - Interface TestPanelSource isn't named correctly
    * [WICKET-3485] - Link tries to construct the URL when the link is disabled
    * [WICKET-3487] - RequestCycle.steps() creates a session on abort even if none exists
    * [WICKET-3490] - HybridUrlEncoding Strategy throws uncaught NumberFormatException if Integer value space is violated
    * [WICKET-3498] - Entering huge strings in TextFields causes IllegalStateExceptions not caught by the Framework
    * [WICKET-3500] - Method AbstractMarkupParser.removeComment() causes an endless loop
    * [WICKET-3503] - LazyInitProxyFactory using Class.forName(clazz) rather than Thread.currentThread().getContextClassLoader().loadClass(type)
    * [WICKET-3507] - Form Code causes Error in ValidatorFilter
    * [WICKET-3519] - DefaultJavascriptCompressor broken jquery v1.5.1 minified file
    * [WICKET-3528] - Javadoc typo in PropertyModel
    * [WICKET-3548] - Wrong exception type when readResolve fails.

** Improvement
    * [WICKET-3464] - Greek (el) Application.properties 
    * [WICKET-3553] - Reset the busy flag in Wicket.Channel if the execution of the callback fails for some reason
    * [WICKET-3558] - Expose active requests via JMX

** New Feature
    * [WICKET-3422] - Simplified visibility control of Enclosures in Ajax requests

** Task
    * [WICKET-3545] - Slovak version of Application_sk.properties

Release Notes - Wicket - Version 1.4.16

** Bug
    * [WICKET-1886] - WicketTester Cookie handling
    * [WICKET-1973] - Messages lost upon session failover with redirect_to_buffer
    * [WICKET-2056] - Modal CSS Overflow Auto Bug
    * [WICKET-3109] - Using PopupSettings creates page maps early
    * [WICKET-3135] - Improve JavaScriptPackageResource#toString() to show filename instead of default Object#toString()
    * [WICKET-3277] - CLONE -AbstractMarkupParser doesn't remove Comments correctly
    * [WICKET-3302] - Endless recursion if LoadableDetachableModel.load throws exception
    * [WICKET-3306] - OrderByBoder MArkup problem
    * [WICKET-3307] - UploadProgressbar doesn't work when nested in ModalWindow (using IE 8.0.7600)
    * [WICKET-3309] - unable to add nodes to an empty rootless Tree (e.g. LinkTree)
    * [WICKET-3315] - PackagedTextTemplate should set lastModifiedTime
    * [WICKET-3318] - AjaxLazyLoadPanel doesn't render correctly after form submit
    * [WICKET-3319] - AjaxEditableMultilineLabel generates invalid HTML
    * [WICKET-3321] -  Ajax submit  link does not show busy indicator under IE
    * [WICKET-3323] - TreeTable should call attachUpdate javascript on domready event.
    * [WICKET-3346] - Wicket examples still show a Graduated logo
    * [WICKET-3358] - Wicket-Guice integration fails - can't find application attached to current thread
    * [WICKET-3361] - Validation Error on AjaxEditableLabel causes ajax calls in loop on Chrome Browser
    * [WICKET-3383] - Strange writeObjectMethodCache in SerializableChecker
    * [WICKET-3398] - EnclosureContainer: configure() should be called on the child component before calling isVisible on it
    * [WICKET-3403] - Cannot convert 'this.content' to object in Opera
    * [WICKET-3413] - FLAG_INHERITABLE_MODEL and default model change
    * [WICKET-3416] - CheckGroupSelector does not inherit "disabled" property from parent form
    * [WICKET-3418] - Incorrect setting of AjaxSubmitLink's request parameter in BaseWicketTester.submitAjaxFormSubmitBehavior
    * [WICKET-3436] - OnChangeAjaxBehavior can render javascript before wicket-ajax.js is loaded
    * [WICKET-3437] - onselect script is not called for AutoCompleteTextField
    * [WICKET-3438] - 2xStatelessForm growing url when there is error validation 
    * [WICKET-3444] - ChangeHandler fires in IE on POS1 and END
    * [WICKET-3455] - onremove() in RefreshingView.onPopulate

** Improvement
    * [WICKET-1802] - Propertyresolver could be more informative
    * [WICKET-3275] - Log a warn or throw an exception when an AjaxFormComponentUpdatingBehavior is added to an choice component
    * [WICKET-3351] - Add class for span with text in wicket-extensions\treetable
    * [WICKET-3354] - Improve SerializableChecker message
    * [WICKET-3391] - Extensibility of the Wizard component
    * [WICKET-3414] - Add break after finding Method in AutoComponentResolver invokeSetter
    * [WICKET-3457] - Add methods to IBehavior to listen for configuration events


Release Notes - Wicket - Version 1.4.15

** Bug
    * [WICKET-1894] - AjaxFallbackButton: inconsistent submit order
    * [WICKET-3136] - JVM 1.6 crash caused by WicketObjectOutputStream, ClassStreamHandler, and Page.writePageObject
    * [WICKET-3196] - UrlValidator failes to validate urls that containt multiple dots in path
    * [WICKET-3202] - Form with UploadProgressBar and AjaxButton doesn't submit
    * [WICKET-3215] - AutoCompleteTextField does not work in an iframe under IE 6, 7 or 8
    * [WICKET-3229] - Removing Child in IVisitor affects traversal
    * [WICKET-3244] - libxml2 splits large CData section. This breaks the processEvaluate js
    * [WICKET-3253] - NPE with nested property models
    * [WICKET-3255] - css/js files added as header contribution not added via ajax request
    * [WICKET-3259] - Filter path is occasionally null when forwarding a request

** Improvement
    * [WICKET-3154] - test for undefined in the same manner throughtout the code.
    * [WICKET-3184] - Make method getContentId of ModalWindow static
    * [WICKET-3226] - NavigationToolbar has table instance variable but so does base-class AbstractToolbar
    * [WICKET-3235] - AutoCompleteBehavior overwrites base class AbstractAutoCompleteBehavior settings variable
    * [WICKET-3254] - Add file name to the exception in case of an error during temp file creation for upload
    * [WICKET-3264] - MetaDataEntry set method traverses metaData even after key is found and data set/cleared
    * [WICKET-3265] - Component data_remove returns Object which is never used

** Wish
    * [WICKET-3237] - Exception when calling setOutputMarkupId/PlaceholderTag on wicket:container


Release Notes - Wicket - Version 1.4.14

** Bug
    * [WICKET-3134] - Commons logging must die
    * [WICKET-3140] - Missing xml headers in localized SignIn pages
    * [WICKET-3141] - On multipart form, sendRedirect() with PageParameters are not working
    * [WICKET-3160] - Session causing memory leak after WICKET-3108
    * [WICKET-3164] - executeAjaxEvent in WicketTester works although Component is not enabled
    * [WICKET-3166] - isVisibleInHierarchy() possibly unnecessarily checks children whose parents are invisible?
    * [WICKET-3171] - Form components that become visible during submit always set their model to null
    * [WICKET-3173] - Fix for WICKET-2903 causes NPE when HttpsConfig is intentionally null
    * [WICKET-3174] - SmartLinkLabel failing to process email with +
    * [WICKET-3175] - Radio uuid is calculated wrongly for heavy instalations.
    * [WICKET-3181] - UploadProgressBar does not show up on nested forms

** Improvement
    * [WICKET-1735] - Remove hard-coded text from the markup of PagingNavigator
    * [WICKET-3152] - Wicket tester should allow testing for enabled/disabled status and for fields being required.
    * [WICKET-3169] - Parametrize IFilterStateLocator
    * [WICKET-3170] - ModalWindow moved event (besides resize)
    * [WICKET-3179] - Default Component Behaviors
    * [WICKET-3180] - DropDownChoice should use IAjaxIndicatorAware like AbstractDefaultAjaxBehavior.findIndicatorId()

** New Feature
    * [WICKET-3144] - Extra client-side scripting before closing modalwindow


Release Notes - Wicket - Version 1.4.13

** Sub-task
    * [WICKET-3069] - java.rmi not allowed on GAE
    * [WICKET-3112] - Fix of issue 2886 breaks all individual implementations of any AbstractTree

** Bug
    * [WICKET-2888] - Nullpointer when inserting [i.e. moving] a node in a TreeTable (AbstactTree, treeNodesInserted)
    * [WICKET-2912] - IE 8 gets 404 error after continueToOriginalDestination() when app is at root context
    * [WICKET-3052] - HybridUrlCodingStrategy probably uses wrong url encoding
    * [WICKET-3057] - NPE when deleting a TreeNode with visible children
    * [WICKET-3061] - Whole page returns 404 when resource cannot be found
    * [WICKET-3072] - Deleting only child of collapsed tree node doesn't update the node
    * [WICKET-3074] - CreditCardValidator throws NumberFormatException on non-numeric characters.
    * [WICKET-3075] - AJAX file upload fails in IE8 due to Wicket.Ajax.handleMultipart() sniffing wicket:body tags as an HTML body element when running Wicket in development mode
    * [WICKET-3076] - UrlUtils.isRelative returns false if URL parameter contains an absolute URL
    * [WICKET-3083] - Broken AbstarctCalendar dependency
    * [WICKET-3084] - CharSetUtil.getEncoding fails with an IndexOutOfBoundsException
    * [WICKET-3087] - Form inside ModalWindow causes 'Submit Button not visible' exception in parent page's form
    * [WICKET-3095] - Adding AjaxFormSubmitBehavior to Form leads to "Error: too much recursion" JS Error
    * [WICKET-3098] - AjaxEventBehavior#onEvent is invoked on disabled behavior
    * [WICKET-3102] - WicketTester does not handle startPage(ITestPageSource) that contains a redirect/setResponsePage correctly
    * [WICKET-3106] - Security: Possible Redirection to foreign Page by using BrowserInfoPage's PageParameter
    * [WICKET-3108] - Problems with page maps stored in session
    * [WICKET-3116] - class cast exception
    * [WICKET-3119] - Localizer cache does not include style in cache key when no component is given
    * [WICKET-3120] - AbstractHttpSessionStore.bind throws null pointer exception
    * [WICKET-3127] - Adding node to a collapsed tree node should not cause it to expand

** Improvement
    * [WICKET-1779] - Palette component - make image URLs part of CSS
    * [WICKET-1936] - Client-Side Image Map
    * [WICKET-2776] - Enhancing RadioChoice input items with individual title and css class attributes
    * [WICKET-2937] - AbstractPropertyModel getObjectClass don't consider nested IObjectClassAwareModel targets
    * [WICKET-3055] - Application fails to start when disk access is denied
    * [WICKET-3056] - Upgrade pom reference for joda-time from 1.6 to 1.6.2
    * [WICKET-3071] - Upgrade maven plugins and non-essential dependencies to newest version
    * [WICKET-3089] - onBeforeRender in NextButton should not be final
    * [WICKET-3090] - Make SecondLevelCacheSessionStore and its SecondLevelCachePageMap reusable
    * [WICKET-3128] - FormComponentLabel should open open-close tags like Label does

** New Feature
    * [WICKET-3082] - Introduce IComponentOnInitializeListener for cross-cutting concerns


Release Notes - Wicket - Version 1.4.12

** Sub-task
    * [WICKET-3037] - InnerFeedbackTest test fails due locale issue

** Bug
    * [WICKET-1743] - WicketTester fires onSubmit for first form button prior to firing requested ajax event
    * [WICKET-3032] - WebApplication#mountBookmarkablePage with unicode path not works.
    * [WICKET-3033] - Stack Overflow in getBeanDefinition()'s of SpringBeanLocator and AnnotProxyFieldValueFactory
    * [WICKET-3040] - Ajax form submit fails in Wicket 1.4.11/Firefox3.6
    * [WICKET-3043] - Ajax support broken under Firefox 3.6.x and Wicket 1.4.11

** Improvement
    * [WICKET-2922] - AutoCompleteTextField should allow the generics specification for the getChoices iterator and the type of the model

** Task
    * [WICKET-3041] - Relative link in JavaScript


Release Notes - Wicket - Version 1.4.11

** Sub-task
    * [WICKET-2625] - WICKET-2478 correction are break

** Bug
    * [WICKET-1094] - Values over-escaped by FormTester
    * [WICKET-1448] - SubmitLink bypass jquery submit eventhandler
    * [WICKET-1733] - WicketTester doesn't include form submitting component id in form submissions
    * [WICKET-1887] - 404 error page customize - with specified url-pattern (not /*)
    * [WICKET-1928] - Enter key submits form in AjaxEditableMultiLineLabel on Safari
    * [WICKET-1985] - AbstractTree breaks on multiple tree model events in the same request
    * [WICKET-2010] - InspectorPage doesn't show component tree
    * [WICKET-2254] - ModalWindow size may exceed browser viewport making it impossible to close
    * [WICKET-2262] - The starting of the ajax indicator don't respect AbstractDefaultAjaxBehavior preconditionScript
    * [WICKET-2275] - HybridUrlCodingStrategy does not support parameters with a "."
    * [WICKET-2279] - Losing focus on Autocomplete field if DropDownChoice is updated using Ajax.
    * [WICKET-2353] - CLONE -<wicket:enclosure> bug: setObject(null) called for excplicitly invisible fields in a non-visible enclosure
    * [WICKET-2401] - AJAX indicator turns off when calls overlap
    * [WICKET-2712] - Wrong relative URL's when using Java EE 6 container with ERROR dispatching
    * [WICKET-2739] - Throttling breaks AjaxFormSubmitBehavior's precondition check
    * [WICKET-2765] - MarkupException on unclosed <col> tag
    * [WICKET-2783] - FormTester.submit does not work with AjaxButtons
    * [WICKET-2793] - Incorrect decode parameters in AbstractRequestTargetUrlCodingStrategy#decodeParameters
    * [WICKET-2794] - Not all exceptions are properly handled by the WicketFilter -> results in empty response document with unset status code -> seen as HTTP_OK by client
    * [WICKET-2807] - AjaxSubmitLink not calling the onsubmit event handler
    * [WICKET-2826] - Wicket fails to read html markup from jar after updating and redeploying in jetty
    * [WICKET-2827] - Removed page might revive when push back-button
    * [WICKET-2828] - IndexOutOfBoundsException is thrown in onBeforeRender when tabs is empty.
    * [WICKET-2848] - Rename yahoo-dom-event folder to something else
    * [WICKET-2850] - Wicket DateTimeField / DatePicker creates a memory leak on the browser when rerenderd using ajax requests
    * [WICKET-2851] - Ajax responses do not update DOM correctly on Opera
    * [WICKET-2852] - Palette nested in a ListView results in a NPE when an error feedback is logged when submitting form
    * [WICKET-2854] - 'this.document' is null or not an object after quickly opening and closing a modal window (modal.js)
    * [WICKET-2863] - MockHttpServletResponse does not save Session cookies (maxAge = -1)
    * [WICKET-2877] - PreCallHandler and PostCallHandler registrations are lost when ;jsessionid is removed in javascript files URL
    * [WICKET-2886] - Tree doesn't update correctly
    * [WICKET-2903] - CLONE -HttpsRequestCycleProcessor causes HttpSession to be created
    * [WICKET-2905] - Select.isSelected fails when Wicket application is using REDIRECT_TO_RENDER render strategy.
    * [WICKET-2931] - Form#getMaxSize - unsupported in the inner forms
    * [WICKET-2933] - Form.MULTIPART_HINT is not cleared correctly with nested forms
    * [WICKET-2941] - DatePicker fail with "firstDate is undefined" when an out of range date is written in the textfield
    * [WICKET-2944] - Application addRenderHeadListener causing error 
    * [WICKET-2957] - Closing ModalWindow makes some form fields unclickable
    * [WICKET-2958] - Success handler not called when redirecting with Ajax
    * [WICKET-2972] - Some RepeaterView examples are not working
    * [WICKET-2974] - IFeedback that is child of IFeedback gets added to the FEEDBACK_LIST too late
    * [WICKET-2977] - AutoComplete onfocus behavior only working on last autocomplete field
    * [WICKET-2999] - Packaged Resource URLs encoded with jsessionid
    * [WICKET-3014] - unable to launch StartExamples from IDEA (eventually other IDE's as well)
    * [WICKET-3018] - CheckGroupSelector ignores disabled-state in Check
    * [WICKET-3025] - DateTextField converter does not honor current locale

** Improvement
    * [WICKET-2964] - Improve the code that uses copy-list-on-iterate pattern 
    * [WICKET-2978] - Usage of SimpleFormComponentLabel in FormInput example
    * [WICKET-3002] - Resource.getResourceStream() javadoc improvements (patch)
    * [WICKET-3019] - Add getPath to MarkupExceptions to aid in locatin affected components

** New Feature
    * [WICKET-206] - Default page map is null, should be set to something more usable

** Wish
    * [WICKET-2967] - org.apache.wicket.util.value.Count: add decrement method


Release Notes - Wicket - Version 1.4.10

** Bug
    * [WICKET-2844] - Make CheckGroupSelector Ajax friendly
    * [WICKET-2881] - Cannot substitute RelativePathPrefixHandler
    * [WICKET-2882] - Dynamically adding component via an IComponentResolver fails within an enclosure for versions after 1.4.1
    * [WICKET-2885] - RequestLogger.SessionData methods aren't public
    * [WICKET-2891] - Typo in IllegalStateException when there are multiple beans of the same type
    * [WICKET-2892] - TextTemplateSharedResourceFactory should use template's content type
    * [WICKET-2895] - run wicket-examples application in 'headless-mode'
    * [WICKET-2897] - Javadoc for AbortWithHttpStatusException class constructor says 'true' when it should say 'false'
    * [WICKET-2900] - "isPrimary" check is not applied to beans in parent contexts
    * [WICKET-2901] - Always the first bean with primary=true is returned, even if there are more than one primary beans
    * [WICKET-2902] - WicketSessionFilter still broken: you can only locate or create sessions in the context of a request cycle
    * [WICKET-2904] - variations don't work when using wicket:link with images
    * [WICKET-2908] - BaseWicketTester should check for visibility in hierarchy when building param map
    * [WICKET-2909] - ListView removeLink method should remove items from list based on item index
    * [WICKET-2917] - WebResponse sets a negative Content-Length when length >2G
    * [WICKET-2946] - Exceptions raised in overridden sessionDestroyed() event (of WebApplication class) are completely swallowed by the session-store classes without even logging anything
    * [WICKET-2951] - Markup for AjaxLazyLoadPanel's is not valid HTML
    * [WICKET-2961] - Adding a component in Component#onInitialize() leads to StackOverflowError
    * [WICKET-2966] - "markupStream" field in MarkupException breaks Exception's Serializable contract.

** Improvement
    * [WICKET-1974] - render_to_buffer does not work for absolute URLs (with patch)
    * [WICKET-2846] - Store Application in InheritableThreadLocal instead of ThreadLocal
    * [WICKET-2866] - Allow chaining with AutoCompleteSettings.setThrottleDelay(int)
    * [WICKET-2878] - BigDecimalConverter improvement
    * [WICKET-2884] - IRequestLogger interface requires that getRequests() method return RequestLogger.RequestData (public inner class)
    * [WICKET-2923] - Make form.getHiddenFieldId public.
    * [WICKET-2952] - Exposes Application DebugSettings related functionality for JMX
    * [WICKET-2954] - Add the ability to assert against BookmarkablePageLink in the same way you can with wicketTester.assertPageLink

** New Feature
    * [WICKET-2890] - Dynamic CSS and JavaScript resources
    * [WICKET-2899] - date picker calendar shown on text field clicked (patch included)
    * [WICKET-2925] - Model.of()
    * [WICKET-2943] - Introduce a good place to initialize components other than the constructor - Component#onInitialize()
    * [WICKET-2955] - Component#onConfigure() - Create a new callback to help manage states such as visibility, enabled, etc

** Test
    * [WICKET-2960] - Test initialization mechanism against one possible implementation using the onbeforerender method

** Wish
    * [WICKET-2950] - remove final from AbstractHttpSessionStore#getSessionId


Release Notes - Wicket - Version 1.4.9

** Bug
    * [WICKET-2741] - non-performant Collections.synchronizedMap() should be replaced with ConcurrentMap
    * [WICKET-2843] - Palette is incompatible with ListMultipleChoice in its use of the model
    * [WICKET-2853] - ListMultipleChoice/CheckBoxMultipleChoice do not retain selected but disabled items
    * [WICKET-2856] - PackageStringResourceLoader.loadStringResource() causes NullPointerException when used in a Class within the root package (i.e. it has no package declaration)
    * [WICKET-2858] - WicketSessionFilter: java.lang.IllegalArgumentException: Argument application can not be null
    * [WICKET-2859] - Wrong package names in Examples
    * [WICKET-2860] - Wrong name for swiss Application.properties
    * [WICKET-2861] - getConvertedInput() returns null and selectedValues.addAll tries adding it
    
** Improvement
    * [WICKET-2790] - wicketTester.executeAjaxEvent method does not check if form is multiPart
    * [WICKET-2840] - Remove final on AbstractRequestTargetUrlCodingStrategy#getMountPath()
    * [WICKET-2846] - Store Application in InheritableThreadLocal instead of ThreadLocal
    * [WICKET-2855] - Constructor of RedirectRequestTarget does not validate URL
    * [WICKET-2869] - RangeValidator should use getMinimum and getMaximum
    * [WICKET-2870] - Fix hungarian translation for Wizard
    * [WICKET-2879] - delegate isVisible in PanelCachingTab 


Release Notes - Wicket - Version 1.4.8

** Bug
    * [WICKET-2075] - Pagemap is locked forever with some Page serialization exceptions
    * [WICKET-2424] - OnChangeAjaxBehavior + DatePicker do not work together
    * [WICKET-2764] - MarkupCache messed up when using MergedMarkup (e.g. for Page markup inheritance) together with IResourceStreams that do NOT also implement IFixedLocationResourceStream
    * [WICKET-2767] - DatePicker Calendar: wrong year format when 4 digits are used (yyyy), e.g. 2010 --> 0010
    * [WICKET-2772] - Generate wicketpath attribute for RadioChoice
    * [WICKET-2779] - Submit a nested form via ajax to upload a file inside modal window does not work on IE.
    * [WICKET-2787] - ValueMap.getAsBoolean(key, defaultValue) always returns false for non-existing keys, instead of the defaultValue
    * [WICKET-2799] - @RequireHttps not switching to https when setting response page to non-bookmarkable page
    * [WICKET-2802] - StringIndexOutOfBoundsException in PortletServletRequestWrapper for some resource requests
    * [WICKET-2806] - Javascript looking for related radio in group is not working if css class is already assigned to radio
    * [WICKET-2822] - Small Bug in JavaDoc for SpringWebApplicationFactory

** Improvement
    * [WICKET-2771] - Please support "isPrimary" for @SpringBean
    * [WICKET-2776] - Enhancing RadioChoice input items with individual title and css class attributes
    * [WICKET-2778] - Set Application ThreadLocal in WicketSessionFilter
    * [WICKET-2796] - Improve error reporting on locked page maps
    * [WICKET-2803] - ListMultipleChoice's Constructors Should Accept IModel<? extends Collection<T>>
    * [WICKET-2813] - IndicatingAjaxButton should have construtors that take a IModel for the button text as does AjaxButton.
    * [WICKET-2817] - ChoiceGroup's Constructor Should Accept IModel<? extends Collection<T>>
    * [WICKET-2821] - More "IModel<? extends Collection<" Fixes
    * [WICKET-2830] - Make BookmarkablePageRequestTargetUrlCodingStrategy#encode non final
    * [WICKET-2831] - ConverterLocator#get(Class<T>) shouldn't be final
    * [WICKET-2837] - Inaccurate AjaxSubmitLink Javadoc

** Wish
    * [WICKET-2847] - Make StringResourceStream non final


Release Notes - Wicket - Version 1.4.7

** Bug
    * [WICKET-2510] - Radio getMarkupId not working correctly
    * [WICKET-2615] - URL mismatch with RENDER_TO_BUFFER when URL rewriting features of container are used
    * [WICKET-2648] - DatePicker javascript uses 4 symbols for year although pattern contains just yy
    * [WICKET-2657] - Multipart forms fails on Chrome during Ajax submit
    * [WICKET-2660] - Wickettester executeAllTimerBehaviors executes stopped behaviors too
    * [WICKET-2663] - Modal Dialog cannot add AjaxLink when UploadWebRequest is in use
    * [WICKET-2688] - Versioned form with FileUploadField will expire page if you submit the form twice.
    * [WICKET-2702] - update PropertyColumn Javadoc
    * [WICKET-2704] - FormComponent.MessageSource.getMessage(String) and getValidatorKeyPrefix()
    * [WICKET-2714] - SharedResourceRequestTarget sets Status 404 when not found, ignoring any 404 settings
    * [WICKET-2715] - AuthenticatedWebSession in wicket-auth-roles does thread-unsafe access to signedIn boolean
    * [WICKET-2717] - bookmarkablepagelink broken on ajaxupdate
    * [WICKET-2718] - RedirectPage does not work in IE
    * [WICKET-2721] - IE does not display ExceptionErrorPage
    * [WICKET-2726] - CLONE -Ajax multipart broken on mounted pages
    * [WICKET-2734] - Form#anyComponentError change in 1.4 breaks validation
    * [WICKET-2738] - setResponsePage doesn't work with MixedParamUrlCodingStrategy
    * [WICKET-2740] - DynamicWizardModel: setActiveStep is called twice
    * [WICKET-2744] - AjaxFormChoiceComponentUpdatingBehavior cannot find the choice
    * [WICKET-2749] - multipart form does not call window.wicketGlobalPreCallHandler
    * [WICKET-2753] - Javascript in Form.registerJavascriptNamespaces() fails in Firefox 3.5.8
    * [WICKET-2757] - MimeType/ContentType detection in ResourceStreamRequestTarget unreliable
    * [WICKET-2759] - libxml2 splits large CData section. this breaks the processing of components

** Improvement
    * [WICKET-2661] - Palette does not allow tracking the AbstractChoices components via Ajax
    * [WICKET-2698] - Page Parameters needs to implement equals
    * [WICKET-2706] - French translations for missing properties
    * [WICKET-2708] - Extend SwitchProtocolRequestTarget so it's possible to customize the redirect url
    * [WICKET-2709] - EmptySrcAttributeCheckFilter should check for src="#"
    * [WICKET-2719] - Extract lazy AbstractListDataProvider out of ListDataProvider.
    * [WICKET-2720] - Panel throws MarkupException without passing MarkupStream
    * [WICKET-2731] - provide hook to enforce fqn's leaking out from shared resources
    * [WICKET-2737] - reduce number of  SpringBeanLocator#getBeanNameOfClass calls.
    * [WICKET-2748] - IE6 sometimes fails when using wicket ajax
    * [WICKET-2750] - Better error handling in modal window setContent() when a repeater is used


Release Notes - Wicket - Version 1.4.6

** Sub-task
    * [WICKET-2678] -  isEnabled called in AjaxRequestTarget for Behaviors even if component is not Visible in hierarchy

** Bug
    * [WICKET-1825] - url-escaping is not undone for requestcodingstrategy
    * [WICKET-2312] - RequestUtils.toAbsolutePath() not output hostname and url-pattern in AJAX
    * [WICKET-2567] - Images and stylesheets leave open file handles
    * [WICKET-2616] - BaseWicketTester chooses a disabled component as the source of an AjaxFormSubmit event
    * [WICKET-2619] - wicket should handle Enums like other primitives when injecting them.
    * [WICKET-2620] - DataTable generates two <thead wicket:id="topToolbars">
    * [WICKET-2624] - MethodGetAndSet.setValue uses wrong source to determine which type to convert to when there's no setter
    * [WICKET-2629] - HttpsRequestCycleProcessor causes HttpSession to be created
    * [WICKET-2630] - MockHttpServletResponse doesn't delete cookies
    * [WICKET-2633] - AjaxEditableLabel fails to focus editor upon validation errors
    * [WICKET-2635] - Sucessfull login on SignInPanel causes HomePage to become stateful
    * [WICKET-2638] - Form.isMultipart() doesn't check FormComponent.isMultipart() on nested components
    * [WICKET-2639] - More pages missing xml prolog
    * [WICKET-2641] - EnumLabel misbehaves with anonymous enum
    * [WICKET-2645] - Resources aren't gziped by default
    * [WICKET-2647] - InspectorPage (from devutils) is stateful for no valid reason
    * [WICKET-2650] - Consistently create body for short tags.
    * [WICKET-2655] - WicketTester javadocs are referring in many places to a component's path but it's not documented anywhere
    * [WICKET-2666] - ConvererLocator.convertToString discards original cause of conversion failure
    * [WICKET-2667] - When multipart on form is set to true, setResponsePage() doesnt work
    * [WICKET-2668] - UploadProgressBar component can't be removed or replaced easily
    * [WICKET-2669] - DataTable mutiple bottom toolbars are misplaced because of bad html
    * [WICKET-2671] - Enclosure causes Nullpointer exception
    * [WICKET-2672] - FormComponent doesn't properly handle array model types
    * [WICKET-2675] - CryptedUrlWebRequestCodingStrategy fails in form with method="get"
    * [WICKET-2679] - checkRendering() throws Exception if TransparentResolver is invisible
    * [WICKET-2685] - MixedParamsUrlCodingStrategy ,classcastexception from Long to String
    * [WICKET-2686] - CryptedUrlWebRequestCodingStrategy fails in form with method="get" - 1.5
    * [WICKET-2692] - DropDownChoice value may be lost after ajax submit call

** Improvement
    * [WICKET-2591] - Allow subclasses of AuthenticatedWebSession to set "signedIn" field
    * [WICKET-2626] - Make DatePicker on DateTimeField overrideable
    * [WICKET-2628] - SerializingObjectSizeOfStrategy should warn when unable to serialize the object
    * [WICKET-2637] - Lithuanian translation for the Application.properties
    * [WICKET-2642] - Russian translation of SignInPage/SignInPanel
    * [WICKET-2644] - Hungarian translation for wizard
    * [WICKET-2646] - Better error reporting from StatelessChecker
    * [WICKET-2649] - Make SignInPage stateless
    * [WICKET-2653] - Make GoAndClearFilter.defaultClearModel and GoFilter.defaultGoModel internationalizable
    * [WICKET-2656] - Ability to add CSS style to table body in DataTable
    * [WICKET-2664] - CheckBoxMultipleChoice should use isEnabledInHierarchy()
    * [WICKET-2673] - TabbedPanel not generic
    * [WICKET-2682] - Maven 3 produces various warnings

** Task
    * [WICKET-2670] - Remove deprecated API calls from wicket-extensions


Release Notes - Wicket - Version 1.4.5

** Bug
    * [WICKET-2598] - Some components still escape non-ASCII symbols by default
    * [WICKET-2599] - Missing XML prolog in wicket-extensions panel htmls
    * [WICKET-2600] - Redirect to home page still does not work (regression)
    * [WICKET-2606] - Enclosure reports incorrect component id for missing components inside the enclosure
    * [WICKET-2609] - EnumChoiceRenderer misbehaves with anonymous enum classes
    * [WICKET-2613] - Content-Length Issue with 1.4.4
    * [WICKET-2617] - ModalWindow can't be shown when it is rendered with ajax request
    * [WICKET-2621] - Ajax buttons inside ModalWindows don't submit properly

** Improvement
    * [WICKET-1888] - FormComponents (and subclasses) should be able to provide their own resource bundles
    * [WICKET-2247] - IndexedHybridUrlCodingStrategy constructor should accept a redirectOnBookmarkableRequest boolan
    * [WICKET-2428] - AbstractSingleSelectChoice: custom resource key for null option
    * [WICKET-2592] - Add support for arbitrary PageParameters values in QueryStringUrlCodingStrategy
    * [WICKET-2597] - The PagingNavigator.newNavigation method does not provide a markup id of the element to create an navigation for
    * [WICKET-2602] - Display upload progress bar only when a file is selected
    * [WICKET-2603] - javadoc update
    * [WICKET-2604] - Add another german Wicket book 


Release Notes - Wicket - Version 1.4.4

** Bug
    * [WICKET-625] - Wicket doesn't clean up properly when hot-deploying; hangs onto Class references.
    * [WICKET-2080] - InjectorHolder is broken when wicket-ioc.jar is shared between multiple web applications
    * [WICKET-2317] - Deprecated JavaDoc for org.apache.wicket.behavior.HeaderContributor
    * [WICKET-2419] - AjaxEditableMultiLineLabel doesn't handle huge text properly
    * [WICKET-2491] - Ajax multipart broken on mounted pages
    * [WICKET-2518] - Application_bg.properties property file is incorrectly encoded
    * [WICKET-2519] - 1.4.2 enclosure problem
    * [WICKET-2534] - File Handle Leak in URLResourceStream
    * [WICKET-2545] - NullPointerException thrown from BaseWicketTester isComponent
    * [WICKET-2546] - DataTable does not generate "thead" tag
    * [WICKET-2548] - MetaDataKey does not meet hashCode() contract
    * [WICKET-2550] - DatePicker introduces a bug regarding the back button support of the browser.
    * [WICKET-2551] - Bug in WicketTester when submitting forms
    * [WICKET-2552] - CreditCardValidator accepts invalid inputs
    * [WICKET-2553] - Wicket-ajax.js: Javascript error on submitting of form with wicketSubmitFormById.
    * [WICKET-2554] - WebRequestCodingStrategy assumes that a shared resource URL should always be relative to the Wicket handler
    * [WICKET-2567] - Images and stylesheets leave open file handles
    * [WICKET-2568] - Unnecessary method calls in IDataProvider
    * [WICKET-2570] - Form submitting component is not checked for being enabled during submit
    * [WICKET-2580] - Javadoc of Component#setOutputMarkupPlaceholderTag is wrong
    * [WICKET-2582] - org.apache.wicket.markup.html.form.Check should call Component.isEnabledInHierarchy()
    * [WICKET-2583] - Warnings flood if incorrect credentials endered on SignInPage
    * [WICKET-2587] - UploadProgressBar producing warning log messages incorrectly
    * [WICKET-2589] - FeedbackPanel in FormComponentFeedbackBorder throws ConcurrentModificationException
    * [WICKET-2593] - wicket:message can cause infinite loop in render
    * [WICKET-2595] - Ajax multipart fails for inner forms added via ajax

** Improvement
    * [WICKET-12] - open Modal Window without AjaxRequestTarget
    * [WICKET-2326] - Text on BrowserInfoPage should be customizable
    * [WICKET-2364] - CLONE -Make LoadableDetachableModel writable
    * [WICKET-2531] - Open DropDownChoice null value internationalization key
    * [WICKET-2533] - Behavior for accepted locales should fit the HTTP Specification
    * [WICKET-2536] - Guice 2.0 and its maven2 repository groupId
    * [WICKET-2539] - PackageStringResourceLoader does not look up to superclasses
    * [WICKET-2540] - Date Validation - message formatting of the date
    * [WICKET-2564] - Modify wicket-devutils DebugBar so it emits valid XHTML
    * [WICKET-2573] - Allow applications to chose not to use CGLIB proxies for @SpringBean injections
    * [WICKET-2575] - RepeatingView's Javadoc to include newChildId() and add()
    * [WICKET-2578] - Polish resource files for wicket 1.4.3
    * [WICKET-2581] - French translation of Wicket-auth resources
    * [WICKET-2590] - AjaxLazyLoadPanel callback script rendering

** New Feature
    * [WICKET-1157] - Generic internationalization for Enums
    * [WICKET-2572] - Add capability for SpringWebApplicationFactory to create its own application context

Release Notes - Wicket - Version 1.4.3

** Bug
    * [WICKET-2348] - always insert encoding in http response header
    * [WICKET-2436] - invalid DataTable markup breaks table layout
    * [WICKET-2497] - AutoComplete textfield ignores "visible" property within hierarchy.
    * [WICKET-2501] - BaseWicketTester clickLink calls onBeginRequest two times.
    * [WICKET-2505] - Button.onSubmit javadoc is misleading
    * [WICKET-2506] - Regression: "Could not find child with id: <ID> in the wicket:enclosure" for non-component tag
    * [WICKET-2507] - Inconsistent resource path using <wicket:link> and HeaderContributor after second request
    * [WICKET-2508] - NullPointerException in BehaviorRequestTarget.processEvents(BehaviorRequestTarget.java:96)
    * [WICKET-2513] - wicket:enclosure does not work if child is a container and not a component (regression from 1.4.1)
    * [WICKET-2516] - Javadoc for Component.getMarkupId is incorrect
    * [WICKET-2518] - Application_bg.properties property file is incorrectly encoded
    * [WICKET-2520] - Use of Object instead of generic T in StringAutoCompleteRenderer
    * [WICKET-2522] - Easy fix suggestion: In BaseWicketTester 'IFormSubmitting' component should be the submitting component, not just a 'Button'
    * [WICKET-2525] - DatePicker consume too much memory
    * [WICKET-2527] - wicket:enclosure child attribute search path has changed
    * [WICKET-2528] - CheckBoxMultipleChoice ignores isDisabled() checks
    * [WICKET-2530] - Class not found when using OSGI class loader

** Improvement
    * [WICKET-2344] - Performance improvement: more efficient AnnotProxyFieldValueFactory cache
    * [WICKET-2459] - Add new German Wicket Book
    * [WICKET-2511] - Upgrade to SLF4J version 1.5.8
    * [WICKET-2524] - Configurable Throttle delay for AutoCompleteBehavior

** Wish
    * [WICKET-2468] - AjaxLazyLoadPanel do not respect especific projects components configuration
    * [WICKET-2515] - ModalWindow javadoc improvent

Release Notes - Wicket - Version 1.4.2

** Bug
    * [WICKET-2393] - Passwords should not be trimmed
    * [WICKET-2430] - Malformed \uxxxx encoding in MultipleUploadField_sl.properties
    * [WICKET-2433] - Ajax support for multipart forms broken in a nested form
    * [WICKET-2434] - RequestCycle urlFor ignores existing parameters when appending provided params
    * [WICKET-2438] - AjaxEventBehavior not working on feedback message components
    * [WICKET-2453] - Form.findForm(Component c) bug. When form is part of Border and form component like TextField is inside another Border , component cannot resolve its form.
    * [WICKET-2456] - DateTextField cannot work with default converter (or javadoc wrong)
    * [WICKET-2457] - Flash/ExternalInterface does not work in IE if movie is fetched via Wicket/Ajax
    * [WICKET-2458] - JavascriptUtils.escapeQuotes() misses escaping double quotes
    * [WICKET-2461] - AjaxPagingNavigationIncrementLink does not work without AjaxPagingNavigator component
    * [WICKET-2463] - Ajax miltipart form submitting ignores setDefaultFormProcessing(false)
    * [WICKET-2466] - javadoc the CryptedUrlWebRequestCodingStrategy needs to be update/corrected to reflect the usage of session-id for encryption and hence URLs which were bookmarkable before will NOT remain bookmarkable. 
    * [WICKET-2475] - NPE after application hot redeployment
    * [WICKET-2477] - AjaxEditableChoiceLabel does not detach choices model
    * [WICKET-2478] - TabbedPanel rendering bug
    * [WICKET-2485] - IComponentResolvers are not supported inside wicket:enclosure
    * [WICKET-2488] - QuickFix proposal WicketTesterHelper.assertEquals(final Collection<?> expects, final Collection<?> actuals) should compare list sizes

** Improvement
    * [WICKET-626] - profile Wicket for 1.4.0
    * [WICKET-2435] - TabbedPanel extract factory method for tabs-container
    * [WICKET-2439] - Improve MixedParamUrlCodingStrategy, introduce Hybrid
    * [WICKET-2444] - Internal Spring beans should be ignored
    * [WICKET-2445] - FormInput.java needs the validators updated. 
    * [WICKET-2449] - Fix javadoc biggest mistakes - mainly @Deprecated tags
    * [WICKET-2454] - IE8: be more verbose if ajax refresh fails
    * [WICKET-2469] - Allow using a different FileItemFactory by extracting a method in MultipartServletWebRequest class
    * [WICKET-2492] - Application_pt_BR.properties path

** New Feature
    * [WICKET-2395] - add MixedParamHybridUrlCodingStrategy
    * [WICKET-2483] - Access to WizardModel.conditions
    * [WICKET-2517] - adding class ExactErrorLevelFeedbackMessageFilter which displays exact one Error Level

** Wish
    * [WICKET-2120] - widen visibiliy of GuiceProxyTargetLocator  and  findBindingAnnotation  
    * [WICKET-2462] - Would it possible add chinese resource label for WizardButton eg. CancelButton, NextButton and PreviousButton etc.
    * [WICKET-2489] - need to know if a component has been added to the AjaxRequestTarget

Release Notes - Wicket - Version 1.4.1


** Bug
    * [WICKET-2316] - Form generates invalid html in appendDefaultButtonField
    * [WICKET-2378] - FormTester should call detach
    * [WICKET-2397] - text fields do not honor isrequired()
    * [WICKET-2402] - SetRowsPerPage with AjaxFallbackDefaultDataTable
    * [WICKET-2406] - Palette component breaks XHTML validation
    * [WICKET-2407] - AbstractOptions of Palette may cause an HTML error with illegal chars
    * [WICKET-2415] - Estonian translation for StringValidator.minimum contains ${mimimum} instead of ${minimum}
    * [WICKET-2418] - NPE in ResourceReference
    * [WICKET-2422] - DefaultDataTable hides NavigationToolbar once and forever
    * [WICKET-2423] - Not all "domready" events are called when two wicket-event.js files are added to the page

** Improvement
    * [WICKET-2020] - Callback after detaching the page but before the PageMap lock is released
    * [WICKET-2290] - upgrade pom reference for joda-time to 1.6
    * [WICKET-2374] - Model's factory methods are inconsistent
    * [WICKET-2410] - AjaxRequestTarget could skip component when its ancestor is added too
    * [WICKET-2413] - Better error handling when filterName attribute of WicketSessionFilter is misconfigured
    * [WICKET-2417] - FilterToolbar, FilterForm conformity to XHTML strict

** New Feature
    * [WICKET-2412] - Add dev time check for empty src="" attribute that can cause problems
    * [WICKET-2420] - Ajax support for multipart forms



Release Notes - Wicket - Version 1.4.0


** Bug
    * [WICKET-2350] - Localization messages stops working with validators since 1.4-rc2
    * [WICKET-2363] - Two minor quick-to-fix quality bugs in WicketTester
    * [WICKET-2366] - Refactor: org.apache.wicket.util.string.Strings#fromEscapedUnicode(String escapedUnicodeString)
    * [WICKET-2367] - ApacheLicenceHeaderTest fails checking non-project file
    * [WICKET-2368] - Page.checkRendering fails after setting BorderBodyContainer visiblity to false
    * [WICKET-2381] - IModel parameters of StringResourceModel not getting detached
    * [WICKET-2382] - Stateless problems
    * [WICKET-2384] - OutOfMemoryError occur for memory leak on FeedbackPanel & FeedbackMessages
    * [WICKET-2386] - JavaDoc: Some JavDoc examples still refer to WicketServlet
    * [WICKET-2391] - Tag '<BODY>'has a mismatched close tag at '</SPAN>'
    * [WICKET-2392] - MarkupComponentBorder fails to close stream (?)
    * [WICKET-2394] - KittenCaptcha example broken

** Improvement
    * [WICKET-2362] - Update hungarian localization


Release Notes - Wicket - Version 1.4-RC7


** Bug
    * [WICKET-2337] - IndexOutOfBoundsException when PropertyResolver is using an invalid list index
    * [WICKET-2346] - Problem with displaying expired page.
    * [WICKET-2354] - PropertyModel does not support index only property ("[0]")
    * [WICKET-2358] - EmailAddressValidator property has a typo in French version

** Improvement
    * [WICKET-2351] - Make TimeFrame, Duration, Time and related classes Serializable.
    * [WICKET-2360] - Checkbox: Make setters fluid


Release Notes - Wicket - Version 1.4-RC6


** Bug
    * [WICKET-1897] - StatelessForm submitted to the wrong page
    * [WICKET-2127] - Javascript function Wicket.replaceAll is unbearably slow
    * [WICKET-2202] - Form gets submitted using AjaxSubmitBehavior when sub-form has error's
    * [WICKET-2268] - NullPointerException NPE in DiskPageStore after Session Timeout
    * [WICKET-2284] - German translation for NumberValidator.minimum is wrong
    * [WICKET-2294] - CryptedUrlWebRequestCodingStrategy fails while decoding parameters after the app has been up and running for quite some time.
    * [WICKET-2325] - IChoiceRenderer generic type parameters are wrong throughout the AbstractChoice class hierarchy
    * [WICKET-2330] - AjaxFormSubmitBehavior throws an NullPointerException when getForm() is overridden
    * [WICKET-2333] - RatingPanel doesn't "wrap" models
    * [WICKET-2334] - DebugBar throws an java.lang.ExceptionInInitializerError when Tomcat is restarted
    * [WICKET-2335] - JavaDoc inconsistent to the code
    * [WICKET-2336] - JavaDoc, point out the need of a super call.
    * [WICKET-2341] - AbstractSingleSelectChoice nullValid javadocs are misleading.
    * [WICKET-2345] - ModalWindow.setResizable(false) does not work after 1.4-rc4
    * [WICKET-2349] - Time.valueOf(TimeOfDay) needs to use 24 hour clock

** Improvement
    * [WICKET-2321] - create a Component#onRemove() method
    * [WICKET-2332] - Open up Markup ctor and MarkupContainer#renderNext
    * [WICKET-2340] - Make ModificationWatcher replacable
    * [WICKET-2342] - Cryptic error "WicketMessage: Tag Expected" when wicket:panel tags are missing
    * [WICKET-2343] - Link: PopupSettings - overriding getPopupSettings has no effect

** New Feature
    * [WICKET-2306] - Extension for WicketTester to easily get AjaxLazyLoadPanel's to render their contents




** Task
    * [WICKET-2338] - Find and fix errata in 1.4 JavaDoc



** Wish
    * [WICKET-2314] - Custom css for Wizard


Release Notes - Wicket - Version 1.4-RC5

** Bug
    * [WICKET-1912] - StatelessForm problems with query string
    * [WICKET-1922] - AbstractTree - setting root to null causes NullPointerException
    * [WICKET-2033] - &amp; instead of & in javascript
    * [WICKET-2123] - org.apache.wicket.util.convert.converters.SqlTimestampConverter only renders the time part of the timestamp
    * [WICKET-2133] - DatePicker inserts incorrect format date
    * [WICKET-2188] - PropertyResolver$ArrayPropertyGetSet does not call setAccessible(true) on method
    * [WICKET-2245] - PageParameters always non-empty
    * [WICKET-2259] - The JavaDoc for IPageLink still holds a reference to PageLink which is deprecated
    * [WICKET-2261] - wicketTester.executeAjaxEvent(combo, "onchange"); works with 1.4-rc1 but not anymore with 1.4-rc2
    * [WICKET-2270] - GET/POST mismatch with stateless page/form.
    * [WICKET-2272] - open/close div tags are rendered erroneously
    * [WICKET-2273] - wicket-devutils is missing in wicket-assembly-all.xml and not mentioned in README
    * [WICKET-2274] - WicketTester.executeAjaxEvent(AjaxButton, "onclick"); results in clicking of another submit button if its model value is not null.
    * [WICKET-2276] - isComponent in BaseWicketTester contains possible nullpointer exception
    * [WICKET-2277] - Radio#onComponentTag uses Objects.equal instead of model comparator
    * [WICKET-2278] - StatelessChecker is always offended
    * [WICKET-2281] - MockHttpServletRequest is broken when used with CryptedUrlWebRequestCodingStrategy
    * [WICKET-2286] - proper onBeforeRender() for NavigationToolbar
    * [WICKET-2292] - TabbedPanel uses too much generics (revert WICKET-2153)
    * [WICKET-2301] - When injecting more than one parm in a method, an ArrayIndexOutOfBoundsException is thrown
    * [WICKET-2303] - [devutils] LiveSessionsPage is broken
    * [WICKET-2304] - [devutils] RequestsPage is broken
    * [WICKET-2305] - [devutils] Can only inspect pages in same pagemap as the inspector
    * [WICKET-2308] - Append lastmodified to Resources shouldnt append when the resource is a directory (ends with /)
    * [WICKET-2309] - ClassCastException in SqlDateConverter
    * [WICKET-2310] - FormTester.setValue should throw exception if not FormComponent

** Improvement
    * [WICKET-1837] - DiskPageStore: 32k directory entries.
    * [WICKET-2240] - Ability to enter ${...} like literals in property values
    * [WICKET-2271] - Make navigator ADA friendly
    * [WICKET-2293] - Form loadPersistentFormComponentValues condition fix
    * [WICKET-2307] - Throw specific RuntimeException in WebRequestCodingStrategy.decode

** New Feature
    * [WICKET-2260] - NavigatorLabel should support PageableListView

** Task
    * [WICKET-2287] - change JavaDoc of NumberValidator to point to newly created Validators


Release Notes - Wicket - Version 1.4-RC4

** Bug
    * [WICKET-1960] - AutoCompleteTextField - gives a type mismatch error on IE - version wicket-1.4-rc1
    * [WICKET-2241] - Guice integration doesn't honour optional bindings
    * [WICKET-2250] - IOptionRenderer getModel(Object value) should change to getModel(T value)
    * [WICKET-2251] - LoadableDeatachableModel onDetach() invoked after nulling the model

** New Feature
    * [WICKET-2255] - Simple changes for datepicker/datefield


Release Notes - Wicket - Version 1.4-RC3

** Bug
    * [WICKET-1673] - Toggling visibility on nested Borders breaks page markup
    * [WICKET-1861] - Inevitable UnknownSizeException with HTTPS
    * [WICKET-2000] - AjaxRequestTarget escapes ] to ]^
    * [WICKET-2005] - pb to access to this on event onchange on the AutoCompleteTextField
    * [WICKET-2015] - Empty File Upload field breaks validation of other fields in WicketTester.
    * [WICKET-2022] - wicket fails on WebLogic 9.2 clustered
    * [WICKET-2024] - AutoComplete ShowListOnFocusGain not working
    * [WICKET-2049] - beforeRender not called for behaviour added to ComponentTag
    * [WICKET-2060] - Invalid javascript when setStripJavascriptCommentsAndWhitespace is enabled
    * [WICKET-2061] - interceptContinuationURL with umlauts not encoded
    * [WICKET-2071] - Wicket-Examples Nested example fails with a NPE
    * [WICKET-2077] - SerializationChecker issue
    * [WICKET-2079] - Component Use Check always fails for visible components inside an invisible border body
    * [WICKET-2083] - NPE when clearing DateTimeField
    * [WICKET-2086] - setOutputMarkupContainerClassName() ... and wrong render mode in IE7
    * [WICKET-2087] - typo in SpringBeanLocator.java
    * [WICKET-2088] - ApacheLicenceHeaderTests fail after projects' metadata created by Eclipse
    * [WICKET-2091] - Error feedback is hidden by lower level messages
    * [WICKET-2092] - SignInPanel IllegalArgumentException exception
    * [WICKET-2093] - SubmitLink.onSubmit() is not called for submit links outside the form
    * [WICKET-2094] - Incorrect parameter name in SpringWebApplicationFactory's javadocs
    * [WICKET-2095] - error in modal.js wrong use of typeof
    * [WICKET-2096] - MultiFileUploadField.js can't find file input when serving pages as XHTML
    * [WICKET-2100] - DynamicImageResouce blocks loading of AjaxLazyLoadPanel
    * [WICKET-2102] - Localizer never caches resources when component is not given
    * [WICKET-2103] - SignInPanel.onSignInSucceeded call the correct method on IPageFactory
    * [WICKET-2104] - FormTester does not toggle selected values when using selectMultiple
    * [WICKET-2105] - Stripping comments causes StackOverflowError in XmlPullParser
    * [WICKET-2107] - Misplaced IllegalStateExceptions when accessing stateful URL with different session
    * [WICKET-2109] - IResourceStream.close is not called by ResourceStreamRequestTarget
    * [WICKET-2114] - WicketTester fails to execute AjaxBehavior (onclick) due to old requestCycle (this bug is caused by bugfix WICKET-254)
    * [WICKET-2124] - FormTester.setValue should throw excecption if the component does not exist
    * [WICKET-2130] - Pages stored in Session.touchedPages aren't detached when part of ModalWindow
    * [WICKET-2134] - Conversion Exception Thrown for Submitting A Page with Multiple Forms within A Border
    * [WICKET-2135] - PackagedTextTemplate uses default ResourceStreamLocator first
    * [WICKET-2140] - FormComponentPanel should not add a name attribute
    * [WICKET-2142] - Getting live sessions from RequestLogger results in NPE
    * [WICKET-2147] - Missing final semicolon in onclick JS for Link
    * [WICKET-2148] - AttributeModifier doesn't escape markup in model strings
    * [WICKET-2151] - WicketSessionFilter doesn't takes into account WebApplication#getSessionAttributePrefix(WebRequest)
    * [WICKET-2156] - StringResourceModel's Localizer cannot be overwritten
    * [WICKET-2159] - Resource key for validation message lookup is not the same as the component name.
    * [WICKET-2161] - DropDownChoice NO_SELECTION_VALUE static field is final
    * [WICKET-2163] - Make Palette's "Choices" Model More Generics Friendly
    * [WICKET-2166] - Invalid nested form tag name when the form is not visible and setoutputmarkupplaceholdertag(true) has been called
    * [WICKET-2167] - UrlValidator property is duplicated in Application_nl.properties
    * [WICKET-2171] - Base64UrlSafe claims to be RFC 3548 compliant, but isn't
    * [WICKET-2172] - PageParameters construced with keyValuePairs does not handle array values
    * [WICKET-2173] - quickstart archetype adds invalid maven-compiler-plugin configuration
    * [WICKET-2174] - Form#getMaxSize() -> no custom format
    * [WICKET-2175] - onBeforeRender() set visibility of NavigationToolbar prevents it from showing again
    * [WICKET-2179] - JavascriptResourceReference / CompressedResourceReference is "broken"
    * [WICKET-2180] - WicketSessionFilter assumes that the WicketFilter has already been inited
    * [WICKET-2181] - Bounds error in PageableListView#getCurrentPage()
    * [WICKET-2183] - Fix API documentation for DataTable
    * [WICKET-2185] - WicketServlet fallback() code should ignore query string params when resolving resources.
    * [WICKET-2189] - Generics for AjaxFallbackDefaultDataTable
    * [WICKET-2191] - WebApplication is not thread-safe
    * [WICKET-2195] - DefaultObjectStreamFactory needs Application during deserialization
    * [WICKET-2196] - still doesn't seem to work - AjaxEditableChoiceLabel ignores ChoiceRenderer in newLabel(...)
    * [WICKET-2197] - BaseWicketTester should not hardcode UTF-8 in isComponentOnAjaxResponse
    * [WICKET-2199] - org.apache.wicket.settings.Settings#addStringResourceLoader(final IStringResourceLoader loader) does not conform to its JavaDoc
    * [WICKET-2200] - Unexpected RuntimeException: RestartResponseException in onBeforeRender of cached page
    * [WICKET-2202] - Form gets submitted using AjaxSubmitBehavior when sub-form has error's
    * [WICKET-2203] - WicketTester clickLink on submitLink fails with conversion error
    * [WICKET-2210] - AjaxButton and <?>
    * [WICKET-2211] - MetaPattern.PERCENT matches an empty string
    * [WICKET-2215] - WebClientInfo does not set browerMajorVersion for IE8
    * [WICKET-2218] - DatePicker pick up wrong word when we use LOCALE_WEEKDAYS with 1char in chinese.
    * [WICKET-2220] - YUI library used by Wicket Extensions - DateTime isn't IE8 compatible
    * [WICKET-2223] - DiskPageStore::convertToPage cleanup
    * [WICKET-2231] - DatePicker doesn't work when CryptedUrlWebRequestCodingStrategy is in effect
    * [WICKET-2233] - getPageSettings().setAutomaticMultiWindowSupport(true); is said to be enabled by default in its javadoc but isn't
    * [WICKET-2234] - typo in pom.xml
    * [WICKET-2236] - Palette problem in IE7 Problem
    * [WICKET-2237] - DateTimeField throws NPE if date is cleared
    * [WICKET-2239] - AbstractColumn::isSortable() doesn't know about overrided getSortProperty()
    * [WICKET-2241] - Guice integration doesn't honour optional bindings
    * [WICKET-2242] - java.sql.Timestamp converter bug

** Improvement
    * [WICKET-1571] - Add a simple boolean datepicker.contributeDependencies() that a user can then override and return false.
    * [WICKET-2029] - AutoComplete - KEY_TAB should work like KEY_ENTER
    * [WICKET-2036] - Map getParameterMap() returns Map (no generics).
    * [WICKET-2072] - Allow for maps in the widgetProperties
    * [WICKET-2074] - Should the QuickStart archetype generated HomePage.html inlude the Wicket namespace in the html tag?
    * [WICKET-2076] - Need a way to programmaticaly configure the location of the temp directory for file uploads and the size of the chunk buffer
    * [WICKET-2082] - Conditional rendering for open-close tags of <head> tag.
    * [WICKET-2085] - DateTimeField.HoursValidator relies on deprecated NumberValidator
    * [WICKET-2090] - Need reliable hook for storing/restoring data to/from page metadata that is tes compatbile
    * [WICKET-2101] - PageLink is inherently non extendable
    * [WICKET-2113] - Fix Compenent#setModelObject API documentation (or fix/remove call to checkHierarchyChange?)
    * [WICKET-2117] - Polish translations for wicket-extensions properties
    * [WICKET-2118] - Application adds a ComponentInstantiationListener that I don't want and can't remove
    * [WICKET-2137] - Synchronize generics between ListView and DropDownChoice
    * [WICKET-2139] - RequestLogger change - include Page Parameters for BookmarkablePages
    * [WICKET-2144] - Russian messages for file uploads
    * [WICKET-2153] - TabbedPanel accepts only ITab(s)
    * [WICKET-2160] - application_nl.properties is outdated
    * [WICKET-2165] - Improve the API's Consistency and Flexibility With Respect to Generics and Collections
    * [WICKET-2168] - TableTree.html is not XHTML valid
    * [WICKET-2169] - Left-align text in Wicket Ajax Debug Window
    * [WICKET-2184] - Check component id against invalid chars ':' and empty IDs
    * [WICKET-2186] - PatternValidator could allow reverse matches
    * [WICKET-2187] - less dynamic or missing toString( ) methods in Component class
    * [WICKET-2205] - typo in ApplicationContextMock.putBean() exception message: "alredy"
    * [WICKET-2209] - IFormValidator and <?>
    * [WICKET-2212] - Resource lookup/caching in OSGI environment spams errors for gone resources
    * [WICKET-2216] - DatePicker should not need to be extended to set a property
    * [WICKET-2217] - Add MD5 checksum to FileUpload component for uploaded files
    * [WICKET-2219] - More detailed error messages in wicket-ajax.js
    * [WICKET-2230] - Nested directory support for ZipResourceStream

** New Feature
    * [WICKET-2089] - Perform authorization for links based on the page annotations they refer to.
    * [WICKET-2170] - @StatelessComponent contribution by Marat Radchenko
    * [WICKET-2229] - Introduce Http/Https switcing support into core

** Wish
    * [WICKET-2073] - mvn deploy -DaltDeploymentRepository=... fails
    * [WICKET-2176] - i18n: German Translation of MultiFileUploadField
    * [WICKET-2222] - MixedParamUrlCodingStrategy constructor should be variadic


Release Notes - Wicket - Version 1.4-RC2

** Sub-task
    * [WICKET-1678] - integrate code into extensions
    * [WICKET-1875] - create javadoc for existing portal imeplementation
    * [WICKET-2058] - Upgrade Wicket Portlet Support to only use native Portlet API 2.0

** Bug
    * [WICKET-693] - What to do with the wicket dtd?
    * [WICKET-1314] - DateTimeField does not correct the timezone properly
    * [WICKET-1360] - Wrong path separator in reloading classloader patterns
    * [WICKET-1403] - Reinjection fails after Server restart
    * [WICKET-1483] - Unusual ClassCastException (SimpleAttributeModifier to IBehaviorListener) processing onError.
    * [WICKET-1504] - AutoCompleteTextField - javascript error "type mismatch" in line 227 in IE
    * [WICKET-1513] - "input" tag with type="image" results in null pointer exception in AutoLinkResolver
    * [WICKET-1605] - onclick is null or not an object in IE6, IE7; Form.appendDefaultButtonField
    * [WICKET-1619] - PagingNavigator.setEnabled(false) doesn't work
    * [WICKET-1621] - Misleading example works despite error
    * [WICKET-1647] - SqlTimestampConverter drops the date portion of a Timestamp
    * [WICKET-1663] - Wicket tries to decode servlet path that already has been decoded by servlet container
    * [WICKET-1677] - AjaxFormChoiceComponentUpdatingBehavior affects checkboxes even if component uses radios and vice-versa
    * [WICKET-1689] - style resources not looked up correctly in markup inheritance
    * [WICKET-1691] - StringResourceModel honors container's key (rather than its own)
    * [WICKET-1718] - WebPage#onAfterRender erroneously reports missing header
    * [WICKET-1750] - Inconsisting Handling of id mismatch on wicket:container
    * [WICKET-1781] - ParentResourceEscapePathTest fails on OS X using cmd line maven
    * [WICKET-1794] - WicketTester.clickLink and IndexedParamUrlCodingStrategy don't work together
    * [WICKET-1812] - Header contributions occur even though rendering is not allowed by authorization strategy
    * [WICKET-1851] - Default lookup keys don't work when UseDefaultOnMissingResource is false
    * [WICKET-1855] - Using an AjaxSubmitLink outside of a Form does not set the form property
    * [WICKET-1863] - DateTimeField: small bugs
    * [WICKET-1864] - MockHttpServletRequest does not support absolute redirection URLs.
    * [WICKET-1868] - i18n package resource resolving depends too much on available locale
    * [WICKET-1871] - org.apache.wicket.util.string.Strings#stripJSessionId StringIndexOutOfBoundsException
    * [WICKET-1876] - RequestUtils.decodeParameters(String, ValueMap) doesn't follow the Servlet spec
    * [WICKET-1879] - Generics in DateTextField
    * [WICKET-1881] - RequestCycle.urlFor modifies page's parameters
    * [WICKET-1886] - WicketTester Cookie handling
    * [WICKET-1890] - Palette.onBeforeRender() throws IllegalArgumentException in cases when Palette is invisible.
    * [WICKET-1898] - WebRequestCycleProcessor.resolveHomePageTarget for empty path with enforceMounts=true provokes 403 - "Direct access not allowed for mounted targets"
    * [WICKET-1906] - AutocompleteTextField throws javascript error Object Required
    * [WICKET-1908] - ResourceNameIterator problem with files with undescore in name
    * [WICKET-1909] - Wrong translation for StringValidator.range in Application_pl.properties
    * [WICKET-1914] - Form.appendDefaultButtonField produces invalid JavaScript if Ajax is disabled
    * [WICKET-1915] - wicket:message sometimes broken
    * [WICKET-1916] - setResponsePage(Application#getHomePage()) mounted as / (default) vs. ajax requests
    * [WICKET-1919] - MarkupContainer.setEnabled() doesn't enable/disable child components
    * [WICKET-1920] - Settings mounts as case insensitive causes 404 errors if case is included when mounting pages.
    * [WICKET-1923] - use of replaceComponentTagBody in onComponentTag MarkupException: Tag expected
    * [WICKET-1925] - SubmitLink javadoc is wrong. It states the javascript will be used in the href attribute of the tab, but it is actually in the onclick attribute.
    * [WICKET-1926] - UrlValidator doesn't working when using a hostname in the url
    * [WICKET-1927] - WicketTester.assertErrorMessages uses wrong encoding
    * [WICKET-1930] - FileUpload.writeToTempFile uses field Id as filename - Windows doesn't support some characters
    * [WICKET-1931] - FormTester doesn't correctly submit a form when a FileUploadField was not set (which is not required)
    * [WICKET-1934] - Hard coded size=8 attribute in DateTimeField.html is too small
    * [WICKET-1935] - SignInPanel_ja.html doesn't close span tag
    * [WICKET-1939] - ChoiceFilteredPropertyColumn forces column type parameter and choice type parameter to be the same
    * [WICKET-1944] - Wicket-autocomplete.js does not invoke invokePostCallHandlers() when input string is 0 lenght or null
    * [WICKET-1948] - rc1 generics - RatingPanel
    * [WICKET-1953] - isEnabled called even if component is not Visible
    * [WICKET-1955] - Error about misplaced <wicket:head> very uninformative and incorrect
    * [WICKET-1959] - PropertyResolver causes memory leaks with proxies
    * [WICKET-1961] - Bad javadoc for Request.getRelativePathPrefix* methods
    * [WICKET-1963] - Outdated JavaDoc content in MarkupContainer class
    * [WICKET-1976] - NPE when <wicket:link> embedding <input type="image" src"...">
    * [WICKET-1977] - Generics: IOptionRenderer vs IChioceRenderer
    * [WICKET-1980] - Fixing JS error on autocomplete with preselect
    * [WICKET-1988] - DatePicker is not thread-safe
    * [WICKET-1989] - The method name 'renderOnEventJavacript' of IHeaderResponse is misspelling of 'renderOnEventJavascript'
    * [WICKET-1991] - SharedResourceRequestTarget logs ERRORs to the logfile on 404 (client errors)
    * [WICKET-1992] - SharedResourceRequestTarget allows access to almost arbitrary files under WEB-INF.
    * [WICKET-1994] - String.replaceAll(regex, replacement). The dot in ".html" I guess is meant to be literal
    * [WICKET-1995] - Method called unnecessarily in FormComponent
    * [WICKET-1997] - TextFilteredPropertyColumn needs different generic for FilterModel
    * [WICKET-2002] - Palette's Choice and Selection component break XHTML validation
    * [WICKET-2003] - Palette's AbstractOption component break XHTML validation
    * [WICKET-2004] - tests failed - last trunk revision - 731610
    * [WICKET-2006] - The page set by setReponsePage does not process its own response.
    * [WICKET-2008] - org.apache.wicket.util.license.PropertiesLicenseHeaderHandler failed
    * [WICKET-2011] - FormComponent cookie persistent issue
    * [WICKET-2012] - Not possible to call getRowCount() in override of isVisible() for DataView
    * [WICKET-2013] - Session doesn't get invalidated when using RestartResponseException.
    * [WICKET-2016] - FormTester (BaseWicketTester.executeAjaxEvent[component,event]) submits also buttons that are hidden (isVisible=false) resulting in exception
    * [WICKET-2019] - Validation messages aren't cleared on success.
    * [WICKET-2025] - isVisible should not be called after detach
    * [WICKET-2026] - Forms are not validated correctly inside a border
    * [WICKET-2027] - FormComponentPanel does not work correctly inside a Border
    * [WICKET-2030] - BaseWicketTester can't find the pageLink field using reflection when you override the PageLink class.
    * [WICKET-2032] - CLONE -Wicket-autocomplete.js does not invoke invokePostCallHandlers() when input string is 0 lenght or null
    * [WICKET-2037] - Should adding AJAX behaviour to a page make it stateful?
    * [WICKET-2038] - Missing redirects in AjaxPagingNavigationLink and AjaxPagingNavigationIncrementLink
    * [WICKET-2039] - Fragment#getAssociatedMarkupStream() doesn't look for Parent in the proper way
    * [WICKET-2040] - Wrong log message text in RequestCycle#prepare
    * [WICKET-2042] - CryptedUrlWebRequestCodingStrategy produces Sessions on stateless pages
    * [WICKET-2043] - Tab (\t) character in a DropDownChoice value causes the returned selected value to be null
    * [WICKET-2044] - MarkupContainer - Method-variable children was stepping-on/masking the global-variable children
    * [WICKET-2045] - FileUploadField.onDetach() causes IllegalStateException()
    * [WICKET-2047] - typo in WebPage.java
    * [WICKET-2048] - HtmlProblemFinder documentation bug
    * [WICKET-2050] - KittenCaptchaPanel generates a Ajax callback image url which potentially breaks when used in a Portlet
    * [WICKET-2057] - AjaxPreprocessingCallDecorator calls the delegate decorator before itself (same behavior as AjaxPostprocessingCallDecorator)
    * [WICKET-2063] - Wizard buttons (previous / finish) aren't enabled when they should be
    * [WICKET-2065] - Generated urls for mounted pages contain redundant trailing "/"
    * [WICKET-2067] - SmartLinkLabel does not handle ~ in urls
    * [WICKET-2069] - KittenCaptcha filter declared twice in wicket-examples web.xml
    * [WICKET-2143] - Palette in Form calls onSubmit twice, model is erased on second onSubmit

** Improvement
    * [WICKET-543] - need javadocs embedded in the Wicket 1.3 zip file
    * [WICKET-910] - Add forXXX family of factories for StringHeaderContributor too
    * [WICKET-918] - allow for pluggable javascript compression algorithms
    * [WICKET-1192] - move static factory methods off of HeaderContributer and onto related classes
    * [WICKET-1206] - Change BaseWicketTester.getTagByXXX return value from TagTester to TagTester[]
    * [WICKET-1281] - DateTextField does not use user locale for parse and display data
    * [WICKET-1367] - Not all of SignInPanel is properly localized
    * [WICKET-1380] - (Simple)AttributeModifier abuse check
    * [WICKET-1431] - Make the Source Code pages for examples stateless
    * [WICKET-1490] - Small iprovement to the Start.java generated by the maven archtype
    * [WICKET-1538] - WicketAjaxIndicatorAppender rename to AjaxIndicatorAppender
    * [WICKET-1553] - Pass the event to the event handler in HeaderResponse.renderOnEventJavascript
    * [WICKET-1564] - filter-restore script-tag isn't xhtml-valid
    * [WICKET-1642] - Fix default localizations
    * [WICKET-1675] - Widen Generics for Lists/Iteratos
    * [WICKET-1763] - GuiceComponentInjector overhead for non-injectable Components
    * [WICKET-1784] - Enhance IDataProvider to support applications using the Transfer Object J2EE pattern
    * [WICKET-1850] - UrlValidator disallow http://user:password@host:port/path urls
    * [WICKET-1860] - Please provide Model.valueOf(java.util.Set)
    * [WICKET-1893] - Extend FormTester to easily handle CheckBox components.
    * [WICKET-1910] - ServletWebRequest.isAjax Should be cached
    * [WICKET-1913] - Upgrade spring dependency to 2.5.6
    * [WICKET-1921] - Add an extension of AutoCompleteTextField which includes default css
    * [WICKET-1929] - PagingNavigator.newPagingNavigationIncrementLink and PagingNavigator.newPagingNavigationLink should return AbstractLink
    * [WICKET-1938] - Use XMLUnit for framework tests
    * [WICKET-1941] - Add getter and setter for data provider to AjaxFallbackDefaultDataTable
    * [WICKET-1946] - Please make RequestLogger.log(RequestData, SessionData) protected
    * [WICKET-1962] - setters on FeedbackPanel do not return self, which prevents chaining
    * [WICKET-1982] - Palette's AbstractOptions should localize values as AbstractChoice does
    * [WICKET-1984] - MarkupContainer's add(final Component child) does not initially check for a child null reference
    * [WICKET-1986] - MarkupContainer's addOrReplace(final Component child) does not initially check for a child null reference
    * [WICKET-2018] - Buttom subclasses getForm with a different sematic
    * [WICKET-2020] - Callback after detaching the page but before the PageMap lock is released
    * [WICKET-2023] - Allow extending SmartLinkMultiLineLabel (remove 'final')
    * [WICKET-2028] - New Russian Application.property file

** New Feature
    * [WICKET-1584] - FragmentColumn
    * [WICKET-1610] - Kitten authentication
    * [WICKET-1666] - contribution: provide indexed urls for shared resources (with optional query string parameters)
    * [WICKET-1900] - Implement isEscapeLabalMarkup for RadioChoice
    * [WICKET-1917] - Automatically Load CSS files based on name matching
    * [WICKET-1918] - Automatically Load JavaScript files based on name matching

** Task
    * [WICKET-1993] - remove eclipse settings from svn

** Wish
    * [WICKET-1966] - Autocomplete assumes there will be other parameters in the callback url when appending its query


Release Notes - Wicket - Version 1.4-RC1

** Sub-task
    * [WICKET-1624] - ServletWebRequest.getRelativePathPrefixToContextRoot() double decodes servlet path
    * [WICKET-1805] - Allow to change charset in StringRequestTarget: change CharSet used by the OutStream as well

** Bug
    * [WICKET-550] - Use WebRequestEncoder everywhere a query string is constructed
    * [WICKET-861] - NumberFormatException with UrlCompressingWebRequestProcessor in WicketTester
    * [WICKET-1120] - Problem closing a ModalWindow when used through an IFrame
    * [WICKET-1180] - Converters : final vs non final
    * [WICKET-1220] - Component.visitParents visits the calling component as well
    * [WICKET-1311] - Improper HTML escaping for most wicket components and extensions
    * [WICKET-1376] - Using AbstractAjaxTimerBehavior and mounting that page gives exception
    * [WICKET-1425] - appendToInit() method is not called in class DatePicker
    * [WICKET-1436] - Unable to use properties file when generating XML files
    * [WICKET-1496] - DataTable.html does not validate (HTML 4.01/XHTML-Strict)
    * [WICKET-1535] - ExternalLink JavaScript not working in FF 3
    * [WICKET-1565] - AbstractTransformerBehavior can't be added to a page
    * [WICKET-1582] - WicketTester executeAjaxEvent onclick generating non-AJAX response
    * [WICKET-1583] - NPE in EnclosureResolver
    * [WICKET-1627] - AbstractRequestTargetUrlCodingStrategy improper user of URLEncoder.encode
    * [WICKET-1634] - ClassName needs conversion from Path to dotted notation in AutoLinkResolver
    * [WICKET-1648] - AbstractRequestTargetUrlCodingStrategy(line 174) throws confusing exception. It would be better redirect to 404-page in this case. 
    * [WICKET-1652] - Hard-coded quotes in xml prologue
    * [WICKET-1704] - ResourceStreamRequestTarget.configure set wrong ContentLength for non-ascii characters
    * [WICKET-1719] - StringResourceModel may fail to format numbers using MessageFormat
    * [WICKET-1728] - remove obsolete check from LocalizedImageResource
    * [WICKET-1730] - RfcCompliantEmailAddressValidator accepts whitespace and tab
    * [WICKET-1731] - When used in inherited markup, <wicket:link> tries to load a class with an illegal name
    * [WICKET-1736] - Allow Access to AutoCompleteTextField AutoCompleteBehavior
    * [WICKET-1737] - wicketTester does not find HTML mark-up if custom location is used.
    * [WICKET-1740] - RequestCycle.urlFor modifies page parameters
    * [WICKET-1745] - Get rid of raw Model usage
    * [WICKET-1746] - gecko: ajax javascript reference rendering problem
    * [WICKET-1754] - form action URLs in non-Wicket forms not rewritten
    * [WICKET-1755] - In html Include component isAbsolute method returns false for an absolute path in unix-like systems 
    * [WICKET-1756] - Generify PropertyColumn
    * [WICKET-1759] - Typo in method name: AttributeModifier#replaceAttibuteValue
    * [WICKET-1765] - Extending from org.apache.wicket.Page causes StackOverflowError
    * [WICKET-1776] - Quickstart's archetype misses maven compiler configuration
    * [WICKET-1777] - Overflow when setting Expires header in WebResource 
    * [WICKET-1780] - NPE in feedback panel
    * [WICKET-1787] - AjaxSubmitLink in Internet Explorer does not work with Wicket's automatically genreated id's
    * [WICKET-1788] - "Invalid procedure call or argument" on AJAX call with IE7
    * [WICKET-1789] - Border fails to render if its contents are not visible by default
    * [WICKET-1796] - When markup type is XML, getLocalizer().getString( "xyz", (WebPage) ) throws Exception
    * [WICKET-1797] - Bug with default RadioChoice "for" attribute on label generation.
    * [WICKET-1799] - wicket-extensions has unused reference to commons-collections.jar
    * [WICKET-1809] - wicket does not compile for 1.3.x because of method usage > jdk 1.4
    * [WICKET-1816] - Wicket 1.3.4 violates servlet standard, Glassfish spews warnings
    * [WICKET-1818] - wicket:id attribute with a value containing spaces generates invalid markup
    * [WICKET-1820] - Embedded forms do not support multipart
    * [WICKET-1829] - MarkupComponentBorder skips first tag in MarkupStream
    * [WICKET-1834] - Invalid Cookie Names for persistence used according to RFC (doesn't work in tomcat 6.x)
    * [WICKET-1836] - RequestUtils.toAbsolutePath() should handle dot paths in the url
    * [WICKET-1839] - IAjaxIndicatorAware/WicketAjaxIndicatorAppender with AutoCompleteTextField doesn't work
    * [WICKET-1843] - Disabling RadioGroup via authorization strategy does not disable contained Radio buttons
    * [WICKET-1846] - Dutch text message for NumberValidator incorrect
    * [WICKET-1857] - Unfound markup information is not entirely cached even in deployment mode
    * [WICKET-1870] - MinimumLengthValidator throws NullPointerException
    * [WICKET-1901] - Spelling error in fonts list in CaptchaImageResource
    * [WICKET-1903] - RadioChoice disable certain choice bug
    * [WICKET-1904] - CheckBox incorrectly converts its model value when a custom Boolean converter is installed - again

** Improvement
    * [WICKET-1055] - Add ability to have Radio and RadioGroup not related via component hierarchy
    * [WICKET-1103] - Support validator and package level resource bundles
    * [WICKET-1115] - DownloadLink fix that encodes non-ASCII file names properly
    * [WICKET-1138] - Better warning of design errors during development
    * [WICKET-1692] - on Java 6+ DatePicker.localize should use DateFormatSymbols.getInstance(Locale) instead of new DateFormatSymbols(Locale)  to support DateFormatSymbolsProviders
    * [WICKET-1696] - CaptchaImageResource - should take an IModel<String> instead of String for captcha-text
    * [WICKET-1744] - RadioChoice ,  MultiListChoice, DropDownChoice,  ListChoice - model handlers should take a Collection<T> instead of the more specific List<T> 
    * [WICKET-1748] - 304 Last Modified responses should include an Expires header
    * [WICKET-1749] - Want to add SignInPanel_ja.html
    * [WICKET-1753] - Allow WicketFilter to be configured to skip certain paths
    * [WICKET-1767] - Protection against Session Fixation
    * [WICKET-1770] - PagingNavigation's javadoc contains malformed html snippet
    * [WICKET-1782] - Protection against CSRF (cross-site request forgery) attacks
    * [WICKET-1801] - Make AbstractDefaultAjaxBehavior.findIndicatorId() protected
    * [WICKET-1802] - Propertyresolver could be more informative
    * [WICKET-1810] - StringRequestTarget is bloated and needs some care
    * [WICKET-1824] - AbstractDecimalConverter
    * [WICKET-1830] - Include Component Path in Generated Markup
    * [WICKET-1833] - Ungenerifying IConverter, because overriding Component.getConverter() generated warnings in user code
    * [WICKET-1844] - Wizard button implementations should not be final
    * [WICKET-1853] - Wicket should allow non-formcomponents to plug into form's FormComponent#updateModel event
    * [WICKET-1854] - What's the point of requiring IConverters to be superclasses of the objects they convert?
    * [WICKET-1891] - AjaxLazyLoadPanel shouldn't call getLoadingComponent(String) in constructor
    * [WICKET-1895] - AjaxButton should have a constructor to set the label

** New Feature
    * [WICKET-1720] - Add clearLocalizerCache to Application JMX bean
    * [WICKET-1877] - Provide Option to Specify XML Attribute Name in getDebugSettings().setOutputComponentPath(true); 		

** Wish
    * [WICKET-1758] - Make DiskPageStore#getSessionFolder protected (rather than private)


Release Notes - Wicket - Version 1.4-M3

** Bug
    * [WICKET-613] - Prototype scoped Spring beans
    * [WICKET-1389] - Tests fail due to different order of attributes (under Java 6)
    * [WICKET-1473] - BaseWicketTester.isComponentOnAjaxResponse() test is too strong
    * [WICKET-1544] - Update Javadoc for AbstractValidator
    * [WICKET-1547] - Add getterfor IPageable to PagingNavigation
    * [WICKET-1636] - WebPage.onAfterRender compares configurationType String using ==  operator, not equals method
    * [WICKET-1643] - Bookmarkable / Stateless form submit bug
    * [WICKET-1645] - Syntactic errors in the manifest OSGi headers
    * [WICKET-1646] - AjaxFormComponentUpdatingBehavior not working correctly when using IE 7
    * [WICKET-1658] - WicketTester#clickLink doesn't update lastRenderedPage
    * [WICKET-1659] - Prolem with 'mouseactive' in wicket-autocomplete.js when AutoCompleteBehaviour is added (twice) during Ajax roundtrip
    * [WICKET-1667] - Memory leak in Localizer
    * [WICKET-1669] - TimeFrame.equals(Object)  does not work as expected
    * [WICKET-1670] - Time.valueOf() does not clear miliseconds
    * [WICKET-1676] - NPE in BookmarkablePageRequestTarget
    * [WICKET-1682] - HtmlHandler can't handle tags not requiring closed tags if the tag names are uppercase
    * [WICKET-1684] - FileUploadField should return FileUpload as its converted input
    * [WICKET-1694] - wicket complains that ValueMap$NullSafeKeyComparator is not serializable
    * [WICKET-1695] - IValueMap redefines methods from parent interface Map<String, Object> which causes name clashes and redundancy
    * [WICKET-1697] - Bad caching in <wicket:message> tag for the same key in same markup structure
    * [WICKET-1699] - NPE in RequestLogger
    * [WICKET-1701] - org.apache.wicket.markup.html.CompressedPackageResource$CompressingResourceStream.cache needs to avoid being serialized
    * [WICKET-1705] - GuiceComponentInjector mishandles static fields
    * [WICKET-1706] - org.apache.wicket.util.lang.Objects.convertValue returns null if it cannot convert the value
    * [WICKET-1713] - ModalWindow JavaScript does not restore tabIndexes correctly on IE 6
    * [WICKET-1714] - PackagedTextTemplate does not load resource from application resource stream locator
    * [WICKET-1715] - Generified SimplePageAuthorizationStrategy violates its contract
    * [WICKET-1724] - Clicking on AjaxLink (when used on a page mounted through QueryStringUrlCodingStrategy) after session-expiry throws a NullPointerException in IE and Safari (i.e. in BookmarkableListenerInterfaceRequestTarget.processEvents)

** Improvement
    * [WICKET-488] - Allow more complex behaviour for AutoCompleter component
    * [WICKET-1592] - html.form.Form object should have method to obtain all FormValidator objects associated with
    * [WICKET-1622] - expose the IItemFactory in RefreshingView
    * [WICKET-1657] - AjaxFallbackDefaultDataTable gives misleading error when fragment markup cannot be found
    * [WICKET-1662] - org.apache.wicket.util.resource.IResourceStream extends java.io.Closeable
    * [WICKET-1668] - Application_es.properties (added translations)
    * [WICKET-1702] - WicketMessageResolver should use application settings instead of a static property to configure its behavior
    * [WICKET-1708] - Allow the module init parameter to contain multiple class names
    * [WICKET-1709] - Allow configuration of the guice Stage for GuiceWebApplicationFactory
    * [WICKET-1711] - Improve Locale fallback in BundleStringResourceLoader
    * [WICKET-1723] - Drop type parameter from Component while preserving it in IModel and specific Component subtypes

** New Feature
    * [WICKET-1428] - AutoLinkResolver and Parent-Relative (../) Links
    * [WICKET-1534] - Allow multiple URL coding strategies on the same mount path
    * [WICKET-1716] - make autocompleter more customizable


Release Notes - Wicket - Version 1.4-M2

** Bug
    * [WICKET-1152] - MetaDataRoleAuthorizationStrategy.unauthorize() doesn't work
    * [WICKET-1292] - WicketTester continueToOriginalDestination() uses application home page instead of original redictor
    * [WICKET-1366] - "ava.lang.IllegalStateException: No Page found for component" when collapsing nodes in a LinkTree
    * [WICKET-1507] - MarkupCache style/variation/locale support broken
    * [WICKET-1521] - ClassCastException in MixedUrlCodingStrategy
    * [WICKET-1527] - WicketTester can not deal with null values in page parameters
    * [WICKET-1541] - PopupSettings' windowName fixes for IE
    * [WICKET-1549] - Memory leak with PropertyResolver (in running test suites)
    * [WICKET-1560] - MarkupFragmentFinder fails on transparent resolvers within Repeaters
    * [WICKET-1569] - AjaxButton break form data when IRequestSettings.#getResponseRequestEncoding is not UTF-8.
    * [WICKET-1574] - Palette does not support ajax behavior
    * [WICKET-1575] - AjaxEventBehavior does not check for component.isEnableAllowed before adding the ajax event to the tag
    * [WICKET-1581] - AjaxEditableLabel cancel broken on Safari
    * [WICKET-1598] - Typos in JavaDoc of IMarkupResourceStreamProvider.java
    * [WICKET-1607] - addDomReadyEvent unreliable for Safari
    * [WICKET-1626] - Typo in src/main/java/org/apache/wicket/protocol/http/WebApplication.java
    * [WICKET-1635] - Stripping javascript comments and whitespace breaks application when using prototype library
    * [WICKET-1649] - Manifests use incorrect Dynamic-ImportPackage header

** Improvement
    * [WICKET-433] - improved reporting on locked page maps
    * [WICKET-1559] - Widening Generics...
    * [WICKET-1568] - contribution for wicket 1.4 generics (IConverter)
    * [WICKET-1588] - Generics for Quickstart archetype
    * [WICKET-1590] - AjaxEditableChoiceLabel ignores ChoiceRenderer in newLabel(...)
    * [WICKET-1595] - AutoCompleteTextField: Scrolling down the Choice Menu Only When the Bottom of the Menu Is Reached
    * [WICKET-1596] - New convenience methods for ValueMap (code and tests included!)
    * [WICKET-1608] - make AutoCompleteBehavior's configuration more flexible
    * [WICKET-1618] - Localizer API should be enhanced so that the cache implementation can be overwritten
    * [WICKET-1656] - serialVersionUID Errors in Eclipse
    * [WICKET-1660] - Add isVisible() method to ITab

** New Feature
    * [WICKET-1603] - pass through url coding strategy
    * [WICKET-1609] - add RedirectToExternalException
    * [WICKET-1641] - provide OSGi metadata

** Wish
    * [WICKET-1562] - Autocomplete should display the selection list even if the input field is empty

Release Notes - Wicket - Version 1.4-M1

** Sub-task
    * [WICKET-1516] - Flatten project structure
    * [WICKET-1517] - Update release script
    * [WICKET-1523] - Update README

** Bug
    * [WICKET-1371] - wicket.properties cannot be found in OSGi
    * [WICKET-1418] - org.apache.wicket.MarkupContainer swallows AbortException
    * [WICKET-1496] - DataTable.html does not validate (HTML 4.01/XHTML-Strict)
    * [WICKET-1499] - AjaxEditableMultiLineLabel + race condition / 
    * [WICKET-1501] - MarkupCache.putIntoCache doesn't behave correctly!!
    * [WICKET-1504] - AutoCompleteTextField - javascript error "type mismatch" in line 227 in IE
    * [WICKET-1508] - EmptyStackException parsing HTML
    * [WICKET-1512] - Widen Generics for Lists/Iteratos
    * [WICKET-1514] - DataView generified
    * [WICKET-1532] - Generified IConverter
    * [WICKET-1536] - Enclosure permanently hides direct children after it has been itself hidden once
    * [WICKET-1537] - SelectOption generates non xhtml compliant markup
    * [WICKET-1548] - PagingNavigator calls factory methods from constructor
    * [WICKET-1551] - javascript status variable hides the window.status variable because it is not declared as a far in wicket-ajax.js

** Improvement
    * [WICKET-1344] - BigDecimalConverter is not precise
    * [WICKET-1427] - make setAfter/BeforeDisabledLink return "this" for chaining
    * [WICKET-1509] - Add QueryString property to RequestParameters and Request 
    * [WICKET-1524] - Disable javadoc plugin in regular build to make it faster

** New Feature
    * [WICKET-1486] - Allow child components inside of wicket:message
    * [WICKET-1505] - Package level properties file

** Task
    * [WICKET-1522] - Merge wicket-spring and wicket-spring-annot

** Wish
    * [WICKET-1506] - More Generics (IBookmarkablePageRequestTarget)



