diff --git a/src/libs/CMakeLists.txt b/src/libs/CMakeLists.txt
index 211f6226..196b2a1b 100644
--- a/src/libs/CMakeLists.txt
+++ b/src/libs/CMakeLists.txt
@@ -1,5 +1,6 @@
add_subdirectory(av)
+add_subdirectory(database)
add_subdirectory(image)
add_subdirectory(lmscore)
add_subdirectory(metadata)
diff --git a/src/libs/database/CMakeLists.txt b/src/libs/database/CMakeLists.txt
new file mode 100644
index 00000000..38b13e75
--- /dev/null
+++ b/src/libs/database/CMakeLists.txt
@@ -0,0 +1,40 @@
+add_library(lmsdatabase SHARED
+ impl/Artist.cpp
+ impl/Cluster.cpp
+ impl/Db.cpp
+ impl/TrackArtistLink.cpp
+ impl/TrackFeatures.cpp
+ impl/TrackList.cpp
+ impl/Release.cpp
+ impl/ScanSettings.cpp
+ impl/Session.cpp
+ impl/SqlQuery.cpp
+ impl/Track.cpp
+ impl/TrackBookmark.cpp
+ impl/User.cpp
+ impl/Utils.cpp
+ )
+
+target_include_directories(lmsdatabase INTERFACE
+ include
+ )
+
+target_include_directories(lmsdatabase PRIVATE
+ include
+ )
+
+target_link_libraries(lmsdatabase PRIVATE
+ Wt::DboSqlite3
+ )
+
+target_link_libraries(lmsdatabase PUBLIC
+ lmsutils
+ std::filesystem
+ Wt::Dbo
+ )
+
+install(TARGETS lmsdatabase DESTINATION lib)
+
+if(BUILD_TESTING)
+ add_subdirectory(test)
+endif()
diff --git a/src/libs/lmscore/impl/database/Artist.cpp b/src/libs/database/impl/Artist.cpp
similarity index 98%
rename from src/libs/lmscore/impl/database/Artist.cpp
rename to src/libs/database/impl/Artist.cpp
index 3e9e35b3..9ca631fa 100644
--- a/src/libs/lmscore/impl/database/Artist.cpp
+++ b/src/libs/database/impl/Artist.cpp
@@ -16,15 +16,15 @@
* You should have received a copy of the GNU General Public License
* along with LMS. If not, see .
*/
-#include "lmscore/database/Artist.hpp"
+#include "database/Artist.hpp"
#include
-#include "lmscore/database/Cluster.hpp"
-#include "lmscore/database/Release.hpp"
-#include "lmscore/database/Session.hpp"
-#include "lmscore/database/Track.hpp"
-#include "lmscore/database/User.hpp"
+#include "database/Cluster.hpp"
+#include "database/Release.hpp"
+#include "database/Session.hpp"
+#include "database/Track.hpp"
+#include "database/User.hpp"
#include "utils/Logger.hpp"
#include "SqlQuery.hpp"
#include "Utils.hpp"
diff --git a/src/libs/lmscore/impl/database/Cluster.cpp b/src/libs/database/impl/Cluster.cpp
similarity index 95%
rename from src/libs/lmscore/impl/database/Cluster.cpp
rename to src/libs/database/impl/Cluster.cpp
index 2fdf0cc7..184a03a1 100644
--- a/src/libs/lmscore/impl/database/Cluster.cpp
+++ b/src/libs/database/impl/Cluster.cpp
@@ -17,13 +17,13 @@
* along with LMS. If not, see .
*/
-#include "lmscore/database/Cluster.hpp"
+#include "database/Cluster.hpp"
-#include "lmscore/database/Artist.hpp"
-#include "lmscore/database/Release.hpp"
-#include "lmscore/database/ScanSettings.hpp"
-#include "lmscore/database/Session.hpp"
-#include "lmscore/database/Track.hpp"
+#include "database/Artist.hpp"
+#include "database/Release.hpp"
+#include "database/ScanSettings.hpp"
+#include "database/Session.hpp"
+#include "database/Track.hpp"
#include "SqlQuery.hpp"
#include "Traits.hpp"
diff --git a/src/libs/lmscore/impl/database/Db.cpp b/src/libs/database/impl/Db.cpp
similarity index 95%
rename from src/libs/lmscore/impl/database/Db.cpp
rename to src/libs/database/impl/Db.cpp
index 2d434ae7..5035466c 100644
--- a/src/libs/lmscore/impl/database/Db.cpp
+++ b/src/libs/database/impl/Db.cpp
@@ -17,13 +17,13 @@
* along with LMS. If not, see .
*/
-#include "lmscore/database/Db.hpp"
+#include "database/Db.hpp"
#include
#include
-#include "lmscore/database/Session.hpp"
-#include "lmscore/database/User.hpp"
+#include "database/Session.hpp"
+#include "database/User.hpp"
#include "utils/Logger.hpp"
namespace Database {
diff --git a/src/libs/lmscore/impl/database/Release.cpp b/src/libs/database/impl/Release.cpp
similarity index 98%
rename from src/libs/lmscore/impl/database/Release.cpp
rename to src/libs/database/impl/Release.cpp
index 3a9c91ef..310de51e 100644
--- a/src/libs/lmscore/impl/database/Release.cpp
+++ b/src/libs/database/impl/Release.cpp
@@ -17,15 +17,15 @@
* along with LMS. If not, see .
*/
-#include "lmscore/database/Release.hpp"
+#include "database/Release.hpp"
#include
-#include "lmscore/database/Artist.hpp"
-#include "lmscore/database/Cluster.hpp"
-#include "lmscore/database/Session.hpp"
-#include "lmscore/database/Track.hpp"
-#include "lmscore/database/User.hpp"
+#include "database/Artist.hpp"
+#include "database/Cluster.hpp"
+#include "database/Session.hpp"
+#include "database/Track.hpp"
+#include "database/User.hpp"
#include "utils/Logger.hpp"
#include "SqlQuery.hpp"
#include "Traits.hpp"
diff --git a/src/libs/lmscore/impl/database/ScanSettings.cpp b/src/libs/database/impl/ScanSettings.cpp
similarity index 96%
rename from src/libs/lmscore/impl/database/ScanSettings.cpp
rename to src/libs/database/impl/ScanSettings.cpp
index fefa2d8c..9aafed53 100644
--- a/src/libs/lmscore/impl/database/ScanSettings.cpp
+++ b/src/libs/database/impl/ScanSettings.cpp
@@ -17,7 +17,7 @@
* along with LMS. If not, see .
*/
-#include "lmscore/database/ScanSettings.hpp"
+#include "database/ScanSettings.hpp"
#include
@@ -25,8 +25,8 @@
#include "utils/Logger.hpp"
#include "utils/String.hpp"
-#include "lmscore/database/Cluster.hpp"
-#include "lmscore/database/Session.hpp"
+#include "database/Cluster.hpp"
+#include "database/Session.hpp"
namespace {
diff --git a/src/libs/lmscore/impl/database/Session.cpp b/src/libs/database/impl/Session.cpp
similarity index 97%
rename from src/libs/lmscore/impl/database/Session.cpp
rename to src/libs/database/impl/Session.cpp
index 9d0280ed..56ec77d1 100644
--- a/src/libs/lmscore/impl/database/Session.cpp
+++ b/src/libs/database/impl/Session.cpp
@@ -17,22 +17,27 @@
* along with LMS. If not, see .
*/
-#include "lmscore/database/Session.hpp"
+#include "database/Session.hpp"
+
+#include