diff --git a/Grinder/Version.h b/Grinder/Version.h
index c0b48ef6e1859115ae394713d0f845a4d11967d0..9ffc2c41644ae824f7065dde46c627d1960e8f53 100644
--- a/Grinder/Version.h
+++ b/Grinder/Version.h
@@ -10,14 +10,14 @@
 
 #define GRNDR_INFO_TITLE		"Grinder"
 #define GRNDR_INFO_COPYRIGHT	"Copyright (c) WWU Muenster"
-#define GRNDR_INFO_DATE			"18.07.2018"
+#define GRNDR_INFO_DATE			"19.07.2018"
 #define GRNDR_INFO_COMPANY		"WWU Muenster"
 #define GRNDR_INFO_WEBSITE		"http://www.uni-muenster.de"
 
 #define GRNDR_VERSION_MAJOR		0
 #define GRNDR_VERSION_MINOR		6
 #define GRNDR_VERSION_REVISION	0
-#define GRNDR_VERSION_BUILD		223
+#define GRNDR_VERSION_BUILD		224
 
 namespace grndr
 {
diff --git a/Grinder/ui/image/LayersListItem.cpp b/Grinder/ui/image/LayersListItem.cpp
index a2ade752bd98476b4ad19fedf044e48dcab7a5cd..b7bf3bd30575d74beb8c4743784b2ec57a8ef50b 100644
--- a/Grinder/ui/image/LayersListItem.cpp
+++ b/Grinder/ui/image/LayersListItem.cpp
@@ -37,6 +37,18 @@ void LayersListItem::updateItem()
 	updateToolTip();
 }
 
