FOFTable::store() ignores any database errors which may occur while a record is being saved to the database (e.g. failure to satisfy a database constraint)
Optimisation of FOFTable::getTableFields to reduce number of queries on repeated calls from different FOFTable object instances
FOFController now works with Joomla! caching
FOFController plugin event calls were broken
Documentation in DocBook XML format
Illustration in the documentation
Project management stuff regarding documentation PDF generation
Caching of table list and table fields to reduce the number of queries of FOF-powered components
Performance killer: calling FOFModel::getTotal() multiple times results in unnecessary queries when its result is zero.
Performance killer: calling FOFModel::getTotal() multiple times results in unnecessary queries when its result is zero.
Notices thrown if a FOFTable specialised class was created directly, without going through getAnInstance
FOFTable::getData() was broken
Fixes gh-82

The problem was caused by the way the table field caching works. When the cache is unserialised it creates associative arrays instead of objects. With the small change I made, FOFTable::getTableFields now always returns an object, as it is supposed to do.
Fixes gh-82

Like, for real this time.
Fixes gh-82

An advice people. Don't use json_encode/_decode on a hash array which contains hash arrays of objects. json_decode can create hash arrays or objects, not both.

Another advice. Don't use JRegistry, especially with the PHP format, if you want to store something complicated. Unfortunately you have no other option if you want to go through the database and you value security.

In so many words: write your own bloody cache handler and don't do what I had to do over here.
Fixed gh-83 Lack of adequate caffeine leads to silly typos in the code

Thank you, Jurian!
I had broken the table field cache, again
Notices thrown when trying to get the fields of inexistent tables.
Implemented the clearCache method to clear FOF's cache
FOFStringUtils::toSlug() should allow the use of underscore characters