From 886d3459eb15f9bc6b15051b2fe2d3605c19a5d4 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Roland=20H=C3=A4der?= <roland@mxchange.org>
Date: Sun, 28 Sep 2008 23:53:57 +0000
Subject: [PATCH] Code base synced, updated

---
 .gitattributes                                |   10 +-
 application/mxchange/init.php                 |   11 +-
 .../class_FrameworkDatabaseInterface.php      |   12 -
 .../main/class_BaseFrameworkSystem.php        |   26 +-
 .../web/class_WebLoginFailedCommand.php       |    3 +
 .../commands/web/class_WebLogoutCommand.php   |   86 ++
 .../web/class_WebLogoutDoneCommand.php        |    3 +
 .../web/class_WebLogoutController.php         |   82 ++
 .../main/criteria/class_SearchCriteria.php    |    4 +-
 .../databases/class_LocalFileDatabase.php     |   96 +-
 inc/classes/main/images/class_BaseImage.php   |   10 +-
 .../main/images/extended/class_PngImage.php   |    6 +
 .../main/mailer/debug/class_DebugMailer.php   |    4 +-
 .../main/output/class_ConsoleOutput.php       |    2 +-
 .../main/request/class_HttpRequest.php        |    5 +-
 .../action/class_BaseActionResolver.php       |    3 -
 .../command/class_BaseCommandResolver.php     |    3 -
 .../class_BaseControllerResolver.php          |    3 -
 .../image/class_ImageControllerResolver.php   |    3 -
 .../web/class_WebControllerResolver.php       |    3 -
 .../main/response/class_BaseResponse.php      |  200 +++
 inc/classes/main/response/http/.htaccess      |    1 +
 .../{ => http}/class_HttpResponse.php         |  165 +--
 inc/classes/main/response/image/.htaccess     |    1 +
 .../{ => image}/class_ImageResponse.php       |  193 +--
 .../main/result/class_DatabaseResult.php      |    4 +-
 .../template/class_BaseTemplateEngine.php     |   44 +-
 .../main/template/class_TemplateEngine.php    | 1208 -----------------
 .../image/class_ImageTemplateEngine.php       |    2 +-
 .../mail/class_MailTemplateEngine.php         |    2 +-
 .../template/web/class_WebTemplateEngine.php  |    2 +-
 .../database/class_DatabaseConnection.php     |   19 -
 .../api/wernisportal/class_WernisApi.php      |    2 +-
 inc/config.php                                |   11 +-
 inc/config/class_FrameworkConfiguration.php   |   61 +-
 inc/database.php                              |   21 +-
 inc/database/lib-local.php                    |    2 +-
 inc/includes.php                              |    4 +-
 inc/language.php                              |    2 +-
 inc/loader/class_ClassLoader.php              |   12 +-
 inc/selector.php                              |    3 +-
 index.php                                     |   22 +-
 42 files changed, 541 insertions(+), 1815 deletions(-)
 create mode 100644 inc/classes/main/commands/web/class_WebLogoutCommand.php
 create mode 100644 inc/classes/main/controller/web/class_WebLogoutController.php
 create mode 100644 inc/classes/main/response/class_BaseResponse.php
 create mode 100644 inc/classes/main/response/http/.htaccess
 rename inc/classes/main/response/{ => http}/class_HttpResponse.php (60%)
 create mode 100644 inc/classes/main/response/image/.htaccess
 rename inc/classes/main/response/{ => image}/class_ImageResponse.php (65%)
 delete mode 100644 inc/classes/main/template/class_TemplateEngine.php

diff --git a/.gitattributes b/.gitattributes
index 875707fa28..963494c045 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -257,6 +257,7 @@ inc/classes/main/commands/web/class_WebHomeCommand.php -text
 inc/classes/main/commands/web/class_WebLoginAreaCommand.php -text
 inc/classes/main/commands/web/class_WebLoginCommand.php -text
 inc/classes/main/commands/web/class_WebLoginFailedCommand.php -text
+inc/classes/main/commands/web/class_WebLogoutCommand.php -text
 inc/classes/main/commands/web/class_WebLogoutDoneCommand.php -text
 inc/classes/main/commands/web/class_WebRegisterCommand.php -text
 inc/classes/main/commands/web/class_WebResendLinkCommand.php -text
@@ -286,6 +287,7 @@ inc/classes/main/controller/web/class_WebDefaultController.php -text
 inc/classes/main/controller/web/class_WebDefaultNewsController.php -text
 inc/classes/main/controller/web/class_WebLoginController.php -text
 inc/classes/main/controller/web/class_WebLoginFailedController.php -text
+inc/classes/main/controller/web/class_WebLogoutController.php -text
 inc/classes/main/controller/web/class_WebLogoutDoneController.php -text
 inc/classes/main/controller/web/class_WebRegisterController.php -text
 inc/classes/main/controller/web/class_WebStatusController.php -text
@@ -433,15 +435,17 @@ inc/classes/main/resolver/web/.htaccess -text
 inc/classes/main/resolver/web/class_WebCommandResolver.php -text
 inc/classes/main/resolver/web/class_WebControllerResolver.php -text
 inc/classes/main/response/.htaccess -text
-inc/classes/main/response/class_HttpResponse.php -text
-inc/classes/main/response/class_ImageResponse.php -text
+inc/classes/main/response/class_BaseResponse.php -text
+inc/classes/main/response/http/.htaccess -text
+inc/classes/main/response/http/class_HttpResponse.php -text
+inc/classes/main/response/image/.htaccess -text
+inc/classes/main/response/image/class_ImageResponse.php -text
 inc/classes/main/result/.htaccess -text
 inc/classes/main/result/class_DatabaseResult.php -text
 inc/classes/main/rng/.htaccess -text
 inc/classes/main/rng/class_RandomNumberGenerator.php -text
 inc/classes/main/template/.htaccess -text
 inc/classes/main/template/class_BaseTemplateEngine.php -text
-inc/classes/main/template/class_TemplateEngine.php -text
 inc/classes/main/template/image/.htaccess -text
 inc/classes/main/template/image/class_ImageTemplateEngine.php -text
 inc/classes/main/template/mail/.htaccess -text
diff --git a/application/mxchange/init.php b/application/mxchange/init.php
index 4dc2e1949a..eb2152432e 100644
--- a/application/mxchange/init.php
+++ b/application/mxchange/init.php
@@ -22,17 +22,20 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+// Get a new configuration instance
+$cfg = FrameworkConfiguration::createFrameworkConfiguration();
+
 // Initialize output system
-require(PATH . "inc/output.php");
+require($cfg->readConfig('base_path') . "inc/output.php");
 
 // Initialize file i/o system
-require(PATH . "inc/file_io.php");
+require($cfg->readConfig('base_path') . "inc/file_io.php");
 
 // Include the language sub-system
-require(PATH . "inc/language.php");
+require($cfg->readConfig('base_path') . "inc/language.php");
 
 // Get the database layer as well
-require(PATH . "inc/database.php");
+require($cfg->readConfig('base_path') . "inc/database.php");
 
 // Generate call-back function
 $callback = sprintf("%s::getInstance",
diff --git a/inc/classes/interfaces/database/class_FrameworkDatabaseInterface.php b/inc/classes/interfaces/database/class_FrameworkDatabaseInterface.php
index 846f140d04..6e3f3d6d4f 100644
--- a/inc/classes/interfaces/database/class_FrameworkDatabaseInterface.php
+++ b/inc/classes/interfaces/database/class_FrameworkDatabaseInterface.php
@@ -22,18 +22,6 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 interface FrameworkDatabaseInterface extends FrameworkInterface {
-	/**
-	 * Analyses if a unique ID has already been used or not. This method does
-	 * only pass the given ID through to the "real" database layer.
-	 *
-	 * @param	$uniqueID		A unique ID number which shall be checked
-	 *							before it will be used
-	 * @param	$inConstructor	If called from a constructor or from
-	 *							somewhere else
-	 * @return	$isUnused		true = The unique ID was not found in the database,
-	 *							false = It is already in use by an other object
-	 */
-	function isUniqueIdUsed ($uniqueID, $inConstructor = false);
 }
 
 // [EOF]
diff --git a/inc/classes/main/class_BaseFrameworkSystem.php b/inc/classes/main/class_BaseFrameworkSystem.php
index 9dd62b4f44..7e461ac820 100644
--- a/inc/classes/main/class_BaseFrameworkSystem.php
+++ b/inc/classes/main/class_BaseFrameworkSystem.php
@@ -281,7 +281,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
 
 			// Set the compressor channel
 			$this->setCompressorChannel(CompressorChannel::createCompressorChannel(sprintf("%s%s",
-				PATH,
+				$this->getConfigInstance()->readConfig('base_path'),
 				$this->getConfigInstance()->readConfig('compressor_base_path')
 			)));
 
@@ -557,25 +557,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
 		$this->realClass = $realClass;
 	}
 
-	/**
-	 * Compare if both simulation part description and class name matches
-	 * (shall be enough)
-	 *
-	 * @param	$itemInstance	An object instance to an other class
-	 * @return	boolean			The result of comparing class name simulation part description
-	 * @deprecated
-	 */
-	public function itemMatches ($itemInstance) {
-		$this->partialStub("Deprecated!");
-		return (
-			(
-				$this->__toString()   == $itemInstance->__toString()
-			) && (
-				$this->getObjectDescription() == $itemInstance->getObjectDescription()
-			)
-		);
-	}
-
 	/**
 	 * Compare class name of this and given class name
 	 *
@@ -737,8 +718,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
 		} // END - if
 
 		// Generate FQFN for all application templates
-		$fqfn = sprintf("%s%s/%s/%s",
-			PATH,
+		$fqfn = sprintf("%s%s/%s",
 			$this->getConfigInstance()->readConfig('application_path'),
 			strtolower($appInstance->getAppShortName()),
 			$this->getConfigInstance()->readConfig('tpl_base_path')
@@ -911,7 +891,7 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface {
 		} // END - if
 
 		// Add line number to the code
-		foreach (explode("\n", $phpCode) as $lineNo=>$code) {
+		foreach (explode("\n", $phpCode) as $lineNo => $code) {
 			// Add line numbers
 			$markedCode .= sprintf("<span id=\"code_line\">%s</span>: %s\n",
 				($lineNo + 1),
diff --git a/inc/classes/main/commands/web/class_WebLoginFailedCommand.php b/inc/classes/main/commands/web/class_WebLoginFailedCommand.php
index 9981133487..7c74d7bd27 100644
--- a/inc/classes/main/commands/web/class_WebLoginFailedCommand.php
+++ b/inc/classes/main/commands/web/class_WebLoginFailedCommand.php
@@ -63,6 +63,9 @@ class WebLoginFailedCommand extends BaseCommand implements Commandable {
 		// Prepare a template instance
 		$templateInstance = $this->prepareTemplateInstance($appInstance);
 
+		// Assign application data with template engine
+		$templateInstance->assignApplicationData($appInstance);
+
 		// Load the master template
 		$masterTemplate = $appInstance->getMasterTemplate();
 
diff --git a/inc/classes/main/commands/web/class_WebLogoutCommand.php b/inc/classes/main/commands/web/class_WebLogoutCommand.php
new file mode 100644
index 0000000000..e220c51474
--- /dev/null
+++ b/inc/classes/main/commands/web/class_WebLogoutCommand.php
@@ -0,0 +1,86 @@
+<?php
+/**
+ * A command for logout
+ *
+ * @author		Roland Haeder <webmaster@ship-simu.org>
+ * @version		0.0.0
+ * @copyright	Copyright (c) 2007, 2008 Roland Haeder, this is free software
+ * @license		GNU GPL 3.0 or any newer version
+ * @link		http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class WebLogoutCommand extends BaseCommand implements Commandable {
+	/**
+	 * Protected constructor
+	 *
+	 * @return	void
+	 */
+	protected function __construct () {
+		// Call parent constructor
+		parent::__construct(__CLASS__);
+	}
+
+	/**
+	 * Creates an instance of this class
+	 *
+	 * @param	$resolverInstance	An instance of a command resolver class
+	 * @return	$commandInstance	An instance a prepared command class
+	 */
+	public final static function createWebLogoutCommand (CommandResolver $resolverInstance) {
+		// Get new instance
+		$commandInstance = new WebLogoutCommand();
+
+		// Set the application instance
+		$commandInstance->setResolverInstance($resolverInstance);
+
+		// Return the prepared instance
+		return $commandInstance;
+	}
+
+	/**
+	 * Executes the given command with given request and response objects
+	 *
+	 * @param	$requestInstance	An instance of a class with an Requestable interface
+	 * @param	$responseInstance	An instance of a class with an Responseable interface
+	 * @return	void
+	 */
+	public function execute (Requestable $requestInstance, Responseable $responseInstance) {
+		// Get an auth instance for checking and updating the auth cookies
+		$authInstance = ObjectFactory::createObjectByConfiguredName('auth_method_class', array($responseInstance));
+
+		// Set request instance
+		$authInstance->setRequestInstance($requestInstance);
+
+		// Destroy the auth data
+		$authInstance->destroyAuthData();
+
+		// Redirect to "logout done" page
+		$responseInstance->redirectToConfiguredUrl('logout_done_url');
+	}
+
+	/**
+	 * Adds extra filters to the given controller instance
+	 *
+	 * @param	$controllerInstance		A controller instance
+	 * @param	$requestInstance		An instance of a class with an Requestable interface
+	 * @return	void
+	 */
+	public function addExtraFilters (Controller $controllerInstance, Requestable $requestInstance) {
+		// Empty for now
+	}
+}
+
+// [EOF]
+?>
diff --git a/inc/classes/main/commands/web/class_WebLogoutDoneCommand.php b/inc/classes/main/commands/web/class_WebLogoutDoneCommand.php
index 15ecb70688..bbb7f2f702 100644
--- a/inc/classes/main/commands/web/class_WebLogoutDoneCommand.php
+++ b/inc/classes/main/commands/web/class_WebLogoutDoneCommand.php
@@ -63,6 +63,9 @@ class WebLogoutDoneCommand extends BaseCommand implements Commandable {
 		// Prepare a template instance
 		$templateInstance = $this->prepareTemplateInstance($appInstance);
 
+		// Assign application data
+		$templateInstance->assignApplicationData($appInstance);
+
 		// Load the master template
 		$masterTemplate = $appInstance->getMasterTemplate();
 
diff --git a/inc/classes/main/controller/web/class_WebLogoutController.php b/inc/classes/main/controller/web/class_WebLogoutController.php
new file mode 100644
index 0000000000..00b020a1df
--- /dev/null
+++ b/inc/classes/main/controller/web/class_WebLogoutController.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * The default controller for logout page
+ *
+ * @author		Roland Haeder <webmaster@ship-simu.org>
+ * @version		0.0.0
+ * @copyright	Copyright (c) 2007, 2008 Roland Haeder, this is free software
+ * @license		GNU GPL 3.0 or any newer version
+ * @link		http://www.ship-simu.org
+ * @todo		This controller shall still provide some headlines for sidebars
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+class WebLogoutController extends BaseController implements Controller {
+	/**
+	 * Protected constructor
+	 *
+	 * @return	void
+	 */
+	protected function __construct () {
+		// Call parent constructor
+		parent::__construct(__CLASS__);
+	}
+
+	/**
+	 * Creates an instance of this class
+	 *
+	 * @param	$resolverInstance		An instance of a command resolver class
+	 * @return	$controllerInstance		A prepared instance of this class
+	 */
+	public final static function createWebLogoutController (CommandResolver $resolverInstance) {
+		// Create the instance
+		$controllerInstance = new WebLogoutController();
+
+		// Set the command resolver
+		$controllerInstance->setResolverInstance($resolverInstance);
+
+		// Add user auth filter (we don't need an update of the user here because it will be redirected)
+		$controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('user_auth_class'));
+
+		// User status filter
+		$controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('user_status_class'));
+
+		// Return the prepared instance
+		return $controllerInstance;
+	}
+
+	/**
+	 * Handles the given request and response
+	 *
+	 * @param	$requestInstance	An instance of a request class
+	 * @param	$responseInstance	An instance of a response class
+	 * @return	void
+	 */
+	public function handleRequest (Requestable $requestInstance, Responseable $responseInstance) {
+		// Get the command instance
+		$commandInstance = $this->getResolverInstance()->resolveCommandByRequest($requestInstance);
+
+		// This request was valid! :-D
+		$requestInstance->requestIsValid();
+
+		// Execute the command
+		$commandInstance->execute($requestInstance, $responseInstance);
+
+		// Flush the response out
+		$responseInstance->flushBuffer();
+	}
+}
+
+// [EOF]
+?>
diff --git a/inc/classes/main/criteria/class_SearchCriteria.php b/inc/classes/main/criteria/class_SearchCriteria.php
index b9f27db7b0..c95d853bfd 100644
--- a/inc/classes/main/criteria/class_SearchCriteria.php
+++ b/inc/classes/main/criteria/class_SearchCriteria.php
@@ -188,9 +188,9 @@ class SearchCriteria extends BaseFrameworkSystem implements LocalSearchCriteria
 		$counted = 0;
 
 		// Walk through all entries
