diff --git a/Classes/Controller/LatestController.php b/Classes/Controller/LatestController.php
index d08977f29f5e6a5141837fd18deb49709e38a8b9..2221c06038c42a287cf6438602945f7fe830ee95 100644
--- a/Classes/Controller/LatestController.php
+++ b/Classes/Controller/LatestController.php
@@ -28,6 +28,7 @@ namespace SGalinski\SgNews\Controller;
 
 use SGalinski\SgNews\Domain\Model\Category;
 use SGalinski\SgNews\Domain\Model\News;
+use SGalinski\SgNews\Service\ConfigurationService;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 
 /**
@@ -60,11 +61,15 @@ class LatestController extends AbstractController {
 	 * @return void
 	 * @throws \InvalidArgumentException
 	 * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
+	 * @throws \TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException
 	 */
 	public function indexAction(array $newsMetaData = [], $offset = 0) {
 		$limit = ((int) $this->settings['limit']);
 		$limit = ($limit < 1 ? 1 : $limit);
 
+		$configurationService = GeneralUtility::makeInstance(ConfigurationService::class);
+		$sortBy = $configurationService->getConfiguration('sortBy', $this->settings);
+
 		$categoryUids = GeneralUtility::intExplode(',', $this->settings['categories'], TRUE);
 		$tagUids = GeneralUtility::intExplode(',', $this->settings['tags'], TRUE);
 		if ((int) $GLOBALS['TSFE']->page['doktype'] === 117 && !count($categoryUids)) {
@@ -74,7 +79,7 @@ class LatestController extends AbstractController {
 		$startTime = (int) $this->settings['starttime'];
 		$endTime = (int) $this->settings['endtime'];
 		$latestNewsEntries = $this->newsRepository->findLastUpdatedOrHighlightedNewsByCategories(
-			$limit, FALSE, $categoryUids, $offset, TRUE, $this->settings['sortBy'], $tagUids, $startTime, $endTime
+			$limit, FALSE, $categoryUids, $offset, TRUE, $sortBy, $tagUids, $startTime, $endTime
 		);
 
 		$categories = [];
@@ -102,7 +107,7 @@ class LatestController extends AbstractController {
 		if (count($newsMetaData) < $limit) {
 			$offset += $limit;
 			$maxCount = $this->newsRepository->getCountOfLastUpdatedOrHighlightedNewsByCategories(
-				FALSE, $categoryUids, TRUE, $this->settings['sortBy'], $tagUids, $startTime, $endTime
+				FALSE, $categoryUids, TRUE, $sortBy, $tagUids, $startTime, $endTime
 			);
 			if ($offset < $maxCount) {
 				$this->indexAction($newsMetaData, $offset);
diff --git a/Classes/Controller/ListByCategoryController.php b/Classes/Controller/ListByCategoryController.php
index 677a1b1f770a4f16aa0ed8ea972649e8004b1c88..48a1997b8cc37cef9408e96b3d5719f76aa9cc5e 100644
--- a/Classes/Controller/ListByCategoryController.php
+++ b/Classes/Controller/ListByCategoryController.php
@@ -27,8 +27,10 @@ namespace SGalinski\SgNews\Controller;
  ***************************************************************/
 
 use SGalinski\SgNews\Domain\Model\News;
+use SGalinski\SgNews\Service\ConfigurationService;
 use SGalinski\SgNews\Service\HeaderMetaDataService;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
 
 /**
  * Controller that handles the list rendering of a single category
@@ -72,6 +74,7 @@ class ListByCategoryController extends AbstractController {
 	 * @return void
 	 * @throws \InvalidArgumentException
 	 * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
+	 * @throws \TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException
 	 */
 	public function indexAction(array $newsMetaData = [], $currentPageBrowserPage = 0) {
 		$filterByCategories = FALSE;
@@ -104,9 +107,14 @@ class ListByCategoryController extends AbstractController {
 		$headerSet = FALSE;
 		$offset = $this->calculatePaginationOffset($currentPageBrowserPage, $newsPerPage);
 
+		$configurationService = GeneralUtility::makeInstance(ConfigurationService::class);
+		$sortBy = $configurationService->getConfiguration('sortBy', $this->settings);
+		$sortDirection = $configurationService->getConfiguration('sortDirection', $this->settings);
+
 		$news = $this->newsRepository->findAllSortedNewsByCategories(
-			$categoryUids, $newsPerPage, $offset, $this->settings['sortBy'], $tagUids, $startTime, $endTime
+			$categoryUids, $newsPerPage, $offset, $sortBy, $tagUids, $startTime, $endTime, $sortDirection
 		)->toArray();
+
 		foreach ($news as $newsEntry) {
 			/** @var News $newsEntry */
 			$data = $this->getMetaDataForNews($newsEntry, $categories[$newsEntry->getPid()]);
diff --git a/Classes/Controller/OverviewController.php b/Classes/Controller/OverviewController.php
index 00fada20cc522b274ae140b70741d9d3d2e05689..12c71ffc841ab5cb8e658c497b4063d6cc418d56 100644
--- a/Classes/Controller/OverviewController.php
+++ b/Classes/Controller/OverviewController.php
@@ -29,6 +29,7 @@ namespace SGalinski\SgNews\Controller;
 use SGalinski\SgNews\Domain\Model\Category;
 use SGalinski\SgNews\Domain\Model\Tag;
 use SGalinski\SgNews\Domain\Model\News;
+use SGalinski\SgNews\Service\ConfigurationService;
 use SGalinski\SgNews\Service\HeaderMetaDataService;
 use TYPO3\CMS\Core\Utility\GeneralUtility;
 use TYPO3\CMS\Extbase\Persistence\Generic\Query;
@@ -78,6 +79,7 @@ class OverviewController extends AbstractController {
 	 * @throws \InvalidArgumentException
 	 * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
 	 * @throws \TYPO3\CMS\Extbase\Mvc\Exception\StopActionException
+	 * @throws \TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException
 	 */
 	public function overviewAction(array $newsFilter = [], $currentPageBrowserPage = 0) {
 		switch ((int) $this->settings['groupBy']) {
@@ -138,6 +140,7 @@ class OverviewController extends AbstractController {
 	 * @return void
 	 * @throws \InvalidArgumentException
 	 * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
+	 * @throws \TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException
 	 */
 	protected function overviewWithCategories(
 		array $newsByCategory = [], array $allNews = [], array $newsFilter = [], $currentPageBrowserPage = 0
@@ -157,6 +160,10 @@ class OverviewController extends AbstractController {
 		$startTime = (int) $this->settings['starttime'];
 		$endTime = (int) $this->settings['endtime'];
 
+		$configurationService = GeneralUtility::makeInstance(ConfigurationService::class);
+		$sortBy = $configurationService->getConfiguration('sortBy', $this->settings);
+		$sortDirection = $configurationService->getConfiguration('sortDirection', $this->settings);
+
 		$categoryIds = [];
 		$categoriesById = [];
 		$newsMetaData = [];
@@ -171,7 +178,7 @@ class OverviewController extends AbstractController {
 				$tagIds = [(int) $newsFilter['tag']];
 			}
 			$news = $this->newsRepository->findAllSortedNewsByCategories(
-				[$categoryId], $newsLimitPerCategory, $offset, $this->settings['sortBy'], $tagIds, $startTime, $endTime
+				[$categoryId], $newsLimitPerCategory, $offset, $sortBy, $tagIds, $startTime, $endTime, $sortDirection
 			);
 			$newsMetaData[$categoryId] = [];
 			foreach ($news as $newsEntry) {
@@ -218,7 +225,7 @@ class OverviewController extends AbstractController {
 			$tagIds = [(int) $newsFilter['tag']];
 		}
 		$news = $this->newsRepository->findAllSortedNewsByCategories(
-			$categoryIds, $newsLimitPerCategory, $offset, $this->settings['sortBy'], $tagIds, $startTime, $endTime
+			$categoryIds, $newsLimitPerCategory, $offset, $sortBy, $tagIds, $startTime, $endTime, $sortDirection
 		);
 
 		foreach ($news as $newsEntry) {
@@ -279,6 +286,7 @@ class OverviewController extends AbstractController {
 	 * @return void
 	 * @throws \InvalidArgumentException
 	 * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
+	 * @throws \TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException
 	 */
 	protected function overviewWithTags(
 		array $newsByTag = [], array $allNews = [], array $newsFilter = [], $currentPageBrowserPage = 0
@@ -292,6 +300,10 @@ class OverviewController extends AbstractController {
 			$tagPid = $GLOBALS['TSFE']->id;
 		}
 
+		$configurationService = GeneralUtility::makeInstance(ConfigurationService::class);
+		$sortBy = $configurationService->getConfiguration('sortBy', $this->settings);
+		$sortDirection = $configurationService->getConfiguration('sortDirection', $this->settings);
+
 		$categoryIds = NULL;
 		if ($newsFilter['category']) {
 			$categoryIds = [(int) $newsFilter['category']];
@@ -317,7 +329,7 @@ class OverviewController extends AbstractController {
 			$tagsById[$tagId] = $tag;
 
 			$news = $this->newsRepository->findAllSortedNewsByCategories(
-				$categoryIds, $newsLimitPerTag, $offset, $this->settings['sortBy'], [$tagId], $startTime, $endTime
+				$categoryIds, $newsLimitPerTag, $offset, $sortBy, [$tagId], $startTime, $endTime, $sortDirection
 			);
 			$newsMetaData[$tagId] = [];
 			foreach ($news as $newsEntry) {
@@ -362,7 +374,7 @@ class OverviewController extends AbstractController {
 
 		// Get all news by tags.
 		$news = $this->newsRepository->findAllSortedNewsByCategories(
-			$categoryIds, $newsLimitPerTag, $offset, $this->settings['sortBy'], $tagIds, $startTime, $endTime
+			$categoryIds, $newsLimitPerTag, $offset, $sortBy, $tagIds, $startTime, $endTime, $sortDirection
 		);
 		foreach ($news as $newsEntry) {
 			/** @var News $newsEntry */
@@ -435,6 +447,7 @@ class OverviewController extends AbstractController {
 	 * @throws \InvalidArgumentException
 	 * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
 	 * @throws \TYPO3\CMS\Extbase\Mvc\Exception\NoSuchArgumentException
+	 * @throws \TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException
 	 */
 	protected function overviewWithoutCategoriesAction(
 		array $newsMetaData = [], array $newsFilter = NULL, $currentPageBrowserPage = 0
@@ -445,6 +458,10 @@ class OverviewController extends AbstractController {
 		$this->view->assign('selectedTag', $selectedTag);
 		$this->view->assign('selectedCategory', $selectedCategory);
 
+		$configurationService = GeneralUtility::makeInstance(ConfigurationService::class);
+		$sortBy = $configurationService->getConfiguration('sortBy', $this->settings);
+		$sortDirection = $configurationService->getConfiguration('sortDirection', $this->settings);
+
 		$newsPerPage = (int) $this->settings['newsLimit'];
 		$offset = $this->calculatePaginationOffset($currentPageBrowserPage, $newsPerPage);
 
@@ -496,7 +513,7 @@ class OverviewController extends AbstractController {
 		}
 
 		$news = $this->newsRepository->findAllSortedNewsByCategories(
-			$categoryIds, $newsPerPage, $offset, $this->settings['sortBy'], $tagIds, $startTime, $endTime
+			$categoryIds, $newsPerPage, $offset, $sortBy, $tagIds, $startTime, $endTime, $sortDirection
 		);
 		foreach ($news as $newsEntry) {
 			/** @var News $newsEntry */
diff --git a/Classes/Domain/Repository/NewsRepository.php b/Classes/Domain/Repository/NewsRepository.php
index 2112ac5e72cfff72f9530f1a19d862b971bffa4d..f931fea680c847d7b584c47d6da4f5079ed81697 100644
--- a/Classes/Domain/Repository/NewsRepository.php
+++ b/Classes/Domain/Repository/NewsRepository.php
@@ -45,12 +45,13 @@ class NewsRepository extends AbstractRepository {
 	 * @param array $tagIds NULL, if the tag filter isn't applied, otherwise an array with the tag uids.
 	 * @param int $startTime unix timestamp of the lower limit of the news results date
 	 * @param int $endTime unix timestamp of the upper limit of the news results date
+	 * @param string $sortDirection either DESC or ASC
 	 * @return QueryResultInterface
 	 * @throws \TYPO3\CMS\Extbase\Persistence\Exception\InvalidQueryException
 	 */
 	public function findAllSortedNewsByCategories(
 		array $categoryIds = NULL, $limit = 0, $offset = 0, $sortBy = 'date', array $tagIds = NULL,
-		$startTime = 0, $endTime = 0
+		$startTime = 0, $endTime = 0, $sortDirection = 'DESC'
 	): QueryResultInterface {
 		$query = $this->createQuery();
 
@@ -97,17 +98,23 @@ class NewsRepository extends AbstractRepository {
 			$query->setOffset($offset);
 		}
 
+		if ($sortDirection === 'ASC') {
+			$order = QueryInterface::ORDER_ASCENDING;
+		} else {
+			$order = QueryInterface::ORDER_DESCENDING;
+		}
+
 		if ($sortBy === 'date') {
 			$query->setOrderings(
 				[
-					'lastUpdated' => QueryInterface::ORDER_DESCENDING,
-					'crdate' => QueryInterface::ORDER_DESCENDING,
+					'lastUpdated' => $order,
+					'crdate' => $order,
 				]
 			);
 		} else {
 			$query->setOrderings(
 				[
-					'sorting' => QueryInterface::ORDER_ASCENDING,
+					'sorting' => $order,
 					'lastUpdated' => QueryInterface::ORDER_DESCENDING,
 					'crdate' => QueryInterface::ORDER_DESCENDING,
 				]
diff --git a/Classes/Service/ConfigurationService.php b/Classes/Service/ConfigurationService.php
new file mode 100644
index 0000000000000000000000000000000000000000..6d97ba2e7e918db947c94714b286133f15c2b4bf
--- /dev/null
+++ b/Classes/Service/ConfigurationService.php
@@ -0,0 +1,66 @@
+<?php
+
+namespace SGalinski\SgNews\Service;
+
+/***************************************************************
+ *  Copyright notice
+ *
+ *  (c) sgalinski Internet Services (https://www.sgalinski.de)
+ *
+ *  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 3 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.
+ *
+ *  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!
+ ***************************************************************/
+
+use TYPO3\CMS\Core\SingletonInterface;
+use TYPO3\CMS\Core\Utility\GeneralUtility;
+use TYPO3\CMS\Extbase\Configuration\ConfigurationManager;
+use TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface;
+use TYPO3\CMS\Extbase\Configuration\Exception\InvalidConfigurationTypeException;
+
+/**
+ * This service provides helper function for dealing with plugin configuration
+ */
+class ConfigurationService implements SingletonInterface {
+
+	/**
+	 * @var array
+	 */
+	protected $tsConfig;
+
+	/**
+	 * Returns the desired config value either from TypoScript settings or flexform config
+	 * If the user set 'System default' in the flexform, the value will be fetched from TS
+	 *
+	 * @param string $key
+	 * @param array $settings
+	 * @throws InvalidConfigurationTypeException
+	 * @return string
+	 */
+	public function getConfiguration($key, array $settings): string {
+		if (!$this->tsConfig) {
+			$configurationManager = GeneralUtility::makeInstance(ConfigurationManager::class);
+			$this->tsConfig = $configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FULL_TYPOSCRIPT);
+		}
+		if ($settings[$key] === 'typoscript') {
+			$setting = $this->tsConfig['plugin.']['tx_sgnews.']['settings.'][$key];
+		} else {
+			$setting = $settings[$key];
+		}
+		return $setting;
+	}
+}
diff --git a/Configuration/FlexForms/Latest.xml b/Configuration/FlexForms/Latest.xml
index 2a2864db9d0468ee7d81ebbf8b89a9ce502427ab..d6609204b59dd493fa8fd4626f27cef193d3a325 100644
--- a/Configuration/FlexForms/Latest.xml
+++ b/Configuration/FlexForms/Latest.xml
@@ -79,6 +79,29 @@
 							</config>
 						</TCEforms>
 					</settings.endtime>
+
+					<settings.sortBy>
+						<TCEforms>
+							<label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.sortBy</label>
+							<config>
+								<type>select</type>
+								<items>
+									<numIndex index="0">
+										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.systemDefault</numIndex>
+										<numIndex index="1">typoscript</numIndex>
+									</numIndex>
+									<numIndex index="1">
+										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.dateOfPublication</numIndex>
+										<numIndex index="1">date</numIndex>
+									</numIndex>
+									<numIndex index="2">
+										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.orderInPageTree</numIndex>
+										<numIndex index="1">positionInTree</numIndex>
+									</numIndex>
+								</items>
+							</config>
+						</TCEforms>
+					</settings.sortBy>
 				</el>
 			</ROOT>
 		</main>
diff --git a/Configuration/FlexForms/ListByCategory.xml b/Configuration/FlexForms/ListByCategory.xml
index 4d49f27a429d193d149020d51f54caef47c760dd..a47efa178d7edd427b6bfc8502568cae31252979 100644
--- a/Configuration/FlexForms/ListByCategory.xml
+++ b/Configuration/FlexForms/ListByCategory.xml
@@ -79,6 +79,52 @@
 							</config>
 						</TCEforms>
 					</settings.endtime>
+
+					<settings.sortBy>
+						<TCEforms>
+							<label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.sortBy</label>
+							<config>
+								<type>select</type>
+								<items>
+									<numIndex index="0">
+										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.systemDefault</numIndex>
+										<numIndex index="1">typoscript</numIndex>
+									</numIndex>
+									<numIndex index="1">
+										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.dateOfPublication</numIndex>
+										<numIndex index="1">date</numIndex>
+									</numIndex>
+									<numIndex index="2">
+										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.orderInPageTree</numIndex>
+										<numIndex index="1">positionInTree</numIndex>
+									</numIndex>
+								</items>
+							</config>
+						</TCEforms>
+					</settings.sortBy>
+
+					<settings.sortDirection>
+						<TCEforms>
+							<label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.sortOrder</label>
+							<config>
+								<type>select</type>
+								<items>
+									<numIndex index="0">
+										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.systemDefault</numIndex>
+										<numIndex index="1">typoscript</numIndex>
+									</numIndex>
+									<numIndex index="1">
+										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.desc</numIndex>
+										<numIndex index="1">DESC</numIndex>
+									</numIndex>
+									<numIndex index="2">
+										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.asc</numIndex>
+										<numIndex index="1">ASC</numIndex>
+									</numIndex>
+								</items>
+							</config>
+						</TCEforms>
+					</settings.sortDirection>
 				</el>
 			</ROOT>
 		</main>
diff --git a/Configuration/FlexForms/Overview.xml b/Configuration/FlexForms/Overview.xml
index 379596990bcc564c23866cf043f704fe61f315ab..e6be473e90db4036244386b6fc7aecff7a41f568 100644
--- a/Configuration/FlexForms/Overview.xml
+++ b/Configuration/FlexForms/Overview.xml
@@ -82,6 +82,50 @@
 							</config>
 						</TCEforms>
 					</settings.endtime>
+					<settings.sortBy>
+						<TCEforms>
+							<label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.sortBy</label>
+							<config>
+								<type>select</type>
+								<items>
+									<numIndex index="0">
+										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.systemDefault</numIndex>
+										<numIndex index="1">typoscript</numIndex>
+									</numIndex>
+									<numIndex index="1">
+										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.dateOfPublication</numIndex>
+										<numIndex index="1">date</numIndex>
+									</numIndex>
+									<numIndex index="2">
+										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.orderInPageTree</numIndex>
+										<numIndex index="1">positionInTree</numIndex>
+									</numIndex>
+								</items>
+							</config>
+						</TCEforms>
+					</settings.sortBy>
+					<settings.sortDirection>
+						<TCEforms>
+							<label>LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.sortOrder</label>
+							<config>
+								<type>select</type>
+								<items>
+									<numIndex index="0">
+										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.systemDefault</numIndex>
+										<numIndex index="1">typoscript</numIndex>
+									</numIndex>
+									<numIndex index="1">
+										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.desc</numIndex>
+										<numIndex index="1">DESC</numIndex>
+									</numIndex>
+									<numIndex index="2">
+										<numIndex index="0">LLL:EXT:sg_news/Resources/Private/Language/locallang_db.xlf:plugin.listByCategory.flexFrom.asc</numIndex>
+										<numIndex index="1">ASC</numIndex>
+									</numIndex>
+								</items>
+							</config>
+						</TCEforms>
+					</settings.sortDirection>
 				</el>
 			</ROOT>
 		</main>
diff --git a/Configuration/TypoScript/Frontend/constants.txt b/Configuration/TypoScript/Frontend/constants.txt
index 0d95fddf9df38c00aac100c9c6910394364a7b7d..6d1bb7ae3ff7b16c4de09d6a6a306b12fad222a3 100644
--- a/Configuration/TypoScript/Frontend/constants.txt
+++ b/Configuration/TypoScript/Frontend/constants.txt
@@ -13,6 +13,9 @@ plugin.tx_sgnews {
 	settings {
 		newsLimitPerPage = 12
 		tagPid =
+
+		# sort direction (DESC / ASC)
+		sortDirection = DESC
 	}
 
 	pagebrowser.settings {
diff --git a/Configuration/TypoScript/Frontend/setup.txt b/Configuration/TypoScript/Frontend/setup.txt
index 9ec4f5e04d92d08d6a47b7ecef13bfc45ea647be..2b962113731b44d1bd9999e437c7a11872094d9d 100644
--- a/Configuration/TypoScript/Frontend/setup.txt
+++ b/Configuration/TypoScript/Frontend/setup.txt
@@ -98,6 +98,9 @@ plugin.tx_sgnews {
 		# How to sort the news in general (date, positionInTree)
 		sortBy = date
 
+		# sort direction (DESC / ASC)
+		sortDirection = {$plugin.tx_sgnews.settings.sortDirection}
+
 		# The publisher value for the structured data implementation (see single view template)
 		publisher =
 
diff --git a/Resources/Private/Language/de.locallang_db.xlf b/Resources/Private/Language/de.locallang_db.xlf
index 547ef6c542ea9acd0c8c8d96d21b5f73ae0a6b03..1f7f9773e3c6a880a2724d1737daa71e9f3b77cc 100644
--- a/Resources/Private/Language/de.locallang_db.xlf
+++ b/Resources/Private/Language/de.locallang_db.xlf
@@ -9,114 +9,142 @@
 			<authorEmail>stefan@sgalinski.de</authorEmail>
 		</header>
 		<body>
-		<trans-unit id="pages.subtitle.inPalette" approved="yes">
-			<source>Title</source>
-			<target>Titel</target>
-		</trans-unit>
-		<trans-unit id="pages.tabs.images" approved="yes">
-			<source>Images</source>
-			<target>Bilder</target>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_author" approved="yes">
-			<source>Author</source>
-			<target>Autor</target>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_author.inPalette" approved="yes">
-			<source>Author (use the free text field if the author not in the list)</source>
-			<target>Autor (benutze das Freitextfeld, falls der Autor nicht in der Liste ist)</target>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_highlighted" approved="yes">
-			<source>Highlighted / Top Element</source>
-			<target>Hervorgehoben / Top-Element</target>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_likes" approved="yes">
-			<source>Like Count</source>
-			<target>Anzahl der Likes</target>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_never_highlighted" approved="yes">
-			<source>Don't show in &quot;Latest News&quot;</source>
-			<target>Nicht in &quot;letzten News&quot; anzeigen</target>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_related_news" approved="yes">
-			<source>Related Elements</source>
-			<target>Verwandte Elemente</target>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_tags" approved="yes">
-			<source>Tags</source>
-			<target>Tags</target>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_teaser1_image" approved="yes">
-			<source>Teaser image</source>
-			<target>Teaser-Bild</target>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_teaser2_image" approved="yes">
-			<source>Single view image</source>
-			<target>Einzelansichts-Bild</target>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_use_image_crop" approved="yes">
-			<source>Use Image Cropping</source>
-			<target>Bild-Cropping aktivieren</target>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_location">
-			<source>Location</source>
-			<target>Ort</target>
-		</trans-unit>
-		<trans-unit id="plugin.flexForm" approved="yes">
-			<source>Settings</source>
-			<target>Einstellungen</target>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.categories" approved="yes">
-			<source>Categories (No Selection = all)</source>
-			<target>Kategorien (Keine Auswahl = alle)</target>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.enableFilter" approved="yes">
-			<source>Enable Filter</source>
-			<target>Filter aktivieren</target>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.endtime" approved="yes">
-			<source>Show news until</source>
-			<target>Zeige News bis</target>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.groupBy" approved="yes">
-			<source>Group by</source>
-			<target>Gruppiere nach</target>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.groupBy.I.0" approved="yes">
-			<source>None</source>
-			<target>Weder noch</target>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.groupBy.I.1" approved="yes">
-			<source>Categories</source>
-			<target>Kategorien</target>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.groupBy.I.2" approved="yes">
-			<source>Tags</source>
-			<target>Tags</target>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.listByCategory.categories" approved="yes">
-			<source>Categories (No Selection = current page)</source>
-			<target>Kategorien (Keine Auswahl = aktuelle Seite)</target>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.listByCategory.tags" approved="yes">
-			<source>Tags, if none is selected, then all will be displayed</source>
-			<target>Tags, wenn keine ausgewählt wird, dann werden alle angezeigt</target>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.newsLimit" approved="yes">
-			<source>News limit (depending on the view by category or in total)</source>
-			<target>News-Limit (je nach Ansicht pro Kategorie oder insgesamt)</target>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.newsLimitPerPage" approved="yes">
-			<source>News Limit per Page</source>
-			<target>News-Limit pro Seite</target>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.onlyNewsWithinThisPageSection" approved="yes">
-			<source>Only news within this page section</source>
-			<target>Nur News innerhalb dieses Seitenbereichs</target>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.starttime" approved="yes">
-			<source>Show news from</source>
-			<target>Zeige News ab</target>
-		</trans-unit>
+			<trans-unit id="pages.subtitle.inPalette" approved="yes">
+				<source><![CDATA[Title]]></source>
+				<target><![CDATA[Titel]]></target>
+			</trans-unit>
+			<trans-unit id="pages.tabs.images" approved="yes">
+				<source><![CDATA[Images]]></source>
+				<target><![CDATA[Bilder]]></target>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_author" approved="yes">
+				<source><![CDATA[Author]]></source>
+				<target><![CDATA[Autor]]></target>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_author.inPalette" approved="yes">
+				<source><![CDATA[Author (use the free text field if the author not in the list)]]></source>
+				<target><![CDATA[Autor (benutze das Freitextfeld, falls der Autor nicht in der Liste ist)]]></target>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_highlighted" approved="yes">
+				<source><![CDATA[Highlighted / Top Element]]></source>
+				<target><![CDATA[Hervorgehoben / Top-Element]]></target>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_likes" approved="yes">
+				<source><![CDATA[Like Count]]></source>
+				<target><![CDATA[Anzahl der Likes]]></target>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_location" approved="yes">
+				<source><![CDATA[Location]]></source>
+				<target><![CDATA[Ort]]></target>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_never_highlighted" approved="yes">
+				<source><![CDATA[Don't show in "Latest News"]]></source>
+				<target><![CDATA[Nicht in "letzten News" anzeigen]]></target>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_related_news" approved="yes">
+				<source><![CDATA[Related Elements]]></source>
+				<target><![CDATA[Verwandte Elemente]]></target>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_tags" approved="yes">
+				<source><![CDATA[Tags]]></source>
+				<target><![CDATA[Tags]]></target>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_teaser1_image" approved="yes">
+				<source><![CDATA[Teaser image]]></source>
+				<target><![CDATA[Teaser-Bild]]></target>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_teaser2_image" approved="yes">
+				<source><![CDATA[Single view image]]></source>
+				<target><![CDATA[Einzelansichts-Bild]]></target>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_use_image_crop" approved="yes">
+				<source><![CDATA[Use Image Cropping]]></source>
+				<target><![CDATA[Bild-Cropping aktivieren]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.flexForm" approved="yes">
+				<source><![CDATA[Settings]]></source>
+				<target><![CDATA[Einstellungen]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.listByCategory.flexFrom.asc" approved="yes">
+				<source><![CDATA[Ascending]]></source>
+				<target><![CDATA[Aufsteigend]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.listByCategory.flexFrom.dateOfPublication" approved="yes">
+				<source><![CDATA[Date of publication]]></source>
+				<target><![CDATA[Tag der Veröffentlichung]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.listByCategory.flexFrom.desc" approved="yes">
+				<source><![CDATA[Descending]]></source>
+				<target><![CDATA[Absteigend]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.listByCategory.flexFrom.orderInPageTree" approved="yes">
+				<source><![CDATA[Order in pagetree]]></source>
+				<target><![CDATA[Reihenfolge im Seitenbaum]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.listByCategory.flexFrom.sortBy" approved="yes">
+				<source><![CDATA[Sort by]]></source>
+				<target><![CDATA[Sortieren nach]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.listByCategory.flexFrom.sortOrder" approved="yes">
+				<source><![CDATA[Sort order]]></source>
+				<target><![CDATA[Sortierreihenfolge]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.listByCategory.flexFrom.systemDefault" approved="yes">
+				<source><![CDATA[System default]]></source>
+				<target><![CDATA[Systemstandard]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.categories" approved="yes">
+				<source><![CDATA[Categories (No Selection = all)]]></source>
+				<target><![CDATA[Kategorien (Keine Auswahl = alle)]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.enableFilter" approved="yes">
+				<source><![CDATA[Enable Filter]]></source>
+				<target><![CDATA[Filter aktivieren]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.endtime" approved="yes">
+				<source><![CDATA[Show news until]]></source>
+				<target><![CDATA[Zeige News bis]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.groupBy" approved="yes">
+				<source><![CDATA[Group by]]></source>
+				<target><![CDATA[Gruppiere nach]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.groupBy.I.0" approved="yes">
+				<source><![CDATA[None]]></source>
+				<target><![CDATA[Weder noch]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.groupBy.I.1" approved="yes">
+				<source><![CDATA[Categories]]></source>
+				<target><![CDATA[Kategorien]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.groupBy.I.2" approved="yes">
+				<source><![CDATA[Tags]]></source>
+				<target><![CDATA[Tags]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.listByCategory.categories" approved="yes">
+				<source><![CDATA[Categories (No Selection = current page)]]></source>
+				<target><![CDATA[Kategorien (Keine Auswahl = aktuelle Seite)]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.listByCategory.tags" approved="yes">
+				<source><![CDATA[Tags, if none is selected, then all will be displayed]]></source>
+				<target><![CDATA[Tags, wenn keine ausgewählt wird, dann werden alle angezeigt]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.newsLimit" approved="yes">
+				<source><![CDATA[News limit (depending on the view by category or in total)]]></source>
+				<target><![CDATA[News-Limit (je nach Ansicht pro Kategorie oder insgesamt)]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.newsLimitPerPage" approved="yes">
+				<source><![CDATA[News Limit per Page]]></source>
+				<target><![CDATA[News-Limit pro Seite]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.onlyNewsWithinThisPageSection" approved="yes">
+				<source><![CDATA[Only news within this page section]]></source>
+				<target><![CDATA[Nur News innerhalb dieses Seitenbereichs]]></target>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.starttime" approved="yes">
+				<source><![CDATA[Show news from]]></source>
+				<target><![CDATA[Zeige News ab]]></target>
+			</trans-unit>
 		</body>
 	</file>
 </xliff>
\ No newline at end of file
diff --git a/Resources/Private/Language/locallang_db.xlf b/Resources/Private/Language/locallang_db.xlf
index a247299eef3b029d03c9913c81464fddddb1c0c8..e2cf33a9572f625f527aed80cbc533026678f139 100644
--- a/Resources/Private/Language/locallang_db.xlf
+++ b/Resources/Private/Language/locallang_db.xlf
@@ -9,87 +9,108 @@
 			<authorEmail>stefan@sgalinski.de</authorEmail>
 		</header>
 		<body>
-		<trans-unit id="pages.subtitle.inPalette">
-			<source>Title</source>
-		</trans-unit>
-		<trans-unit id="pages.tabs.images">
-			<source>Images</source>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_author">
-			<source>Author</source>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_author.inPalette">
-			<source>Author (use the free text field if the author not in the list)</source>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_highlighted">
-			<source>Highlighted / Top Element</source>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_likes">
-			<source>Like Count</source>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_never_highlighted">
-			<source>Don't show in &quot;Latest News&quot;</source>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_related_news">
-			<source>Related Elements</source>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_tags">
-			<source>Tags</source>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_teaser1_image">
-			<source>Teaser image</source>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_teaser2_image">
-			<source>Single view image</source>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_use_image_crop">
-			<source>Use Image Cropping</source>
-		</trans-unit>
-		<trans-unit id="pages.tx_sgnews_location">
-			<source>Location</source>
-		</trans-unit>
-		<trans-unit id="plugin.flexForm">
-			<source>Settings</source>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.categories">
-			<source>Categories (No Selection = all)</source>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.enableFilter">
-			<source>Enable Filter</source>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.endtime">
-			<source>Show news until</source>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.groupBy">
-			<source>Group by</source>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.groupBy.I.0">
-			<source>None</source>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.groupBy.I.1">
-			<source>Categories</source>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.groupBy.I.2">
-			<source>Tags</source>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.listByCategory.categories">
-			<source>Categories (No Selection = current page)</source>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.listByCategory.tags">
-			<source>Tags, if none is selected, then all will be displayed</source>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.newsLimit">
-			<source>News limit (depending on the view by category or in total)</source>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.newsLimitPerPage">
-			<source>News Limit per Page</source>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.onlyNewsWithinThisPageSection">
-			<source>Only news within this page section</source>
-		</trans-unit>
-		<trans-unit id="plugin.overview.flexForm.starttime">
-			<source>Show news from</source>
-		</trans-unit>
+			<trans-unit id="pages.subtitle.inPalette">
+				<source><![CDATA[Title]]></source>
+			</trans-unit>
+			<trans-unit id="pages.tabs.images">
+				<source><![CDATA[Images]]></source>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_author">
+				<source><![CDATA[Author]]></source>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_author.inPalette">
+				<source><![CDATA[Author (use the free text field if the author not in the list)]]></source>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_highlighted">
+				<source><![CDATA[Highlighted / Top Element]]></source>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_likes">
+				<source><![CDATA[Like Count]]></source>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_location">
+				<source><![CDATA[Location]]></source>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_never_highlighted">
+				<source><![CDATA[Don't show in "Latest News"]]></source>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_related_news">
+				<source><![CDATA[Related Elements]]></source>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_tags">
+				<source><![CDATA[Tags]]></source>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_teaser1_image">
+				<source><![CDATA[Teaser image]]></source>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_teaser2_image">
+				<source><![CDATA[Single view image]]></source>
+			</trans-unit>
+			<trans-unit id="pages.tx_sgnews_use_image_crop">
+				<source><![CDATA[Use Image Cropping]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.flexForm">
+				<source><![CDATA[Settings]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.listByCategory.flexFrom.asc">
+				<source><![CDATA[Ascending]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.listByCategory.flexFrom.dateOfPublication">
+				<source><![CDATA[Date of publication]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.listByCategory.flexFrom.desc">
+				<source><![CDATA[Descending]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.listByCategory.flexFrom.orderInPageTree">
+				<source><![CDATA[Order in pagetree]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.listByCategory.flexFrom.sortBy">
+				<source><![CDATA[Sort by]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.listByCategory.flexFrom.sortOrder">
+				<source><![CDATA[Sort order]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.listByCategory.flexFrom.systemDefault">
+				<source><![CDATA[System default]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.categories">
+				<source><![CDATA[Categories (No Selection = all)]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.enableFilter">
+				<source><![CDATA[Enable Filter]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.endtime">
+				<source><![CDATA[Show news until]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.groupBy">
+				<source><![CDATA[Group by]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.groupBy.I.0">
+				<source><![CDATA[None]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.groupBy.I.1">
+				<source><![CDATA[Categories]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.groupBy.I.2">
+				<source><![CDATA[Tags]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.listByCategory.categories">
+				<source><![CDATA[Categories (No Selection = current page)]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.listByCategory.tags">
+				<source><![CDATA[Tags, if none is selected, then all will be displayed]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.newsLimit">
+				<source><![CDATA[News limit (depending on the view by category or in total)]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.newsLimitPerPage">
+				<source><![CDATA[News Limit per Page]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.onlyNewsWithinThisPageSection">
+				<source><![CDATA[Only news within this page section]]></source>
+			</trans-unit>
+			<trans-unit id="plugin.overview.flexForm.starttime">
+				<source><![CDATA[Show news from]]></source>
+			</trans-unit>
 		</body>
 	</file>
 </xliff>
\ No newline at end of file