diff --git a/CMakeLists.txt b/CMakeLists.txt
index 471a91d55864f106c656ceb135571770d8c3d0db..0273233644b9913d409aaf5627d28e482dbeaefc 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,7 @@
 project( calamares )
 cmake_minimum_required( VERSION 2.8.12 )
 set( CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules" )
-#set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wl,--no-undefined" )
+set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wl,--no-undefined" )
 set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wl,--fatal-warnings -Wnon-virtual-dtor -Woverloaded-virtual -Werror=return-type" )
 
 if( CMAKE_COMPILER_IS_GNUCXX )
@@ -19,7 +19,6 @@ cmake_policy( SET CMP0043 OLD )
 
 find_package( Qt5 5.3.0 CONFIG REQUIRED Core Gui Widgets LinguistTools )
 find_package( YamlCpp 0.5.1 REQUIRED )
-find_package( KF5 CONFIG REQUIRED CoreAddons )
 
 ###
 ### Calamares application info
diff --git a/CalamaresAddLibrary.cmake b/CalamaresAddLibrary.cmake
index 050c08a5d275fcc9c84dadcc9eae1e458a15da8e..aef6a7be7476d6358cab20e26c39b344939ab86d 100644
--- a/CalamaresAddLibrary.cmake
+++ b/CalamaresAddLibrary.cmake
@@ -10,13 +10,13 @@ function(calamares_add_library)
     set(LIBRARY_NAME ${NAME})
 
 
-#    message("*** Arguments for ${LIBRARY_NAME}")
-#    message("Sources: ${LIBRARY_SOURCES}")
-#    message("Link libraries: ${LIBRARY_LINK_LIBRARIES}")
-#    message("UI: ${LIBRARY_UI}")
-#    message("TARGET_TYPE: ${LIBRARY_TARGET_TYPE}")
-#    message("EXPORT_MACRO: ${LIBRARY_EXPORT_MACRO}")
-#    message("NO_INSTALL: ${LIBRARY_NO_INSTALL}")
+    message("*** Arguments for ${LIBRARY_NAME}")
+    message("Sources: ${LIBRARY_SOURCES}")
+    message("Link libraries: ${LIBRARY_LINK_LIBRARIES}")
+    message("UI: ${LIBRARY_UI}")
+    message("TARGET_TYPE: ${LIBRARY_TARGET_TYPE}")
+    message("EXPORT_MACRO: ${LIBRARY_EXPORT_MACRO}")
+    message("NO_INSTALL: ${LIBRARY_NO_INSTALL}")
 
     set(target ${LIBRARY_NAME})
 
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 3158ae1c2be494eec47994be3f8f360c8a421419..4e267d901607536366467a6995b9888ee0df0a6e 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -8,12 +8,13 @@ include_directories( ${CMAKE_CURRENT_LIST_DIR} )
 
 # library
 add_subdirectory( libcalamares )
+add_subdirectory( libcalamaresui )
 
 # application
 add_subdirectory( calamares )
 
-include_directories( ${CMAKE_CURRENT_BINARY_DIR}/calamares )
-include_directories( ${CMAKE_CURRENT_LIST_DIR}/calamares )
+include_directories( ${CMAKE_CURRENT_BINARY_DIR}/libcalamaresui )
+include_directories( ${CMAKE_CURRENT_LIST_DIR}/libcalamaresui )
 
 # plugins
 add_subdirectory( modules )
diff --git a/src/calamares/CMakeLists.txt b/src/calamares/CMakeLists.txt
index 1bc5c0f57568546b610cdcc0beb6ae1c01fca793..4d11469decc7123f849e4d4ca5ecf5f28ea30607 100644
--- a/src/calamares/CMakeLists.txt
+++ b/src/calamares/CMakeLists.txt
@@ -10,13 +10,6 @@ set( calamaresSources
     main.cpp
     CalamaresApplication.cpp
     CalamaresWindow.cpp
-    Settings.cpp
-    ViewManager.cpp
-    YamlUtils.cpp
-
-    modulesystem/Module.cpp
-    modulesystem/ModuleManager.cpp
-    modulesystem/ViewModule.cpp
 
     progresstree/CategoryItem.cpp
     progresstree/ProgressTreeDelegate.cpp
@@ -24,11 +17,6 @@ set( calamaresSources
     progresstree/ProgressTreeModel.cpp
     progresstree/ProgressTreeView.cpp
     progresstree/ViewStepItem.cpp
-
-    utils/CalamaresUtilsGui.cpp
-
-    viewpages/ViewStep.cpp
-    viewpages/AbstractPage.cpp
 )
 
 set( calamaresUi
@@ -41,6 +29,7 @@ include_directories(
     ${CMAKE_CURRENT_BINARY_DIR}/../libcalamares
 
     ../libcalamares
+    ../libcalamaresui
 )
 
 include( GNUInstallDirs )
@@ -68,6 +57,7 @@ qt5_use_modules( calamares_bin Core Widgets )
 target_link_libraries( calamares_bin
     ${LINK_LIBRARIES}
     ${CALAMARES_LIBRARIES}
+    calamaresui
     Qt5::Core
     Qt5::Widgets
     yaml-cpp
diff --git a/src/calamares/CalamaresApplication.cpp b/src/calamares/CalamaresApplication.cpp
index 067243f06294d2f4c4bafd0bae561c801953c658..89eb3f8a976b485c20ff638967dd0af063740256 100644
--- a/src/calamares/CalamaresApplication.cpp
+++ b/src/calamares/CalamaresApplication.cpp
@@ -20,12 +20,13 @@
 
 #include "CalamaresWindow.h"
 #include "CalamaresVersion.h"
-#include "modulesystem/ModuleManager.h"
 #include "progresstree/ProgressTreeView.h"
 #include "progresstree/ProgressTreeModel.h"
-#include "Settings.h"
+
+#include "modulesystem/ModuleManager.h"
 #include "utils/CalamaresUtils.h"
 #include "utils/Logger.h"
+#include "Settings.h"
 #include "ViewManager.h"
 
 
@@ -108,7 +109,7 @@ CalamaresApplication::mainWindow()
 void
 CalamaresApplication::initSettings()
 {
-    new Calamares::Settings( this );
+    new Calamares::Settings( isDebug(), this );
 }
 
 
diff --git a/src/calamares/progresstree/ProgressTreeDelegate.cpp b/src/calamares/progresstree/ProgressTreeDelegate.cpp
index 02d6f4b57ef6fe669e38155698c752c5e412f170..82417935ff49bbd76570a36b4ed341f94d993a64 100644
--- a/src/calamares/progresstree/ProgressTreeDelegate.cpp
+++ b/src/calamares/progresstree/ProgressTreeDelegate.cpp
@@ -22,7 +22,7 @@
 #include "../CalamaresWindow.h"
 #include "ViewStepItem.h"
 #include "ProgressTreeModel.h"
-#include "../ViewManager.h"
+#include "ViewManager.h"
 
 #include <QAbstractItemView>
 #include <QPainter>
diff --git a/src/libcalamares/JobQueue.cpp b/src/libcalamares/JobQueue.cpp
index f7b21b2d192e4d00c2aed1537b2906291f06cc2b..fe4e7442394c272ad25401e87334c90bdcdec93e 100644
--- a/src/libcalamares/JobQueue.cpp
+++ b/src/libcalamares/JobQueue.cpp
@@ -20,22 +20,33 @@
 namespace Calamares
 {
 
+
 JobQueue* JobQueue::s_instance = nullptr;
 
+
 JobQueue*
 JobQueue::instance()
 {
     return s_instance;
 }
 
+
 JobQueue::JobQueue( QObject* parent )
     : QObject( parent )
 {
 }
 
+
 void
 JobQueue::enqueue( const Calamares::job_ptr& job )
 {
 }
 
+
+void
+JobQueue::enqueue( const QList< job_ptr >& jobs )
+{
+
+}
+
 } // namespace Calamares
diff --git a/src/libcalamaresui/CMakeLists.txt b/src/libcalamaresui/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1b2ee1430c6b28a9bafdd3aee2b0eaa96ea5c516
--- /dev/null
+++ b/src/libcalamaresui/CMakeLists.txt
@@ -0,0 +1,30 @@
+set( CALAMARESUI_LIBRARY_TARGET calamaresui )
+
+list( APPEND ${CALAMARESUI_LIBRARY_TARGET}_SOURCES
+    modulesystem/Module.cpp
+    modulesystem/ModuleManager.cpp
+    modulesystem/ViewModule.cpp
+
+    utils/CalamaresUtilsGui.cpp
+    utils/YamlUtils.cpp
+
+    viewpages/AbstractPage.cpp
+    viewpages/ViewStep.cpp
+
+    Settings.cpp
+    ViewManager.cpp
+)
+
+list( APPEND ${CALAMARESUI_LIBRARY_TARGET}_UI
+
+)
+
+calamares_add_library( ${CALAMARESUI_LIBRARY_TARGET}
+    SOURCES ${${CALAMARESUI_LIBRARY_TARGET}_SOURCES}
+    UI ${${CALAMARESUI_LIBRARY_TARGET}_UI}
+    EXPORT_MACRO UIDLLEXPORT_PRO
+    LINK_LIBRARIES
+        yaml-cpp
+    EXPORT CalamaresLibraryDepends
+    VERSION ${CALAMARES_VERSION_SHORT}
+)
diff --git a/src/calamares/Settings.cpp b/src/libcalamaresui/Settings.cpp
similarity index 95%
rename from src/calamares/Settings.cpp
rename to src/libcalamaresui/Settings.cpp
index f76798aa781157d841fbe9d27f45fd1b3ff296cd..f9c3e3112023e60f764d3b98e671e6c25825ac62 100644
--- a/src/calamares/Settings.cpp
+++ b/src/libcalamaresui/Settings.cpp
@@ -18,10 +18,9 @@
 
 #include "Settings.h"
 
-#include "CalamaresApplication.h"
 #include "utils/CalamaresUtils.h"
 #include "utils/Logger.h"
-#include "YamlUtils.h"
+#include "utils/YamlUtils.h"
 
 #include <QDir>
 #include <QFile>
@@ -41,11 +40,11 @@ Settings::instance()
 }
 
 
-Settings::Settings( QObject* parent )
+Settings::Settings( bool debugMode, QObject* parent )
     : QObject( parent )
 {
     QFileInfo settingsFile( CalamaresUtils::appDataDir().absoluteFilePath( "settings.conf" ) );
-    if ( APP->isDebug() )
+    if ( debugMode )
     {
         QFileInfo localFile( QDir( QDir::currentPath() ).absoluteFilePath( "settings.conf" ) );
         if ( localFile.exists() && localFile.isReadable() )
@@ -72,7 +71,7 @@ Settings::Settings( QObject* parent )
                     // If we're running in debug mode, we assume we might also be
                     // running from the build dir, so we add a maximum priority
                     // module search path in the build dir.
-                    if ( APP->isDebug() )
+                    if ( debugMode )
                     {
                         QString buildDirModules = QDir::current().absolutePath() +
                                                   QDir::separator() + "src" +
diff --git a/src/calamares/Settings.h b/src/libcalamaresui/Settings.h
similarity index 90%
rename from src/calamares/Settings.h
rename to src/libcalamaresui/Settings.h
index 42731f10280518c6452c2ebb01d0d5b2724481e0..f2ee7c88de9d89087d3b4a76253236f6ad160f5b 100644
--- a/src/calamares/Settings.h
+++ b/src/libcalamaresui/Settings.h
@@ -19,6 +19,8 @@
 #ifndef SETTINGS_H
 #define SETTINGS_H
 
+#include "UiDllMacro.h"
+
 #include <QObject>
 #include <QStringList>
 
@@ -26,11 +28,11 @@
 namespace Calamares
 {
 
-class Settings : public QObject
+class UIDLLEXPORT Settings : public QObject
 {
     Q_OBJECT
 public:
-    explicit Settings( QObject *parent = nullptr );
+    explicit Settings( bool debugMode, QObject *parent = nullptr );
 
     static Settings* instance();
     //TODO: load from JSON then emit ready
diff --git a/src/calamares/UiDllMacro.h b/src/libcalamaresui/UiDllMacro.h
similarity index 100%
rename from src/calamares/UiDllMacro.h
rename to src/libcalamaresui/UiDllMacro.h
diff --git a/src/calamares/ViewManager.cpp b/src/libcalamaresui/ViewManager.cpp
similarity index 100%
rename from src/calamares/ViewManager.cpp
rename to src/libcalamaresui/ViewManager.cpp
diff --git a/src/calamares/ViewManager.h b/src/libcalamaresui/ViewManager.h
similarity index 100%
rename from src/calamares/ViewManager.h
rename to src/libcalamaresui/ViewManager.h
diff --git a/src/calamares/modulesystem/Module.cpp b/src/libcalamaresui/modulesystem/Module.cpp
similarity index 99%
rename from src/calamares/modulesystem/Module.cpp
rename to src/libcalamaresui/modulesystem/Module.cpp
index 184858febf0e7bb8d65825cdffaac389ded45009..7fa64661eeac0a0640b213c59f3a6ed20b26fbb7 100644
--- a/src/calamares/modulesystem/Module.cpp
+++ b/src/libcalamaresui/modulesystem/Module.cpp
@@ -19,7 +19,7 @@
 #include "Module.h"
 
 #include "ViewModule.h"
-#include "YamlUtils.h"
+#include "utils/YamlUtils.h"
 #include "utils/Logger.h"
 
 #include <yaml-cpp/yaml.h>
diff --git a/src/calamares/modulesystem/Module.h b/src/libcalamaresui/modulesystem/Module.h
similarity index 100%
rename from src/calamares/modulesystem/Module.h
rename to src/libcalamaresui/modulesystem/Module.h
diff --git a/src/calamares/modulesystem/ModuleManager.cpp b/src/libcalamaresui/modulesystem/ModuleManager.cpp
similarity index 100%
rename from src/calamares/modulesystem/ModuleManager.cpp
rename to src/libcalamaresui/modulesystem/ModuleManager.cpp
diff --git a/src/calamares/modulesystem/ModuleManager.h b/src/libcalamaresui/modulesystem/ModuleManager.h
similarity index 100%
rename from src/calamares/modulesystem/ModuleManager.h
rename to src/libcalamaresui/modulesystem/ModuleManager.h
diff --git a/src/calamares/modulesystem/ViewModule.cpp b/src/libcalamaresui/modulesystem/ViewModule.cpp
similarity index 100%
rename from src/calamares/modulesystem/ViewModule.cpp
rename to src/libcalamaresui/modulesystem/ViewModule.cpp
diff --git a/src/calamares/modulesystem/ViewModule.h b/src/libcalamaresui/modulesystem/ViewModule.h
similarity index 100%
rename from src/calamares/modulesystem/ViewModule.h
rename to src/libcalamaresui/modulesystem/ViewModule.h
diff --git a/src/calamares/utils/CalamaresUtilsGui.cpp b/src/libcalamaresui/utils/CalamaresUtilsGui.cpp
similarity index 100%
rename from src/calamares/utils/CalamaresUtilsGui.cpp
rename to src/libcalamaresui/utils/CalamaresUtilsGui.cpp
diff --git a/src/calamares/utils/CalamaresUtilsGui.h b/src/libcalamaresui/utils/CalamaresUtilsGui.h
similarity index 100%
rename from src/calamares/utils/CalamaresUtilsGui.h
rename to src/libcalamaresui/utils/CalamaresUtilsGui.h
diff --git a/src/calamares/YamlUtils.cpp b/src/libcalamaresui/utils/YamlUtils.cpp
similarity index 100%
rename from src/calamares/YamlUtils.cpp
rename to src/libcalamaresui/utils/YamlUtils.cpp
diff --git a/src/calamares/YamlUtils.h b/src/libcalamaresui/utils/YamlUtils.h
similarity index 100%
rename from src/calamares/YamlUtils.h
rename to src/libcalamaresui/utils/YamlUtils.h
diff --git a/src/calamares/viewpages/AbstractPage.cpp b/src/libcalamaresui/viewpages/AbstractPage.cpp
similarity index 100%
rename from src/calamares/viewpages/AbstractPage.cpp
rename to src/libcalamaresui/viewpages/AbstractPage.cpp
diff --git a/src/calamares/viewpages/AbstractPage.h b/src/libcalamaresui/viewpages/AbstractPage.h
similarity index 100%
rename from src/calamares/viewpages/AbstractPage.h
rename to src/libcalamaresui/viewpages/AbstractPage.h
diff --git a/src/calamares/viewpages/ViewStep.cpp b/src/libcalamaresui/viewpages/ViewStep.cpp
similarity index 100%
rename from src/calamares/viewpages/ViewStep.cpp
rename to src/libcalamaresui/viewpages/ViewStep.cpp
diff --git a/src/calamares/viewpages/ViewStep.h b/src/libcalamaresui/viewpages/ViewStep.h
similarity index 100%
rename from src/calamares/viewpages/ViewStep.h
rename to src/libcalamaresui/viewpages/ViewStep.h
diff --git a/src/modules/greeting/CMakeLists.txt b/src/modules/greeting/CMakeLists.txt
index 5ca3a131f53be52eb8ca07a8a534ce24ee4653da..904dcb039fa509832ac4ba8d8a418cc8996908f8 100644
--- a/src/modules/greeting/CMakeLists.txt
+++ b/src/modules/greeting/CMakeLists.txt
@@ -1,4 +1,4 @@
-include_directories( ${PROJECT_BINARY_DIR}/src/calamares )
+include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui )
 calamares_add_plugin( greeting
     TYPE viewmodule
     EXPORT_MACRO PLUGINDLLEXPORT_PRO
@@ -9,5 +9,7 @@ calamares_add_plugin( greeting
     UI
     LINK_LIBRARIES
         ${CALAMARES_LIBRARIES}
+        calamaresui
+        ${CALAMARESUI_LIBRARIES}
     SHARED_LIB
 )
diff --git a/src/modules/locale/CMakeLists.txt b/src/modules/locale/CMakeLists.txt
index 7778400b18888a6cdc8d004e07489f2f4c6ca7a2..97d53ac7a170d50cc1faea1d5c3b8f27b99d3278 100644
--- a/src/modules/locale/CMakeLists.txt
+++ b/src/modules/locale/CMakeLists.txt
@@ -1,4 +1,5 @@
-include_directories( ${PROJECT_BINARY_DIR}/src/calamares )
+include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui )
+
 calamares_add_plugin( locale
     TYPE viewmodule
     EXPORT_MACRO PLUGINDLLEXPORT_PRO
@@ -11,6 +12,6 @@ calamares_add_plugin( locale
         timezonewidget/localeglobal.cpp
     UI
     LINK_LIBRARIES
-        ${CALAMARES_LIBRARIES}
+        calamaresui
     SHARED_LIB
 )
diff --git a/src/modules/partition/CMakeLists.txt b/src/modules/partition/CMakeLists.txt
index f6835d9316accf054362a0b0632c20ae1a91c34c..9f81eb20abb540e7de9b756bf6dc63d3bee9236e 100644
--- a/src/modules/partition/CMakeLists.txt
+++ b/src/modules/partition/CMakeLists.txt
@@ -1,8 +1,10 @@
 if( WITH_PARTITIONMANAGER )
 
+find_package( KF5 CONFIG REQUIRED CoreAddons )
+
 add_definitions( -DCALAMARES )
 
-include_directories( ${PROJECT_BINARY_DIR}/src/calamares )
+include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui )
 calamares_add_plugin( partition
     TYPE viewmodule
     EXPORT_MACRO PLUGINDLLEXPORT_PRO
@@ -22,7 +24,7 @@ calamares_add_plugin( partition
         PartitionPage.ui
     LINK_LIBRARIES
         calapm
-        ${CALAMARES_LIBRARIES}
+        calamaresui
         KF5::CoreAddons
     SHARED_LIB
 )
@@ -37,7 +39,6 @@ set( partview_SRCS
     PartitionModel.cpp
     PartitionPage.cpp
     PMUtils.cpp
-    ${calamares_SOURCE_DIR}/viewpages/AbstractPage.cpp
     main.cpp
 )
 qt5_wrap_ui( partview_SRCS
diff --git a/src/modules/partition/PartitionPage.cpp b/src/modules/partition/PartitionPage.cpp
index 96ba77c31216c077bcf6a64c64d8b13420940fbb..291dc7f0f811aae014e235676d11293d851c917a 100644
--- a/src/modules/partition/PartitionPage.cpp
+++ b/src/modules/partition/PartitionPage.cpp
@@ -33,7 +33,7 @@
 #include <QPointer>
 
 PartitionPage::PartitionPage( PartitionCoreModule* core, QWidget* parent )
-    : Calamares::AbstractPage( parent )
+    : QWidget( parent )
     , m_ui( new Ui_PartitionPage )
     , m_core( core )
 {
diff --git a/src/modules/partition/PartitionPage.h b/src/modules/partition/PartitionPage.h
index 69d5a4ace006addbd59cc3fec887ff839e9d08c8..be9643ce16f2a118d42ef6650bddfe4282995cf4 100644
--- a/src/modules/partition/PartitionPage.h
+++ b/src/modules/partition/PartitionPage.h
@@ -19,8 +19,7 @@
 #ifndef PARTITIONPAGE_H
 #define PARTITIONPAGE_H
 
-#include "viewpages/AbstractPage.h"
-
+#include <QWidget>
 #include <QScopedPointer>
 
 class PartitionCoreModule;
@@ -28,7 +27,7 @@ class Ui_PartitionPage;
 
 class DeviceModel;
 
-class PartitionPage : public Calamares::AbstractPage
+class PartitionPage : public QWidget
 {
     Q_OBJECT
 public: