diff --git a/plugins/channeltx/modam/CMakeLists.txt b/plugins/channeltx/modam/CMakeLists.txt
index 7c18a6b08..5e7ee66b5 100644
--- a/plugins/channeltx/modam/CMakeLists.txt
+++ b/plugins/channeltx/modam/CMakeLists.txt
@@ -1,43 +1,45 @@
-project(modam)
-
-set(modam_SOURCES
- ammod.cpp
- ammodgui.cpp
- ammodplugin.cpp
-)
-
-set(modam_HEADERS
- ammod.h
- ammodgui.h
- ammodplugin.h
-)
-
-set(modam_FORMS
- ammodgui.ui
-)
-
-include_directories(
- .
- ${CMAKE_CURRENT_BINARY_DIR}
-)
-
-add_definitions(${QT_DEFINITIONS})
-add_definitions(-DQT_PLUGIN)
-add_definitions(-DQT_SHARED)
-
-qt5_wrap_ui(modam_FORMS_HEADERS ${modam_FORMS})
-
-add_library(modam SHARED
- ${modam_SOURCES}
- ${modam_HEADERS_MOC}
- ${modam_FORMS_HEADERS}
-)
-
-target_link_libraries(modam
- ${QT_LIBRARIES}
- sdrbase
-)
-
-qt5_use_modules(modam Core Widgets)
-
+project(modam)
+
+set(modam_SOURCES
+ ammod.cpp
+ ammodgui.cpp
+ ammodplugin.cpp
+ ammodsettings.cpp
+)
+
+set(modam_HEADERS
+ ammod.h
+ ammodgui.h
+ ammodplugin.h
+ ammodsettings.h
+)
+
+set(modam_FORMS
+ ammodgui.ui
+)
+
+include_directories(
+ .
+ ${CMAKE_CURRENT_BINARY_DIR}
+)
+
+add_definitions(${QT_DEFINITIONS})
+add_definitions(-DQT_PLUGIN)
+add_definitions(-DQT_SHARED)
+
+qt5_wrap_ui(modam_FORMS_HEADERS ${modam_FORMS})
+
+add_library(modam SHARED
+ ${modam_SOURCES}
+ ${modam_HEADERS_MOC}
+ ${modam_FORMS_HEADERS}
+)
+
+target_link_libraries(modam
+ ${QT_LIBRARIES}
+ sdrbase
+)
+
+qt5_use_modules(modam Core Widgets)
+
install(TARGETS modam DESTINATION lib/plugins/channeltx)
\ No newline at end of file
diff --git a/plugins/channeltx/modam/ammodsettings.cpp b/plugins/channeltx/modam/ammodsettings.cpp
new file mode 100644
index 000000000..14b2ee01c
--- /dev/null
+++ b/plugins/channeltx/modam/ammodsettings.cpp
@@ -0,0 +1,109 @@
+///////////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2017 Edouard Griffiths, F4EXB. //
+// //
+// 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 as version 3 of the License, or //
+// //
+// 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 V3 for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with this program. If not, see . //
+///////////////////////////////////////////////////////////////////////////////////
+
+#include "dsp/dspengine.h"
+#include "util/simpleserializer.h"
+#include "settings/serializable.h"
+#include "ammodsettings.h"
+
+AMModSettings::AMModSettings() :
+ m_channelMarker(0)
+{
+ resetToDefaults();
+}
+
+void AMModSettings::resetToDefaults()
+{
+ m_basebandSampleRate = 48000;
+ m_outputSampleRate = 48000;
+ m_inputFrequencyOffset = 0;
+ m_rfBandwidth = 12500.0;
+ m_modFactor = 0.2f;
+ m_toneFrequency = 1000.0f;
+ m_audioSampleRate = DSPEngine::instance()->getAudioSampleRate();
+ m_volumeFactor = 1.0f;
+ m_channelMute = false;
+ m_playLoop = false;
+}
+
+QByteArray AMModSettings::serialize() const
+{
+ SimpleSerializer s(1);
+
+ s.writeS32(1, m_inputFrequencyOffset);
+ s.writeS32(2, m_rfBandwidth / 100.0);
+ s.writeS32(3, m_toneFrequency / 10.0);
+ s.writeS32(4, m_modFactor * 100.0);
+ s.writeU32(5, m_rgbColor);
+ s.writeS32(6, m_volumeFactor * 10.0);
+
+ if (m_cwKeyerGUI) {
+ s.writeBlob(7, m_cwKeyerGUI->serialize());
+ }
+
+ if (m_channelMarker) {
+ s.writeBlob(8, m_channelMarker->serialize());
+ }
+
+ return s.final();
+}
+
+bool AMModSettings::deserialize(const QByteArray& data)
+{
+ SimpleDeserializer d(data);
+
+ if(!d.isValid())
+ {
+ resetToDefaults();
+ return false;
+ }
+
+ if(d.getVersion() == 1)
+ {
+ QByteArray bytetmp;
+ quint32 u32tmp;
+ qint32 tmp;
+
+ d.readS32(1, &tmp, 0);
+ m_inputFrequencyOffset = tmp;
+ d.readS32(2, &tmp, 125);
+ m_rfBandwidth = tmp * 100.0;
+ d.readS32(3, &tmp, 100);
+ m_toneFrequency = tmp * 10;
+ d.readS32(4, &tmp, 20);
+ m_modFactor = tmp * 100;
+ d.readU32(5, &m_rgbColor);
+ d.readS32(6, &tmp, 10);
+ m_volumeFactor = tmp * 10.0;
+
+ if (m_cwKeyerGUI) {
+ d.readBlob(7, &bytetmp);
+ m_cwKeyerGUI->deserialize(bytetmp);
+ }
+
+ if (m_channelMarker) {
+ d.readBlob(8, &bytetmp);
+ m_channelMarker->deserialize(bytetmp);
+ }
+
+ return true;
+ }
+ else
+ {
+ resetToDefaults();
+ return false;
+ }
+}
diff --git a/plugins/channeltx/modam/ammodsettings.h b/plugins/channeltx/modam/ammodsettings.h
new file mode 100644
index 000000000..bb46d1604
--- /dev/null
+++ b/plugins/channeltx/modam/ammodsettings.h
@@ -0,0 +1,51 @@
+///////////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2016 Edouard Griffiths, F4EXB //
+// //
+// 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 as version 3 of the License, or //
+// //
+// 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 V3 for more details. //
+// //
+// You should have received a copy of the GNU General Public License //
+// along with this program. If not, see . //
+///////////////////////////////////////////////////////////////////////////////////
+
+#ifndef PLUGINS_CHANNELTX_MODAM_AMMODSETTINGS_H_
+#define PLUGINS_CHANNELTX_MODAM_AMMODSETTINGS_H_
+
+#include
+
+class Serializable;
+
+struct AMModSettings
+{
+ int m_basebandSampleRate;
+ int m_outputSampleRate;
+ qint64 m_inputFrequencyOffset;
+ Real m_rfBandwidth;
+ float m_modFactor;
+ float m_toneFrequency;
+ float m_volumeFactor;
+ quint32 m_audioSampleRate;
+ bool m_channelMute;
+ bool m_playLoop;
+ quint32 m_rgbColor;
+
+ Serializable *m_channelMarker;
+ Serializable *m_cwKeyerGUI;
+
+ AMModSettings();
+ void resetToDefaults();
+ void setChannelMarker(Serializable *channelMarker) { m_channelMarker = channelMarker; }
+ void setCWKeyerGUI(Serializable *cwKeyerGUI) { m_cwKeyerGUI = cwKeyerGUI; }
+ QByteArray serialize() const;
+ bool deserialize(const QByteArray& data);
+};
+
+
+
+#endif /* PLUGINS_CHANNELTX_MODAM_AMMODSETTINGS_H_ */
diff --git a/plugins/channeltx/modam/modam.pro b/plugins/channeltx/modam/modam.pro
index cf0b35ccb..9ac12eef5 100644
--- a/plugins/channeltx/modam/modam.pro
+++ b/plugins/channeltx/modam/modam.pro
@@ -1,38 +1,40 @@
-#--------------------------------------------------------
-#
-# Pro file for Android and Windows builds with Qt Creator
-#
-#--------------------------------------------------------
-
-TEMPLATE = lib
-CONFIG += plugin
-
-QT += core gui widgets multimedia
-
-TARGET = modam
-
-DEFINES += USE_SSE2=1
-QMAKE_CXXFLAGS += -msse2
-DEFINES += USE_SSE4_1=1
-QMAKE_CXXFLAGS += -msse4.1
-QMAKE_CXXFLAGS += -std=c++11
-
-INCLUDEPATH += $$PWD
-INCLUDEPATH += ../../../sdrbase
-
-CONFIG(Release):build_subdir = release
-CONFIG(Debug):build_subdir = debug
-
-SOURCES += ammod.cpp\
- ammodgui.cpp\
- ammodplugin.cpp
-
-HEADERS += ammod.h\
- ammodgui.h\
- ammodplugin.h
-
-FORMS += ammodgui.ui
-
-LIBS += -L../../../sdrbase/$${build_subdir} -lsdrbase
-
-RESOURCES = ../../../sdrbase/resources/res.qrc
+#--------------------------------------------------------
+#
+# Pro file for Android and Windows builds with Qt Creator
+#
+#--------------------------------------------------------
+
+TEMPLATE = lib
+CONFIG += plugin
+
+QT += core gui widgets multimedia
+
+TARGET = modam
+
+DEFINES += USE_SSE2=1
+QMAKE_CXXFLAGS += -msse2
+DEFINES += USE_SSE4_1=1
+QMAKE_CXXFLAGS += -msse4.1
+QMAKE_CXXFLAGS += -std=c++11
+
+INCLUDEPATH += $$PWD
+INCLUDEPATH += ../../../sdrbase
+
+CONFIG(Release):build_subdir = release
+CONFIG(Debug):build_subdir = debug
+
+SOURCES += ammod.cpp\
+ ammodgui.cpp\
+ ammodplugin.cpp\
+ ammodsettings.cpp
+
+HEADERS += ammod.h\
+ ammodgui.h\
+ ammodplugin.h\
+ ammodsettings.h
+
+FORMS += ammodgui.ui
+
+LIBS += -L../../../sdrbase/$${build_subdir} -lsdrbase
+
+RESOURCES = ../../../sdrbase/resources/res.qrc