diff --git a/plugins/samplesource/perseus/perseusplugin.cpp b/plugins/samplesource/perseus/perseusplugin.cpp
index 227b875e2..f51ee3005 100644
--- a/plugins/samplesource/perseus/perseusplugin.cpp
+++ b/plugins/samplesource/perseus/perseusplugin.cpp
@@ -15,7 +15,6 @@
 ///////////////////////////////////////////////////////////////////////////////////
 
 #include <QtPlugin>
-#include <QAction>
 #include "perseus-sdr.h"
 
 #include <device/devicesourceapi.h>
@@ -23,11 +22,15 @@
 #include "util/simpleserializer.h"
 #include "perseus/deviceperseus.h"
 #include "perseusplugin.h"
+#ifdef SERVER_MODE
+#include "perseusinput.h"
+#else
 #include "perseusgui.h"
+#endif
 
 const PluginDescriptor PerseusPlugin::m_pluginDescriptor = {
 	QString("Perseus Input"),
-	QString("3.14.6"),
+	QString("4.0.0"),
 	QString("(c) Edouard Griffiths, F4EXB"),
 	QString("https://github.com/f4exb/sdrangel"),
 	true,
@@ -84,6 +87,15 @@ PluginInterface::SamplingDevices PerseusPlugin::enumSampleSources()
 	return result;
 }
 
+#ifdef SERVER_MODE
+PluginInstanceGUI* PerseusPlugin::createSampleSourcePluginInstanceGUI(
+        const QString& sourceId __attribute__((unused)),
+        QWidget **widget __attribute__((unused)),
+        DeviceUISet *deviceUISet __attribute__((unused)))
+{
+    return 0;
+}
+#else
 PluginInstanceGUI* PerseusPlugin::createSampleSourcePluginInstanceGUI(
         const QString& sourceId,
         QWidget **widget,
@@ -100,6 +112,7 @@ PluginInstanceGUI* PerseusPlugin::createSampleSourcePluginInstanceGUI(
 		return 0;
 	}
 }
