3 - New: Added BSTemplate::__toString() to evaluate the template
7 - New: BSFunctions::bool_to_string() to convert a boolean value into human-readable Yes/No
8 - Change: BSTemplate::flush() will no longer insert debug blocks, but BSTemplate::get_debug_block() can be used to retrieve it
9 - Change: BSTemplate now uses the full file path when caching templates, rather than just the name
10 - Change: BSDecorator fixes based on real-world usage
14 - New: Decorator.css.php and Decorator.js to be used to create HTML templates with standard formatting
15 - Removed: BSPrinter* and all its variants have been removed, use Decorator+Template instead
19 - Fixed: BSPrinterRootForm's marked as ::setUpload() would not have the right enctype set
20 - New: BSApi::reset() will reset the object back to an initial state with only the key field still set
21 - New: BSApi::fetchValue() will return the value of a given field from either ->record[] or ->values[]
25 - Fixed: BSDb::query() would not generate a Result object for explain, show, and describe queries
26 - Change: Change BSApi::remove() to be ::delete() again
30 - Fixed: BSMail::send() would fail if sending a HTML/multipart email because it would call BSFunctions::Rand()
31 - Fixed: BSMail::send() would not send HTML emails due to a caps typo in the $sendHtml param
32 - Change: BSMail::send() now labels iteslf in its BSApp::debug() messages
36 - Change: BSPrinterElementTable:__construct() can now take straight strings and convert them into BSPrinterElementLabel's
37 - Change: Removed the text indent on .input elements in BSPrinter
38 - New: BSPrinterRootPage::setHeaderCode() allows injecting in between the <head> tag of the root page element (creates BSPrinterRootPage::$headerCode)
39 - New: BSPrinterAbstract::setId() allows all elements to have an id attribute added in _prepareStyle()
40 - New: Added an ability to quick-set API information via an array with BSApi::setArray()
41 - New: Made many private members protected or public
42 - Change: Added BSPrinterAbstract::__toString() that merely calls paint()
43 - Change: BSTemplate is completely redone
44 - New: Implement Iterator in BSDBResult
45 - New: In the BSTemplate::$preParseHook method, the second parameter will be the BSTemplate object itself
46 - New: Add BSTemplate::$globalVars to be substituted into every template
47 - Change: BSTemplate will better detect parse errors in nested templates in BSTemplate::evaluate()
48 - Change: ApiException will now report all of its messages in ::getMessage()
49 - New: Added BSExceptionHandler to handle all exceptions in a pretty fasion