diff --git a/t3lib/class.t3lib_bedisplaylog.php b/t3lib/class.t3lib_bedisplaylog.php
index a004e08..79e34c6 100644
--- a/t3lib/class.t3lib_bedisplaylog.php
+++ b/t3lib/class.t3lib_bedisplaylog.php
@@ -42,6 +42,7 @@
  * @package TYPO3
  * @subpackage t3lib
  * @see tx_belog_webinfo, SC_mod_tools_log_index
+ * @deprecated and unused since TYPO3 4.8, will be removed two versions later
  */
 class t3lib_BEDisplayLog {
 	var $lastTimeLabel = '';
@@ -63,6 +64,13 @@ class t3lib_BEDisplayLog {
 	var $be_user_Array = array(); // Username array (set externally)
 
 	/**
+	 * Default constructor logs deprecation
+	 */
+	public function __construct() {
+		t3lib_div::logDeprecatedFunction();
+	}
+
+	/**
 	 * Initialize the log table array with header labels.
 	 *
 	 * @return	array
diff --git a/t3lib/stddb/tables.php b/t3lib/stddb/tables.php
index 83c05dd..adfa1fe 100644
--- a/t3lib/stddb/tables.php
+++ b/t3lib/stddb/tables.php
@@ -312,6 +312,23 @@ $TCA['sys_collection'] = array(
 );
 
 /**
+ * Table "sys_history":
+ * Holds history records, the config part is defined in t3lib/stddb/tbl_be.php
+ */
+$TCA['sys_history'] = array(
+	'ctrl' => array(
+		'title' => 'LLL:EXT:lang/locallang_tca.xlf:sys_history',
+		'label' => 'tablename',
+		'tstamp' => 'tstamp',
+		'adminOnly' => TRUE,
+		'rootLevel' => TRUE,
+		'hideTable' => TRUE,
+		'default_sortby' => 'uid DESC',
+		'dynamicConfigFile' => 'T3LIB:tbl_be.php',
+	),
+);
+
+/**
  * Table "sys_languages":
  * Defines possible languages used for translation of records in the system
  * This is only the 'header' part (ctrl). The full configuration is found in t3lib/stddb/tbl_be.php
@@ -335,6 +352,22 @@ $TCA['sys_language'] = array(
 	)
 );
 
+/**
+ * Table "sys_log":
+ * Holds log records, the config part is defined in t3lib/stddb/tbl_be.php
+ */
+$TCA['sys_log'] = array(
+	'ctrl' => array(
+		'title' => 'LLL:EXT:lang/locallang_tca.xlf:sys_log',
+		'label' => 'details',
+		'tstamp' => 'tstamp',
+		'adminOnly' => TRUE,
+		'rootLevel' => TRUE,
+		'hideTable' => TRUE,
+		'default_sortby' => 'uid DESC',
+		'dynamicConfigFile' => 'T3LIB:tbl_be.php',
+	),
+);
 
 /**
  * Table "sys_news":
diff --git a/t3lib/stddb/tables.sql b/t3lib/stddb/tables.sql
index d297190..bc60488 100644
--- a/t3lib/stddb/tables.sql
+++ b/t3lib/stddb/tables.sql
@@ -308,6 +308,7 @@ CREATE TABLE sys_collection_entries (
 #
 CREATE TABLE sys_history (
   uid int(11) unsigned NOT NULL auto_increment,
+  pid int(11) unsigned DEFAULT '0' NOT NULL,
   sys_log_uid int(11) DEFAULT '0' NOT NULL,
   history_data mediumtext,
   fieldlist text,
@@ -317,6 +318,7 @@ CREATE TABLE sys_history (
   history_files mediumtext,
   snapshot tinyint(4) DEFAULT '0' NOT NULL,
   PRIMARY KEY (uid),
+  KEY parent (pid),
   KEY recordident_1 (tablename,recuid),
   KEY recordident_2 (tablename,tstamp),
   KEY sys_log_uid (sys_log_uid)
@@ -366,6 +368,7 @@ CREATE TABLE sys_refindex (
 #
 CREATE TABLE sys_log (
   uid int(11) unsigned NOT NULL auto_increment,
+  pid int(11) unsigned DEFAULT '0' NOT NULL,
   userid int(11) unsigned DEFAULT '0' NOT NULL,
   action tinyint(4) unsigned DEFAULT '0' NOT NULL,
   recuid int(11) unsigned DEFAULT '0' NOT NULL,
@@ -382,6 +385,7 @@ CREATE TABLE sys_log (
   workspace int(11) DEFAULT '0' NOT NULL,
   NEWid varchar(20) DEFAULT '' NOT NULL,
   PRIMARY KEY (uid),
+  KEY parent (pid),
   KEY event (userid,event_pid),
   KEY recuidIdx (recuid,uid),
   KEY user_auth (type,action,tstamp)
diff --git a/t3lib/stddb/tbl_be.php b/t3lib/stddb/tbl_be.php
index 304ebc1..e7631d4 100644
--- a/t3lib/stddb/tbl_be.php
+++ b/t3lib/stddb/tbl_be.php
@@ -867,6 +867,68 @@ $TCA['sys_collection'] = array(
 );
 
 /**
+ * System Log
+ */
+$TCA['sys_history'] = array(
+	'ctrl' => $TCA['sys_history']['ctrl'],
+	'columns' => array(
+		'sys_log_uid' => array(
+			'label' => 'sys_log_uid',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'history_data' => array(
+			'label' => 'history_data',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'fieldlist' => array(
+			'label' => 'fieldlist',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'recuid' => array(
+			'label' => 'recuid',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'tablename' => array(
+			'label' => 'tablename',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'tstamp' => array(
+			'label' => 'tstamp',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'history_files' => array(
+			'label' => 'history_files',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'snapshot' => array(
+			'label' => 'snapshot',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+	),
+	'types' => array(
+		'1' => array(
+			'showitem' => 'sys_log_uid, history_data, fieldlist, recuid, tablename, tstamp, history_files, snapshot',
+		),
+	),
+);
+
+/**
  * System languages - Defines possible languages used for translation of records in the system
  */
 $TCA['sys_language'] = array(
@@ -927,6 +989,109 @@ $TCA['sys_language'] = array(
 	)
 );
 
+/**
+ * System Log
+ */
+$TCA['sys_log'] = array(
+	'ctrl' => $TCA['sys_log']['ctrl'],
+	'columns' => array(
+		'tstamp' => array(
+			'label' => 'tstamp',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'userid' => array(
+			'label' => 'userid',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'action' => array(
+			'label' => 'action',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'recuid' => array(
+			'label' => 'recuid',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'tablename' => array(
+			'label' => 'tablename',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'recpid' => array(
+			'label' => 'recpid',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'error' => array(
+			'label' => 'error',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'details' => array(
+			'label' => 'details',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'type' => array(
+			'label' => 'type',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'detail_nr' => array(
+			'label' => 'detail_nr',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'IP' => array(
+			'label' => 'IP',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'log_data' => array(
+			'label' => 'log_data',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'event_pid' => array(
+			'label' => 'event_pid',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'workspace' => array(
+			'label' => 'workspace',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+		'NEWid' => array(
+			'label' => 'NEWid',
+			'config' => array(
+				'type' => 'input',
+			),
+		),
+	),
+	'types' => array(
+		'1' => array(
+			'showitem' => 'tstamp, userid, action, recuid, tablename, recpid, error, details, type, details_nr, IP, log_data, event_pid, workspace, NEWid',
+		),
+	),
+);
 
 /**
  * System News (displayed on Login screen)
diff --git a/typo3/sysext/belog/Classes/Controller/AbstractController.php b/typo3/sysext/belog/Classes/Controller/AbstractController.php
new file mode 100644
index 0000000..dcc1f36
--- /dev/null
+++ b/typo3/sysext/belog/Classes/Controller/AbstractController.php
@@ -0,0 +1,250 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Abstract class to show log entries from sys_log
+ *
+ * @author Christian Kuhn <lolli@schwarzbu.ch>
+ * @package TYPO3
+ * @subpackage belog
+ */
+abstract class Tx_Belog_Controller_AbstractController extends Tx_Extbase_MVC_Controller_ActionController {
+
+	/**
+	 * @var Tx_Belog_Domain_Repository_SysLogRepository
+	 */
+	protected $sysLogRepository;
+
+	/**
+	 * Inject sys log repository
+	 *
+	 * @param Tx_Belog_Domain_Repository_SysLogRepository $sysLogRepository
+	 * @return void
+	 */
+	public function injectSysLogRepository(Tx_Belog_Domain_Repository_SysLogRepository $sysLogRepository) {
+		$this->sysLogRepository = $sysLogRepository;
+	}
+
+	/**
+	 * Initialize index action
+	 *
+	 * @return void
+	 */
+	public function initializeIndexAction() {
+		if (!isset($this->settings['dateFormat'])) {
+			$this->settings['dateFormat'] = $GLOBALS['TYPO3_CONF_VARS']['SYS']['ddmmyy'];
+		}
+		if (!isset($this->settings['timeFormat'])) {
+			$this->settings['timeFormat'] = $GLOBALS['TYPO3_CONF_VARS']['SYS']['hhmm'];
+		}
+
+			// @TODO: If some idiot clicks manual date, but does not choose a valid date, an exception is thrown that should be handled
+
+		$this->configurePropertyMapperForDateTimeFormat($this->arguments['constraint']->getPropertyMappingConfiguration()->forProperty('manualDateStart'));
+		$this->configurePropertyMapperForDateTimeFormat($this->arguments['constraint']->getPropertyMappingConfiguration()->forProperty('manualDateStop'));
+	}
+
+	/**
+	 * Show general information and the installed modules
+	 *
+	 * @param Tx_Belog_Domain_Model_Constraint $constraint
+	 * @return void
+	 */
+	public function indexAction(Tx_Belog_Domain_Model_Constraint $constraint = NULL) {
+			// Constraint object handling:
+			// If there is none from GET, try to get it from BE user data, else create new
+		if (!$constraint instanceof Tx_Belog_Domain_Model_Constraint) {
+			$constraint = $this->getConstraintObjectFromBeUserData();
+			if (!$constraint) {
+				$constraint = $this->objectManager->get('Tx_Belog_Domain_Model_Constraint');
+			}
+		} else {
+			$this->persistConstraintObjectInBeUserData($constraint);
+		}
+		$constraint = $this->forceWorkspaceSelectionIfInWorkspace($constraint);
+		debug($this->settings);
+
+		$logEntries = $this->sysLogRepository->findByConstraint($constraint);
+		$groupedLogEntries = $this->groupLogEntriesByPageAndDay($logEntries);
+
+		$this->view
+			->assign('groupedLogEntries', $groupedLogEntries)
+			->assign('constraint', $constraint)
+			->assign('userGroupList', $this->createUserAndGroupListForSelectOptions())
+			->assign('workspaceList', $this->createWorkspaceListForSelectOptions())
+		;
+	}
+
+	/**
+	 * Get module states (the constraint object) from user data
+	 *
+	 * @return mixed Valid Tx_Belog_Domain_Model_Constraint object, or FALSE
+	 */
+	protected function getConstraintObjectFromBeUserData() {
+		$serializedConstraintObject = $GLOBALS['BE_USER']->getModuleData(get_class($this));
+		$constraintObject = NULL;
+		if (strlen($serializedConstraintObject) > 0) {
+			$constraintObject = @unserialize($serializedConstraintObject);
+		}
+		if ($constraintObject instanceof Tx_Belog_Domain_Model_Constraint) {
+			return $constraintObject;
+		} else {
+			return FALSE;
+		}
+	}
+
+	/**
+	 * Save current constraint object in be user settings (uC)
+	 *
+	 * @param Tx_Belog_Domain_Model_Constraint $constraint
+	 * @return void
+	 */
+	protected function persistConstraintObjectInBeUserData(Tx_Belog_Domain_Model_Constraint $constraint) {
+		$GLOBALS['BE_USER']->pushModuleData(get_class($this), serialize($constraint));
+	}
+
+	/**
+	 * Create a sorted array for day and page view from
+	 * the query result of the sys log repository
+	 *
+	 * [pid]['path'] = '/page1/subPage1'
+	 * [pid]['days'][12345]['entries']
+	 * [pid]['days'][23456]['entries']
+	 *
+	 * @param Tx_Extbase_Persistence_QueryResult<Tx_Belog_Domain_Model_LogEntry> $logEntries
+	 * @return array
+	 */
+	protected function groupLogEntriesByPageAndDay(Tx_Extbase_Persistence_QueryResult $logEntries) {
+		$targetStructure = array();
+
+			/** @var $entry Tx_Belog_Domain_Model_SysLog */
+		foreach ($logEntries as $entry) {
+			$pid = $entry->getEventPid();
+			if (!is_array($targetStructure[$pid])) {
+				$targetStructure[$pid] = array(
+					'path' => 'a path',
+					'days' => array(),
+				);
+			}
+
+			$timestampDay = strtotime(strftime('%d.%m.%Y', $entry->getTstamp()));
+			if (!is_array($targetStructure[$pid]['days'][$timestampDay])) {
+				$targetStructure[$pid]['days'][$timestampDay] = array(
+					'logItems' => array(),
+				);
+			}
+
+			$targetStructure[$pid]['days'][$timestampDay]['logItems'][] = $entry;
+		}
+
+		return $targetStructure;
+	}
+
+	/**
+	 * Configure the property mapper to expect date strings in configured BE format
+	 *
+	 * @param Tx_Extbase_Property_PropertyMappingConfiguration $propertyMapperDate
+	 * @return void
+	 */
+	protected function configurePropertyMapperForDateTimeFormat(Tx_Extbase_Property_PropertyMappingConfiguration $propertyMapperDate) {
+		$propertyMapperDate->setTypeConverterOption(
+			'Tx_Extbase_Property_TypeConverter_DateTimeConverter',
+			Tx_Extbase_Property_TypeConverter_DateTimeConverter::CONFIGURATION_DATE_FORMAT,
+			$this->settings['dateFormat'] . ' ' . $this->settings['timeFormat']
+		);
+	}
+
+	/**
+	 * Create options for the user / group drop down.
+	 * This is not moved to a repository by intention to not mix up this 'meta' data
+	 * with real repository work
+	 *
+	 * @return array Key is the option name, value its label
+	 */
+	protected function createUserAndGroupListForSelectOptions() {
+		$userGroupArray = array();
+
+			// Two meta entries: 'all' and 'self'
+		$userGroupArray[0] = Tx_Extbase_Utility_Localization::translate('any', 'Belog');
+		$userGroupArray[-1] = Tx_Extbase_Utility_Localization::translate('self', 'Belog');
+
+			// List of groups, key is gr-'uid'
+		$groups = t3lib_BEfunc::getGroupNames();
+		foreach ($groups as $group) {
+			$userGroupArray['gr-' . $group['uid']] = Tx_Extbase_Utility_Localization::translate('group', 'Belog') . ' ' . $group['title'];
+		}
+
+			// List of users, key is us-'uid'
+		$users = t3lib_BEfunc::getUserNames();
+		foreach ($users as $user) {
+			$userGroupArray['us-' . $user['uid']] = Tx_Extbase_Utility_Localization::translate('user', 'Belog') . ' ' . $user['username'];
+		}
+
+		return $userGroupArray;
+	}
+
+	/**
+	 * Create options for the workspace selector
+	 *
+	 * @return array Key is uid of workspace, value its label
+	 */
+	protected function createWorkspaceListForSelectOptions() {
+		$workspaceArray = array();
+
+		if (t3lib_extMgm::isLoaded('workspaces')) {
+				// Two meta entries: 'all' and 'live'
+			$workspaceArray[-99] = Tx_Extbase_Utility_Localization::translate('any', 'Belog');
+			$workspaceArray[0] = Tx_Extbase_Utility_Localization::translate('live', 'Belog');
+
+			$workspaces = $this->objectManager->get('Tx_Belog_Domain_Repository_WorkspaceRepository')->findAll();
+				/** @var $workspace Tx_Belog_Domain_Model_Workspace */
+			foreach ($workspaces as $workspace) {
+				$workspaceArray[$workspace->getUid()] = $workspace->getUid() . ': ' . $workspace->getTitle();
+			}
+		}
+
+		return $workspaceArray;
+	}
+
+	/**
+	 * If the user is in a workspace different than LIVE,
+	 * we force to show only log entries from the selected workspace,
+	 * and the workspace selector is not shown.
+	 *
+	 * @param Tx_Belog_Domain_Model_Constraint $constraint
+	 * @return Tx_Belog_Domain_Model_Constraint
+	 */
+	protected function forceWorkspaceSelectionIfInWorkspace(Tx_Belog_Domain_Model_Constraint $constraint) {
+		if ($GLOBALS['BE_USER']->workspace !== 0) {
+			$constraint->setWorkspace($GLOBALS['BE_USER']->workspace);
+			$this->view->assign('showWorkspaceSelector', FALSE);
+		} else {
+			$this->view->assign('showWorkspaceSelector', TRUE);
+		}
+		return $constraint;
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Classes/Controller/ToolsController.php b/typo3/sysext/belog/Classes/Controller/ToolsController.php
new file mode 100644
index 0000000..90e2dc4
--- /dev/null
+++ b/typo3/sysext/belog/Classes/Controller/ToolsController.php
@@ -0,0 +1,47 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Show log entries from table sys_log
+ *
+ * @author Christian Kuhn <lolli@schwarzbu.ch>
+ * @package TYPO3
+ * @subpackage belog
+ */
+class Tx_Belog_Controller_ToolsController extends Tx_Belog_Controller_AbstractController {
+
+	/**
+	 * Set context to 'not in page mode'
+	 *
+	 * @param Tx_Belog_Domain_Model_Constraint $constraint
+	 * @return void
+	 */
+	public function indexAction(Tx_Belog_Domain_Model_Constraint $constraint = NULL) {
+		$this->view->assign('isInPageContext', FALSE);
+		parent::indexAction($constraint);
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Classes/Controller/WebInfoController.php b/typo3/sysext/belog/Classes/Controller/WebInfoController.php
new file mode 100644
index 0000000..762a9cd
--- /dev/null
+++ b/typo3/sysext/belog/Classes/Controller/WebInfoController.php
@@ -0,0 +1,48 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Controller for log entry listings in Web->Info module
+ *
+ * @author Christian Kuhn <lolli@schwarzbu.ch>
+ * @package TYPO3
+ * @subpackage belog
+ */
+class Tx_Belog_Controller_WebInfoController extends Tx_Belog_Controller_AbstractController {
+
+	/**
+	 * Set context to 'in page mode'
+	 *
+	 * @param Tx_Belog_Domain_Model_Constraint $constraint
+	 * @return void
+	 */
+	public function indexAction(Tx_Belog_Domain_Model_Constraint $constraint = NULL) {
+		$this->view->assign('isInPageContext', TRUE);
+		parent::indexAction($constraint);
+	}
+
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Classes/Domain/Model/BeUser.php b/typo3/sysext/belog/Classes/Domain/Model/BeUser.php
new file mode 100644
index 0000000..8108aec
--- /dev/null
+++ b/typo3/sysext/belog/Classes/Domain/Model/BeUser.php
@@ -0,0 +1,60 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Stub model for backend users - only properties required for belog module are added currently
+ *
+ * @author Christian Kuhn <lolli@schwarzbu.ch>
+ * @package TYPO3
+ * @subpackage belog
+ */
+class Tx_Belog_Domain_Model_BeUser extends Tx_Extbase_DomainObject_AbstractEntity {
+
+	/**
+	 * @var string Name of the be_user
+	 */
+	protected $username;
+
+	/**
+	 * Set workspace username
+	 *
+	 * @var string $username
+	 * @return void
+	 */
+	public function setUsername($username) {
+		$this->username = $username;
+	}
+
+	/**
+	 * Get workspace username
+	 *
+	 * @return string
+	 */
+	public function getUsername() {
+		return $this->username;
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Classes/Domain/Model/Constraint.php b/typo3/sysext/belog/Classes/Domain/Model/Constraint.php
new file mode 100644
index 0000000..453bf24
--- /dev/null
+++ b/typo3/sysext/belog/Classes/Domain/Model/Constraint.php
@@ -0,0 +1,234 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Constraints for log entries
+ *
+ * @author Christian Kuhn <lolli@schwarzbu.ch>
+ * @package TYPO3
+ * @subpackage belog
+ */
+class Tx_Belog_Domain_Model_Constraint extends Tx_Extbase_DomainObject_AbstractEntity {
+
+	/**
+	 * @var string Selected user
+	 */
+	protected $user = 0;
+
+	/**
+	 * @var integer Number of log rows to show
+	 */
+	protected $number = 20;
+
+	/**
+	 * @var string Selected workspace
+	 */
+	protected $workspace = -99;
+
+	/**
+	 * @var integer Selected time frame
+	 */
+	protected $timeFrame = 0;
+
+	/**
+	 * @var integer Selected action
+	 */
+	protected $action = 0;
+
+	/**
+	 * @var boolean Whether or not rows should be grouped by page
+	 */
+	protected $groupByPage = FALSE;
+
+	/**
+	 * @var DateTime Manual date start
+	 */
+	protected $manualDateStart = NULL;
+
+	/**
+	 * @var DateTime Manual date stop
+	 */
+	protected $manualDateStop = NULL;
+
+	/**
+	 * Default constructor
+	 */
+	public function __construct() {
+	}
+
+	/**
+	 * Set user
+	 *
+	 * @param string $user
+	 * @return void
+	 */
+	public function setUser($user) {
+		$this->user = $user;
+	}
+
+	/**
+	 * Get user
+	 *
+	 * @return string
+	 */
+	public function getUser() {
+		return $this->user;
+	}
+
+	/**
+	 * Set number of log rows to show
+	 *
+	 * @param integer $number
+	 * @return void
+	 */
+	public function setNumber($number) {
+		$this->number = (int)$number;
+	}
+
+	/**
+	 * Get number of log entries to show
+	 *
+	 * @return int
+	 */
+	public function getNumber() {
+		return $this->number;
+	}
+
+	/**
+	 * Set workspace
+	 *
+	 * @param string $workspace
+	 * @return void
+	 */
+	public function setWorkspace($workspace) {
+		$this->workspace = $workspace;
+	}
+
+	/**
+	 * Get workspace
+	 *
+	 * @return string
+	 */
+	public function getWorkspace() {
+		return $this->workspace;
+	}
+
+	/**
+	 * Set time frame
+	 *
+	 * @param integer $timeFrame
+	 * @return void
+	 */
+	public function setTimeFrame($timeFrame) {
+		$this->timeFrame = (int)$timeFrame;
+	}
+
+	/**
+	 * Get time frame
+	 *
+	 * @return int
+	 */
+	public function getTimeFrame() {
+		return $this->timeFrame;
+	}
+
+	/**
+	 * Set action
+	 *
+	 * @param integer $action
+	 * @return void
+	 */
+	public function setAction($action) {
+		$this->action = (int)$action;
+	}
+
+	/**
+	 * Get action
+	 *
+	 * @return int
+	 */
+	public function getAction() {
+		return $this->action;
+	}
+
+	/**
+	 * Set group by page
+	 *
+	 * @param boolean $groupByPage
+	 * @return void
+	 */
+	public function setGroupByPage($groupByPage) {
+		$this->groupByPage = (boolean)$groupByPage;
+	}
+
+	/**
+	 * Get group by page
+	 *
+	 * @return bool
+	 */
+	public function getGroupByPage() {
+		return $this->groupByPage;
+	}
+
+	/**
+	 * Set manual date start
+	 *
+	 * @param DateTime $manualDateStart
+	 * @return void
+	 */
+	public function setManualDateStart(DateTime $manualDateStart) {
+		$this->manualDateStart = $manualDateStart;
+	}
+
+	/**
+	 * Get manual date start
+	 *
+	 * @return DateTime
+	 */
+	public function getManualDateStart() {
+		return $this->manualDateStart;
+	}
+
+	/**
+	 * Set manual date stop
+	 *
+	 * @param DateTime $manualDateStop
+	 * @return void
+	 */
+	public function setManualDateStop(DateTime $manualDateStop) {
+		$this->manualDateStop = $manualDateStop;
+	}
+
+	/**
+	 * Get manual date stop
+	 *
+	 * @return DateTime
+	 */
+	public function getManualDateStop() {
+		return $this->manualDateStop;
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Classes/Domain/Model/SysHistory.php b/typo3/sysext/belog/Classes/Domain/Model/SysHistory.php
new file mode 100644
index 0000000..6f469e0
--- /dev/null
+++ b/typo3/sysext/belog/Classes/Domain/Model/SysHistory.php
@@ -0,0 +1,60 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Stub model for sys history - only properties required for belog module are added currently
+ *
+ * @author Christian Kuhn <lolli@schwarzbu.ch>
+ * @package TYPO3
+ * @subpackage belog
+ */
+class Tx_Belog_Domain_Model_SysHistory extends Tx_Extbase_DomainObject_AbstractEntity {
+
+	/**
+	 * @var string List of changed fields
+	 */
+	protected $fieldlist;
+
+	/**
+	 * Set list of changed fields
+	 *
+	 * @var string $fieldlist
+	 * @return void
+	 */
+	public function setFieldlist($fieldlist) {
+		$this->fieldlist = $fieldlist;
+	}
+
+	/**
+	 * Get field list
+	 *
+	 * @return string
+	 */
+	public function getFieldlist() {
+		return $this->fieldlist;
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Classes/Domain/Model/SysLog.php b/typo3/sysext/belog/Classes/Domain/Model/SysLog.php
new file mode 100644
index 0000000..07b2bcf
--- /dev/null
+++ b/typo3/sysext/belog/Classes/Domain/Model/SysLog.php
@@ -0,0 +1,431 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * A sys log entry
+ * This model is 'complete': All current database properties are in there.
+ * @TODO: This should be stuffed to some more central place
+ *
+ * @author Christian Kuhn <lolli@schwarzbu.ch>
+ * @package TYPO3
+ * @subpackage belog
+ */
+class Tx_Belog_Domain_Model_SysLog extends Tx_Extbase_DomainObject_AbstractEntity {
+
+	/**
+	 * @var integer Storage page id of the log entry
+	 */
+	protected $pid;
+
+	/**
+	 * This is not a relation to BeUser model, since the user does
+	 * not always exist, but we want the uid in then anyway.
+	 * This case is ugly in extbase, the best way we
+	 * have found now is to resolve the username (if it exists) in a
+	 * view helper and just use the uid of the be user here.
+	 *
+	 * @var int
+	 */
+	protected $beUserUid;
+
+	/**
+	 * @var int action Id of the action that happened: For example '3' was a file action
+	 */
+	protected $action;
+
+	/**
+	 * @var int Uid of the record the event happened to
+	 */
+	protected $recordUid;
+
+	/**
+	 * @var string table name
+	 */
+	protected $tableName;
+
+	/**
+	 * @var int Pid of the record the event happened to
+	 */
+	protected $recordPid;
+
+	/**
+	 * @var int Error
+	 */
+	protected $error;
+
+	/**
+	 * @var string Details This is the log message itself, but possibly with %s substitutions
+	 */
+	protected $details;
+
+	/**
+	 * @var int Timestamp when the log entry was written
+	 */
+	protected $tstamp;
+
+	/**
+	 * @var int Type
+	 */
+	protected $type;
+
+	/**
+	 * @var int Details number
+	 */
+	protected $detailsNumber;
+
+	/**
+	 * @var string Ip address of client
+	 */
+	protected $ip;
+
+	/**
+	 * @var string Serialized log data This is a serialized array with substitutions for $this->details
+	 */
+	protected $logData;
+
+	/**
+	 * @var int event pid
+	 */
+	protected $eventPid;
+
+	/**
+	 * This is only the uid and not the full workspace object for
+	 * the same reason as in $beUserUid
+	 *
+	 * @var integer
+	 */
+	protected $workspaceUid;
+
+	/**
+	 * @var string new id
+	 */
+	protected $newId;
+
+	/**
+	 * Set pid
+	 *
+	 * @param int $pid
+	 * @return void
+	 */
+	public function setPid($pid) {
+		$this->pid = (int)$pid;
+	}
+
+	/**
+	 * Get pid
+	 *
+	 * @return integer
+	 */
+	public function getPid() {
+		return $this->pid;
+	}
+
+	/**
+	 * Set backend user uid
+	 *
+	 * @param integer $beUserUid
+	 * @return void
+	 */
+	public function setBeUserUid($beUserUid) {
+		$this->beUserUid = $beUserUid;
+	}
+
+	/**
+	 * Get backend user id
+	 *
+	 * @return integer
+	 */
+	public function getBeUserUid() {
+		return $this->beUserUid;
+	}
+
+	/**
+	 * Set action
+	 *
+	 * @param int $action
+	 * @return void
+	 */
+	public function setAction($action) {
+		$this->action = (int)$action;
+	}
+
+	/**
+	 * Get action
+	 *
+	 * @return int
+	 */
+	public function getAction() {
+		return $this->action;
+	}
+
+	/**
+	 * Set record uid
+	 *
+	 * @param int $recordUid
+	 * @return void
+	 */
+	public function setRecordUid($recordUid) {
+		$this->recordUid = $recordUid;
+	}
+
+	/**
+	 * Get record uid
+	 *
+	 * @return int
+	 */
+	public function getRecordUid() {
+		return $this->recordUid;
+	}
+
+	/**
+	 * Set table name
+	 *
+	 * @param string $tableName
+	 * @return void
+	 */
+	public function setTableName($tableName) {
+		$this->tableName = $tableName;
+	}
+
+	/**
+	 * Get table name
+	 *
+	 * @return string
+	 */
+	public function getTableName() {
+		return $this->tableName;
+	}
+
+	/**
+	 * Set record pid
+	 *
+	 * @param int $recordPid
+	 * @return void
+	 */
+	public function setRecordPid($recordPid) {
+		$this->recordPid = $recordPid;
+	}
+
+	/**
+	 * Get record pid
+	 *
+	 * @return int
+	 */
+	public function getRecordPid() {
+		return $this->recordPid;
+	}
+
+	/**
+	 * Set error
+	 *
+	 * @param int $error
+	 * @return void
+	 */
+	public function setError($error) {
+		$this->error = (int)$error;
+	}
+
+	/**
+	 * Get error
+	 *
+	 * @return int
+	 */
+	public function getError() {
+		return $this->error;
+	}
+
+	/**
+	 * Set details
+	 *
+	 * @param string $details
+	 * @return void
+	 */
+	public function setDetails($details) {
+		$this->details = $details;
+	}
+
+	/**
+	 * Get details
+	 *
+	 * @return string
+	 */
+	public function getDetails() {
+		return $this->details;
+	}
+
+	/**
+	 * Set tstamp
+	 *
+	 * @param int $tstamp
+	 * @return void
+	 */
+	public function setTstamp($tstamp) {
+		$this->tstamp = $tstamp;
+	}
+
+	/**
+	 * Get tstamp
+	 *
+	 * @return int
+	 */
+	public function getTstamp() {
+		return $this->tstamp;
+	}
+
+	/**
+	 * Set type
+	 *
+	 * @param int $type
+	 * @return void
+	 */
+	public function setType($type) {
+		$this->type = (int)$type;
+	}
+
+	/**
+	 * Get type
+	 *
+	 * @return int
+	 */
+	public function getType() {
+		return $this->type;
+	}
+
+	/**
+	 * Set details number
+	 *
+	 * @param int $detailsNumber
+	 * @return void
+	 */
+	public function setDetailsNumber($detailsNumber) {
+		$this->detailsNumber = $detailsNumber;
+	}
+
+	/**
+	 * Get details number
+	 *
+	 * @return int
+	 */
+	public function getDetailsNumber() {
+		return $this->detailsNumber;
+	}
+
+	/**
+	 * Set ip
+	 *
+	 * @param string $ip
+	 * @return void
+	 */
+	public function setIp($ip) {
+		$this->ip = $ip;
+	}
+
+	/**
+	 * Get ip
+	 *
+	 * @return string
+	 */
+	public function getIp() {
+		return $this->ip;
+	}
+
+	/**
+	 * Set log data
+	 *
+	 * @param string $logData
+	 * @return void
+	 */
+	public function setLogData($logData) {
+		$this->logData = $logData;
+	}
+
+	/**
+	 * Get log data
+	 *
+	 * @return string
+	 */
+	public function getLogData() {
+		return @unserialize($this->logData);
+	}
+
+	/**
+	 * Set event pid
+	 *
+	 * @param int $eventPid
+	 * @return void
+	 */
+	public function setEventPid($eventPid) {
+		$this->eventPid = $eventPid;
+	}
+
+	/**
+	 * Get event pid
+	 *
+	 * @return int
+	 */
+	public function getEventPid() {
+		return $this->eventPid;
+	}
+
+	/**
+	 * Set workspace uid
+	 *
+	 * @param integer $workspace Uid
+	 * @return void
+	 */
+	public function setWorkspaceUid($workspaceUid) {
+		$this->workspaceUid = $workspaceUid;
+	}
+
+	/**
+	 * Get workspace
+	 *
+	 * @return integer
+	 */
+	public function getWorkspaceUid() {
+		return $this->workspaceUid;
+	}
+
+	/**
+	 * Set new id
+	 *
+	 * @param string $newId
+	 * @return void
+	 */
+	public function setNewId($newId) {
+		$this->newId = $newId;
+	}
+
+	/**
+	 * Get new id
+	 *
+	 * @return string
+	 */
+	public function getNewId() {
+		return $this->newId;
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Classes/Domain/Model/Workspace.php b/typo3/sysext/belog/Classes/Domain/Model/Workspace.php
new file mode 100644
index 0000000..34b0da5
--- /dev/null
+++ b/typo3/sysext/belog/Classes/Domain/Model/Workspace.php
@@ -0,0 +1,60 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Stub model for workspaces - only properties required for belog module are added currently
+ *
+ * @author Christian Kuhn <lolli@schwarzbu.ch>
+ * @package TYPO3
+ * @subpackage belog
+ */
+class Tx_Belog_Domain_Model_Workspace extends Tx_Extbase_DomainObject_AbstractEntity {
+
+	/**
+	 * @var string Title of the workspace
+	 */
+	protected $title;
+
+	/**
+	 * Set workspace title
+	 *
+	 * @var string $title
+	 * @return void
+	 */
+	public function setTitle($title) {
+		$this->title = $title;
+	}
+
+	/**
+	 * Get workspace title
+	 *
+	 * @return string
+	 */
+	public function getTitle() {
+		return $this->title;
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Classes/Domain/Repository/BeUserRepository.php b/typo3/sysext/belog/Classes/Domain/Repository/BeUserRepository.php
new file mode 100644
index 0000000..85cddf5
--- /dev/null
+++ b/typo3/sysext/belog/Classes/Domain/Repository/BeUserRepository.php
@@ -0,0 +1,36 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Backend user repository
+ *
+ * @author Christian Kuhn <lolli@schwarzbu.ch>
+ * @package TYPO3
+ * @subpackage belog
+ */
+class Tx_Belog_Domain_Repository_BeUserRepository extends Tx_Extbase_Persistence_Repository {
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Classes/Domain/Repository/SysHistoryRepository.php b/typo3/sysext/belog/Classes/Domain/Repository/SysHistoryRepository.php
new file mode 100644
index 0000000..3114f81
--- /dev/null
+++ b/typo3/sysext/belog/Classes/Domain/Repository/SysHistoryRepository.php
@@ -0,0 +1,36 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Find system history entries
+ *
+ * @author Christian Kuhn <lolli@schwarzbu.ch>
+ * @package TYPO3
+ * @subpackage belog
+ */
+class Tx_Belog_Domain_Repository_SysHistoryRepository extends Tx_Extbase_Persistence_Repository {
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Classes/Domain/Repository/SysLogRepository.php b/typo3/sysext/belog/Classes/Domain/Repository/SysLogRepository.php
new file mode 100644
index 0000000..b291aab
--- /dev/null
+++ b/typo3/sysext/belog/Classes/Domain/Repository/SysLogRepository.php
@@ -0,0 +1,167 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Sys log entry repository
+ *
+ * @author Christian Kuhn <lolli@schwarzbu.ch>
+ * @package TYPO3
+ * @subpackage belog
+ */
+class Tx_Belog_Domain_Repository_SysLogRepository extends Tx_Extbase_Persistence_Repository {
+
+	/**
+	 * @var array List of backend users, with uid as key
+	 */
+	protected $beUserList;
+
+	/**
+	 * Initialize some local variables to be used during creation of objects
+	 */
+	public function initializeObject() {
+		$this->beUserList = t3lib_BEfunc::getUserNames();
+	}
+
+	/**
+	 * Find log entries that match given constraints
+	 *
+	 * @param Tx_Belog_Domain_Model_Constraint $constraint
+	 * @return Tx_Extbase_Persistence_QueryResult<Tx_Belog_Domain_Model_LogEntry>
+	 */
+	public function findByConstraint(Tx_Belog_Domain_Model_Constraint $constraint) {
+		$query = $this->createQuery();
+
+		$query->getQuerySettings()->setRespectStoragePage(FALSE);
+		$queryConstraints = $this->createQueryConstraints($query, $constraint);
+		if (!empty($queryConstraints)) {
+			$query->matching(
+				$query->logicalAnd($queryConstraints)
+			);
+		}
+		$query->setOrderings(array('uid' => Tx_Extbase_Persistence_QueryInterface::ORDER_DESCENDING));
+		$query->setLimit((int) $constraint->getNumber());
+
+		return $query->execute();
+	}
+
+	/**
+	 * Create an array of query constraints from constraint object
+	 *
+	 * @param Tx_Extbase_Persistence_QueryInterface $query
+	 * @param Tx_Belog_Domain_Model_Constraint $constraint
+	 * @return array<Tx_Extbase_Persistence_QOM_Constraint>
+	 */
+	protected function createQueryConstraints(Tx_Extbase_Persistence_QueryInterface $query, Tx_Belog_Domain_Model_Constraint $constraint) {
+		$queryConstraints = array();
+
+			// User / group handling
+		if (strlen($constraint->getUser()) > 0) {
+			if (substr($constraint->getUser(), 0, 3) === 'gr-') {
+				$groupId = (int)substr($constraint->getUser(), 3);
+				$userIds = array();
+				foreach ($this->beUserList as $userId => $userData) {
+					if (t3lib_div::inList($userData['usergroup_cached_list'], $groupId)) {
+						$userIds[] = $userId;
+					}
+				}
+				if (count($userIds) > 0) {
+					$queryConstraints[] = $query->in('userid', $userIds);
+				} else {
+						// If there are no group members -> use -1 as constraint to not find anything
+					$queryConstraints[] = $query->in('userid', array(-1));
+				}
+			} elseif (substr($constraint->getUser(), 0, 3) === 'us-') {
+				$queryConstraints[] = $query->equals('userid', substr($constraint->getUser(), 3));
+			} elseif ($constraint->getUser() === '-1') {
+				$queryConstraints[] = $query->equals('userid', intval($GLOBALS['BE_USER']->user['uid']));
+			}
+		}
+
+			// Workspace
+		if ($constraint->getWorkspace() != -99) {
+			$queryConstraints[] = $query->equals('workspace', $constraint->getWorkspace());
+		}
+
+			// Action (type):
+		if ($constraint->getAction() > 0) {
+			$queryConstraints[] = $query->equals('type', $constraint->getAction());
+		} elseif ($constraint->getAction() == -1) {
+			$queryConstraints[] = $query->equals('error', 0);
+		}
+
+			// Start / endtime handling
+		$startTime = 0;
+		$endTime = $GLOBALS['EXEC_TIME'];
+		switch ($constraint->getTimeFrame()) {
+			case 0:
+					// This week
+				$week = (date('w') ?: 7) - 1;
+				$startTime = mktime(0, 0, 0) - $week * 3600 * 24;
+			break;
+			case 1:
+					// Last week
+				$week = (date('w') ?: 7) - 1;
+				$startTime = mktime(0, 0, 0) - ($week + 7) * 3600 * 24;
+				$endTime = mktime(0, 0, 0) - $week * 3600 * 24;
+			break;
+			case 2:
+					// Last 7 days
+				$startTime = mktime(0, 0, 0) - 7 * 3600 * 24;
+			break;
+			case 10:
+					// This month
+				$startTime = mktime(0, 0, 0, date('m'), 1);
+			break;
+			case 11:
+					// Last month
+				$startTime = mktime(0, 0, 0, date('m') - 1, 1);
+				$endTime = mktime(0, 0, 0, date('m'), 1);
+			break;
+			case 12:
+					// Last 31 days
+				$startTime = mktime(0, 0, 0) - 31 * 3600 * 24;
+			break;
+			case 30:
+				if ($constraint->getManualDateStart() instanceof DateTime) {
+					$startTime = $constraint->getManualDateStart()->format('U');
+					if ($constraint->getManualDateStop() instanceof DateTime) {
+						$manualEndTime = $constraint->getManualDateStop()->format('U');
+						if ($manualEndTime > $startTime) {
+							$endTime = $manualEndTime;
+						}
+					} else {
+						$endTime = $GLOBALS['EXEC_TIME'];
+					}
+				}
+			break;
+		}
+		$queryConstraints[] = $query->greaterThanOrEqual('tstamp', $startTime);
+		$queryConstraints[] = $query->lessThan('tstamp', $endTime);
+
+		return $queryConstraints;
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Classes/Domain/Repository/WorkspaceRepository.php b/typo3/sysext/belog/Classes/Domain/Repository/WorkspaceRepository.php
new file mode 100644
index 0000000..2be8da4
--- /dev/null
+++ b/typo3/sysext/belog/Classes/Domain/Repository/WorkspaceRepository.php
@@ -0,0 +1,48 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Find workspaces
+ *
+ * @author Christian Kuhn <lolli@schwarzbu.ch>
+ * @package TYPO3
+ * @subpackage belog
+ */
+class Tx_Belog_Domain_Repository_WorkspaceRepository extends Tx_Extbase_Persistence_Repository {
+
+	/**
+	 * Returns all objects of this repository
+	 *
+	 * @return Tx_Extbase_Persistence_QueryResult<Tx_Belog_Domain_Model_LogEntry>
+	 * @api
+	 */
+	public function findAll() {
+		$query = $this->createQuery();
+		$query->getQuerySettings()->setRespectStoragePage(FALSE);
+		return $query->execute();
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Classes/ViewHelpers/Be/AddJsFileViewHelper.php b/typo3/sysext/belog/Classes/ViewHelpers/Be/AddJsFileViewHelper.php
new file mode 100644
index 0000000..442daea
--- /dev/null
+++ b/typo3/sysext/belog/Classes/ViewHelpers/Be/AddJsFileViewHelper.php
@@ -0,0 +1,46 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * View helper to add a additional javascript file to the backend header
+ */
+class Tx_Belog_ViewHelpers_Be_AddJsFileViewHelper extends Tx_Fluid_ViewHelpers_Be_AbstractBackendViewHelper {
+
+	/**
+	 * Render start page with template.php and pageTitle
+	 *
+	 * @param string $file Custom JavaScript file to be loaded
+	 * @return void
+	 * @see template
+	 * @see t3lib_PageRenderer
+	 */
+	public function render($file) {
+		$doc = $this->getDocInstance();
+		$pageRenderer = $doc->getPageRenderer();
+		$pageRenderer->addJsFile($file);
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Classes/ViewHelpers/Be/InlineSettingsArrayViewHelper.php b/typo3/sysext/belog/Classes/ViewHelpers/Be/InlineSettingsArrayViewHelper.php
new file mode 100644
index 0000000..39adbe3
--- /dev/null
+++ b/typo3/sysext/belog/Classes/ViewHelpers/Be/InlineSettingsArrayViewHelper.php
@@ -0,0 +1,46 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * View helper to add a additional javascript settigns to the backend header
+ */
+class Tx_Belog_ViewHelpers_Be_InlineSettingsArrayViewHelper extends Tx_Fluid_ViewHelpers_Be_AbstractBackendViewHelper {
+
+	/**
+	 * Render start page with template.php and pageTitle
+	 *
+	 * @param array $settings Custom JavaScript settings to be added
+	 * @return void
+	 * @see template
+	 * @see t3lib_PageRenderer
+	 */
+	public function render(array $settings) {
+		$doc = $this->getDocInstance();
+		$pageRenderer = $doc->getPageRenderer();
+		$pageRenderer->addInlineSettingArray('', $settings);
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Classes/ViewHelpers/ErrorIconViewHelper.php b/typo3/sysext/belog/Classes/ViewHelpers/ErrorIconViewHelper.php
new file mode 100644
index 0000000..3da0b91
--- /dev/null
+++ b/typo3/sysext/belog/Classes/ViewHelpers/ErrorIconViewHelper.php
@@ -0,0 +1,42 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Display error icon from error integer value
+ */
+class Tx_Belog_ViewHelpers_ErrorIconViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {
+
+	/**
+	 * Renders an error icon link as known from the TYPO3 backend
+	 *
+	 * @param integer $errorNumber The error number (-1 ... 3)
+	 * @return string the rendered error icon link
+	 */
+	public function render($errorNumber = 0) {
+		return $GLOBALS['SOBE']->doc->icons($errorNumber >= 2 ? 3 : 2);
+	}
+}
+?>
diff --git a/typo3/sysext/belog/Classes/ViewHelpers/Form/TranslateLabelSelectViewHelper.php b/typo3/sysext/belog/Classes/ViewHelpers/Form/TranslateLabelSelectViewHelper.php
new file mode 100644
index 0000000..56af923
--- /dev/null
+++ b/typo3/sysext/belog/Classes/ViewHelpers/Form/TranslateLabelSelectViewHelper.php
@@ -0,0 +1,75 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Extends the usual select view helper, but additionally translates
+ * the select option labels
+ *
+ * Example:
+ * <belog:form.translateLabelSelect property="number" options="{settings.selectableNumberOfLogEntries}" optionLabelPrefix="numbers"
+ *
+ * Will lookup number.200 (or whatever optionValue is given) in locallang database
+ */
+class Tx_Belog_ViewHelpers_Form_TranslateLabelSelectViewHelper extends Tx_Fluid_ViewHelpers_Form_SelectViewHelper {
+
+	/**
+	 * Initialize arguments.
+	 *
+	 * @return void
+	 * @api
+	 */
+	public function initializeArguments() {
+		parent::initializeArguments();
+		$this->registerArgument('optionLabelPrefix', 'string', 'Prefix for locallang lookup');
+	}
+
+	/**
+	 * Render the option tags.
+	 *
+	 * Extend the default handling by iterating over calculated options array and
+	 * try to translate the value
+	 *
+	 * @return array an associative array of options, key will be the value of the option tag
+	 */
+	protected function getOptions() {
+		$options = parent::getOptions();
+
+		foreach ($options as $value => $label) {
+			if (strlen($label) > 0) {
+				$labelKey = $this->hasArgument('optionLabelPrefix') ? $this->arguments['optionLabelPrefix'] . $label : $label;
+				$translatedLabel = Tx_Extbase_Utility_Localization::translate(
+					$labelKey,
+					$this->controllerContext->getRequest()->getControllerExtensionName()
+				);
+				if (strlen($translatedLabel) > 0) {
+					$options[$value] = $translatedLabel;
+				}
+			}
+		}
+		return $options;
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Classes/ViewHelpers/FormatDetailsViewHelper.php b/typo3/sysext/belog/Classes/ViewHelpers/FormatDetailsViewHelper.php
new file mode 100644
index 0000000..6f1f5f1
--- /dev/null
+++ b/typo3/sysext/belog/Classes/ViewHelpers/FormatDetailsViewHelper.php
@@ -0,0 +1,79 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Create detail string from log row
+ */
+class Tx_Belog_ViewHelpers_FormatDetailsViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {
+
+	/**
+	 * Create formatted detail string from log row.
+	 *
+	 * The method handles two properties of the model: details and logData
+	 * Details is a string with possible %s placeholders, and logData an array
+	 * with the substitutions.
+	 * Furthermore, possible files in logData are stripped to their basename if
+	 * the action logged was a file action
+	 *
+	 * This method was crafted from getDetails() of class t3lib_bedisplaylog.
+	 *
+	 * @param Tx_Belog_Domain_Model_SysLog $logRow
+	 * @return string Formatted details
+	 */
+	public function render(Tx_Belog_Domain_Model_SysLog $logRow) {
+		$detailString = $logRow->getDetails();
+		$substitutes = $logRow->getLogData();
+
+			// Strip pathes from file names if the log was a file action
+		if (is_array($substitutes) && $logRow->getType() === 2) {
+			$substitutes = $this->stripPathFromFiles($substitutes);
+		}
+
+			// Substitute
+		if (is_array($substitutes)) {
+			$detailString = vsprintf($detailString, $substitutes);
+		}
+
+			// Remove possible pending other %s
+		$detailString = str_replace('%s', '', $detailString);
+
+		return htmlspecialchars($detailString);
+	}
+
+	/**
+	 * Strip path from files
+	 *
+	 * @param array $files
+	 * @return array
+	 */
+	protected function stripPathFromFiles(array $files = array()) {
+		foreach ($files as $key => $file) {
+			$files[$key] = basename($file);
+		}
+		return $files;
+	}
+}
+?>
diff --git a/typo3/sysext/belog/Classes/ViewHelpers/IsExtensionLoadedViewHelper.php b/typo3/sysext/belog/Classes/ViewHelpers/IsExtensionLoadedViewHelper.php
new file mode 100644
index 0000000..bdae41f
--- /dev/null
+++ b/typo3/sysext/belog/Classes/ViewHelpers/IsExtensionLoadedViewHelper.php
@@ -0,0 +1,46 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Returns true, if a specific extension is loaded
+ */
+class Tx_Belog_ViewHelpers_IsExtensionLoadedViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {
+
+	/**
+	 * Return TRUE, if an extension is loaded
+	 *
+	 * @param string $extension Extension name
+	 * @return boolean TRUE if extension is loaded
+	 */
+	public function render($extension) {
+		if (t3lib_extMgm::isLoaded($extension)) {
+			return TRUE;
+		} else {
+			return FALSE;
+		}
+	}
+}
+?>
diff --git a/typo3/sysext/belog/Classes/ViewHelpers/SysHistoryViewHelper.php b/typo3/sysext/belog/Classes/ViewHelpers/SysHistoryViewHelper.php
new file mode 100644
index 0000000..5f2e499
--- /dev/null
+++ b/typo3/sysext/belog/Classes/ViewHelpers/SysHistoryViewHelper.php
@@ -0,0 +1,81 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Get history entry from for log entry
+ */
+class Tx_Belog_ViewHelpers_SysHistoryViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {
+
+	/**
+	 * @var Tx_Belog_Domain_Repository_SysHistoryRepository
+	 */
+	protected $sysHistoryRepository;
+
+	/**
+	 * Inject the system history repository
+	 *
+	 * @param Tx_Belog_Domain_Repository_SysHistoryRepository $sysHistoryRepository
+	 * @return void
+	 */
+	public function injectSysHistoryRepository(Tx_Belog_Domain_Repository_SysHistoryRepository $sysHistoryRepository) {
+		$this->sysHistoryRepository = $sysHistoryRepository;
+	}
+
+	/**
+	 * Get system history record
+	 *
+	 * @param integer $uid Uid of the log entry
+	 * @return string Formatted history entry if one exists, else empty string
+	 */
+	public function render($uid) {
+		$history = '';
+		$historyObject = $this->sysHistoryRepository->findOneBySysLogUid($uid);
+
+			/** @var $historyObject Tx_Belog_Domain_Model_SysHistory */
+		if ($historyObject instanceof Tx_Belog_Domain_Model_SysHistory) {
+			$historyLabel = Tx_Extbase_Utility_Localization::translate(
+				'changesInFields',
+				$this->controllerContext->getRequest()->getControllerExtensionName(),
+				array($historyObject->getFieldlist())
+			);
+			$historyIcon = t3lib_iconWorks::getSpriteIcon(
+				'actions-document-history-open',
+				array(
+					'title' => Tx_Extbase_Utility_Localization::translate(
+						'showHistory',
+						$this->controllerContext->getRequest()->getControllerExtensionName()
+					)
+				)
+			);
+			$historyHref = 'show_rechis.php?sh_uid=' . $historyObject->getUid() . '&returnUrl=' . rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI'));
+			$historyLink = '<a href="' . htmlspecialchars($historyHref) . '">' . $historyIcon . '</a>';
+
+			$history = $historyLabel . ' ' . $historyLink;
+		}
+		return $history;
+	}
+}
+?>
diff --git a/typo3/sysext/belog/Classes/ViewHelpers/UsernameViewHelper.php b/typo3/sysext/belog/Classes/ViewHelpers/UsernameViewHelper.php
new file mode 100644
index 0000000..40057fc
--- /dev/null
+++ b/typo3/sysext/belog/Classes/ViewHelpers/UsernameViewHelper.php
@@ -0,0 +1,61 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Get username from be user id
+ */
+class Tx_Belog_ViewHelpers_UsernameViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {
+
+	/**
+	 * @var Tx_Belog_Domain_Repository_BeUserRepository
+	 */
+	protected $beUserRepository;
+
+	/**
+	 * Inject the backend user repository
+	 *
+	 * @param Tx_Belog_Domain_Repository_BeUserRepository $beUserRepository
+	 * @return void
+	 */
+	public function injectBeUserRepository(Tx_Belog_Domain_Repository_BeUserRepository $beUserRepository) {
+		$this->beUserRepository = $beUserRepository;
+	}
+
+	/**
+	 * Resolve user name from be user id.
+	 *
+	 * @param integer $uid Uid of the user
+	 * @return string Username or uid
+	 */
+	public function render($uid) {
+		$userObject = $this->beUserRepository->findByUid($uid);
+			/** @var $userObject Tx_Belog_Domain_Model_BeUser */
+		if ($userObject instanceof Tx_Belog_Domain_Model_BeUser) {
+			return $userObject->getUsername();
+		}
+	}
+}
+?>
diff --git a/typo3/sysext/belog/Classes/ViewHelpers/WorkspaceTitleViewHelper.php b/typo3/sysext/belog/Classes/ViewHelpers/WorkspaceTitleViewHelper.php
new file mode 100644
index 0000000..d532dac
--- /dev/null
+++ b/typo3/sysext/belog/Classes/ViewHelpers/WorkspaceTitleViewHelper.php
@@ -0,0 +1,70 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * Get workspace title from workspace id
+ */
+class Tx_Belog_ViewHelpers_WorkspaceTitleViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {
+
+	/**
+	 * @var Tx_Belog_Domain_Repository_WorkspaceRepository
+	 */
+	protected $workspaceRepository;
+
+	/**
+	 * Inject the workspace repository
+	 *
+	 * @param Tx_Belog_Domain_Repository_WorkspaceRepository $workspaceRepository
+	 * @return void
+	 */
+	public function injectWorkspaceRepository(Tx_Belog_Domain_Repository_WorkspaceRepository $workspaceRepository) {
+		$this->workspaceRepository = $workspaceRepository;
+	}
+
+	/**
+	 * Resolve workspace title from uid.
+	 *
+	 * @param integer $uid Uid of the workspace
+	 * @return string Username or uid
+	 */
+	public function render($uid) {
+		$title = '';
+		if ($uid === 0) {
+			$title = Tx_Extbase_Utility_Localization::translate(
+				'live',
+				$this->controllerContext->getRequest()->getControllerExtensionName()
+			);
+		} else {
+			$workspaceObject = $this->workspaceRepository->findByUid($uid);
+				/** @var $workspaceObject Tx_Belog_Domain_Model_Workspace */
+			if ($workspaceObject instanceof Tx_Belog_Domain_Model_Workspace) {
+				$title =  $workspaceObject->getTitle();
+			}
+		}
+		return $title;
+	}
+}
+?>
diff --git a/typo3/sysext/belog/Classes/class.tx_belog_webinfo_bootstrap.php b/typo3/sysext/belog/Classes/class.tx_belog_webinfo_bootstrap.php
new file mode 100644
index 0000000..7293ba1
--- /dev/null
+++ b/typo3/sysext/belog/Classes/class.tx_belog_webinfo_bootstrap.php
@@ -0,0 +1,79 @@
+<?php
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) 2012 Christian Kuhn <lolli@schwarzbu.ch>
+ *  All rights reserved
+ *
+ *  This script is part of the TYPO3 project. The TYPO3 project 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 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  The GNU General Public License can be found at
+ *  http://www.gnu.org/copyleft/gpl.html.
+ *  A copy is found in the textfile GPL.txt and important notices to the license
+ *  from the author is found in LICENSE.txt distributed with these scripts.
+ *
+ *  This script 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.
+ *
+ *  This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+
+/**
+ * This class is a wrapper for WebInfo controller of belog.
+ * It is registered in ext_tables.php with t3lib_extMgm::insertModuleFunction() and called by the
+ * info extension via SCbase functionality.
+ *
+ * Extbase currently provides no way to register a "TBE_MODULES_EXT" module directly,
+ * therefore we need to bootstrap extbase on our own here to jump to the WebInfo controller.
+ *
+ * @author Christian Kuhn <lolli@schwarzbu.ch>
+ * @package TYPO3
+ * @subpackage belog
+ */
+class tx_belog_WebInfo_Boostrap {
+
+	/**
+	 * Dummy method, called by SCbase external object handling
+	 *
+	 * @return void
+	 */
+	public function init() {}
+
+	/**
+	 * Dummy method, called by SCbase external object handling
+	 *
+	 * @return void
+	 */
+	public function checkExtObj() {}
+
+	/**
+	 * Bootstrap extbase and jump to WebInfo controller
+	 *
+	 * @return string
+	 */
+	public function main() {
+		$configuration = array(
+			'extensionName' => 'Belog',
+			'pluginName' => 'tools_BelogLog',
+		);
+
+			// Yeah, this is ugly. But currently, there is no other direct way
+			// in extbase to force a specific controller in backend mode.
+			// Overwriting $_GET was the most simple solution here until extbase
+			// provides a clean way to solve this.
+		$_GET['tx_belog_tools_beloglog']['controller'] = 'WebInfo';
+
+			/** @var $extbaseBoostrap Tx_Extbase_Core_Bootstrap */
+		$extbaseBoostrap = t3lib_div::makeInstance('Tx_Extbase_Core_Bootstrap');
+		$content = $extbaseBoostrap->run('', $configuration);
+
+		return $content;
+	}
+}
+?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Configuration/TypoScript/setup.txt b/typo3/sysext/belog/Configuration/TypoScript/setup.txt
new file mode 100644
index 0000000..a1a3ccf
--- /dev/null
+++ b/typo3/sysext/belog/Configuration/TypoScript/setup.txt
@@ -0,0 +1,69 @@
+module.tx_belog {
+	features.rewrittenPropertyMapper = 1
+
+	persistence.classes {
+		Tx_Belog_Domain_Model_SysLog {
+			mapping {
+				tableName = sys_log
+				columns {
+					userid.mapOnProperty = beUserUid
+					recuid.mapOnProperty = recordUid
+					tablename.mapOnProperty = tableName
+					recpid.mapOnProperty = recordPid
+					details_nr.mapOnProperty = detailsNumber
+					IP.mapOnProperty = ip
+					workspace.mapOnProperty = workspaceUid
+					NEWid.mapOnProperty = newId
+				}
+			}
+		}
+		Tx_Belog_Domain_Model_Workspace {
+			mapping {
+				tableName = sys_workspace
+			}
+		}
+		Tx_Belog_Domain_Model_BeUser {
+			mapping {
+				tableName = be_users
+			}
+		}
+		Tx_Belog_Domain_Model_SysHistory {
+			mapping {
+				tableName = sys_history
+			}
+		}
+	}
+
+	settings {
+		selectableNumberOfLogEntries {
+			20 = 20
+			50 = 50
+			100 = 100
+			200 = 200
+			500 = 500
+			1000 = 1000
+			1000000 = any
+		}
+
+		selectableTimeFrames {
+			0 = thisWeek
+			1 = lastWeek
+			2 = last7Days
+			10 = thisMonth
+			11 = lastMonth
+			12 = last31Days
+			20 = noLimit
+			30 = userdefined
+		}
+
+		selectableActions {
+			0 = any
+			1 = actionDatabase
+			2 = actionFile
+			3 = actionCache
+			254 = actionSettings
+			255 = actionLogin
+			-1 = actionErrors
+		}
+	}
+}
\ No newline at end of file
diff --git a/typo3/sysext/belog/Resources/Private/.htaccess b/typo3/sysext/belog/Resources/Private/.htaccess
new file mode 100644
index 0000000..3418e55
--- /dev/null
+++ b/typo3/sysext/belog/Resources/Private/.htaccess
@@ -0,0 +1 @@
+deny from all
\ No newline at end of file
diff --git a/typo3/sysext/belog/Resources/Private/Language/locallang.xlf b/typo3/sysext/belog/Resources/Private/Language/locallang.xlf
new file mode 100644
index 0000000..a50b7a6
--- /dev/null
+++ b/typo3/sysext/belog/Resources/Private/Language/locallang.xlf
@@ -0,0 +1,296 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xliff version="1.0">
+	<file source-language="en" datatype="plaintext" original="messages" date="2011-10-17T20:22:32Z" product-name="belog">
+		<header/>
+		<body>
+			<trans-unit id="adminLog" xml:space="preserve">
+				<source>Administration log</source>
+			</trans-unit>
+			<trans-unit id="allUsers" xml:space="preserve">
+				<source>[All users]</source>
+			</trans-unit>
+			<trans-unit id="any" xml:space="preserve">
+				<source>[Any]</source>
+			</trans-unit>
+			<trans-unit id="live" xml:space="preserve">
+				<source>LIVE</source>
+			</trans-unit>
+			<trans-unit id="draft" xml:space="preserve">
+				<source>Draft</source>
+			</trans-unit>
+			<trans-unit id="self" xml:space="preserve">
+				<source>Self</source>
+			</trans-unit>
+			<trans-unit id="userGroup" xml:space="preserve">
+				<source>Group:</source>
+			</trans-unit>
+			<trans-unit id="thisWeek" xml:space="preserve">
+				<source>This week</source>
+			</trans-unit>
+			<trans-unit id="lastWeek" xml:space="preserve">
+				<source>Last week</source>
+			</trans-unit>
+			<trans-unit id="last7Days" xml:space="preserve">
+				<source>Last 7 days</source>
+			</trans-unit>
+			<trans-unit id="thisMonth" xml:space="preserve">
+				<source>This month</source>
+			</trans-unit>
+			<trans-unit id="lastMonth" xml:space="preserve">
+				<source>Last month</source>
+			</trans-unit>
+			<trans-unit id="last31Days" xml:space="preserve">
+				<source>Last 31 days</source>
+			</trans-unit>
+			<trans-unit id="noLimit" xml:space="preserve">
+				<source>No limit</source>
+			</trans-unit>
+			<trans-unit id="userdefined" xml:space="preserve">
+				<source>User defined</source>
+			</trans-unit>
+			<trans-unit id="set" xml:space="preserve">
+				<source>Set</source>
+			</trans-unit>
+			<trans-unit id="20" xml:space="preserve">
+				<source>20</source>
+			</trans-unit>
+			<trans-unit id="50" xml:space="preserve">
+				<source>50</source>
+			</trans-unit>
+			<trans-unit id="100" xml:space="preserve">
+				<source>100</source>
+			</trans-unit>
+			<trans-unit id="200" xml:space="preserve">
+				<source>200</source>
+			</trans-unit>
+			<trans-unit id="500" xml:space="preserve">
+				<source>500</source>
+			</trans-unit>
+			<trans-unit id="1000" xml:space="preserve">
+				<source>1000</source>
+			</trans-unit>
+			<trans-unit id="actionAll" xml:space="preserve">
+				<source>All</source>
+			</trans-unit>
+			<trans-unit id="actionDatabase" xml:space="preserve">
+				<source>Database</source>
+			</trans-unit>
+			<trans-unit id="actionFile" xml:space="preserve">
+				<source>File</source>
+			</trans-unit>
+			<trans-unit id="actionCache" xml:space="preserve">
+				<source>Cache</source>
+			</trans-unit>
+			<trans-unit id="actionSettings" xml:space="preserve">
+				<source>Settings</source>
+			</trans-unit>
+			<trans-unit id="actionLogin" xml:space="preserve">
+				<source>Login</source>
+			</trans-unit>
+			<trans-unit id="actionErrors" xml:space="preserve">
+				<source>Errors</source>
+			</trans-unit>
+			<trans-unit id="group" xml:space="preserve">
+				<source>Group:</source>
+			</trans-unit>
+			<trans-unit id="user" xml:space="preserve">
+				<source>User:</source>
+			</trans-unit>
+			<trans-unit id="users" xml:space="preserve">
+				<source>Users:</source>
+			</trans-unit>
+			<trans-unit id="time" xml:space="preserve">
+				<source>Time:</source>
+			</trans-unit>
+			<trans-unit id="max" xml:space="preserve">
+				<source>Max:</source>
+			</trans-unit>
+			<trans-unit id="changesInFields" xml:space="preserve">
+				<source>Changes in fields: %s.</source>
+			</trans-unit>
+			<trans-unit id="showHistory" xml:space="preserve">
+				<source>Show History</source>
+			</trans-unit>
+			<trans-unit id="action" xml:space="preserve">
+				<source>Action:</source>
+			</trans-unit>
+			<trans-unit id="workspace" xml:space="preserve">
+				<source>Workspace:</source>
+			</trans-unit>
+			<trans-unit id="groupByPage" xml:space="preserve">
+				<source>Group by page:</source>
+			</trans-unit>
+			<trans-unit id="pagenameWithUID" xml:space="preserve">
+				<source>%s" [UID: %s]</source>
+			</trans-unit>
+			<trans-unit id="overview" xml:space="preserve">
+				<source>Overview</source>
+			</trans-unit>
+			<trans-unit id="timeInfo" xml:space="preserve">
+				<source>These pages have log messages from %s to %s</source>
+			</trans-unit>
+			<trans-unit id="forNonPageRelatedActions" xml:space="preserve">
+				<source>for NON-PAGE related actions</source>
+			</trans-unit>
+			<trans-unit id="forRootLevel" xml:space="preserve">
+				<source>for ROOT LEVEL</source>
+			</trans-unit>
+			<trans-unit id="forPage" xml:space="preserve">
+				<source>for PAGE "%s" (UID: %s)</source>
+			</trans-unit>
+			<trans-unit id="logForNonPageRelatedActionsOrRootLevelOrPage" xml:space="preserve">
+				<source>Log %s from %s to %s</source>
+			</trans-unit>
+			<trans-unit id="type_1" xml:space="preserve">
+				<source>DB</source>
+			</trans-unit>
+			<trans-unit id="action_1_1" xml:space="preserve">
+				<source>Insert</source>
+			</trans-unit>
+			<trans-unit id="action_1_2" xml:space="preserve">
+				<source>Update</source>
+			</trans-unit>
+			<trans-unit id="action_1_3" xml:space="preserve">
+				<source>Delete</source>
+			</trans-unit>
+			<trans-unit id="action_1_4" xml:space="preserve">
+				<source>Check</source>
+			</trans-unit>
+			<trans-unit id="msg_1_0_1" xml:space="preserve">
+				<source>Referer host '%s' and server host '%s' did not match!</source>
+			</trans-unit>
+			<trans-unit id="msg_1_1_11" xml:space="preserve">
+				<source>Attempt to insert record on page '%s' (%s) where this table, %s, is not allowed</source>
+			</trans-unit>
+			<trans-unit id="msg_1_1_12" xml:space="preserve">
+				<source>Attempt to insert a record on page '%s' (%s) from table '%s' without permissions. Or non-existing page.</source>
+			</trans-unit>
+			<trans-unit id="msg_1_2_1" xml:space="preserve">
+				<source>Attempt to modify table '%s' without permission</source>
+			</trans-unit>
+			<trans-unit id="msg_1_2_2" xml:space="preserve">
+				<source>Attempt to modify record '%s' (%s) without permission. Or non-existing page.</source>
+			</trans-unit>
+			<trans-unit id="msg_1_2_10" xml:space="preserve">
+				<source>Record '%s' (%s) was updated.</source>
+			</trans-unit>
+			<trans-unit id="msg_1_2_12" xml:space="preserve">
+				<source>MySQL error: '%s' (%s)</source>
+			</trans-unit>
+			<trans-unit id="msg_1_4_1" xml:space="preserve">
+				<source>Attempt to move record '%s' (%s) to after a non-existing record (uid=%s)</source>
+			</trans-unit>
+			<trans-unit id="msg_1_4_2" xml:space="preserve">
+				<source>Moved record '%s' (%s) to page '%s' (%s)</source>
+			</trans-unit>
+			<trans-unit id="msg_1_4_3" xml:space="preserve">
+				<source>Moved record '%s' (%s) from page '%s' (%s)</source>
+			</trans-unit>
+			<trans-unit id="msg_1_4_4" xml:space="preserve">
+				<source>Moved record '%s' (%s) on page '%s' (%s)</source>
+			</trans-unit>
+			<trans-unit id="msg_1_4_10" xml:space="preserve">
+				<source>Attempt to move page '%s' (%s) to inside of its own rootline (at page '%s' (%s))</source>
+			</trans-unit>
+			<trans-unit id="msg_1_4_11" xml:space="preserve">
+				<source>Attempt to insert record on page '%s' (%s) where this table, %s, is not allowed</source>
+			</trans-unit>
+			<trans-unit id="msg_1_4_12" xml:space="preserve">
+				<source>Attempt to insert a record on page '%s' (%s) from table '%s' without permissions. Or non-existing page.</source>
+			</trans-unit>
+			<trans-unit id="msg_1_4_13" xml:space="preserve">
+				<source>Attempt to move record '%s' (%s) to after another record, although the table has no sorting row.</source>
+			</trans-unit>
+			<trans-unit id="msg_1_4_14" xml:space="preserve">
+				<source>Attempt to move record '%s' (%s) without having permissions to do so</source>
+			</trans-unit>
+			<trans-unit id="msg_1_5_1" xml:space="preserve">
+				<source>You cannot change the 'doktype' of page '%s' to the desired value.</source>
+			</trans-unit>
+			<trans-unit id="msg_1_5_2" xml:space="preserve">
+				<source>'doktype' of page '%s' could not be changed because the page contains records from disallowed tables; %s</source>
+			</trans-unit>
+			<trans-unit id="msg_1_5_3" xml:space="preserve">
+				<source>Too few items in the list of values. (%s)</source>
+			</trans-unit>
+			<trans-unit id="msg_1_5_10" xml:space="preserve">
+				<source>Could not delete file '%s' (does not exist). (%s)</source>
+			</trans-unit>
+			<trans-unit id="msg_1_5_11" xml:space="preserve">
+				<source>Copying file '%s' failed!: No destination file (%s) possible!. (%s)</source>
+			</trans-unit>
+			<trans-unit id="msg_1_5_12" xml:space="preserve">
+				<source>File extension '%s' is not allowed. (%s)</source>
+			</trans-unit>
+			<trans-unit id="msg_1_5_13" xml:space="preserve">
+				<source>File size (%s) of file '%s' exceeds limit (%s). (%s)</source>
+			</trans-unit>
+			<trans-unit id="msg_1_5_14" xml:space="preserve">
+				<source>The destination (%s) or the source file (%s) does not exist. (%s)</source>
+			</trans-unit>
+			<trans-unit id="msg_1_5_15" xml:space="preserve">
+				<source>Copying to file '%s' failed! (%s)</source>
+			</trans-unit>
+			<trans-unit id="msg_1_5_16" xml:space="preserve">
+				<source>Copying file '%s' failed!: The destination path (%s) may be write protected. Please make it write enabled!. (%s)</source>
+			</trans-unit>
+			<trans-unit id="type_2" xml:space="preserve">
+				<source>FILE</source>
+			</trans-unit>
+			<trans-unit id="action_2_1" xml:space="preserve">
+				<source>Upload</source>
+			</trans-unit>
+			<trans-unit id="action_2_2" xml:space="preserve">
+				<source>Copy</source>
+			</trans-unit>
+			<trans-unit id="action_2_3" xml:space="preserve">
+				<source>Move</source>
+			</trans-unit>
+			<trans-unit id="action_2_4" xml:space="preserve">
+				<source>Delete</source>
+			</trans-unit>
+			<trans-unit id="action_2_5" xml:space="preserve">
+				<source>Rename</source>
+			</trans-unit>
+			<trans-unit id="action_2_6" xml:space="preserve">
+				<source>New</source>
+			</trans-unit>
+			<trans-unit id="action_2_7" xml:space="preserve">
+				<source>Unzip</source>
+			</trans-unit>
+			<trans-unit id="action_2_8" xml:space="preserve">
+				<source>New file</source>
+			</trans-unit>
+			<trans-unit id="action_2_9" xml:space="preserve">
+				<source>Edit</source>
+			</trans-unit>
+			<trans-unit id="msg_2_9_1" xml:space="preserve">
+				<source>File saved to '%s', bytes: %s, MD5: %s </source>
+			</trans-unit>
+			<trans-unit id="type_3" xml:space="preserve">
+				<source>CACHE</source>
+			</trans-unit>
+			<trans-unit id="action_3_1" xml:space="preserve">
+				<source><![CDATA[Clear&nbsp;Cache]]></source>
+			</trans-unit>
+			<trans-unit id="type_254" xml:space="preserve">
+				<source>SETTING</source>
+			</trans-unit>
+			<trans-unit id="action_254_1" xml:space="preserve">
+				<source>Change</source>
+			</trans-unit>
+			<trans-unit id="type_255" xml:space="preserve">
+				<source>LOGIN</source>
+			</trans-unit>
+			<trans-unit id="action_255_1" xml:space="preserve">
+				<source>LOGIN</source>
+			</trans-unit>
+			<trans-unit id="action_255_2" xml:space="preserve">
+				<source>LOGOUT</source>
+			</trans-unit>
+			<trans-unit id="action_255_3" xml:space="preserve">
+				<source>ATTEMPT</source>
+			</trans-unit>
+		</body>
+	</file>
+</xliff>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Resources/Private/Language/locallang_mod.xlf b/typo3/sysext/belog/Resources/Private/Language/locallang_mod.xlf
new file mode 100644
index 0000000..fa9de5a
--- /dev/null
+++ b/typo3/sysext/belog/Resources/Private/Language/locallang_mod.xlf
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xliff version="1.0">
+	<file source-language="en" datatype="plaintext" original="messages" date="2011-10-17T20:22:32Z" product-name="belog">
+		<header/>
+		<body>
+			<trans-unit id="mlang_labels_tablabel" xml:space="preserve">
+				<source>Viewing log</source>
+			</trans-unit>
+			<trans-unit id="mlang_labels_tabdescr" xml:space="preserve">
+				<source>Allows you access to the full backend changelog in TYPO3.&lt;br /&gt;&lt;em&gt;Access for 'admin' users only!&lt;/em&gt;</source>
+			</trans-unit>
+			<trans-unit id="mlang_tabs_tab" xml:space="preserve">
+				<source>Log</source>
+			</trans-unit>
+		</body>
+	</file>
+</xliff>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Resources/Private/Layouts/DocHeader.html b/typo3/sysext/belog/Resources/Private/Layouts/DocHeader.html
new file mode 100644
index 0000000..c7a6840
--- /dev/null
+++ b/typo3/sysext/belog/Resources/Private/Layouts/DocHeader.html
@@ -0,0 +1,14 @@
+<f:be.container loadExtJs="1">
+	<div class="typo3-fullDoc">
+		<div id="typo3-docheader">
+			<div id="typo3-docheader-row1">&nbsp;</div>
+			<div id="typo3-docheader-row2">&nbsp;</div>
+		</div>
+
+		<div id="typo3-docbody">
+			<div id="typo3-inner-docbody">
+				<f:render section="Content" />
+			</div>
+		</div>
+	</div>
+</f:be.container>
diff --git a/typo3/sysext/belog/Resources/Private/Partials/Content.html b/typo3/sysext/belog/Resources/Private/Partials/Content.html
new file mode 100644
index 0000000..f48a8d1
--- /dev/null
+++ b/typo3/sysext/belog/Resources/Private/Partials/Content.html
@@ -0,0 +1,17 @@
+<h2>
+	<f:translate key="adminLog" />
+</h2>
+
+<div>
+	<f:render
+		partial="Content/Filter"
+		arguments="{_all}"
+	/>
+</div>
+
+<div class="divider"></div>
+
+<f:render
+	partial="Content/LogEntries"
+	arguments="{_all}"
+/>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Resources/Private/Partials/Content/Filter.html b/typo3/sysext/belog/Resources/Private/Partials/Content/Filter.html
new file mode 100644
index 0000000..18b8a7c
--- /dev/null
+++ b/typo3/sysext/belog/Resources/Private/Partials/Content/Filter.html
@@ -0,0 +1,144 @@
+{namespace belog=Tx_Belog_ViewHelpers}
+
+<belog:be.addJsFile file="../t3lib/js/extjs/tceforms.js" />
+<belog:be.addJsFile file="../t3lib/js/extjs/ux/Ext.ux.DateTimePicker.js" />
+
+<belog:be.inlineSettingsArray
+	settings="{
+		datePickerUSmode: 0,
+		dateFormat: {0:settings.dateFormat, 1:'{settings.dateFormat} {settings.timeFormat}'}
+	}"
+/>
+
+<f:form object="{constraint}" action="index" name="constraint">
+
+	<table border="0" cellpadding="0" cellspacing="0">
+		<tbody>
+			<tr>
+				<td>
+					<f:translate key="users" />
+				</td>
+				<td>
+					<f:form.select
+						property="user"
+						options="{userGroupList}"
+						additionalAttributes="{onchange : 'submit()'}"
+					/>
+				</td>
+
+				<td>
+					<f:translate key="max" />
+				</td>
+				<td>
+					<belog:form.translateLabelSelect
+						property="number"
+						options="{settings.selectableNumberOfLogEntries}"
+						optionLabelPrefix="LLL:EXT:belog/Resources/Private/Language/locallang.xlf:"
+						additionalAttributes="{onchange : 'submit()'}"
+					/>
+				</td>
+
+				<f:if condition="{belog:isExtensionLoaded(extension:'workspaces')}">
+					<f:then>
+						<f:if condition="{showWorkspaceSelector}">
+							<f:then>
+								<td>
+									<f:translate key="workspace" />
+								</td>
+								<td>
+									<f:form.select
+										property="workspace"
+										options="{workspaceList}"
+										additionalAttributes="{onchange : 'submit()'}"
+									/>
+								</td>
+							</f:then>
+							<f:else>
+								<td></td><td></td>
+							</f:else>
+						</f:if>
+					</f:then>
+					<f:else>
+						<td></td><td></td>
+					</f:else>
+				</f:if>
+			</tr>
+			<tr>
+				<td>
+					<f:translate key="time" />
+				</td>
+				<td>
+					<belog:form.translateLabelSelect
+						property="timeFrame"
+						options="{settings.selectableTimeFrames}"
+						optionLabelPrefix="LLL:EXT:belog/Resources/Private/Language/locallang.xlf:"
+						additionalAttributes="{onchange : 'submit()'}"
+					/>
+
+					<f:comment>
+						Date time fields for manual date selection
+					</f:comment>
+					<f:if condition="{constraint.timeFrame} == 30">
+						<br />
+
+						<f:translate key="LLL:EXT:lang/locallang_common.xml:from" />&nbsp;
+						<f:form.textfield
+							property="manualDateStart"
+							value="{constraint.manualDateStart -> f:format.date(format:'{settings.dateFormat} {settings.timeFormat}')}"
+							id="tceforms-datetimefield-manualDateStart"
+							style="margin:4px 2px; padding:1px; vertical-align:middle; width: 115px;"
+						/>
+						<span
+							style="cursor:pointer;"
+							id="picker-tceforms-datetimefield-manualDateStart"
+							class="t3-icon t3-icon-actions t3-icon-actions-edit t3-icon-edit-pick-date"
+						>
+							&nbsp;
+						</span>
+
+						<f:translate key="LLL:EXT:lang/locallang_common.xml:to" />&nbsp;
+						<f:form.textfield
+							property="manualDateStop"
+							value="{constraint.manualDateStop -> f:format.date(format:'{settings.dateFormat} {settings.timeFormat}')}"
+							id="tceforms-datetimefield-manualDateStop"
+							style="margin:4px 2px; padding:1px; vertical-align:middle; width: 115px;"
+						/>
+						<span
+							style="cursor:pointer;"
+							id="picker-tceforms-datetimefield-manualDateStop"
+							class="t3-icon t3-icon-actions t3-icon-actions-edit t3-icon-edit-pick-date"
+						>
+							&nbsp;
+						</span>
+
+						<f:form.submit value="{f:translate(key:'set')}" />
+					</f:if>
+				</td>
+
+				<td>
+					<f:translate key="action" />
+				</td>
+				<td>
+					<belog:form.translateLabelSelect
+						property="action"
+						options="{settings.selectableActions}"
+						optionLabelPrefix="LLL:EXT:belog/Resources/Private/Language/locallang.xlf:"
+						additionalAttributes="{onchange : 'submit()'}"
+					/>
+				</td>
+
+				<td>
+					<f:translate key="groupByPage" />
+				</td>
+				<td>
+					<f:form.checkbox
+						property="groupByPage"
+						value="1"
+						additionalAttributes="{onchange : 'submit()'}"
+					/>
+				</td>
+			</tr>
+		</tbody>
+	</table>
+
+</f:form>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Resources/Private/Partials/Content/LogEntries.html b/typo3/sysext/belog/Resources/Private/Partials/Content/LogEntries.html
new file mode 100644
index 0000000..151b543
--- /dev/null
+++ b/typo3/sysext/belog/Resources/Private/Partials/Content/LogEntries.html
@@ -0,0 +1,107 @@
+{namespace belog=Tx_Belog_ViewHelpers}
+
+<f:for each="{groupedLogEntries}" as="pidEntry" key="pid">
+	<div>
+		<h3>
+			{pid}
+		</h3>
+		<f:for each="{pidEntry.days}" as="day" key="dayTimestamp">
+			<div style="padding-top: 10px;"></div>
+			<h4 class="uppercase">
+				<f:format.date format="d-m-y">@{dayTimestamp}</f:format.date>
+			</h4>
+			<table border="0" cellspacing="0" cellpadding="0" class="typo3-dblist">
+				<thead>
+					<tr>
+						<td valign="top" class="t3-row-header">
+							<strong>Error</strong>
+						</td>
+						<td class="t3-row-header"><img src="clear.gif" width="10" height="1" alt="" /></td>
+						<td valign="top" class="t3-row-header">
+							<strong>Time</strong>
+						</td>
+						<td class="t3-row-header"><img src="clear.gif" width="10" height="1" alt="" /></td>
+						<td valign="top" class="t3-row-header">
+							<strong>User</strong>
+						</td>
+						<td class="t3-row-header"><img src="clear.gif" width="10" height="1" alt="" /></td>
+						<td valign="top" class="t3-row-header">
+							<strong>Type</strong>
+						</td>
+						<td class="t3-row-header"><img src="clear.gif" width="10" height="1" alt="" /></td>
+						<td valign="top" class="t3-row-header">
+							<strong>Action</strong>
+						</td>
+						<td class="t3-row-header"><img src="clear.gif" width="10" height="1" alt="" /></td>
+						<td valign="top" class="t3-row-header">
+							<strong>Details</strong>
+						</td>
+						<td class="t3-row-header"><img src="clear.gif" width="10" height="1" alt="" /></td>
+					</tr>
+				</thead>
+				<tbody>
+					<f:for each="{day.logItems}" as="logItem">
+						<tr>
+							<td valign="top">
+								<belog:ErrorIcon errorNumber="{logItem.error}" />
+							</td>
+							<td><img src="clear.gif" width="10" height="1" alt="" /></td>
+
+							<td valign="top">
+								<f:format.date format="H:i:s">@{logItem.tstamp}</f:format.date>
+							</td>
+							<td><img src="clear.gif" width="10" height="1" alt="" /></td>
+
+							<td valign="top">
+								<f:if condition="{belog:username(uid:logItem.beUserUid)}">
+									<f:then><belog:username uid="{logItem.beUserUid}" /></f:then>
+									<f:else>[{logItem.beUserUid}]</f:else>
+								</f:if>@<f:if condition="{belog:workspaceTitle(uid:logItem.workspaceUid)}">
+									<f:then><belog:workspaceTitle uid="{logItem.workspaceUid}" /></f:then>
+									<f:else>[{logItem.workspaceUid}]</f:else>
+								</f:if>
+							</td>
+							<td><img src="clear.gif" width="10" height="1" alt="" /></td>
+
+							<td valign="top">
+								<f:if condition="{f:translate(key:'type_{logItem.type}')}">
+									<f:then>
+										<f:translate key="type_{logItem.type}" />
+									</f:then>
+									<f:else>
+										[{logItem.type}]
+									</f:else>
+								</f:if>
+							</td>
+							<td><img src="clear.gif" width="10" height="1" alt="" /></td>
+
+							<td valign="top">
+								<f:if condition="{f:translate(key:'action_{logItem.type}_{logItem.action}')}">
+									<f:then>
+										<f:translate
+											key="action_{logItem.type}_{logItem.action}"
+											htmlEscape="0"
+										/>
+									</f:then>
+									<f:else>
+										[{logItem.action}]
+									</f:else>
+								</f:if>
+							</td>
+							<td><img src="clear.gif" width="10" height="1" alt="" /></td>
+
+							<td valign="top">
+								<belog:formatDetails logRow="{logItem}" />
+								<belog:sysHistory uid="{logItem.uid}" />
+								<f:if condition="{logItem.detailsNumber} > 0">
+									(msg#{logItem.type}.{logItem.action}.{logItem.detailsNumber})
+								</f:if>
+							</td>
+							<td><img src="clear.gif" width="10" height="1" alt="" /></td>
+						</tr>
+					</f:for>
+				</tbody>
+			</table>
+		</f:for>
+	</div>
+</f:for>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Resources/Private/Templates/Tools/Index.html b/typo3/sysext/belog/Resources/Private/Templates/Tools/Index.html
new file mode 100644
index 0000000..1f58e6a
--- /dev/null
+++ b/typo3/sysext/belog/Resources/Private/Templates/Tools/Index.html
@@ -0,0 +1,8 @@
+<f:layout name="DocHeader" />
+
+<f:section name="Content">
+	<f:render
+		partial="Content"
+		arguments="{_all}"
+	/>
+</f:section>
\ No newline at end of file
diff --git a/typo3/sysext/belog/Resources/Private/Templates/WebInfo/Index.html b/typo3/sysext/belog/Resources/Private/Templates/WebInfo/Index.html
new file mode 100644
index 0000000..6510dc0
--- /dev/null
+++ b/typo3/sysext/belog/Resources/Private/Templates/WebInfo/Index.html
@@ -0,0 +1,4 @@
+<f:render
+	partial="Content"
+	arguments="{_all}"
+/>
\ No newline at end of file
diff --git a/typo3/sysext/belog/ext_emconf.php b/typo3/sysext/belog/ext_emconf.php
index bbf9531..b33c974 100755
--- a/typo3/sysext/belog/ext_emconf.php
+++ b/typo3/sysext/belog/ext_emconf.php
@@ -15,7 +15,7 @@ $EM_CONF[$_EXTKEY] = array(
 	'description' => 'Displays backend log, both per page and systemwide. Available as the module Tools>Log (system wide overview) and Web>Info/Log (page relative overview).',
 	'category' => 'module',
 	'shy' => 1,
-	'dependencies' => '',
+	'dependencies' => 'extbase,fluid',
 	'conflicts' => '',
 	'priority' => '',
 	'loadOrder' => '',
@@ -33,12 +33,14 @@ $EM_CONF[$_EXTKEY] = array(
 	'author_company' => 'Curby Soft Multimedia',
 	'CGLcompliance' => '',
 	'CGLcompliance_note' => '',
-	'version' => '1.1.0',
+	'version' => '2.0.0',
 	'_md5_values_when_last_written' => 'a:11:{s:26:"class.tx_belog_webinfo.php";s:4:"19c3";s:12:"ext_icon.gif";s:4:"691d";s:14:"ext_tables.php";s:4:"694b";s:13:"locallang.xlf";s:4:"0d9a";s:12:"doc/TODO.txt";s:4:"1631";s:13:"mod/clear.gif";s:4:"cc11";s:12:"mod/conf.php";s:4:"0186";s:13:"mod/index.php";s:4:"85a8";s:17:"mod/locallang.xlf";s:4:"e5a8";s:21:"mod/locallang_mod.xlf";s:4:"ddba";s:11:"mod/log.gif";s:4:"70bb";}',
 	'constraints' => array(
 		'depends' => array(
 			'php' => '5.3.0-0.0.0',
 			'typo3' => '4.6.0-0.0.0',
+			'extbase' => '1.4.0-0.0.0',
+			'fluid' => '1.5.0-0.0.0',
 		),
 		'conflicts' => array(
 		),
diff --git a/typo3/sysext/belog/ext_tables.php b/typo3/sysext/belog/ext_tables.php
index 23dd975..cb6a567 100755
--- a/typo3/sysext/belog/ext_tables.php
+++ b/typo3/sysext/belog/ext_tables.php
@@ -1,7 +1,7 @@
 <?php
 if (!defined ('TYPO3_MODE')) 	die ('Access denied.');
 
-if (TYPO3_MODE=='BE')	{
+if (TYPO3_MODE=='BE') {
 	t3lib_extMgm::addModule('tools','log','',t3lib_extMgm::extPath($_EXTKEY).'mod/');
 	t3lib_extMgm::insertModuleFunction(
 		'web_info',
@@ -10,4 +10,32 @@ if (TYPO3_MODE=='BE')	{
 		'Log'
 	);
 }
+
+	// Register backend modules, but not in frontend or within upgrade wizards
+if (TYPO3_MODE === 'BE' && !(TYPO3_REQUESTTYPE & TYPO3_REQUESTTYPE_INSTALL)) {
+		// Module Web->Info->Log
+	t3lib_extMgm::insertModuleFunction(
+		'web_info',
+		'tx_belog_WebInfo_Boostrap',
+		t3lib_extMgm::extPath($_EXTKEY) . 'Classes/class.tx_belog_webinfo_bootstrap.php',
+		'Log'
+	);
+
+		// Module Tools->Log
+	Tx_Extbase_Utility_Extension::registerModule(
+		$_EXTKEY,
+		'tools',
+		'log',
+		'',
+		array(
+			'Tools' => 'index',
+			'WebInfo' => 'index',
+		),
+		array(
+			'access' => 'admin',
+			'icon' => 'EXT:belog/ext_icon.gif',
+			'labels' => 'LLL:EXT:' . $_EXTKEY . '/Resources/Private/Language/locallang_mod.xlf',
+		)
+	);
+}
 ?>
\ No newline at end of file
diff --git a/typo3/sysext/belog/ext_typoscript_setup.txt b/typo3/sysext/belog/ext_typoscript_setup.txt
new file mode 100644
index 0000000..037126a
--- /dev/null
+++ b/typo3/sysext/belog/ext_typoscript_setup.txt
@@ -0,0 +1 @@
+<INCLUDE_TYPOSCRIPT: source="FILE:EXT:belog/Configuration/TypoScript/setup.txt">
\ No newline at end of file
diff --git a/typo3/sysext/install/updates/class.tx_coreupdates_installfluidextbase.php b/typo3/sysext/install/updates/class.tx_coreupdates_installfluidextbase.php
index 3c77023..d27f25a 100644
--- a/typo3/sysext/install/updates/class.tx_coreupdates_installfluidextbase.php
+++ b/typo3/sysext/install/updates/class.tx_coreupdates_installfluidextbase.php
@@ -44,7 +44,8 @@ class tx_coreupdates_installFluidExtbase extends Tx_Install_Updates_Base {
 	protected $extensionsDependingOnFluidExtbase = array(
 		'about',
 		'aboutmodules',
-		'workspaces'
+		'workspaces',
+		'belog',
 	);
 
 	/**
diff --git a/typo3/sysext/lang/locallang_tca.xlf b/typo3/sysext/lang/locallang_tca.xlf
deleted file mode 100644
index c769d01..0000000
--- a/typo3/sysext/lang/locallang_tca.xlf
+++ /dev/null
@@ -1,326 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xliff version="1.0">
-	<file source-language="en" datatype="plaintext" original="messages" date="2011-10-17T20:22:34Z" product-name="lang">
-		<header/>
-		<body>
-			<trans-unit id="file_mountpoints" xml:space="preserve">
-				<source>File Mounts:</source>
-			</trans-unit>
-			<trans-unit id="file_mountpoints_edit_title" xml:space="preserve">
-				<source>Edit filemount</source>
-			</trans-unit>
-			<trans-unit id="file_mountpoints_add_title" xml:space="preserve">
-				<source>Create new filemount</source>
-			</trans-unit>
-			<trans-unit id="file_mountpoints_list_title" xml:space="preserve">
-				<source>List filemounts</source>
-			</trans-unit>
-			<trans-unit id="db_mountpoints" xml:space="preserve">
-				<source>DB Mounts:</source>
-			</trans-unit>
-			<trans-unit id="userMods" xml:space="preserve">
-				<source>Modules:</source>
-			</trans-unit>
-			<trans-unit id="allowed_languages" xml:space="preserve">
-				<source>Limit to languages:</source>
-			</trans-unit>
-			<trans-unit id="workspace_perms" xml:space="preserve">
-				<source>Workspace permissions:</source>
-			</trans-unit>
-			<trans-unit id="workspace_perms_live" xml:space="preserve">
-				<source>Edit Live (Online)</source>
-			</trans-unit>
-			<trans-unit id="workspace_perms_draft" xml:space="preserve">
-				<source>Edit Draft (Offline)</source>
-			</trans-unit>
-			<trans-unit id="workspace_perms_custom" xml:space="preserve">
-				<source>Create new workspace projects</source>
-			</trans-unit>
-			<trans-unit id="TSconfig" xml:space="preserve">
-				<source>TSconfig:</source>
-			</trans-unit>
-			<trans-unit id="TSconfig_title" xml:space="preserve">
-				<source>TSconfig QuickReference</source>
-			</trans-unit>
-			<trans-unit id="lockToDomain" xml:space="preserve">
-				<source>Lock to domain:</source>
-			</trans-unit>
-			<trans-unit id="be_users.username" xml:space="preserve">
-				<source>Username:</source>
-			</trans-unit>
-			<trans-unit id="be_users.password" xml:space="preserve">
-				<source>Password:</source>
-			</trans-unit>
-			<trans-unit id="be_users.usergroup" xml:space="preserve">
-				<source>Group:</source>
-			</trans-unit>
-			<trans-unit id="be_users.usergroup_edit_title" xml:space="preserve">
-				<source>Edit usergroup</source>
-			</trans-unit>
-			<trans-unit id="be_users.usergroup_add_title" xml:space="preserve">
-				<source>Create new group</source>
-			</trans-unit>
-			<trans-unit id="be_users.usergroup_list_title" xml:space="preserve">
-				<source>List groups</source>
-			</trans-unit>
-			<trans-unit id="be_users.disableIPlock" xml:space="preserve">
-				<source>Disable IP lock for user:</source>
-			</trans-unit>
-			<trans-unit id="be_users.admin" xml:space="preserve">
-				<source>Admin(!):</source>
-			</trans-unit>
-			<trans-unit id="be_users.options" xml:space="preserve">
-				<source>Mount from groups:</source>
-			</trans-unit>
-			<trans-unit id="be_users.options_db_mounts" xml:space="preserve">
-				<source>DB Mounts:</source>
-			</trans-unit>
-			<trans-unit id="be_users.options_file_mounts" xml:space="preserve">
-				<source>File Mounts:</source>
-			</trans-unit>
-			<trans-unit id="be_users.fileoper_perms" xml:space="preserve">
-				<source>Fileoperation permissions:</source>
-			</trans-unit>
-			<trans-unit id="be_users.fileoper_perms_general" xml:space="preserve">
-				<source>Files: Upload,Copy,Move,Delete,Rename,New,Edit</source>
-			</trans-unit>
-			<trans-unit id="be_users.fileoper_perms_unzip" xml:space="preserve">
-				<source>Files: Unzip</source>
-			</trans-unit>
-			<trans-unit id="be_users.fileoper_perms_diroper_perms" xml:space="preserve">
-				<source>Directory: Move,Delete,Rename,New</source>
-			</trans-unit>
-			<trans-unit id="be_users.fileoper_perms_diroper_perms_copy" xml:space="preserve">
-				<source>Directory: Copy</source>
-			</trans-unit>
-			<trans-unit id="be_users.fileoper_perms_diroper_perms_delete" xml:space="preserve">
-				<source>Directory: Delete recursively (rm -Rf)</source>
-			</trans-unit>
-			<trans-unit id="be_users.lang" xml:space="preserve">
-				<source>Default Language:</source>
-			</trans-unit>
-			<trans-unit id="be_users.tabs.rights" xml:space="preserve">
-				<source>Access Rights</source>
-			</trans-unit>
-			<trans-unit id="be_users.tabs.mounts_and_workspaces" xml:space="preserve">
-				<source>Mounts and Workspaces</source>
-			</trans-unit>
-			<trans-unit id="be_users.tabs.options" xml:space="preserve">
-				<source>Options</source>
-			</trans-unit>
-			<trans-unit id="be_users.tabs.extended" xml:space="preserve">
-				<source>Extended</source>
-			</trans-unit>
-			<trans-unit id="be_users.tabs.access" xml:space="preserve">
-				<source>Access</source>
-			</trans-unit>
-			<trans-unit id="be_groups.title" xml:space="preserve">
-				<source>Grouptitle:</source>
-			</trans-unit>
-			<trans-unit id="be_groups.pagetypes_select" xml:space="preserve">
-				<source>Page types:</source>
-			</trans-unit>
-			<trans-unit id="be_groups.tables_modify" xml:space="preserve">
-				<source>Tables (modify):</source>
-			</trans-unit>
-			<trans-unit id="be_groups.tables_select" xml:space="preserve">
-				<source>Tables (listing):</source>
-			</trans-unit>
-			<trans-unit id="be_groups.non_exclude_fields" xml:space="preserve">
-				<source>Allowed excludefields:</source>
-			</trans-unit>
-			<trans-unit id="be_groups.explicit_allowdeny" xml:space="preserve">
-				<source>Explicitly allow/deny field values:</source>
-			</trans-unit>
-			<trans-unit id="be_groups.custom_options" xml:space="preserve">
-				<source>Custom module options:</source>
-			</trans-unit>
-			<trans-unit id="be_groups.inc_access_lists" xml:space="preserve">
-				<source>Include Access Lists:</source>
-			</trans-unit>
-			<trans-unit id="be_groups.hide_in_lists" xml:space="preserve">
-				<source>Hide in lists:</source>
-			</trans-unit>
-			<trans-unit id="be_groups.subgroup" xml:space="preserve">
-				<source>Sub Groups:</source>
-			</trans-unit>
-			<trans-unit id="be_groups.tabs.base_rights" xml:space="preserve">
-				<source>Access Lists</source>
-			</trans-unit>
-			<trans-unit id="be_groups.tabs.mounts_and_workspaces" xml:space="preserve">
-				<source>Mounts and Workspaces</source>
-			</trans-unit>
-			<trans-unit id="be_groups.fileoper_perms" xml:space="preserve">
-				<source>Fileoperation permissions:</source>
-			</trans-unit>
-			<trans-unit id="be_groups.fileoper_perms_general" xml:space="preserve">
-				<source>Files: Upload,Copy,Move,Delete,Rename,New,Edit</source>
-			</trans-unit>
-			<trans-unit id="be_groups.fileoper_perms_unzip" xml:space="preserve">
-				<source>Files: Unzip</source>
-			</trans-unit>
-			<trans-unit id="be_groups.fileoper_perms_diroper_perms" xml:space="preserve">
-				<source>Directory: Move,Delete,Rename,New</source>
-			</trans-unit>
-			<trans-unit id="be_groups.fileoper_perms_diroper_perms_copy" xml:space="preserve">
-				<source>Directory: Copy</source>
-			</trans-unit>
-			<trans-unit id="be_groups.fileoper_perms_diroper_perms_delete" xml:space="preserve">
-				<source>Directory: Delete recursively (rm -Rf)</source>
-			</trans-unit>
-			<trans-unit id="be_groups.tabs.options" xml:space="preserve">
-				<source>Options</source>
-			</trans-unit>
-			<trans-unit id="be_groups.tabs.extended" xml:space="preserve">
-				<source>Extended</source>
-			</trans-unit>
-			<trans-unit id="sys_filemounts.tabs.users" xml:space="preserve">
-				<source>Users</source>
-			</trans-unit>
-			<trans-unit id="sys_filemounts.tabs.mountpoints" xml:space="preserve">
-				<source>Mountpoints</source>
-			</trans-unit>
-			<trans-unit id="sys_filemounts.tabs.publishing" xml:space="preserve">
-				<source>Publishing</source>
-			</trans-unit>
-			<trans-unit id="sys_filemounts.tabs.other" xml:space="preserve">
-				<source>Other</source>
-			</trans-unit>
-			<trans-unit id="sys_filemounts.title" xml:space="preserve">
-				<source>Label:</source>
-			</trans-unit>
-			<trans-unit id="sys_filemounts.path" xml:space="preserve">
-				<source>Path:</source>
-			</trans-unit>
-			<trans-unit id="sys_filemounts.base" xml:space="preserve">
-				<source>Base:</source>
-			</trans-unit>
-			<trans-unit id="sys_filemounts.base_absolute" xml:space="preserve">
-				<source>absolute (root) / </source>
-			</trans-unit>
-			<trans-unit id="sys_filemounts.base_relative" xml:space="preserve">
-				<source>relative ../fileadmin/</source>
-			</trans-unit>
-			<trans-unit id="sys_news" xml:space="preserve">
-				<source>System News</source>
-			</trans-unit>
-			<trans-unit id="sys_news.tabs.access" xml:space="preserve">
-				<source>Access</source>
-			</trans-unit>
-			<trans-unit id="sys_workspace.adminusers" xml:space="preserve">
-				<source>Owners:</source>
-			</trans-unit>
-			<trans-unit id="sys_workspace.members" xml:space="preserve">
-				<source>Members:</source>
-			</trans-unit>
-			<trans-unit id="sys_workspace.reviewers" xml:space="preserve">
-				<source>Reviewers:</source>
-			</trans-unit>
-			<trans-unit id="sys_workspace.publish_time" xml:space="preserve">
-				<source>Publish:</source>
-			</trans-unit>
-			<trans-unit id="sys_workspace.unpublish_time" xml:space="preserve">
-				<source>Un-Publish:</source>
-			</trans-unit>
-			<trans-unit id="sys_workspace.freeze" xml:space="preserve">
-				<source>Freeze Editing</source>
-			</trans-unit>
-			<trans-unit id="sys_workspace.live_edit" xml:space="preserve">
-				<source>Allow "live" editing of records from tables without versioning</source>
-			</trans-unit>
-			<trans-unit id="sys_workspace.review_stage_edit" xml:space="preserve">
-				<source>Allow members to edit records in "Review" stage</source>
-			</trans-unit>
-			<trans-unit id="sys_workspace.disable_autocreate" xml:space="preserve">
-				<source>Disable auto-versioning when editing</source>
-			</trans-unit>
-			<trans-unit id="sys_workspace.swap_modes" xml:space="preserve">
-				<source>Swap modes</source>
-			</trans-unit>
-			<trans-unit id="sys_workspace.vtypes" xml:space="preserve">
-				<source>Disable Versioning Types for members and reviewers:</source>
-			</trans-unit>
-			<trans-unit id="sys_workspace.publish_access" xml:space="preserve">
-				<source>Publish access:</source>
-			</trans-unit>
-			<trans-unit id="sys_workspace.stagechg_notification" xml:space="preserve">
-				<source>Stage change notification by email:</source>
-			</trans-unit>
-			<trans-unit id="pages" xml:space="preserve">
-				<source>Page</source>
-			</trans-unit>
-			<trans-unit id="doktype.I.0" xml:space="preserve">
-				<source>Standard</source>
-			</trans-unit>
-			<trans-unit id="doktype.I.1" xml:space="preserve">
-				<source>SysFolder</source>
-			</trans-unit>
-			<trans-unit id="doktype.I.folder" xml:space="preserve">
-				<source>Folder</source>
-			</trans-unit>
-			<trans-unit id="doktype.I.2" xml:space="preserve">
-				<source>Recycler</source>
-			</trans-unit>
-			<trans-unit id="title" xml:space="preserve">
-				<source>Pagetitle:</source>
-			</trans-unit>
-			<trans-unit id="php_tree_stop" xml:space="preserve">
-				<source>Stop page tree:</source>
-			</trans-unit>
-			<trans-unit id="is_siteroot" xml:space="preserve">
-				<source>Is root of website:</source>
-			</trans-unit>
-			<trans-unit id="storage_pid" xml:space="preserve">
-				<source>General Record Storage page:</source>
-			</trans-unit>
-			<trans-unit id="be_users" xml:space="preserve">
-				<source>Backend user</source>
-			</trans-unit>
-			<trans-unit id="be_groups" xml:space="preserve">
-				<source>Backend usergroup</source>
-			</trans-unit>
-			<trans-unit id="sys_filemounts" xml:space="preserve">
-				<source>Filemount</source>
-			</trans-unit>
-			<trans-unit id="sys_collection" xml:space="preserve">
-				<source>Record Collection</source>
-			</trans-unit>
-			<trans-unit id="sys_collection.title" xml:space="preserve">
-				<source>Collection-Name</source>
-			</trans-unit>
-			<trans-unit id="sys_collection.description" xml:space="preserve">
-				<source>Description</source>
-			</trans-unit>
-			<trans-unit id="sys_collection.table_name" xml:space="preserve">
-				<source>Record Type of Collection</source>
-			</trans-unit>
-			<trans-unit id="sys_collection.items" xml:space="preserve">
-				<source>Items</source>
-			</trans-unit>
-			<trans-unit id="sys_collection.type" xml:space="preserve">
-				<source>Type of collection</source>
-			</trans-unit>
-			<trans-unit id="sys_collection.type.static" xml:space="preserve">
-				<source>static record composition</source>
-			</trans-unit>
-			<trans-unit id="sys_collection.type.filter" xml:space="preserve">
-				<source>dynamic record filter</source>
-			</trans-unit>
-			<trans-unit id="sys_language" xml:space="preserve">
-				<source>Website Language</source>
-			</trans-unit>
-			<trans-unit id="sys_language.isocode" xml:space="preserve">
-				<source>Select Official Language (ISO code):</source>
-			</trans-unit>
-			<trans-unit id="sys_language.flag" xml:space="preserve">
-				<source>Select flag icon:</source>
-			</trans-unit>
-			<trans-unit id="sys_workspace" xml:space="preserve">
-				<source>Workspace</source>
-			</trans-unit>
-			<trans-unit id="editlock" xml:space="preserve">
-				<source>Restrict editing by non-Admins:</source>
-			</trans-unit>
-		</body>
-	</file>
-</xliff>
