diff --git a/.gitignore b/.gitignore
index 081e56706..3fdce1d80 100644
--- a/.gitignore
+++ b/.gitignore
@@ -53,7 +53,7 @@ source/paramspinbox.py
 source/pixmapbutton.py
 source/pixmapdial.py
 source/pixmapkeyboard.py
-source/qgraphicsembedscene.py
+source/racklistwidget.py
 
 # Binaries
 carla-bridge-qtcreator
diff --git a/Makefile b/Makefile
index d518f2bc8..a71f9cc0d 100644
--- a/Makefile
+++ b/Makefile
@@ -279,6 +279,7 @@ RES = \
 	bin/resources/pixmapbutton.py \
 	bin/resources/pixmapdial.py \
 	bin/resources/pixmapkeyboard.py \
+	bin/resources/racklistwidget.py \
 	bin/resources/resources_rc.py \
 	bin/resources/ui_carla_about.py \
 	bin/resources/ui_carla_about_juce.py \
@@ -352,7 +353,8 @@ WIDGETS = \
 	source/paramspinbox.py \
 	source/pixmapbutton.py \
 	source/pixmapdial.py \
-	source/pixmapkeyboard.py
+	source/pixmapkeyboard.py \
+	source/racklistwidget.py
 
 WIDGETS: $(WIDGETS)
 
@@ -538,6 +540,7 @@ endif
 	$(LINK) $(PREFIX)/share/carla/pixmapbutton.py             $(DESTDIR)$(PREFIX)/share/carla/resources/
 	$(LINK) $(PREFIX)/share/carla/pixmapdial.py               $(DESTDIR)$(PREFIX)/share/carla/resources/
 	$(LINK) $(PREFIX)/share/carla/pixmapkeyboard.py           $(DESTDIR)$(PREFIX)/share/carla/resources/
+	$(LINK) $(PREFIX)/share/carla/racklistwidget.py           $(DESTDIR)$(PREFIX)/share/carla/resources/
 	$(LINK) $(PREFIX)/share/carla/resources_rc.py             $(DESTDIR)$(PREFIX)/share/carla/resources/
 	$(LINK) $(PREFIX)/share/carla/ui_carla_about.py           $(DESTDIR)$(PREFIX)/share/carla/resources/
 	$(LINK) $(PREFIX)/share/carla/ui_carla_about_juce.py      $(DESTDIR)$(PREFIX)/share/carla/resources/
diff --git a/resources/ui/carla_host.ui b/resources/ui/carla_host.ui
index 016381052..1f0ae3a8e 100644
--- a/resources/ui/carla_host.ui
+++ b/resources/ui/carla_host.ui
@@ -57,20 +57,7 @@
          
         
         - 
-         
-          
-           QFrame::NoFrame
-          
-          
-           QFrame::Plain
-          
-          
-           Qt::ScrollBarAlwaysOff
-          
-          
-           Qt::ScrollBarAlwaysOff
-          
-         
+         
         
 
         - 
          
@@ -814,6 +801,11 @@
    
    1
   
+  
+   RackListWidget
+   QListWidget
+   
+  
  
  
   
diff --git a/source/carla_host.py b/source/carla_host.py
index e0aed2185..acf527803 100644
--- a/source/carla_host.py
+++ b/source/carla_host.py
@@ -642,7 +642,7 @@ class HostWindow(QMainWindow, PluginEditParentMeta):
         self.ui.act_plugin_remove_all.setEnabled(False)
         patchcanvas.handleAllPluginsRemoved()
 
-        while self.ui.rack.takeItem(0):
+        while self.ui.listWidget.takeItem(0):
             pass
 
         self.clearSideStuff()
diff --git a/source/carla_rack.py b/source/carla_rack.py
index 122b867ad..da05685cb 100644
--- a/source/carla_rack.py
+++ b/source/carla_rack.py
@@ -38,65 +38,6 @@ else:
 from carla_host import *
 from carla_skin import *
 
-# ------------------------------------------------------------------------------------------------------------
-# Rack widget item
-
-class CarlaRackItem(QListWidgetItem):
-    kRackItemType = QListWidgetItem.UserType + 1
-
-    def __init__(self, parent, pluginId, useSkins):
-        QListWidgetItem.__init__(self, parent, self.kRackItemType)
-
-        # ----------------------------------------------------------------------------------------------------
-        # Internal stuff
-
-        self.fParent   = parent
-        self.fPluginId = pluginId
-        self.fUseSkins = useSkins
-        self.fWidget   = None
-
-        self.setFlags(Qt.ItemIsSelectable|Qt.ItemIsEnabled)
-        #self.setFlags(Qt.ItemIsSelectable|Qt.ItemIsEnabled|Qt.ItemIsDragEnabled|Qt.ItemIsDropEnabled)
-
-        # ----------------------------------------------------------------------------------------------------
-        # Set-up GUI
-
-        self.recreateWidget()
-
-        if False:
-            self.fWidget = AbstractPluginSlot(parent, parent.host, pluginId)
-
-    # --------------------------------------------------------------------------------------------------------
-
-    def setPluginId(self, pluginId):
-        self.fPluginId = pluginId
-        self.fWidget.setPluginId(pluginId)
-
-    # --------------------------------------------------------------------------------------------------------
-
-    def getEditDialog(self):
-        return self.fWidget.fEditDialog
-
-    def closeEditDialog(self):
-        self.fWidget.fEditDialog.close()
-
-    # --------------------------------------------------------------------------------------------------------
-
-    def getWidget(self):
-        return self.fWidget
-
-    def recreateWidget(self):
-        if self.fWidget is not None:
-            #self.fWidget.fEditDialog.close()
-            del self.fWidget
-
-        self.fWidget = createPluginSlot(self.fParent, self.fParent.host, self.fPluginId, self.fUseSkins)
-        self.fWidget.setFixedHeight(self.fWidget.getFixedHeight())
-
-        self.setSizeHint(QSize(640, self.fWidget.getFixedHeight()))
-
-        self.fParent.setItemWidget(self, self.fWidget)
-
 # ------------------------------------------------------------------------------------------------------------
 # Rack widget list
 
