diff -Naur hamlib-1.2.15~git//include/hamlib/riglist.h hamlib-1.2.15~git-sg//include/hamlib/riglist.h
--- hamlib-1.2.15~git//include/hamlib/riglist.h	2012-01-22 11:10:49.000000000 +0100
+++ hamlib-1.2.15~git-sg//include/hamlib/riglist.h	2012-01-22 19:52:00.100785186 +0100
@@ -482,6 +482,7 @@
 #define RIG_MODEL_FIFISDR RIG_MAKE_MODEL(RIG_KIT, 12) /* FiFi-SDR USB */
 #define RIG_MODEL_FUNCUBEDONGLE RIG_MAKE_MODEL(RIG_KIT, 13)	/* FunCUBE Dongle */
 #define RIG_MODEL_HIQSDR RIG_MAKE_MODEL(RIG_KIT, 14)	/* HiQSDR */
+#define RIG_MODEL_QSDR RIG_MAKE_MODEL(RIG_KIT, 15)	/* HiQSDR */
 
 	/*
 	 * SW/FM/TV tuner cards supported by Video4Linux,*BSD, ..
diff -Naur hamlib-1.2.15~git//kit/kit.c hamlib-1.2.15~git-sg//kit/kit.c
--- hamlib-1.2.15~git//kit/kit.c	2012-01-22 11:10:49.000000000 +0100
+++ hamlib-1.2.15~git-sg//kit/kit.c	2012-01-22 19:45:49.157448587 +0100
@@ -45,6 +45,7 @@
 	rig_register(&dds60_caps);
 	rig_register(&miniVNA_caps);
 	rig_register(&hiqsdr_caps);
+	rig_register(&qsdr_caps);
 
 #if (defined(HAVE_LIBUSB) && defined(HAVE_USB_H))
 	rig_register(&si570avrusb_caps);
diff -Naur hamlib-1.2.15~git//kit/kit.h hamlib-1.2.15~git-sg//kit/kit.h
--- hamlib-1.2.15~git//kit/kit.h	2012-01-22 11:10:49.000000000 +0100
+++ hamlib-1.2.15~git-sg//kit/kit.h	2012-01-22 19:46:01.469293806 +0100
@@ -37,6 +37,7 @@
 extern const struct rig_caps funcube_caps;
 extern const struct rig_caps fifisdr_caps;
 extern const struct rig_caps hiqsdr_caps;
+extern const struct rig_caps qsdr_caps;
 
 extern const struct rot_caps pcrotor_caps;
 
diff -Naur hamlib-1.2.15~git//kit/Makefile.in hamlib-1.2.15~git-sg//kit/Makefile.in
--- hamlib-1.2.15~git//kit/Makefile.in	2012-01-22 11:11:22.000000000 +0100
+++ hamlib-1.2.15~git-sg//kit/Makefile.in	2012-01-22 19:40:13.585667296 +0100
@@ -89,11 +89,11 @@
 	$(top_builddir)/src/libhamlib.la
 am__hamlib_kit_la_SOURCES_DIST = elektor304.c drt1.c dwt.c usrp.c \
 	elektor507.c dds60.c miniVNA.c si570avrusb.c funcube.c \
-	fifisdr.c hiqsdr.c usrp_impl.cc pcrotor.c kit.c
+	fifisdr.c hiqsdr.c qsdr.c usrp_impl.cc pcrotor.c kit.c
 @HAVE_USRP_TRUE@am__objects_1 = usrp_impl.lo
 am__objects_2 = elektor304.lo drt1.lo dwt.lo usrp.lo elektor507.lo \
 	dds60.lo miniVNA.lo si570avrusb.lo funcube.lo fifisdr.lo \
-	hiqsdr.lo $(am__objects_1)
+	hiqsdr.lo qsdr.lo $(am__objects_1)
 am__objects_3 = pcrotor.lo
 am_hamlib_kit_la_OBJECTS = $(am__objects_2) $(am__objects_3) kit.lo
 hamlib_kit_la_OBJECTS = $(am_hamlib_kit_la_OBJECTS)
@@ -338,7 +338,7 @@
 
 # FIXME: compile usrp only if CXX available
 KITSRCLIST = elektor304.c drt1.c dwt.c usrp.c elektor507.c dds60.c \
-	miniVNA.c si570avrusb.c funcube.c fifisdr.c hiqsdr.c \
+	miniVNA.c si570avrusb.c funcube.c fifisdr.c hiqsdr.c qsdr.c \
 	$(am__append_1)
 @HAVE_USRP_TRUE@AM_CXXFLAGS = @USRP_CFLAGS@
 @HAVE_USRP_FALSE@hamlib_kit_la_LINK = $(LINK) $(hamlib_kit_la_LDFLAGS)
@@ -437,6 +437,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fifisdr.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/funcube.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hiqsdr.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/qsdr.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kit.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/miniVNA.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcrotor.Plo@am__quote@
diff -Naur hamlib-1.2.15~git//kit/qsdr.c hamlib-1.2.15~git-sg//kit/qsdr.c
--- hamlib-1.2.15~git//kit/qsdr.c	1970-01-01 01:00:00.000000000 +0100
+++ hamlib-1.2.15~git-sg//kit/qsdr.c	2012-01-26 21:36:26.022384110 +0100
@@ -0,0 +1,176 @@
+/*
+ *  Hamlib QSDR backend
+ *  Copyright (c) 2012 by Stefan Goerg 
+ *
+ *   This library is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU Lesser General Public
+ *   License as published by the Free Software Foundation; either
+ *   version 2.1 of the License, or (at your option) any later version.
+ *
+ *   This library 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
+ *   Lesser General Public License for more details.
+ *
+ *   You should have received a copy of the GNU Lesser General Public
+ *   License along with this library; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>   /* Standard input/output definitions */
+#include <string.h>  /* String function definitions */
+#include <unistd.h>  /* UNIX standard function definitions */
+#include <fcntl.h>   /* File control definitions */
+#include <errno.h>   /* Error number definitions */
+#include <math.h>
+
+#include "hamlib/rig.h"
+#include "iofunc.h"
+#include "misc.h"
+#include "token.h"
+
+/*
+ *  http://dl2stg.de/stefan/hiqsdr
+ */
+
+
+static int qsdr_init(RIG *rig);
+static int qsdr_cleanup(RIG *rig);
+static int qsdr_open(RIG *rig);
+static int qsdr_close(RIG *rig);
+
+static int qsdr_set_freq(RIG *rig, vfo_t vfo, freq_t freq);
+static int qsdr_get_freq(RIG *rig, vfo_t vfo, freq_t *freq);
+static int qsdr_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt);
+
+#define QSDR_MODES (RIG_MODE_CW|RIG_MODE_AM|RIG_MODE_USB|RIG_MODE_LSB|RIG_MODE_FM|RIG_MODE_DSB)
+
+const struct rig_caps qsdr_caps = {
+    .rig_model =      RIG_MODEL_QSDR,
+    .model_name =     "QSDR",
+    .mfg_name =       "DL2STG",
+    .version =        "0.1",
+    .copyright =      "LGPL",
+    .status =         RIG_STATUS_BUGGY,
+    .rig_type =       RIG_TYPE_TRANSCEIVER,
+    .targetable_vfo =  RIG_TARGETABLE_NONE,
+    .ptt_type =       RIG_PTT_RIG,
+    .dcd_type =       RIG_DCD_NONE,
+    .port_type =      RIG_PORT_UDP_NETWORK,
+    .has_get_func =   RIG_FUNC_NONE,
+    .has_set_func =   RIG_FUNC_NONE,
+    .has_get_level =  RIG_LEVEL_NONE,
+    .has_set_level =  RIG_LEVEL_SET(RIG_LEVEL_NONE),
+    .has_get_parm = 	 RIG_PARM_NONE,
+    .has_set_parm = 	 RIG_PARM_SET(RIG_PARM_NONE),
+    .ctcss_list = 	 NULL,
+    .dcs_list =   	 NULL,
+    .chan_list = 	 {
+	RIG_CHAN_END,
+    },
+    .scan_ops =		RIG_SCAN_NONE,
+    .vfo_ops =		RIG_OP_NONE,
+    .transceive =	RIG_TRN_OFF,
+    .attenuator =	{ RIG_DBLST_END, },
+    .preamp =		{ RIG_DBLST_END, },
+
+    .rx_range_list1 =  { {.start=kHz(10),.end=MHz(66),.modes=QSDR_MODES,
+						.low_power=-1,.high_power=-1, RIG_VFO_A,RIG_ANT_1}, RIG_FRNG_END, },
+    .tx_range_list1 =  { {.start=kHz(100),.end=MHz(66),.modes=QSDR_MODES,
+						.low_power=W(1),.high_power=W(100), RIG_VFO_A, RIG_ANT_1},
+    RIG_FRNG_END, },
+
+    .rig_init =     qsdr_init,
+    .rig_cleanup =  qsdr_cleanup,
+    .rig_open =     qsdr_open,
+    .rig_close =    qsdr_close,
+
+    .set_freq =     qsdr_set_freq,
+    .get_freq =     qsdr_get_freq,
+
+    .set_ptt =      qsdr_set_ptt,
+
+};
+
+static int sendStr(RIG *rig, char *s) {
+    return write_block(&rig->state.rigport, s, strlen(s));
+}
+
+int qsdr_init(RIG *rig)
+{
+    rig_debug(RIG_DEBUG_TRACE,"%s called\n", __func__);
+    return RIG_OK;
+
+}
+
+int qsdr_open(RIG *rig)
+{
+    rig_debug(RIG_DEBUG_TRACE,"%s called\n", __func__);
+    return RIG_OK;
+}
+
+
+int qsdr_close(RIG *rig)
+{
+    rig_debug(RIG_DEBUG_VERBOSE,"%s called\n", __func__);
+    return RIG_OK;
+}
+
+int qsdr_cleanup(RIG *rig)
+{
+    rig_debug(RIG_DEBUG_VERBOSE,"%s called\n", __func__);
+    return RIG_OK;
+}
+
+int qsdr_set_freq(RIG *rig, vfo_t vfo, freq_t freq)
+{
+    int ret;
+	int f = (int)freq;
+	char s[32];
+
+    rig_debug(RIG_DEBUG_TRACE,"%s called\n", __func__);
+
+    sprintf(s,"f %i\n",f);
+    ret = sendStr(rig, s);
+    return ret;
+}
+
+int qsdr_get_freq(RIG *rig, vfo_t vfo, freq_t *freq)
+{
+	char s[16];
+	int ret;
+	int f;
+	memset (s,0,sizeof(s));
+
+    rig_debug(RIG_DEBUG_TRACE,"%s called\n", __func__);
+    sprintf(s,"F\n");
+    ret = sendStr(rig, s);
+
+	ret = read_block(&rig->state.rigport, s, 15);
+    if (ret<0) 
+		return ret;
+    if (s[0]=='f') {
+		sscanf(s+1,"%i\n",&f);
+		*freq = f;
+		return RIG_OK;
+	}
+	return RIG_EPROTO;
+}
+
+int qsdr_set_ptt(RIG *rig, vfo_t vfo, ptt_t ptt)
+{
+    int ret = RIG_OK;
+
+	printf("setTX\n");
+	if (ptt == RIG_PTT_ON) {
+		ret = sendStr(rig, "t 1\n");
+	} else {
+		ret = sendStr(rig, "t 0\n");
+	}
+	return ret;
+}
