diff --git a/openair1/PHY/CODING/lte_segmentation.c b/openair1/PHY/CODING/lte_segmentation.c
index 235e3a6086331de49df846da401d5eb8252f102b..df3a58c5293474e6198ddf895be6b00e5a6dace3 100644
--- a/openair1/PHY/CODING/lte_segmentation.c
+++ b/openair1/PHY/CODING/lte_segmentation.c
@@ -167,72 +167,7 @@ int lte_segmentation(unsigned char *input_buffer,
   return(0);
 }
 
-// uint8_t eNB_id,uint8_t harq_pid, uint8_t UE_id,
-int16_t estimate_ue_tx_power(uint32_t tbs, uint32_t nb_rb, uint8_t control_only, lte_prefix_type_t ncp, uint8_t use_srs){
-
-  /// The payload + CRC size in bits, "B" 
-  uint32_t B;  
-  /// Number of code segments 
-  uint32_t C;                         
-  /// Number of "small" code segments 
-  uint32_t Cminus;                    
-  /// Number of "large" code segments 
-  uint32_t Cplus;                     
-  /// Number of bits in "small" code segments (<6144) 
-  uint32_t Kminus;                    
-  /// Number of bits in "large" code segments (<6144) 
-  uint32_t Kplus;                     
-  /// Total number of bits across all segments
-  uint32_t sumKr;
-  /// Number of "Filler" bits 
-  uint32_t F;                         
-  // num resource elements
-  uint32_t num_re=0.0;
-  // num symbols
-  uint32_t num_symb=0.0;
-  /// effective spectral efficiency of the PUSCH
-  uint32_t MPR_x100=0; 
-  /// beta_offset
-  uint16_t beta_offset_pusch_x8=8;
-  /// delta mcs
-  float delta_mcs=0.0;
-  /// bandwidth factor 
-  float bw_factor=0.0;
-
-  B= tbs+24;
-  lte_segmentation(NULL,
-		   NULL,
-		   B,
-		   &C,
-		   &Cplus,
-		   &Cminus,
-		   &Kplus,
-		   &Kminus,		     
-		   &F);
- 
-
-  sumKr = Cminus*Kminus + Cplus*Kplus;    
-  num_symb = 12-(ncp<<1)-(use_srs==0?0:1);
-  num_re = num_symb * nb_rb * 12;
-  
-  if (num_re == 0)
-    return(0);
-
-  MPR_x100 = 100*sumKr/num_re;
-  if (control_only == 1 )
-    beta_offset_pusch_x8=8; // fixme
-  //(beta_offset_pusch_x8=phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->control_only == 1) ? phy_vars_ue->ulsch_ue[eNB_id]->beta_offset_cqi_times8:8;
 
-  // if deltamcs_enabledm
-  delta_mcs = ((hundred_times_delta_TF[MPR_x100/6]+10*dB_fixed_times10((beta_offset_pusch_x8)>>3))/100.0);
-  bw_factor = (hundred_times_log10_NPRB[nb_rb-1]/100.0);
-#ifdef DEBUG_SEGMENTATION
- printf("estimated ue tx power %d (num_re %d, sumKr %d, mpr_x100 %d, delta_mcs %f, bw_factor %f)\n", 
-	(int16_t)ceil(delta_mcs + bw_factor), num_re, sumKr, MPR_x100, delta_mcs, bw_factor);
-#endif 
-  return (int16_t)ceil(delta_mcs + bw_factor);
-  
-}
 
 #ifdef MAIN
 main() {
diff --git a/openair1/SCHED/pusch_pc.c b/openair1/SCHED/pusch_pc.c
index e81d65e91572606b0092e399b82ca94d33c7608d..46b53ee80727a600ed1412e3772025c1e0e430ee 100644
--- a/openair1/SCHED/pusch_pc.c
+++ b/openair1/SCHED/pusch_pc.c
@@ -182,3 +182,69 @@ int8_t get_PHR(uint8_t Mod_id, uint8_t CC_id,uint8_t eNB_index){
   return PHY_vars_UE_g[Mod_id][CC_id]->ulsch_ue[eNB_index]->PHR; 
 }
 
+// uint8_t eNB_id,uint8_t harq_pid, uint8_t UE_id,
+int16_t estimate_ue_tx_power(uint32_t tbs, uint32_t nb_rb, uint8_t control_only, lte_prefix_type_t ncp, uint8_t use_srs){
+
+  /// The payload + CRC size in bits, "B" 
+  uint32_t B;  
+  /// Number of code segments 
+  uint32_t C;                         
+  /// Number of "small" code segments 
+  uint32_t Cminus;                    
+  /// Number of "large" code segments 
+  uint32_t Cplus;                     
+  /// Number of bits in "small" code segments (<6144) 
+  uint32_t Kminus;                    
+  /// Number of bits in "large" code segments (<6144) 
+  uint32_t Kplus;                     
+  /// Total number of bits across all segments
+  uint32_t sumKr;
+  /// Number of "Filler" bits 
+  uint32_t F;                         
+  // num resource elements
+  uint32_t num_re=0.0;
+  // num symbols
+  uint32_t num_symb=0.0;
+  /// effective spectral efficiency of the PUSCH
+  uint32_t MPR_x100=0; 
+  /// beta_offset
+  uint16_t beta_offset_pusch_x8=8;
+  /// delta mcs
+  float delta_mcs=0.0;
+  /// bandwidth factor 
+  float bw_factor=0.0;
+
+  B= tbs+24;
+  lte_segmentation(NULL,
+		   NULL,
+		   B,
+		   &C,
+		   &Cplus,
+		   &Cminus,
+		   &Kplus,
+		   &Kminus,		     
+		   &F);
+ 
+
+  sumKr = Cminus*Kminus + Cplus*Kplus;    
+  num_symb = 12-(ncp<<1)-(use_srs==0?0:1);
+  num_re = num_symb * nb_rb * 12;
+  
+  if (num_re == 0)
+    return(0);
+
+  MPR_x100 = 100*sumKr/num_re;
+  if (control_only == 1 )
+    beta_offset_pusch_x8=8; // fixme
+  //(beta_offset_pusch_x8=phy_vars_ue->ulsch_ue[eNB_id]->harq_processes[harq_pid]->control_only == 1) ? phy_vars_ue->ulsch_ue[eNB_id]->beta_offset_cqi_times8:8;
+
+  // if deltamcs_enabledm
+  delta_mcs = ((hundred_times_delta_TF[MPR_x100/6]+10*dB_fixed_times10((beta_offset_pusch_x8)>>3))/100.0);
+  bw_factor = (hundred_times_log10_NPRB[nb_rb-1]/100.0);
+#ifdef DEBUG_SEGMENTATION
+ printf("estimated ue tx power %d (num_re %d, sumKr %d, mpr_x100 %d, delta_mcs %f, bw_factor %f)\n", 
+	(int16_t)ceil(delta_mcs + bw_factor), num_re, sumKr, MPR_x100, delta_mcs, bw_factor);
+#endif 
+  return (int16_t)ceil(delta_mcs + bw_factor);
+  
+}
diff --git a/openair1/SIMULATION/LTE_PHY/Makefile b/openair1/SIMULATION/LTE_PHY/Makefile
index 0774ec77453f54d38562c87c6a414faa777b4595..6f6bc10226b3e8e40f6323250cd05caf96fa2c88 100644
--- a/openair1/SIMULATION/LTE_PHY/Makefile
+++ b/openair1/SIMULATION/LTE_PHY/Makefile
@@ -102,7 +102,6 @@ endif
 
 include $(COMMON_UTILS_DIR)/Makefile.inc
 include $(TOP_DIR)/PHY/Makefile.inc
-SCHED_OBJS = $(TOP_DIR)/SCHED/phy_procedures_lte_common.o #$(TOP_DIR)/SCHED/phy_procedures_lte_eNb.o $(TOP_DIR)/SCHED/phy_procedures_lte_ue.o
 include $(TOP_DIR)/SCHED/Makefile.inc
 include $(TOP_DIR)/SIMULATION/Makefile.inc
 include $(OPENAIR2_DIR)/LAYER2/Makefile.inc
@@ -198,5 +197,8 @@ showflags :
 	@echo $(CFLAGS)
 	@echo $(LFLAGS)
 
+showobj:
+	@echo $(SCHED_OBJS)
+
 run: syncsim
 	rtai-load --verbose
diff --git a/openair1/USERSPACE_TOOLS/MATLAB/Makefile b/openair1/USERSPACE_TOOLS/MATLAB/Makefile
index 7e1d3bfbcdf1bf0c1551d81cbd5387c5767c84f2..d7eea1d88e73a3eda7be8285227f7913af2ce577 100644
--- a/openair1/USERSPACE_TOOLS/MATLAB/Makefile
+++ b/openair1/USERSPACE_TOOLS/MATLAB/Makefile
@@ -1,13 +1,45 @@
-include $(OPENAIR1_DIR)/SIMULATION/LTE_PHY/Makefile
+#include $(OPENAIR1_DIR)/SIMULATION/LTE_PHY/Makefile
 
-CFLAGS += -DMEX
-CFLAGS += -I/opt/MATLAB/extern/include/
+SSE3PROC = $(shell echo `grep ssse3 /proc/cpuinfo`) 
+SSE4PROC = $(shell echo `grep sse4 /proc/cpuinfo`) 
+CPUFLAGS = -mmmx -msse -msse2 -mssse3 -msse4.1
+#CPUFLAGS += $(shell if [ -z $(SSE3PROC) ]; then echo "" ; else echo "-mssse3"; fi)
+#CPUFLAGS += $(shell if [ -z $(SSE4PROC) ]; then echo "" ; else echo "-msse4"; fi)
+
+COMMON_UTILS_DIR = $(OPENAIR_HOME)/common/utils
+TOP_DIR = $(OPENAIR1_DIR)
+OPENAIR1_TOP = $(OPENAIR1_DIR)
+OPENAIR2_TOP = $(OPENAIR2_DIR)
+OPENAIR3 = $(OPENAIR3_DIR)
+
+CFLAGS = -g -ggdb -Wno-strict-aliasing -rdynamic -DMAX_NUM_CCs=1 -Wall -DPHYSIM -DNODE_RG -DUSER_MODE -DNB_ANTENNAS_RX=2 -DNB_ANTENNAS_TXRX=2 -DNB_ANTENNAS_TX=2 -DPHY_CONTEXT=1 $(CPUFLAGS) -DMALLOC_CHECK_=1 -DENABLE_VCD_FIFO # -Wno-packed-bitfield-compat
+
+CFLAGS += -DOPENAIR_LTE -DNO_RRM -DOPENAIR1 #-DPHY_ABSTRACTION #-DOPENAIR2
+
+CFLAGS += -I/usr/include/X11 -I/usr/X11R6/include
+
+include $(COMMON_UTILS_DIR)/Makefile.inc
+include $(TOP_DIR)/PHY/Makefile.inc
+include $(TOP_DIR)/SCHED/Makefile.inc
+SCHED_OBJS = $(TOP_DIR)/SCHED/phy_procedures_lte_common.o #$(TOP_DIR)/SCHED/phy_procedures_lte_eNb.o $(TOP_DIR)/SCHED/phy_procedures_lte_ue.o
+include $(TOP_DIR)/SIMULATION/Makefile.inc
+include $(OPENAIR2_DIR)/LAYER2/Makefile.inc
+include $(OPENAIR2_DIR)/UTIL/Makefile.inc
+include $(OPENAIR2_DIR)/RRC/LITE/MESSAGES/Makefile.inc
+
+ASN1_MSG_INC = $(OPENAIR2_DIR)/RRC/LITE/MESSAGES
+
+CFLAGS += $(L2_incl) -I$(ASN1_MSG_INC) -I$(TOP_DIR) -I$(OPENAIR2_DIR) -I$(OPENAIR3) $(UTIL_incl) $(UTILS_incl)
+
+CFLAGS += -DMEX -fPIC -g
+CFLAGS += -I/opt/MATLAB/R2014a/extern/include/
 
 # Set mex extension, can be determined with mexext function in Matlab
 MEXEXT = mexglx
 
+
 # Just compile all the PHY objects
-OBJ = $(PHY_OBJS) $(TOP_DIR)/SIMULATION/TOOLS/taus.o $(LOG_DIR)/log.o $(LOG_DIR)/vcd_signal_dumper.o
+OBJ = $(PHY_OBJS) $(TOP_DIR)/SIMULATION/TOOLS/taus.o $(LOG_DIR)/log.o $(LOG_DIR)/vcd_signal_dumper.o 
 
 # List of all mex-files to compile
 MEX_FILES += ./PHY/LTE_TRANSPORT/mexfiles/get_tbs.$(MEXEXT)
@@ -48,10 +80,15 @@ $(MEX_FILES) : %.$(MEXEXT) : %.c
 mex : $(MEX_FILES)
 
 cleanlibs :
-	rm $(LIBDIR)/lib$(LIBNAME).*
+	rm -f $(LIBDIR)/lib$(LIBNAME).*
 
 cleanmex :
 	rm -f $(MEX_FILES)
 
+clean:
+	rm -f $(OBJ)
+
+cleanall: clean cleanlibs cleanmex
+
 show :
-	echo $(CFLAGS)
+	echo $(ASN1_MSG_INC)
diff --git a/openair1/USERSPACE_TOOLS/MATLAB/PHY/LTE_TRANSPORT/mexfiles/dlsch_decoding.c b/openair1/USERSPACE_TOOLS/MATLAB/PHY/LTE_TRANSPORT/mexfiles/dlsch_decoding.c
index 7bcf79224b6003f7a2a7ef99b93437dff82256fc..26a5654c4e3c2947a19e26d6e5534a34d6aceda8 100644
--- a/openair1/USERSPACE_TOOLS/MATLAB/PHY/LTE_TRANSPORT/mexfiles/dlsch_decoding.c
+++ b/openair1/USERSPACE_TOOLS/MATLAB/PHY/LTE_TRANSPORT/mexfiles/dlsch_decoding.c
@@ -12,7 +12,7 @@
 *
 ===============================================================================*/
 
-//#define DEBUG_DLSCH_DECODING
+#define DEBUG_DLSCH_DECODING
 
 void mexFunction( int mlhs, mxArray *plhs[],
                   int nrhs, const mxArray *prhs[]
@@ -34,7 +34,7 @@ void mexFunction( int mlhs, mxArray *plhs[],
 	LTE_DL_FRAME_PARMS *frame_parms;
 	PHY_VARS_UE *phy_vars_ue;   
 	extern int *pi2tab16[188],*pi5tab16[188],*pi4tab16[188],*pi6tab16[188];
-    unsigned int *ptr_td;
+	unsigned long *ptr_td; //hack for 64bit
     int *tmp[1];
     
 	/* Allocate input */
@@ -107,7 +107,7 @@ void mexFunction( int mlhs, mxArray *plhs[],
 	
     
  	mod_order = get_Qm(dlsch->harq_processes[harq_pid]->mcs);
-	dlsch->harq_processes[harq_pid]->G = get_G(frame_parms,dlsch->harq_processes[harq_pid]->nb_rb,dlsch->harq_processes[harq_pid]->rb_alloc,mod_order,num_pdcch_symbols,0,subframe);
+	dlsch->harq_processes[harq_pid]->G = get_G(frame_parms,dlsch->harq_processes[harq_pid]->nb_rb,dlsch->harq_processes[harq_pid]->rb_alloc,mod_order,dlsch->harq_processes[harq_pid]->Nl,num_pdcch_symbols,0,subframe);
 
     #ifdef DEBUG_DLSCH_DECODING
     mexPrintf("TBS %d\n",dlsch->harq_processes[harq_pid]->TBS);
diff --git a/openair1/USERSPACE_TOOLS/MATLAB/PHY/LTE_TRANSPORT/mexfiles/dlsch_decoding_init.c b/openair1/USERSPACE_TOOLS/MATLAB/PHY/LTE_TRANSPORT/mexfiles/dlsch_decoding_init.c
index f1ffcdb70f6148f6e3a26a75b2e3add71aa424b5..a62f1e6f2440db1eb6e5d65baf91851afa6aa0a0 100644
--- a/openair1/USERSPACE_TOOLS/MATLAB/PHY/LTE_TRANSPORT/mexfiles/dlsch_decoding_init.c
+++ b/openair1/USERSPACE_TOOLS/MATLAB/PHY/LTE_TRANSPORT/mexfiles/dlsch_decoding_init.c
@@ -12,7 +12,7 @@
 *
 ===============================================================================*/
 
-//#define DEBUG_DLSCH_DECODING_INIT
+#define DEBUG_DLSCH_DECODING_INIT
 
 void mexFunction( int mlhs, mxArray *plhs[],
                   int nrhs, const mxArray *prhs[]
@@ -20,7 +20,7 @@ void mexFunction( int mlhs, mxArray *plhs[],
 {
     extern int *pi2tab16[188],*pi5tab16[188],*pi4tab16[188],*pi6tab16[188];
     int i;        
-    unsigned int *ptr;
+    unsigned long *ptr; //hack for 64bit
     int **tmp[1];
     
     // Init CRC tables
@@ -28,7 +28,7 @@ void mexFunction( int mlhs, mxArray *plhs[],
 	init_td16();
     
     // assign output
-    plhs[0] = mxCreateNumericMatrix(4,1, mxUINT32_CLASS, mxREAL);
+    plhs[0] = mxCreateNumericMatrix(4,1, mxUINT64_CLASS, mxREAL);
     ptr = (unsigned int*) mxGetData(plhs[0]);
         
     tmp[0] = &pi2tab16[0];
diff --git a/openair1/USERSPACE_TOOLS/MATLAB/PHY/LTE_TRANSPORT/mexfiles/dlsch_encoding.c b/openair1/USERSPACE_TOOLS/MATLAB/PHY/LTE_TRANSPORT/mexfiles/dlsch_encoding.c
index 4d453ad1719ddf23f712ffa726d93cd13528fd3f..d7a67093c5fa5a0932790bccbb14f315635a4576 100644
--- a/openair1/USERSPACE_TOOLS/MATLAB/PHY/LTE_TRANSPORT/mexfiles/dlsch_encoding.c
+++ b/openair1/USERSPACE_TOOLS/MATLAB/PHY/LTE_TRANSPORT/mexfiles/dlsch_encoding.c
@@ -171,7 +171,7 @@ void mexFunction( int nlhs, mxArray *plhs[],
 	}
 	
  	mod_order = get_Qm(dlsch->harq_processes[harq_pid]->mcs);
-	G = get_G(frame_parms,dlsch->nb_rb,dlsch->rb_alloc,mod_order,num_pdcch_symbols,0,subframe);
+	G = get_G(frame_parms,dlsch->nb_rb,dlsch->rb_alloc,mod_order,dlsch->harq_processes[harq_pid]->Nl,num_pdcch_symbols,0,subframe);
 	
 	#ifdef DEBUG_DLSCH_ENCODING
 	mexPrintf("dlsch->current_harq_pid = %d\n", dlsch->current_harq_pid);
diff --git a/openair1/USERSPACE_TOOLS/MATLAB/defs.h b/openair1/USERSPACE_TOOLS/MATLAB/defs.h
index d616446fcef621890a74e388c04d23ddaa4bf83c..9dac90efe9b446a35091f04e0ba209e64f0cc9d9 100644
--- a/openair1/USERSPACE_TOOLS/MATLAB/defs.h
+++ b/openair1/USERSPACE_TOOLS/MATLAB/defs.h
@@ -29,6 +29,7 @@
 #include "mex.h"
 #include "../../SIMULATION/TOOLS/defs.h"
 #include "../../PHY/types.h"
+#include "../../PHY/TOOLS/defs.h"
 #include "../../PHY/defs.h"
 #include "../../PHY/vars.h"
 #include "../../MAC_INTERFACE/vars.h"