-		foreach ($entryArray as $key=>$entry) {
+		foreach ($entryArray as $key => $entry) {
 			// Then walk through all search criteria
-			foreach ($this->searchCriteria as $criteriaKey=>$criteriaValue) {
+			foreach ($this->searchCriteria as $criteriaKey => $criteriaValue) {
 				// Is the element found and does it match?
 				if (($key == $criteriaKey) && ($criteriaValue == $entry)) {
 					// Then count this one up
diff --git a/inc/classes/main/database/databases/class_LocalFileDatabase.php b/inc/classes/main/database/databases/class_LocalFileDatabase.php
index 69ce662f9e..25cf9389f6 100644
--- a/inc/classes/main/database/databases/class_LocalFileDatabase.php
+++ b/inc/classes/main/database/databases/class_LocalFileDatabase.php
@@ -150,96 +150,6 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
 		return $this->lastException;
 	}
 
-	/**
-	 * Analyses if a unique ID has already been used or not by search in the
-	 * local database folder.
-	 *
-	 * @param	$uniqueID		A unique ID number which shall be checked
-	 *							before it will be used
-	 * @param	$inConstructor	If we got called in a de/con-structor or
-	 *							from somewhere else
-	 * @return	$isUnused		true	= The unique ID was not found in the database,
-	 *							false = It is already in use by an other object
-	 * @throws	NoArrayCreatedException		If explode() fails to create an array
-	 * @throws	InvalidArrayCountException	If the array contains less or
-	 *									more than two elements
-	 * @deprecated
-	 */
-	public function isUniqueIdUsed ($uniqueID, $inConstructor = false) {
-		// Currently not used... ;-)
-		$isUsed = false;
-
-		// Split the unique ID up in path and file name
-		$pathFile = explode("@", $uniqueID);
-
-		// Are there two elements? Index 0 is the path, 1 the file name + global extension
-		if (!is_array($pathFile)) {
-			// No array found
-			if ($inConstructor) {
-				return false;
-			} else {
-				throw new NoArrayCreatedException(array($this, 'pathFile'), self::EXCEPTION_ARRAY_EXPECTED);
-			}
-		} elseif (count($pathFile) != 2) {
-			// Invalid ID returned!
-			if ($inConstructor) {
-				return false;
-			} else {
-				throw new InvalidArrayCountException(array($this, 'pathFile', count($pathFile), 2), self::EXCEPTION_ARRAY_HAS_INVALID_COUNT);
-			}
-		}
-
-		// Create full path name
-		$pathName = $this->getSavePath() . $pathFile[0];
-
-		// Check if the file is there with a file handler
-		if ($inConstructor) {
-			// No exceptions in constructors and destructors!
-			$dirInstance = FrameworkDirectoryPointer::createFrameworkDirectoryPointer($pathName, true);
-
-			// Has an object being created?
-			if (!is_object($dirInstance)) return false;
-		} else {
-			// Outside a constructor
-			try {
-				$dirInstance = FrameworkDirectoryPointer::createFrameworkDirectoryPointer($pathName);
-			} catch (PathIsNoDirectoryException $e) {
-				// Okay, path not found
-				return false;
-			}
-		}
-
-		// Initialize the search loop
-		$isValid = false;
-		while ($dataFile = $dirInstance->readDirectoryExcept(array(".", "..", ".htaccess", ".svn", "info." . $this->getFileExtension()))) {
-			// Generate FQFN for testing
-			$fqfn = sprintf("%s/%s", $pathName, $dataFile);
-			$this->setLastFile($fqfn);
-
-			// Get instance for file handler
-			$inputHandler = $this->getFileIoInstance();
-
-			// Try to read from it. This makes it sure that the file is
-			// readable and a valid database file
-			$this->setLastFileContents($inputHandler->loadFileContents($fqfn));
-
-			// Extract filename (= unique ID) from it
-			$ID = substr(basename($fqfn), 0, -(strlen($this->getFileExtension()) + 1));
-
-			// Is this the required unique ID?
-			if ($ID == $pathFile[1]) {
-				// Okay, already in use!
-				$isUsed = true;
-			}
-		}
-
-		// Close the directory handler
-		$dirInstance->closeDirectory();
-
-		// Now the same for the file...
-		return $isUsed;
-	}
-
 	/**
 	 * Setter for the last read file
 	 *
@@ -475,7 +385,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
 				// Is this an array?
 				if (is_array($dataArray)) {
 					// Search in the criteria with FMFW (First Matches, First Wins)
-					foreach ($dataArray as $key=>$value) {
+					foreach ($dataArray as $key => $value) {
 						// Get criteria element
 						$criteria = $criteriaInstance->getCriteriaElemnent($key);
 
@@ -603,7 +513,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
 				// Is this an array?
 				if (is_array($dataArray)) {
 					// Search in the criteria with FMFW (First Matches, First Wins)
-					foreach ($dataArray as $key=>$value) {
+					foreach ($dataArray as $key => $value) {
 						// Get criteria element
 						$criteria = $searchInstance->getCriteriaElemnent($key);
 
@@ -621,7 +531,7 @@ class LocalFileDatabase extends BaseDatabaseFrontend implements DatabaseFrontend
 							} // END - if
 
 							// Entry found, so update it
-							foreach ($criteriaArray as $criteriaKey=>$criteriaValue) {
+							foreach ($criteriaArray as $criteriaKey => $criteriaValue) {
 								$dataArray[$criteriaKey] = $criteriaValue;
 							} // END - foreach
 
diff --git a/inc/classes/main/images/class_BaseImage.php b/inc/classes/main/images/class_BaseImage.php
index 7c1e0891cd..7f667cde4a 100644
--- a/inc/classes/main/images/class_BaseImage.php
+++ b/inc/classes/main/images/class_BaseImage.php
@@ -469,10 +469,10 @@ class BaseImage extends BaseFrameworkSystem implements Registerable {
 		$this->setBlue($blue);
 
 		// Get a pointer for background color
-		$backColor = imagecolorallocate($this->imageResource, $red, $green, $blue);
+		$backColor = imagecolorallocate($this->getImageResource(), $red, $green, $blue);
 
 		// Fill the image
-		imagefill($this->imageResource, 0, 0, $backColor);
+		imagefill($this->getImageResource(), 0, 0, $backColor);
 
 		// Compile foreground colors
 		$red   = $templateInstance->compileRawCode($this->foregroundColor['red']);
@@ -486,7 +486,7 @@ class BaseImage extends BaseFrameworkSystem implements Registerable {
 		$this->setBlue($blue);
 
 		// Get a pointer for foreground color
-		$foreColor = imagecolorallocate($this->imageResource, $red, $green, $blue);
+		$foreColor = imagecolorallocate($this->getImageResource(), $red, $green, $blue);
 
 		switch ($this->groupable) {
 			case "single": // Single image string
@@ -502,7 +502,7 @@ class BaseImage extends BaseFrameworkSystem implements Registerable {
 				$size = $templateInstance->compileRawCode($this->getFontSize());
 
 				// Set the image string
-				imagestring($this->imageResource, $size, $x, $y, $imageString, $foreColor);
+				imagestring($this->getImageResource(), $size, $x, $y, $imageString, $foreColor);
 				break;
 
 			case "groupable": // More than one string allowed
@@ -521,7 +521,7 @@ class BaseImage extends BaseFrameworkSystem implements Registerable {
 
 					// Set the image string
 					//* DEBUG: */ echo __METHOD__.": size={$size}, x={$x}, y={$y}, string={$imageString}<br />\n";
-					imagestring($this->imageResource, $size, $x, $y, $imageString, $foreColor);
+					imagestring($this->getImageResource(), $size, $x, $y, $imageString, $foreColor);
 				} // END - foreach
 				break;
 		}
diff --git a/inc/classes/main/images/extended/class_PngImage.php b/inc/classes/main/images/extended/class_PngImage.php
index f8ee28b8f5..8b0332099f 100644
--- a/inc/classes/main/images/extended/class_PngImage.php
+++ b/inc/classes/main/images/extended/class_PngImage.php
@@ -64,6 +64,12 @@ class PngImage extends BaseImage {
 		// Get a file name for our image
 		$cacheFile = $this->getTemplateInstance()->getImageCacheFqfn();
 
+		// Does it exist?
+		if (file_exists($cacheFile)) {
+			// Remove it
+			@unlink($cacheFile);
+		} // END - if
+
 		// Finish the image and send it to a cache file
 		imagepng($this->getImageResource(), $cacheFile, 9, PNG_ALL_FILTERS);
 	}
diff --git a/inc/classes/main/mailer/debug/class_DebugMailer.php b/inc/classes/main/mailer/debug/class_DebugMailer.php
index ffc3fc6ea8..042ee69194 100644
--- a/inc/classes/main/mailer/debug/class_DebugMailer.php
+++ b/inc/classes/main/mailer/debug/class_DebugMailer.php
@@ -85,13 +85,13 @@ class DebugMailer extends BaseMailer implements DeliverableMail {
 				$templateInstance->assignVariable('subject', $this->getSubjectLine());
 
 				// Walk through all variables, first config to assign them
-				foreach ($recipientList['config_vars'] as $variable=>$dummy) {
+				foreach ($recipientList['config_vars'] as $variable => $dummy) {
 					// Load the config value and set it
 					$templateInstance->assignConfigVariable($variable);
 				} // END - if
 
 				// Now do the same with the values but ask the "value instance" instead!
-				foreach ($recipientList['value_vars'] as $variable=>$dummy) {
+				foreach ($recipientList['value_vars'] as $variable => $dummy) {
 					// Is the value instance there?
 					if (!isset($recipientList['values'][$variable])) {
 						// Throw exception
diff --git a/inc/classes/main/output/class_ConsoleOutput.php b/inc/classes/main/output/class_ConsoleOutput.php
index b1cae5c408..bcc1fc5eb8 100644
--- a/inc/classes/main/output/class_ConsoleOutput.php
+++ b/inc/classes/main/output/class_ConsoleOutput.php
@@ -90,7 +90,7 @@ class ConsoleOutput extends BaseFrameworkSystem implements OutputStreamer {
 	public final function output ($outStream=false) {
 		if ($outStream === false) {
 			// Output something here...
-			foreach ($this->vars as $var=>$value) {
+			foreach ($this->vars as $var => $value) {
 				$this->output("var=".$var.", value=".$value."");
 			}
 		} else {
diff --git a/inc/classes/main/request/class_HttpRequest.php b/inc/classes/main/request/class_HttpRequest.php
index a046f185c6..0241cfc19f 100644
--- a/inc/classes/main/request/class_HttpRequest.php
+++ b/inc/classes/main/request/class_HttpRequest.php
@@ -72,8 +72,8 @@ class HttpRequest extends BaseFrameworkSystem implements Requestable {
 	 * @return	void
 	 */
 	public function prepareRequestData () {
-		// Copy the $_REQUEST array
-		$this->requestData = $_REQUEST;
+		// Copy GET then POST data
+		$this->requestData = array_merge($_GET, $_POST);
 	}
 
 	/**
@@ -124,6 +124,7 @@ class HttpRequest extends BaseFrameworkSystem implements Requestable {
 	 * @return	void
 	 */
 	public function setRequestElement ($element, $value) {
+		error_log(__METHOD__.":{$element}={$value}");
 		$this->requestData[$element] = $value;
 	}
 
diff --git a/inc/classes/main/resolver/action/class_BaseActionResolver.php b/inc/classes/main/resolver/action/class_BaseActionResolver.php
index 0f41a35df2..0c7f268faf 100644
--- a/inc/classes/main/resolver/action/class_BaseActionResolver.php
+++ b/inc/classes/main/resolver/action/class_BaseActionResolver.php
@@ -101,9 +101,6 @@ class BaseActionResolver extends BaseResolver {
 			$isValid = true;
 		} // END - if
 
-		// Debug output
-		//* DEBUG: */ $this->debugBackTrace();
-
 		// Set action name
 		$this->setActionName($actionName);
 
diff --git a/inc/classes/main/resolver/command/class_BaseCommandResolver.php b/inc/classes/main/resolver/command/class_BaseCommandResolver.php
index f26d351fa6..d1fa003a38 100644
--- a/inc/classes/main/resolver/command/class_BaseCommandResolver.php
+++ b/inc/classes/main/resolver/command/class_BaseCommandResolver.php
@@ -125,9 +125,6 @@ class BaseCommandResolver extends BaseResolver {
 			$isValid = true;
 		} // END - if
 
-		// Debug output
-		//* DEBUG: */ $this->debugBackTrace();
-
 		// Set command name
 		$this->setCommandName($commandName);
 
diff --git a/inc/classes/main/resolver/controller/class_BaseControllerResolver.php b/inc/classes/main/resolver/controller/class_BaseControllerResolver.php
index 2548b4f702..ec61d4e1cb 100644
--- a/inc/classes/main/resolver/controller/class_BaseControllerResolver.php
+++ b/inc/classes/main/resolver/controller/class_BaseControllerResolver.php
@@ -117,9 +117,6 @@ class BaseControllerResolver extends BaseResolver {
 			}
 		} // END - while
 
-		// Debug output
-		//* DEBUG: */ $this->debugBackTrace();
-
 		// Return the result
 		return $isValid;
 	}
diff --git a/inc/classes/main/resolver/controller/image/class_ImageControllerResolver.php b/inc/classes/main/resolver/controller/image/class_ImageControllerResolver.php
index 157a98c60f..b2f4fcd815 100644
--- a/inc/classes/main/resolver/controller/image/class_ImageControllerResolver.php
+++ b/inc/classes/main/resolver/controller/image/class_ImageControllerResolver.php
@@ -120,9 +120,6 @@ class ImageControllerResolver extends BaseControllerResolver implements Controll
 	 *										controller class is missing (bad!)
 	 */
 	private function loadController ($controllerName) {
-		 // Debug message
-		 //* DEBUG: */ $this->debugBackTrace();
-
 		// Cache default command
 		$defaultController = $this->getConfigInstance()->readConfig('default_image_command');
 
diff --git a/inc/classes/main/resolver/controller/web/class_WebControllerResolver.php b/inc/classes/main/resolver/controller/web/class_WebControllerResolver.php
index 2446e6dc77..da09dca315 100644
--- a/inc/classes/main/resolver/controller/web/class_WebControllerResolver.php
+++ b/inc/classes/main/resolver/controller/web/class_WebControllerResolver.php
@@ -120,9 +120,6 @@ class WebControllerResolver extends BaseControllerResolver implements Controller
 	 *										controller class is missing (bad!)
 	 */
 	private function loadController ($controllerName) {
-		 // Debug message
-		 //* DEBUG: */ $this->debugBackTrace();
-
 		// Cache default command
 		$defaultController = $this->getConfigInstance()->readConfig('default_web_command');
 
diff --git a/inc/classes/main/response/class_BaseResponse.php b/inc/classes/main/response/class_BaseResponse.php
new file mode 100644
index 0000000000..2ecfaa2bae
--- /dev/null
+++ b/inc/classes/main/response/class_BaseResponse.php
@@ -0,0 +1,200 @@
+<?php
+/**
+ * A generic request class
+ *
+ * @author		Roland Haeder <webmaster@ship-simu.org>
+ * @version		0.0.0
+ * @copyright	Copyright (c) 2007, 2008 Roland Haeder, this is free software
+ * @license		GNU GPL 3.0 or any newer version
+ * @link		http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * The extended headers are taken from phpMyAdmin setup tool, written by
+ * Michal Cihar <michal@cihar.com>, licensed under GNU GPL 2.0.
+ */
+class BaseResponse extends BaseFrameworkSystem {
+	/**
+	 * Response status
+	 */
+	private $responseStatus = "200 OK";
+
+	/**
+	 * Array with all headers
+	 */
+	private $responseHeaders = array();
+
+	/**
+	 * Cookies we shall sent out
+	 */
+	private $cookies = array();
+
+	/**
+	 * Body of the response
+	 */
+	private $responseBody = "";
+
+	/**
+	 * Instance of the template engine
+	 */
+	private $templateInstance = null;
+
+	/**
+	 * Fatal resolved messages from filters and so on
+	 */
+	private $fatalMessages = array();
+
+	/**
+	 * Protected constructor
+	 *
+	 * @param	$className	Name of the concrete response
+	 * @return	void
+	 */
+	protected function __construct ($className) {
+		// Call parent constructor
+		parent::__construct($className);
+
+		// Clean up a little
+		$this->removeNumberFormaters();
+		$this->removeSystemArray();
+	}
+
+	/**
+	 * Setter for status
+	 *
+	 * @param	$status		New response status
+	 * @return	void
+	 */
+	public final function setResponseStatus ($status) {
+		$this->responseStatus = (string) $status;
+	}
+
+	/**
+	 * Add header element
+	 *
+	 * @param	$name	Name of header element
+	 * @param	$value	Value of header element
+	 * @return	void
+	 */
+	public final function addHeader ($name, $value) {
+		$this->responseHeaders[$name] = $value;
+	}
+
+	/**
+	 * Reset the header array
+	 *
+	 * @return	void
+	 */
+	public final function resetResponseHeaders () {
+		$this->responseHeaders = array();
+	}
+
+	/**
+	 * "Writes" data to the response body
+	 *
+	 * @param	$output		Output we shall sent in the HTTP response
+	 * @return	void
+	 */
+	public final function writeToBody ($output) {
+		$this->responseBody .= $output;
+	}
+
+	/**
+	 * Sets the response body to something new
+	 *
+	 * @param	$output		Output we shall sent in the HTTP response
+	 * @return	void
+	 */
+	public final function setResponseBody ($output) {
+		$this->responseBody = $output;
+	}
+
+	/**
+	 * Adds a fatal message id to the response. The added messages can then be
+	 * processed and outputed to the world
+	 *
+	 * @param	$messageId	The message id we shall add
+	 * @return	void
+	 */
+	public final function addFatalMessage ($messageId) {
+		// Adds the resolved message id to the fatal message list
+		$this->fatalMessages[] = $this->getApplicationInstance()->getLanguageInstance()->getMessage($messageId);
+	}
+
+	/**
+	 * Flushs the cached HTTP response to the outer world
+	 *
+	 * @param	$force	Wether we shall force the output or abort if headers are
+	 *					already sent with an exception
+	 * @return	void
+	 * @throws	ResponseHeadersAlreadySentException		Thrown if headers are
+	 *													already sent
+	 */
+	public function flushBuffer ($force = false) {
+		if ((headers_sent()) && (!$force)) {
+			// Headers are already sent!
+			throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
+		} elseif (!headers_sent()) {
+			// Send headers out
+			header("HTTP/1.1 {$this->responseStatus}");
+
+			// Used later
+			$now = gmdate('D, d M Y H:i:s') . ' GMT';
+
+			// General header for no caching
+			$this->addHeader('Expired', $now); // RFC2616 - Section 14.21
+			$this->addHeader('Last-Modified', $now);
+			$this->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
+			$this->addHeader('Pragma', 'no-cache'); // HTTP/1.0
+
+			// Define the charset to be used
+			//$this->addHeader('Content-type:', sprintf("text/html; charset=%s", $this->getConfigInstance()->readConfig('header_charset')));
+
+			// Send all headers
+			foreach ($this->responseHeaders as $name => $value) {
+				header("{$name}: {$value}");
+				//* DEBUG: */ echo "{$name}: {$value}<br />\n";
+			} // END - foreach
+
+			// Send cookies out?
+			if (count($this->cookies) > 0) {
+				// Send all cookies
+				$cookieString = implode(" ", $this->cookies);
+				header("Set-Cookie: {$cookieString}");
+
+				// Remove them all
+				$this->cookies = array();
+			} // END - if
+		}
+
+		// Are there some error messages?
+		if (count($this->fatalMessages) == 0) {
+			// Flush the output to the world
+			$this->getWebOutputInstance()->output($this->responseBody);
+		} else {
+			// Display all error messages
+			$this->getApplicationInstance()->handleFatalMessages($this->fatalMessages);
+
+			// Send the error messages out to the world
+			$this->getWebOutputInstance()->output($this->responseBody);
+		}
+
+		// Clear response header and body
+		$this->setResponseBody("");
+		$this->resetResponseHeaders();
+	}
+}
+
+// [EOF]
+?>
diff --git a/inc/classes/main/response/http/.htaccess b/inc/classes/main/response/http/.htaccess
new file mode 100644
index 0000000000..3a42882788
--- /dev/null
+++ b/inc/classes/main/response/http/.htaccess
@@ -0,0 +1 @@
+Deny from all
diff --git a/inc/classes/main/response/class_HttpResponse.php b/inc/classes/main/response/http/class_HttpResponse.php
similarity index 60%
rename from inc/classes/main/response/class_HttpResponse.php
rename to inc/classes/main/response/http/class_HttpResponse.php
index 869d358a49..50bf2deb8e 100644
--- a/inc/classes/main/response/class_HttpResponse.php
+++ b/inc/classes/main/response/http/class_HttpResponse.php
@@ -24,37 +24,7 @@
  * The extended headers are taken from phpMyAdmin setup tool, written by
  * Michal Cihar <michal@cihar.com>, licensed under GNU GPL 2.0.
  */
-class HttpResponse extends BaseFrameworkSystem implements Responseable {
-	/**
-	 * Response status
-	 */
-	private $responseStatus = "200 OK";
-
-	/**
-	 * Array with all headers
-	 */
-	private $responseHeaders = array();
-
-	/**
-	 * Cookies we shall sent out
-	 */
-	private $cookies = array();
-
-	/**
-	 * Body of the response
-	 */
-	private $responseBody = "";
-
-	/**
-	 * Instance of the template engine
-	 */
-	private $templateInstance = null;
-
-	/**
-	 * Fatal resolved messages from filters and so on
-	 */
-	private $fatalMessages = array();
-
+class HttpResponse extends BaseResponse implements Responseable {
 	/**
 	 * Protected constructor
 	 *
@@ -63,10 +33,6 @@ class HttpResponse extends BaseFrameworkSystem implements Responseable {
 	protected function __construct () {
 		// Call parent constructor
 		parent::__construct(__CLASS__);
-
-		// Clean up a little
-		$this->removeNumberFormaters();
-		$this->removeSystemArray();
 	}
 
 	/**
@@ -89,117 +55,6 @@ class HttpResponse extends BaseFrameworkSystem implements Responseable {
 		return $responseInstance;
 	}
 
-	/**
-	 * Setter for status
-	 *
-	 * @param	$status		New response status
-	 * @return	void
-	 */
-	public final function setResponseStatus ($status) {
-		$this->responseStatus = (string) $status;
-	}
-
-	/**
-	 * Add header element
-	 *
-	 * @param	$name	Name of header element
-	 * @param	$value	Value of header element
-	 * @return	void
-	 */
-	public final function addHeader ($name, $value) {
-		$this->responseHeaders[$name] = $value;
-	}
-
-	/**
-	 * Reset the header array
-	 *
-	 * @return	void
-	 */
-	public final function resetResponseHeaders () {
-		$this->responseHeaders = array();
-	}
-
-	/**
-	 * "Writes" data to the response body
-	 *
-	 * @param	$output		Output we shall sent in the HTTP response
-	 * @return	void
-	 */
-	public function writeToBody ($output) {
-		$this->responseBody .= $output;
-	}
-
-	/**
-	 * Sets the response body to something new
-	 *
-	 * @param	$output		Output we shall sent in the HTTP response
-	 * @return	void
-	 */
-	public function setResponseBody ($output) {
-		$this->responseBody = $output;
-	}
-
-	/**
-	 * Flushs the cached HTTP response to the outer world
-	 *
-	 * @param	$force	Wether we shall force the output or abort if headers are
-	 *					already sent with an exception
-	 * @return	void
-	 * @throws	ResponseHeadersAlreadySentException		Thrown if headers are
-	 *													already sent
-	 */
-	public function flushBuffer ($force=false) {
-		if ((headers_sent()) && (!$force)) {
-			// Headers are already sent!
-			throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
-		} elseif (!headers_sent()) {
-			// Send headers out
-			header("HTTP/1.1 {$this->responseStatus}");
-
-			// Used later
-			$now = gmdate('D, d M Y H:i:s') . ' GMT';
-
-			// General header for no caching
-			$this->addHeader('Expired', $now); // rfc2616 - Section 14.21
-			$this->addHeader('Last-Modified', $now);
-			$this->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
-			$this->addHeader('Pragma', 'no-cache'); // HTTP/1.0
-
-			// Define the charset to be used
-			//$this->addHeader('Content-Type:', sprintf("text/html; charset=%s", $this->getConfigInstance()->readConfig('header_charset')));
-
-			foreach ($this->responseHeaders as $name=>$value) {
-				header("{$name}: {$value}");
-			} // END - foreach
-
-			// Send cookies out?
-			if (count($this->cookies) > 0) {
-				// Send all cookies
-				$cookieString = implode(" ", $this->cookies);
-				header("Set-Cookie: {$cookieString}");
-
-				// Remove them all
-				$this->cookies = array();
-			} // END - if
-		}
-
-		// Are there some error messages?
-		if (count($this->fatalMessages) == 0) {
-			// Flush the output to the world
-			$this->getWebOutputInstance()->output($this->responseBody);
-		} else {
-			// Display all error messages
-			$this->getApplicationInstance()->handleFatalMessages($this->fatalMessages);
-
-			// Send the error messages out to the world
-			$this->getWebOutputInstance()->output($this->responseBody);
-		}
-
-		// Clear response header and body
-		$this->setResponseBody("");
-		$this->resetResponseHeaders();
-	}
-
 	/**
 	 * Initializes the template engine instance
 	 *
@@ -210,18 +65,6 @@ class HttpResponse extends BaseFrameworkSystem implements Responseable {
 		$this->setTemplateInstance($this->prepareTemplateInstance($appInstance));
 	}
 
-	/**
-	 * Adds a fatal message id to the response. The added messages can then be
-	 * processed and outputed to the world
-	 *
-	 * @param	$messageId	The message id we shall add
-	 * @return	void
-	 */
-	public final function addFatalMessage ($messageId) {
-		// Adds the resolved message id to the fatal message list
-		$this->fatalMessages[] = $this->getApplicationInstance()->getLanguageInstance()->getMessage($messageId);
-	}
-
 	/**
 	 * Adds a cookie to the response
 	 *
@@ -288,9 +131,15 @@ class HttpResponse extends BaseFrameworkSystem implements Responseable {
 			throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
 		} // END - if
 
+		// Assign application data
+		$this->getTemplateInstance()->assignApplicationData($this->getApplicationInstance());
+
 		// Get the url from config
 		$url = $this->getConfigInstance()->readConfig($configEntry);
 
+		// Compile the URL
+		$url = $this->getTemplateInstance()->compileRawCode($url);
+
 		// Do we have a "http" in front of the URL?
 		if (substr(strtolower($url), 0, 4) != "http") {
 			// Is there a / in front of the relative URL?
diff --git a/inc/classes/main/response/image/.htaccess b/inc/classes/main/response/image/.htaccess
new file mode 100644
index 0000000000..3a42882788
--- /dev/null
+++ b/inc/classes/main/response/image/.htaccess
@@ -0,0 +1 @@
+Deny from all
diff --git a/inc/classes/main/response/class_ImageResponse.php b/inc/classes/main/response/image/class_ImageResponse.php
similarity index 65%
rename from inc/classes/main/response/class_ImageResponse.php
rename to inc/classes/main/response/image/class_ImageResponse.php
index 71acb351dd..c03e6ea6e5 100644
--- a/inc/classes/main/response/class_ImageResponse.php
+++ b/inc/classes/main/response/image/class_ImageResponse.php
@@ -24,32 +24,7 @@
  * The extended headers are taken from phpMyAdmin setup tool, written by
  * Michal Cihar <michal@cihar.com>, licensed under GNU GPL 2.0.
  */
-class ImageResponse extends BaseFrameworkSystem implements Responseable {
-	/**
-	 * Response status
-	 */
-	private $responseStatus = "200 OK";
-
-	/**
-	 * Array with all headers
-	 */
-	private $responseHeaders = array();
-
-	/**
-	 * Cookies we shall sent out
-	 */
-	private $cookies = array();
-
-	/**
-	 * Body of the response
-	 */
-	private $responseBody = "";
-
-	/**
-	 * Fatal resolved messages from filters and so on
-	 */
-	private $fatalMessages = array();
-
+class ImageResponse extends BaseResponse implements Responseable {
 	/**
 	 * Instance of the image
 	 */
@@ -63,10 +38,6 @@ class ImageResponse extends BaseFrameworkSystem implements Responseable {
 	protected function __construct () {
 		// Call parent constructor
 		parent::__construct(__CLASS__);
-
-		// Clean up a little
-		$this->removeNumberFormaters();
-		$this->removeSystemArray();
 	}
 
 	/**
@@ -89,117 +60,6 @@ class ImageResponse extends BaseFrameworkSystem implements Responseable {
 		return $responseInstance;
 	}
 
-	/**
-	 * Setter for status
-	 *
-	 * @param	$status		New response status
-	 * @return	void
-	 */
-	public final function setResponseStatus ($status) {
-		$this->responseStatus = (string) $status;
-	}
-
-	/**
-	 * Add header element
-	 *
-	 * @param	$name	Name of header element
-	 * @param	$value	Value of header element
-	 * @return	void
-	 */
-	public final function addHeader ($name, $value) {
-		$this->responseHeaders[$name] = $value;
-	}
-
-	/**
-	 * Reset the header array
-	 *
-	 * @return	void
-	 */
-	public final function resetResponseHeaders () {
-		$this->responseHeaders = array();
-	}
-
-	/**
-	 * "Writes" data to the response body
-	 *
-	 * @param	$output		Output we shall sent in the HTTP response
-	 * @return	void
-	 */
-	public function writeToBody ($output) {
-		$this->responseBody .= $output;
-	}
-
-	/**
-	 * Sets the response body to something new
-	 *
-	 * @param	$output		Output we shall sent in the HTTP response
-	 * @return	void
-	 */
-	public function setResponseBody ($output) {
-		$this->responseBody = $output;
-	}
-
-	/**
-	 * Flushs the cached HTTP response to the outer world
-	 *
-	 * @param	$force	Wether we shall force the output or abort if headers are
-	 *					already sent with an exception
-	 * @return	void
-	 * @todo	Add support for fatal messages in image response
-	 * @throws	ResponseHeadersAlreadySentException		Thrown if headers are
-	 *													already sent
-	 */
-	public function flushBuffer ($force=false) {
-		if ((headers_sent()) && (!$force)) {
-			// Headers are already sent!
-			throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
-		} elseif (!headers_sent()) {
-			// Send headers out
-			header("HTTP/1.1 {$this->responseStatus}");
-
-			// Used later
-			$now = gmdate('D, d M Y H:i:s') . ' GMT';
-
-			// General header for no caching
-			$this->addHeader('Expired', $now); // rfc2616 - Section 14.21
-			$this->addHeader('Last-Modified', $now);
-			$this->addHeader('Cache-Control', 'no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0'); // HTTP/1.1
-			$this->addHeader('Pragma', 'no-cache'); // HTTP/1.0
-			$this->addHeader('Content-type', 'image/'.$this->imageInstance->getImageType());
-
-			// Define the charset to be used
-			//$this->addHeader('Content-Type:', sprintf("text/html; charset=%s", $this->getConfigInstance()->readConfig('header_charset')));
-
-			foreach ($this->responseHeaders as $name=>$value) {
-				header("{$name}: {$value}");
-			} // END - foreach
-
-			// Send cookies out?
-			if (count($this->cookies) > 0) {
-				// Send all cookies
-				$cookieString = implode(" ", $this->cookies);
-				header("Set-Cookie: {$cookieString}");
-
-				// Remove them all
-				$this->cookies = array();
-			} // END - if
-		}
-
-		// Are there some error messages?
-		if (count($this->fatalMessages) == 0) {
-			// Get image content from cache
-			$imageContent = $this->imageInstance->getContent();
-			die($imageContent);
-		} else {
-			// Display all error messages
-			$this->partialStub("Fatal messages are currently unsupported in image response.");
-		}
-
-		// Clear response header and body
-		$this->setResponseBody("");
-		$this->resetResponseHeaders();
-	}
-
 	/**
 	 * Initializes the template engine instance
 	 *
@@ -221,18 +81,6 @@ class ImageResponse extends BaseFrameworkSystem implements Responseable {
 		$this->setTemplateInstance($this->prepareTemplateInstance($appInstance));
 	}
 
-	/**
-	 * Adds a fatal message id to the response. The added messages can then be
-	 * processed and outputed to the world
-	 *
-	 * @param	$messageId	The message id we shall add
-	 * @return	void
-	 */
-	public final function addFatalMessage ($messageId) {
-		// Adds the resolved message id to the fatal message list
-		$this->fatalMessages[] = $this->getApplicationInstance()->getLanguageInstance()->getMessage($messageId);
-	}
-
 	/**
 	 * Adds a cookie to the response
 	 *
@@ -297,9 +145,15 @@ class ImageResponse extends BaseFrameworkSystem implements Responseable {
 			throw new ResponseHeadersAlreadySentException($this, self::EXCEPTION_HEADERS_ALREADY_SENT);
 		} // END - if
 
+		// Assign application data
+		$this->getTemplateInstance()->assignApplicationData($this->getApplicationInstance());
+
 		// Get the url from config
 		$url = $this->getConfigInstance()->readConfig($configEntry);
 
+		// Compile the URL
+		$url = $this->getTemplateInstance()->compileRawCode($url);
+
 		// Do we have a "http" in front of the URL?
 		if (substr(strtolower($url), 0, 4) != "http") {
 			// Is there a / in front of the relative URL?
@@ -325,6 +179,30 @@ class ImageResponse extends BaseFrameworkSystem implements Responseable {
 		exit();
 	}
 
+	/**
+	 * Flushs the cached HTTP response to the outer world
+	 *
+	 * @param	$force	Wether we shall force the output or abort if headers are
+	 *					already sent with an exception
+	 * @return	void
+	 */
+	public function flushBuffer ($force = false) {
+		// Finish the image
+		$this->getImageInstance()->finishImage();
+
+		// Get image content
+		$content = $this->getImageInstance()->getContent();
+
+		// Set it as response body
+		$this->setResponseBody($content);
+
+		// Set content type
+		$this->addHeader('Content-type', "image/".$this->getImageInstance()->getImageType());
+
+		// Call parent method
+		parent::flushBuffer($force);
+	}
+
 	/**
 	 * Expires the given cookie if it is set
 	 *
@@ -366,6 +244,15 @@ class ImageResponse extends BaseFrameworkSystem implements Responseable {
 		$this->imageInstance = $imageInstance;
 	}
 
+	/**
+	 * Getter for image instanxe
+	 *
+	 * @return	$imageInstance	An instance of an image
+	 */
+	public final function getImageInstance () {
+		return $this->imageInstance;
+	}
+
 	/**
 	 * Getter for default command
 	 *
diff --git a/inc/classes/main/result/class_DatabaseResult.php b/inc/classes/main/result/class_DatabaseResult.php
index f7b1648ff0..3f8918b79d 100644
--- a/inc/classes/main/result/class_DatabaseResult.php
+++ b/inc/classes/main/result/class_DatabaseResult.php
@@ -103,7 +103,7 @@ class DatabaseResult extends BaseFrameworkSystem implements SearchableResult, Up
 		$entryKey = $this->key();
 
 		// Now get the update criteria array and update all entries
-		foreach ($updateInstance->getUpdateCriteria() as $criteriaKey=>$criteriaValue) {
+		foreach ($updateInstance->getUpdateCriteria() as $criteriaKey => $criteriaValue) {
 			// Update data
 			$this->resultArray['rows'][$entryKey][$criteriaKey] = $criteriaValue;
 
@@ -318,7 +318,7 @@ class DatabaseResult extends BaseFrameworkSystem implements SearchableResult, Up
 			$currentEntry = $this->current();
 
 			// Walk only through out-dated columns
-			foreach ($this->outDated as $key=>$dummy) {
+			foreach ($this->outDated as $key => $dummy) {
 				// Does this key exist?
 				//* DEBUG: */ echo "outDated: {$key}<br />\n";
 				if (isset($currentEntry[$key])) {
diff --git a/inc/classes/main/template/class_BaseTemplateEngine.php b/inc/classes/main/template/class_BaseTemplateEngine.php
index 4db73b617d..7e1aa7c194 100644
--- a/inc/classes/main/template/class_BaseTemplateEngine.php
+++ b/inc/classes/main/template/class_BaseTemplateEngine.php
@@ -69,11 +69,6 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
 	 */
 	private $varStack = array();
 
-	/**
-	 * Configuration variables in a simple array
-	 */
-	private $configVariables = array();
-
 	/**
 	 * Loaded templates for recursive protection and detection
 	 */
@@ -154,10 +149,12 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
 		// Is the group there?
 		if (isset($this->varStack[$this->currGroup])) {
 			// Now search for it
-			foreach ($this->varStack[$this->currGroup] as $idx=>$currEntry) {
+			foreach ($this->varStack[$this->currGroup] as $idx => $currEntry) {
+				//* DEBUG: */ echo __METHOD__.":currGroup={$this->currGroup},idx={$idx},currEntry={$currEntry['name']},var={$var}<br />\n";
 				// Is the entry found?
 				if ($currEntry['name'] == $var) {
 					// Found!
+					//* DEBUG: */ echo __METHOD__.":FOUND!<br />\n";
 					$found = $idx;
 					break;
 				} // END - if
@@ -586,7 +583,7 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
 		// Did we find some variables?
 		if ((is_array($variableMatches)) && (count($variableMatches) == 4) && (count($variableMatches[0]) > 0)) {
 			// Initialize all missing variables
-			foreach ($variableMatches[3] as $key=>$var) {
+			foreach ($variableMatches[3] as $key => $var) {
 				// Variable name
 				$varName = $variableMatches[1][$key];
 
@@ -628,10 +625,17 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
 			if ((!isset($this->loadedRawData[$template])) && (!in_array($template, $this->loadedTemplates))) {
 
 				// Template not found, but maybe variable assigned?
+				//* DEBUG: */ echo __METHOD__.":template={$template}<br />\n";
 				if ($this->isVariableAlreadySet($template) !== false) {
 					// Use that content here
 					$this->loadedRawData[$template] = $this->readVariable($template);
 
+					// Recursive protection:
+					$this->loadedTemplates[] = $template;
+				} elseif (isset($this->varStack['config'][$template])) {
+					// Use that content here
+					$this->loadedRawData[$template] = $this->varStack['config'][$template];
+
 					// Recursive protection:
 					$this->loadedTemplates[] = $template;
 				} else {
@@ -671,7 +675,7 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
 		if (in_array($template, $this->compiledTemplates)) {
 			// Abort here...
 			return;
-		}
+		} // END - if
 
 		// Remember this template being compiled
 		$this->compiledTemplates[] = $template;
@@ -703,7 +707,7 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
 	 */
 	private function insertAllTemplates (array $templateMatches) {
 		// Run through all loaded codes
-		foreach ($this->loadedRawData as $template=>$code) {
+		foreach ($this->loadedRawData as $template => $code) {
 
 			// Search for the template
 			$foundIndex = array_search($template, $templateMatches[1]);
@@ -766,7 +770,7 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
 	 */
 	private function assignAllVariables (array $varMatches) {
 		// Search for all variables
-		foreach ($varMatches[1] as $key=>$var) {
+		foreach ($varMatches[1] as $key => $var) {
 
 			// Detect leading equals
 			if (substr($varMatches[2][$key], 0, 1) == "=") {
@@ -796,7 +800,7 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
 		if (count($this->loadedRawData) > 0) {
 
 			// Then compile all!
-			foreach ($this->loadedRawData as $template=>$code) {
+			foreach ($this->loadedRawData as $template => $code) {
 
 				// Is this template already compiled?
 				if (in_array($template, $this->compiledTemplates)) {
@@ -836,7 +840,7 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
 	 */
 	private function insertRawTemplates () {
 		// Load all templates
-		foreach ($this->rawTemplates as $template=>$content) {
+		foreach ($this->rawTemplates as $template => $content) {
 			// Set the template as a variable with the content
 			$this->assignVariable($template, $content);
 		}
@@ -895,7 +899,8 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
 	 */
 	public function assignConfigVariable ($var) {
 		// Sweet and simple...
-		$this->configVariables[$var] = $this->getConfigInstance()->readConfig($var);
+		//* DEBUG: */ echo __METHOD__.":var={$var}<br />\n";
+		$this->varStack['config'][$var] = $this->getConfigInstance()->readConfig($var);
 	}
 
 	/**
@@ -916,7 +921,7 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
 	/**
 	 * Load a specified code template into the engine
 	 *
-	 * @param		$template		The code template we shall load which is
+	 * @param	$template	The code template we shall load which is
 	 *						located in "code" by default
 	 * @return	void
 	 */
@@ -944,14 +949,16 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
 			// Transfer it's name/value combination to the $content array
 			//* DEBUG: */ echo $currVariable['name']."=<pre>".htmlentities($currVariable['value'])."</pre>\n";
 			$dummy[$currVariable['name']] = $currVariable['value'];
-
 		}// END - if
 
-		// Set the new variable (don't remove the second dollar !)
+		// Set the new variable (don't remove the second dollar!)
 		$$validVar = $dummy;
 
 		// Prepare all configuration variables
-		$config = $this->configVariables;
+		$config = null;
+		if (isset($this->varStack['config'])) {
+			$config = $this->varStack['config'];
+		} // END - if
 
 		// Remove some variables
 		unset($idx);
@@ -1184,6 +1191,9 @@ class BaseTemplateEngine extends BaseFrameworkSystem {
 
 		// Get version number and assign it
 		$this->assignVariable('app_version'   , $appInstance->getAppVersion());
+
+		// Assign extra application-depending data
+		$appInstance->assignExtraTemplateData($this);
 	}
 
 	/**
diff --git a/inc/classes/main/template/class_TemplateEngine.php b/inc/classes/main/template/class_TemplateEngine.php
deleted file mode 100644
index afa0cbb065..0000000000
--- a/inc/classes/main/template/class_TemplateEngine.php
+++ /dev/null
@@ -1,1208 +0,0 @@
-<?php
-/**
- * The own template engine for loading caching and sending out the web pages
- * and emails.
- *
- * @author		Roland Haeder <webmaster@ship-simu.org>
- * @version		0.0.0
- * @copyright	Copyright(c) 2007, 2008 Roland Haeder, this is free software
- * @license		GNU GPL 3.0 or any newer version
- * @link		http://www.ship-simu.org
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-class TemplateEngine extends BaseFrameworkSystem implements CompileableTemplate {
-	/**
-	 * The local path name where all templates and sub folders for special
-	 * templates are stored. We will internally determine the language plus
-	 * "html" for web templates or "emails" for email templates
-	 */
-	private $basePath = "";
-
-	/**
-	 * The extension for web and email templates (not compiled templates)
-	 */
-	private $templateExtension = ".tpl";
-
-	/**
-	 * The extension for code templates (not compiled templates)
-	 */
-	private $codeExtension = ".ctp";
-
-	/**
-	 * Path relative to $basePath and language code for compiled code-templates
-	 */
-	private $compileOutputPath = "templates/_compiled";
-
-	/**
-	 * The raw (maybe uncompiled) template
-	 */
-	private $rawTemplateData = "";
-
-	/**
-	 * Template data with compiled-in variables
-	 */
-	private $compiledData = "";
-
-	/**
-	 * The last loaded template's FQFN for debugging the engine
-	 */
-	private $lastTemplate = "";
-
-	/**
-	 * The variable stack for the templates. This must be initialized and
-	 * shall become an instance of FrameworkArrayObject.
-	 */
-	private $varStack = null;
-
-	/**
-	 * Configuration variables in a simple array
-	 */
-	private $configVariables = array();
-
-	/**
-	 * Loaded templates for recursive protection and detection
-	 */
-	private $loadedTemplates = array();
-
-	/**
-	 * Compiled templates for recursive protection and detection
-	 */
-	private $compiledTemplates = array();
-
-	/**
-	 * Loaded raw template data
-	 */
-	private $loadedRawData = null;
-
-	/**
-	 * Raw templates which are linked in code templates
-	 */
-	private $rawTemplates = null;
-
-	/**
-	 * A regular expression for variable=value pairs
-	 */
-	private $regExpVarValue = '/([\w_]+)(="([^"]*)"|=([\w_]+))?/';
-
-	/**
-	 * A regular expression for filtering out code tags
-	 *
-	 * E.g.: {?template:variable=value;var2=value2;[...]?}
-	 */
-	private $regExpCodeTags = '/\{\?([a-z_]+)(:("[^"]+"|[^?}]+)+)?\?\}/';
-
-	/**
-	 * Loaded helpers
-	 */
-	private $helpers = array();
-
-	// Exception codes for the template engine
-	const EXCEPTION_TEMPLATE_TYPE_IS_UNEXPECTED   = 0x020;
-	const EXCEPTION_TEMPLATE_CONTAINS_INVALID_VAR = 0x021;
-	const EXCEPTION_INVALID_VIEW_HELPER           = 0x022;
-
-	/**
-	 * Protected constructor
-	 *
-	 * @return	void
-	 */
-	protected function __construct () {
-		// Call parent constructor
-		parent::__construct(__CLASS__);
-
-		// Clean up a little
-		$this->removeNumberFormaters();
-		$this->removeSystemArray();
-	}
-
-	/**
-	 * Creates an instance of the class TemplateEngine and prepares it for usage
-	 *
-	 * @param	$basePath		The local base path for all templates
-	 * @param	$langInstance	An instance of LanguageSystem (default)
-	 * @param	$ioInstance		An instance of FileIoHandler (default, middleware!)
-	 * @return	$tplInstance	An instance of TemplateEngine
-	 * @throws	BasePathIsEmptyException		If the provided $basePath is empty
-	 * @throws	InvalidBasePathStringException	If $basePath is no string
-	 * @throws	BasePathIsNoDirectoryException	If $basePath is no
-	 *											directory or not found
-	 * @throws	BasePathReadProtectedException	If $basePath is
-	 *											read-protected
-	 */
-	public final static function createTemplateEngine ($basePath, ManageableLanguage  $langInstance, FileIoHandler $ioInstance) {
-		// Get a new instance
-		$tplInstance = new TemplateEngine();
-
-		// Is the base path valid?
-		if (empty($basePath)) {
-			// Base path is empty
-			throw new BasePathIsEmptyException($tplInstance, self::EXCEPTION_UNEXPECTED_EMPTY_STRING);
-		} elseif (!is_string($basePath)) {
-			// Is not a string
-			throw new InvalidBasePathStringException(array($tplInstance, $basePath), self::EXCEPTION_INVALID_STRING);
-		} elseif (!is_dir($basePath)) {
-			// Is not a path
-			throw new BasePathIsNoDirectoryException(array($tplInstance, $basePath), self::EXCEPTION_INVALID_PATH_NAME);
-		} elseif (!is_readable($basePath)) {
-			// Is not readable
-			throw new BasePathReadProtectedException(array($tplInstance, $basePath), self::EXCEPTION_READ_PROTECED_PATH);
-		}
-
-		// Get configuration instance
-		$cfgInstance = FrameworkConfiguration::getInstance();
-
-		// Set the base path
-		$tplInstance->setBasePath($basePath);
-
-		// Initialize the variable stack
-		$tplInstance->initVariableStack();
-
-		// Set the language and IO instances
-		$tplInstance->setLanguageInstance($langInstance);
-		$tplInstance->setFileIoInstance($ioInstance);
-
-		// Set template extensions
-		$tplInstance->setRawTemplateExtension($cfgInstance->readConfig('raw_template_extension'));
-		$tplInstance->setCodeTemplateExtension($cfgInstance->readConfig('code_template_extension'));
-
-		// Absolute output path for compiled templates
-		$tplInstance->setCompileOutputPath(PATH . $cfgInstance->readConfig('compile_output_path'));
-
-		// Return the prepared instance
-		return $tplInstance;
-	}
-
-	/**
-	 * Search for a variable in the stack
-	 *
-	 * @param		$var		The variable we are looking for
-	 * @return	$idx		FALSE means not found, >=0 means found on a specific index
-	 */
-	private function isVariableAlreadySet ($var) {
-		// First everything is not found
-		$found = false;
-
-		// Now search for it
-		for ($idx = $this->varStack->getIterator(); $idx->valid(); $idx->next()) {
-			// Get current item
-			$currEntry = $idx->current();
-
-			// Is the entry found?
-			if ($currEntry['name'] == $var) {
-				// Found!
-				$found = $idx->key();
-				break;
-			}
-		}
-
-		// Return the current position
-		return $found;
-	}
-
-	/**
-	 * Return a content of a variable or null if not found
-	 *
-	 * @param	$var		The variable we are looking for
-	 * @return	$content	Content of the variable or null if not found
-	 */
-	private function readVariable ($var) {
-		// First everything is not found
-		$content = null;
-
-		// Now search for it
-		for ($idx = $this->varStack->getIterator(); $idx->valid(); $idx->next()) {
-			// Get current item
-			$currEntry = $idx->current();
-
-			// Is the entry found?
-			if ($currEntry['name'] == $var) {
-				// Found!
-				$content = $currEntry['value'];
-				break;
-			}
-		}
-
-		// Return the current position
-		return $content;
-	}
-
-	/**
-	 * Add a variable to the stack
-	 *
-	 * @param		$var		The variable we are looking for
-	 * @param		$value	The value we want to store in the variable
-	 * @return	void
-	 */
-	private function addVariable ($var, $value) {
-		// Add it to the stack
-		$this->varStack->append(array(
-			'name'  => trim($var),
-			'value' => trim($value)
-		));
-	}
-
-	/**
-	 * Modify an entry on the stack
-	 *
-	 * @param		$var		The variable we are looking for
-	 * @param		$value	The value we want to store in the variable
-	 * @return	void
-	 */
-	private function modifyVariable ($var, $value) {
-		// It should be there so let's look again...
-		for ($idx = $this->varStack->getIterator(); $idx->valid(); $idx->next()) {
-			// Get current entry
-			$currEntry = $idx->current();
-
-			// Is this the requested variable?
-			if ($currEntry['name'] == $var) {
-				// Change it to the other value
-				$this->varStack->offsetSet($idx->key(), array(
-					'name'  => $var,
-					'value' => $value
-				));
-			}
-		}
-	}
-
-	/**
-	 * Initialize the variable stack. This holds all variables for later
-	 * compilation.
-	 *
-	 * @return	void
-	 */
-	public final function initVariableStack () {
-		$this->varStack = new FrameworkArrayObject("FakedVariableStack");
-	}
-
-	/**
-	 * Setter for base path
-	 *
-	 * @param		$basePath		The local base path for all templates
-	 * @return	void
-	 */
-	public final function setBasePath ($basePath) {
-		// Cast it
-		$basePath = (string) $basePath;
-
-		// And set it
-		$this->basePath = $basePath;
-	}
-
-	/**
-	 * Getter for base path
-	 *
-	 * @return	$basePath		The local base path for all templates
-	 */
-	public final function getBasePath () {
-		// And set it
-		return $this->basePath;
-	}
-
-	/**
-	 * Setter for template extension
-	 *
-	 * @param		$templateExtension	The file extension for all uncompiled
-	 *							templates
-	 * @return	void
-	 */
-	public final function setRawTemplateExtension ($templateExtension) {
-		// Cast it
-		$templateExtension = (string) $templateExtension;
-
-		// And set it
-		$this->templateExtension = $templateExtension;
-	}
-
-	/**
-	 * Setter for code template extension
-	 *
-	 * @param		$codeExtension		The file extension for all uncompiled
-	 *							templates
-	 * @return	void
-	 */
-	public final function setCodeTemplateExtension ($codeExtension) {
-		// Cast it
-		$codeExtension = (string) $codeExtension;
-
-		// And set it
-		$this->codeExtension = $codeExtension;
-	}
-
-	/**
-	 * Getter for template extension
-	 *
-	 * @return	$templateExtension	The file extension for all uncompiled
-	 *							templates
-	 */
-	public final function getRawTemplateExtension () {
-		// And set it
-		return $this->templateExtension;
-	}
-
-	/**
-	 * Getter for code-template extension
-	 *
-	 * @return	$codeExtension		The file extension for all code-
-	 *							templates
-	 */
-	public final function getCodeTemplateExtension () {
-		// And set it
-		return $this->codeExtension;
-	}
-
-	/**
-	 * Setter for path of compiled templates
-	 *
-	 * @param		$compileOutputPath		The local base path for all
-	 *								compiled templates
-	 * @return	void
-	 */
-	public final function setCompileOutputPath ($compileOutputPath) {
-		// Cast it
-		$compileOutputPath = (string) $compileOutputPath;
-
-		// And set it
-		$this->compileOutputPath = $compileOutputPath;
-	}
-
-	/**
-	 * Setter for template type. Only "html", "emails" and "compiled" should
-	 * be sent here
-	 *
-	 * @param		$templateType	The current template's type
-	 * @return	void
-	 */
-	private final function setTemplateType ($templateType) {
-		// Cast it
-		$templateType = (string) $templateType;
-
-		// And set it (only 2 letters)
-		$this->templateType = $templateType;
-	}
-
-	/**
-	 * Getter for template type
-	 *
-	 * @return	$templateType	The current template's type
-	 */
-	public final function getTemplateType () {
-		return $this->templateType;
-	}
-
-	/**
-	 * Setter for the last loaded template's FQFN
-	 *
-	 * @param		$template		The last loaded template
-	 * @return	void
-	 */
-	private final function setLastTemplate ($template) {
-		// Cast it to string
-		$template = (string) $template;
-		$this->lastTemplate = $template;
-	}
-
-	/**
-	 * Getter for the last loaded template's FQFN
-	 *
-	 * @return	$template		The last loaded template
-	 */
-	private final function getLastTemplate () {
-		return $this->lastTemplate;
-	}
-
-	/**
-	 * Assign (add) a given variable with a value
-	 *
-	 * @param		$var		The variable we are looking for
-	 * @param		$value	The value we want to store in the variable
-	 * @return	void
-	 */
-	public final function assignVariable ($var, $value) {
-		// First search for the variable if it was already added
-		$idx = $this->isVariableAlreadySet($var);
-
-		// Was it found?
-		if ($idx === false) {
-			// Add it to the stack
-			$this->addVariable($var, $value);
-		} elseif (!empty($value)) {
-			// Modify the stack entry
-			$this->modifyVariable($var, $value);
-		}
-	}
-
-	/**
-	 * Assign a given congfiguration variable with a value
-	 *
-	 * @param		$var		The configuration variable we are looking for
-	 * @param		$value	The value we want to store in the variable
-	 * @return	void
-	 */
-	public final function assignConfigVariable ($var, $value) {
-		// Sweet and simple...
-		$this->configVariables[$var] = $value;
-	}
-
-	/**
-	 * Removes a given variable
-	 *
-	 * @param		$var		The variable we are looking for
-	 * @return	void
-	 */
-	public final function removeVariable ($var) {
-		// First search for the variable if it was already added
-		$idx = $this->isVariableAlreadySet($var);
-
-		// Was it found?
-		if ($idx !== false) {
-			// Remove this variable
-			$this->varStack->offsetUnset($idx);
-		}
-	}
-
-	/**
-	 * Private setter for raw template data
-	 *
-	 * @param		$rawTemplateData	The raw data from the template
-	 * @return	void
-	 */
-	private final function setRawTemplateData ($rawTemplateData) {
-		// Cast it to string
-		$rawTemplateData = (string) $rawTemplateData;
-
-		// And store it in this class
-		$this->rawTemplateData = $rawTemplateData;
-	}
-
-	/**
-	 * Private setter for compiled templates
-	 */
-	private final function setCompiledData ($compiledData) {
-		// Cast it to string
-		$compiledData = (string) $compiledData;
-
-		// And store it in this class
-		$this->compiledData = $compiledData;
-	}
-
-	/**
-	 * Private loader for all template types
-	 *
-	 * @param		$template		The template we shall load
-	 * @return	void
-	 */
-	private final function loadTemplate ($template) {
-		// Cast it to string
-		$template = (string) $template;
-
-		// Get extension for the template
-		$ext = $this->getRawTemplateExtension();
-
-		// If we shall load a code-template we need to switch the file extension
-		if ($this->getTemplateType() == $this->getConfigInstance()->readConfig('code_template_type')) {
-			// Switch over to the code-template extension
-			$ext = $this->getCodeTemplateExtension();
-		}
-
-		// Construct the FQFN for the template by honoring the current language
-		$fqfn = sprintf("%s%s/%s/%s%s",
-			$this->getBasePath(),
-			$this->getLanguageInstance()->getLanguageCode(),
-			$this->getTemplateType(),
-			$template,
-			$ext
-		);
-
-		// Load the raw template data
-		$this->loadRawTemplateData($fqfn);
-	}
-
-	/**
-	 * A private loader for raw template names
-	 *
-	 * @param		$fqfn	The full-qualified file name for a template
-	 * @return	void
-	 * @throws	NullPointerException	If $inputInstance is null
-	 * @throws	NoObjectException		If $inputInstance is not an object
-	 * @throws	MissingMethodException	If $inputInstance is missing a
-	 *								required method
-	 */
-	private function loadRawTemplateData ($fqfn) {
-		// Get a input/output instance from the middleware
-		$ioInstance = $this->getFileIoInstance();
-
-		// Validate the instance
-		if (is_null($ioInstance)) {
-			// Throw exception
-			throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER);
-		} elseif (!is_object($ioInstance)) {
-			// Throw another exception
-			throw new NoObjectException($ioInstance, self::EXCEPTION_IS_NO_OBJECT);
-		} elseif (!method_exists($ioInstance, 'loadFileContents')) {
-			// Throw yet another exception
-			throw new MissingMethodException(array($ioInstance, 'loadFileContents'), self::EXCEPTION_MISSING_METHOD);
-		}
-
-		// Load the raw template
-		$rawTemplateData = $ioInstance->loadFileContents($fqfn);
-
-		// Store the template's contents into this class
-		$this->setRawTemplateData($rawTemplateData);
-
-		// Remember the template's FQFN
-		$this->setLastTemplate($fqfn);
-	}
-
-	/**
-	 * Try to assign an extracted template variable as a "content" or "config"
-	 * variable.
-	 *
-	 * @param		$varName		The variable's name (shall be content or
-	 *						config) by default
-	 * @param		$var			The variable we want to assign
-	 */
-	private function assignTemplateVariable ($varName, $var) {
-		// Is it not a config variable?
-		if ($varName != "config") {
-			// Regular template variables
-			$this->assignVariable($var, "");
-		} else {
-			// Configuration variables
-			$this->assignConfigVariable($var, $this->getConfigInstance()->readConfig($var));
-		}
-	}
-
-	/**
-	 * Extract variables from a given raw data stream
-	 *
-	 * @param	$rawData	The raw template data we shall analyze
-	 * @return	void
-	 */
-	private function extractVariablesFromRawData ($rawData) {
-		// Cast to string
-		$rawData = (string) $rawData;
-
-		// Search for variables
-		@preg_match_all('/\$(\w+)(\[(\w+)\])?/', $rawData, $variableMatches);
-
-		// Did we find some variables?
-		if ((is_array($variableMatches)) && (count($variableMatches) == 4) && (count($variableMatches[0]) > 0)) {
-			// Initialize all missing variables
-			foreach ($variableMatches[3] as $key=>$var) {
-				// Try to assign it, empty strings are being ignored
-				$this->assignTemplateVariable($variableMatches[1][$key], $var);
-			}
-		}
-	}
-
-	/**
-	 * Main analysis of the loaded template
-	 *
-	 * @param		$templateMatches	Found template place-holders, see below
-	 * @return	void
-	 *
-	 *---------------------------------
-	 * Structure of $templateMatches:
-	 *---------------------------------
-	 * [0] => Array - An array with all full matches
-	 * [1] => Array - An array with left part (before the ":") of a match
-	 * [2] => Array - An array with right part of a match including ":"
-	 * [3] => Array - An array with right part of a match excluding ":"
-	 */
-	private function analyzeTemplate (array $templateMatches) {
-		// Backup raw template data
-		$backup = $this->getRawTemplateData();
-
-		// Initialize some arrays
-		if (is_null($this->loadedRawData)) { $this->loadedRawData = array(); $this->rawTemplates = array(); }
-
-		// Load all requested templates
-		foreach ($templateMatches[1] as $template) {
-
-			// Load and compile only templates which we have not yet loaded
-			// RECURSIVE PROTECTION! BE CAREFUL HERE!
-			if ((!isset($this->loadedRawData[$template])) && (!in_array($template, $this->loadedTemplates))) {
-
-				// Template not found, but maybe variable assigned?
-				if ($this->isVariableAlreadySet($template) !== false) {
-					// Use that content here
-					$this->loadedRawData[$template] = $this->readVariable($template);
-
-					// Recursive protection:
-					$this->loadedTemplates[] = $template;
-				} else {
-					// Then try to search for code-templates
-					try {
-						// Load the code template and remember it's contents
-						$this->loadCodeTemplate($template);
-						$this->loadedRawData[$template] = $this->getRawTemplateData();
-
-						// Remember this template for recursion detection
-						// RECURSIVE PROTECTION!
-						$this->loadedTemplates[] = $template;
-					} catch (FilePointerNotOpenedException $e) {
-						// Even this is not done... :/
-						$this->rawTemplates[] = $template;
-					}
-				}
-
-			} // if ((!isset( ...
-
-		} // for ($templateMatches ...
-
-		// Restore the raw template data
-		$this->setRawTemplateData($backup);
-	}
-
-	/**
-	 * Compile a given raw template code and remember it for later usage
-	 *
-	 * @param		$code		The raw template code
-	 * @param		$template		The template's name
-	 * @return	void
-	 */
-	private function compileCode ($code, $template) {
-		// Is this template already compiled?
-		if (in_array($template, $this->compiledTemplates)) {
-			// Abort here...
-			return;
-		}
-
-		// Remember this template being compiled
-		$this->compiledTemplates[] = $template;
-
-		// Compile the loaded code in five steps:
-		//
-		// 1. Backup current template data
-		$backup = $this->getRawTemplateData();
-
-		// 2. Set the current template's raw data as the new content
-		$this->setRawTemplateData($code);
-
-		// 3. Compile the template data
-		$this->compileTemplate();
-
-		// 4. Remember it's contents
-		$this->loadedRawData[$template] = $this->getRawTemplateData();
-
-		// 5. Restore the previous raw content from backup variable
-		$this->setRawTemplateData($backup);
-	}
-
-	/**
-	 * Insert all given and loaded templates by running through all loaded
-	 * codes and searching for their place-holder in the main template
-	 *
-	 * @param		$templateMatches	See method analyzeTemplate()
-	 * @return	void
-	 */
-	private function insertAllTemplates (array $templateMatches) {
-		// Run through all loaded codes
-		foreach ($this->loadedRawData as $template=>$code) {
-
-			// Search for the template
-			$foundIndex = array_search($template, $templateMatches[1]);
-
-			// Lookup the matching template replacement
-			if (($foundIndex !== false) && (isset($templateMatches[0][$foundIndex]))) {
-
-				// Get the current raw template
-				$rawData = $this->getRawTemplateData();
-
-				// Replace the space holder with the template code
-				$rawData = str_replace($templateMatches[0][$foundIndex], $code, $rawData);
-
-				// Set the new raw data
-				$this->setRawTemplateData($rawData);
-
-			} // END - if
-
-		} // END - foreach
-	}
-
-	/**
-	 * Load all extra raw templates
-	 *
-	 * @return	void
-	 */
-	private function loadExtraRawTemplates () {
-		// Are there some raw templates we need to load?
-		if (count($this->rawTemplates) > 0) {
-			// Try to load all raw templates
-			foreach ($this->rawTemplates as $key => $template) {
-				try {
-					// Load the template
-					$this->loadWebTemplate($template);
-
-					// Remember it's contents
-					$this->rawTemplates[$template] = $this->getRawTemplateData();
-
-					// Remove it from the loader list
-					unset($this->rawTemplates[$key]);
-
-					// Remember this template for recursion detection
-					// RECURSIVE PROTECTION!
-					$this->loadedTemplates[] = $template;
-				} catch (FilePointerNotOpenedException $e) {
-					// This template was never found. We silently ignore it
-					unset($this->rawTemplates[$key]);
-				}
-			}
-		}
-	}
-
-	/**
-	 * Assign all found template variables
-	 *
-	 * @param		$varMatches	An array full of variable/value pairs.
-	 * @return	void
-	 */
-	private function assignAllVariables (array $varMatches) {
-		// Search for all variables
-		foreach ($varMatches[1] as $key=>$var) {
-
-			// Detect leading equals
-			if (substr($varMatches[2][$key], 0, 1) == "=") {
-				// Remove and cast it
-				$varMatches[2][$key] = (string) substr($varMatches[2][$key], 1);
-			}
-
-			// Do we have some quotes left and right side? Then it is free text
-			if ((substr($varMatches[2][$key], 0, 1) == "\"") && (substr($varMatches[2][$key], -1, 1) == "\"")) {
-				// Free string detected! Which we can assign directly
-				$this->assignVariable($var, $varMatches[3][$key]);
-			} elseif (!empty($varMatches[2][$key])) {
-				// Non-string found so we need some deeper analysis...
-				// @TODO Unfinished work or don't die here.
-				die("Deeper analysis not yet implemented!");
-			}
-
-		} // for ($varMatches ...
-	}
-	/**
-	 * Compiles all loaded raw templates
-	 *
-	 * @param		$templateMatches	See method analyzeTemplate() for details
-	 * @return	void
-	 */
-	private function compileRawTemplateData (array $templateMatches) {
-		// Are some code-templates found which we need to compile?
-		if (count($this->loadedRawData) > 0) {
-
-			// Then compile all!
-			foreach ($this->loadedRawData as $template=>$code) {
-
-				// Is this template already compiled?
-				if (in_array($template, $this->compiledTemplates)) {
-					// Then skip it
-					continue;
-				}
-
-				// Search for the template
-				$foundIndex = array_search($template, $templateMatches[1]);
-
-				// Lookup the matching variable data
-				if (($foundIndex !== false) && (isset($templateMatches[3][$foundIndex]))) {
-
-					// Split it up with another reg. exp. into variable=value pairs
-					preg_match_all($this->regExpVarValue, $templateMatches[3][$foundIndex], $varMatches);
-
-					// Assign all variables
-					$this->assignAllVariables($varMatches);
-
-				} // END - if (isset($templateMatches ...
-
-				// Compile the loaded template
-				$this->compileCode($code, $template);
-
-			} // END - foreach ($this->loadedRawData ...
-
-			// Insert all templates
-			$this->insertAllTemplates($templateMatches);
-
-		} // END - if (count($this->loadedRawData) ...
-	}
-
-	/**
-	 * Inserts all raw templates into their respective variables
-	 *
-	 * @return	void
-	 */
-	private function insertRawTemplates () {
-		// Load all templates
-		foreach ($this->rawTemplates as $template=>$content) {
-			// Set the template as a variable with the content
-			$this->assignVariable($template, $content);
-		}
-	}
-
-	/**
-	 * Finalizes the compilation of all template variables
-	 *
-	 * @return	void
-	 */
-	private function finalizeVariableCompilation () {
-		// Get the content
-		$content = $this->getRawTemplateData();
-
-		// Walk through all variables
-		for ($idx = $this->varStack->getIterator(); $idx->valid(); $idx->next()) {
-			// Get current entry
-			$currEntry = $idx->current();
-
-			// Replace all [$var] or {?$var?} with the content
-			//* DEBUG: */ echo "name=".$currEntry['name'].", value=<pre>".htmlentities($currEntry['value'])."</pre>\n";
-			$content = str_replace("\$content[".$currEntry['name']."]", $currEntry['value'], $content);
-			$content = str_replace("[".$currEntry['name']."]", $currEntry['value'], $content);
-			$content = str_replace("{?".$currEntry['name']."?}", $currEntry['value'], $content);
-		} // END - for
-
-		// Set the content back
-		$this->setRawTemplateData($content);
-	}
-
-	/**
-	 * Getter for raw template data
-	 *
-	 * @return	$rawTemplateData	The raw data from the template
-	 */
-	public final function getRawTemplateData () {
-		return $this->rawTemplateData;
-	}
-
-	/**
-	 * Getter for compiled templates
-	 */
-	public final function getCompiledData () {
-		return $this->compiledData;
-	}
-
-	/**
-	 * Load a specified web template into the engine
-	 *
-	 * @param		$template		The web template we shall load which is
-	 *						located in "html" by default
-	 * @return	void
-	 */
-	public final function loadWebTemplate ($template) {
-		// Set template type
-		$this->setTemplateType($this->getConfigInstance()->readConfig('web_template_type'));
-
-		// Load the special template
-		$this->loadTemplate($template);
-	}
-
-	/**
-	 * Load a specified email template into the engine
-	 *
-	 * @param		$template		The email template we shall load which is
-	 *						located in "emails" by default
-	 * @return	void
-	 */
-	public final function loadEmailTemplate ($template) {
-		// Set template type
-		$this->setTemplateType($this->getConfigInstance()->readConfig('email_template_type'));
-
-		// Load the special template
-		$this->loadTemplate($template);
-	}
-
-	/**
-	 * Load a specified code template into the engine
-	 *
-	 * @param		$template		The code template we shall load which is
-	 *						located in "code" by default
-	 * @return	void
-	 */
-	public final function loadCodeTemplate ($template) {
-		// Set template type
-		$this->setTemplateType($this->getConfigInstance()->readConfig('code_template_type'));
-
-		// Load the special template
-		$this->loadTemplate($template);
-	}
-
-	/**
-	 * Compile all variables by inserting their respective values
-	 *
-	 * @return	void
-	 */
-	public final function compileVariables () {
-		// Initialize the $content array
-		$validVar = $this->getConfigInstance()->readConfig('tpl_valid_var');
-		$dummy = array();
-
-		// Iterate through all variables
-		for ($idx = $this->varStack->getIterator(); $idx->valid(); $idx->next()) {
-
-			// Get current variable from the stack
-			$currVariable = $idx->current();
-
-			// Transfer it's name/value combination to the $content array
-			//* DEBUG: */ echo $currVariable['name']."=<pre>".htmlentities($currVariable['value'])."</pre>\n";
-			$dummy[$currVariable['name']] = $currVariable['value'];
-
-		}// END - if
-
-		// Set the new variable (don't remove the second dollar !)
-		$$validVar = $dummy;
-
-		// Prepare all configuration variables
-		$config = $this->configVariables;
-
-		// Remove some variables
-		unset($idx);
-		unset($currVariable);
-
-		// Run the compilation twice to get content from helper classes in
-		$cnt = 0;
-		while ($cnt < 3) {
-			// Finalize the compilation of template variables
-			$this->finalizeVariableCompilation();
-
-			// Prepare the eval() command for comiling the template
-			$eval = sprintf("\$result = \"%s\";",
-				addslashes($this->getRawTemplateData())
-			);
-
-			// This loop does remove the backslashes (\) in PHP parameters
-			// @TODO Make this some nicer...
-			while (strpos($eval, "<?") !== false) {
-				// Get left part before "<?"
-				$evalLeft = substr($eval, 0, strpos($eval, "<?"));
-
-				// Get all from right of "<?"
-				$evalRight = substr($eval, (strpos($eval, "<?") + 2));
-
-				// Is this a full PHP tag?
-				if (substr(strtolower($evalRight), 0, 3) == "php") {
-					// Remove "php" string from full PHP tag
-					$evalRight = substr($evalRight, 3);
-				} // END - if
-
-				// Cut middle part out and remove escapes
-				$evalMiddle = trim(substr($evalRight, 0, strpos($evalRight, "?>")));
-				$evalMiddle = stripslashes($evalMiddle);
-
-				// Remove the middle part from right one
-				$evalRight = substr($evalRight, (strpos($evalRight, "?>") + 2));
-
-				// And put all together
-				$eval = sprintf("%s<%%php %s %%>%s", $evalLeft, $evalMiddle, $evalRight);
-			} // END - while
-
-			// Prepare PHP code for eval() command
-			$eval = str_replace(
-				"<%php", "\";",
-				str_replace(
-					"%>", "\$result .= \"", $eval
-				)
-			);
-
-			// Debug message
-			if ((defined('DEBUG_EVAL')) && (is_object($this->getDebugInstance()))) $this->getDebugInstance()->output(sprintf("[%s:] Constructed PHP command: <pre><em>%s</em></pre><br />\n",
-				$this->__toString(),
-				htmlentities($eval)
-			));
-
-			// Run the constructed command. This will "compile" all variables in
-			eval($eval);
-
-			// Set raw template data
-			$this->setRawTemplateData($result);
-			$cnt++;
-		}
-
-		// Set the new content
-		$this->setCompiledData($result);
-	}
-
-	/**
-	 * Compile all required templates into the current loaded one
-	 *
-	 * @return	void
-	 * @throws	UnexpectedTemplateTypeException	If the template type is
-	 *											not "code"
-	 * @throws	InvalidArrayCountException		If an unexpected array
-	 *											count has been found
-	 */
-	public final function compileTemplate () {
-		// We will only work with template type "code" from configuration
-		if ($this->getTemplateType() != $this->getConfigInstance()->readConfig('code_template_type')) {
-			// Abort here
-			throw new UnexpectedTemplateTypeException(array($this, $this->getTemplateType(), $this->getConfigInstance()->readConfig('code_template_type')), self::EXCEPTION_TEMPLATE_TYPE_IS_UNEXPECTED);
-		} // END - if
-
-		// Get the raw data.
-		$rawData = $this->getRawTemplateData();
-
-		// Remove double spaces and trim leading/trailing spaces
-		$rawData = trim(str_replace("  ", " ", $rawData));
-
-		// Search for raw variables
-		$this->extractVariablesFromRawData($rawData);
-
-		// Search for code-tags which are {? ?}
-		preg_match_all($this->regExpCodeTags, $rawData, $templateMatches);
-
-		// Analyze the matches array
-		if ((is_array($templateMatches)) && (count($templateMatches) == 4) && (count($templateMatches[0]) > 0)) {
-			// Entries are found:
-			//
-			// The main analysis
-			$this->analyzeTemplate($templateMatches);
-
-			// Compile raw template data
-			$this->compileRawTemplateData($templateMatches);
-
-			// Are there some raw templates left for loading?
-			$this->loadExtraRawTemplates();
-
-			// Are some raw templates found and loaded?
-			if (count($this->rawTemplates) > 0) {
-
-				// Insert all raw templates
-				$this->insertRawTemplates();
-
-				// Remove the raw template content as well
-				$this->setRawTemplateData("");
-
-			} // END - if
-
-		} // END - if($templateMatches ...
-	}
-
-	/**
-	 * Output the compiled page to the outside world. In case of web templates
-	 * this would be vaild (X)HTML code. And in case of email templates this
-	 * would store a prepared email body inside the template engine.
-	 *
-	 * @return	void
-	 */
-	public final function output () {
-		// Check which type of template we have
-		switch ($this->getTemplateType()) {
-		case "html": // Raw HTML templates can be send to the output buffer
-			// Quick-N-Dirty:
-			$this->getWebOutputInstance()->output($this->getCompiledData());
-			break;
-
-		default: // Unknown type found
-			// Construct message
-			$msg = sprintf("[%s:] Unknown/unsupported template type <strong>%s</strong> detected.",
-				$this->__toString(),
-				$this->getTemplateType()
-			);
-
-			if ((is_object($this->getDebugInstance())) && (method_exists($this->getDebugInstance(), 'output'))) {
-				// Use debug output handler
-				$this->getDebugInstance()->output($msg);
-				die();
-			} else {
-				// Put directly out
-				// DO NOT REWRITE THIS TO app_die() !!!
-				die($msg);
-			}
-			break;
-		}
-	}
-
-	/**
-	 * Loads a given view helper (by name)
-	 *
-	 * @param	$helperName	The helper's name
-	 * @return	void
-	 * @throws	ViewHelperNotFoundException	If the given view helper was not found
-	 */
-	protected function loadViewHelper ($helperName) {
-		// Make first character upper case, rest low
-		$helperName = ucfirst($helperName);
-
-		// Is this view helper loaded?
-		if (!isset($this->helpers[$helperName])) {
-			// Create a class name
-			$className = "{$helperName}ViewHelper";
-
-			// Does this class exists?
-			if (!class_exists($className)) {
-				// Abort here!
-				throw new ViewHelperNotFoundException(array($this, $helperName), self::EXCEPTION_INVALID_VIEW_HELPER);
-			}
-
-			// Generate new instance
-			$eval = sprintf("\$this->helpers[%s] = %s::create%s();",
-				$helperName,
-				$className,
-				$className
-			);
-
-			// Run the code
-			eval($eval);
-		}
-
-		// Return the requested instance
-		return $this->helpers[$helperName];
-	}
-
-	/**
-	 * Assigns the last loaded raw template content with a given variable
-	 *
-	 * @param	$templateName	Name of the template we want to assign
-	 * @param	$variableName	Name of the variable we want to assign
-	 * @return	void
-	 */
-	public function assignTemplateWithVariable ($templateName, $variableName) {
-		// Get the content from last loaded raw template
-		$content = $this->getRawTemplateData();
-
-		// Assign the variable
-		$this->assignVariable($variableName, $content);
-
-		// Purge raw content
-		$this->setRawTemplateData("");
-	}
-
-	/**
-	 * Transfers the content of this template engine to a given response instance
-	 *
-	 * @param	$responseInstance	An instance of a response class
-	 * @return	void
-	 */
-	public function transferToResponse (Responseable $responseInstance) {
-		// Get the content and set it in the response class
-		$responseInstance->writeToBody($this->getCompiledData());
-	}
-
-	/**
-	 * Assigns all the application data with template variables
-	 *
-	 * @param	$appInstance	A manageable application instance
-	 * @return	void
-	 */
-	public function assignApplicationData (ManageableApplication $appInstance) {
-		// Get long name and assign it
-		$this->assignVariable("app_full_name" , $appInstance->getAppName());
-
-		// Get short name and assign it
-		$this->assignVariable("app_short_name", $appInstance->getAppShortName());
-
-		// Get version number and assign it
-		$this->assignVariable("app_version"   , $appInstance->getAppVersion());
-	}
-}
-
-// [EOF]
-?>
diff --git a/inc/classes/main/template/image/class_ImageTemplateEngine.php b/inc/classes/main/template/image/class_ImageTemplateEngine.php
index 210002ffe9..68d1cbef65 100644
--- a/inc/classes/main/template/image/class_ImageTemplateEngine.php
+++ b/inc/classes/main/template/image/class_ImageTemplateEngine.php
@@ -100,7 +100,7 @@ class ImageTemplateEngine extends BaseTemplateEngine implements CompileableTempl
 		$tplInstance->setCodeTemplateExtension($cfgInstance->readConfig('code_template_extension'));
 
 		// Absolute output path for compiled templates
-		$tplInstance->setCompileOutputPath(PATH . $cfgInstance->readConfig('compile_output_path'));
+		$tplInstance->setCompileOutputPath($cfgInstance->readConfig('base_path') . $cfgInstance->readConfig('compile_output_path'));
 
 		// Return the prepared instance
 		return $tplInstance;
diff --git a/inc/classes/main/template/mail/class_MailTemplateEngine.php b/inc/classes/main/template/mail/class_MailTemplateEngine.php
index fbe229d7cf..8fcd0f9e5f 100644
--- a/inc/classes/main/template/mail/class_MailTemplateEngine.php
+++ b/inc/classes/main/template/mail/class_MailTemplateEngine.php
@@ -100,7 +100,7 @@ class MailTemplateEngine extends BaseTemplateEngine implements CompileableTempla
 		$tplInstance->setCodeTemplateExtension($cfgInstance->readConfig('code_template_extension'));
 
 		// Absolute output path for compiled templates
-		$tplInstance->setCompileOutputPath(PATH . $cfgInstance->readConfig('compile_output_path'));
+		$tplInstance->setCompileOutputPath($cfgInstance->readConfig('base_path') . $cfgInstance->readConfig('compile_output_path'));
 
 		// Return the prepared instance
 		return $tplInstance;
diff --git a/inc/classes/main/template/web/class_WebTemplateEngine.php b/inc/classes/main/template/web/class_WebTemplateEngine.php
index d166f9f019..61a6bbb107 100644
--- a/inc/classes/main/template/web/class_WebTemplateEngine.php
+++ b/inc/classes/main/template/web/class_WebTemplateEngine.php
@@ -81,7 +81,7 @@ class WebTemplateEngine extends BaseTemplateEngine implements CompileableTemplat
 		$tplInstance->setCodeTemplateExtension($cfgInstance->readConfig('code_template_extension'));
 
 		// Absolute output path for compiled templates
-		$tplInstance->setCompileOutputPath(PATH . $cfgInstance->readConfig('compile_output_path'));
+		$tplInstance->setCompileOutputPath($cfgInstance->readConfig('base_path') . $cfgInstance->readConfig('compile_output_path'));
 
 		// Return the prepared instance
 		return $tplInstance;
diff --git a/inc/classes/middleware/database/class_DatabaseConnection.php b/inc/classes/middleware/database/class_DatabaseConnection.php
index 1d9fe9b43e..736ea4b501 100644
--- a/inc/classes/middleware/database/class_DatabaseConnection.php
+++ b/inc/classes/middleware/database/class_DatabaseConnection.php
@@ -98,25 +98,6 @@ class DatabaseConnection extends BaseMiddleware implements DatabaseConnector, Re
 		$this->dbLayer = $dbLayer;
 	}
 
-	/**
-	 * Analyses if a unique ID has already been used or not. This method does
-	 * only pass the given ID through to the "real" database layer.
-	 *
-	 * @param	$uniqueID		A unique ID number which shall be checked
-	 *							before it will be used
-	 * @param	$inConstructor	If called from a constructor or from
-	 *							somewhere else
-	 * @return	$isUnused		true	= The unique ID was not found in the database,
-	 *							false = It is already in use by an other object
-	 */
-	public function isUniqueIdUsed ($uniqueID, $inConstructor = false) {
-		// Connect to the database
-		$this->dbLayer->connectToDatabase();
-
-		// Pass the returning result through
-		return $this->dbLayer->isUniqueIdUsed($uniqueID, $inConstructor);
-	}
-
 	/**
 	 * Runs a "select" statement on the database layer with given table name
 	 * and criteria. If this doesn't fail the result will be returned
diff --git a/inc/classes/third_party/api/wernisportal/class_WernisApi.php b/inc/classes/third_party/api/wernisportal/class_WernisApi.php
index 4c306dd1a1..cdda5d45d6 100644
--- a/inc/classes/third_party/api/wernisportal/class_WernisApi.php
+++ b/inc/classes/third_party/api/wernisportal/class_WernisApi.php
@@ -200,7 +200,7 @@ class WernisApi extends BaseFrameworkSystem {
 
 		// Construct the request string
 		$requestString = $this->config['api_url'] . $scriptName."?api_id=".$this->config['wernis_api_id']."&api_key=".$this->config['wernis_api_key'];
-		foreach ($requestData as $key=>$value) {
+		foreach ($requestData as $key => $value) {
 			$requestString .= "&".$key."=".$value;
 		}
 
diff --git a/inc/config.php b/inc/config.php
index 4c73950744..d50782a1da 100644
--- a/inc/config.php
+++ b/inc/config.php
@@ -33,16 +33,16 @@
 $cfg = FrameworkConfiguration::createFrameworkConfiguration();
 
 // CFG: SERVER-PATH
-$cfg->definePath(dirname(dirname(__FILE__)) . '/'); // DON'T MISS THE TRAILING SLASH!!!
+$cfg->setConfigEntry('base_path', (dirname(dirname(__FILE__)) . '/')); // DON'T MISS THE TRAILING SLASH!!!
 
 // CFG: BASE-URL
 $cfg->setConfigEntry('base_url', $cfg->detectBaseUrl());
 
 // CFG: DATABASE-TYPE
-$cfg->defineDatabaseType('local');
+$cfg->setConfigEntry('db_type', "local");
 
 // CFG: LOCAL-DB-PATH
-$cfg->setConfigEntry('local_db_path', "db/");
+$cfg->setConfigEntry('local_db_path', $cfg->readConfig('base_path') . "db/");
 
 // CFG: TIME-ZONE
 $cfg->setDefaultTimezone("Europe/Berlin");
@@ -84,7 +84,7 @@ $cfg->setConfigEntry('lang_base_path', "inc/language/"); // DON'T MISS THE TRAIL
 $cfg->setConfigEntry('compressor_base_path', "inc/classes/main/compressor/"); // DON'T MISS THE TRAILING SLASH!
 
 // CFG: APPLICATION-PATH
-$cfg->setConfigEntry('application_path', "application");
+$cfg->setConfigEntry('application_path', $cfg->readConfig('base_path') . "application/");
 
 // CFG: COMPILE-OUTPUT-PATH
 $cfg->setConfigEntry('compile_output_path', "templates/_compiled/"); // DON'T MISS THE TRAILING SLASH!
@@ -116,9 +116,6 @@ $cfg->setConfigEntry('tpl_selector_prefix', "selector");
 // CFG: WEB-CONTENT-TYPE
 $cfg->setConfigEntry('web_content_type', "text/html");
 
-// CFG: HEADER-CHARSET
-$cfg->setConfigEntry('header_charset', "utf-8");
-
 // CFG: VALID-TEMPLATE-VARIABLE
 $cfg->setConfigEntry('tpl_valid_var', "content");
 
diff --git a/inc/config/class_FrameworkConfiguration.php b/inc/config/class_FrameworkConfiguration.php
index 6bfdfbf7c1..8f6fa15f45 100644
--- a/inc/config/class_FrameworkConfiguration.php
+++ b/inc/config/class_FrameworkConfiguration.php
@@ -139,7 +139,7 @@ class FrameworkConfiguration implements Registerable {
 					// Base path added? (Uni* / Windows)
 					if ((substr($inc, 0, 1) != "/") && (substr($inc, 1, 1) != ":")) {
 						// Generate FQFN
-						$fqfn = sprintf("%s/inc/extra/%s", PATH, $inc);
+						$fqfn = sprintf("%s/inc/extra/%s", $this->readConfig('base_path'), $inc);
 					} // END - if
 				} // END - if
 
@@ -149,63 +149,14 @@ class FrameworkConfiguration implements Registerable {
 		} // END - if
 	}
 
-	/**
-	 * Define the database type which must be valid and will not be verified.
-	 *
-	 * @param		$type	The database type. See path inc/database/.
-	 * @return	void
-	 */
-	public function defineDatabaseType ($type) {
-		// Is it defined or not?
-		if (defined('_DB_TYPE')) {
-			// Already defined! But we cannot throw an exception here... :(
-			ApplicationEntryPoint::app_die(sprintf("[%s:] Please define the database type only once in your application!",
-				__CLASS__
-			));
-		}
-
-		// Set the constant
-		define('_DB_TYPE', (string) $type);
-	}
-
-	/**
-	 * Define the local file path
-	 *
-	 * @param		$path	Local file path for include files.
-	 * @return	void
-	 */
-	public function definePath ($path) {
-		// Cast to string
-		$path = (string) $path;
-
-		// Replace backslashes with slashes
-		$path = str_replace("\\", "/", $path);
-
-		// Is it defined or not?
-		if ((!is_dir($path)) || (!is_readable($path))) {
-			// Is not a valid path
-			ApplicationEntryPoint::app_die(sprintf("[%s:] Invalid path (not found) specified. Please make sure it is created.",
-				__CLASS__
-			));
-		} elseif (defined('PATH')) {
-			// Already defined! But we cannot throw an exception here... :(
-			ApplicationEntryPoint::app_die(sprintf("[%s:] Please define the local file path only once in your application.",
-				__CLASS__
-			));
-		}
-
-		// Define path here
-		define('PATH', $path);
-	}
-
 	/**
 	 * Read a configuration element.
 	 *
-	 * @param		$cfgEntry	The configuration element
+	 * @param	$cfgEntry	The configuration element
 	 * @return	$cfgValue	The fetched configuration value
-	 * @throws	ConfigEntryIsEmptyException	If $cfgEntry is empty
+	 * @throws	ConfigEntryIsEmptyException		If $cfgEntry is empty
 	 * @throws	ConfigEntryNotFoundException	If a configuration element
-	 *									was not found
+	 *											was not found
 	 */
 	public function readConfig ($cfgEntry) {
 		// Cast to string
@@ -232,8 +183,8 @@ class FrameworkConfiguration implements Registerable {
 	/**
 	 * Set a configuration entry.
 	 *
-	 * @param		$cfgEntry	The configuration entry we want to add/change
-	 * @param		$cfgValue	The configuration value we want to set
+	 * @param	$cfgEntry	The configuration entry we want to add/change
+	 * @param	$cfgValue	The configuration value we want to set
 	 * @return	void
 	 * @throws	ConfigEntryIsEmptyException	If $cfgEntry is empty
 	 */
diff --git a/inc/database.php b/inc/database.php
index 1d381d2e2b..03bc377ac5 100644
--- a/inc/database.php
+++ b/inc/database.php
@@ -23,21 +23,16 @@
  */
 
 // Initialize layer
-$layer = null;
+$layerInstance = null;
 
-// Is the type defined?
-if (!defined('_DB_TYPE')) {
-	// Abort here
-	ApplicationEntryPoint::app_die("[Main:] Please define a database type first!<br />
-E.g.:<pre>&#36;cfg->defineDatabaseType(&quot;local&quot;);</pre>
-This will choose the local file-based database layer.");
-}
+// Get config instance
+$cfg = FrameworkConfiguration::getInstance();
 
 // Generate FQFN for the database layer
 $INC = sprintf("%sinc/database/lib-%s%s",
-	PATH,
-	_DB_TYPE,
-	FrameworkConfiguration::getInstance()->readConfig('php_extension')
+	$cfg->readConfig('base_path'),
+	$cfg->readConfig('db_type'),
+	$cfg->readConfig('php_extension')
 );
 
 // Load the database layer include
@@ -47,7 +42,7 @@ if ((file_exists($INC)) && (is_file($INC)) && (is_readable($INC))) {
 } else {
 	// Layer is missing!
 	ApplicationEntryPoint::app_die(sprintf("[Main:] Database layer is missing! (%s) -&gt; R.I.P.",
-		_DB_TYPE
+		$cfg->readConfig('db_type')
 	));
 }
 
@@ -56,7 +51,7 @@ unset($INC);
 
 // Prepare database instance
 try {
-	$db = DatabaseConnection::createDatabaseConnection(DebugMiddleware::getInstance(), $layer);
+	$db = DatabaseConnection::createDatabaseConnection(DebugMiddleware::getInstance(), $layerInstance);
 } catch (NullPointerException $e) {
 	ApplicationEntryPoint::app_die(sprintf("[Main:] Database sub-system not initialized for the follwing reason: <strong>%s</strong><br />\n",
 		$e->getMessage()
diff --git a/inc/database/lib-local.php b/inc/database/lib-local.php
index 7216bedd6e..ae748c5de1 100644
--- a/inc/database/lib-local.php
+++ b/inc/database/lib-local.php
@@ -24,7 +24,7 @@
 
 // Zum Testen speichern wir in lokale Dateien (LocalFileDatabase)
 try {
-	$layer = LocalFileDatabase::createLocalFileDatabase(PATH . FrameworkConfiguration::getInstance()->readConfig('local_db_path'), FileIoHandler::getInstance());
+	$layerInstance = LocalFileDatabase::createLocalFileDatabase(FrameworkConfiguration::getInstance()->readConfig('local_db_path'), FileIoHandler::getInstance());
 } catch (SavePathIsEmptyException $e) {
 	ApplicationEntryPoint::app_die(sprintf("[Main:] Database layer could not be initialized. Reason: <strong>%s</strong>",
 		$e->getMessage()
diff --git a/inc/includes.php b/inc/includes.php
index 41933d9544..54bd39be01 100644
--- a/inc/includes.php
+++ b/inc/includes.php
@@ -26,7 +26,7 @@
 $cfg = FrameworkConfiguration::getInstance();
 
 // Include the class loader function
-require(sprintf("%sinc/loader/class_ClassLoader%s", PATH, $cfg->readConfig('php_extension')));
+require(sprintf("%sinc/loader/class_ClassLoader%s", $cfg->readConfig('base_path'), $cfg->readConfig('php_extension')));
 
 // Does the user has an application specified?
 if (!empty($_GET['app'])) {
@@ -71,7 +71,7 @@ function __autoload ($className) {
 /**
  * Is the devel package included?
  */
-if (is_dir(sprintf("%sdevel", PATH))) {
+if (is_dir(sprintf("%sdevel", $cfg->readConfig('base_path')))) {
 	/**
 	 * Load all development includes
 	 */
diff --git a/inc/language.php b/inc/language.php
index 3f7c3859cb..6db17c0ba7 100644
--- a/inc/language.php
+++ b/inc/language.php
@@ -22,7 +22,7 @@
  */
 try {
 	$lang = LanguageSystem::createLanguageSystem(sprintf("%s%s",
-		PATH,
+		$cfg->readConfig('base_path'),
 		FrameworkConfiguration::getInstance()->readConfig('lang_base_path')
 	));
 } catch (LanguagePathIsEmptyException $e) {
diff --git a/inc/loader/class_ClassLoader.php b/inc/loader/class_ClassLoader.php
index 7297c7d199..134b8c10d4 100644
--- a/inc/loader/class_ClassLoader.php
+++ b/inc/loader/class_ClassLoader.php
@@ -119,8 +119,8 @@ class ClassLoader {
 
 		// Construct the FQFN for the cache
 		if (!defined('DEVELOPER')) {
-			$this->listCacheFQFN  = PATH . $this->cfgInstance->readConfig('local_db_path') . "list-" . $this->cfgInstance->readConfig('app_name') . ".cache";
-			$this->classCacheFQFN = PATH . $this->cfgInstance->readConfig('local_db_path') . "class-" . $this->cfgInstance->readConfig('app_name') . ".cache";
+			$this->listCacheFQFN  = $this->cfgInstance->readConfig('local_db_path') . "list-" . $this->cfgInstance->readConfig('app_name') . ".cache";
+			$this->classCacheFQFN = $this->cfgInstance->readConfig('local_db_path') . "class-" . $this->cfgInstance->readConfig('app_name') . ".cache";
 		} // END - if
 
 		// Set suffix and prefix from configuration
@@ -208,8 +208,8 @@ class ClassLoader {
 	/**
 	 * Scans recursively a local path for class files which must have a prefix and a suffix as given by $this->suffix and $this->prefix
 	 *
-	 * @param		$basePath		The relative base path to PATH constant for all classes
-	 * @param		$ignoreList	An optional list (array or string) of directory names which shall be ignored
+	 * @param	$basePath		The relative base path to 'base_path' constant for all classes
+	 * @param	$ignoreList		An optional list (array or string) of directory names which shall be ignored
 	 * @return	void
 	 */
 	public function loadClasses ($basePath, $ignoreList = array() ) {
@@ -280,7 +280,7 @@ class ClassLoader {
 		$this->prefixLen = strlen($this->prefix);
 
 		// Set base directory
-		$basePath = sprintf("%sinc/config/", PATH);
+		$basePath = sprintf("%sinc/config/", $this->cfgInstance->readConfig('base_path'));
 
 		// Load all classes from the config directory
 		$this->loadClasses($basePath);
@@ -334,7 +334,7 @@ class ClassLoader {
 	 */
 	private function includeExtraConfigs () {
 		// Run through all class names (should not be much)
-		foreach ($this->classes as $fileName=>$fqfn) {
+		foreach ($this->classes as $fileName => $fqfn) {
 			// Is this a config?
 			if (substr($fileName, 0, $this->prefixLen) == $this->prefix) {
 				// Then include it
diff --git a/inc/selector.php b/inc/selector.php
index a1ae868810..ddab76926e 100644
--- a/inc/selector.php
+++ b/inc/selector.php
@@ -45,8 +45,7 @@ foreach ($configAppIncludes as $inc) {
 	}
 
 	// Generate a FQFN for the helper class
-	$fqfn = sprintf("%s%s/%s/%s%s",
-		PATH,
+	$fqfn = sprintf("%s%s/%s%s",
 		$cfg->readConfig('application_path'),
 		$cfg->readConfig('app_name'),
 		$inc,
diff --git a/index.php b/index.php
index 9d61748040..5b3894a379 100644
--- a/index.php
+++ b/index.php
@@ -68,7 +68,7 @@ class ApplicationEntryPoint {
 		if (empty($message)) {
 			// No message provided
 			$message = "No message provided!";
-		}
+		} // END - if
 
 		// Get some instances
 		$tpl = FrameworkConfiguration::getInstance()->readConfig('template_class');
@@ -93,13 +93,25 @@ class ApplicationEntryPoint {
 			// Get and prepare backtrace for output
 			$backtraceArray = debug_backtrace();
 			$backtrace = "";
-			foreach ($backtraceArray as $key=>$trace) {
+			foreach ($backtraceArray as $key => $trace) {
 				if (!isset($trace['file'])) $trace['file'] = __FILE__;
 				if (!isset($trace['line'])) $trace['line'] = __LINE__;
 				if (!isset($trace['args'])) $trace['args'] = array();
 				$backtrace .= "<span class=\"backtrace_file\">".basename($trace['file'])."</span>:".$trace['line'].", <span class=\"backtrace_function\">".$trace['function']."(".count($trace['args']).")</span><br />";
 			} // END - foreach
 
+			// Init application instance
+			$appInstance = null;
+
+			// Is the class there?
+			if (class_exists('ApplicationHelper')) {
+				// Get application instance
+				$appInstance = ApplicationHelper::getInstance();
+
+				// Assign application data
+				$templateInstance->assignApplicationData($appInstance);
+			} // END - if
+
 			// Assign variables
 			$templateInstance->assignVariable('message', $message);
 			$templateInstance->assignVariable('code', $code);
@@ -150,13 +162,13 @@ class ApplicationEntryPoint {
 		require(dirname(__FILE__) . '/inc/config.php');
 
 		// Load all include files
-		require(PATH . 'inc/includes.php');
+		require($cfg->readConfig('base_path') . 'inc/includes.php');
 
 		// Load all framework classes
-		require(PATH . 'inc/classes.php');
+		require($cfg->readConfig('base_path') . 'inc/classes.php');
 
 		// Include the application selector
-		require(PATH . 'inc/selector.php');
+		require($cfg->readConfig('base_path') . 'inc/selector.php');
 	} // END - main()
 
 } // END - class
-- 
2.39.5