diff --git a/source/widgets/racklistwidget.py b/source/widgets/racklistwidget.py
new file mode 100644
index 000000000..1be9ec9b1
--- /dev/null
+++ b/source/widgets/racklistwidget.py
@@ -0,0 +1,138 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+
+# Rack List Widget, a custom Qt4 widget
+# Copyright (C) 2011-2014 Filipe Coelho 
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# For a full copy of the GNU General Public License see the doc/GPL.txt file.
+
+# ------------------------------------------------------------------------------------------------------------
+# Imports (Config)
+
+from carla_config import *
+
+# ------------------------------------------------------------------------------------------------------------
+# Imports (Global)
+
+if config_UseQt5:
+    from PyQt5.QtCore import Qt, QSize
+    from PyQt5.QtGui import QPainter, QPixmap
+    from PyQt5.QtWidgets import QAbstractItemView, QFrame, QListWidget, QListWidgetItem
+else:
+    from PyQt4.QtCore import Qt, QSize
+    from PyQt4.QtGui import QAbstractItemView, QFrame, QListWidget, QListWidgetItem, QPainter, QPixmap
+
+# ------------------------------------------------------------------------------------------------------------
+# Imports (Custom Stuff)
+
+from carla_skin import createPluginSlot
+
+# ------------------------------------------------------------------------------------------------------------
+# Rack Widget item
+
+class CarlaRackItem(QListWidgetItem):
+    kRackItemType = QListWidgetItem.UserType + 1
+
+    def __init__(self, parent, pluginId, useSkins):
+        QListWidgetItem.__init__(self, parent, self.kRackItemType)
+        self.host = parent.host
+
+        if False:
+            # kdevelop likes this :)
+            from carla_backend import CarlaHostMeta
+            host = CarlaHostMeta()
+            self.host = host
+
+        # ----------------------------------------------------------------------------------------------------
+        # Internal stuff
+
+        self.fParent   = parent
+        self.fPluginId = pluginId
+        self.fUseSkins = useSkins
+        self.fWidget   = None
+
+        self.setFlags(Qt.ItemIsSelectable|Qt.ItemIsEnabled)
+        #self.setFlags(Qt.ItemIsSelectable|Qt.ItemIsEnabled|Qt.ItemIsDragEnabled|Qt.ItemIsDropEnabled)
+
+        # ----------------------------------------------------------------------------------------------------
+        # Set-up GUI
+
+        self.recreateWidget()
+
+    # --------------------------------------------------------------------------------------------------------
+
+    def closeEditDialog(self):
+        self.fWidget.fEditDialog.close()
+
+    def getEditDialog(self):
+        return self.fWidget.fEditDialog
+
+    def getWidget(self):
+        return self.fWidget
+
+    # --------------------------------------------------------------------------------------------------------
+
+    def setPluginId(self, pluginId):
+        self.fPluginId = pluginId
+        self.fWidget.setPluginId(pluginId)
+
+    # --------------------------------------------------------------------------------------------------------
+
+    def recreateWidget(self):
+        if self.fWidget is not None:
+            #self.fWidget.fEditDialog.close()
+            del self.fWidget
+
+        self.fWidget = createPluginSlot(self.fParent, self.fParent.host, self.fPluginId, self.fUseSkins)
+        self.fWidget.setFixedHeight(self.fWidget.getFixedHeight())
+
+        self.setSizeHint(QSize(640, self.fWidget.getFixedHeight()))
+
+        self.fParent.setItemWidget(self, self.fWidget)
+
+# ------------------------------------------------------------------------------------------------------------
+# Rack Widget
+
+class RackListWidget(QListWidget):
+    def __init__(self, parent):
+        QListWidget.__init__(self, parent)
+
+        self.fSupportedExtensions = []
+        self.fWasLastDragValid    = False
+
+        self.setMinimumWidth(700)
+        self.setSelectionMode(QAbstractItemView.SingleSelection)
+        self.setSortingEnabled(False)
+
+        self.setDragEnabled(True)
+        self.setDragDropMode(QAbstractItemView.DropOnly)
+        self.setDropIndicatorShown(True)
+        self.viewport().setAcceptDrops(True)
+
+        self.setFrameShape(QFrame.NoFrame)
+        self.setFrameShadow(QFrame.Plain)
+
+        self.fPixmapL = QPixmap(":/bitmaps/rack_interior_left.png")
+        self.fPixmapR = QPixmap(":/bitmaps/rack_interior_right.png")
+
+        self.fPixmapWidth = self.fPixmapL.width()
+
+    # --------------------------------------------------------------------------------------------------------
+
+    def paintEvent(self, event):
+        painter = QPainter(self.viewport())
+        painter.drawTiledPixmap(0, 0, self.fPixmapWidth, self.height(), self.fPixmapL)
+        painter.drawTiledPixmap(self.width()-self.fPixmapWidth-2, 0, self.fPixmapWidth, self.height(), self.fPixmapR)
+        QListWidget.paintEvent(self, event)
+
+# ------------------------------------------------------------------------------------------------------------