diff --git a/openair1/DOCS/DOXYGEN/Doxyfile b/openair1/DOCS/DOXYGEN/Doxyfile
index 88a033df21bd4e8e1332cc517befb5ace30b7033..8cda3df01be3c57e9c99bd70433a4f9a9732d2fa 100755
--- a/openair1/DOCS/DOXYGEN/Doxyfile
+++ b/openair1/DOCS/DOXYGEN/Doxyfile
@@ -567,6 +567,7 @@ WARN_LOGFILE           =
 INPUT                  = ../../PHY/impl_defs_top.h \
                          ../../PHY/impl_defs_lte.h \
                          ../../PHY/defs.h \
+                         ../../PHY/sse_intrin.h \
                          ../../PHY/CODING/defs.h \
                          ../../PHY/TOOLS/defs.h \
                          ../../PHY/LTE_TRANSPORT/defs.h \
diff --git a/openair1/PHY/CODING/3gpplte_sse.c b/openair1/PHY/CODING/3gpplte_sse.c
index a27f2bb2ba6f15a7428dac3d81afe07883e51551..32cc0ddbb9a96f38e0314d14958234c7c6296b1d 100755
--- a/openair1/PHY/CODING/3gpplte_sse.c
+++ b/openair1/PHY/CODING/3gpplte_sse.c
@@ -36,7 +36,7 @@
 #include "extern_3GPPinterleaver.h"
 #include <stdlib.h>
 
-#include "smmintrin.h"
+#include "PHY/sse_intrin.h"
 
 //#define DEBUG_TURBO_ENCODER 1
 #define CALLGRIND 1
diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder.c b/openair1/PHY/CODING/3gpplte_turbo_decoder.c
index 22fe5c58e010f6a78572b0c79b79202d695695a7..4a098f84a617c2bedff1bd4c07d4e9a34444de53 100644
--- a/openair1/PHY/CODING/3gpplte_turbo_decoder.c
+++ b/openair1/PHY/CODING/3gpplte_turbo_decoder.c
@@ -34,10 +34,10 @@
 
 */
 
-#include "emmintrin.h"
 #include "PHY/defs.h"
 #include "PHY/CODING/defs.h"
 #include "PHY/CODING/lte_interleaver_inline.h"
+#include "PHY/sse_intrin.h"
 
 /*
 // 3gpp2 polynomials
diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse.c
index d1f8219743831cc10e6a279f1329b282ce1f2a6b..febd82644f83b429bde2c2665558a20d44385e68 100644
--- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse.c
+++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse.c
@@ -42,10 +42,9 @@
 ///
 ///
 
-#include "emmintrin.h"
-#include "smmintrin.h"
+#include "PHY/sse_intrin.h"
 
-#ifndef TEST_DEBUG 
+#ifndef TEST_DEBUG
 #include "PHY/defs.h"
 #include "PHY/CODING/defs.h"
 #include "PHY/CODING/lte_interleaver_inline.h"
diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c
index 12df10e5c63b61abfa19f416d503f68a8374907f..29f2de0c740ac213e7900d895d1deef461bb0c87 100644
--- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c
+++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_16bit.c
@@ -44,8 +44,7 @@
 ///
 ///
 
-#include "emmintrin.h"
-#include "smmintrin.h"
+#include "PHY/sse_intrin.h"
 
 #ifndef TEST_DEBUG 
 #include "PHY/defs.h"
diff --git a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c
index ac0673436868950e6258f13c7940f3b303463aa3..5c61a8ed80a2aa445a73a367c538cbc85e076d17 100644
--- a/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c
+++ b/openair1/PHY/CODING/3gpplte_turbo_decoder_sse_8bit.c
@@ -43,8 +43,7 @@
 ///
 ///
 
-#include "emmintrin.h"
-#include "smmintrin.h"
+#include "PHY/sse_intrin.h"
 
 #ifndef TEST_DEBUG 
 #include "PHY/defs.h"
diff --git a/openair1/PHY/CODING/TESTBENCH/ltetest.c b/openair1/PHY/CODING/TESTBENCH/ltetest.c
index 4a168a3175965e2e72d218dd3abef04550acf709..0a25d5bcb4633bfc2048af43b2add565d8488493 100644
--- a/openair1/PHY/CODING/TESTBENCH/ltetest.c
+++ b/openair1/PHY/CODING/TESTBENCH/ltetest.c
@@ -55,7 +55,7 @@
 #define F1 3
 #define F2 10
 
-#include "emmintrin.h"
+#include "PHY/sse_intrin.h"
 
 #define sgn(a) (((a)<0) ? 0 : 1)
 
diff --git a/openair1/PHY/CODING/viterbi.c b/openair1/PHY/CODING/viterbi.c
index a6e1ffa2bf283e633989b5cbe1b08d2c8e3aac6d..0315749fe215c0cd2bdb6d9d3fa096aa6324c0a9 100755
--- a/openair1/PHY/CODING/viterbi.c
+++ b/openair1/PHY/CODING/viterbi.c
@@ -34,7 +34,7 @@
 
 
 #ifndef EXPRESSMIMO_TARGET
-#include "emmintrin.h"
+#include "PHY/sse_intrin.h"
 #endif //EXPRESSMIMO_TARGET
 
 extern unsigned char ccodedot11_table[128],ccodedot11_table_rev[128];
@@ -212,9 +212,9 @@ void phy_viterbi_dot11_sse2(char *y,unsigned char *decoded_bytes,unsigned short
     // set initial metrics
     
     metrics0_15 = _mm_cvtsi32_si128(INIT0);
-    metrics16_31 = _mm_xor_si128(metrics16_31,metrics16_31);
-    metrics32_47 = _mm_xor_si128(metrics32_47,metrics32_47);
-    metrics48_63 = _mm_xor_si128(metrics32_47,metrics32_47);
+    metrics16_31 = _mm_setzero_si128();
+    metrics32_47 = _mm_setzero_si128();
+    metrics48_63 = _mm_setzero_si128();
   }
   rescale = _mm_cvtsi32_si128(RESCALE);
 
diff --git a/openair1/PHY/CODING/viterbi_lte.c b/openair1/PHY/CODING/viterbi_lte.c
index 8d44d0de8415deff02494f9e99de79b61dc58f79..270763cc6c908710699ae30d55d920607e6e2cc8 100644
--- a/openair1/PHY/CODING/viterbi_lte.c
+++ b/openair1/PHY/CODING/viterbi_lte.c
@@ -50,7 +50,7 @@
 #endif
 
 #ifndef EXPRESSMIMO_TARGET
-#include "emmintrin.h"
+#include "PHY/sse_intrin.h"
 #endif //EXPRESSMIMO_TARGET
 
 extern uint8_t ccodelte_table[128],ccodelte_table_rev[128];
@@ -163,10 +163,10 @@ void phy_viterbi_lte_sse2(int8_t *y,uint8_t *decoded_bytes,uint16_t n) {
   // set initial metrics
   //debug_msg("Doing viterbi\n");
 
-  metrics0_15 = _mm_xor_si128(metrics0_15,metrics0_15);
-  metrics16_31 = _mm_xor_si128(metrics16_31,metrics16_31);
-  metrics32_47 = _mm_xor_si128(metrics32_47,metrics32_47);
-  metrics48_63 = _mm_xor_si128(metrics32_47,metrics32_47);
+  metrics0_15 = _mm_setzero_si128();
+  metrics16_31 = _mm_setzero_si128();
+  metrics32_47 = _mm_setzero_si128();
+  metrics48_63 = _mm_setzero_si128();
 #ifndef USER_MODE
   //debug_msg("Doing viterbi 2\n");
 #endif
diff --git a/openair1/PHY/LTE_ESTIMATION/freq_equalization.c b/openair1/PHY/LTE_ESTIMATION/freq_equalization.c
index 74bea94245681baa23d1ba3d646f86d4a1b8bd8f..dfe77dabb6389454e964b151b04b3e937697b552 100755
--- a/openair1/PHY/LTE_ESTIMATION/freq_equalization.c
+++ b/openair1/PHY/LTE_ESTIMATION/freq_equalization.c
@@ -28,8 +28,7 @@
  *******************************************************************************/
 #include "PHY/defs.h"
 #include "PHY/extern.h"
