diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab
index ad97588d9b3cf80814d9eea138f4da52c02b78a5..f5a0514a1e35af923513fe2cebbb29d147fec0f9 100644
--- a/ci-scripts/Jenkinsfile-gitlab
+++ b/ci-scripts/Jenkinsfile-gitlab
@@ -8,7 +8,7 @@ pipeline {
         disableConcurrentBuilds()
         timestamps()
         gitLabConnection('OAI GitLab')
-        gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Analysis with cppcheck"])
+        gitlabBuilds(builds: ["Build eNb-USRP", "Build basic-sim", "Build phy-sim", "Build eNb-ethernet", "Build UE--ethernet", "Analysis with cppcheck"])
     }
 
     stages {
@@ -52,28 +52,42 @@ pipeline {
                 stage ("Analysis with cppcheck") {
                     steps {
                         gitlabCommitStatus(name: "Analysis with cppcheck") {
-                            sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant cppcheck"
+                            sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant cppcheck --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
                         }
                     }
                 }
                 stage ("Build eNb-USRP") {
                     steps {
                         gitlabCommitStatus(name: "Build eNb-USRP") {
-                            sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant enb-usrp"
+                            sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant enb-usrp --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
                         }
                     }
                 }
                 stage ("Build basic simulator") {
                     steps {
                         gitlabCommitStatus(name: "Build basic-sim") {
-                            sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant basic-sim"
+                            sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant basic-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
                         }
                     }
                 }
                 stage ("Build physical simulators") {
                     steps {
                         gitlabCommitStatus(name: "Build phy-sim") {
-                            sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant phy-sim"
+                            sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant phy-sim --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
+                        }
+                    }
+                }
+                stage ("Build eNb-ethernet") {
+                    steps {
+                        gitlabCommitStatus(name: "Build eNb-ethernet") {
+                            sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant enb-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
+                        }
+                    }
+                }
+                stage ("Build UE-ethernet") {
+                    steps {
+                        gitlabCommitStatus(name: "Build UE-ethernet") {
+                            sh "./ci-scripts/buildOnVM.sh --workspace $WORKSPACE --variant ue-ethernet --job-name ${JOB_NAME} --build-id ${BUILD_ID} --keep-vm-alive"
                         }
                     }
                 }
@@ -82,7 +96,7 @@ pipeline {
                 always {
                     script {
                         dir ('archives') {
-                            sh "zip -r vm_build_logs.zip basic_sim enb_usrp phy_sim cppcheck"
+                            sh "zip -r -qq vm_build_logs.zip basic_sim enb_usrp phy_sim cppcheck enb_eth ue_eth"
                         }
                         if(fileExists('archives/vm_build_logs.zip')) {
                             archiveArtifacts artifacts: 'archives/vm_build_logs.zip'
@@ -99,11 +113,18 @@ pipeline {
                 }
             }
         }
+
+        stage ("Destroy all Virtual Machines") {
+            steps {
+                sh "./ci-scripts/destroyAllRunningVM.sh --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
+            }
+        }
     }
     post {
         always {
             script {
-                echo "End of script"
+                // Stage destroy may not be run if error in previous stage
+                sh "./ci-scripts/destroyAllRunningVM.sh --job-name ${JOB_NAME} --build-id ${BUILD_ID}"
             }
         }
         success {
diff --git a/ci-scripts/buildOnVM.sh b/ci-scripts/buildOnVM.sh
index c5389c2b5065228f10d7868789b35ccb7de3e742..11495253641a944d1efa7390d0d2ebab7ad4ac5e 100755
--- a/ci-scripts/buildOnVM.sh
+++ b/ci-scripts/buildOnVM.sh
@@ -15,13 +15,21 @@ function usage {
     echo ""
     echo "Options:"
     echo "--------"
+    echo "    --job-name #### OR -jn ####"
+    echo "    Specify the name of the Jenkins job."
+    echo ""
+    echo "    --build-id #### OR -id ####"
+    echo "    Specify the build ID of the Jenkins job."
+    echo ""
     echo "    --workspace #### OR -ws ####"
     echo "    Specify the workspace."
     echo ""
-    echo "    --variant enb-usrp   OR -v1"
-    echo "    --variant basic-sim  OR -v2"
-    echo "    --variant phy-sim    OR -v3"
-    echo "    --variant cppcheck   OR -v4"
+    echo "    --variant enb-usrp     OR -v1"
+    echo "    --variant basic-sim    OR -v2"
+    echo "    --variant phy-sim      OR -v3"
+    echo "    --variant cppcheck     OR -v4"
+    echo "    --variant enb-ethernet OR -v7"
+    echo "    --variant ue-ethernet  OR -v8"
     echo "    Specify the variant to build."
     echo ""
     echo "    --keep-vm-alive OR -k"
@@ -36,14 +44,16 @@ function variant_usage {
     echo "OAI VM Build Check script"
     echo "   Original Author: Raphael Defosseux"
     echo ""
-    echo "    --variant enb-usrp   OR -v1"
-    echo "    --variant basic-sim  OR -v2"
-    echo "    --variant phy-sim    OR -v3"
-    echo "    --variant cppcheck   OR -v4"
+    echo "    --variant enb-usrp     OR -v1"
+    echo "    --variant basic-sim    OR -v2"
+    echo "    --variant phy-sim      OR -v3"
+    echo "    --variant cppcheck     OR -v4"
+    echo "    --variant enb-ethernet OR -v7"
+    echo "    --variant ue-ethernet  OR -v8"
     echo ""
 }
 
-if [ $# -lt 1 ] || [ $# -gt 5 ]
+if [ $# -lt 1 ] || [ $# -gt 9 ]
 then
     echo "Syntax Error: not the correct number of arguments"
     echo ""
@@ -51,6 +61,9 @@ then
     exit 1
 fi
 
+VM_TEMPLATE=ci-
+JOB_NAME=XX
+BUILD_ID=XX
 VM_NAME=ci-enb-usrp
 ARCHIVES_LOC=enb_usrp
 LOG_PATTERN=.Rel14.txt
@@ -68,6 +81,16 @@ case $key in
     usage
     exit 0
     ;;
+    -jn|--job-name)
+    JOB_NAME="$2"
+    shift
+    shift
+    ;;
+    -id|--build-id)
+    BUILD_ID="$2"
+    shift
+    shift
+    ;;
     -ws|--workspace)
     JENKINS_WKSP="$2"
     shift
@@ -109,6 +132,22 @@ case $key in
     BUILD_OPTIONS="--enable=warning --force --xml --xml-version=2"
     shift
     ;;
+    -v7)
+    VM_NAME=ci-enb-ethernet
+    ARCHIVES_LOC=enb_eth
+    LOG_PATTERN=.Rel14.txt
+    NB_PATTERN_FILES=6
+    BUILD_OPTIONS="--eNB -t ETHERNET --noS1"
+    shift
+    ;;
+    -v8)
+    VM_NAME=ci-ue-ethernet
+    ARCHIVES_LOC=ue_eth
+    LOG_PATTERN=.Rel14.txt
+    NB_PATTERN_FILES=6
+    BUILD_OPTIONS="--UE -t ETHERNET --noS1"
+    shift
+    ;;
     --variant)
     variant="$2"
     case $variant in
@@ -140,6 +179,20 @@ case $key in
         NB_PATTERN_FILES=1
         BUILD_OPTIONS="--enable=warning --force --xml --xml-version=2"
         ;;
+        enb-ethernet)
+        VM_NAME=ci-enb-ethernet
+        ARCHIVES_LOC=enb_eth
+        LOG_PATTERN=.Rel14.txt
+        NB_PATTERN_FILES=6
+        BUILD_OPTIONS="--eNB -t ETHERNET --noS1"
+        ;;
+        ue-ethernet)
+        VM_NAME=ci-ue-ethernet
+        ARCHIVES_LOC=ue_eth
+        LOG_PATTERN=.Rel14.txt
+        NB_PATTERN_FILES=6
+        BUILD_OPTIONS="--UE -t ETHERNET --noS1"
+        ;;
         *)
         echo ""
         echo "Syntax Error: Invalid Variant option -> $variant"
