diff --git a/Transceiver52M/radioInterface.h b/Transceiver52M/radioInterface.h
index d9fa414..c75a983 100644
--- a/Transceiver52M/radioInterface.h
+++ b/Transceiver52M/radioInterface.h
@@ -156,16 +156,24 @@
   void close();
 };
 
+struct freq_cfg_state {
+  bool set;
+  double freq_hz;
+};
+
 class RadioInterfaceMulti : public RadioInterface {
 private:
   bool pushBuffer();
   int pullBuffer();
+  bool verify_arfcn_consistency(double freq, size_t chan, bool tx);
   virtual double setTxGain(double dB, size_t chan);
 
   signalVector *outerSendBuffer;
   signalVector *outerRecvBuffer;
   std::vector<signalVector *> history;
   std::vector<bool> active;
+  std::vector<struct freq_cfg_state> rx_freq_state;
+  std::vector<struct freq_cfg_state> tx_freq_state;
 
   Resampler *dnsampler;
   Resampler *upsampler;
diff --git a/Transceiver52M/radioInterfaceMulti.cpp b/Transceiver52M/radioInterfaceMulti.cpp
index 668305c..a0c24b5 100644
--- a/Transceiver52M/radioInterfaceMulti.cpp
+++ b/Transceiver52M/radioInterfaceMulti.cpp
@@ -73,6 +73,8 @@
 	powerScaling.resize(0);
 	history.resize(0);
 	active.resize(0);
+	rx_freq_state.resize(0);
+	tx_freq_state.resize(0);
 
 	RadioInterface::close();
 }
@@ -148,6 +150,8 @@
 	mReceiveFIFO.resize(mChans);
 	powerScaling.resize(mChans);
 	history.resize(mChans);
+	rx_freq_state.resize(mChans);
+	tx_freq_state.resize(mChans);
 	active.resize(MCHANS, false);
 
 	inchunk = RESAMP_INRATE * 4;
@@ -362,42 +366,67 @@
 	return fabs(a - b) < FREQ_DELTA_LIMIT ? true : false;
 }
 
+bool RadioInterfaceMulti::verify_arfcn_consistency(double freq, size_t chan, bool tx)
+{
+	double freq_i;
+	std::string str_dir = tx ? "Tx" : "Rx";
+	std::vector<struct freq_cfg_state> &v = tx ? tx_freq_state : rx_freq_state;
+
+	for (size_t i = 0; i < mChans; i++) {
+		if (i == chan)
+			continue;
+		if (!v[i].set)
+			continue;
+
+		freq_i = v[i].freq_hz + (double) ((int)chan - (int)i) * MCBTS_SPACING;
+		if (!fltcmp(freq, freq_i)) {
+			LOGCHAN(chan, DMAIN, ERROR)
+				<< "Setting " << str_dir << " frequency " << freq
+				<< " is incompatible: already configured channel "
+				<< i << " uses frequency " << v[i].freq_hz
+				<< " (expected " << freq_i << ")";
+			return false;
+		}
+	}
+	v[chan].set = true;
+	v[chan].freq_hz = freq;
+	return true;
+}
+
 bool RadioInterfaceMulti::tuneTx(double freq, size_t chan)
 {
-  if (chan >= mChans)
-    return false;
+	double shift;
 
-  double shift = (double) getFreqShift(mChans);
+	if (chan >= mChans)
+		return false;
 
-  if (!chan)
-    return mDevice->setTxFreq(freq + shift * MCBTS_SPACING);
+	if (!verify_arfcn_consistency(freq, chan, true))
+		return false;
 
-  double center = mDevice->getTxFreq();
-  if (!fltcmp(freq, center + (double) (chan - shift) * MCBTS_SPACING)) {
-    LOG(NOTICE) << "Channel " << chan << " RF Tx frequency offset is "
-                << freq / 1e6 << " MHz";
-  }
+	if (chan == 0) {
+		shift = (double) getFreqShift(mChans);
+		return mDevice->setTxFreq(freq + shift * MCBTS_SPACING);
+	}
 
-  return true;
+	return true;
 }
 
 bool RadioInterfaceMulti::tuneRx(double freq, size_t chan)
 {
-  if (chan >= mChans)
-    return false;
+	double shift;
 
-  double shift = (double) getFreqShift(mChans);
+	if (chan >= mChans)
+		return false;
 
-  if (!chan)
-    return mDevice->setRxFreq(freq + shift * MCBTS_SPACING);
+	if (!verify_arfcn_consistency(freq, chan, false))
+		return false;
 
-  double center = mDevice->getRxFreq();
-  if (!fltcmp(freq, center + (double) (chan - shift) * MCBTS_SPACING)) {
-    LOG(NOTICE) << "Channel " << chan << " RF Rx frequency offset is "
-                << freq / 1e6 << " MHz";
-  }
+	if (chan == 0) {
+		shift = (double) getFreqShift(mChans);
+		return mDevice->setRxFreq(freq + shift * MCBTS_SPACING);
+	}
 
-  return true;
+	return true;
 }
 
 double RadioInterfaceMulti::setRxGain(double db, size_t chan)