+LayersListItem::ItemArea LayersListItem::hitTest(QPoint pos) const
+{
+	if (_lockedIconRect.contains(pos))
+		return ItemArea::LockedIcon;
+	else if (_renderableIconRect.contains(pos))
+		return ItemArea::RenderableIcon;
+	else if (_preventUpdatesIconRect.contains(pos))
+		return ItemArea::PreventUpdatesIcon;
+	else
+		return ItemArea::Item;
+}
+
 void LayersListItem::updateToolTip()
 {
 	QStringList itemFlags;
diff --git a/Grinder/ui/image/LayersListItem.h b/Grinder/ui/image/LayersListItem.h
index 33ce64959667210bfd246ec82d27fc054e40872d..dd0d4e0a33ed3c1dfd0ce740cf68b762239faa38 100644
--- a/Grinder/ui/image/LayersListItem.h
+++ b/Grinder/ui/image/LayersListItem.h
@@ -13,12 +13,26 @@ namespace grndr
 {
 	class LayersListItem : public ActiveObjectListItem<Layer>
 	{
+		friend class LayersListItemDelegate;
+
+	public:
+		enum class ItemArea
+		{
+			Item,
+			LockedIcon,
+			RenderableIcon,
+			PreventUpdatesIcon,
+		};
+
 	public:
 		LayersListItem(Layer* layer);
 
 	public:
 		virtual void updateItem() override;
 
+	public:
+		ItemArea hitTest(QPoint pos) const;
+
 	public:
 		QString getName() const { return _object->getName(); }
 		Layer::Type getType() const { return _object->getType(); }
@@ -33,6 +47,10 @@ namespace grndr
 	private:
 		QFont _specialFont;
 		QFont _specialActiveFont;
+
+		QRect _lockedIconRect;
+		QRect _renderableIconRect;
+		QRect _preventUpdatesIconRect;
 	};
 }
 
diff --git a/Grinder/ui/image/LayersListItemDelegate.cpp b/Grinder/ui/image/LayersListItemDelegate.cpp
index d8d59abe603b05807107760bc12f77079a7313b9..7b424e6549dd9226746792130934e050103826cb 100644
--- a/Grinder/ui/image/LayersListItemDelegate.cpp
+++ b/Grinder/ui/image/LayersListItemDelegate.cpp
@@ -29,19 +29,19 @@ void LayersListItemDelegate::paint(QPainter* painter, const QStyleOptionViewItem
 {
 	QStyledItemDelegate::paint(painter, option, index);
 
-	auto lockedFlagRect = QRect{QPoint{0, 0}, FLAG_ICON_SIZE};
-	auto renderableFlagRect = QRect{QPoint{0, 0}, FLAG_ICON_SIZE};
-	auto preventUpdatesFlagRect = QRect{QPoint{0, 0}, FLAG_ICON_SIZE};
-	lockedFlagRect.moveRight(option.rect.right() - (FLAG_ICON_MARGIN / 2));
-	renderableFlagRect.moveRight(lockedFlagRect.left() - FLAG_ICON_MARGIN);
-	preventUpdatesFlagRect.moveRight(renderableFlagRect.left() - FLAG_ICON_MARGIN);
-
 	if (auto layersListItem = _widget->layersListItem(index))
 	{
+		layersListItem->_preventUpdatesIconRect = QRect{QPoint{0, 0}, FLAG_ICON_SIZE};
+		layersListItem->_renderableIconRect = QRect{QPoint{0, 0}, FLAG_ICON_SIZE};
+		layersListItem->_lockedIconRect = QRect{QPoint{0, 0}, FLAG_ICON_SIZE};
+		layersListItem->_preventUpdatesIconRect.moveRight(option.rect.right() - (FLAG_ICON_MARGIN / 2));
+		layersListItem->_renderableIconRect.moveRight(layersListItem->_preventUpdatesIconRect.left() - FLAG_ICON_MARGIN);
+		layersListItem->_lockedIconRect.moveRight(layersListItem->_renderableIconRect.left() - FLAG_ICON_MARGIN);
+
 		painter->save();
-		drawFlagIcon(painter, _lockedIcon, lockedFlagRect, option.rect, layersListItem->hasFlag(Layer::Flag::Locked));
-		drawFlagIcon(painter, _renderableIcon, renderableFlagRect, option.rect, layersListItem->hasFlag(Layer::Flag::Renderable));
-		drawFlagIcon(painter, _preventUpdatesIcon, preventUpdatesFlagRect, option.rect, layersListItem->hasFlag(Layer::Flag::PreventUpdates));
+		drawFlagIcon(painter, _lockedIcon, layersListItem->_lockedIconRect, option.rect, layersListItem->hasFlag(Layer::Flag::Locked));
+		drawFlagIcon(painter, _renderableIcon, layersListItem->_renderableIconRect, option.rect, layersListItem->hasFlag(Layer::Flag::Renderable));
+		drawFlagIcon(painter, _preventUpdatesIcon, layersListItem->_preventUpdatesIconRect, option.rect, layersListItem->hasFlag(Layer::Flag::PreventUpdates));
 		painter->restore();
 	}
 }
diff --git a/Grinder/ui/image/LayersListWidget.cpp b/Grinder/ui/image/LayersListWidget.cpp
index cdfeaaf9d6a5d7d01a2a7a5fb18b43f6b59292bf..0e1fb22432bbc5e83e6189a86526d0060d3a3e71 100644
--- a/Grinder/ui/image/LayersListWidget.cpp
+++ b/Grinder/ui/image/LayersListWidget.cpp
@@ -16,10 +16,10 @@
 #include "res/Resources.h"
 
 LayersListWidget::LayersListWidget(QWidget* parent) : MetaWidget(parent),
-	_sliderValueWidget{new SliderValueWidget{"Opacity:", 0, 100, "%", nullptr, false}}
+	_itemDelegate{new LayersListItemDelegate{this}}, _sliderValueWidget{new SliderValueWidget{"Opacity:", 0, 100, "%", nullptr, false}}
 {
-	// Set the delegate for the list items which handles drawing item flags etc.
-	setItemDelegate(new LayersListItemDelegate{this});
+	// Set the delegate for the list items which handles drawing item flags etc.	
+	setItemDelegate(_itemDelegate);
 
 	// Create layers actions
 	_renameLayerAction = UIUtils::createAction(this, "Rename &layer", FILE_ICON_EDIT, SLOT(renameLayer()), "Rename the selected layer", "F2");
@@ -56,12 +56,12 @@ LayersListWidget::LayersListWidget(QWidget* parent) : MetaWidget(parent),
 	// Update the image build if the layer has been (un)checked
 	connect(this, &LayersListWidget::itemChanged, this, &LayersListWidget::layerCheckChanged);
 
-	// Get notified when a label name has been edited
-	connect(itemDelegate(), &QAbstractItemDelegate::commitData, this, &LayersListWidget::layerRenamed, Qt::QueuedConnection);	// Must be queued to prevent issues if renaming fails
-
 	// Listen for item selections in order to update the active layer and actions
 	connect(this, &LayersListWidget::itemSelectionChanged, this, &LayersListWidget::selectedItemChanged);
 
+	// Get notified when a label name has been edited
+	connect(itemDelegate(), &QAbstractItemDelegate::commitData, this, &LayersListWidget::layerRenamed, Qt::QueuedConnection);	// Must be queued to prevent issues if renaming fails
+
 	// Listen for clipboard changes to update our actions
 	connect(&grinder()->clipboardManager(), &ClipboardManager::dataChanged, this, &LayersListWidget::updateActions);
 
@@ -161,6 +161,46 @@ void LayersListWidget::switchToObjectItem(LayersListItem* item, bool selectItem)
 		_imageEditor->controller().switchLayer(nullptr);
 }
 
+void LayersListWidget::mousePressEvent(QMouseEvent* event)
+{
+	base_type::mousePressEvent(event);
+
+	// Check if any layer flag icon was clicked
+	if (event->button() == Qt::LeftButton && event->modifiers() == 0)
+	{
+		if (auto itemSelected = currentObjectItem())
+		{
+			auto itemRect = visualItemRect(itemSelected);
+
+			if (itemRect.contains(event->pos()))
+			{
+				auto hitArea = itemSelected->hitTest(event->pos() - itemRect.topLeft());
+
+				switch (hitArea)
+				{
+				case LayersListItem::ItemArea::Item:
+					break;
+
+				case LayersListItem::ItemArea::LockedIcon:
+					_lockedAction->toggle();
+					setLayerLocked();
+					break;
+
+				case LayersListItem::ItemArea::RenderableIcon:
+					_renderableAction->toggle();
+					setLayerRenderable();
+					break;
+
+				case LayersListItem::ItemArea::PreventUpdatesIcon:
+					_preventUpdatesAction->toggle();
+					setLayerPreventUpdates();
+					break;
+				}
+			}
+		}
+	}
+}
+
 void LayersListWidget::setLayerFlag(Layer::Flag flag, QAction* action)
 {
 	if (auto layerSelected = currentObject())
diff --git a/Grinder/ui/image/LayersListWidget.h b/Grinder/ui/image/LayersListWidget.h
index 19ea798312ede02b2c626608df5642fc6ca4c212..942b69965572b3eca41500446f85353d0e415d37 100644
--- a/Grinder/ui/image/LayersListWidget.h
+++ b/Grinder/ui/image/LayersListWidget.h
@@ -15,6 +15,7 @@ namespace grndr
 {
 	class Layer;
 	class SliderValueWidget;
+	class LayersListItemDelegate;
 
 	using LayerObjectListWidget = ActiveObjectListWidget<Layer, LayersListItem>;
 
@@ -40,6 +41,9 @@ namespace grndr
 	protected:
 		virtual void switchToObjectItem(LayersListItem* item, bool selectItem = true) override;
 
+	protected:
+		virtual void mousePressEvent(QMouseEvent* event) override;
+
 	private:
 		void setLayerFlag(Layer::Flag flag, QAction* action);
 
@@ -74,6 +78,8 @@ namespace grndr
 		LayersListItem* layersListItem(const QModelIndex& index) const;
 
 	private:
+		LayersListItemDelegate* _itemDelegate{nullptr};
+
 		SliderValueWidget* _sliderValueWidget{nullptr};
 
 		QAction* _renameLayerAction{nullptr};