@@ -170,6 +223,14 @@ then
     exit 1
 fi
 
+if [ "$JOB_NAME" == "XX" ] || [ "$BUILD_ID" == "XX" ]
+then
+    VM_TEMPLATE=ci-
+else
+    VM_TEMPLATE=${JOB_NAME}-b${BUILD_ID}-
+fi
+
+VM_NAME=`echo $VM_NAME | sed -e "s#ci-#$VM_TEMPLATE#"`
 VM_CMDS=${VM_NAME}_cmds.txt
 ARCHIVES_LOC=${JENKINS_WKSP}/archives/${ARCHIVES_LOC}
 
@@ -199,7 +260,7 @@ echo "############################################################"
 echo "Running install and build script on VM ($VM_NAME)"
 echo "############################################################"
 echo "sudo cp 01proxy /etc/apt/apt.conf.d/" > $VM_CMDS
-if [ "$VM_NAME" == "ci-cppcheck" ]
+if [[ "$VM_NAME" == *"-cppcheck"* ]]
 then
     echo "echo \"sudo apt-get --yes --quiet install zip cppcheck \"" >> $VM_CMDS
     echo "sudo apt-get update > zip-install.txt 2>&1" >> $VM_CMDS
@@ -212,7 +273,7 @@ echo "mkdir tmp" >> $VM_CMDS
 echo "cd tmp" >> $VM_CMDS
 echo "echo \"unzip -qq -DD ../localZip.zip\"" >> $VM_CMDS
 echo "unzip -qq -DD ../localZip.zip" >> $VM_CMDS
