diff --git a/Transceiver52M/radioInterfaceResamp.cpp b/Transceiver52M/radioInterfaceResamp.cpp
index 40bf32d..f857df9 100644
--- a/Transceiver52M/radioInterfaceResamp.cpp
+++ b/Transceiver52M/radioInterfaceResamp.cpp
@@ -28,9 +28,13 @@
 #include "convert.h"
 }
 
+/* Resampling parameters for 64 MHz clocking */
+#define RESAMP_64M_INRATE			65
+#define RESAMP_64M_OUTRATE			96
+
 /* Resampling parameters for 100 MHz clocking */
-#define RESAMP_INRATE			52
-#define RESAMP_OUTRATE			75
+#define RESAMP_100M_INRATE			52
+#define RESAMP_100M_OUTRATE			75
 
 /*
  * Resampling filter bandwidth scaling factor
@@ -41,11 +45,13 @@
  */
 #define RESAMP_TX4_FILTER		0.45
 
-#define INCHUNK				(RESAMP_INRATE * 4)
-#define OUTCHUNK			(RESAMP_OUTRATE * 4)
-
 static Resampler *upsampler = NULL;
 static Resampler *dnsampler = NULL;
+static int resamp_inrate = 0;
+static int resamp_inchunk = 0;
+static int resamp_outrate = 0;
+static int resamp_outchunk = 0;
+
 short *convertRecvBuffer = NULL;
 short *convertSendBuffer = NULL;
 
@@ -86,22 +92,40 @@
 }
 
 /* Initialize I/O specific objects */
-bool RadioInterfaceResamp::init()
+bool RadioInterfaceResamp::init(int type)
 {
 	float cutoff = 1.0f;
 
 	close();
 
+	switch (type) {
+	case RadioDevice::RESAMP_64M:
+		resamp_inrate = RESAMP_64M_INRATE;
+		resamp_outrate = RESAMP_64M_OUTRATE;
+		break;
+	case RadioDevice::RESAMP_100M:
+		resamp_inrate = RESAMP_100M_INRATE;
+		resamp_outrate = RESAMP_100M_OUTRATE;
+		break;
+	case RadioDevice::NORMAL:
+	default:
+		LOG(ALERT) << "Invalid device configuration";
+		return false;
+	}
+
+	resamp_inchunk = resamp_inrate * 4;
+	resamp_outchunk = resamp_outrate * 4;
+
 	if (mSPSTx == 4)
 		cutoff = RESAMP_TX4_FILTER;
 
-	dnsampler = new Resampler(RESAMP_INRATE, RESAMP_OUTRATE);
+	dnsampler = new Resampler(resamp_inrate, resamp_outrate);
 	if (!dnsampler->init()) {
 		LOG(ALERT) << "Rx resampler failed to initialize";
 		return false;
 	}
 
-	upsampler = new Resampler(RESAMP_OUTRATE, RESAMP_INRATE);
+	upsampler = new Resampler(resamp_outrate, resamp_inrate);
 	if (!upsampler->init(cutoff)) {
 		LOG(ALERT) << "Tx resampler failed to initialize";
 		return false;
@@ -113,14 +137,16 @@
 	 * and requires headroom equivalent to the filter length. Low
 	 * rate buffers are allocated in the main radio interface code.
 	 */
-	innerSendBuffer = new signalVector(INCHUNK * 20, upsampler->len());
-	outerSendBuffer = new signalVector(OUTCHUNK * 20);
+	innerSendBuffer = new signalVector(resamp_inchunk * 20,
+					   upsampler->len());
+	outerSendBuffer = new signalVector(resamp_outchunk * 20);
 
-	outerRecvBuffer = new signalVector(OUTCHUNK * 2, dnsampler->len());
-	innerRecvBuffer = new signalVector(INCHUNK * 20);
+	outerRecvBuffer = new signalVector(resamp_outchunk * 2,
+					   dnsampler->len());
+	innerRecvBuffer = new signalVector(resamp_inchunk * 20);
 
-	convertSendBuffer = new short[OUTCHUNK * 2 * 20];
-	convertRecvBuffer = new short[OUTCHUNK * 2 * 2];
+	convertSendBuffer = new short[resamp_outchunk * 2 * 20];
+	convertRecvBuffer = new short[resamp_outchunk * 2 * 2];
 
 	sendBuffer = innerSendBuffer;
 	recvBuffer = innerRecvBuffer;
@@ -133,8 +159,8 @@
 {
 	bool local_underrun;
 	int rc, num_recv;
-	int inner_len = INCHUNK;
-	int outer_len = OUTCHUNK;
+	int inner_len = resamp_inchunk;
+	int outer_len = resamp_outchunk;
 
 	/* Outer buffer access size is fixed */
 	num_recv = mRadio->readSamples(convertRecvBuffer,
@@ -170,15 +196,15 @@
 	int rc, chunks, num_sent;
 	int inner_len, outer_len;
 
-	if (sendCursor < INCHUNK)
+	if (sendCursor < resamp_inchunk)
 		return;
 
-	chunks = sendCursor / INCHUNK;
+	chunks = sendCursor / resamp_inchunk;
 	if (chunks > 8)
 		chunks = 8;
 
-	inner_len = chunks * INCHUNK;
-	outer_len = chunks * OUTCHUNK;
+	inner_len = chunks * resamp_inchunk;
+	outer_len = chunks * resamp_outchunk;
 
 	/* Always send from the beginning of the buffer */
 	rc = upsampler->rotate((float *) innerSendBuffer->begin(), inner_len,