-#include <emmintrin.h>
-#include <xmmintrin.h>
+#include "PHY/sse_intrin.h"
 
 // This is 512/(1:256) in __m128i format
 int16_t inv_ch[256*8] = {512,512,512,512,512,512,512,512,
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
index 5d17d35bfd5e261995e078b6115a1316720086ae..9d4fabc782590e00f96fd76e7fab1fd12daadbd2 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_eNB_measurements.c
@@ -29,13 +29,8 @@
 #include "PHY/defs.h"
 #include "PHY/extern.h"
 
-#include "emmintrin.h"
+#include "PHY/sse_intrin.h"
 
-#ifdef __SSE3__
-#include "pmmintrin.h"
-#include "tmmintrin.h"
-#else
-#endif
 
 //#define k1 1000
 #define k1 1024
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c b/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c
index e29d2d644d5510144a90a0f3a1388a0ac34ffaed..54d39fa8cb78ee7566ed4ca72380162b271dba25 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_est_freq_offset.c
@@ -46,7 +46,7 @@ int dl_channel_level(int16_t *dl_ch,
   int avg;
 
       //clear average level
-  avg128F = _mm_xor_si128(avg128F,avg128F);
+  avg128F = _mm_setzero_si128();
   dl_ch128=(__m128i *)dl_ch;
 
   for (rb=0;rb<frame_parms->N_RB_DL;rb++) {
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
index 2241bad9c1a6730ef64ade5416db2119397b4c1f..6582e1d5fca3ecc7c9f9193dd2a69bc79abec343 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_ue_measurements.c
@@ -33,17 +33,7 @@
 #include "SCHED/defs.h"
 #include "SCHED/extern.h"
 #include "log.h"
-
-#include "emmintrin.h"
-
-#ifdef __SSE3__
-#include "pmmintrin.h"
-#include "tmmintrin.h"
-#else
-__m128i zeroPMI;
-#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zeroPMI,(xmmx)))
-#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zeroPMI,(xmmy)))
-#endif
+#include "PHY/sse_intrin.h"
 
 //#define k1 1000
 #define k1 ((long long int) 1000)
@@ -489,8 +479,8 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
 	  
 	    // pmi
 	  
-	    pmi128_re = _mm_xor_si128(pmi128_re,pmi128_re);
-	    pmi128_im = _mm_xor_si128(pmi128_im,pmi128_im);
+            pmi128_re = _mm_setzero_si128();
+            pmi128_im = _mm_setzero_si128();
 	    // limit is the number of groups of 4 REs in a subband (12 = 4 RBs, 3 = 1 RB)
 	    // for 5 MHz channelization, there are 7 subbands, 6 of size 4 RBs and 1 of size 1 RB
 	    if ((N_RB_DL==6) || (subband<(nb_subbands-1)))
@@ -507,8 +497,8 @@ void lte_ue_measurements(PHY_VARS_UE *phy_vars_ue,
 	      //print_shorts("ch1",dl_ch1_128);
 	      // }
 	      // if(i==0){
-	      mmtmpPMI0 = _mm_xor_si128(mmtmpPMI0,mmtmpPMI0);
-	      mmtmpPMI1 = _mm_xor_si128(mmtmpPMI1,mmtmpPMI1);
+              mmtmpPMI0 = _mm_setzero_si128();
+              mmtmpPMI1 = _mm_setzero_si128();
 	      //	    }
 	      // if(eNB_id==0)
 	      // print_ints("Pre_re",&mmtmpPMI0);
diff --git a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
index 21a5e14ccbab253f54bf0efc2b2fa2276e45d068..24b275bdb5a1a7d6cc0bef294a7a26a7474aed15 100644
--- a/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
+++ b/openair1/PHY/LTE_ESTIMATION/lte_ul_channel_estimation.c
@@ -28,16 +28,9 @@
  *******************************************************************************/
 #include "PHY/defs.h"
 #include "PHY/extern.h"
-#include <emmintrin.h>
-#include <xmmintrin.h>
+#include "PHY/sse_intrin.h"
 //#define DEBUG_CH
 
-#ifndef __SSE3__
-__m128i zeroE;//,tmp_over_sqrt_10,tmp_sum_4_over_sqrt_10,tmp_sign,tmp_sign_3_over_sqrt_10;
-//#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmx)))
-#define _mm_abs_epi16(xmmx) _mm_add_epi16(_mm_xor_si128((xmmx),_mm_cmpgt_epi16(zeroE,(xmmx))),_mm_srli_epi16(_mm_cmpgt_epi16(zeroE,(xmmx)),15))
-#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zeroE,(xmmy)))
-#endif
 
 // For Channel Estimation in Distributed Alamouti Scheme
 //static int16_t temp_out_ifft[2048*4] __attribute__((aligned(16)));
@@ -696,8 +689,8 @@ int16_t lte_ul_freq_offset_estimation(LTE_DL_FRAME_PARMS *frame_parms,
     int16_t alpha[128] = {201, 402, 603, 804, 1006, 1207, 1408, 1610, 1811, 2013, 2215, 2417, 2619, 2822, 3024, 3227, 3431, 3634, 3838, 4042, 4246, 4450, 4655, 4861, 5066, 5272, 5479, 5686, 5893, 6101, 6309, 6518, 6727, 6937, 7147, 7358, 7570, 7782, 7995, 8208, 8422, 8637, 8852, 9068, 9285, 9503, 9721, 9940, 10160, 10381, 10603, 10825, 11049, 11273, 11498, 11725, 11952, 12180, 12410, 12640, 12872, 13104, 13338, 13573, 13809, 14046, 14285, 14525, 14766, 15009, 15253, 15498, 15745, 15993, 16243, 16494, 16747, 17001, 17257, 17515, 17774, 18035, 18298, 18563, 18829, 19098, 19368, 19640, 19915, 20191, 20470, 20750, 21033, 21318, 21605, 21895, 22187, 22481, 22778, 23078, 23380, 23685, 23992, 24302, 24615, 24931, 25250, 25572, 25897, 26226, 26557, 26892, 27230, 27572, 27917, 28266, 28618, 28975, 29335, 29699, 30067, 30440, 30817, 31198, 31583, 31973, 32368, 32767};
  
     // compute log2_maxh (output_shift)
-    avg128U1 = _mm_xor_si128(avg128U1,avg128U1);
-    avg128U2 = _mm_xor_si128(avg128U2,avg128U2);
+    avg128U1 = _mm_setzero_si128();
+    avg128U2 = _mm_setzero_si128();
 
     for (rb=0;rb<nb_rb;rb++) {      
         avg128U1 = _mm_add_epi32(avg128U1,_mm_madd_epi16(ul_ch1[0],ul_ch1[0]));
diff --git a/openair1/PHY/LTE_TRANSPORT/dci.c b/openair1/PHY/LTE_TRANSPORT/dci.c
index 6b0bbcbe738229940df0f1e95a7790e1dbef2c7c..767a683c80adaf2eb61c40e0e452c85c0cd4eb98 100644
--- a/openair1/PHY/LTE_TRANSPORT/dci.c
+++ b/openair1/PHY/LTE_TRANSPORT/dci.c
@@ -46,12 +46,7 @@
 #include "PHY/extern.h"
 #include "SCHED/defs.h"
 #include "SIMULATION/TOOLS/defs.h" // for taus 
-#include <emmintrin.h>
-#include <xmmintrin.h>
-#ifdef __SSE3__
-#include <pmmintrin.h>
-#include <tmmintrin.h>
-#endif
+#include "PHY/sse_intrin.h"
 
 #include "assertions.h"
 
@@ -61,12 +56,6 @@
  
 //#undef ALL_AGGREGATION
 
-#ifndef __SSE3__
-__m128i zero2;
-#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero2,(xmmx)))
-#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero2,(xmmy)))
-#endif
-
 //extern uint16_t phich_reg[MAX_NUM_PHICH_GROUPS][3];
 //extern uint16_t pcfich_reg[4];
 
@@ -636,7 +625,7 @@ void pdcch_channel_level(int32_t **dl_ch_estimates_ext,
   for (aatx=0;aatx<frame_parms->nb_antennas_tx_eNB;aatx++)
     for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) {
       //clear average level
-      avg128P = _mm_xor_si128(avg128P,avg128P);
+      avg128P = _mm_setzero_si128();
       dl_ch128=(__m128i *)&dl_ch_estimates_ext[(aatx<<1)+aarx][frame_parms->N_RB_DL*12];
 
       for (rb=0;rb<nb_rb;rb++) {
@@ -1272,9 +1261,6 @@ void pdcch_channel_compensation(int32_t **rxdataF_ext,
 
 
 
-#ifndef __SSE3__
-  zero2 = _mm_xor_si128(zero2,zero2);
-#endif
 
 #ifdef DEBUG_DCI_DECODING
   msg("[PHY] PDCCH comp: symbol %d\n",symbol);
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
index a081cf5caf4240f99c69d071bde8bbcb1c0d2e6e..3d642e55b0ee20ee6c6fcb8f50494988c949acc7 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_demodulation.c
@@ -38,26 +38,13 @@
  * \warning
  */
 
-#ifdef __SSE2__
-#include <emmintrin.h>
-#include <xmmintrin.h>
-#endif
-#ifdef __SSE3__
-#include <pmmintrin.h>
-#include <tmmintrin.h>
-#endif
 #include "PHY/defs.h"
 #include "PHY/extern.h"
 #include "defs.h"
 #include "extern.h"
+#include "PHY/sse_intrin.h"
 
 
-#ifndef __SSE3__
-__m128i zero;//,tmp_over_sqrt_10,tmp_sum_4_over_sqrt_10,tmp_sign,tmp_sign_3_over_sqrt_10;
-//#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmx)))
-#define _mm_abs_epi16(xmmx) _mm_add_epi16(_mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmx))),_mm_srli_epi16(_mm_cmpgt_epi16(zero,(xmmx)),15))
-#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmy)))
-#endif
 
 #ifndef USER_MODE
 #define NOCYGWIN_STATIC static
@@ -110,7 +97,7 @@ int rx_pdsch(PHY_VARS_UE *phy_vars_ue,
   unsigned char aatx,aarx;    
   unsigned short nb_rb;
   int avgs, rb;  
-  LTE_DL_UE_HARQ_t *dlsch0_harq,*dlsch1_harq;
+  LTE_DL_UE_HARQ_t *dlsch0_harq,*dlsch1_harq = 0;
 
   switch (type) {
   case SI_PDSCH:
@@ -800,10 +787,6 @@ void dlsch_channel_compensation(int **rxdataF_ext,
 
   symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
 
-#ifndef __SSE3__
-  zero = _mm_xor_si128(zero,zero);
-#endif
-
   if ((symbol_mod == 0) || (symbol_mod == (4-frame_parms->Ncp))) {
       
     if (frame_parms->mode1_flag==1) // 10 out of 12 so don't reduce size    
@@ -815,7 +798,7 @@ void dlsch_channel_compensation(int **rxdataF_ext,
   for (aatx=0;aatx<frame_parms->nb_antennas_tx_eNB;aatx++) {
     if (mod_order == 4) {
       QAM_amp128 = _mm_set1_epi16(QAM16_n1);  // 2/sqrt(10)
-      QAM_amp128b = _mm_xor_si128(QAM_amp128b,QAM_amp128b);
+      QAM_amp128b = _mm_setzero_si128();
     }    
     else if (mod_order == 6) {
       QAM_amp128  = _mm_set1_epi16(QAM64_n1); // 
@@ -1180,15 +1163,11 @@ void dlsch_channel_compensation_TM56(int **rxdataF_ext,
 
   rx_power_correction = 1;
     
-#ifndef __SSE3__
-  zero = _mm_xor_si128(zero,zero);
-#endif
-
   //printf("comp prec: symbol %d, pilots %d\n",symbol, pilots);
 
   if (mod_order == 4) {
     QAM_amp128 = _mm_set1_epi16(QAM16_n1);
-    QAM_amp128b = _mm_xor_si128(QAM_amp128b,QAM_amp128b);
+    QAM_amp128b = _mm_setzero_si128();
   }
   else if (mod_order == 6) {
     QAM_amp128  = _mm_set1_epi16(QAM64_n1);
@@ -1396,15 +1375,11 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms,
 
   rx_power_correction = 1;
     
-#ifndef __SSE3__
-  zero = _mm_xor_si128(zero,zero);
-#endif
-
   //printf("comp prec: symbol %d, pilots %d\n",symbol, pilots);
 
   if (mod_order0 == 4) {
     QAM_amp0_128  = _mm_set1_epi16(QAM16_n1);
-    QAM_amp0_128b = _mm_xor_si128(QAM_amp0_128b,QAM_amp0_128b);
+    QAM_amp0_128b = _mm_setzero_si128();
   }
   else if (mod_order0 == 6) {
     QAM_amp0_128  = _mm_set1_epi16(QAM64_n1);
@@ -1412,7 +1387,7 @@ void dlsch_channel_compensation_TM3(LTE_DL_FRAME_PARMS *frame_parms,
   }
   if (mod_order1 == 4) {
     QAM_amp1_128  = _mm_set1_epi16(QAM16_n1);
-    QAM_amp1_128b = _mm_xor_si128(QAM_amp1_128b,QAM_amp1_128b);
+    QAM_amp1_128b = _mm_setzero_si128();
   }
   else if (mod_order1 == 6) {
     QAM_amp1_128  = _mm_set1_epi16(QAM64_n1);
@@ -1949,7 +1924,7 @@ void dlsch_channel_level(int **dl_ch_estimates_ext,
   for (aatx=0;aatx<frame_parms->nb_antennas_tx_eNB;aatx++)
     for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) {
       //clear average level
-      avg128D = _mm_xor_si128(avg128D,avg128D);
+      avg128D = _mm_setzero_si128();
       // 5 is always a symbol with no pilots for both normal and extended prefix
 
       dl_ch128=(__m128i *)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol*frame_parms->N_RB_DL*12];
@@ -2008,7 +1983,7 @@ void dlsch_channel_level_TM3(int **dl_ch_estimates_ext,
   symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
 
   //clear average level
-  avg128D = _mm_xor_si128(avg128D,avg128D);
+  avg128D = _mm_setzero_si128();
   avg[0] = 0;
   avg[1] = 0;
   // 5 is always a symbol with no pilots for both normal and extended prefix
@@ -2083,7 +2058,7 @@ void dlsch_channel_level_TM56(int **dl_ch_estimates_ext,
   symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
 
   //clear average level
-  avg128D = _mm_xor_si128(avg128D,avg128D);
+  avg128D = _mm_setzero_si128();
   avg[0] = 0;
   avg[1] = 0;
   // 5 is always a symbol with no pilots for both normal and extended prefix
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
index ba83156742309f1f02b79b7c23ab539d19491aaf..8ffb030fddb363c8e5115047b96149d555b6cb8b 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_llr_computation.c
@@ -38,27 +38,11 @@
 * \warning
 */
 
-#ifdef __SSE2__
-#include <emmintrin.h>
-#include <xmmintrin.h>
-#endif
-#ifdef __SSE3__
-#include <pmmintrin.h>
-#include <tmmintrin.h>
-#endif
-#ifdef __SSE4_1__
-#include <smmintrin.h>
-#endif
 #include "PHY/defs.h"
 #include "PHY/extern.h"
 #include "defs.h"
 #include "extern.h"
-
-#ifndef __SSE3__
-//#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmx)))
-//abs_#define _mm_abs_epi16(xmmx) _mm_add_epi16(_mm_xor_si128((xmmx),_mm_cmpgt_epi16((*(__m128i*)&zero[0]),(xmmx))),_mm_srli_epi16(_mm_cmpgt_epi16((*(__m128i*)&zero[0]),(xmmx)),15))
-//#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmy)))
-#endif
+#include "PHY/sse_intrin.h"
 
 #ifndef USER_MODE
 #define NOCYGWIN_STATIC static
@@ -1061,7 +1045,7 @@ length = number of resource elements
     
         // Compute the terms for the LLR of first bit
     
-        xmm0 = _mm_xor_si128(xmm0,xmm0); // ZERO
+        xmm0 = _mm_setzero_si128(); // ZERO
     
         // 1 term for numerator of LLR
         xmm3 = _mm_subs_epi16(y1r_over2,rho_rpi);
@@ -1305,7 +1289,7 @@ length = number of resource elements
         y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
         y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
     
-        xmm0 = _mm_xor_si128(xmm0,xmm0); // ZERO
+        xmm0 = _mm_setzero_si128(); // ZERO
     
         // compute psi
         xmm3 = _mm_subs_epi16(y1r,rho_rpi);
@@ -1569,7 +1553,7 @@ length = number of resource elements
         y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
         y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
     
-        xmm0 = _mm_xor_si128(xmm0,xmm0); // ZERO
+        xmm0 = _mm_setzero_si128(); // ZERO
     
         // compute psi
         xmm3 = _mm_subs_epi16(y1r,rho_rpi);
@@ -1780,7 +1764,7 @@ void qam16_qpsk(short *stream0_in,
         y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
         y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
 
-        xmm0 = _mm_xor_si128(xmm0,xmm0); // ZERO
+        xmm0 = _mm_setzero_si128(); // ZERO
         xmm2 = _mm_subs_epi16(rho_rpi_1_1,y1r); // = [Re(rho)+ Im(rho)]/sqrt(10) - y1r
         psi_r_p1_p1 = _mm_abs_epi16(xmm2); // = |[Re(rho)+ Im(rho)]/sqrt(10) - y1r|
 
@@ -2237,7 +2221,7 @@ void qam16_qam16(short *stream0_in,
         y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
         y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
 
-        xmm0 = _mm_xor_si128(xmm0,xmm0); // ZERO
+        xmm0 = _mm_setzero_si128(); // ZERO
         xmm2 = _mm_subs_epi16(rho_rpi_1_1,y1r); // = [Re(rho)+ Im(rho)]/sqrt(10) - y1r
         psi_r_p1_p1 = _mm_abs_epi16(xmm2); // = |[Re(rho)+ Im(rho)]/sqrt(10) - y1r|
 
@@ -2748,7 +2732,7 @@ void qam16_qam64(short *stream0_in,
         y1r = _mm_unpacklo_epi64(xmm0,xmm1); //[y1r(1),y1r(2),y1r(3),y1r(4)]
         y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
 
-        xmm0 = _mm_xor_si128(xmm0,xmm0); // ZERO
+        xmm0 = _mm_setzero_si128(); // ZERO
         xmm2 = _mm_subs_epi16(rho_rpi_1_1,y1r); // = [Re(rho)+ Im(rho)]/sqrt(10) - y1r
         psi_r_p1_p1 = _mm_abs_epi16(xmm2); // = |[Re(rho)+ Im(rho)]/sqrt(10) - y1r|
 
@@ -3357,7 +3341,7 @@ void qam64_qpsk(short *stream0_in,
         y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
 
         // Psi_r calculation from rho_rpi or rho_rmi
-        xmm0 = _mm_xor_si128(xmm0, xmm0); // ZERO for abs_pi16
+        xmm0 = _mm_setzero_si128(); // ZERO for abs_pi16
         xmm2 = _mm_subs_epi16(rho_rpi_7_7, y1r); psi_r_p7_p7 = _mm_abs_epi16(xmm2);
         xmm2 = _mm_subs_epi16(rho_rpi_7_5, y1r); psi_r_p7_p5 = _mm_abs_epi16(xmm2);
         xmm2 = _mm_subs_epi16(rho_rpi_7_3, y1r); psi_r_p7_p3 = _mm_abs_epi16(xmm2);
@@ -4669,7 +4653,7 @@ void qam64_qam16(short *stream0_in,
         y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
 
         // Psi_r calculation from rho_rpi or rho_rmi
-        xmm0 = _mm_xor_si128(xmm0, xmm0); // ZERO for abs_pi16
+        xmm0 = _mm_setzero_si128(); // ZERO for abs_pi16
         xmm2 = _mm_subs_epi16(rho_rpi_7_7, y1r); psi_r_p7_p7 = _mm_abs_epi16(xmm2);
         xmm2 = _mm_subs_epi16(rho_rpi_7_5, y1r); psi_r_p7_p5 = _mm_abs_epi16(xmm2);
         xmm2 = _mm_subs_epi16(rho_rpi_7_3, y1r); psi_r_p7_p3 = _mm_abs_epi16(xmm2);
@@ -5924,7 +5908,7 @@ void qam64_qam64(short *stream0_in,
         y1i = _mm_unpackhi_epi64(xmm0,xmm1); //[y1i(1),y1i(2),y1i(3),y1i(4)]
 
         // Psi_r calculation from rho_rpi or rho_rmi
-        xmm0 = _mm_xor_si128(xmm0, xmm0); // ZERO for abs_pi16
+        xmm0 = _mm_setzero_si128(); // ZERO for abs_pi16
         xmm2 = _mm_subs_epi16(rho_rpi_7_7, y1r); psi_r_p7_p7 = _mm_abs_epi16(xmm2);
         xmm2 = _mm_subs_epi16(rho_rpi_7_5, y1r); psi_r_p7_p5 = _mm_abs_epi16(xmm2);
         xmm2 = _mm_subs_epi16(rho_rpi_7_3, y1r); psi_r_p7_p3 = _mm_abs_epi16(xmm2);
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
index 276180fd76f3dbf16eb94ee1e6431ee61b1c4a97..731d1ef7cb00086e9284355e45b5d7901ccee63c 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_modulation.c
@@ -1016,7 +1016,7 @@ int dlsch_modulation(mod_sym_t **txdataF,
   uint8_t pilots=0;
   uint8_t skip_dc,skip_half;
   uint8_t mod_order0 = get_Qm(dlsch0_harq->mcs);
-  uint8_t mod_order1;
+  uint8_t mod_order1 = 0;
   int16_t amp_rho_a, amp_rho_b;
   int16_t qam16_table_a0[4],qam64_table_a0[8],qam16_table_b0[4],qam64_table_b0[8];
   int16_t qam16_table_a1[4],qam64_table_a1[8],qam16_table_b1[4],qam64_table_b1[8];
diff --git a/openair1/PHY/LTE_TRANSPORT/drs_modulation.c b/openair1/PHY/LTE_TRANSPORT/drs_modulation.c
index fa73a9ec757b478307a114db592f82cdfbbbe7af..7b11f7ae6d897ec7af946bc9ec5a514881ed8ac1 100644
--- a/openair1/PHY/LTE_TRANSPORT/drs_modulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/drs_modulation.c
@@ -39,8 +39,7 @@
 */
 #include "PHY/defs.h"
 #include "PHY/extern.h"
-#include <emmintrin.h>
-#include <xmmintrin.h>
+#include "PHY/sse_intrin.h"
 //#define DEBUG_DRS
 
 int generate_drs_pusch(PHY_VARS_UE *phy_vars_ue,
diff --git a/openair1/PHY/LTE_TRANSPORT/pbch.c b/openair1/PHY/LTE_TRANSPORT/pbch.c
index 920ab5b90c54ea634b03197fc35f9025bd25804b..5ce741ae0cd212e338f12d27efc9c040b8081aac 100755
--- a/openair1/PHY/LTE_TRANSPORT/pbch.c
+++ b/openair1/PHY/LTE_TRANSPORT/pbch.c
@@ -37,28 +37,18 @@
 * \note
 * \warning
 */
-#include <emmintrin.h>
-#include <xmmintrin.h>
-#ifdef __SSE3__
-#include <pmmintrin.h>
-#include <tmmintrin.h>
-#endif
 #include "PHY/defs.h"
 #include "PHY/CODING/extern.h"
 #include "PHY/CODING/lte_interleaver_inline.h"
 #include "defs.h"
 #include "extern.h"
 #include "PHY/extern.h"
+#include "PHY/sse_intrin.h"
 
 #ifdef PHY_ABSTRACTION
 #include "SIMULATION/TOOLS/defs.h"
 #endif 
 
-#ifndef __SSE3__
-extern __m128i zero;
-#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmx)))
-#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmy)))
-#endif
   
 //#define DEBUG_PBCH 1
 //#define DEBUG_PBCH_ENCODING
@@ -524,7 +514,7 @@ int pbch_channel_level(int **dl_ch_estimates_ext,
   for (aatx=0;aatx<4;aatx++) //frame_parms->nb_antennas_tx_eNB;aatx++)
     for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) {
       //clear average level
-      avg128 = _mm_xor_si128(avg128,avg128);
+      avg128 = _mm_setzero_si128();
       dl_ch128=(__m128i *)&dl_ch_estimates_ext[(aatx<<1)+aarx][symbol_mod*6*12];
 
       for (rb=0;rb<nb_rb;rb++) {
diff --git a/openair1/PHY/LTE_TRANSPORT/pmch.c b/openair1/PHY/LTE_TRANSPORT/pmch.c
index f1a79190f99fe5343c388cadc3b42b2b3b3e8fe2..1d0e3491a8711cab4ce68d6155171f1b4e141bd9 100644
--- a/openair1/PHY/LTE_TRANSPORT/pmch.c
+++ b/openair1/PHY/LTE_TRANSPORT/pmch.c
@@ -28,6 +28,7 @@
  *******************************************************************************/
 #include "PHY/defs.h"
 #include "PHY/extern.h"
+#include "PHY/sse_intrin.h"
 
 // Mask for identifying subframe for MBMS 
 #define MBSFN_TDD_SF3 0x80// for TDD
@@ -46,14 +47,6 @@
 #define MBSFN_FDD_SF8 0x04
 
  
-#ifndef __SSE3__
-#warning SSE3 instruction set not preset
-__m128i zeroM;//,tmp_over_sqrt_10,tmp_sum_4_over_sqrt_10,tmp_sign,tmp_sign_3_over_sqrt_10;
-//#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmx)))
-#define _mm_abs_epi16(xmmx) _mm_add_epi16(_mm_xor_si128((xmmx),_mm_cmpgt_epi16(zeroM,(xmmx))),_mm_srli_epi16(_mm_cmpgt_epi16(zeroM,(xmmx)),15))
-#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zeroM,(xmmy)))
-#endif
-
 
 void dump_mch(PHY_VARS_UE *phy_vars_ue,uint8_t eNB_id,uint16_t coded_bits_per_codeword,int subframe) {
 
@@ -375,7 +368,7 @@ void mch_channel_level(int **dl_ch_estimates_ext,
   
   for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) {
     //clear average level
-    avg128 = _mm_xor_si128(avg128,avg128);
+    avg128 = _mm_setzero_si128();
     // 5 is always a symbol with no pilots for both normal and extended prefix
     
     dl_ch128=(__m128i *)&dl_ch_estimates_ext[aarx][symbol*frame_parms->N_RB_DL*12];
diff --git a/openair1/PHY/LTE_TRANSPORT/prach.c b/openair1/PHY/LTE_TRANSPORT/prach.c
index f714c0b9e41ec2dee7169d4c57d366cb78faa172..e4689fb2f9c42125b1188eb343272b6f1d64bbe8 100644
--- a/openair1/PHY/LTE_TRANSPORT/prach.c
+++ b/openair1/PHY/LTE_TRANSPORT/prach.c
@@ -37,14 +37,7 @@
  * \note
  * \warning
  */
-#ifdef __SSE2__
-#include <emmintrin.h>
-#include <xmmintrin.h>
-#endif
-#ifdef __SSE3__
-#include <pmmintrin.h>
-#include <tmmintrin.h>
-#endif
+#include "PHY/sse_intrin.h"
 #include "PHY/defs.h"
 #include "PHY/extern.h"
 //#include "prach.h"
@@ -960,8 +953,14 @@ void rx_prach(PHY_VARS_eNB *phy_vars_eNB,uint8_t subframe,uint16_t *preamble_ene
 	  (numshift>0) ? (not_found = 0) : (preamble_offset++);
 	}
       }
-      preamble_shift = -((d_start * (preamble_index0/n_shift_ra)) + ((preamble_index0%n_shift_ra)*NCS)); // minus because the channel is h(t -\tau + Cv)
-      (preamble_shift < 0) ? (preamble_shift+=N_ZC) : preamble_shift;
+      if (n_shift_ra>0) 
+	preamble_shift = -((d_start * (preamble_index0/n_shift_ra)) + ((preamble_index0%n_shift_ra)*NCS)); // minus because the channel is h(t -\tau + Cv)
+      else
+	preamble_shift = 0;
+
+      if (preamble_shift < 0) 
+	preamble_shift+=N_ZC;
+
       preamble_index0++;
       if (preamble_index == 0)
               first_nonzero_root_idx = preamble_offset;
diff --git a/openair1/PHY/LTE_TRANSPORT/sss.c b/openair1/PHY/LTE_TRANSPORT/sss.c
index c0a577edaa3ca6b7befd7417d51a986fbc312535..efe6784cd3809a6a6dbf7b429eb841c33a3398f3 100644
--- a/openair1/PHY/LTE_TRANSPORT/sss.c
+++ b/openair1/PHY/LTE_TRANSPORT/sss.c
@@ -354,7 +354,7 @@ int rx_sss(PHY_VARS_UE *phy_vars_ue,int32_t *tot_metric,uint8_t *flip_max,uint8_
   sss0 = (int16_t*)&sss0_ext[0][5];
   sss5 = (int16_t*)&sss5_ext[0][5];
   for (flip=0;flip<2;flip++) {        //  d0/d5 flip in RX frame
-    for (phase=0;phase<=7;phase++) {  // phase offset between PSS and SSS
+    for (phase=0;phase<7;phase++) {  // phase offset between PSS and SSS
       for (Nid1 = 0 ; Nid1 <= 167; Nid1++) {  // 168 possible Nid1 values
 	metric = 0;
 	if (flip==0) {
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
index 112b1ee494884e92244a53413b6f21996bc840ea..9c1b3c740953e371e9c534924df272bdc1ee02ec 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_demodulation.c
@@ -38,15 +38,6 @@
 * \warning
 */
 
-#include <emmintrin.h>
-#include <xmmintrin.h>
-#ifdef __SSE4_1__
-#include <smmintrin.h>
-#endif
-#ifdef __SSE3__
-#include <pmmintrin.h>
-#include <tmmintrin.h>
-#endif
 #include "PHY/defs.h"
 #include "PHY/extern.h"
 #include "MAC_INTERFACE/defs.h"
@@ -54,16 +45,12 @@
 #include "defs.h"
 #include "extern.h"
 //#define DEBUG_ULSCH
+#include "PHY/sse_intrin.h"
 
 //extern char* namepointer_chMag ;
 //eren
 //extern int **ulchmag_eren;
 //eren
-#ifndef __SSE3__
-__m128i zeroU;
-#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zeroU,(xmmx)))
-#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zeroU,(xmmy)))
-#endif
 
 
 static short jitter[8]  __attribute__ ((aligned(16))) = {1,0,0,1,0,1,1,0};
@@ -502,7 +489,6 @@ void ulsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
     mmtmpU2 = _mm_abs_epi16(mmtmpU1);
     mmtmpU2 = _mm_subs_epi16(ch_magb[i],mmtmpU2);
 
-#ifdef __SSE4_1__
     (*llrp32)[0]  = _mm_extract_epi32(rxF[i],0);
     (*llrp32)[1]  = _mm_extract_epi32(mmtmpU1,0);
     (*llrp32)[2]  = _mm_extract_epi32(mmtmpU2,0);
@@ -515,7 +501,6 @@ void ulsch_64qam_llr(LTE_DL_FRAME_PARMS *frame_parms,
     (*llrp32)[9]  = _mm_extract_epi32(rxF[i],3);
     (*llrp32)[10] = _mm_extract_epi32(mmtmpU1,3);
     (*llrp32)[11] = _mm_extract_epi32(mmtmpU2,3);
-#endif    
     (*llrp32)+=12;
   }
 
@@ -661,10 +646,6 @@ void ulsch_channel_compensation(int32_t **rxdataF_ext,
 #endif
   //  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
 
-#ifndef __SSE3__
-  zeroU = _mm_xor_si128(zeroU,zeroU);
-#endif
-
   //    printf("comp: symbol %d\n",symbol);
 
 #ifdef ULSCH_OFDMA  
@@ -862,10 +843,6 @@ void ulsch_channel_compensation_alamouti(int32_t **rxdataF_ext,
 
   //  symbol_mod = (symbol>=(7-frame_parms->Ncp)) ? symbol-(7-frame_parms->Ncp) : symbol;
 
-#ifndef __SSE3__
-  zeroU = _mm_xor_si128(zeroU,zeroU);
-#endif
-
   //    printf("comp: symbol %d\n",symbol);
 
   
@@ -1219,7 +1196,7 @@ void ulsch_channel_level(int32_t **drs_ch_estimates_ext,
 
   for (aarx=0;aarx<frame_parms->nb_antennas_rx;aarx++) {
     //clear average level
-    avg128U = _mm_xor_si128(avg128U,avg128U);
+    avg128U = _mm_setzero_si128();
     ul_ch128=(__m128i *)drs_ch_estimates_ext[aarx];
 
     for (rb=0;rb<nb_rb;rb++) {
diff --git a/openair1/PHY/MODULATION/ul_7_5_kHz.c b/openair1/PHY/MODULATION/ul_7_5_kHz.c
index 6c0d890a7dba0f5ee5463056eba9087be3fe6699..4366bc609d5e86ced5782f8b7d37617913dd1e70 100755
--- a/openair1/PHY/MODULATION/ul_7_5_kHz.c
+++ b/openair1/PHY/MODULATION/ul_7_5_kHz.c
@@ -26,14 +26,6 @@
   Address      : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
 
  *******************************************************************************/
-#ifdef __SSE2__
-#include <emmintrin.h>
-#include <xmmintrin.h>
-#endif
-#ifdef __SSE3__
-#include <pmmintrin.h>
-#include <tmmintrin.h>
-#endif
 #include "PHY/defs.h"
 #include "PHY/extern.h"
 #include "extern.h"
@@ -44,11 +36,8 @@
 #else
 #include "rtai_math.h"
 #endif
-#ifndef __SSE3__
-__m128i zero;
-#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmx)))
-#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zero,(xmmy)))
-#endif
+#include "PHY/sse_intrin.h"
+
 short conjugate75[8]__attribute__((aligned(16))) = {-1,1,-1,1,-1,1,-1,1} ;
 short conjugate75_2[8]__attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1} ;
 short negate[8]__attribute__((aligned(16))) = {-1,-1,-1,-1,-1,-1,-1,-1};
diff --git a/openair1/PHY/TOOLS/cdot_prod.c b/openair1/PHY/TOOLS/cdot_prod.c
index a83c5a44d515efbacc6d3dd399d8402556f48c8e..293c8bd06e85861bac72b9f666731f3ef1311557 100644
--- a/openair1/PHY/TOOLS/cdot_prod.c
+++ b/openair1/PHY/TOOLS/cdot_prod.c
@@ -27,16 +27,7 @@
 
  *******************************************************************************/
 #include "defs.h"
-#include <xmmintrin.h>
-#ifdef __SSE3__
-#include <pmmintrin.h>
-#include <tmmintrin.h>
-#else
-static short zero[8]={0,0,0,0,0,0,0,0};
-#define _mm_abs_epi16(xmmx) xmmx=_mm_xor_si128((xmmx),_mm_cmpgt_epi16(*(__m128i *)&zero[0],(xmmx)))
-#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(*(__m128i *)&zero[0],(xmmy)))
-#define _mm_hadd_epi32(xmmx,xmmy) _mm_unpacklo_epi64(_mm_add_epi32(_mm_shuffle_epi32((xmmx),_MM_SHUFFLE(0,2,0,2)),_mm_shuffle_epi32((xmmx),_MM_SHUFFLE(1,3,1,3))),_mm_add_epi32(_mm_shuffle_epi32((xmmy),_MM_SHUFFLE(0,2,0,2)),_mm_shuffle_epi32((xmmy),_MM_SHUFFLE(1,3,1,3))))
-#endif
+#include "PHY/sse_intrin.h"
 
 // returns the complex dot product of x and y 
 
diff --git a/openair1/PHY/TOOLS/cmult_sv.c b/openair1/PHY/TOOLS/cmult_sv.c
index 261cbb4a387212926ec5fa360efa62dac176184a..7d5658e6da6052e41b25df978725de28125ae379 100644
--- a/openair1/PHY/TOOLS/cmult_sv.c
+++ b/openair1/PHY/TOOLS/cmult_sv.c
@@ -26,8 +26,7 @@
   Address      : Eurecom, Campus SophiaTech, 450 Route des Chappes, CS 50193 - 06904 Biot Sophia Antipolis cedex, FRANCE
 
  *******************************************************************************/
-#include "emmintrin.h"
-#include "smmintrin.h"
+#include "PHY/sse_intrin.h"
 #include "defs.h"
 
 #ifndef EXPRESSMIMO_TARGET
diff --git a/openair1/PHY/TOOLS/defs.h b/openair1/PHY/TOOLS/defs.h
index 3e0bf404a0a31e50b5f7a2f9de6b93c1d2d40e8a..2755a92755fc271491b5118c556e30c60297ec24 100644
--- a/openair1/PHY/TOOLS/defs.h
+++ b/openair1/PHY/TOOLS/defs.h
@@ -38,14 +38,7 @@
 
 #include <stdint.h>
 
-#ifdef __SSE2__
-#include <emmintrin.h>
-#include <xmmintrin.h>
-#endif
-#ifdef __SSE3__
-#include <pmmintrin.h>
-#include <tmmintrin.h>
-#endif
+#include "PHY/sse_intrin.h"
 
 
 //defined in rtai_math.h
diff --git a/openair1/PHY/TOOLS/fft.c b/openair1/PHY/TOOLS/fft.c
index ff1b9ded228b9873fb06a6cc08f810fad94865e7..9657ead210d55cf637131e8bdf89c1d88e539df5 100755
--- a/openair1/PHY/TOOLS/fft.c
+++ b/openair1/PHY/TOOLS/fft.c
@@ -76,8 +76,7 @@
 //                 ** WARNING log2size>=2 **
 //
 
-#include "emmintrin.h"
-#include "mmintrin.h"
+#include "PHY/sse_intrin.h"
 
 /// Function ReverseBits()
 /// computes bit reversed permutation vector
diff --git a/openair1/PHY/TOOLS/lte_dfts.c b/openair1/PHY/TOOLS/lte_dfts.c
index 23a06eb0e3ed0f9cf6a0c1eb162da93282012efd..b2ce76d9a92c59fd9043cd7f0e1eba2358d8cf61 100644
--- a/openair1/PHY/TOOLS/lte_dfts.c
+++ b/openair1/PHY/TOOLS/lte_dfts.c
@@ -52,22 +52,12 @@ int rev2048[2048],rev512[512],rev4096[4096],rev8192[8192];
 #endif
 
 
-#include "emmintrin.h"
-#include "xmmintrin.h"
+#include "PHY/sse_intrin.h"
 
 
 static int16_t conjugatedft[8] __attribute__((aligned(16))) = {-1,1,-1,1,-1,1,-1,1} ;
 
 
-#ifndef __SSE3__
-__m128i zerodft;
-#define _mm_abs_epi16(xmmx) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zerodft,(xmmx)))
-#define _mm_sign_epi16(xmmx,xmmy) _mm_xor_si128((xmmx),_mm_cmpgt_epi16(zerodft,(xmmy)))
-#else
-#include <pmmintrin.h>
-#include <tmmintrin.h>
-#endif
-
 static short reflip[8]  __attribute__((aligned(16))) = {1,-1,1,-1,1,-1,1,-1};
 
 static inline void cmac(__m128i a,__m128i b, __m128i *re32, __m128i *im32) __attribute__((always_inline));
diff --git a/openair1/PHY/TOOLS/memory_routines.c b/openair1/PHY/TOOLS/memory_routines.c
index 969a6629c60dc0872537d25f17a79066e9cc06db..fda70d0392bc74406e601c951d064e24d79a7392 100755
--- a/openair1/PHY/TOOLS/memory_routines.c
+++ b/openair1/PHY/TOOLS/memory_routines.c
@@ -27,7 +27,7 @@
 
  *******************************************************************************/
 #ifndef EXPRESSMIMO_TARGET
-#include <mmintrin.h>
+#include "PHY/sse_intrin.h"
 
 void Zero_Buffer(void *buf,unsigned int length)
 {
diff --git a/openair1/PHY/TOOLS/phase_comp.c b/openair1/PHY/TOOLS/phase_comp.c
index c4d89729c79c1ec3879ff47402c90046a5feac6d..16725361536d706f09d6ebaadf7f7e6b806727db 100644
--- a/openair1/PHY/TOOLS/phase_comp.c
+++ b/openair1/PHY/TOOLS/phase_comp.c
@@ -49,7 +49,7 @@
 #include "defs.h"
 #include "extern.h"
 
-#include "mmintrin.h"
+#include "PHY/sse_intrin.h"
 
 
 #ifndef USER_MODE
diff --git a/openair1/PHY/TOOLS/signal_energy.c b/openair1/PHY/TOOLS/signal_energy.c
index 79dd0ee1f9575edb1867bb7abb05f9c7d3112b28..7402c61a835795a7a7d559afc9a09535a0e49f75 100755
--- a/openair1/PHY/TOOLS/signal_energy.c
+++ b/openair1/PHY/TOOLS/signal_energy.c
@@ -29,7 +29,7 @@
 #include "defs.h"
 
 #ifndef EXPRESSMIMO_TARGET
-#include "mmintrin.h"
+#include "PHY/sse_intrin.h"
 #endif //EXPRESSMIMO_TARGET
 
 // Compute Energy of a complex signal vector, removing the DC component!
diff --git a/openair1/PHY/defs.h b/openair1/PHY/defs.h
index 2bf159e9a817e1beb70918b68236f2d2aaaf4ed0..993417e0fc4633b88aec6f10a36948eda8fb9232 100755
--- a/openair1/PHY/defs.h
+++ b/openair1/PHY/defs.h
@@ -92,6 +92,9 @@
 
 #define cmax3(a,b,c) ((cmax(a,b)>c) ? (cmax(a,b)) : (c))
 
+/// suppress compiler warning for unused arguments
+#define UNUSED(x) (void)x;
+
 #ifdef EXPRESSMIMO_TARGET
 #define Zero_Buffer(x,y) Zero_Buffer_nommx(x,y)
 #endif //EXPRESSMiMO_TARGET
diff --git a/openair1/SCHED/phy_procedures_lte_eNb.c b/openair1/SCHED/phy_procedures_lte_eNb.c
index ed9fe90b25f9f36d13c6532e126b99e1ffd3705f..d9ce11c466bc037088e5d2c2f153015db675aba6 100755
--- a/openair1/SCHED/phy_procedures_lte_eNb.c
+++ b/openair1/SCHED/phy_procedures_lte_eNb.c
@@ -425,7 +425,9 @@ void phy_procedures_emos_eNB_TX(unsigned char next_slot, PHY_VARS_eNB *phy_vars_
   }
 */ 
 
-void phy_procedures_eNB_S_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type) {
+void phy_procedures_eNB_S_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type)
+{
+  UNUSED(r_type);
 
   //  unsigned char sect_id=0; 
   int subframe = phy_vars_eNB->proc[sched_subframe].subframe_rx;
@@ -1021,9 +1023,9 @@ void phy_eNB_lte_check_measurement_thresholds(instance_t instanceP, ral_threshol
 
 
 void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,
-			   relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn) {
+                           relaying_type_t r_type,PHY_VARS_RN *phy_vars_rn) {
+  UNUSED(phy_vars_rn);
   uint8_t *pbch_pdu=&phy_vars_eNB->pbch_pdu[0];
-  //  unsigned int nb_dci_ue_spec = 0, nb_dci_common = 0;
   uint16_t input_buffer_length, re_allocated=0;
   uint32_t i,aa;
   uint8_t harq_pid;
@@ -1032,13 +1034,9 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 #ifndef OPENAIR2
   DCI_PDU DCI_pdu_tmp;
   uint8_t DLSCH_pdu_tmp[768*8];
-  uint8_t rar;
 #endif
   int8_t UE_id;
   uint8_t num_pdcch_symbols=0;
-  int16_t crnti;
-  uint16_t frame_tx;
-  //  int16_t amp;
   uint8_t ul_subframe;
   uint32_t ul_frame;
 #ifdef Rel10
@@ -1057,7 +1055,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
   start_meas(&phy_vars_eNB->phy_proc_tx);
   
 #ifdef DEBUG_PHY_PROC
-  LOG_D(PHY,"[%s %d] Frame %d subframe %d : Doing phy_procedures_eNB_TX(%d)\n", 
+  LOG_D(PHY,"[%s %"PRIu8"] Frame %d subframe %d : Doing phy_procedures_eNB_TX(%d)\n",
 	(r_type == multicast_relay) ? "RN/eNB" : "eNB",
 	phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, subframe, subframe);
 #endif
@@ -1067,10 +1065,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
     mac_xface->eNB_dlsch_ulsch_scheduler(phy_vars_eNB->Mod_id,0,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);//,1);
 #endif
   
-  //  for (sect_id = 0 ; sect_id < number_of_cards; sect_id++) {
-    
-
   if (abstraction_flag==0) {
+    // clear the transmit data array for the current subframe
     for (aa=0; aa<phy_vars_eNB->lte_frame_parms.nb_antennas_tx_eNB;aa++) {
       
       memset(&phy_vars_eNB->lte_eNB_common_vars.txdataF[0][aa][subframe*phy_vars_eNB->lte_frame_parms.ofdm_symbol_size*(phy_vars_eNB->lte_frame_parms.symbols_per_tti)],
@@ -1099,12 +1095,11 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
     switch (r_type){
     case no_relay:
       if ((mch_pduP->Pdu_size > 0) && (mch_pduP->sync_area == 0)) // TEST: only transmit mcch for sync area 0 
-	//if ((mch_pduP->sync_area == 0)) // TEST: only transmit mcch for sync area 0 
-	LOG_I(PHY,"[eNB%d] Frame %d subframe %d : Got MCH pdu for MBSFN (MCS %d, TBS %d) \n",
+        LOG_I(PHY,"[eNB%"PRIu8"] Frame %d subframe %d : Got MCH pdu for MBSFN (MCS %"PRIu8", TBS %d) \n",
 	      phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,mch_pduP->mcs,
 	      phy_vars_eNB->dlsch_eNB_MCH->harq_processes[0]->TBS>>3);
       else {
-	LOG_D(PHY,"[DeNB %d] Frame %d subframe %d : Do not transmit MCH pdu for MBSFN sync area %d (%s)\n",
+        LOG_D(PHY,"[DeNB %"PRIu8"] Frame %d subframe %d : Do not transmit MCH pdu for MBSFN sync area %"PRIu8" (%s)\n",
 	      phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,mch_pduP->sync_area,
 	      (mch_pduP->Pdu_size == 0)? "Empty MCH PDU":"Let RN transmit for the moment");
 	mch_pduP = NULL;
@@ -1112,8 +1107,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
       break;
     case multicast_relay:
       if ((mch_pduP->Pdu_size > 0) && ((mch_pduP->mcch_active == 1) || mch_pduP->msi_active==1)){
-	//if (((mch_pduP->mcch_active == 1) || mch_pduP->msi_active==1)){
-	LOG_I(PHY,"[RN %d] Frame %d subframe %d: Got the MCH PDU for MBSFN  sync area %d (MCS %d, TBS %d)\n",
+        LOG_I(PHY,"[RN %"PRIu8"] Frame %d subframe %d: Got the MCH PDU for MBSFN  sync area %"PRIu8" (MCS %"PRIu8", TBS %"PRIu16")\n",
 	      phy_vars_rn->Mod_id,phy_vars_rn->frame, subframe,
 	      mch_pduP->sync_area,mch_pduP->mcs,mch_pduP->Pdu_size);
       } else if (phy_vars_rn->mch_avtive[subframe%5] == 1){ // SF2 -> SF7, SF3 -> SF8
@@ -1123,7 +1117,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 	       phy_vars_rn->dlsch_rn_MCH[subframe%5]->harq_processes[0]->TBS>>3);
 	mch_pduP->Pdu_size = (uint16_t) (phy_vars_rn->dlsch_rn_MCH[subframe%5]->harq_processes[0]->TBS>>3);
 	mch_pduP->mcs = phy_vars_rn->dlsch_rn_MCH[subframe%5]->harq_processes[0]->mcs;
-	LOG_I(PHY,"[RN %d] Frame %d subframe %d: Forward the MCH PDU for MBSFN received on SF %d sync area %d (MCS %d, TBS %d)\n",
+        LOG_I(PHY,"[RN %"PRIu8"] Frame %d subframe %d: Forward the MCH PDU for MBSFN received on SF %d sync area %"PRIu8" (MCS %"PRIu8", TBS %"PRIu16")\n",
 	      phy_vars_rn->Mod_id,phy_vars_rn->frame, subframe,subframe%5,
 	      phy_vars_rn->sync_area[subframe%5],mch_pduP->mcs,mch_pduP->Pdu_size);
       } else {
@@ -1135,7 +1129,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
       phy_vars_rn->mch_avtive[subframe]=0;
       break;
     default:
-      LOG_W(PHY,"[eNB %d] Frame %d subframe %d: unknown relaying type %d \n",
+      LOG_W(PHY,"[eNB %"PRIu8"] Frame %d subframe %d: unknown relaying type %d \n",
 	    phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,r_type);
       mch_pduP=NULL;
       break;
@@ -1147,7 +1141,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
       generate_mch(phy_vars_eNB,sched_subframe,(uint8_t*)mch_pduP->payload,abstraction_flag);
 #ifdef DEBUG_PHY
       for (i=0;i<mch_pduP->Pdu_size;i++)
-	msg("%2x.",(uint8_t)mch_pduP->payload[i]);
+        msg("%2"PRIx8".",(uint8_t)mch_pduP->payload[i]);
       msg("\n");
 #endif 
     } else {
@@ -1157,7 +1151,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
   }
     
   else {
-      
+    // this is not a pmch subframe
     
     if (abstraction_flag==0){
       vcd_signal_dumper_dump_function_by_name(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_RS_TX,1);
@@ -1177,12 +1171,12 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 	  generate_pss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
 		       AMP,
 		       &phy_vars_eNB->lte_frame_parms,
-		       (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
+                       (phy_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 6 : 5,
 		       0);
 	  generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
 		       AMP,
 		       &phy_vars_eNB->lte_frame_parms,
-		       (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 5 : 4,
+                       (phy_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 5 : 4,
 		       0);
 	    
 	}
@@ -1191,54 +1185,58 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
   }
 
   if (subframe == 0) {
+    // generate PBCH (Physical Broadcast CHannel) info
     if ((phy_vars_eNB->proc[sched_subframe].frame_tx&3) == 0) {
-      ((uint8_t*) pbch_pdu)[2] = 0;
+      pbch_pdu[2] = 0;
+      // FIXME setting pbch_pdu[2] to zero makes the switch statement easier: remove all the or-operators
       switch (phy_vars_eNB->lte_frame_parms.N_RB_DL) {
       case 6:
-	((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0x1f) | (0<<5);
+        pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (0<<5);
 	break;
       case 15:
-	((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0x1f) | (1<<5);
+        pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (1<<5);
 	break;
       case 25:
-	((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0x1f) | (2<<5);
+        pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (2<<5);
 	break;
       case 50:
-	((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0x1f) | (3<<5);
+        pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (3<<5);
 	break;
       case 75:
-	((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0x1f) | (4<<5);
+        pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (4<<5);
 	break;
       case 100:
-	((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0x1f) | (5<<5);
+        pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (5<<5);
 	break;
       default:
-	((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0x1f) | (2<<5);
+        // FIXME if we get here, this should be flagged as an error, right?
+        pbch_pdu[2] = (pbch_pdu[2]&0x1f) | (2<<5);
 	break;
       }
-      ((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0xef) | 
+      pbch_pdu[2] = (pbch_pdu[2]&0xef) |
 	((phy_vars_eNB->lte_frame_parms.phich_config_common.phich_duration << 4)&0x10);
 	
       switch (phy_vars_eNB->lte_frame_parms.phich_config_common.phich_resource) {
       case oneSixth:
-	((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0xf3) | (0<<2);
+        pbch_pdu[2] = (pbch_pdu[2]&0xf3) | (0<<2);
 	break;
       case half:
-	((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0xf3) | (1<<2);
+        pbch_pdu[2] = (pbch_pdu[2]&0xf3) | (1<<2);
 	break;
       case one:
-	((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0xf3) | (2<<2);
+        pbch_pdu[2] = (pbch_pdu[2]&0xf3) | (2<<2);
 	break;
       case two:
-	((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0xf3) | (3<<2);
+        pbch_pdu[2] = (pbch_pdu[2]&0xf3) | (3<<2);
 	break;
       default:
+        // unreachable
 	break;
       }
 	
-      ((uint8_t*) pbch_pdu)[2] = (((uint8_t*) pbch_pdu)[2]&0xfc) | ((phy_vars_eNB->proc[sched_subframe].frame_tx>>8)&0x3);
-      ((uint8_t*) pbch_pdu)[1] = phy_vars_eNB->proc[sched_subframe].frame_tx&0xfc;
-      ((uint8_t*) pbch_pdu)[0] = 0;
+      pbch_pdu[2] = (pbch_pdu[2]&0xfc) | ((phy_vars_eNB->proc[sched_subframe].frame_tx>>8)&0x3);
+      pbch_pdu[1] = phy_vars_eNB->proc[sched_subframe].frame_tx&0xfc;
+      pbch_pdu[0] = 0;
     }
     /// First half of SSS (TDD)
     if (abstraction_flag==0) {
@@ -1247,25 +1245,26 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 	generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
 		     AMP,
 		     &phy_vars_eNB->lte_frame_parms,
-		     (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
+                     (phy_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 6 : 5,
 		     1);
       }
     }
       
       
-      
-    frame_tx = (((int) (pbch_pdu[2]&0x3))<<8) + ((int) (pbch_pdu[1]&0xfc)) + phy_vars_eNB->proc[sched_subframe].frame_tx%4;
-      
+
+
 #ifdef DEBUG_PHY_PROC
-    LOG_D(PHY,"[eNB %d] Frame %d, subframe %d: Generating PBCH, mode1_flag=%d, frame_tx=%d, pdu=%02x%02x%02x\n",
+    uint16_t frame_tx = (((int) (pbch_pdu[2]&0x3))<<8) + ((int) (pbch_pdu[1]&0xfc)) + phy_vars_eNB->proc[sched_subframe].frame_tx%4;
+
+    LOG_D(PHY,"[eNB %"PRIu8"] Frame %d, subframe %d: Generating PBCH, mode1_flag=%"PRIu8", frame_tx=%"PRIu16", pdu=%02"PRIx8"%02"PRIx8"%02"PRIx8"\n",
 	  phy_vars_eNB->Mod_id,
 	  phy_vars_eNB->proc[sched_subframe].frame_tx, 
 	  subframe,
 	  phy_vars_eNB->lte_frame_parms.mode1_flag,
 	  frame_tx,
-	  ((uint8_t*) pbch_pdu)[2],
-	  ((uint8_t*) pbch_pdu)[1],
-	  ((uint8_t*) pbch_pdu)[0]);
+          pbch_pdu[2],
+          pbch_pdu[1],
+          pbch_pdu[0]);
 #endif
       
     if (abstraction_flag==0) {
@@ -1311,12 +1310,12 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 	generate_pss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
 		     AMP,
 		     &phy_vars_eNB->lte_frame_parms,
-		     (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
+                     (phy_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 6 : 5,
 		     10);
 	generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
 		     AMP,
 		     &phy_vars_eNB->lte_frame_parms,
-		     (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 5 : 4,
+                     (phy_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 5 : 4,
 		     10);
 	  
       }
@@ -1330,7 +1329,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 	generate_sss(phy_vars_eNB->lte_eNB_common_vars.txdataF[0],
 		     AMP,
 		     &phy_vars_eNB->lte_frame_parms,
-		     (phy_vars_eNB->lte_frame_parms.Ncp==0) ? 6 : 5,
+                     (phy_vars_eNB->lte_frame_parms.Ncp==NORMAL) ? 6 : 5,
 		     11);
       }
     }
@@ -1425,7 +1424,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
   DCI_pdu->nCCE = get_nCCE(num_pdcch_symbols,
 			   &phy_vars_eNB->lte_frame_parms,
 			   get_mi(&phy_vars_eNB->lte_frame_parms,subframe));
-  LOG_D(PHY,"num_pdcch_symbols %d, nCCE %d (dci commond %d, dci uespec %d\n",num_pdcch_symbols,DCI_pdu->nCCE,
+  LOG_D(PHY,"num_pdcch_symbols %"PRIu8", nCCE %u (dci commond %"PRIu8", dci uespec %"PRIu8"\n",num_pdcch_symbols,DCI_pdu->nCCE,
 	DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci);
   
 #if defined(SMBV) && !defined(EXMIMO)
@@ -1440,14 +1439,14 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
   for (i=0;i<DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci ; i++) {
 #ifdef DEBUG_PHY_PROC
     if (DCI_pdu->dci_alloc[i].rnti != SI_RNTI) {
-      LOG_D(PHY,"[eNB] Subframe %d : Doing DCI index %d/%d\n",subframe,i,DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci);
+      LOG_D(PHY,"[eNB] Subframe %d : Doing DCI index %"PRIu32"/%d\n",subframe,i,DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci);
       dump_dci(&phy_vars_eNB->lte_frame_parms,&DCI_pdu->dci_alloc[i]);
     }
 #endif
     
     if (DCI_pdu->dci_alloc[i].rnti == SI_RNTI) {
 #ifdef DEBUG_PHY_PROC
-      LOG_D(PHY,"[eNB %d] SI generate_eNB_dlsch_params_from_dci\n", phy_vars_eNB->Mod_id);
+      LOG_D(PHY,"[eNB %"PRIu8"] SI generate_eNB_dlsch_params_from_dci\n", phy_vars_eNB->Mod_id);
 #endif
       generate_eNB_dlsch_params_from_dci(subframe,
 					 &DCI_pdu->dci_alloc[i].dci_pdu[0],
@@ -1461,21 +1460,21 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 					 P_RNTI,
 					 phy_vars_eNB->eNB_UE_stats[0].DL_pmi_single);
       
-      if ((phy_vars_eNB->dlsch_eNB_SI->nCCE[subframe] = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L,
-									DCI_pdu->nCCE,
-									1,
-									SI_RNTI,
-									subframe)) == -1) {
-	LOG_E(PHY,"[eNB %d] Frame %d subframe %d : No available CCE resources for common DCI (SI)!!!\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
+
+      int result = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L, DCI_pdu->nCCE, 1, SI_RNTI, subframe);
+      phy_vars_eNB->dlsch_eNB_SI->nCCE[subframe] = result;
+      if (result == -1) {
+        // FIXME what happens to phy_vars_eNB->dlsch_eNB_SI->nCCE[subframe]?
+        LOG_E(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : No available CCE resources for common DCI (SI)!!!\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
       } 
       else {
-	LOG_T(PHY,"[eNB %d] Frame %d subframe %d : CCE resource for common DCI (SI)  => %d/%d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
+        LOG_T(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for common DCI (SI)  => %"PRIu8"/%u\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
 	      phy_vars_eNB->dlsch_eNB_SI->nCCE[subframe],DCI_pdu->nCCE);
 
 #if defined(SMBV) && !defined(EXMIMO)
 	// configure SI DCI
 	if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
-	  msg("[SMBV] Frame %3d, SI in SF %d DCI %d\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
+          msg("[SMBV] Frame %3d, SI in SF %d DCI %"PRIu32"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
 	  smbv_configure_common_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), "SI", &DCI_pdu->dci_alloc[i], i);
 	}
 #endif
@@ -1485,7 +1484,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
     }
     else if (DCI_pdu->dci_alloc[i].ra_flag == 1) {
 #ifdef DEBUG_PHY_PROC
-      LOG_D(PHY,"[eNB %d] RA generate_eNB_dlsch_params_from_dci\n", phy_vars_eNB->Mod_id);
+      LOG_D(PHY,"[eNB %"PRIu8"] RA generate_eNB_dlsch_params_from_dci\n", phy_vars_eNB->Mod_id);
 #endif
       generate_eNB_dlsch_params_from_dci(subframe,
 					 &DCI_pdu->dci_alloc[i].dci_pdu[0],
@@ -1501,20 +1500,19 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 	  
       //	  mac_xface->macphy_exit("Transmitted RAR, exiting\n");
 
-      if ((phy_vars_eNB->dlsch_eNB_ra->nCCE[subframe] = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L,
-									DCI_pdu->nCCE,
-									1,
-									DCI_pdu->dci_alloc[i].rnti,
-									subframe)) == -1) {
-	LOG_E(PHY,"[eNB %d] Frame %d subframe %d : No available CCE resources for common DCI (RA) !!!\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
+      int result = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L, DCI_pdu->nCCE, 1, DCI_pdu->dci_alloc[i].rnti, subframe);
+      phy_vars_eNB->dlsch_eNB_ra->nCCE[subframe] = result;
+      if (result == -1) {
+        // FIXME what happens to phy_vars_eNB->dlsch_eNB_ra->nCCE[subframe]?
+        LOG_E(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : No available CCE resources for common DCI (RA) !!!\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
       }
       else {
-	LOG_D(PHY,"[eNB %d] Frame %d subframe %d : CCE resource for common DCI (RA)  => %d/%d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
+        LOG_D(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for common DCI (RA)  => %"PRIu8"/%u\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
 	      phy_vars_eNB->dlsch_eNB_ra->nCCE[subframe],DCI_pdu->nCCE);
 #if defined(SMBV) && !defined(EXMIMO)
 	// configure RA DCI
 	if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
-	  msg("[SMBV] Frame %3d, RA in SF %d DCI %d\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
+          msg("[SMBV] Frame %3d, RA in SF %d DCI %"PRIu32"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
 	  smbv_configure_common_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), "RA", &DCI_pdu->dci_alloc[i], i);
 	}
 #endif
@@ -1528,7 +1526,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 
 #ifdef OPENAIR2
 #ifdef DEBUG_PHY_PROC
-      LOG_D(PHY,"[eNB] Searching for RNTI %x\n",DCI_pdu->dci_alloc[i].rnti);
+      LOG_D(PHY,"[eNB] Searching for RNTI %"PRIx16"\n",DCI_pdu->dci_alloc[i].rnti);
 #endif
       UE_id = find_ue((int16_t)DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB);
 #else
@@ -1539,7 +1537,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 #if defined(SMBV) && !defined(EXMIMO)
 	// Configure this user
 	if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
-	  msg("[SMBV] Frame %3d, SF %d (SMBV SF %d) Configuring user %d with RNTI %d in TM%d\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,(smbv_frame_cnt*10) + (subframe),UE_id+1,DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->transmission_mode[(uint8_t)UE_id]);
+          msg("[SMBV] Frame %3d, SF %d (SMBV SF %d) Configuring user %d with RNTI %"PRIu16" in TM%"PRIu8"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,(smbv_frame_cnt*10) + (subframe),UE_id+1,DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->transmission_mode[(uint8_t)UE_id]);
 	  smbv_configure_user(smbv_fname,UE_id+1,phy_vars_eNB->transmission_mode[(uint8_t)UE_id],DCI_pdu->dci_alloc[i].rnti);
 	}
 #endif
@@ -1554,25 +1552,25 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 					   0,
 					   P_RNTI,
 					   phy_vars_eNB->eNB_UE_stats[(uint8_t)UE_id].DL_pmi_single);
-	LOG_D(PHY,"[eNB %d][PDSCH %x/%d] Frame %d subframe %d: Generated dlsch params\n",
-	      phy_vars_eNB->Mod_id,DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->current_harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
-	if ((phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe] = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L,
-											  DCI_pdu->nCCE,
-											  0,
-											  DCI_pdu->dci_alloc[i].rnti,
-											  subframe)) == -1) {
-	  LOG_E(PHY,"[eNB %d] Frame %d subframe %d : No available CCE resources for UE spec DCI (PDSCH %x) !!!\n",
+        LOG_D(PHY,"[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d subframe %d: Generated dlsch params\n",
+              phy_vars_eNB->Mod_id,DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->current_harq_pid,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
+
+        int result = get_nCCE_offset(1<<DCI_pdu->dci_alloc[i].L, DCI_pdu->nCCE, 0, DCI_pdu->dci_alloc[i].rnti, subframe);
+        phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe] = result;
+        if (result == -1) {
+          // FIXME what happens to phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe]?
+          LOG_E(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : No available CCE resources for UE spec DCI (PDSCH %"PRIx16") !!!\n",
 		phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,DCI_pdu->dci_alloc[i].rnti);
 	}
 	else {
-	  LOG_D(PHY,"[eNB %d] Frame %d subframe %d : CCE resource for ue DCI (PDSCH %x)  => %d/%d\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
+          LOG_D(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resource for ue DCI (PDSCH %"PRIx16")  => %"PRIu8"/%u\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,
 		DCI_pdu->dci_alloc[i].rnti,phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe],DCI_pdu->nCCE);
 
 #if defined(SMBV) && !defined(EXMIMO)
 	  DCI_pdu->dci_alloc[i].nCCE = phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe];
 	  // configure UE-spec DCI
 	  if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
-	    msg("[SMBV] Frame %3d, PDSCH in SF %d DCI %d\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
+            msg("[SMBV] Frame %3d, PDSCH in SF %d DCI %"PRIu32"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
 	    smbv_configure_ue_spec_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), UE_id+1, &DCI_pdu->dci_alloc[i], i);
 	  }
 #endif
@@ -1580,7 +1578,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 	DCI_pdu->dci_alloc[i].nCCE = phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->nCCE[subframe];
 #ifdef DEBUG_PHY_PROC      
 	//if (phy_vars_eNB->proc[sched_subframe].frame_tx%100 == 0)
-	LOG_D(PHY,"[eNB %d][DCI][PDSCH %x] Frame %d subframe %d UE_id %d Generated DCI format %d, aggregation %d\n",
+        LOG_D(PHY,"[eNB %"PRIu8"][DCI][PDSCH %"PRIx16"] Frame %d subframe %d UE_id %"PRId8" Generated DCI format %d, aggregation %d\n",
 	      phy_vars_eNB->Mod_id, DCI_pdu->dci_alloc[i].rnti,
 	      phy_vars_eNB->proc[sched_subframe].frame_tx, subframe,UE_id,
 	      DCI_pdu->dci_alloc[i].format,
@@ -1588,8 +1586,8 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 #endif
       }
       else {
-	LOG_D(PHY,"[eNB %d][PDSCH] Frame %d : No UE_id with corresponding rnti %x, dropping DLSCH\n",
-	      phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,(int16_t)DCI_pdu->dci_alloc[i].rnti);
+        LOG_D(PHY,"[eNB %"PRIu8"][PDSCH] Frame %d : No UE_id with corresponding rnti %"PRIx16", dropping DLSCH\n",
+              phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,DCI_pdu->dci_alloc[i].rnti);
       }
     }
 
@@ -1605,7 +1603,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 				   pdcch_alloc2ul_frame(&phy_vars_eNB->lte_frame_parms,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe),
 				   pdcch_alloc2ul_subframe(&phy_vars_eNB->lte_frame_parms,subframe));
       if (harq_pid==255) {
-	LOG_E(PHY,"[eNB %d] Frame %d: Bad harq_pid for ULSCH allocation\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx);
+        LOG_E(PHY,"[eNB %"PRIu8"] Frame %d: Bad harq_pid for ULSCH allocation\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx);
 	mac_exit_wrapper("Invalid harq_pid (255) detected");
       }
 #ifdef OPENAIR2
@@ -1614,12 +1612,12 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
       UE_id = i;
 #endif
       if (UE_id<0) {
-	LOG_E(PHY,"[eNB %d] Frame %d: Unknown UE_id for rnti %x\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,(int16_t)DCI_pdu->dci_alloc[i].rnti);
+        LOG_E(PHY,"[eNB %"PRIu8"] Frame %d: Unknown UE_id for rnti %"PRIx16"\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,DCI_pdu->dci_alloc[i].rnti);
 	mac_exit_wrapper("Invalid UE id (< 0) detected");
       }
 #ifdef DEBUG_PHY_PROC
       //if (phy_vars_eNB->proc[sched_subframe].frame_tx%100 == 0)
-	LOG_D(PHY,"[eNB %d][PUSCH %d] Frame %d subframe %d UL Frame %d, UL Subframe %d, Generated ULSCH (format0) DCI (rnti %x, dci %x) (DCI pos %d/%d), aggregation %d\n",
+        LOG_D(PHY,"[eNB %"PRIu8"][PUSCH %"PRIu8"] Frame %d subframe %d UL Frame %"PRIu32", UL Subframe %"PRIu8", Generated ULSCH (format0) DCI (rnti %"PRIx16", dci %"PRIx8") (DCI pos %"PRIu32"/%d), aggregation %d\n",
 	      phy_vars_eNB->Mod_id, 
 	      subframe2harq_pid(&phy_vars_eNB->lte_frame_parms,
 				pdcch_alloc2ul_frame(&phy_vars_eNB->lte_frame_parms,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe),
@@ -1629,8 +1627,9 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 	      pdcch_alloc2ul_frame(&phy_vars_eNB->lte_frame_parms,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe),
 	      pdcch_alloc2ul_subframe(&phy_vars_eNB->lte_frame_parms,subframe),
 	      DCI_pdu->dci_alloc[i].rnti,
-	      *(unsigned int *)&DCI_pdu->dci_alloc[i].dci_pdu[0],
-	      i,DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci,
+              DCI_pdu->dci_alloc[i].dci_pdu[0],
+              i,
+              DCI_pdu->Num_common_dci + DCI_pdu->Num_ue_spec_dci,
 	      1<<DCI_pdu->dci_alloc[i].L);
 #endif
 
@@ -1653,18 +1652,18 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 						      0,
 						      DCI_pdu->dci_alloc[i].rnti,
 						      subframe)) == -1) {
-	LOG_E(PHY,"[eNB %d] Frame %d subframe %d : No available CCE resources (%d) for UE spec DCI (PUSCH %x) !!!\n",
+        LOG_E(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : No available CCE resources (%u) for UE spec DCI (PUSCH %"PRIx16") !!!\n",
 	      phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,DCI_pdu->nCCE,DCI_pdu->dci_alloc[i].rnti);
       }
       else {
-	LOG_T(PHY,"[eNB %d] Frame %d subframe %d : CCE resources for UE spec DCI (PUSCH %x) => %d/%d\n",
+        LOG_T(PHY,"[eNB %"PRIu8"] Frame %d subframe %d : CCE resources for UE spec DCI (PUSCH %"PRIx16") => %d/%u\n",
 	      phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,DCI_pdu->dci_alloc[i].rnti,
 	      DCI_pdu->dci_alloc[i].nCCE,DCI_pdu->nCCE);
 
 #if defined(SMBV) && !defined(EXMIMO)
 	// configure UE-spec DCI for UL Grant
 	if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
-	  msg("[SMBV] Frame %3d, SF %d UL DCI %d\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
+          msg("[SMBV] Frame %3d, SF %d UL DCI %"PRIu32"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i);
 	  smbv_configure_ue_spec_dci(smbv_fname,(smbv_frame_cnt*10) + (subframe), UE_id+1, &DCI_pdu->dci_alloc[i], i);
 	}
 #endif
@@ -1672,7 +1671,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
       }
       
 #ifdef DEBUG_PHY_PROC
-      LOG_D(PHY,"[eNB %d][PUSCH %d] frame %d subframe %d Setting subframe_scheduling_flag for UE %d harq_pid %d (ul subframe %d)\n",
+      LOG_D(PHY,"[eNB %"PRIu8"][PUSCH %"PRIu8"] frame %d subframe %d Setting subframe_scheduling_flag for UE %"PRIu32" harq_pid %"PRIu8" (ul subframe %"PRIu8")\n",
 	    phy_vars_eNB->Mod_id,harq_pid,
 	    phy_vars_eNB->proc[sched_subframe].frame_tx,subframe,i,harq_pid,
 	    pdcch_alloc2ul_subframe(&phy_vars_eNB->lte_frame_parms,subframe));
@@ -1703,7 +1702,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
   if (abstraction_flag == 0) {
 #ifdef DEBUG_PHY_PROC
     if (DCI_pdu->Num_ue_spec_dci+DCI_pdu->Num_common_dci > 0)
-      LOG_D(PHY,"[eNB %d] Frame %d, subframe %d: Calling generate_dci_top (pdcch) (common %d,ue_spec %d)\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, subframe,DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci);
+      LOG_D(PHY,"[eNB %"PRIu8"] Frame %d, subframe %d: Calling generate_dci_top (pdcch) (common %"PRIu8",ue_spec %"PRIu8")\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, subframe,DCI_pdu->Num_common_dci,DCI_pdu->Num_ue_spec_dci);
 #endif
 
     //    for (sect_id=0;sect_id<number_of_cards;sect_id++) 
@@ -1722,9 +1721,9 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 #endif
   }
 
-#ifdef PHY_ABSTRACTION
+#ifdef PHY_ABSTRACTION // FIXME this ifdef seems suspicious
   else {
-    LOG_D(PHY,"[eNB %d] Frame %d, subframe %d: Calling generate_dci_top_emul\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, subframe);
+    LOG_D(PHY,"[eNB %"PRIu8"] Frame %d, subframe %d: Calling generate_dci_top_emul\n",phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, subframe);
     num_pdcch_symbols = generate_dci_top_emul(phy_vars_eNB,DCI_pdu->Num_ue_spec_dci,DCI_pdu->Num_common_dci,DCI_pdu->dci_alloc,subframe);
   }
 #endif
@@ -1756,17 +1755,17 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 #if defined(SMBV) && !defined(EXMIMO)
     // Configures the data source of allocation (allocation is configured by DCI)
     if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
-      msg("[SMBV] Frame %3d, Configuring SI payload in SF %d alloc %d\n",phy_vars_eNB->proc[sched_subframe].frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
+      msg("[SMBV] Frame %3d, Configuring SI payload in SF %d alloc %"PRIu8"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
       smbv_configure_datalist_for_alloc(smbv_fname, smbv_alloc_cnt++, (smbv_frame_cnt*10) + (subframe), DLSCH_pdu, input_buffer_length);
     }
 #endif      
 
 #ifdef DEBUG_PHY_PROC
 #ifdef DEBUG_DLSCH
-    LOG_D(PHY,"[eNB %d][SI] Frame %d, slot %d: Calling generate_dlsch (SI) with input size = %d, num_pdcch_symbols %d\n",
-	  phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, next_slot, input_buffer_length,num_pdcch_symbols);
+    LOG_D(PHY,"[eNB %"PRIu8"][SI] Frame %d, slot %d: Calling generate_dlsch (SI) with input size = %"PRIu16", num_pdcch_symbols %"PRIu8"\n",
+          phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, next_slot, input_buffer_length,num_pdcch_symbols); // FIXME this code is broken (next_slot?)
     for (i=0;i<input_buffer_length;i++)
-      LOG_T(PHY,"%x.",i,DLSCH_pdu[i]);
+      LOG_T(PHY,"%x.",i,DLSCH_pdu[i]);// FIXME this code is broken (number of arguments)
     LOG_T(PHY,"\n");
 #endif
 #endif
@@ -1825,14 +1824,14 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
   // Check for RA activity
   if (phy_vars_eNB->dlsch_eNB_ra->active == 1) {
 #ifdef DEBUG_PHY_PROC
-    LOG_D(PHY,"[eNB %d][RAPROC] Frame %d, subframe %d, RA active, filling RAR:\n",
+    LOG_D(PHY,"[eNB %"PRIu8"][RAPROC] Frame %d, subframe %d, RA active, filling RAR:\n",
 	  phy_vars_eNB->Mod_id,phy_vars_eNB->proc[sched_subframe].frame_tx, subframe);
 #endif
 
     input_buffer_length = phy_vars_eNB->dlsch_eNB_ra->harq_processes[0]->TBS/8;
 
 #ifdef OPENAIR2
-    crnti = mac_xface->fill_rar(phy_vars_eNB->Mod_id,
+    int16_t crnti = mac_xface->fill_rar(phy_vars_eNB->Mod_id,
 				phy_vars_eNB->CC_id,
 				phy_vars_eNB->proc[sched_subframe].frame_tx,
 				dlsch_input_buffer,
@@ -1870,7 +1869,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 		     phy_vars_eNB->proc[sched_subframe].frame_tx,
 		     &phy_vars_eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_frame,
 		     &phy_vars_eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_subframe);
-      LOG_I(PHY,"[eNB][RAPROC] Frame %d subframe %d, Activated Msg3 demodulation for UE %d in frame %d, subframe %d\n",
+      LOG_I(PHY,"[eNB][RAPROC] Frame %d subframe %d, Activated Msg3 demodulation for UE %"PRId8" in frame %"PRIu32", subframe %"PRIu8"\n",
 	    phy_vars_eNB->proc[sched_subframe].frame_tx,
 	    subframe,
 	    UE_id,
@@ -1889,13 +1888,13 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 #if defined(SMBV) && !defined(EXMIMO)
       // Configures the data source of allocation (allocation is configured by DCI)
       if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
-	msg("[SMBV] Frame %3d, Configuring RA payload in SF %d alloc %d\n",phy_vars_eNB->proc[sched_subframe].frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
+        msg("[SMBV] Frame %3d, Configuring RA payload in SF %d alloc %"PRIu8"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
 	smbv_configure_datalist_for_alloc(smbv_fname, smbv_alloc_cnt++, (smbv_frame_cnt*10) + (subframe), dlsch_input_buffer, input_buffer_length);
       }
 #endif      
 
 #ifdef DEBUG_PHY_PROC
-      LOG_D(PHY,"[eNB %d][RAPROC] Frame %d, subframe %d: Calling generate_dlsch (RA) with input size = %d,Msg3 frame %d, Msg3 subframe %d\n",
+      LOG_D(PHY,"[eNB %"PRIu8"][RAPROC] Frame %d, subframe %d: Calling generate_dlsch (RA) with input size = %"PRIu16",Msg3 frame %"PRIu32", Msg3 subframe %"PRIu8"\n",
 	    phy_vars_eNB->Mod_id,
 	    phy_vars_eNB->proc[sched_subframe].frame_tx, subframe,input_buffer_length, 
 	    phy_vars_eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_frame,
@@ -1941,11 +1940,11 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 			    phy_vars_eNB->dlsch_eNB_ra);
       }
 #endif
-      LOG_D(PHY,"[eNB %d][RAPROC] Frame %d subframe %d Deactivating DLSCH RA\n",phy_vars_eNB->Mod_id,
+      LOG_D(PHY,"[eNB %"PRIu8"][RAPROC] Frame %d subframe %d Deactivating DLSCH RA\n",phy_vars_eNB->Mod_id,
 	    phy_vars_eNB->proc[sched_subframe].frame_tx,subframe);
 	
 #ifdef DEBUG_PHY_PROC    
-      LOG_D(PHY,"[eNB %d] Frame %d, subframe %d, DLSCH (RA) re_allocated = %d\n",phy_vars_eNB->Mod_id,
+      LOG_D(PHY,"[eNB %"PRIu8"] Frame %d, subframe %d, DLSCH (RA) re_allocated = %"PRIu16"\n",phy_vars_eNB->Mod_id,
 	    phy_vars_eNB->proc[sched_subframe].frame_tx, subframe, re_allocated);
 #endif
 
@@ -1965,7 +1964,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
       
 
 #ifdef DEBUG_PHY_PROC
-      LOG_D(PHY,"[eNB %d][PDSCH %x/%d] Frame %d, subframe %d: Generating PDSCH/DLSCH with input size = %d, G %d, nb_rb %d, mcs %d, pmi_alloc %x, rv %d (round %d)\n",
+      LOG_D(PHY,"[eNB %"PRIu8"][PDSCH %"PRIx16"/%"PRIu8"] Frame %d, subframe %d: Generating PDSCH/DLSCH with input size = %"PRIu16", G %d, nb_rb %"PRIu16", mcs %"PRIu8", pmi_alloc %"PRIx16", rv %"PRIu8" (round %"PRIu8")\n",
 	    phy_vars_eNB->Mod_id, phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->rnti,harq_pid,
 	    phy_vars_eNB->proc[sched_subframe].frame_tx, subframe, input_buffer_length,
 	    get_G(&phy_vars_eNB->lte_frame_parms,
@@ -2002,7 +2001,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 #if defined(SMBV) && !defined(EXMIMO)
 	// Configures the data source of allocation (allocation is configured by DCI)
 	if (smbv_is_config_frame(phy_vars_eNB->proc[sched_subframe].frame_tx) && (smbv_frame_cnt < 4)) {
-	  msg("[SMBV] Frame %3d, Configuring PDSCH payload in SF %d alloc %d\n",phy_vars_eNB->proc[sched_subframe].frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
+          msg("[SMBV] Frame %3d, Configuring PDSCH payload in SF %d alloc %"PRIu8"\n",phy_vars_eNB->proc[sched_subframe].frame_tx,(smbv_frame_cnt*10) + (subframe),smbv_alloc_cnt);
 	  smbv_configure_datalist_for_user(smbv_fname, UE_id+1, DLSCH_pdu, input_buffer_length);
 	}
 #endif      
@@ -2012,7 +2011,7 @@ void phy_procedures_eNB_TX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_e
 #ifdef DEBUG_DLSCH
 	LOG_T(PHY,"eNB DLSCH SDU: \n");
 	for (i=0;i<phy_vars_eNB->dlsch_eNB[(uint8_t)UE_id][0]->harq_processes[harq_pid]->TBS>>3;i++)
-	  LOG_T(PHY,"%x.",(uint8_t)DLSCH_pdu[i]);
+          LOG_T(PHY,"%"PRIx8".",DLSCH_pdu[i]);
 	LOG_T(PHY,"\n");
 #endif
 #endif
@@ -2160,7 +2159,7 @@ void process_Msg3(PHY_VARS_eNB *phy_vars_eNB,uint8_t sched_subframe,uint8_t UE_i
   
   if ((phy_vars_eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_active == 1) && 
       (phy_vars_eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_subframe == subframe) &&
-      (phy_vars_eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_frame == frame))   {
+      (phy_vars_eNB->ulsch_eNB[(uint32_t)UE_id]->Msg3_frame == (uint32_t)frame))   {
     
     //    harq_pid = 0;
     
@@ -2667,13 +2666,19 @@ void prach_procedures(PHY_VARS_eNB *phy_vars_eNB,uint8_t sched_subframe,uint8_t
 
 void ulsch_decoding_procedures(unsigned char subframe, unsigned int i, PHY_VARS_eNB *phy_vars_eNB, unsigned char abstraction_flag)
 {
+  UNUSED(subframe);
+  UNUSED(i);
+  UNUSED(phy_vars_eNB);
+  UNUSED(abstraction_flag);
   LOG_D(PHY,"ulsch_decoding_procedures not yet implemented. should not be called");
 }
 
 
 
-void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type) {
+void phy_procedures_eNB_RX(unsigned char sched_subframe,PHY_VARS_eNB *phy_vars_eNB,uint8_t abstraction_flag,relaying_type_t r_type)
+{
   //RX processing
+  UNUSED(r_type);
   uint32_t l, ret=0,i,j,k;
   uint32_t sect_id=0;
   uint32_t harq_pid, harq_idx, round;
diff --git a/openair1/SIMULATION/LTE_PHY/Makefile b/openair1/SIMULATION/LTE_PHY/Makefile
index f662c1172ad67c79f7a3415c9aa498741a1bfa4f..99c6c8cb56c0726c99ae3fcdbcb7f93d1847c88b 100644
--- a/openair1/SIMULATION/LTE_PHY/Makefile
+++ b/openair1/SIMULATION/LTE_PHY/Makefile
@@ -192,5 +192,6 @@ showflags :
 showobj:
 	@echo $(SCHED_OBJS)
 
-run: syncsim
-	rtai-load --verbose
+cppcheck:
+	@echo "cppcheck ..."
+	cppcheck $(INCLUDES) ${OBJ:.o=.c} ${OAISIM_OBJS,.o=.c} ${ASN1_RRC_MSG_OBJS1,.o=.c}
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index 3689c8d8b732d0c080359be94a8035466ccc0e46..cde6df34a41b82524a4b6418e62adb2c7df8d6a6 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -1839,6 +1839,8 @@ static void *UE_thread_synch(void *arg) {
   sync_mode_t sync_mode = rssi;
   int rssi_lin,rssi_min,rssi_max,rssi_avg;
   double rssi_dBm,rssi_min_dBm,rssi_max_dBm;
+  int16_t spectrum[1024*2];
+  int16_t power_avg[600];
 
   printf("UE_thread_sync in with PHY_vars_UE %p\n",arg);
 #ifdef USRP
@@ -1901,11 +1903,22 @@ static void *UE_thread_synch(void *arg) {
 	rssi_min = 1<<31;
 	rssi_max = 0;
 	rssi_avg = 0;
-	for (i=0;i<76800;i+=7680) {
-	
+	memset(power_dBm_max,0,1024);
+	for (i=0;i<76800*4;i+=1024) {
+	  //compute frequency-domain representation of 1024-sample chunk
+	  dft1024(&PHY_vars_UE_g[0][0]->lte_ue_common_vars.rxdata[0][i],
+		  spectrum,
+		  1);
+	  compute_spectrum_stats(spectrum,
+				 power_avg,
+				 power_max,
+				 power_min,
+				 PHY_vars_UE_g[0][0]->rx_total_gain_dB);
+	}
+	  /*
 	rssi_lin = signal_energy(&PHY_vars_UE_g[0][0]->lte_ue_common_vars.rxdata[0][i],7680);
 	if (PHY_vars_UE_g[0][0]->lte_frame_parms.nb_antennas_rx>1)
-	  rssi_lin += signal_energy(&PHY_vars_UE_g[0][0]->lte_ue_common_vars.rxdata[0][i],7680);
+	  rssi_lin += signal_energy(&PHY_vars_UE_g[0][0]->lte_ue_common_vars.rxdata[1][i],7680);
 	rssi_avg += rssi;
 	rssi_min = (rssi < rssi_min) ? rssi : rssi_min;
 	rssi_max = (rssi > rssi_max) ? rssi : rssi_max;
@@ -1945,7 +1958,7 @@ static void *UE_thread_synch(void *arg) {
 #endif
       }
     }	
-
+	  */
 	  break;
       case pbch:
 	
diff --git a/targets/SIMU/USER/Makefile b/targets/SIMU/USER/Makefile
index ebc6cd84f538fb51b12528befa0dbdfea98da3e3..1a9b65634a04c9e71feba86a7e9f7c6d1f7ed20a 100644
--- a/targets/SIMU/USER/Makefile
+++ b/targets/SIMU/USER/Makefile
@@ -438,6 +438,9 @@ cleancell:
 cleanlfds:
 	$(MAKE) -C $(LFDS_DIR) -f makefile.linux clean
 
+cppcheck:
+	@echo "cppcheck oaisim ..."
+	cppcheck $(INCLUDES) ${OBJ:.o=.c} ${OAISIM_OBJS,.o=.c} ${ASN1_RRC_MSG_OBJS1,.o=.c}
 print:
 	@echo "OBJ "				$(OBJ)
 	@echo "OAISIM_OBJS "		$(OAISIM_OBJS)