+#endif
 
 DeviceSampleSource *PerseusPlugin::createSampleSourcePluginInstanceInput(const QString& sourceId, DeviceSourceAPI *deviceAPI)
 {
diff --git a/pluginssrv/samplesource/CMakeLists.txt b/pluginssrv/samplesource/CMakeLists.txt
index 702b153b7..4262445ce 100644
--- a/pluginssrv/samplesource/CMakeLists.txt
+++ b/pluginssrv/samplesource/CMakeLists.txt
@@ -47,6 +47,12 @@ if(LIBUSB_FOUND AND LIMESUITE_FOUND)
     add_subdirectory(limesdrinput)
 endif(LIBUSB_FOUND AND LIMESUITE_FOUND)
 
+find_package(LibPerseus)
+if(LIBUSB_FOUND AND RX_SAMPLE_24BIT AND LIBPERSEUS_FOUND)
+    message(STATUS "Server: add Persesus plugin")
+    add_subdirectory(perseus)
+endif(LIBUSB_FOUND AND RX_SAMPLE_24BIT AND LIBPERSEUS_FOUND)
+
 find_package(LibRTLSDR)
 if(LIBUSB_FOUND AND LIBRTLSDR_FOUND)
     add_subdirectory(rtlsdr)
@@ -57,6 +63,7 @@ if (BUILD_DEBIAN)
     add_subdirectory(airspyhf)
     add_subdirectory(hackrfinput)
     add_subdirectory(limesdrinput)
+    add_subdirectory(perseus)
     add_subdirectory(rtlsdr)
 endif (BUILD_DEBIAN)
 
diff --git a/pluginssrv/samplesource/fcdproplus/CMakeLists.txt b/pluginssrv/samplesource/fcdproplus/CMakeLists.txt
new file mode 100644
index 000000000..e23a61855
--- /dev/null
+++ b/pluginssrv/samplesource/fcdproplus/CMakeLists.txt
@@ -0,0 +1,48 @@
+project(fcdproplus)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+set(PLUGIN_PREFIX "../../../plugins/samplesource/fcdproplus")
+
+set(fcdproplus_SOURCES
+	${PLUGIN_PREFIX}/fcdproplusinput.cpp
+	${PLUGIN_PREFIX}/fcdproplusplugin.cpp
+	${PLUGIN_PREFIX}/fcdproplussettings.cpp
+	${PLUGIN_PREFIX}/fcdproplusthread.cpp
+)
+
+set(fcdproplus_HEADERS
+	${PLUGIN_PREFIX}/fcdproplusinput.h
+	${PLUGIN_PREFIX}/fcdproplusplugin.h
+	${PLUGIN_PREFIX}/fcdproplussettings.h
+	${PLUGIN_PREFIX}/fcdproplusthread.h
+)
+
+include_directories(
+	.
+	${CMAKE_CURRENT_BINARY_DIR}
+    ${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client    
+	${CMAKE_SOURCE_DIR}/fcdhid
+	${CMAKE_SOURCE_DIR}/fcdlib
+)
+
+add_definitions(${QT_DEFINITIONS})
+add_definitions(-DQT_PLUGIN)
+add_definitions(-DQT_SHARED)
+
+add_library(inputfcdproplussrv SHARED
+	${fcdproplus_SOURCES}
+	${fcdproplus_HEADERS_MOC}
+)
+
+target_link_libraries(inputfcdproplussrv
+	${QT_LIBRARIES}
+	asound
+	fcdhid
+	fcdlib
+	sdrbase
+	swagger
+)
+
+qt5_use_modules(inputfcdproplussrv Core)
+
+install(TARGETS inputfcdproplussrv DESTINATION lib/pluginssrv/samplesource)
diff --git a/pluginssrv/samplesource/perseus/CMakeLists.txt b/pluginssrv/samplesource/perseus/CMakeLists.txt
new file mode 100644
index 000000000..732db4f69
--- /dev/null
+++ b/pluginssrv/samplesource/perseus/CMakeLists.txt
@@ -0,0 +1,69 @@
+project(perseus)
+
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+set(PLUGIN_PREFIX "../../../plugins/samplesource/perseus")
+
+set(perseus_SOURCES
+    ${PLUGIN_PREFIX}/perseusinput.cpp
+    ${PLUGIN_PREFIX}/perseusplugin.cpp
+    ${PLUGIN_PREFIX}/perseussettings.cpp
+    ${PLUGIN_PREFIX}/perseusthread.cpp
+)
+
+set(perseus_HEADERS
+    ${PLUGIN_PREFIX}/perseusinput.h
+    ${PLUGIN_PREFIX}/perseusplugin.h
+    ${PLUGIN_PREFIX}/perseussettings.h
+    ${PLUGIN_PREFIX}/perseusthread.h
+)
+
+if (BUILD_DEBIAN)
+include_directories(
+    .
+    ${CMAKE_CURRENT_BINARY_DIR}
+    ${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client
+    ${CMAKE_SOURCE_DIR}/devices        
+    ${LIBPERSEUSSRC}
+    ${LIBPERSEUSSRC}/libperseus/src
+)
+else (BUILD_DEBIAN)
+include_directories(
+    .
+    ${CMAKE_CURRENT_BINARY_DIR}
+    ${CMAKE_SOURCE_DIR}/swagger/sdrangel/code/qt5/client
+    ${CMAKE_SOURCE_DIR}/devices        
+    ${LIBPERSEUS_INCLUDE_DIR}
+)
+endif (BUILD_DEBIAN)
+
+add_definitions("${QT_DEFINITIONS} -DLIBAIRSPY_DYN_RATES")
+add_definitions(-DQT_PLUGIN)
+add_definitions(-DQT_SHARED)
+
+add_library(inputperseussrv SHARED
+    ${perseus_SOURCES}
+    ${perseus_HEADERS_MOC}
+)
+
+if (BUILD_DEBIAN)
+target_link_libraries(inputperseussrv
+    ${QT_LIBRARIES}
+    perseus
+    sdrbase
+    swagger
+    perseusdevice
+)
+else (BUILD_DEBIAN)
+target_link_libraries(inputperseussrv
+    ${QT_LIBRARIES}
+    ${LIBPERSEUS_LIBRARIES}
+    sdrbase
+    swagger
+    perseusdevice
+)
+endif (BUILD_DEBIAN)
+
+
+qt5_use_modules(inputperseussrv Core)
+
+install(TARGETS inputperseussrv DESTINATION lib/pluginssrv/samplesource)