diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/charts/ChartController.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/charts/ChartController.java
index 969528dd3104741518b4a369dfa36acb50f905e5..f13b838495e3b4d21a88b2068db3450ad42c17a7 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/charts/ChartController.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/charts/ChartController.java
@@ -273,11 +273,20 @@ public class ChartController extends BaseController
 	{
 		String title;
 		final String clickedCategory = chartSettings.getClickedCategory();
-		if(clickedCategory == null)
+		if(chartSettings.getClickedAmountType() == null)
+		{
+			for(FilterObject filterCategory : chartSettings.getFilterConfiguration().getFilterCategories())
+			{
+				filterCategory.setInclude(filterCategory.getName().equals(clickedCategory));
+			}
+
+			title = Localization.getString("chart.matching.transactions.title.category", clickedCategory);
+		}
+		else
 		{
 			if(chartSettings.getClickedAmountType() == ChartAmountType.INCOME)
 			{
-				title = Localization.getString("titles.incomes");
+				title = Localization.getString("title.incomes");
 				chartSettings.getFilterConfiguration().setIncludeIncome(true);
 				chartSettings.getFilterConfiguration().setIncludeExpenditure(false);
 			}
@@ -288,15 +297,6 @@ public class ChartController extends BaseController
 				chartSettings.getFilterConfiguration().setIncludeExpenditure(true);
 			}
 		}
-		else
-		{
-			for(FilterObject filterCategory : chartSettings.getFilterConfiguration().getFilterCategories())
-			{
-				filterCategory.setInclude(filterCategory.getName().equals(clickedCategory));
-			}
-
-			title = Localization.getString("chart.matching.transactions.title.category", clickedCategory);
-		}
 
 		final List<Transaction> transactions = transactionService.getTransactionsForAccount(helpers.getCurrentAccount(), chartSettings.getStartDate(), chartSettings.getEndDate(), chartSettings.getFilterConfiguration());
 		final List<Transaction> convertedTransactions = convertTransferAmounts(transactions);
diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java
index 53f935e1c1c4261cdd5983b621043c58a19f71de..b67257ca1ad15cacaaac229cd0b1c95c9499af77 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/charts/DefaultCharts.java
@@ -24,7 +24,7 @@ public class DefaultCharts
 
 	private static final Chart CHART_INCOMES_AND_EXPENDITURES_PER_MONTH_BAR = new Chart("charts.default.incomesAndExpendituresPerMonthBar",
 			getChartFromFile("charts/IncomesAndExpendituresPerMonthBar.js"),
-			ChartType.DEFAULT, 12, ChartDisplayType.BAR, ChartGroupType.MONTH, "incomesAndExpendituresPerMonthBar.png");
+			ChartType.DEFAULT, 13, ChartDisplayType.BAR, ChartGroupType.MONTH, "incomesAndExpendituresPerMonthBar.png");
 
 	private static final Chart CHART_INCOMES_AND_EXPENDITURES_PER_MONTH_LINE = new Chart("charts.default.incomesAndExpendituresPerMonthLine",
 			getChartFromFile("charts/IncomesAndExpendituresPerMonthLine.js"),
@@ -36,11 +36,11 @@ public class DefaultCharts
 
 	private static final Chart CHART_INCOMES_AND_EXPENDITURES_BY_CATEGORY_PIE = new Chart("charts.default.incomesAndExpendituresByCategoryPie",
 			getChartFromFile("charts/IncomesAndExpendituresByCategoryPie.js"),
-			ChartType.DEFAULT, 9, ChartDisplayType.PIE, ChartGroupType.NONE, "incomesAndExpendituresByCategoryPie.png");
+			ChartType.DEFAULT, 12, ChartDisplayType.PIE, ChartGroupType.NONE, "incomesAndExpendituresByCategoryPie.png");
 
 	private static final Chart CHART_INCOMES_AND_EXPENDITURES_PER_MONTH_BY_CATEGORIES = new Chart("charts.default.incomesAndExpendituresPerMonthByCategories",
 			getChartFromFile("charts/IncomesAndExpendituresPerMonthByCategories.js"),
-			ChartType.DEFAULT, 24, ChartDisplayType.BAR, ChartGroupType.MONTH, "incomesAndExpendituresPerMonthByCategories.png");
+			ChartType.DEFAULT, 25, ChartDisplayType.BAR, ChartGroupType.MONTH, "incomesAndExpendituresPerMonthByCategories.png");
 
 	private static final Chart CHART_REST_PER_MONTH = new Chart("charts.default.restPerMonth",
 			getChartFromFile("charts/RestPerMonth.js"),
@@ -48,23 +48,23 @@ public class DefaultCharts
 
 	private static final Chart CHART_INCOMES_AND_EXPENDITURES_PER_YEAR_BAR = new Chart("charts.default.incomesAndExpendituresPerYearBar",
 			getChartFromFile("charts/IncomesAndExpendituresPerYearBar.js"),
-			ChartType.DEFAULT, 7, ChartDisplayType.BAR, ChartGroupType.YEAR, "incomesAndExpendituresPerYearBar.png");
+			ChartType.DEFAULT, 10, ChartDisplayType.BAR, ChartGroupType.YEAR, "incomesAndExpendituresPerYearBar.png");
 
 	private static final Chart CHART_INCOMES_AND_EXPENDITURES_PER_YEAR_BY_CATEGORIES = new Chart("charts.default.incomesAndExpendituresPerYearByCategories",
 			getChartFromFile("charts/IncomesAndExpendituresPerYearByCategories.js"),
-			ChartType.DEFAULT, 4, ChartDisplayType.BAR, ChartGroupType.YEAR, "incomesAndExpendituresPerYearByCategories.png");
+			ChartType.DEFAULT, 5, ChartDisplayType.BAR, ChartGroupType.YEAR, "incomesAndExpendituresPerYearByCategories.png");
 
 	private static final Chart CHART_AVERAGE_TRANSACTION_AMOUNT_PER_CATEGORY = new Chart("charts.default.averageTransactionAmountPerCategory",
 			getChartFromFile("charts/AverageTransactionAmountPerCategoryBar.js"),
-			ChartType.DEFAULT, 10, ChartDisplayType.BAR, ChartGroupType.NONE, "averageTransactionAmountPerCategory.png");
+			ChartType.DEFAULT, 11, ChartDisplayType.BAR, ChartGroupType.NONE, "averageTransactionAmountPerCategory.png");
 
 	private static final Chart CHART_AVERAGE_MONTHLY_INCOMES_AND_EXPENDITURES_PER_YEAR_BAR = new Chart("charts.default.averageMonthlyIncomesAndExpendituresPerYearBar",
 			getChartFromFile("charts/AverageMonthlyIncomesAndExpendituresPerYearBar.js"),
-			ChartType.DEFAULT, 10, ChartDisplayType.BAR, ChartGroupType.YEAR, "averageMonthlyIncomesAndExpendituresPerYearBar.png");
+			ChartType.DEFAULT, 12, ChartDisplayType.BAR, ChartGroupType.YEAR, "averageMonthlyIncomesAndExpendituresPerYearBar.png");
 
 	private static final Chart CHART_AVERAGE_MONTHLY_INCOMES_AND_EXPENDITURES_PER_CATEGORY_BAR = new Chart("charts.default.averageMonthlyIncomesAndExpendituresPerCategoryBar",
 			getChartFromFile("charts/AverageMonthlyIncomesAndExpendituresPerCategoryBar.js"),
-			ChartType.DEFAULT, 2, ChartDisplayType.BAR, ChartGroupType.NONE, "averageMonthlyIncomesAndExpendituresPerCategoryBar.png");
+			ChartType.DEFAULT, 8, ChartDisplayType.BAR, ChartGroupType.NONE, "averageMonthlyIncomesAndExpendituresPerCategoryBar.png");
 
 	private DefaultCharts()
 	{
diff --git a/BudgetMasterServer/src/main/resources/charts/AverageMonthlyIncomesAndExpendituresPerCategoryBar.js b/BudgetMasterServer/src/main/resources/charts/AverageMonthlyIncomesAndExpendituresPerCategoryBar.js
index b09348d31f5737274a09f8eed84254f2d3b92e2a..e4652d88599477d88e2c704aef813e011452ac11 100644
--- a/BudgetMasterServer/src/main/resources/charts/AverageMonthlyIncomesAndExpendituresPerCategoryBar.js
+++ b/BudgetMasterServer/src/main/resources/charts/AverageMonthlyIncomesAndExpendituresPerCategoryBar.js
@@ -105,6 +105,27 @@ var plotlyConfig = {
 Plotly.newPlot("containerID", plotlyData, plotlyLayout, plotlyConfig);
 
 
+REGEX_CATGEORY_NAME = new RegExp("(.*)\\s-?\\d+.\\d\\s€");
+
+var plotContainer = document.getElementById('containerID');
+plotContainer.on('plotly_click', function(data){
+    if(data.event.shiftKey !== true)
+    {
+        return;
+    }
+
+    let index = data.points.length - 1;
+    let hoverText = data.points[index].hovertext;
+    let match = hoverText.match(REGEX_CATGEORY_NAME);
+    if(match === null)
+    {
+        console.error('could not extract category name from: "' + hoverText + '"');
+        return;
+    }
+
+    getAndShowMatchingTransactions(null, match[1]);
+});
+
 function addDPlotlyData(plotlyData, averageValue, categoryName, color, showLegend)
 {
     // add border if category color is white
diff --git a/BudgetMasterServer/src/main/resources/charts/AverageMonthlyIncomesAndExpendituresPerYearBar.js b/BudgetMasterServer/src/main/resources/charts/AverageMonthlyIncomesAndExpendituresPerYearBar.js
index 47470435bcc0b8a9b1ff0b1d0808cf741277e7fb..dd149b1dc987b0778a13c55f633bac2607a46b74 100644
--- a/BudgetMasterServer/src/main/resources/charts/AverageMonthlyIncomesAndExpendituresPerYearBar.js
+++ b/BudgetMasterServer/src/main/resources/charts/AverageMonthlyIncomesAndExpendituresPerYearBar.js
@@ -128,6 +128,25 @@ var plotlyConfig = {
 Plotly.newPlot("containerID", plotlyData, plotlyLayout, plotlyConfig);
 
 
+var plotContainer = document.getElementById('containerID');
+plotContainer.on('plotly_click', function(data){
+    if(data.event.shiftKey !== true)
+    {
+        return;
+    }
+
+    let index = data.points.length - 1;
+    let amountTypeText = data.points[index].data.name;
+
+    let amountType = 'EXPENDITURE';
+    if(amountTypeText === localizedData['traceName1'])
+    {
+        amountType = 'INCOME';
+    }
+
+    getAndShowMatchingTransactions(amountType, null);
+});
+
 function prepareHoverText(value)
 {
     return value.toFixed(1) + ' ' + localizedCurrency;
diff --git a/BudgetMasterServer/src/main/resources/charts/AverageTransactionAmountPerCategoryBar.js b/BudgetMasterServer/src/main/resources/charts/AverageTransactionAmountPerCategoryBar.js
index b604e7b75f1761beeeae1fa45829674284e33b9b..ac1f4718fe059f195e86171ae4339a774cf57eca 100644
--- a/BudgetMasterServer/src/main/resources/charts/AverageTransactionAmountPerCategoryBar.js
+++ b/BudgetMasterServer/src/main/resources/charts/AverageTransactionAmountPerCategoryBar.js
@@ -97,6 +97,27 @@ var plotlyConfig = {
 Plotly.newPlot("containerID", plotlyData, plotlyLayout, plotlyConfig);
 
 
+REGEX_CATGEORY_NAME = new RegExp("(.*)\\s-?\\d+.\\d\\s€");
+
+var plotContainer = document.getElementById('containerID');
+plotContainer.on('plotly_click', function(data){
+    if(data.event.shiftKey !== true)
+    {
+        return;
+    }
+
+    let index = data.points.length - 1;
+    let hoverText = data.points[index].hovertext;
+    let match = hoverText.match(REGEX_CATGEORY_NAME);
+    if(match === null)
+    {
+        console.error('could not extract category name from: "' + hoverText + '"');
+        return;
+    }
+
+    getAndShowMatchingTransactions(null, match[1]);
+});
+
 function calculateAverage(values)
 {
     var sum = 0;
diff --git a/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresByCategoryPie.js b/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresByCategoryPie.js
index 66d12bb4818398989fbbac548a6fa7b5af66b94a..f8193d0ff4f5bd52d16159fb16efa55d9f9649c2 100644
--- a/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresByCategoryPie.js
+++ b/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresByCategoryPie.js
@@ -159,6 +159,19 @@ var plotlyConfig = {
 Plotly.newPlot("containerID", plotlyData, plotlyLayout, plotlyConfig);
 
 
+
+var plotContainer = document.getElementById('containerID');
+plotContainer.on('plotly_click', function(data){
+    if(data.event.shiftKey !== true)
+    {
+        return;
+    }
+
+    let index = data.points.length - 1;
+    getAndShowMatchingTransactions(null, data.points[index].label);
+});
+
+
 function addSeries(sumHandler, column)
 {
     var plotlyData = [];
diff --git a/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresPerMonthBar.js b/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresPerMonthBar.js
index b0f0a346b28255332a92fbc05abb5b850dbbf179..91515689cf2a6f47f28dc08bf05ad6e40c03db00 100644
--- a/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresPerMonthBar.js
+++ b/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresPerMonthBar.js
@@ -102,4 +102,23 @@ var plotlyConfig = {
 };
 
 // Don't touch this line
-Plotly.newPlot("containerID", plotlyData, plotlyLayout, plotlyConfig);
\ No newline at end of file
+Plotly.newPlot("containerID", plotlyData, plotlyLayout, plotlyConfig);
+
+var plotContainer = document.getElementById('containerID');
+plotContainer.on('plotly_click', function(data){
+    if(data.event.shiftKey !== true)
+    {
+        return;
+    }
+
+    let index = data.points.length - 1;
+    let amountTypeText = data.points[index].data.name;
+
+    let amountType = 'EXPENDITURE';
+    if(amountTypeText === localizedData['traceName1'])
+    {
+        amountType = 'INCOME';
+    }
+
+    getAndShowMatchingTransactions(amountType, null);
+});
\ No newline at end of file
diff --git a/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresPerMonthByCategories.js b/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresPerMonthByCategories.js
index 4bd71aea8845e46431394464b3e11fc42b1e0c6f..5d6acc00fdfa706df88e966ca11cec9e1f360b6f 100644
--- a/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresPerMonthByCategories.js
+++ b/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresPerMonthByCategories.js
@@ -198,6 +198,27 @@ var plotlyConfig = {
 Plotly.newPlot("containerID", plotlyData, plotlyLayout, plotlyConfig);
 
 
+REGEX_CATGEORY_NAME = new RegExp("(.*)\\s\\d+.\\d%");
+
+var plotContainer = document.getElementById('containerID');
+plotContainer.on('plotly_click', function(data){
+    if(data.event.shiftKey !== true)
+    {
+        return;
+    }
+
+    let index = data.points.length - 1;
+    let hoverText = data.points[index].hovertext;
+    let match = hoverText.match(REGEX_CATGEORY_NAME);
+    if(match === null)
+    {
+        console.error('could not extract category name from: "' + hoverText + '"');
+        return;
+    }
+
+    getAndShowMatchingTransactions(null, match[1]);
+});
+
 function prepareHoverText(categoryName, percentage, value)
 {
     value = value / 100;
diff --git a/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresPerYearBar.js b/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresPerYearBar.js
index d03e7f05f260c6994fcc2035dd9b889793b9ae15..674fb55fdc5cdef7cd543d85635b5d197ea0d8ca 100644
--- a/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresPerYearBar.js
+++ b/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresPerYearBar.js
@@ -102,4 +102,24 @@ var plotlyConfig = {
 };
 
 // Don't touch this line
-Plotly.newPlot("containerID", plotlyData, plotlyLayout, plotlyConfig);
\ No newline at end of file
+Plotly.newPlot("containerID", plotlyData, plotlyLayout, plotlyConfig);
+
+
+var plotContainer = document.getElementById('containerID');
+plotContainer.on('plotly_click', function(data){
+    if(data.event.shiftKey !== true)
+    {
+        return;
+    }
+
+    let index = data.points.length - 1;
+    let amountTypeText = data.points[index].data.name;
+
+    let amountType = 'EXPENDITURE';
+    if(amountTypeText === localizedData['traceName1'])
+    {
+        amountType = 'INCOME';
+    }
+
+    getAndShowMatchingTransactions(amountType, null);
+});
\ No newline at end of file
diff --git a/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresPerYearByCategories.js b/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresPerYearByCategories.js
index dcb1e0b4c096099edae125526b5c7da3f76b3842..ff3413d9af530b322d050d2a186af9db432ed4b9 100644
--- a/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresPerYearByCategories.js
+++ b/BudgetMasterServer/src/main/resources/charts/IncomesAndExpendituresPerYearByCategories.js
@@ -198,6 +198,27 @@ var plotlyConfig = {
 Plotly.newPlot("containerID", plotlyData, plotlyLayout, plotlyConfig);
 
 
+REGEX_CATGEORY_NAME = new RegExp("(.*)\\s\\d+.\\d%");
+
+var plotContainer = document.getElementById('containerID');
+plotContainer.on('plotly_click', function(data){
+    if(data.event.shiftKey !== true)
+    {
+        return;
+    }
+
+    let index = data.points.length - 1;
+    let hoverText = data.points[index].hovertext;
+    let match = hoverText.match(REGEX_CATGEORY_NAME);
+    if(match === null)
+    {
+        console.error('could not extract category name from: "' + hoverText + '"');
+        return;
+    }
+
+    getAndShowMatchingTransactions(null, match[1]);
+});
+
 function prepareHoverText(categoryName, percentage, value)
 {
     value = value / 100;