-if [ "$VM_NAME" == "ci-cppcheck" ]
+if [[ "$VM_NAME" == *"-cppcheck"* ]]
 then
     echo "mkdir cmake_targets/log" >> $VM_CMDS
     echo "cp /home/ubuntu/zip-install.txt cmake_targets/log" >> $VM_CMDS
@@ -243,7 +304,7 @@ then
 fi
 
 scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/*.txt $ARCHIVES_LOC
-if [ "$VM_NAME" == "ci-cppcheck" ]
+if [[ "$VM_NAME" == *"-cppcheck"* ]]
 then
     scp -o StrictHostKeyChecking=no ubuntu@$VM_IP_ADDR:/home/ubuntu/tmp/cmake_targets/log/*.xml $ARCHIVES_LOC
 fi
diff --git a/ci-scripts/destroyAllRunningVM.sh b/ci-scripts/destroyAllRunningVM.sh
new file mode 100755
index 0000000000000000000000000000000000000000..c9eb43b4ef235d83a0803c9055c5cd772406d629
--- /dev/null
+++ b/ci-scripts/destroyAllRunningVM.sh
@@ -0,0 +1,81 @@
+#!/bin/bash
+
+function usage {
+    echo "OAI VM Destroy script"
+    echo "   Original Author: Raphael Defosseux"
+    echo ""
+    echo "Usage:"
+    echo "------"
+    echo "    destroyAllRunningVM.sh [OPTIONS]"
+    echo ""
+    echo "Options:"
+    echo "--------"
+    echo "    --job-name #### OR -jn ####"
+    echo "    Specify the name of the Jenkins job."
+    echo ""
+    echo "    --build-id #### OR -id ####"
+    echo "    Specify the build ID of the Jenkins job."
+    echo ""
+    echo "    --help OR -h"
+    echo "    Print this help message."
+    echo ""
+}
+
+if [ $# -gt 4 ]
+then
+    echo "Syntax Error: not the correct number of arguments"
+    echo ""
+    usage
+    exit 1
+fi
+
+VM_TEMPLATE=ci-
+JOB_NAME=XX
+BUILD_ID=XX
+
+while [[ $# -gt 0 ]]
+do
+key="$1"
+case $key in
+    -h|--help)
+    shift
+    usage
+    exit 0
+    ;;
+    -jn|--job-name)
+    JOB_NAME="$2"
+    shift
+    shift
+    ;;
+    -id|--build-id)
+    BUILD_ID="$2"
+    shift
+    shift
+    ;;
+    *)
+    echo "Syntax Error: unknown option: $key"
+    echo ""
+    usage
+    exit 1
+esac
+done
+
+if [ "$JOB_NAME" == "XX" ] || [ "$BUILD_ID" == "XX" ]
+then
+    VM_TEMPLATE=ci-
+else
+    VM_TEMPLATE=${JOB_NAME}-b${BUILD_ID}-
+fi
+
+LIST_CI_VM=`uvt-kvm list | grep $VM_TEMPLATE`
+
+for CI_VM in $LIST_CI_VM
+do
+    VM_IP_ADDR=`uvt-kvm ip $CI_VM`
+    echo "VM to destroy: $CI_VM -- IP $VM_IP_ADDR"
+    uvt-kvm destroy $CI_VM
+    ssh-keygen -R $VM_IP_ADDR
+done
+
+exit 0
+
diff --git a/ci-scripts/reportBuildLocally.sh b/ci-scripts/reportBuildLocally.sh
index 3a19bae812929e0630709e979a1228be21f332b9..694e92e478d2b30ca999b7b87b7d52e4db116cc2 100755
--- a/ci-scripts/reportBuildLocally.sh
+++ b/ci-scripts/reportBuildLocally.sh
@@ -232,6 +232,10 @@ function sca_summary_table_footer {
         echo "        <th>Total</th>" >> ./build_results.html
         echo "        <th>Unknown</th>" >> ./build_results.html
         echo "        <th>Unknown</th>" >> ./build_results.html
+        if [ -f ccp_error_cnt.txt ]
+        then
+            rm -f ccp_error_cnt.txt
+        fi
     fi
     echo "      </tr>" >> ./build_results.html
     echo "   </table>" >> ./build_results.html
@@ -505,6 +509,24 @@ summary_table_row "UL Simulator - Release 14" ./archives/phy_sim/ulsim.Rel14.txt
 summary_table_row "Coding - Release 14" ./archives/phy_sim/coding.Rel14.txt "Built target coding" ./phy_sim_row3.html
 summary_table_footer
 
+summary_table_header "OAI Build eNB -- ETHERNET transport option"
+summary_table_row "LTE SoftModem w/o S1 - Release 14" ./archives/enb_eth/lte-softmodem-nos1.Rel14.txt "Built target lte-softmodem" ./enb_eth_row1.html
+summary_table_row "Coding - Release 14" ./archives/enb_eth/coding.Rel14.txt "Built target coding" ./enb_eth_row2.html
+summary_table_row "OAI ETHERNET transport - Release 14" ./archives/enb_eth/oai_eth_transpro.Rel14.txt "Built target oai_eth_transpro" ./enb_eth_row3.html
+summary_table_row "Parameters Lib Config - Release 14" ./archives/enb_eth/params_libconfig.Rel14.txt "Built target params_libconfig" ./enb_eth_row4.html
+summary_table_row "RB Tools - Release 14" ./archives/enb_eth/rb_tool.Rel14.txt "Built target rb_tool" ./enb_eth_row5.html
+summary_table_row "NAS Mesh - Release 14" ./archives/enb_eth/nasmesh.Rel14.txt "Built target nasmesh" ./enb_eth_row6.html
+summary_table_footer
+
+summary_table_header "OAI Build UE -- ETHERNET transport option"
+summary_table_row "LTE UE SoftModem w/o S1 - Release 14" ./archives/ue_eth/lte-uesoftmodem-nos1.Rel14.txt "Built target lte-uesoftmodem" ./ue_eth_row1.html
+summary_table_row "Coding - Release 14" ./archives/ue_eth/coding.Rel14.txt "Built target coding" ./ue_eth_row2.html
+summary_table_row "OAI ETHERNET transport - Release 14" ./archives/ue_eth/oai_eth_transpro.Rel14.txt "Built target oai_eth_transpro" ./ue_eth_row3.html
+summary_table_row "Parameters Lib Config - Release 14" ./archives/ue_eth/params_libconfig.Rel14.txt "Built target params_libconfig" ./ue_eth_row4.html
+summary_table_row "RB Tools - Release 14" ./archives/ue_eth/rb_tool.Rel14.txt "Built target rb_tool" ./ue_eth_row5.html
+summary_table_row "NAS Mesh - Release 14" ./archives/ue_eth/nasmesh.Rel14.txt "Built target nasmesh" ./ue_eth_row6.html
+summary_table_footer
+
 echo "   <h3>Details</h3>" >> ./build_results.html
 
 for DETAILS_TABLE in `ls ./enb_usrp_row*.html`
@@ -519,7 +541,15 @@ for DETAILS_TABLE in `ls ./phy_sim_row*.html`
 do
     cat $DETAILS_TABLE >> ./build_results.html
 done
-rm -f ./enb_usrp_row*.html ./basic_sim_row*.html ./phy_sim_row*.html
+for DETAILS_TABLE in `ls ./enb_eth_row*.html`
+do
+    cat $DETAILS_TABLE >> ./build_results.html
+done
+for DETAILS_TABLE in `ls ./ue_eth_row*.html`
+do
+    cat $DETAILS_TABLE >> ./build_results.html
+done
+rm -f ./enb_usrp_row*.html ./basic_sim_row*.html ./phy_sim_row*.html ./enb_eth_row*.html ./ue_eth_row*.html
 
 echo "</body>" >> ./build_results.html
 echo "</html>" >> ./build_results.html
diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 4f449fbc122f9c36980efdda99813cf345720a9f..428ab4e0ef3c2b8a75360d4ddc6ce0ae17934cb5 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -2021,7 +2021,7 @@ target_link_libraries (lte-uesoftmodem ${T_LIB})
 add_executable(lte-uesoftmodem-nos1
   ${rrc_h}
   ${s1ap_h}
-#  ${OPENAIR_BIN_DIR}/messages_xml.h
+  ${OPENAIR_BIN_DIR}/messages_xml.h
   ${OPENAIR_TARGETS}/RT/USER/rt_wrapper.c
   ${OPENAIR_TARGETS}/RT/USER/lte-ue.c
   ${OPENAIR_TARGETS}/RT/USER/lte-uesoftmodem.c
diff --git a/cmake_targets/build_oai b/cmake_targets/build_oai
index 9cfe6941a28968e6148b5d617f669ccb0a360fe9..1d511f36f6911ced78931528cb022462b454db28 100755
--- a/cmake_targets/build_oai
+++ b/cmake_targets/build_oai
@@ -546,7 +546,7 @@ function main() {
     echo "set ( CFLAGS_PROCESSOR_USER \"$CFLAGS_PROCESSOR_USER\" )" >>  $cmake_file
     echo "set ( XFORMS $XFORMS )"                  >>  $cmake_file
     echo "set ( UE_EXPANSION $UE_EXPANSION )"      >>  $cmake_file
-    echo "set ( PHY_TX_THREAD $UE_EXPANSION )"     >>  $cmake_file
+#    echo "set ( PHY_TX_THREAD $UE_EXPANSION )"     >>  $cmake_file
     echo "set ( PRE_SCD_THREAD $UE_EXPANSION )"    >>  $cmake_file
     echo "set ( RRC_ASN1_VERSION \"${REL}\")"      >>  $cmake_file
     echo "set ( ENABLE_VCD_FIFO $VCD_TIMING )"     >>  $cmake_file
diff --git a/openair2/COMMON/platform_constants.h b/openair2/COMMON/platform_constants.h
index 917c149833f9d21df65dc988c70fa0ec14007078..f2c906bf661e2aa0e93c75fa8e55f831124f0e41 100644
--- a/openair2/COMMON/platform_constants.h
+++ b/openair2/COMMON/platform_constants.h
@@ -67,16 +67,23 @@
 
 #    define MAX_MODULES                NB_MODULES_MAX
 
-#ifdef LARGE_SCALE
+#ifndef UE_EXPANSION
+# ifdef LARGE_SCALE
 #    define MAX_MOBILES_PER_ENB         128
 #    define MAX_MOBILES_PER_ENB_NB_IoT  128
 #    define MAX_eNB                      2
-#else
+# else
 #    define MAX_MOBILES_PER_ENB         16
 #    define MAX_MOBILES_PER_ENB_NB_IoT  16
 #    define MAX_eNB                      2
+# endif
+#else
+#    define MAX_MOBILES_PER_ENB 256
+#    define MAX_MOBILES_PER_ENB_NB_IoT 256
+#    define MAX_eNB                      2
 #endif
 
+
 #define MAX_MANAGED_ENB_PER_MOBILE  2
 
 ///NB-IOT
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
index 73a92147cfac2fae6b80c7727ab534bbe143b2a3..cc0c0906ee51a1d294d5f9ce54eef02a3d9d179a 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
@@ -34,7 +34,8 @@
 #include "assertions.h"
 
 #include "PHY/phy_extern.h"
-
+#include "PHY/LTE_TRANSPORT/transport_common_proto.h"
+#include "SIMULATION/TOOLS/sim.h"
 #include "LAYER2/MAC/mac_proto.h"
 #include "LAYER2/MAC/mac_extern.h"
 #include "LAYER2/MAC/eNB_scheduler_fairRR.h"
@@ -53,6 +54,9 @@ extern uint8_t nfapi_mode;
 extern volatile int16_t phy_tx_txdataF_end;
 extern int oai_exit;
 #endif
+extern uint16_t sfnsf_add_subframe(uint16_t frameP, uint16_t subframeP, int offset);
+extern void add_subframe(uint16_t *frameP, uint16_t *subframeP, int offset);
+
 /* internal vars */
 DLSCH_UE_SELECT dlsch_ue_select[MAX_NUM_CCs];
 int last_dlsch_ue_id[MAX_NUM_CCs] = {-1};
