The imperative scheduled task related to checking infraction expire dates doesn't have access to the system object, and thus should be careful with MID and timeformat(). I never noticed this error before because it was probably triggered before the error handler was rerouted, but it showed up (everytime the task was called) in my error.log file, so here we are, a fix. (ManageInfractions.php, Subs.php)

PHP 5.4 adds some nice JSON conversion constants, so I'm making use of them now, to remove an ugly str_replace and make integer output less verbose. (Subs.php)

While I no longer use a proxy, I've established that the most useful IP data to be recorded is the one discovered through the proxy's special headers. If nothing was found (e.g. no proxy), that data will be the same as usual anyway... Way, way more useful for most tasks. (Class-System.php)

Removed my very own sticky positioning polyfill. Why? Chrome recently added proper support for 'position: fixed', and I figured it would mean 90% of users would no longer need a polyfill. Older browsers will simply do without it, it's not a deal breaker anyway. Rest in peace polyfill, I was proud of you. (topic.js)

Make sure search engines can't see context menus, even if some items remain for guests. This makes for uncomfortable pseudo-URLs that get parsed for no reason... Also, more array() to [] conversions. (Display.php)

Fixed error handling to use proper PHP logic for error constants, rather than the weird situation it was in in SMF... It was very old code, I reckon. Not finished with it though, I've got a better version live at Lestrades.com but I need to test it further. (Errors.php)

Added support for MySQL strict mode -- more specifically, the ability to disable it through a global variable. I wrote that for a previous server, and never bothered to commit it because I didn't need it anymore by the time I was committing everything. But still, can be useful to some... I know I wasted a few hours on that one..! (Class-DB.php)

Wrote a better, more self-explained version of invertAll() (kept the silly name though, for compatibility reasons), where it's made more explicit what the function does, *and* it now also ensures that events linked to those checkboxes are called as needed. (script.js)

Tweaked notification popup code to accomodate for any custom changes to the notification button HTML. I know it helped me. Also various additions and fixes that I won't bother listing. (script.js)

Reduced length of some select box strings. The idea is, you only need to escape the "<" sign... Everything else is fair game. As a result, the new stuff is more readable, and shorter of course. I always go for shorter. (script.js)

Found another occurrence of a Yahoo bot being rejected for not being of the allowed IP ranges, even though it was obviously a Yahoo IP range (probably set up after Bad Behavior last updated its ranges). Because of that, and BB's last version being from a year ago, I've decided to disable all tests against bots (Yahoo!, MSN, Google, even Baidu for some reason). Wedge's security is good enough to reject all bot attempts, it doesn't need an extra layer that may actually reject legit bots and thus hurt your rankings. (Security.php)

(Sorry about the mess in the history log; I committed as planned, but pushed by mistake and then tried to cancel it partway through uploading, got an error message, panicked and made it worse. Git can sometimes be convoluted.)