* Disburdened constructor methods of most of the prototypes by moving most of the code to the new static add() method.
* Added temporary debugging method HopObject.confirmConstructor() to log a warning whenever a constructor is directly called – in which case it should be checked if the static add() method is to be preferred.
* Removed obsolete code in Poll.edit_action() method.
* Removed numbered, footnote-like links in most of the noficitaion messages
* Added prefix to subjects of notification mails (like “[Antville] ...”) for convenience
* Added markgettext() calls for most of the prototype names and their plural forms – this time in each corresponding prototype file, though
* Added options argument to global sendMail() method, currently only to switch inclusion of generic footer in mail body
* Fix bug in Membership.contact_action() method when an unknown (i.e. unregistered or unsubscribed) user tries to send a message via contact form
* Unified naming of notify skins (e.g. #notify_delete instead of #notify_deletion)
* Updated and rebuilt i18n and message files
* Added markgettext_macro()
* Readjusted Admin.dropdown_macro() and the global defineConstants() methods to work with the modified markgettext() calls
* Updated Members.properties and added SQL patch for lowercasing all membership status due to the modified margettext() calls
* Added Membership.role_macro() as convenience method
* Removed syntactic sugar from HopObject.link_macro() and moved it to the compatibility layer to prevent current layouts from breaking
* Removed obsolete permission for non-existing Image.replace_action()
* Refactored and unified remove() methods and calls for greater flexibility as well as reliability
* Added option to remove all comments by a user to Comment.remove() method and $Comment#delete skin
* Added global #listItemFlag skin as well as listItemFlag_macro() for rendering vertically written text of items in a list view (e.g. closed)
* Fixed bug in gettext_macro() and ngettext_macro() causing incorrect whitespace
* Refactored timezone and locale handling
* Modified automatic translation of untitled links in HopObject.link_macro()
* Added honeypot to login and registration forms
* Fixed client-side JavaScript to be evaluated when login or registration form is submitted, not only when the submit button is clicked
* Removed redundant filter expression from DB mapping of Membership.images collection
* Added Membership.content collection
* Changed terminology from open to running polls, thus renaming Polls.open_action() method and Polls.open collection
* Moved a lot of CSS used in root or administration sections from Site#stylesheet to $Root#stylesheet skin
* Added Root.updateDomains() method (most likely already obsolete)
* Removed Root.processHref() method (only necessary for very advanced setup) and obsolete comments
* Fixed Root.xgettext() method to correctly read UTF-8 encoded data
* Fixed Site.deleted_macro() to return the date object for late formatting
* Refactored Site.processHref() for more convenient custom domain name mapping
* Renamed Skins.advanced_action() method to Skins.all_action()
* Removed redundant filter from Stories.comments collection
* Removed unnecessary filter from Story.comments collection
* Added second argument to HopObject.remove() method; if set to true, any object will be removed without any checks for permissions or the like
* Enhanced notfound and error screens
* Removed obsolete Image.site property
* Added missing LogEntry.remove() method
* Added Site.deleted property
* Fixed missing calls for remove() methods of some collections in Site.remove()
* Added Root#stylesheet skin for future CSS classes necessary for GUI elements
* Added missing Site.entries collection
* Removed troublesome if condition in Skin.remove()
* Generally deny access to Skin.main_action
* Added missing Skin.getFormValue() method
* Added check in Skin.update() if the Site#page skin contains the <% response.body %> macro
* Added Skins.onRequest() method checking if we are in-between two Skins objects
* Fixed name of list item skin in Poll prototype
* Fixed fallback to _id property in HopObject.macro_macro() method
* Fixed bug in Membership.getPermission() method causing a subscriber getting the "Owner is not allowed to unsubscribe" error message when trying to unsubscribe from a site
* Removed relics of tests with ColourMod jQuery plugin in Site#page skin
* Fixed condition for setting the site modification date on comment update (hopefully this is correct...)
* Replace site.lastUpdate with site.modified (still needs some more care - what do we do with lastUpdate anyway?)
* Removed obsolete skin files (ie. content moved to the protected skin file)
* Moved contents of Messages.skins to their protected siblings
* Prefixed notification skins (used in e-mails) with "notify_"
* Fixed and simplified a whole bunch of issues in compatibility layer
* Refactored Poll and Polls prototypes (still not really happy)
* Fixed sorting of sites in Root.updates_xml_action()
* Allowed access to debug_action in Root
* Disabled file tags for now
* Renamed global renderPageNavigation() method to renderPager()
* Added support for rendering the list of updated sites in global list_macro()
* Fixed return point when cancelling a file edit action
* Fixed nasty bug in deletion routine
* Implemented sorting of values in Layout.values_macro()
* Disabled layout title, description, origin and sharing for now
* Renamed list_action() to sites_action() in Root prototype
* Enabled filter of root site in default collection
* Moved Root's list.skin as subskin in Root.skin
* Added experimental Root.search_xml_action()
* Renamed "unpublish" link to "close" in Story list
* Reduced display of backlinks to last 24 hours
* Removed obsolete skin files
* Added encoding="form" parameter to most of the macros using the request handler
* Renamed commentsMode to commentMode (comments_mode to comment_mode in DB)
* Reactivated notifications in a simplified manner
* Throw an error in global sendMail() method if arguments are not sufficient
* Added HopObject.notify() method
* Added HopObject.kind_macro() method (provides the constructor's name in lowercase)
* Added Messages.skin containing subskins suited for e-mail output
* Removed obsolete skin files
* Added reset_action() method for resetting a user's password to Members prototype
* Added require() method to Membership prototype; wrapped static require() method around it
* Added Membership.notify() method which does all the member-related notification stuff
* Send notification on membership removal
* Fixed contact form in Membership prototype
* Dropped e-mail property from Site prototype (users can be contacted via Membership.contact_action(), Root prototype has extra e-mail property)
* Added missing getPermission() method to User prototype, always requiring a privileged user
* Changed order of filters in collection handlers (member items go first, all items last)
* Fixed global file_macro and image_macro methods
* Reactivated Images.Default
* Added Layout.value_macro to allow per request definitions of variables for the CSS stylesheet (still experimental)
* Finally removed PropertyMgr (replaced by Metadata)
* Renamed a bunch of collections, mountpoints and variables
* Reduced commentsMode options to "enabled" and "disabled" in Site prototype
* Renamed "shared" mode to "restricted" in Site prototype
* Moved a lot of stuff into the compatibility module
* Renamed PollMgr to Polls
* Removed graph.skin from Choice prototype
* Improved Choice skins by replacing param with choice handlers
* Unified output of Choice totals in choice.votes_macro
* Moved creation of new choices to client-side JavaScript
* Added labels for radiobuttons
* Added HopObject.radiobutton_macro
* Cache / reset status of story when rotating