diff --git a/Transceiver52M/device/radioDevice.h b/Transceiver52M/device/radioDevice.h
index 9913de0..8915b17 100644
--- a/Transceiver52M/device/radioDevice.h
+++ b/Transceiver52M/device/radioDevice.h
@@ -148,6 +148,9 @@
   /** return the used RX path */
   virtual std::string getTxAntenna(size_t chan = 0) = 0;
 
+  /** return whether user drives synchronization of Tx/Rx of USRP */
+  virtual bool requiresRadioAlign() = 0;
+
   /** Return internal status values */
   virtual double getTxFreq(size_t chan = 0) = 0;
   virtual double getRxFreq(size_t chan = 0) = 0;
diff --git a/Transceiver52M/device/uhd/UHDDevice.cpp b/Transceiver52M/device/uhd/UHDDevice.cpp
index 4466da4..ecdebe1 100644
--- a/Transceiver52M/device/uhd/UHDDevice.cpp
+++ b/Transceiver52M/device/uhd/UHDDevice.cpp
@@ -255,6 +255,8 @@
 	bool setTxAntenna(const std::string &ant, size_t chan);
 	std::string getTxAntenna(size_t chan);
 
+	bool requiresRadioAlign();
+
 	inline double getSampleRate() { return tx_rate; }
 	inline double numberRead() { return rx_pkt_cnt; }
 	inline double numberWritten() { return 0; }
@@ -1282,6 +1284,11 @@
 	return usrp_dev->get_tx_antenna(chan);
 }
 
+bool uhd_device::requiresRadioAlign()
+{
+	return false;
+}
+
 /*
  * Only allow sampling the Rx path lower than Tx and not vice-versa.
  * Using Tx with 4 SPS and Rx at 1 SPS is the only allowed mixed
diff --git a/Transceiver52M/device/usrp1/USRPDevice.cpp b/Transceiver52M/device/usrp1/USRPDevice.cpp
index f7f24e9..455528a 100644
--- a/Transceiver52M/device/usrp1/USRPDevice.cpp
+++ b/Transceiver52M/device/usrp1/USRPDevice.cpp
@@ -353,6 +353,10 @@
 	return "";
 }
 
+bool USRPDevice::requiresRadioAlign()
+{
+	return true;
+}
 
 // NOTE: Assumes sequential reads
 int USRPDevice::readSamples(std::vector<short *> &bufs, int len, bool *overrun,
diff --git a/Transceiver52M/device/usrp1/USRPDevice.h b/Transceiver52M/device/usrp1/USRPDevice.h
index f981643..9091dea 100644
--- a/Transceiver52M/device/usrp1/USRPDevice.h
+++ b/Transceiver52M/device/usrp1/USRPDevice.h
@@ -191,6 +191,9 @@
   /* return the used RX path */
   std::string getTxAntenna(size_t chan = 0);
 
+  /** return whether user drives synchronization of Tx/Rx of USRP */
+  bool requiresRadioAlign();
+
   /** Return internal status values */
   inline double getTxFreq(size_t chan = 0) { return 0; }
   inline double getRxFreq(size_t chan = 0) { return 0; }
diff --git a/Transceiver52M/radioInterface.cpp b/Transceiver52M/radioInterface.cpp
index c3063ff..a377436 100644
--- a/Transceiver52M/radioInterface.cpp
+++ b/Transceiver52M/radioInterface.cpp
@@ -145,16 +145,31 @@
   return mRadio->setRxFreq(freq, chan);
 }
 
+/** synchronization thread loop */
+void *AlignRadioServiceLoopAdapter(RadioInterface *radioInterface)
+{
+  while (1) {
+    sleep(60);
+    radioInterface->alignRadio();
+    pthread_testcancel();
+  }
+  return NULL;
+}
+
+void RadioInterface::alignRadio() {
+  mRadio->updateAlignment(writeTimestamp+ (TIMESTAMP) 10000);
+}
+
 bool RadioInterface::start()
 {
   if (mOn)
     return true;
 
   LOG(INFO) << "Starting radio device";
-#ifdef DEVICE_USRP1
-  mAlignRadioServiceLoopThread.start((void * (*)(void*))AlignRadioServiceLoopAdapter,
-                                     (void*)this);
-#endif
+  if (mRadio->requiresRadioAlign())
+        mAlignRadioServiceLoopThread.start(
+                                (void * (*)(void*))AlignRadioServiceLoopAdapter,
+                                (void*)this);
 
   if (!mRadio->start())
     return false;
@@ -191,22 +206,6 @@
   return true;
 }
 
-#ifdef DEVICE_USRP1
-void *AlignRadioServiceLoopAdapter(RadioInterface *radioInterface)
-{
-  while (1) {
-    radioInterface->alignRadio();
-    pthread_testcancel();
-  }
-  return NULL;
-}
-
-void RadioInterface::alignRadio() {
-  sleep(60);
-  mRadio->updateAlignment(writeTimestamp+ (TIMESTAMP) 10000);
-}
-#endif
-
 void RadioInterface::driveTransmitRadio(std::vector<signalVector *> &bursts,
                                         std::vector<bool> &zeros)
 {
diff --git a/Transceiver52M/radioInterface.h b/Transceiver52M/radioInterface.h
index e05d871..6b482d1 100644
--- a/Transceiver52M/radioInterface.h
+++ b/Transceiver52M/radioInterface.h
@@ -133,21 +133,13 @@
   /** get transport window type of attached device */ 
   enum RadioDevice::TxWindowType getWindowType() { return mRadio->getWindowType(); }
 
-#if DEVICE_USRP1
 protected:
-
   /** drive synchronization of Tx/Rx of USRP */
   void alignRadio();
 
   friend void *AlignRadioServiceLoopAdapter(RadioInterface*);
-#endif
 };
 
-#if DEVICE_USRP1
-/** synchronization thread loop */
-void *AlignRadioServiceLoopAdapter(RadioInterface*);
-#endif
-
 class RadioInterfaceResamp : public RadioInterface {
 private:
   signalVector *outerSendBuffer;