@@ -566,7 +570,7 @@ void dlsch_scheduler_pre_processor_fairRR (module_id_t   Mod_id,
     LTE_eNB_UE_stats *eNB_UE_stats2 = NULL;
     UE_sched_ctrl *ue_sched_ctl1, *ue_sched_ctl2;
 #endif
-
+  memset(min_rb_unit,0,sizeof(min_rb_unit));
   for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
 
 	if (mbsfn_flag[CC_id] > 0)	// If this CC is allocated for MBSFN skip it here
@@ -591,7 +595,7 @@ void dlsch_scheduler_pre_processor_fairRR (module_id_t   Mod_id,
 						frameP,
 						subframeP,
 						N_RBG[CC_id],
-						nb_rbs_required,
+						(uint16_t (*)[NUMBER_OF_UE_MAX])nb_rbs_required,
 						rballoc_sub,
 						MIMO_mode_indicator);
 
@@ -600,12 +604,12 @@ void dlsch_scheduler_pre_processor_fairRR (module_id_t   Mod_id,
 
 #if (!defined(PRE_SCD_THREAD))
     // Store the DLSCH buffer for each logical channel
-    store_dlsch_buffer(Mod_id, frameP, subframeP);
+    store_dlsch_buffer(Mod_id,0, frameP, subframeP);
 
 
 
     // Calculate the number of RBs required by each UE on the basis of logical channel's buffer
-    assign_rbs_required(Mod_id, frameP, subframeP, nb_rbs_required,
+    assign_rbs_required(Mod_id, 0, frameP, subframeP, nb_rbs_required,
 			min_rb_unit);
 #else
     memcpy(nb_rbs_required, pre_nb_rbs_required[dlsch_ue_select_tbl_in_use] , sizeof(uint16_t)*MAX_NUM_CCs*NUMBER_OF_UE_MAX);
@@ -664,8 +668,8 @@ void dlsch_scheduler_pre_processor_fairRR (module_id_t   Mod_id,
                                               transmission_mode,
                                               min_rb_unit[CC_id],
                                               N_RB_DL,
-                                              nb_rbs_required,
-                                              nb_rbs_required_remaining,
+                                              (uint16_t (*)[NUMBER_OF_UE_MAX])nb_rbs_required,
+                                              (uint16_t (*)[NUMBER_OF_UE_MAX])nb_rbs_required_remaining,
                                               rballoc_sub,
                                               MIMO_mode_indicator);
       temp_total_rbs_count -= ue_sched_ctl->pre_nb_available_rbs[CC_id];
@@ -780,7 +784,7 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
 
     uint8_t CC_id;
     int UE_id;
-    unsigned char aggregation;
+//    unsigned char aggregation;
     mac_rlc_status_resp_t rlc_status;
     unsigned char header_len_dcch = 0, header_len_dcch_tmp = 0;
     unsigned char header_len_dtch = 0, header_len_dtch_tmp =
@@ -799,7 +803,7 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
     eNB_MAC_INST *eNB = RC.mac[module_idP];
     COMMON_channels_t *cc = eNB->common_channels;
     UE_list_t *UE_list = &eNB->UE_list;
-    int continue_flag = 0;
+   // int continue_flag = 0;
     int32_t normalized_rx_power, target_rx_power;
     int32_t tpc = 1;
     static int32_t tpc_accumulated = 0;
@@ -863,7 +867,7 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
     }
 
     //weight = get_ue_weight(module_idP,UE_id);
-    aggregation = 2;
+//    aggregation = 2;
     for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
 	N_RB_DL[CC_id] = to_prb(cc[CC_id].mib->message.dl_Bandwidth);
 	min_rb_unit[CC_id] = get_min_rb_unit(module_idP, CC_id);
@@ -922,7 +926,7 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
 
       eNB_UE_stats = &UE_list->eNB_UE_stats[CC_id][UE_id];
       ue_sched_ctl = &UE_list->UE_sched_ctrl[UE_id];
-
+/*
       switch(get_tmode(module_idP,CC_id,UE_id)){
       case 1:
       case 2:
@@ -941,7 +945,7 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
         aggregation = 2;
         break;
       }
-
+*/
       if (cc[CC_id].tdd_Config != NULL) { //TDD
         set_ue_dai (subframeP,
                     UE_id,
@@ -951,7 +955,8 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
         // update UL DAI after DLSCH scheduling
         set_ul_DAI(module_idP,UE_id,CC_id,frameP,subframeP);
       }
-            nb_available_rb = ue_sched_ctl->pre_nb_available_rbs[CC_id];
+
+	    nb_available_rb = ue_sched_ctl->pre_nb_available_rbs[CC_id];
 
 	    harq_pid = frame_subframe2_dl_harq_pid(cc->tdd_Config,frameP ,subframeP);
 
@@ -1631,7 +1636,7 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
 		    }
 		    //#endif
 #ifdef DEBUG_eNB_SCHEDULER
-		    LOG_T(MAC, "[eNB %d] First 16 bytes of DLSCH : \n");
+		    LOG_T(MAC, "[eNB %d] First 16 bytes of DLSCH : \n",module_idP );
 
 		    for (i = 0; i < 16; i++) {
 			LOG_T(MAC, "%x.", dlsch_buffer[i]);
@@ -2642,19 +2647,19 @@ void schedule_ulsch_rnti_fairRR(module_id_t   module_idP,
           if(N_RB_UL == 25){
             if (first_rb[CC_id] >= N_RB_UL-1) {
               LOG_W(MAC,"[eNB %d] frame %d subframe %d, UE %d/%x CC %d N_RB_UL %d first_rb %d: dropping, not enough RBs\n",
-                       module_idP,frameP,subframeP,UE_id,rnti,CC_id, N_RB_UL, first_rb);
+                       module_idP,frameP,subframeP,UE_id,rnti,CC_id, N_RB_UL, first_rb[CC_id]);
               break;
             }
           }else if(N_RB_UL == 50){
               if (first_rb[CC_id] >= N_RB_UL-2) {
                 LOG_W(MAC,"[eNB %d] frame %d subframe %d, UE %d/%x CC %d N_RB_UL %d first_rb %d: dropping, not enough RBs\n",
-                         module_idP,frameP,subframeP,UE_id,rnti,CC_id, N_RB_UL, first_rb);
+                         module_idP,frameP,subframeP,UE_id,rnti,CC_id, N_RB_UL, first_rb[CC_id]);
                 break;
               }
           }else if(N_RB_UL == 100){
               if (first_rb[CC_id] >= N_RB_UL-3) {
                 LOG_W(MAC,"[eNB %d] frame %d subframe %d, UE %d/%x CC %d N_RB_UL %d first_rb %d: dropping, not enough RBs\n",
-                       module_idP,frameP,subframeP,UE_id,rnti,CC_id, N_RB_UL, first_rb);
+                       module_idP,frameP,subframeP,UE_id,rnti,CC_id, N_RB_UL, first_rb[CC_id]);
                 break;
               }
           }
diff --git a/openair2/LAYER2/MAC/mac_proto.h b/openair2/LAYER2/MAC/mac_proto.h
index 069cd63829379286a3fcf20560ef77d6b856d670..a20df2909d639bed2318ceb2e5126de863c226cb 100644
--- a/openair2/LAYER2/MAC/mac_proto.h
+++ b/openair2/LAYER2/MAC/mac_proto.h
@@ -441,6 +441,7 @@ void set_ue_dai(sub_frame_t subframeP,
 		int UE_id,
 		uint8_t CC_id, uint8_t tdd_config, UE_list_t * UE_list);
 
+uint8_t frame_subframe2_dl_harq_pid(TDD_Config_t *tdd_Config, int abs_frameP, sub_frame_t subframeP);
 /** \brief First stage of PCH Scheduling. Gets a PCH SDU from RRC if available and computes the MCS required to transport it as a function of the SDU length.  It assumes a length less than or equal to 64 bytes (MCS 6, 3 PRBs).
 @param Mod_id Instance ID of eNB
 @param frame Frame index
@@ -675,6 +676,8 @@ int add_new_ue(module_id_t Mod_id, int CC_id, rnti_t rnti, int harq_pid
     );
 int rrc_mac_remove_ue(module_id_t Mod_id, rnti_t rntiP);
 
+void store_dlsch_buffer(module_id_t Mod_id, slice_id_t slice_id, frame_t frameP, sub_frame_t subframeP);
+void assign_rbs_required(module_id_t Mod_id, slice_id_t slice_id, frame_t frameP, sub_frame_t subframe, uint16_t nb_rbs_required[NFAPI_CC_MAX][MAX_MOBILES_PER_ENB], int min_rb_unit[NFAPI_CC_MAX]);
 
 int maxround(module_id_t Mod_id, uint16_t rnti, int frame,
 	     sub_frame_t subframe, uint8_t ul_flag);
diff --git a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
index 15e52c7cdd9131f49b59c71c55d84cdbce46387a..69166672d79298d91ff605d5fa2fbf21b5cc6515 100644
--- a/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
+++ b/targets/PROJECTS/GENERIC-LTE-EPC/CONF/enb.band7.tm1.50PRB.usrpb210.conf
@@ -198,7 +198,7 @@ MACRLCs = (
 	num_cc = 1;
 	tr_s_preference = "local_L1";
 	tr_n_preference = "local_RRC";
-	phy_test_mode = 1;
+	phy_test_mode = 0;
         puSch10xSnr     =  200;
         puCch10xSnr     =  200;
         }  
diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c
index d86f2f6c6b76b2f4991439f4381974709d82fce1..304dca1cde2f67f03970db18b1764d9df7c54553 100644
--- a/targets/RT/USER/lte-ru.c
+++ b/targets/RT/USER/lte-ru.c
@@ -1781,10 +1781,6 @@ static void* ru_thread( void* param ) {
     // wakeup all eNB processes waiting for this RU
     if (ru->num_eNB>0) wakeup_eNBs(ru);
     
-    // wait until eNBs are finished subframe RX n and TX n+sf_ahead
-    if(get_nprocs() > 4)
-      wait_on_condition(&proc->mutex_eNBs,&proc->cond_eNBs,&proc->instance_cnt_eNBs,"ru_thread");
-    
 #ifndef PHY_TX_THREAD
     if(get_nprocs() <= 4){
       // do TX front-end processing if needed (precoding and/or IDFTs)