diff --git a/README.txt b/README.txt
index c65502325f89749a3f0caf84c41b3b6ecdf64ef4..59f48445e248919db5b3025d35c8e281f5c834b3 100644
--- a/README.txt
+++ b/README.txt
@@ -43,6 +43,7 @@ openairinterface5g
 
 RELEASE NOTES:
 
+v1.1.1 -> November 2019. Bug fix in the TDD Fair Round-Robin scheduler
 v1.1.0 -> July 2019. This version adds the following implemented features:
            * Experimental support of LTE-M
              - Single LTE-M UE attachment, legacy-LTE UE attachment is disabled
diff --git a/ci-scripts/.gitignore b/ci-scripts/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..d77a672c0c57e050ddc87037492ffa5cb474cea7
--- /dev/null
+++ b/ci-scripts/.gitignore
@@ -0,0 +1,7 @@
+enb_*.log
+ue_*.log
+ping_*.*
+iperf_*.*
+phones_list.txt
+modules_list.txt
+test_results*.html
diff --git a/ci-scripts/Jenkinsfile-gitlab b/ci-scripts/Jenkinsfile-gitlab
index 128a5fecfc89af4c88d5948d34bbf7b4f84dac1d..d201405255056fa0695e3d8a277627b1493f45fd 100644
--- a/ci-scripts/Jenkinsfile-gitlab
+++ b/ci-scripts/Jenkinsfile-gitlab
@@ -131,8 +131,8 @@ pipeline {
                                 [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.FlexRanRtcGitLabRepository_Credentials}", usernameVariable: 'git_username', passwordVariable: 'git_password']
                                 ]) {
                                 sh "git clone https://${git_username}:${git_password}@gitlab.eurecom.fr/flexran/flexran-rtc.git . > ../git_clone.log 2>&1"
+                                sh "git checkout develop >> ../git_clone.log 2>&1"
                             }
-                            sh "sed -i -e 's#add-apt-repository.*cleishm.*neo4j#add-apt-repository ppa:cleishm/neo4j -y#' -e 's#libneo4j-client-dev#libneo4j-client-dev -y#' tools/install_dependencies"
                             sh "zip -r -qq flexran.zip ."
                         }
                     }
diff --git a/ci-scripts/Jenkinsfile-inria-r2lab b/ci-scripts/Jenkinsfile-inria-r2lab
new file mode 100644
index 0000000000000000000000000000000000000000..6ae752299950fec1d080ab6c7d8c06158d7b891c
--- /dev/null
+++ b/ci-scripts/Jenkinsfile-inria-r2lab
@@ -0,0 +1,421 @@
+#!/bin/groovy
+/*
+ * Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The OpenAirInterface Software Alliance licenses this file to You under
+ * the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ * except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.openairinterface.org/?page_id=698
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *-------------------------------------------------------------------------------
+ * For more information about the OpenAirInterface (OAI) Software Alliance:
+ *      contact@openairinterface.org
+ */
+
+// Abstraction function to send social media messages:
+// like on Slack or Mattermost
+def sendSocialMediaMessage(pipeChannel, pipeColor, pipeMessage) {
+    if (params.pipelineUsesSlack != null) {
+        if (params.pipelineUsesSlack) {
+            slackSend channel: pipeChannel, color: pipeColor, message: pipeMessage
+        }
+    }
+}
+
+// Location of the test XML file to be run
+def testXMLFile = params.pythonTestXmlFile
+def mainPythonAllXmlFiles = ""
+def buildStageStatus = true
+
+// Name of the test stage
+def testStageName = params.pipelineTestStageName
+
+// Name of the branch to work on
+def ranRepoBranch = params.pythonWorkingBranch
+
+// Lease booking parameters
+def r2labStartTime = params.R2LAB_LeaseBookStartTime
+def r2labDuration = params.R2LAB_LeaseBookDuration
+
+
+// Fixed deployment
+def r2labBaseIpAddr = '192.168.3.'
+def r2labPythonExeIdx = '14'
+def r2labPythonExe = 'fit' + r2labPythonExeIdx
+def r2labENB0Idx = '23'
+def r2labENB0 = 'fit' + r2labENB0Idx
+def r2labENB0IpAddr = r2labBaseIpAddr + r2labENB0Idx
+def r2labEPC0Idx = '17'
+def r2labEPC0 = 'fit' + r2labEPC0Idx
+def r2labEPC0IpAddr = r2labBaseIpAddr + r2labEPC0Idx
+def r2labUE0Idx = '6'
+def r2labUE0 = 'fit0' + r2labUE0Idx
+def r2labUE0IpAddr = r2labBaseIpAddr + r2labUE0Idx
+
+pipeline {
+    agent {
+        label 'master'
+    }
+
+    options {
+        disableConcurrentBuilds()
+        timestamps()
+        ansiColor('xterm')
+    }
+
+    stages {
+        stage ("Book session") {
+            steps {
+                script {
+                    echo '\u2705 \u001B[32mVerify Parameters\u001B[0m'
+
+                    def allParametersPresent = true
+                    if (params.R2LAB_Credentials == null) {
+                        allParametersPresent = false
+                    }
+                    if (params.R2LAB_FitNode_Credentials == null) {
+                        allParametersPresent = false
+                    }
+                    if (params.R2LAB_LeaseBookStartTime == null) {
+                        allParametersPresent = false
+                    }
+                    if (params.R2LAB_LeaseBookDuration == null) {
+                        allParametersPresent = false
+                    }
+
+                    // If not present picking a default Stage Name
+                    if (params.pipelineTestStageName == null) {
+                        // picking default
+                        testStageName = 'Tests at Inria R2LAB'
+                    }
+                    // If not present picking a default branch name
+                    if (params.pythonWorkingBranch == null) {
+                        ranRepoBranch = 'develop'
+                    }
+
+                    if (params.pythonTestXmlFile == null) {
+                        // picking default
+                        testXMLFile = 'xml_files/inria/enb_usrp210_band7_build.xml'
+                        echo "Test XML file(default):   ${testXMLFile}"
+                        mainPythonAllXmlFiles += "--XMLTestFile=" + testXMLFile + " "
+                    } else {
+                        String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
+                        for (xmlFile in myXmlTestSuite) {
+                            mainPythonAllXmlFiles += "--XMLTestFile=" + xmlFile + " "
+                            echo "Test XML file         :   ${xmlFile}"
+                        }
+                    }
+
+                    if (!allParametersPresent) {
+                        currentBuild.result = 'ABORTED'
+                        error('Stopping early because no R2LAB credentials')
+                    }
+
+                    JOB_TIMESTAMP = sh returnStdout: true, script: 'date --rfc-3339=seconds | sed -e "s#+00:00##"'
+                    JOB_TIMESTAMP = JOB_TIMESTAMP.trim()
+
+                    echo '\u2705 \u001B[32mBook a Session\u001B[0m'
+
+                    BOOK_TIMESTAMP = sh returnStdout: true, script: 'date --rfc-3339=date'
+                    BOOK_TIMESTAMP = BOOK_TIMESTAMP.trim()
+
+                    withCredentials([
+                        [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.R2LAB_Credentials}", usernameVariable: 'r2labuser', passwordVariable: 'r2labpassword']
+                        ]) {
+                        sh "python3 /home/eurecom/inria-scripts/booking-lease.py --book-lease --from ${BOOK_TIMESTAMP}T${r2labStartTime} --duration ${r2labDuration} --slice inria_oaici ${r2labuser} ${r2labpassword}"
+                        sh "python3 /home/eurecom/inria-scripts/booking-lease.py --get-leases ${r2labuser} ${r2labpassword}"
+                    }
+                }
+            }
+        }
+        stage ("Load Images") {
+            steps {
+                script {
+                    echo '\u2705 \u001B[32mLoad Image for Python Executor\u001B[0m'
+                    sh "ssh -t inria_oaici@faraday.inria.fr 'rload -i oai-ci-cd-u18-lowlatency-enb-ue ${r2labPythonExeIdx} > /dev/null 2>&1'"
+                    sh "ssh -t inria_oaici@faraday.inria.fr 'rwait --silent ${r2labPythonExeIdx}'"
+
+                    echo '\u2705 \u001B[32mLoad Image for one eNB\u001B[0m'
+                    sh "ssh -t inria_oaici@faraday.inria.fr 'rload -i oai-ci-cd-u18-lowlatency-enb-ue ${r2labENB0Idx} > /dev/null 2>&1'"
+                    sh "ssh -t inria_oaici@faraday.inria.fr 'rwait --silent ${r2labENB0Idx}'"
+                    sh "ssh -t inria_oaici@faraday.inria.fr 'uon ${r2labENB0Idx}'"
+
+                    echo '\u2705 \u001B[32mLoad Image for one OAI UE\u001B[0m'
+                    sh "ssh -t inria_oaici@faraday.inria.fr 'rload -i oai-ci-cd-u18-lowlatency-enb-ue ${r2labUE0Idx} > /dev/null 2>&1'"
+                    sh "ssh -t inria_oaici@faraday.inria.fr 'rwait --silent ${r2labUE0Idx}'"
+                    sh "ssh -t inria_oaici@faraday.inria.fr 'uon ${r2labUE0Idx}'"
+
+                    echo '\u2705 \u001B[32mLoad Image for one EPC\u001B[0m'
+                    sh "ssh -t inria_oaici@faraday.inria.fr 'rload -i oai-ci-cd-u18-lowlatency-epc ${r2labEPC0Idx} > /dev/null 2>&1'"
+                    sh "ssh -t inria_oaici@faraday.inria.fr 'rwait --silent ${r2labEPC0Idx}'"
+
+                    sh "ssh -t inria_oaici@faraday.inria.fr 'nodes ${r2labUE0Idx},${r2labPythonExeIdx},${r2labEPC0Idx},${r2labENB0Idx} && st'"
+                }
+            }
+        }
+        stage ("Prepare Python Executor") {
+            steps {
+                script {
+                    withCredentials([
+                        [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.R2LAB_FitNode_Credentials}", usernameVariable: 'fituser', passwordVariable: 'fitpasswd']
+                        ]) {
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g && git fetch --all --prune --quiet\"'"
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g && git checkout --quiet ${ranRepoBranch}\"'"
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g && git pull --quiet origin ${ranRepoBranch}\"'"
+                        GIT_COMMIT_TO_RUN = sh returnStdout: true, script: "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g && git log -n1 --pretty=format:%H\"' | grep -v fit"
+                        GIT_COMMIT_TO_RUN = GIT_COMMIT_TO_RUN.trim()
+                        echo "Latest commit to use is ${GIT_COMMIT_TO_RUN}"
+
+                        // Putting the adaptation parameters for the OAI UE
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'scp /home/inria_oaici/for-ci/adapt_usim_parameters_${r2labUE0}.sed ${fituser}@${r2labUE0}:/tmp/adapt_usim_parameters.sed'"
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'scp /home/inria_oaici/for-ci/phones_list.txt ${fituser}@${r2labEPC0}:/tmp'"
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S cp /tmp/phones_list.txt /etc/ci\"'"
+
+                        // Out of rload, the sub-network-interfaces are not up
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ifconfig control:m11 172.16.1.102 up\"'"
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ifconfig control:m10 192.168.10.110 up\"'"
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ifconfig control:sxu 172.55.55.102 up\"'"
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ifconfig control:s1u 192.168.248.159 up\"'"
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ifconfig control:sxc 172.55.55.101 up\"'"
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ifconfig control:s5c 172.58.58.102 up\"'"
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ifconfig control:p5c 172.58.58.101 up\"'"
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ifconfig control:s11 172.16.1.104 up\"'"
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"ifconfig\"'"
+
+                        // Adding routes on the EPC
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ip route add default via 192.168.3.100 dev control table lte\"'"
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ip rule add from 12.0.0.0/8 table lte\"'"
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labEPC0} \"echo ${fitpasswd} | sudo -S ip rule add from 12.1.1.0/8 table lte\"'"
+
+                        // Adding a route on the eNB for the S1U interface
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labENB0} \"echo ${fitpasswd} | sudo -S ip route add 192.168.248.0/24 via ${r2labEPC0IpAddr} dev control\"'"
+
+                        // For the moment, simple way to route traffic from python executor to any UEs
+                        sh "ssh -t inria_oaici@faraday.inria.fr 'ssh -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"echo ${fitpasswd} | sudo -S ip route add 12.1.1.0/24 via ${r2labEPC0IpAddr} dev control\"'"
+                    }
+                }
+            }
+        }
+        stage ("Build and Test") {
+            steps {
+                script {
+                    withCredentials([
+                        [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.R2LAB_FitNode_Credentials}", usernameVariable: 'fituser', passwordVariable: 'fitpasswd']
+                        ]) {
+                        sh "ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=InitiateHtml --ranRepository=https://gitlab.eurecom.fr/oai/openairinterface5g --ranBranch=${ranRepoBranch} --ranCommitID=${GIT_COMMIT_TO_RUN} --ranAllowMerge=false --ADBIPAddress=${r2labEPC0IpAddr} --ADBUserName=${fituser} --ADBPassword=${fitpasswd} --ADBType=distributed ${mainPythonAllXmlFiles}\"'"
+                        String[] myXmlTestSuite = testXMLFile.split("\\r?\\n")
+                        for (xmlFile in myXmlTestSuite) {
+                            try {
+                                sh "ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=TesteNB --ranRepository=https://gitlab.eurecom.fr/oai/openairinterface5g --ranBranch=${ranRepoBranch} --ranCommitID=${GIT_COMMIT_TO_RUN} --ranAllowMerge=false --eNBIPAddress=${r2labENB0IpAddr} --eNBUserName=${fituser} --eNBPassword=${fitpasswd} --eNBSourceCodePath=/home/${fituser}/openairinterface5g --UEIPAddress=${r2labUE0IpAddr} --UEUserName=${fituser} --UEPassword=${fitpasswd} --UESourceCodePath=/home/${fituser}/openairinterface5g --EPCIPAddress=${r2labEPC0IpAddr} --EPCType=OAI-Rel14-CUPS --EPCUserName=${fituser}  --EPCPassword=${fitpasswd} --EPCSourceCodePath=/home/${fituser}/openair-cn --ADBIPAddress=${r2labEPC0IpAddr} --ADBUserName=${fituser} --ADBPassword=${fitpasswd} --ADBType=distributed --XMLTestFile=${xmlFile}\"'"
+                            } catch (Exception e) {
+                                currentBuild.result = 'FAILURE'
+                                buildStageStatus = false
+                            }
+                        }
+                        sh "ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=FinalizeHtml --finalStatus=${buildStageStatus} --eNBIPAddress=${r2labENB0IpAddr} --eNBUserName=${fituser} --eNBPassword=${fitpasswd}\"'"
+                    }
+                }
+            }
+        }
+        stage ("Prepare Log Collection") {
+            steps {
+                sh "ssh -t inria_oaici@faraday.inria.fr 'mkdir -p /home/inria_oaici/archives'"
+                sh "ssh -t inria_oaici@faraday.inria.fr 'touch /home/inria_oaici/archives/no_error.txt'"
+                sh "ssh -t inria_oaici@faraday.inria.fr 'rm -f /home/inria_oaici/archives/*.*'"
+                withCredentials([
+                    [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.R2LAB_FitNode_Credentials}", usernameVariable: 'fituser', passwordVariable: 'fitpasswd']
+                    ]) {
+                    sh "ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labPythonExe}:/home/${fituser}/openairinterface5g/ci-scripts/test_results.html /home/inria_oaici/archives'"
+                }
+                sh "scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/test_results.html ."
+                script {
+                    if(fileExists("./test_results.html")) {
+                        sh "mv ./test_results.html test_results-${JOB_NAME}.html"
+                        sh "sed -i -e 's#TEMPLATE_JOB_NAME#${JOB_NAME}#' -e 's@build #TEMPLATE_BUILD_ID@build #${BUILD_ID}@' -e 's#Build-ID: TEMPLATE_BUILD_ID#Build-ID: <a href=\"${BUILD_URL}\">${BUILD_ID}</a>#' -e 's#TEMPLATE_STAGE_NAME#${testStageName}#' -e 's#TEMPLATE_BUILD_TIME#${JOB_TIMESTAMP}#' test_results-${JOB_NAME}.html"
+                        archiveArtifacts "test_results-${JOB_NAME}.html"
+                    }
+                }
+            }
+        }
+        stage ("Log Collection") {
+            parallel {
+                stage('Log Collection (OAI eNB - Build)') {
+                    steps {
+                        withCredentials([
+                        [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.R2LAB_FitNode_Credentials}", usernameVariable: 'fituser', passwordVariable: 'fitpasswd']
+                        ]) {
+                            echo '\u2705 \u001B[32mLog Collection (OAI eNB - Build)\u001B[0m'
+                            sh "ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollectBuild --eNBIPAddress=${r2labENB0IpAddr} --eNBUserName=${fituser} --eNBPassword=${fitpasswd} --eNBSourceCodePath=/home/${fituser}/openairinterface5g\"'"
+                            sh "ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labENB0}:/home/${fituser}/openairinterface5g/cmake_targets/build.log.zip /home/inria_oaici/archives/enb.build.log.zip'"
+                        }
+                        sh "scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/enb.build.log.zip enb.build.log.${env.BUILD_ID}.zip"
+                        script {
+                            if(fileExists("enb.build.log.${env.BUILD_ID}.zip")) {
+                                archiveArtifacts "enb.build.log.${env.BUILD_ID}.zip"
+                            }
+                        }
+                    }
+                }
+                stage('Log Collection (OAI UE - Build)') {
+                    steps {
+                        withCredentials([
+                        [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.R2LAB_FitNode_Credentials}", usernameVariable: 'fituser', passwordVariable: 'fitpasswd']
+                        ]) {
+                            echo '\u2705 \u001B[32mLog Collection (OAI UE - Build)\u001B[0m'
+                            sh "ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollectBuild --UEIPAddress=${r2labUE0IpAddr} --UEUserName=${fituser} --UEPassword=${fitpasswd} --UESourceCodePath=/home/${fituser}/openairinterface5g\"'"
+                            sh "ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labUE0}:/home/${fituser}/openairinterface5g/cmake_targets/build.log.zip /home/inria_oaici/archives/ue.build.log.zip'"
+                        }
+                        sh "scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/ue.build.log.zip ue.build.log.${env.BUILD_ID}.zip"
+                        script {
+                            if(fileExists("ue.build.log.${env.BUILD_ID}.zip")) {
+                                archiveArtifacts "ue.build.log.${env.BUILD_ID}.zip"
+                            }
+                        }
+                    }
+                }
+                stage('Log Collection (OAI eNB - Runs)') {
+                    steps {
+                        withCredentials([
+                        [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.R2LAB_FitNode_Credentials}", usernameVariable: 'fituser', passwordVariable: 'fitpasswd']
+                        ]) {
+                            echo '\u2705 \u001B[32mLog Collection (OAI eNB - Runs)\u001B[0m'
+                            sh "ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollecteNB --eNBIPAddress=${r2labENB0IpAddr} --eNBUserName=${fituser} --eNBPassword=${fitpasswd} --eNBSourceCodePath=/home/${fituser}/openairinterface5g\"'"
+                            sh "ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labENB0}:/home/${fituser}/openairinterface5g/cmake_targets/enb.log.zip /home/inria_oaici/archives/enb.run.log.zip'"
+                        }
+                        sh "scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/enb.run.log.zip enb.run.log.${env.BUILD_ID}.zip"
+                        script {
+                            if(fileExists("enb.run.log.${env.BUILD_ID}.zip")) {
+                                archiveArtifacts "enb.run.log.${env.BUILD_ID}.zip"
+                            }
+                        }
+                    }
+                }
+                stage('Log Collection (OAI UE - Runs)') {
+                    steps {
+                        withCredentials([
+                        [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.R2LAB_FitNode_Credentials}", usernameVariable: 'fituser', passwordVariable: 'fitpasswd']
+                        ]) {
+                            echo '\u2705 \u001B[32mLog Collection (OAI UE - Runs)\u001B[0m'
+                            sh "ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollectOAIUE --UEIPAddress=${r2labUE0IpAddr} --UEUserName=${fituser} --UEPassword=${fitpasswd} --UESourceCodePath=/home/${fituser}/openairinterface5g\"'"
+                            sh "ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labUE0}:/home/${fituser}/openairinterface5g/cmake_targets/ue.log.zip /home/inria_oaici/archives/ue.run.log.zip'"
+                        }
+                        sh "scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/ue.run.log.zip ue.run.log.${env.BUILD_ID}.zip"
+                        script {
+                            if(fileExists("ue.run.log.${env.BUILD_ID}.zip")) {
+                                archiveArtifacts "ue.run.log.${env.BUILD_ID}.zip"
+                            }
+                        }
+                    }
+                }
+                stage('Log Collection (MME)') {
+                    steps {
+                        withCredentials([
+                        [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.R2LAB_FitNode_Credentials}", usernameVariable: 'fituser', passwordVariable: 'fitpasswd']
+                        ]) {
+                            echo '\u2705 \u001B[32mLog Collection (MME)\u001B[0m'
+                            sh "ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollectMME --EPCIPAddress=${r2labEPC0IpAddr} --EPCUserName=${fituser} --EPCPassword=${fitpasswd} --EPCSourceCodePath=/home/${fituser}/openair-cn --EPCType=OAI-Rel14-CUPS\"'"
+                            sh "ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labEPC0}:/home/${fituser}/openair-cn/scripts/mme.log.zip /home/inria_oaici/archives/mme.log.zip'"
+                        }
+                        sh "scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/mme.log.zip mme.log.${env.BUILD_ID}.zip"
+                        script {
+                            if(fileExists("mme.log.${env.BUILD_ID}.zip")) {
+                                archiveArtifacts "mme.log.${env.BUILD_ID}.zip"
+                            }
+                        }
+                    }
+                }
+                stage('Log Collection (HSS)') {
+                    steps {
+                        withCredentials([
+                        [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.R2LAB_FitNode_Credentials}", usernameVariable: 'fituser', passwordVariable: 'fitpasswd']
+                        ]) {
+                            echo '\u2705 \u001B[32mLog Collection (HSS)\u001B[0m'
+                            sh "ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollectHSS --EPCIPAddress=${r2labEPC0IpAddr} --EPCUserName=${fituser} --EPCPassword=${fitpasswd} --EPCSourceCodePath=/home/${fituser}/openair-cn --EPCType=OAI-Rel14-CUPS\"'"
+                            sh "ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labEPC0}:/home/${fituser}/openair-cn/scripts/hss.log.zip /home/inria_oaici/archives/hss.log.zip'"
+                        }
+                        sh "scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/hss.log.zip hss.log.${env.BUILD_ID}.zip"
+                        script {
+                            if(fileExists("hss.log.${env.BUILD_ID}.zip")) {
+                                archiveArtifacts "hss.log.${env.BUILD_ID}.zip"
+                            }
+                        }
+                    }
+                }
+                stage('Log Collection (SPGW)') {
+                    steps {
+                        withCredentials([
+                        [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.R2LAB_FitNode_Credentials}", usernameVariable: 'fituser', passwordVariable: 'fitpasswd']
+                        ]) {
+                            echo '\u2705 \u001B[32mLog Collection (SPGW)\u001B[0m'
+                            sh "ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollectSPGW --EPCIPAddress=${r2labEPC0IpAddr} --EPCUserName=${fituser} --EPCPassword=${fitpasswd} --EPCSourceCodePath=/home/${fituser}/openair-cn --EPCType=OAI-Rel14-CUPS\"'"
+                            sh "ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labEPC0}:/home/${fituser}/openair-cn/scripts/spgw.log.zip /home/inria_oaici/archives/spgw.log.zip'"
+                        }
+                        sh "scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/spgw.log.zip spgw.log.${env.BUILD_ID}.zip"
+                        script {
+                            if(fileExists("spgw.log.${env.BUILD_ID}.zip")) {
+                                archiveArtifacts "spgw.log.${env.BUILD_ID}.zip"
+                            }
+                        }
+                    }
+                }
+                stage('Log Collection (Ping)') {
+                    steps {
+                        withCredentials([
+                        [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.R2LAB_FitNode_Credentials}", usernameVariable: 'fituser', passwordVariable: 'fitpasswd']
+                        ]) {
+                            echo '\u2705 \u001B[32mLog Collection (Ping)\u001B[0m'
+                            sh "ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollectPing --EPCIPAddress=${r2labEPC0IpAddr} --EPCUserName=${fituser} --EPCPassword=${fitpasswd} --EPCSourceCodePath=/home/${fituser}/openair-cn --EPCType=OAI-Rel14-CUPS\"'"
+                            sh "ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labEPC0}:/home/${fituser}/openair-cn/scripts/ping.log.zip /home/inria_oaici/archives/ping.log.zip'"
+                        }
+                        sh "scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/ping.log.zip ping.log.${env.BUILD_ID}.zip"
+                        script {
+                            if(fileExists("ping.log.${env.BUILD_ID}.zip")) {
+                                archiveArtifacts "ping.log.${env.BUILD_ID}.zip"
+                            }
+                        }
+                    }
+                }
+                stage('Log Collection (Iperf)') {
+                    steps {
+                        withCredentials([
+                        [$class: 'UsernamePasswordMultiBinding', credentialsId: "${params.R2LAB_FitNode_Credentials}", usernameVariable: 'fituser', passwordVariable: 'fitpasswd']
+                        ]) {
+                            echo '\u2705 \u001B[32mLog Collection (Iperf)\u001B[0m'
+                            sh "ssh -t -t inria_oaici@faraday.inria.fr 'ssh -t -t -b 192.168.3.100 ${fituser}@${r2labPythonExe} \"cd openairinterface5g/ci-scripts && python3 main.py --mode=LogCollectIperf --EPCIPAddress=${r2labEPC0IpAddr} --EPCUserName=${fituser} --EPCPassword=${fitpasswd} --EPCSourceCodePath=/home/${fituser}/openair-cn --EPCType=OAI-Rel14-CUPS\"'"
+                            sh "ssh -t inria_oaici@faraday.inria.fr 'scp ${fituser}@${r2labEPC0}:/home/${fituser}/openair-cn/scripts/iperf.log.zip /home/inria_oaici/archives/iperf.log.zip'"
+                        }
+                        sh "scp inria_oaici@faraday.inria.fr:/home/inria_oaici/archives/iperf.log.zip iperf.log.${env.BUILD_ID}.zip"
+                        script {
+                            if(fileExists("iperf.log.${env.BUILD_ID}.zip")) {
+                                archiveArtifacts "iperf.log.${env.BUILD_ID}.zip"
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        stage ("Clean-up Log Collection") {
+            steps {
+                sh "ssh -t inria_oaici@faraday.inria.fr 'rm -Rf /home/inria_oaici/archives'"
+            }
+        }
+    }
+
+    post {
+        always {
+            script {
+                echo '\u2705 \u001B[32mShutdown every node\u001B[0m'
+                sh 'ssh -t inria_oaici@faraday.inria.fr "all-off"'
+                sh 'ssh -t inria_oaici@faraday.inria.fr "all-off"'
+            }
+        }
+    }
+}
diff --git a/ci-scripts/buildOnVM.sh b/ci-scripts/buildOnVM.sh
index 4583b2f30a77ce76dba32d32bd80a660c7dd32eb..5142e3f2652994880beba8c349f9313d272113ae 100755
--- a/ci-scripts/buildOnVM.sh
+++ b/ci-scripts/buildOnVM.sh
@@ -168,8 +168,12 @@ function build_on_vm {
         echo "cp /home/ubuntu/zip-install.txt cmake_targets/log" >> $VM_CMDS
         echo "echo \"./tools/install_dependencies \"" >> $VM_CMDS
         echo "./tools/install_dependencies > cmake_targets/log/install-build.txt 2>&1" >> $VM_CMDS
+        echo "echo \"mkdir build\"" >> $VM_CMDS
+        echo "mkdir build" >> $VM_CMDS
+        echo "echo \"cd build\"" >> $VM_CMDS
+        echo "cd build" >> $VM_CMDS
         echo "echo \"$BUILD_OPTIONS \"" >> $VM_CMDS
-        echo "$BUILD_OPTIONS > cmake_targets/log/rt_controller.Rel14.txt 2>&1" >> $VM_CMDS
+        echo "$BUILD_OPTIONS > ../cmake_targets/log/rt_controller.Rel14.txt 2>&1" >> $VM_CMDS
     fi
     if [[ "$VM_NAME" != *"-cppcheck"* ]] && [[ "$VM_NAME" != *"-flexran-rtc"* ]]
     then
diff --git a/ci-scripts/main.py b/ci-scripts/main.py
index 3c79e6387a2e49bcd006b80947e36c04361c4d1b..1110a0b527759221a642fd966fc935456466da39 100644
--- a/ci-scripts/main.py
+++ b/ci-scripts/main.py
@@ -120,6 +120,7 @@ class SSHConnection():
 		self.ADBIPAddress = ''
 		self.ADBUserName = ''
 		self.ADBPassword = ''
+		self.ADBCentralized = True
 		self.testCase_id = ''
 		self.testXMLfiles = []
 		self.nbTestXMLfiles = 0
@@ -140,6 +141,11 @@ class SSHConnection():
 		self.nbMaxUEtoAttach = -1
 		self.UEDevices = []
 		self.UEDevicesStatus = []
+		self.UEDevicesRemoteServer = []
+		self.UEDevicesRemoteUser = []
+		self.UEDevicesOffCmd = []
+		self.UEDevicesOnCmd = []
+		self.UEDevicesRebootCmd = []
 		self.CatMDevices = []
 		self.UEIPAddresses = []
 		self.htmlFile = ''
@@ -177,6 +183,7 @@ class SSHConnection():
 		self.flexranCtrlInstalled = False
 		self.flexranCtrlStarted = False
 		self.expectedNbOfConnectedUEs = 0
+		self.startTime = 0
 
 	def open(self, ipaddress, username, password):
 		count = 0
@@ -204,7 +211,7 @@ class SSHConnection():
 					logging.debug('self.sshresponse = ' + str(self.sshresponse))
 			elif self.sshresponse == 2:
 				# Checking if we are really on the remote client defined by its IP address
-				self.command('stdbuf -o0 ifconfig | egrep --color=never "inet addr:"', '\$', 5)
+				self.command('stdbuf -o0 ifconfig | egrep --color=never "inet addr:|inet "', '\$', 5)
 				result = re.search(str(ipaddress), str(self.ssh.before))
 				if result is None:
 					self.close()
@@ -364,7 +371,7 @@ class SSHConnection():
 		self.open(lIpAddr, lUserName, lPassWord)
 		self.command('mkdir -p ' + lSourcePath, '\$', 5)
 		self.command('cd ' + lSourcePath, '\$', 5)
-		self.command('if [ ! -e .git ]; then stdbuf -o0 git clone ' + self.ranRepository + ' .; else stdbuf -o0 git fetch; fi', '\$', 600)
+		self.command('if [ ! -e .git ]; then stdbuf -o0 git clone ' + self.ranRepository + ' .; else stdbuf -o0 git fetch --prune; fi', '\$', 600)
 		# Raphael: here add a check if git clone or git fetch went smoothly
 		self.command('git config user.email "jenkins@openairinterface.org"', '\$', 5)
 		self.command('git config user.name "OAI Jenkins"', '\$', 5)
@@ -517,7 +524,7 @@ class SSHConnection():
 		self.open(self.UEIPAddress, self.UEUserName, self.UEPassword)
 		self.command('mkdir -p ' + self.UESourceCodePath, '\$', 5)
 		self.command('cd ' + self.UESourceCodePath, '\$', 5)
-		self.command('if [ ! -e .git ]; then stdbuf -o0 git clone ' + self.ranRepository + ' .; else stdbuf -o0 git fetch; fi', '\$', 600)
+		self.command('if [ ! -e .git ]; then stdbuf -o0 git clone ' + self.ranRepository + ' .; else stdbuf -o0 git fetch --prune; fi', '\$', 600)
 		# here add a check if git clone or git fetch went smoothly
 		self.command('git config user.email "jenkins@openairinterface.org"', '\$', 5)
 		self.command('git config user.name "OAI Jenkins"', '\$', 5)
@@ -604,19 +611,33 @@ class SSHConnection():
 			Usage()
 			sys.exit('Insufficient Parameter')
 		self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
-		if re.match('OAI', self.EPCType, re.IGNORECASE):
+		if re.match('OAI-Rel14-CUPS', self.EPCType, re.IGNORECASE):
+			logging.debug('Using the OAI EPC Release 14 Cassandra-based HSS')
+			self.command('cd ' + self.EPCSourceCodePath + '/scripts', '\$', 5)
+			logging.debug('\u001B[1m Launching tshark on all interfaces \u001B[0m')
+			EPC_PcapFileName = 'epc_' + self.testCase_id + '.pcap'
+			self.command('echo ' + self.EPCPassword + ' | sudo -S rm -f ' + EPC_PcapFileName, '\$', 5)
+			self.command('echo $USER; nohup sudo tshark -f "tcp port not 22 and port not 53" -i any -w ' + self.EPCSourceCodePath + '/scripts/' + EPC_PcapFileName + ' > /tmp/tshark.log 2>&1 &', self.EPCUserName, 5)
+			self.command('echo ' + self.EPCPassword + ' | sudo -S mkdir -p logs', '\$', 5)
+			self.command('echo ' + self.EPCPassword + ' | sudo -S rm -f hss_' + self.testCase_id + '.log logs/hss*.*', '\$', 5)
+			self.command('echo "oai_hss -j /usr/local/etc/oai/hss_rel14.json" > ./my-hss.sh', '\$', 5)
+			self.command('chmod 755 ./my-hss.sh', '\$', 5)
+			self.command('sudo daemon --unsafe --name=hss_daemon --chdir=' + self.EPCSourceCodePath + '/scripts -o ' + self.EPCSourceCodePath + '/scripts/hss_' + self.testCase_id + '.log ./my-hss.sh', '\$', 5)
+		elif re.match('OAI', self.EPCType, re.IGNORECASE):
 			logging.debug('Using the OAI EPC HSS')
 			self.command('cd ' + self.EPCSourceCodePath, '\$', 5)
 			self.command('source oaienv', '\$', 5)
 			self.command('cd scripts', '\$', 5)
 			self.command('echo ' + self.EPCPassword + ' | sudo -S ./run_hss 2>&1 | stdbuf -o0 awk \'{ print strftime("[%Y/%m/%d %H:%M:%S] ",systime()) $0 }\' | stdbuf -o0 tee -a hss_' + self.testCase_id + '.log &', 'Core state: 2 -> 3', 35)
-		else:
+		elif re.match('ltebox', self.EPCType, re.IGNORECASE):
 			logging.debug('Using the ltebox simulated HSS')
 			self.command('if [ -d ' + self.EPCSourceCodePath + '/scripts ]; then echo ' + self.eNBPassword + ' | sudo -S rm -Rf ' + self.EPCSourceCodePath + '/scripts ; fi', '\$', 5)
 			self.command('mkdir -p ' + self.EPCSourceCodePath + '/scripts', '\$', 5)
 			self.command('cd /opt/hss_sim0609', '\$', 5)
 			self.command('echo ' + self.EPCPassword + ' | sudo -S rm -f hss.log daemon.log', '\$', 5)
 			self.command('echo ' + self.EPCPassword + ' | sudo -S echo "Starting sudo session" && sudo daemon --unsafe --name=simulated_hss --chdir=/opt/hss_sim0609 ./starthss_real  ', '\$', 5)
+		else:
+			logging.error('This option should not occur!')
 		self.close()
 		self.CreateHtmlTestRow(self.EPCType, 'OK', ALL_PROCESSES_OK)
 
@@ -625,7 +646,14 @@ class SSHConnection():
 			Usage()
 			sys.exit('Insufficient Parameter')
 		self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
-		if re.match('OAI', self.EPCType, re.IGNORECASE):
+		if re.match('OAI-Rel14-CUPS', self.EPCType, re.IGNORECASE):
+			logging.debug('Using the OAI EPC Release 14 MME')
+			self.command('cd ' + self.EPCSourceCodePath + '/scripts', '\$', 5)
+			self.command('echo ' + self.EPCPassword + ' | sudo -S rm -f mme_' + self.testCase_id + '.log', '\$', 5)
+			self.command('echo "./run_mme --config-file /usr/local/etc/oai/mme.conf --set-virt-if" > ./my-mme.sh', '\$', 5)
+			self.command('chmod 755 ./my-mme.sh', '\$', 5)
+			self.command('sudo daemon --unsafe --name=mme_daemon --chdir=' + self.EPCSourceCodePath + '/scripts -o ' + self.EPCSourceCodePath + '/scripts/mme_' + self.testCase_id + '.log ./my-mme.sh', '\$', 5)
+		elif re.match('OAI', self.EPCType, re.IGNORECASE):
 			self.command('cd ' + self.EPCSourceCodePath, '\$', 5)
 			self.command('source oaienv', '\$', 5)
 			self.command('cd scripts', '\$', 5)
@@ -636,9 +664,11 @@ class SSHConnection():
 				sys.exit(1)
 			host_name = result.group('host_name')
 			self.command('echo ' + self.EPCPassword + ' | sudo -S ./run_mme 2>&1 | stdbuf -o0 tee -a mme_' + self.testCase_id + '.log &', 'MME app initialization complete', 100)
-		else:
+		elif re.match('ltebox', self.EPCType, re.IGNORECASE):
 			self.command('cd /opt/ltebox/tools', '\$', 5)
 			self.command('echo ' + self.EPCPassword + ' | sudo -S ./start_mme', '\$', 5)
+		else:
+			logging.error('This option should not occur!')
 		self.close()
 		self.CreateHtmlTestRow(self.EPCType, 'OK', ALL_PROCESSES_OK)
 
@@ -647,14 +677,27 @@ class SSHConnection():
 			Usage()
 			sys.exit('Insufficient Parameter')
 		self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
-		if re.match('OAI', self.EPCType, re.IGNORECASE):
+		if re.match('OAI-Rel14-CUPS', self.EPCType, re.IGNORECASE):
+			logging.debug('Using the OAI EPC Release 14 SPGW-CUPS')
+			self.command('cd ' + self.EPCSourceCodePath + '/scripts', '\$', 5)
+			self.command('echo ' + self.EPCPassword + ' | sudo -S rm -f spgwc_' + self.testCase_id + '.log spgwu_' + self.testCase_id + '.log', '\$', 5)
+			self.command('echo "spgwc -c /usr/local/etc/oai/spgw_c.conf" > ./my-spgwc.sh', '\$', 5)
+			self.command('chmod 755 ./my-spgwc.sh', '\$', 5)
+			self.command('sudo daemon --unsafe --name=spgwc_daemon --chdir=' + self.EPCSourceCodePath + '/scripts -o ' + self.EPCSourceCodePath + '/scripts/spgwc_' + self.testCase_id + '.log ./my-spgwc.sh', '\$', 5)
+			time.sleep(5)
+			self.command('echo "spgwu -c /usr/local/etc/oai/spgw_u.conf" > ./my-spgwu.sh', '\$', 5)
+			self.command('chmod 755 ./my-spgwu.sh', '\$', 5)
+			self.command('sudo daemon --unsafe --name=spgwu_daemon --chdir=' + self.EPCSourceCodePath + '/scripts -o ' + self.EPCSourceCodePath + '/scripts/spgwu_' + self.testCase_id + '.log ./my-spgwu.sh', '\$', 5)
+		elif re.match('OAI', self.EPCType, re.IGNORECASE):
 			self.command('cd ' + self.EPCSourceCodePath, '\$', 5)
 			self.command('source oaienv', '\$', 5)
 			self.command('cd scripts', '\$', 5)
 			self.command('echo ' + self.EPCPassword + ' | sudo -S ./run_spgw 2>&1 | stdbuf -o0 tee -a spgw_' + self.testCase_id + '.log &', 'Initializing SPGW-APP task interface: DONE', 30)
-		else:
+		elif re.match('ltebox', self.EPCType, re.IGNORECASE):
 			self.command('cd /opt/ltebox/tools', '\$', 5)
 			self.command('echo ' + self.EPCPassword + ' | sudo -S ./start_xGw', '\$', 5)
+		else:
+			logging.error('This option should not occur!')
 		self.close()
 		self.CreateHtmlTestRow(self.EPCType, 'OK', ALL_PROCESSES_OK)
 
@@ -831,12 +874,31 @@ class SSHConnection():
 
 		self.close()
 
-	def InitializeUE_common(self, device_id):
-		logging.debug('send adb commands')
+	def InitializeUE_common(self, device_id, idx):
 		try:
 			self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
+			if not self.ADBCentralized:
+				# Reboot UE
+				self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' ' + self.UEDevicesRebootCmd[idx], '\$', 60)
+				# Wait
+				time.sleep(60)
+				# Put in LTE-Mode only
+				self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' \'adb -s ' + device_id + ' shell "settings put global preferred_network_mode 11"\'', '\$', 60)
+				self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' \'adb -s ' + device_id + ' shell "settings put global preferred_network_mode1 11"\'', '\$', 60)
+				self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' \'adb -s ' + device_id + ' shell "settings put global preferred_network_mode2 11"\'', '\$', 60)
+				self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' \'adb -s ' + device_id + ' shell "settings put global preferred_network_mode3 11"\'', '\$', 60)
+				# enable data service
+				self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' \'adb -s ' + device_id + ' shell "svc data enable"\'', '\$', 60)
+				# we need to do radio on/off cycle to make sure of above changes
+				# airplane mode off // radio on
+				self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' ' + self.UEDevicesOnCmd[idx], '\$', 60)
+				time.sleep(10)
+				# airplane mode on // radio off
+				self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' ' + self.UEDevicesOffCmd[idx], '\$', 60)
+				self.close()
+				return
 			# enable data service
-			self.command('stdbuf -o0 adb -s ' + device_id + ' shell svc data enable', '\$', 60)
+			self.command('stdbuf -o0 adb -s ' + device_id + ' shell "svc data enable"', '\$', 60)
 
 			# The following commands are deprecated since we no longer work on Android 7+
 			# self.command('stdbuf -o0 adb -s ' + device_id + ' shell settings put global airplane_mode_on 1', '\$', 10)
@@ -858,11 +920,13 @@ class SSHConnection():
 			Usage()
 			sys.exit('Insufficient Parameter')
 		multi_jobs = []
+		i = 0
 		for device_id in self.UEDevices:
-			p = Process(target = self.InitializeUE_common, args = (device_id,))
+			p = Process(target = self.InitializeUE_common, args = (device_id,i,))
 			p.daemon = True
 			p.start()
 			multi_jobs.append(p)
+			i += 1
 		for job in multi_jobs:
 			job.join()
 		self.CreateHtmlTestRow('N/A', 'OK', ALL_PROCESSES_OK)
@@ -897,7 +961,12 @@ class SSHConnection():
 		result = re.search('--no-L2-connect', str(self.Initialize_OAI_UE_args))
 		# We may have to regenerate the .u* files
 		if result is None:
-			self.command('sed -e "s#93#92#" -e "s#8baf473f2f8fd09487cccbd7097c6862#fec86ba6eb707ed08905757b1bb44b8f#" -e "s#e734f8734007d6c5ce7a0508809e7e9c#C42449363BBAD02B66D16BC975D77CC1#" ../../../openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf > ../../../openair3/NAS/TOOLS/ci-ue_eurecom_test_sfr.conf', '\$', 5)
+			self.command('ls /tmp/*.sed', '\$', 5)
+			result = re.search('adapt_usim_parameters', str(self.ssh.before))
+			if result is not None:
+				self.command('sed -f /tmp/adapt_usim_parameters.sed ../../../openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf > ../../../openair3/NAS/TOOLS/ci-ue_eurecom_test_sfr.conf', '\$', 5)
+			else:
+				self.command('sed -e "s#93#92#" -e "s#8baf473f2f8fd09487cccbd7097c6862#fec86ba6eb707ed08905757b1bb44b8f#" -e "s#e734f8734007d6c5ce7a0508809e7e9c#C42449363BBAD02B66D16BC975D77CC1#" ../../../openair3/NAS/TOOLS/ue_eurecom_test_sfr.conf > ../../../openair3/NAS/TOOLS/ci-ue_eurecom_test_sfr.conf', '\$', 5)
 			self.command('echo ' + self.UEPassword + ' | sudo -S rm -Rf .u*', '\$', 5)
 			self.command('echo ' + self.UEPassword + ' | sudo -S ../../../targets/bin/conf2uedata -c ../../../openair3/NAS/TOOLS/ci-ue_eurecom_test_sfr.conf -o .', '\$', 5)
 		# Launch UE with the modified config file
@@ -975,11 +1044,13 @@ class SSHConnection():
 			result = re.search('--no-L2-connect', str(self.Initialize_OAI_UE_args))
 			if result is None:
 				self.command('ifconfig oaitun_ue1', '\$', 4)
-				result = re.search('inet addr', str(self.ssh.before))
+				# ifconfig output is different between ubuntu 16 and ubuntu 18
+				result = re.search('inet addr:1|inet 1', str(self.ssh.before))
 				if result is not None:
 					logging.debug('\u001B[1m oaitun_ue1 interface is mounted and configured\u001B[0m')
 					tunnelInterfaceStatus = True
 				else:
+					logging.debug(str(self.ssh.before))
 					logging.error('\u001B[1m oaitun_ue1 interface is either NOT mounted or NOT configured\u001B[0m')
 					tunnelInterfaceStatus = False
 			else:
@@ -989,6 +1060,11 @@ class SSHConnection():
 		if fullSyncStatus and gotSyncStatus and tunnelInterfaceStatus:
 			self.CreateHtmlTestRow(self.Initialize_OAI_UE_args, 'OK', ALL_PROCESSES_OK, 'OAI UE')
 			logging.debug('\u001B[1m Initialize OAI UE Completed\u001B[0m')
+			if (self.ADBIPAddress != 'none'):
+				self.UEDevices = []
+				self.UEDevices.append('OAI-UE')
+				self.UEDevicesStatus = []
+				self.UEDevicesStatus.append(UE_STATUS_DETACHED)
 		else:
 			self.htmlUEFailureMsg = 'oaitun_ue1 interface is either NOT mounted or NOT configured'
 			self.CreateHtmlTestRow(self.Initialize_OAI_UE_args, 'KO', OAI_UE_PROCESS_NO_TUNNEL_INTERFACE, 'OAI UE')
@@ -1234,18 +1310,25 @@ class SSHConnection():
 		except:
 			os.kill(os.getppid(),signal.SIGUSR1)
 
-	def AttachUE_common(self, device_id, statusQueue, lock):
+	def AttachUE_common(self, device_id, statusQueue, lock, idx):
 		try:
 			self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
-			if device_id == '84B7N16418004022':
-				self.command('stdbuf -o0 adb -s ' + device_id + ' shell "su - root -c /data/local/tmp/on"', '\$', 60)
+			if self.ADBCentralized:
+				if device_id == '84B7N16418004022':
+					self.command('stdbuf -o0 adb -s ' + device_id + ' shell "su - root -c /data/local/tmp/on"', '\$', 60)
+				else:
+					self.command('stdbuf -o0 adb -s ' + device_id + ' shell /data/local/tmp/on', '\$', 60)
 			else:
-				self.command('stdbuf -o0 adb -s ' + device_id + ' shell /data/local/tmp/on', '\$', 60)
+				# airplane mode off // radio on
+				self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' ' + self.UEDevicesOnCmd[idx], '\$', 60)
 			time.sleep(2)
 			max_count = 45
 			count = max_count
 			while count > 0:
-				self.command('stdbuf -o0 adb -s ' + device_id + ' shell dumpsys telephony.registry | grep mDataConnectionState', '\$', 15)
+				if self.ADBCentralized:
+					self.command('stdbuf -o0 adb -s ' + device_id + ' shell "dumpsys telephony.registry" | grep -m 1 mDataConnectionState', '\$', 15)
+				else:
+					self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' \'adb -s ' + device_id + ' shell "dumpsys telephony.registry"\' | grep -m 1 mDataConnectionState', '\$', 60)
 				result = re.search('mDataConnectionState.*=(?P<state>[0-9\-]+)', str(self.ssh.before))
 				if result is None:
 					logging.debug('\u001B[1;37;41m mDataConnectionState Not Found! \u001B[0m')
@@ -1267,15 +1350,21 @@ class SSHConnection():
 				count = count - 1
 				if count == 15 or count == 30:
 					logging.debug('\u001B[1;30;43m Retry UE (' + device_id + ') Flight Mode Off \u001B[0m')
-					if device_id == '84B7N16418004022':
-						self.command('stdbuf -o0 adb -s ' + device_id + ' shell "su - root -c /data/local/tmp/off"', '\$', 60)
+					if self.ADBCentralized:
+						if device_id == '84B7N16418004022':
+							self.command('stdbuf -o0 adb -s ' + device_id + ' shell "su - root -c /data/local/tmp/off"', '\$', 60)
+						else:
+							self.command('stdbuf -o0 adb -s ' + device_id + ' shell /data/local/tmp/off', '\$', 60)
 					else:
-						self.command('stdbuf -o0 adb -s ' + device_id + ' shell /data/local/tmp/off', '\$', 60)
+						self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' ' + self.UEDevicesOffCmd[idx], '\$', 60)
 					time.sleep(0.5)
-					if device_id == '84B7N16418004022':
-						self.command('stdbuf -o0 adb -s ' + device_id + ' shell "su - root -c /data/local/tmp/on"', '\$', 60)
+					if self.ADBCentralized:
+						if device_id == '84B7N16418004022':
+							self.command('stdbuf -o0 adb -s ' + device_id + ' shell "su - root -c /data/local/tmp/on"', '\$', 60)
+						else:
+							self.command('stdbuf -o0 adb -s ' + device_id + ' shell /data/local/tmp/on', '\$', 60)
 					else:
-						self.command('stdbuf -o0 adb -s ' + device_id + ' shell /data/local/tmp/on', '\$', 60)
+						self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' ' + self.UEDevicesOnCmd[idx], '\$', 60)
 					time.sleep(0.5)
 				logging.debug('\u001B[1mWait UE (' + device_id + ') a second until mDataConnectionState=2 (' + str(max_count-count) + ' times)\u001B[0m')
 				time.sleep(1)
@@ -1308,7 +1397,7 @@ class SSHConnection():
 		for device_id in self.UEDevices:
 			if (self.nbMaxUEtoAttach == -1) or (nb_ue_to_connect < self.nbMaxUEtoAttach):
 				self.UEDevicesStatus[nb_ue_to_connect] = UE_STATUS_ATTACHING
-				p = Process(target = self.AttachUE_common, args = (device_id, status_queue, lock,))
+				p = Process(target = self.AttachUE_common, args = (device_id, status_queue, lock,nb_ue_to_connect,))
 				p.daemon = True
 				p.start()
 				multi_jobs.append(p)
@@ -1349,13 +1438,16 @@ class SSHConnection():
 				self.CreateHtmlTestRowQueue('N/A', 'KO', len(self.UEDevices), html_queue)
 				self.AutoTerminateUEandeNB()
 
-	def DetachUE_common(self, device_id):
+	def DetachUE_common(self, device_id, idx):
 		try:
 			self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
-			if device_id == '84B7N16418004022':
-				self.command('stdbuf -o0 adb -s ' + device_id + ' shell "su - root -c /data/local/tmp/off"', '\$', 60)
+			if self.ADBCentralized:
+				if device_id == '84B7N16418004022':
+					self.command('stdbuf -o0 adb -s ' + device_id + ' shell "su - root -c /data/local/tmp/off"', '\$', 60)
+				else:
+					self.command('stdbuf -o0 adb -s ' + device_id + ' shell /data/local/tmp/off', '\$', 60)
 			else:
-				self.command('stdbuf -o0 adb -s ' + device_id + ' shell /data/local/tmp/off', '\$', 60)
+				self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' ' + self.UEDevicesOffCmd[idx], '\$', 60)
 			logging.debug('\u001B[1mUE (' + device_id + ') Detach Completed\u001B[0m')
 			self.close()
 		except:
@@ -1376,7 +1468,7 @@ class SSHConnection():
 		cnt = 0
 		for device_id in self.UEDevices:
 			self.UEDevicesStatus[cnt] = UE_STATUS_DETACHING
-			p = Process(target = self.DetachUE_common, args = (device_id,))
+			p = Process(target = self.DetachUE_common, args = (device_id,cnt,))
 			p.daemon = True
 			p.start()
 			multi_jobs.append(p)
@@ -1453,11 +1545,14 @@ class SSHConnection():
 			job.join()
 		self.CreateHtmlTestRow('N/A', 'OK', ALL_PROCESSES_OK)
 
-	def DataDisableUE_common(self, device_id):
+	def DataDisableUE_common(self, device_id, idx):
 		try:
 			self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
-			# enable data service
-			self.command('stdbuf -o0 adb -s ' + device_id + ' shell svc data disable', '\$', 60)
+			# disable data service
+			if self.ADBCentralized:
+				self.command('stdbuf -o0 adb -s ' + device_id + ' shell "svc data disable"', '\$', 60)
+			else:
+				self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' \'adb -s ' + device_id + ' shell "svc data disable"\'', '\$', 60)
 			logging.debug('\u001B[1mUE (' + device_id + ') Disabled Data Service\u001B[0m')
 			self.close()
 		except:
@@ -1468,20 +1563,25 @@ class SSHConnection():
 			Usage()
 			sys.exit('Insufficient Parameter')
 		multi_jobs = []
+		i = 0
 		for device_id in self.UEDevices:
-			p = Process(target = self.DataDisableUE_common, args = (device_id,))
+			p = Process(target = self.DataDisableUE_common, args = (device_id,i,))
 			p.daemon = True
 			p.start()
 			multi_jobs.append(p)
+			i += 1
 		for job in multi_jobs:
 			job.join()
 		self.CreateHtmlTestRow('N/A', 'OK', ALL_PROCESSES_OK)
 
-	def DataEnableUE_common(self, device_id):
+	def DataEnableUE_common(self, device_id, idx):
 		try:
 			self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
 			# enable data service
-			self.command('stdbuf -o0 adb -s ' + device_id + ' shell svc data enable', '\$', 60)
+			if self.ADBCentralized:
+				self.command('stdbuf -o0 adb -s ' + device_id + ' shell "svc data enable"', '\$', 60)
+			else:
+				self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' \'adb -s ' + device_id + ' shell "svc data enable"\'', '\$', 60)
 			logging.debug('\u001B[1mUE (' + device_id + ') Enabled Data Service\u001B[0m')
 			self.close()
 		except:
@@ -1492,11 +1592,13 @@ class SSHConnection():
 			Usage()
 			sys.exit('Insufficient Parameter')
 		multi_jobs = []
+		i = 0
 		for device_id in self.UEDevices:
-			p = Process(target = self.DataEnableUE_common, args = (device_id,))
+			p = Process(target = self.DataEnableUE_common, args = (device_id,i,))
 			p.daemon = True
 			p.start()
 			multi_jobs.append(p)
+			i += 1
 		for job in multi_jobs:
 			job.join()
 		self.CreateHtmlTestRow('N/A', 'OK', ALL_PROCESSES_OK)
@@ -1506,8 +1608,34 @@ class SSHConnection():
 			Usage()
 			sys.exit('Insufficient Parameter')
 		self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
-		self.command('adb devices', '\$', 15)
-		self.UEDevices = re.findall("\\\\r\\\\n([A-Za-z0-9]+)\\\\tdevice",str(self.ssh.before))
+		if self.ADBCentralized:
+			self.command('adb devices', '\$', 15)
+			self.UEDevices = re.findall("\\\\r\\\\n([A-Za-z0-9]+)\\\\tdevice",str(self.ssh.before))
+			self.close()
+		else:
+			if (os.path.isfile('./phones_list.txt')):
+				os.remove('./phones_list.txt')
+			self.command('ls /etc/*/phones*.txt', '\$', 5)
+			result = re.search('/etc/ci/phones_list.txt', str(self.ssh.before))
+			self.close()
+			if (result is not None) and (len(self.UEDevices) == 0):
+				self.copyin(self.ADBIPAddress, self.ADBUserName, self.ADBPassword, '/etc/ci/phones_list.txt', '.')
+				if (os.path.isfile('./phones_list.txt')):
+					phone_list_file = open('./phones_list.txt', 'r')
+					for line in phone_list_file.readlines():
+						line = line.strip()
+						result = re.search('^#', line)
+						if result is not None:
+							continue
+						comma_split = line.split(",")
+						self.UEDevices.append(comma_split[0])
+						self.UEDevicesRemoteServer.append(comma_split[1])
+						self.UEDevicesRemoteUser.append(comma_split[2])
+						self.UEDevicesOffCmd.append(comma_split[3])
+						self.UEDevicesOnCmd.append(comma_split[4])
+						self.UEDevicesRebootCmd.append(comma_split[5])
+					phone_list_file.close()
+
 		if terminate_ue_flag == False:
 			if len(self.UEDevices) == 0:
 				logging.debug('\u001B[1;37;41m UE Not Found! \u001B[0m')
@@ -1517,25 +1645,36 @@ class SSHConnection():
 			while cnt < len(self.UEDevices):
 				self.UEDevicesStatus.append(UE_STATUS_DETACHED)
 				cnt += 1
-		self.close()
 
 	def GetAllCatMDevices(self, terminate_ue_flag):
 		if self.ADBIPAddress == '' or self.ADBUserName == '' or self.ADBPassword == '':
 			Usage()
 			sys.exit('Insufficient Parameter')
 		self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
-		self.command('lsusb | egrep "Future Technology Devices International, Ltd FT2232C" | sed -e "s#:.*##" -e "s# #_#g"', '\$', 15)
-		self.CatMDevices = re.findall("\\\\r\\\\n([A-Za-z0-9_]+)",str(self.ssh.before))
+		if self.ADBCentralized:
+			self.command('lsusb | egrep "Future Technology Devices International, Ltd FT2232C" | sed -e "s#:.*##" -e "s# #_#g"', '\$', 15)
+			self.CatMDevices = re.findall("\\\\r\\\\n([A-Za-z0-9_]+)",str(self.ssh.before))
+		else:
+			if (os.path.isfile('./modules_list.txt')):
+				os.remove('./modules_list.txt')
+			self.command('ls /etc/*/modules*.txt', '\$', 5)
+			result = re.search('/etc/ci/modules_list.txt', str(self.ssh.before))
+			self.close()
+			if result is not None:
+				logging.debug('Found a module list file on ADB server')
 		if terminate_ue_flag == False:
 			if len(self.CatMDevices) == 0:
 				logging.debug('\u001B[1;37;41m CAT-M UE Not Found! \u001B[0m')
 				sys.exit(1)
 		self.close()
 
-	def CheckUEStatus_common(self, lock, device_id, statusQueue):
+	def CheckUEStatus_common(self, lock, device_id, statusQueue, idx):
 		try:
 			self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
-			self.command('stdbuf -o0 adb -s ' + device_id + ' shell dumpsys telephony.registry', '\$', 15)
+			if self.ADBCentralized:
+				self.command('stdbuf -o0 adb -s ' + device_id + ' shell "dumpsys telephony.registry"', '\$', 15)
+			else:
+				self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' \'adb -s ' + device_id + ' shell "dumpsys telephony.registry"\'', '\$', 60)
 			result = re.search('mServiceState=(?P<serviceState>[0-9]+)', str(self.ssh.before))
 			serviceState = 'Service State: UNKNOWN'
 			if result is not None:
@@ -1592,11 +1731,13 @@ class SSHConnection():
 		multi_jobs = []
 		lock = Lock()
 		status_queue = SimpleQueue()
+		i = 0
 		for device_id in self.UEDevices:
-			p = Process(target = self.CheckUEStatus_common, args = (lock,device_id,status_queue,))
+			p = Process(target = self.CheckUEStatus_common, args = (lock,device_id,status_queue,i,))
 			p.daemon = True
 			p.start()
 			multi_jobs.append(p)
+			i += 1
 		for job in multi_jobs:
 			job.join()
 		if self.flexranCtrlInstalled and self.flexranCtrlStarted:
@@ -1652,9 +1793,12 @@ class SSHConnection():
 				sys.exit('Insufficient Parameter')
 			self.open(self.UEIPAddress, self.UEUserName, self.UEPassword)
 			self.command('ifconfig oaitun_ue1', '\$', 4)
-			result = re.search('inet addr:(?P<ueipaddress>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)', str(self.ssh.before))
+			result = re.search('inet addr:(?P<ueipaddress>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)|inet (?P<ueipaddress2>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)', str(self.ssh.before))
 			if result is not None:
-				UE_IPAddress = result.group('ueipaddress')
+				if result.group('ueipaddress') is not None:
+					UE_IPAddress = result.group('ueipaddress')
+				else:
+					UE_IPAddress = result.group('ueipaddress2')
 				logging.debug('\u001B[1mUE (' + self.UEDevices[0] + ') IP Address is ' + UE_IPAddress + '\u001B[0m')
 				self.UEIPAddresses.append(UE_IPAddress)
 			else:
@@ -1670,7 +1814,10 @@ class SSHConnection():
 				continue
 			count = 0
 			while count < 4:
-				self.command('stdbuf -o0 adb -s ' + device_id + ' shell ip addr show | grep rmnet', '\$', 15)
+				if self.ADBCentralized:
+					self.command('stdbuf -o0 adb -s ' + device_id + ' shell "ip addr show | grep rmnet"', '\$', 15)
+				else:
+					self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' \'adb -s ' + device_id + ' shell "ip addr show | grep rmnet"\'', '\$', 60)
 				result = re.search('inet (?P<ueipaddress>[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\/[0-9]+[0-9a-zA-Z\.\s]+', str(self.ssh.before))
 				if result is None:
 					logging.debug('\u001B[1;37;41m UE IP Address Not Found! \u001B[0m')
@@ -2214,17 +2361,33 @@ class SSHConnection():
 			ipnumbers[3] = '1'
 		EPC_Iperf_UE_IPAddress = ipnumbers[0] + '.' + ipnumbers[1] + '.' + ipnumbers[2] + '.' + ipnumbers[3]
 
-		# Launch iperf server on EPC side
-		self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
-		self.command('cd ' + self.EPCSourceCodePath + '/scripts', '\$', 5)
-		self.command('rm -f iperf_server_' + self.testCase_id + '_' + device_id + '.log', '\$', 5)
+		# Launch iperf server on EPC side (true for ltebox and old open-air-cn0
+		# But for OAI-Rel14-CUPS, we launch from python executor and we are using its IP address as iperf client address
+		launchFromEpc = True
+		if re.match('OAI-Rel14-CUPS', self.EPCType, re.IGNORECASE):
+			launchFromEpc = False
+			cmd = 'hostname -I'
+			ret = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, encoding='utf-8')
+			if ret.stdout is not None:
+				EPC_Iperf_UE_IPAddress = ret.stdout.strip()
 		port = 5001 + idx
-		if udpIperf:
-			self.command('echo $USER; nohup iperf -u -s -i 1 -p ' + str(port) + ' > iperf_server_' + self.testCase_id + '_' + device_id + '.log &', self.EPCUserName, 5)
+		if launchFromEpc:
+			self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
+			self.command('cd ' + self.EPCSourceCodePath + '/scripts', '\$', 5)
+			self.command('rm -f iperf_server_' + self.testCase_id + '_' + device_id + '.log', '\$', 5)
+			if udpIperf:
+				self.command('echo $USER; nohup iperf -u -s -i 1 -p ' + str(port) + ' > iperf_server_' + self.testCase_id + '_' + device_id + '.log &', self.EPCUserName, 5)
+			else:
+				self.command('echo $USER; nohup iperf -s -i 1 -p ' + str(port) + ' > iperf_server_' + self.testCase_id + '_' + device_id + '.log &', self.EPCUserName, 5)
+			self.close()
 		else:
-			self.command('echo $USER; nohup iperf -s -i 1 -p ' + str(port) + ' > iperf_server_' + self.testCase_id + '_' + device_id + '.log &', self.EPCUserName, 5)
+			if udpIperf:
+				cmd = 'nohup iperf -u -s -i 1 -p ' + str(port) + ' > iperf_server_' + self.testCase_id + '_' + device_id + '.log 2>&1 &'
+			else:
+				cmd = 'nohup iperf -s -i 1 -p ' + str(port) + ' > iperf_server_' + self.testCase_id + '_' + device_id + '.log 2>&1 &'
+			logging.debug(cmd + '\n')
+			subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, encoding='utf-8')
 		time.sleep(0.5)
-		self.close()
 
 		# Launch iperf client on UE
 		if (device_id == 'OAI-UE'):
@@ -2260,15 +2423,23 @@ class SSHConnection():
 		self.close()
 
 		# Kill iperf server on EPC side
-		self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
-		self.command('killall --signal SIGKILL iperf', self.EPCUserName, 5)
-		self.close()
+		if launchFromEpc:
+			self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
+			self.command('killall --signal SIGKILL iperf', self.EPCUserName, 5)
+			self.close()
+		else:
+			cmd = 'killall --signal SIGKILL iperf'
+			logging.debug(cmd + '\n')
+			subprocess.run(cmd, shell=True)
+			time.sleep(1)
+			self.copyout(self.EPCIPAddress, self.EPCUserName, self.EPCPassword, 'iperf_server_' + self.testCase_id + '_' + device_id + '.log', self.EPCSourceCodePath + '/scripts')
 		# in case of failure, retrieve server log
 		if (clientStatus == -1):
-			time.sleep(1)
-			if (os.path.isfile('iperf_server_' + self.testCase_id + '_' + device_id + '.log')):
-				os.remove('iperf_server_' + self.testCase_id + '_' + device_id + '.log')
-			self.copyin(self.EPCIPAddress, self.EPCUserName, self.EPCPassword, self.EPCSourceCodePath + '/scripts/iperf_server_' + self.testCase_id + '_' + device_id + '.log', '.')
+			if launchFromEpc:
+				time.sleep(1)
+				if (os.path.isfile('iperf_server_' + self.testCase_id + '_' + device_id + '.log')):
+					os.remove('iperf_server_' + self.testCase_id + '_' + device_id + '.log')
+				self.copyin(self.EPCIPAddress, self.EPCUserName, self.EPCPassword, self.EPCSourceCodePath + '/scripts/iperf_server_' + self.testCase_id + '_' + device_id + '.log', '.')
 			self.Iperf_analyzeV2Server(lock, UE_IPAddress, device_id, statusQueue, modified_options)
 		# in case of OAI-UE 
 		if (device_id == 'OAI-UE'):
@@ -2288,7 +2459,10 @@ class SSHConnection():
 				self.command('if [ ! -d ' + self.EPCSourceCodePath + '/scripts ]; then mkdir -p ' + self.EPCSourceCodePath + '/scripts ; fi', '\$', 5)
 				self.command('cd ' + self.EPCSourceCodePath + '/scripts', '\$', 5)
 				# Checking if iperf / iperf3 are installed
-				self.command('adb -s ' + device_id + ' shell "ls /data/local/tmp"', '\$', 5)
+				if self.ADBCentralized:
+					self.command('adb -s ' + device_id + ' shell "ls /data/local/tmp"', '\$', 5)
+				else:
+					self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' \'adb -s ' + device_id + ' shell "ls /data/local/tmp"\'', '\$', 60)
 				result = re.search('iperf3', str(self.ssh.before))
 				if result is None:
 					result = re.search('iperf', str(self.ssh.before))
@@ -2322,22 +2496,32 @@ class SSHConnection():
 			else:
 				self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
 				self.command('cd ' + self.EPCSourceCodePath + '/scripts', '\$', 5)
-				if (useIperf3):
-					self.command('stdbuf -o0 adb -s ' + device_id + ' shell /data/local/tmp/iperf3 -s &', '\$', 5)
+				if self.ADBCentralized:
+					if (useIperf3):
+						self.command('stdbuf -o0 adb -s ' + device_id + ' shell /data/local/tmp/iperf3 -s &', '\$', 5)
+					else:
+						self.command('rm -f iperf_server_' + self.testCase_id + '_' + device_id + '.log', '\$', 5)
+						result = re.search('-u', str(self.iperf_args))
+						if result is None:
+							self.command('echo $USER; nohup adb -s ' + device_id + ' shell "/data/local/tmp/iperf -s -i 1" > iperf_server_' + self.testCase_id + '_' + device_id + '.log &', self.ADBUserName, 5)
+							udpIperf = False
+						else:
+							self.command('echo $USER; nohup adb -s ' + device_id + ' shell "/data/local/tmp/iperf -u -s -i 1" > iperf_server_' + self.testCase_id + '_' + device_id + '.log &', self.ADBUserName, 5)
 				else:
 					self.command('rm -f iperf_server_' + self.testCase_id + '_' + device_id + '.log', '\$', 5)
-					result = re.search('-u', str(self.iperf_args))
-					if result is None:
-						self.command('echo $USER; nohup adb -s ' + device_id + ' shell "/data/local/tmp/iperf -s -i 1" > iperf_server_' + self.testCase_id + '_' + device_id + '.log &', self.ADBUserName, 5)
-						udpIperf = False
-					else:
-						self.command('echo $USER; nohup adb -s ' + device_id + ' shell "/data/local/tmp/iperf -u -s -i 1" > iperf_server_' + self.testCase_id + '_' + device_id + '.log &', self.ADBUserName, 5)
+					self.command('echo $USER; nohup ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' \'adb -s ' + device_id + ' shell "/data/local/tmp/iperf -u -s -i 1" > iperf_server_' + self.testCase_id + '_' + device_id + '.log &\' > /dev/null 2>&1', self.ADBUserName, 60)
+
 			time.sleep(0.5)
 			self.close()
 
-			# Launch the IPERF client on the EPC side for DL
-			self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
-			self.command('cd ' + self.EPCSourceCodePath + '/scripts', '\$', 5)
+			# Launch the IPERF client on the EPC side for DL (true for ltebox and old open-air-cn
+			# But for OAI-Rel14-CUPS, we launch from python executor
+			launchFromEpc = True
+			if re.match('OAI-Rel14-CUPS', self.EPCType, re.IGNORECASE):
+				launchFromEpc = False
+			if launchFromEpc:
+				self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
+				self.command('cd ' + self.EPCSourceCodePath + '/scripts', '\$', 5)
 			iperf_time = self.Iperf_ComputeTime()
 			time.sleep(0.5)
 
@@ -2347,16 +2531,31 @@ class SSHConnection():
 				modified_options = str(self.iperf_args)
 			time.sleep(0.5)
 
-			self.command('rm -f iperf_' + self.testCase_id + '_' + device_id + '.log', '\$', 5)
+			if launchFromEpc:
+				self.command('rm -f iperf_' + self.testCase_id + '_' + device_id + '.log', '\$', 5)
+			else:
+				if (os.path.isfile('iperf_' + self.testCase_id + '_' + device_id + '.log')):
+					os.remove('iperf_' + self.testCase_id + '_' + device_id + '.log')
 			if (useIperf3):
 				self.command('stdbuf -o0 iperf3 -c ' + UE_IPAddress + ' ' + modified_options + ' 2>&1 | stdbuf -o0 tee iperf_' + self.testCase_id + '_' + device_id + '.log', '\$', int(iperf_time)*5.0)
 
 				clientStatus = 0
 				self.Iperf_analyzeV3Output(lock, UE_IPAddress, device_id, statusQueue)
 			else:
-				iperf_status = self.command('stdbuf -o0 iperf -c ' + UE_IPAddress + ' ' + modified_options + ' 2>&1 | stdbuf -o0 tee iperf_' + self.testCase_id + '_' + device_id + '.log', '\$', int(iperf_time)*5.0)
+				if launchFromEpc:
+					iperf_status = self.command('stdbuf -o0 iperf -c ' + UE_IPAddress + ' ' + modified_options + ' 2>&1 | stdbuf -o0 tee iperf_' + self.testCase_id + '_' + device_id + '.log', '\$', int(iperf_time)*5.0)
+				else:
+					cmd = 'iperf -c ' + UE_IPAddress + ' ' + modified_options + ' 2>&1 > iperf_' + self.testCase_id + '_' + device_id + '.log'
+					message = cmd + '\n'
+					logging.debug(cmd)
+					ret = subprocess.run(cmd, shell=True)
+					iperf_status = ret.returncode
+					self.copyout(self.EPCIPAddress, self.EPCUserName, self.EPCPassword, 'iperf_' + self.testCase_id + '_' + device_id + '.log', self.EPCSourceCodePath + '/scripts')
+					self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
+					self.command('cat ' + self.EPCSourceCodePath + '/scripts/iperf_' + self.testCase_id + '_' + device_id + '.log', '\$', 5)
 				if iperf_status < 0:
-					self.close()
+					if launchFromEpc:
+						self.close()
 					message = 'iperf on UE (' + str(UE_IPAddress) + ') crashed due to TIMEOUT !'
 					logging.debug('\u001B[1;37;41m ' + message + ' \u001B[0m')
 					self.ping_iperf_wrong_exit(lock, UE_IPAddress, device_id, statusQueue, message)
@@ -2370,11 +2569,17 @@ class SSHConnection():
 				self.command('killall iperf', '\$', 5)
 			else:
 				self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
-				self.command('stdbuf -o0 adb -s ' + device_id + ' shell ps | grep --color=never iperf | grep -v grep', '\$', 5)
+				if self.ADBCentralized:
+					self.command('stdbuf -o0 adb -s ' + device_id + ' shell ps | grep --color=never iperf | grep -v grep', '\$', 5)
+				else:
+					self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' \'adb -s ' + device_id + ' shell "ps" | grep --color=never iperf | grep -v grep\'', '\$', 60)
 				result = re.search('shell +(?P<pid>\d+)', str(self.ssh.before))
 				if result is not None:
 					pid_iperf = result.group('pid')
-					self.command('stdbuf -o0 adb -s ' + device_id + ' shell kill -KILL ' + pid_iperf, '\$', 5)
+					if self.ADBCentralized:
+						self.command('stdbuf -o0 adb -s ' + device_id + ' shell kill -KILL ' + pid_iperf, '\$', 5)
+					else:
+						self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' \'adb -s ' + device_id + ' shell "kill -KILL ' + pid_iperf + '"\'', '\$', 60)
 			self.close()
 			# if the client report is absent, try to analyze the server log file
 			if (clientStatus == -1):
@@ -2390,7 +2595,8 @@ class SSHConnection():
 			# in case of OAI UE: 
 			if (device_id == 'OAI-UE'):
 				if (os.path.isfile('iperf_server_' + self.testCase_id + '_' + device_id + '.log')):
-					pass
+					if not launchFromEpc:
+						self.copyout(self.EPCIPAddress, self.EPCUserName, self.EPCPassword, 'iperf_server_' + self.testCase_id + '_' + device_id + '.log', self.EPCSourceCodePath + '/scripts')
 				else:
 					self.copyin(self.UEIPAddress, self.UEUserName, self.UEPassword, self.UESourceCodePath + '/cmake_targets/iperf_server_' + self.testCase_id + '_' + device_id + '.log', '.')
 					self.copyout(self.EPCIPAddress, self.EPCUserName, self.EPCPassword, 'iperf_server_' + self.testCase_id + '_' + device_id + '.log', self.EPCSourceCodePath + '/scripts')
@@ -2673,10 +2879,14 @@ class SSHConnection():
 		try:
 			self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
 			self.command('stdbuf -o0 ps -aux | grep --color=never hss | grep -v grep', '\$', 5)
-			if re.match('OAI', self.EPCType, re.IGNORECASE):
+			if re.match('OAI-Rel14-CUPS', self.EPCType, re.IGNORECASE):
+				result = re.search('oai_hss -j', str(self.ssh.before))
+			elif re.match('OAI', self.EPCType, re.IGNORECASE):
 				result = re.search('\/bin\/bash .\/run_', str(self.ssh.before))
-			else:
+			elif re.match('ltebox', self.EPCType, re.IGNORECASE):
 				result = re.search('hss_sim s6as diam_hss', str(self.ssh.before))
+			else:
+				logging.error('This should not happen!')
 			if result is None:
 				logging.debug('\u001B[1;37;41m HSS Process Not Found! \u001B[0m')
 				status_queue.put(HSS_PROCESS_FAILED)
@@ -2690,10 +2900,14 @@ class SSHConnection():
 		try:
 			self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
 			self.command('stdbuf -o0 ps -aux | grep --color=never mme | grep -v grep', '\$', 5)
-			if re.match('OAI', self.EPCType, re.IGNORECASE):
+			if re.match('OAI-Rel14-CUPS', self.EPCType, re.IGNORECASE):
+				result = re.search('mme -c', str(self.ssh.before))
+			elif re.match('OAI', self.EPCType, re.IGNORECASE):
 				result = re.search('\/bin\/bash .\/run_', str(self.ssh.before))
-			else:
+			elif re.match('ltebox', self.EPCType, re.IGNORECASE):
 				result = re.search('mme', str(self.ssh.before))
+			else:
+				logging.error('This should not happen!')
 			if result is None:
 				logging.debug('\u001B[1;37;41m MME Process Not Found! \u001B[0m')
 				status_queue.put(MME_PROCESS_FAILED)
@@ -2706,12 +2920,17 @@ class SSHConnection():
 	def CheckSPGWProcess(self, status_queue):
 		try:
 			self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
-			if re.match('OAI', self.EPCType, re.IGNORECASE):
+			if re.match('OAI-Rel14-CUPS', self.EPCType, re.IGNORECASE):
+				self.command('stdbuf -o0 ps -aux | grep --color=never spgw | grep -v grep', '\$', 5)
+				result = re.search('spgwu -c ', str(self.ssh.before))
+			elif re.match('OAI', self.EPCType, re.IGNORECASE):
 				self.command('stdbuf -o0 ps -aux | grep --color=never spgw | grep -v grep', '\$', 5)
 				result = re.search('\/bin\/bash .\/run_', str(self.ssh.before))
-			else:
+			elif re.match('ltebox', self.EPCType, re.IGNORECASE):
 				self.command('stdbuf -o0 ps -aux | grep --color=never xGw | grep -v grep', '\$', 5)
 				result = re.search('xGw', str(self.ssh.before))
+			else:
+				logging.error('This should not happen!')
 			if result is None:
 				logging.debug('\u001B[1;37;41m SPGW Process Not Found! \u001B[0m')
 				status_queue.put(SPGW_PROCESS_FAILED)
@@ -3153,12 +3372,12 @@ class SSHConnection():
 		if result is not None:
 			self.command('echo ' + lPassWord + ' | sudo -S daemon --name=enb' + str(self.eNB_instance) + '_daemon --stop', '\$', 5)
 			self.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGINT lte-softmodem || true', '\$', 5)
-			time.sleep(5)
+			time.sleep(10)
 			self.command('stdbuf -o0  ps -aux | grep --color=never softmodem | grep -v grep', '\$', 5)
 			result = re.search('lte-softmodem', str(self.ssh.before))
 			if result is not None:
 				self.command('echo ' + lPassWord + ' | sudo -S killall --signal SIGKILL lte-softmodem || true', '\$', 5)
-				time.sleep(2)
+				time.sleep(5)
 		self.command('rm -f my-lte-softmodem-run' + str(self.eNB_instance) + '.sh', '\$', 5)
 		self.close()
 		# If tracer options is on, stopping tshark on EPC side
@@ -3218,49 +3437,77 @@ class SSHConnection():
 
 	def TerminateHSS(self):
 		self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
-		if re.match('OAI', self.EPCType, re.IGNORECASE):
+		if re.match('OAI-Rel14-CUPS', self.EPCType, re.IGNORECASE):
+			self.command('echo ' + self.EPCPassword + ' | sudo -S killall --signal SIGINT oai_hss || true', '\$', 5)
+			time.sleep(2)
+			self.command('stdbuf -o0  ps -aux | grep hss | grep -v grep', '\$', 5)
+			result = re.search('oai_hss -j', str(self.ssh.before))
+			if result is not None:
+				self.command('echo ' + self.EPCPassword + ' | sudo -S killall --signal SIGKILL oai_hss || true', '\$', 5)
+			self.command('rm -f ' + self.EPCSourceCodePath + '/scripts/my-hss.sh', '\$', 5)
+		elif re.match('OAI', self.EPCType, re.IGNORECASE):
 			self.command('echo ' + self.EPCPassword + ' | sudo -S killall --signal SIGINT run_hss oai_hss || true', '\$', 5)
 			time.sleep(2)
 			self.command('stdbuf -o0  ps -aux | grep hss | grep -v grep', '\$', 5)
 			result = re.search('\/bin\/bash .\/run_', str(self.ssh.before))
 			if result is not None:
 				self.command('echo ' + self.EPCPassword + ' | sudo -S killall --signal SIGKILL run_hss oai_hss || true', '\$', 5)
-		else:
+		elif re.match('ltebox', self.EPCType, re.IGNORECASE):
 			self.command('cd ' + self.EPCSourceCodePath, '\$', 5)
 			self.command('cd scripts', '\$', 5)
 			self.command('echo ' + self.EPCPassword + ' | sudo -S daemon --name=simulated_hss --stop', '\$', 5)
 			time.sleep(1)
 			self.command('echo ' + self.EPCPassword + ' | sudo -S killall --signal SIGKILL hss_sim', '\$', 5)
+		else:
+			logging.error('This should not happen!')
 		self.close()
 		self.CreateHtmlTestRow('N/A', 'OK', ALL_PROCESSES_OK)
 
 	def TerminateMME(self):
 		self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
-		if re.match('OAI', self.EPCType, re.IGNORECASE):
+		if re.match('OAI', self.EPCType, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.EPCType, re.IGNORECASE):
 			self.command('echo ' + self.EPCPassword + ' | sudo -S killall --signal SIGINT run_mme mme || true', '\$', 5)
 			time.sleep(2)
 			self.command('stdbuf -o0 ps -aux | grep mme | grep -v grep', '\$', 5)
-			result = re.search('\/bin\/bash .\/run_', str(self.ssh.before))
+			result = re.search('mme -c', str(self.ssh.before))
 			if result is not None:
 				self.command('echo ' + self.EPCPassword + ' | sudo -S killall --signal SIGKILL run_mme mme || true', '\$', 5)
-		else:
+			self.command('rm -f ' + self.EPCSourceCodePath + '/scripts/my-mme.sh', '\$', 5)
+		elif re.match('ltebox', self.EPCType, re.IGNORECASE):
 			self.command('cd /opt/ltebox/tools', '\$', 5)
 			self.command('echo ' + self.EPCPassword + ' | sudo -S ./stop_mme', '\$', 5)
+		else:
+			logging.error('This should not happen!')
 		self.close()
 		self.CreateHtmlTestRow('N/A', 'OK', ALL_PROCESSES_OK)
 
 	def TerminateSPGW(self):
 		self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
-		if re.match('OAI', self.EPCType, re.IGNORECASE):
+		if re.match('OAI-Rel14-CUPS', self.EPCType, re.IGNORECASE):
+			self.command('echo ' + self.EPCPassword + ' | sudo -S killall --signal SIGINT spgwc spgwu || true', '\$', 5)
+			time.sleep(2)
+			self.command('stdbuf -o0 ps -aux | grep spgw | grep -v grep', '\$', 5)
+			result = re.search('spgwc -c |spgwu -c ', str(self.ssh.before))
+			if result is not None:
+				self.command('echo ' + self.EPCPassword + ' | sudo -S killall --signal SIGKILL spgwc spgwu || true', '\$', 5)
+			self.command('rm -f ' + self.EPCSourceCodePath + '/scripts/my-spgw*.sh', '\$', 5)
+			self.command('stdbuf -o0 ps -aux | grep tshark | grep -v grep', '\$', 5)
+			result = re.search('-w ', str(self.ssh.before))
+			if result is not None:
+				self.command('echo ' + self.EPCPassword + ' | sudo -S killall --signal SIGINT tshark || true', '\$', 5)
+				self.command('echo ' + self.EPCPassword + ' | sudo -S chmod 666 ' + self.EPCSourceCodePath + '/scripts/*.pcap', '\$', 5)
+		elif re.match('OAI', self.EPCType, re.IGNORECASE):
 			self.command('echo ' + self.EPCPassword + ' | sudo -S killall --signal SIGINT run_spgw spgw || true', '\$', 5)
 			time.sleep(2)
 			self.command('stdbuf -o0 ps -aux | grep spgw | grep -v grep', '\$', 5)
 			result = re.search('\/bin\/bash .\/run_', str(self.ssh.before))
 			if result is not None:
 				self.command('echo ' + self.EPCPassword + ' | sudo -S killall --signal SIGKILL run_spgw spgw || true', '\$', 5)
-		else:
+		elif re.match('ltebox', self.EPCType, re.IGNORECASE):
 			self.command('cd /opt/ltebox/tools', '\$', 5)
 			self.command('echo ' + self.EPCPassword + ' | sudo -S ./stop_xGw', '\$', 5)
+		else:
+			logging.error('This should not happen!')
 		self.close()
 		self.CreateHtmlTestRow('N/A', 'OK', ALL_PROCESSES_OK)
 
@@ -3279,18 +3526,30 @@ class SSHConnection():
 		self.flexranCtrlStarted = False
 		self.CreateHtmlTestRow('N/A', 'OK', ALL_PROCESSES_OK)
 
-	def TerminateUE_common(self, device_id):
+	def TerminateUE_common(self, device_id, idx):
 		try:
 			self.open(self.ADBIPAddress, self.ADBUserName, self.ADBPassword)
 			# back in airplane mode on (ie radio off)
-			self.command('stdbuf -o0 adb -s ' + device_id + ' shell /data/local/tmp/off', '\$', 60)
+			if self.ADBCentralized:
+				if device_id == '84B7N16418004022':
+					self.command('stdbuf -o0 adb -s ' + device_id + ' shell "su - root -c /data/local/tmp/off"', '\$', 60)
+				else:
+					self.command('stdbuf -o0 adb -s ' + device_id + ' shell /data/local/tmp/off', '\$', 60)
+			else:
+				self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' ' + self.UEDevicesOffCmd[idx], '\$', 60)
 			logging.debug('\u001B[1mUE (' + device_id + ') Detach Completed\u001B[0m')
 
-			self.command('stdbuf -o0 adb -s ' + device_id + ' shell ps | grep --color=never iperf | grep -v grep', '\$', 5)
+			if self.ADBCentralized:
+				self.command('stdbuf -o0 adb -s ' + device_id + ' shell "ps | grep --color=never iperf | grep -v grep"', '\$', 5)
+			else:
+				self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' \'adb -s ' + device_id + ' shell "ps | grep --color=never iperf | grep -v grep"\'', '\$', 60)
 			result = re.search('shell +(?P<pid>\d+)', str(self.ssh.before))
 			if result is not None:
 				pid_iperf = result.group('pid')
-				self.command('stdbuf -o0 adb -s ' + device_id + ' shell kill -KILL ' + pid_iperf, '\$', 5)
+				if self.ADBCentralized:
+					self.command('stdbuf -o0 adb -s ' + device_id + ' shell "kill -KILL ' + pid_iperf + '"', '\$', 5)
+				else:
+					self.command('ssh ' + self.UEDevicesRemoteUser[idx] + '@' + self.UEDevicesRemoteServer[idx] + ' \'adb -s ' + device_id + ' shell "kill -KILL ' + pid_iperf + '"\'', '\$', 60)
 			self.close()
 		except:
 			os.kill(os.getppid(),signal.SIGUSR1)
@@ -3299,11 +3558,13 @@ class SSHConnection():
 		terminate_ue_flag = True
 		self.GetAllUEDevices(terminate_ue_flag)
 		multi_jobs = []
+		i = 0
 		for device_id in self.UEDevices:
-			p = Process(target= SSH.TerminateUE_common, args = (device_id,))
+			p = Process(target= SSH.TerminateUE_common, args = (device_id,i,))
 			p.daemon = True
 			p.start()
 			multi_jobs.append(p)
+			i += 1
 		for job in multi_jobs:
 			job.join()
 		self.CreateHtmlTestRow('N/A', 'OK', ALL_PROCESSES_OK)
@@ -3316,12 +3577,12 @@ class SSHConnection():
 		if result is not None:
 			self.command('echo ' + self.UEPassword + ' | sudo -S daemon --name=ue' + str(self.UE_instance) + '_daemon --stop', '\$', 5)
 			self.command('echo ' + self.UEPassword + ' | sudo -S killall --signal SIGINT lte-uesoftmodem || true', '\$', 5)
-			time.sleep(5)
+			time.sleep(10)
 			self.command('ps -aux | grep --color=never softmodem | grep -v grep', '\$', 5)
 			result = re.search('lte-uesoftmodem', str(self.ssh.before))
 			if result is not None:
 				self.command('echo ' + self.UEPassword + ' | sudo -S killall --signal SIGKILL lte-uesoftmodem || true', '\$', 5)
-				time.sleep(2)
+				time.sleep(5)
 		self.command('rm -f my-lte-uesoftmodem-run' + str(self.UE_instance) + '.sh', '\$', 5)
 		self.close()
 		result = re.search('ue_', str(self.UELogFile))
@@ -3544,41 +3805,47 @@ class SSHConnection():
 
 	def LogCollectHSS(self):
 		self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
-		self.command('cd ' + self.EPCSourceCodePath, '\$', 5)
-		self.command('cd scripts', '\$', 5)
+		self.command('cd ' + self.EPCSourceCodePath + '/scripts', '\$', 5)
 		self.command('rm -f hss.log.zip', '\$', 5)
-		if re.match('OAI', self.EPCType, re.IGNORECASE):
+		if re.match('OAI', self.EPCType, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.EPCType, re.IGNORECASE):
 			self.command('zip hss.log.zip hss*.log', '\$', 60)
-			self.command('rm hss*.log', '\$', 5)
-		else:
+			self.command('echo ' + self.EPCPassword + ' | sudo -S rm hss*.log', '\$', 5)
+			if re.match('OAI-Rel14-CUPS', self.EPCType, re.IGNORECASE):
+				self.command('zip hss.log.zip logs/hss*.* *.pcap', '\$', 60)
+				self.command('echo ' + self.EPCPassword + ' | sudo -S rm -f logs/hss*.* *.pcap', '\$', 5)
+		elif re.match('ltebox', self.EPCType, re.IGNORECASE):
 			self.command('cp /opt/hss_sim0609/hss.log .', '\$', 60)
 			self.command('zip hss.log.zip hss.log', '\$', 60)
+		else:
+			logging.error('This option should not occur!')
 		self.close()
 
 	def LogCollectMME(self):
 		self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
-		self.command('cd ' + self.EPCSourceCodePath, '\$', 5)
-		self.command('cd scripts', '\$', 5)
+		self.command('cd ' + self.EPCSourceCodePath + '/scripts', '\$', 5)
 		self.command('rm -f mme.log.zip', '\$', 5)
-		if re.match('OAI', self.EPCType, re.IGNORECASE):
+		if re.match('OAI', self.EPCType, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.EPCType, re.IGNORECASE):
 			self.command('zip mme.log.zip mme*.log', '\$', 60)
-			self.command('rm mme*.log', '\$', 5)
-		else:
+			self.command('echo ' + self.EPCPassword + ' | sudo -S rm mme*.log', '\$', 5)
+		elif re.match('ltebox', self.EPCType, re.IGNORECASE):
 			self.command('cp /opt/ltebox/var/log/*Log.0 .', '\$', 5)
 			self.command('zip mme.log.zip mmeLog.0 s1apcLog.0 s1apsLog.0 s11cLog.0 libLog.0 s1apCodecLog.0', '\$', 60)
+		else:
+			logging.error('This option should not occur!')
 		self.close()
 
 	def LogCollectSPGW(self):
 		self.open(self.EPCIPAddress, self.EPCUserName, self.EPCPassword)
-		self.command('cd ' + self.EPCSourceCodePath, '\$', 5)
-		self.command('cd scripts', '\$', 5)
+		self.command('cd ' + self.EPCSourceCodePath + '/scripts', '\$', 5)
 		self.command('rm -f spgw.log.zip', '\$', 5)
-		if re.match('OAI', self.EPCType, re.IGNORECASE):
+		if re.match('OAI', self.EPCType, re.IGNORECASE) or re.match('OAI-Rel14-CUPS', self.EPCType, re.IGNORECASE):
 			self.command('zip spgw.log.zip spgw*.log', '\$', 60)
-			self.command('rm spgw*.log', '\$', 5)
-		else:
+			self.command('echo ' + self.EPCPassword + ' | sudo -S rm spgw*.log', '\$', 5)
+		elif re.match('ltebox', self.EPCType, re.IGNORECASE):
 			self.command('cp /opt/ltebox/var/log/xGwLog.0 .', '\$', 5)
 			self.command('zip spgw.log.zip xGwLog.0', '\$', 60)
+		else:
+			logging.error('This option should not occur!')
 		self.close()
 
 	def LogCollectOAIUE(self):
@@ -3773,6 +4040,7 @@ class SSHConnection():
 				self.htmlFile.write('  <div id="build-tab" class="tab-pane fade">\n')
 			self.htmlFile.write('  <table class="table" border = "1">\n')
 			self.htmlFile.write('      <tr bgcolor = "#33CCFF" >\n')
+			self.htmlFile.write('        <th>Relative Time (ms)</th>\n')
 			self.htmlFile.write('        <th>Test Id</th>\n')
 			self.htmlFile.write('        <th>Test Desc</th>\n')
 			self.htmlFile.write('        <th>Test Options</th>\n')
@@ -3796,7 +4064,7 @@ class SSHConnection():
 	def CreateHtmlTabFooter(self, passStatus):
 		if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)):
 			self.htmlFile.write('      <tr>\n')
-			self.htmlFile.write('        <th bgcolor = "#33CCFF" colspan=2>Final Tab Status</th>\n')
+			self.htmlFile.write('        <th bgcolor = "#33CCFF" colspan=3>Final Tab Status</th>\n')
 			if passStatus:
 				self.htmlFile.write('        <th bgcolor = "green" colspan=' + str(2 + self.htmlUEConnected) + '><font color="white">PASS <span class="glyphicon glyphicon-ok"></span> </font></th>\n')
 			else:
@@ -3869,7 +4137,9 @@ class SSHConnection():
 
 	def CreateHtmlTestRow(self, options, status, processesStatus, machine='eNB'):
 		if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)):
+			currentTime = int(round(time.time() * 1000)) - self.startTime
 			self.htmlFile.write('      <tr>\n')
+			self.htmlFile.write('        <td bgcolor = "lightcyan" >' + format(currentTime / 1000, '.1f') + '</td>\n')
 			self.htmlFile.write('        <td bgcolor = "lightcyan" >' + self.testCase_id  + '</td>\n')
 			self.htmlFile.write('        <td>' + self.desc  + '</td>\n')
 			self.htmlFile.write('        <td>' + str(options)  + '</td>\n')
@@ -3937,8 +4207,10 @@ class SSHConnection():
 
 	def CreateHtmlTestRowQueue(self, options, status, ue_status, ue_queue):
 		if ((not self.htmlFooterCreated) and (self.htmlHeaderCreated)):
+			currentTime = int(round(time.time() * 1000)) - self.startTime
 			addOrangeBK = False
 			self.htmlFile.write('      <tr>\n')
+			self.htmlFile.write('        <td bgcolor = "lightcyan" >' + format(currentTime / 1000, '.1f') + '</td>\n')
 			self.htmlFile.write('        <td bgcolor = "lightcyan" >' + self.testCase_id  + '</td>\n')
 			self.htmlFile.write('        <td>' + self.desc  + '</td>\n')
 			self.htmlFile.write('        <td>' + str(options)  + '</td>\n')
@@ -3977,9 +4249,9 @@ class SSHConnection():
 # Usage()
 #-----------------------------------------------------------
 def Usage():
-	print('------------------------------------------------------------')
+	print('----------------------------------------------------------------------------------------------------------------------')
 	print('main.py Ver:' + Version)
-	print('------------------------------------------------------------')
+	print('----------------------------------------------------------------------------------------------------------------------')
 	print('Usage: python main.py [options]')
 	print('  --help  Show this help.')
 	print('  --mode=[Mode]')
@@ -3987,25 +4259,35 @@ def Usage():
 	print('      InitiateHtml, FinalizeHtml')
 	print('      TerminateeNB, TerminateUE, TerminateHSS, TerminateMME, TerminateSPGW')
 	print('      LogCollectBuild, LogCollecteNB, LogCollectHSS, LogCollectMME, LogCollectSPGW, LogCollectPing, LogCollectIperf')
-	print('  --eNBRepository=[eNB\'s Repository URL]                             or --ranRepository=[OAI RAN Repository URL]')
-	print('  --eNBBranch=[eNB\'s Branch Name]                                    or --ranBranch=[OAI RAN Repository Branch')
-	print('  --eNBCommitID=[eNB\'s Commit Number]                                or --ranCommitID=[OAI RAN Repository Commit SHA-1')
-	print('  --eNB_AllowMerge=[eNB\'s Allow Merge Request (with target branch)]  or --ranAllowMerge=true/false')
-	print('  --eNBTargetBranch=[eNB\'s Target Branch in case of a Merge Request] or --ranTargetBranch=[Target Branch]')
+	print('---------------------------------------------------------------------------------------------------- Git Options --')
+	print('  --ranRepository=[OAI RAN Repository URL]')
+	print('  --ranBranch=[OAI RAN Repository Branch]')
+	print('  --ranCommitID=[OAI RAN Repository Commit SHA-1]')
+	print('  --ranAllowMerge=[Allow Merge Request (with target branch) (true or false)]')
+	print('  --ranTargetBranch=[Target Branch in case of a Merge Request]')
+	print('--------------------------------------------------------------------------------------------- eNB Server Options --')
 	print('  --eNBIPAddress=[eNB\'s IP Address]')
 	print('  --eNBUserName=[eNB\'s Login User Name]')
 	print('  --eNBPassword=[eNB\'s Login Password]')
 	print('  --eNBSourceCodePath=[eNB\'s Source Code Path]')
+	print('------------------------------------------------------------------------------------------ OAI UE Server Options --')
+	print('  --UEIPAddress=[UE\'s IP Address]')
+	print('  --UEUserName=[UE\'s Login User Name]')
+	print('  --UEPassword=[UE\'s Login Password]')
+	print('  --UESourceCodePath=[UE\'s Source Code Path]')
+	print('--------------------------------------------------------------------------------------------- EPC Server Options --')
 	print('  --EPCIPAddress=[EPC\'s IP Address]')
 	print('  --EPCUserName=[EPC\'s Login User Name]')
 	print('  --EPCPassword=[EPC\'s Login Password]')
 	print('  --EPCSourceCodePath=[EPC\'s Source Code Path]')
-	print('  --EPCType=[EPC\'s Type: OAI or ltebox]')
+	print('  --EPCType=[EPC\'s Type: OAI or ltebox or OAI-Rel14-CUPS]')
+	print('--------------------------------------------------------------------------------------------- ABD Server Options --')
 	print('  --ADBIPAddress=[ADB\'s IP Address]')
 	print('  --ADBUserName=[ADB\'s Login User Name]')
 	print('  --ADBPassword=[ADB\'s Login Password]')
+	print('----------------------------------------------------------------------------------------------------------------------')
 	print('  --XMLTestFile=[XML Test File to be run]')
-	print('------------------------------------------------------------')
+	print('----------------------------------------------------------------------------------------------------------------------')
 
 def CheckClassValidity(action,id):
 	if action != 'Build_eNB' and action != 'WaitEndBuild_eNB' and action != 'Initialize_eNB' and action != 'Terminate_eNB' and action != 'Initialize_UE' and action != 'Terminate_UE' and action != 'Attach_UE' and action != 'Detach_UE' and action != 'Build_OAI_UE' and action != 'Initialize_OAI_UE' and action != 'Terminate_OAI_UE' and action != 'DataDisable_UE' and action != 'DataEnable_UE' and action != 'CheckStatusUE' and action != 'Ping' and action != 'Iperf' and action != 'Reboot_UE' and action != 'Initialize_FlexranCtrl' and action != 'Terminate_FlexranCtrl' and action != 'Initialize_HSS' and action != 'Terminate_HSS' and action != 'Initialize_MME' and action != 'Terminate_MME' and action != 'Initialize_SPGW' and action != 'Terminate_SPGW' and action != 'Initialize_CatM_module' and action != 'Terminate_CatM_module' and action != 'Attach_CatM_module' and action != 'Detach_CatM_module' and action != 'Ping_CatM_module' and action != 'IdleSleep' and action != 'Perform_X2_Handover':
@@ -4238,16 +4520,25 @@ while len(argvs) > 1:
 		SSH.EPCSourceCodePath = matchReg.group(1)
 	elif re.match('^\-\-EPCType=(.+)$', myArgv, re.IGNORECASE):
 		matchReg = re.match('^\-\-EPCType=(.+)$', myArgv, re.IGNORECASE)
-		if re.match('OAI', matchReg.group(1), re.IGNORECASE) or re.match('ltebox', matchReg.group(1), re.IGNORECASE):
+		if re.match('OAI', matchReg.group(1), re.IGNORECASE) or re.match('ltebox', matchReg.group(1), re.IGNORECASE) or re.match('OAI-Rel14-CUPS', matchReg.group(1), re.IGNORECASE):
 			SSH.EPCType = matchReg.group(1)
 		else:
-			sys.exit('Invalid EPC Type: ' + matchReg.group(1) + ' -- (should be OAI or ltebox)')
+			sys.exit('Invalid EPC Type: ' + matchReg.group(1) + ' -- (should be OAI or ltebox or OAI-Rel14-CUPS)')
 	elif re.match('^\-\-ADBIPAddress=(.+)$', myArgv, re.IGNORECASE):
 		matchReg = re.match('^\-\-ADBIPAddress=(.+)$', myArgv, re.IGNORECASE)
 		SSH.ADBIPAddress = matchReg.group(1)
 	elif re.match('^\-\-ADBUserName=(.+)$', myArgv, re.IGNORECASE):
 		matchReg = re.match('^\-\-ADBUserName=(.+)$', myArgv, re.IGNORECASE)
 		SSH.ADBUserName = matchReg.group(1)
+	elif re.match('^\-\-ADBType=(.+)$', myArgv, re.IGNORECASE):
+		matchReg = re.match('^\-\-ADBType=(.+)$', myArgv, re.IGNORECASE)
+		if re.match('centralized', matchReg.group(1), re.IGNORECASE) or re.match('distributed', matchReg.group(1), re.IGNORECASE):
+			if re.match('distributed', matchReg.group(1), re.IGNORECASE):
+				SSH.ADBCentralized = False
+			else:
+				SSH.ADBCentralized = True
+		else:
+			sys.exit('Invalid ADB Type: ' + matchReg.group(1) + ' -- (should be centralized or distributed)')
 	elif re.match('^\-\-ADBPassword=(.+)$', myArgv, re.IGNORECASE):
 		matchReg = re.match('^\-\-ADBPassword=(.+)$', myArgv, re.IGNORECASE)
 		SSH.ADBPassword = matchReg.group(1)
@@ -4447,6 +4738,7 @@ elif re.match('^TesteNB$', mode, re.IGNORECASE) or re.match('^TestUE$', mode, re
 
 	cnt = 0
 	SSH.prematureExit = True
+	SSH.startTime = int(round(time.time() * 1000))
 	while cnt < SSH.repeatCounts[0] and SSH.prematureExit:
 		SSH.prematureExit = False
 		for test_case_id in todo_tests:
diff --git a/ci-scripts/oai-ci-vm-tool b/ci-scripts/oai-ci-vm-tool
index 07ecb54a0fe997af2beee8884c823c555e7ad95d..7ef779b121393c980eba16f52cd4225783b0731e 100755
--- a/ci-scripts/oai-ci-vm-tool
+++ b/ci-scripts/oai-ci-vm-tool
@@ -210,7 +210,7 @@ function variant__v8__ue_ethernet {
 function variant__v10__flexran_rtc {
     ARCHIVES_LOC=flexran
     NB_PATTERN_FILES=1
-    BUILD_OPTIONS="cmake . && make -j2"
+    BUILD_OPTIONS="cmake .. && make -j2"
     VARIANT_INFO="non-OSA"
 }
 function variant__v20__l1_sim {
diff --git a/ci-scripts/xml_files/enb_usrp210_band13_test_10mhz_tm1.xml b/ci-scripts/xml_files/enb_usrp210_band13_test_10mhz_tm1.xml
index 1f4a82710cd1dcf469d77d5099aa5ac1596f8294..d72722aa8c1f7171e41ba5efad0a1703cbc17ef4 100644
--- a/ci-scripts/xml_files/enb_usrp210_band13_test_10mhz_tm1.xml
+++ b/ci-scripts/xml_files/enb_usrp210_band13_test_10mhz_tm1.xml
@@ -24,6 +24,7 @@
 	<htmlTabRef>test-10-tm1</htmlTabRef>
 	<htmlTabName>Test-10MHz-TM1</htmlTabName>
 	<htmlTabIcon>tasks</htmlTabIcon>
+	<repeatCount>2</repeatCount>
 	<TestCaseRequestedList>
  030201
  040102
diff --git a/ci-scripts/xml_files/enb_usrp210_band40_test_05mhz_tm2.xml b/ci-scripts/xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
index 9c98ba4a8eb33677e1c7bf6c7093e47136e0ed59..2a035396c5753717c53960009ff3499e6996c47e 100644
--- a/ci-scripts/xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
+++ b/ci-scripts/xml_files/enb_usrp210_band40_test_05mhz_tm2.xml
@@ -25,7 +25,7 @@
 	<htmlTabRef>test-05-tm2</htmlTabRef>
 	<htmlTabName>Test-05MHz-TM2</htmlTabName>
 	<htmlTabIcon>tasks</htmlTabIcon>
-	<repeatCount>2</repeatCount>
+	<repeatCount>3</repeatCount>
         <TestCaseRequestedList>
  030201
  040101
@@ -36,7 +36,7 @@
 	<testCase id="030105">
 		<class>Initialize_eNB</class>
 		<desc>Initialize eNB (TDD/Band40/5MHz)</desc>
-		<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band40.tm2.25PRB.FairScheduler.usrpb210.conf</Initialize_eNB_args>
+		<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band40.tm2.25PRB.FairScheduler.usrpb210.conf --MACRLCs.[0].scheduler_mode default</Initialize_eNB_args>
 	</testCase>
 
 	<testCase id="030201">
diff --git a/ci-scripts/xml_files/enb_usrp210_band40_test_20mhz_tm1.xml b/ci-scripts/xml_files/enb_usrp210_band40_test_20mhz_tm1.xml
index 79fc0b305c129fceb3c0c2a68bdf51e090329a41..648be0bfb5f13e924c607cdad67bd9453e5ea67a 100644
--- a/ci-scripts/xml_files/enb_usrp210_band40_test_20mhz_tm1.xml
+++ b/ci-scripts/xml_files/enb_usrp210_band40_test_20mhz_tm1.xml
@@ -27,7 +27,7 @@
 	<TestCaseRequestedList>
  030201
  040101
- 030124 040301 040521 040622 040621 040623 040624 040625 040662 040661 040663 040664 040665 040401 040201 030201
+ 030124 040301 040521 040622 040621 040623 040662 040401 040201 030201
 	</TestCaseRequestedList>
 	<TestCaseExclusionList></TestCaseExclusionList>
 
diff --git a/ci-scripts/xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml b/ci-scripts/xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fd018f7a9ce98d16c81572e7eee3d9bbe07b42da
--- /dev/null
+++ b/ci-scripts/xml_files/enb_usrp210_band40_test_20mhz_tm1_default_scheduler.xml
@@ -0,0 +1,150 @@
+<!--
+
+ Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The OpenAirInterface Software Alliance licenses this file to You under
+ the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.openairinterface.org/?page_id=698
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ For more information about the OpenAirInterface (OAI) Software Alliance:
+      contact@openairinterface.org
+
+-->
+<testCaseList>
+	<htmlTabRef>test-20-tm1-defSched</htmlTabRef>
+	<htmlTabName>Test-20MHz-TM1-default-scheduler</htmlTabName>
+	<htmlTabIcon>tasks</htmlTabIcon>
+	<TestCaseRequestedList>
+ 030201
+ 040101
+ 030125 040301 040522 040627 040626 040628 040629 040630 040667 040666 040668 040669 040670 040401 040201 030201
+	</TestCaseRequestedList>
+	<TestCaseExclusionList></TestCaseExclusionList>
+
+	<testCase id="030125">
+		<class>Initialize_eNB</class>
+		<desc>Initialize eNB (TDD/Band40/20MHz/info)</desc>
+		<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band40.tm1.100PRB.FairScheduler.usrpb210.conf --MACRLCs.[0].scheduler_mode default</Initialize_eNB_args>
+	</testCase>
+
+	<testCase id="030201">
+		<class>Terminate_eNB</class>
+		<desc>Terminate eNB</desc>
+	</testCase>
+
+	<testCase id="040101">
+		<class>Initialize_UE</class>
+		<desc>Initialize UE</desc>
+	</testCase>
+
+	<testCase id="040201">
+		<class>Terminate_UE</class>
+		<desc>Terminate UE</desc>
+	</testCase>
+
+	<testCase id="040301">
+		<class>Attach_UE</class>
+		<desc>Attach UE</desc>
+	</testCase>
+
+	<testCase id="040401">
+		<class>Detach_UE</class>
+		<desc>Detach UE</desc>
+	</testCase>
+
+	<testCase id="040522">
+		<class>Ping</class>
+		<desc>ping (20MHz - 20 sec)</desc>
+		<ping_args>-c 20</ping_args>
+		<ping_packetloss_threshold>25</ping_packetloss_threshold>
+	</testCase>
+
+	<testCase id="040626">
+		<class>Iperf</class>
+		<desc>iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(balanced)</desc>
+		<iperf_args>-u -b 27.5M -t 30 -i 1</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+		<iperf_profile>balanced</iperf_profile>
+	</testCase>
+
+	<testCase id="040627">
+		<class>Iperf</class>
+		<desc>iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(single-ue)</desc>
+		<iperf_args>-u -b 27.5M -t 30 -i 1</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+		<iperf_profile>single-ue</iperf_profile>
+	</testCase>
+
+	<testCase id="040628">
+		<class>Iperf</class>
+		<desc>iperf (20MHz - DL/27.5Mbps/UDP)(30 sec)(unbalanced)</desc>
+		<iperf_args>-u -b 27.5M -t 30 -i 1</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+		<iperf_profile>unbalanced</iperf_profile>
+	</testCase>
+
+	<testCase id="040629">
+		<class>Iperf</class>
+		<desc>iperf (20MHz - DL/TCP)(30 sec)(single-ue)</desc>
+		<iperf_args>-t 30 -i 1 -fm</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+		<iperf_profile>single-ue</iperf_profile>
+	</testCase>
+
+	<testCase id="040630">
+		<class>Iperf</class>
+		<desc>iperf (20MHz - DL/TCP)(30 sec)</desc>
+		<iperf_args>-t 30 -i 1 -fm</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+	</testCase>
+
+	<testCase id="040666">
+		<class>Iperf</class>
+		<desc>iperf (20MHz - UL/7Mbps/UDP)(30 sec)(balanced)</desc>
+		<iperf_args>-u -b 7M -t 30 -i 1 -R</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+		<iperf_profile>balanced</iperf_profile>
+	</testCase>
+
+	<testCase id="040667">
+		<class>Iperf</class>
+		<desc>iperf (20MHz - UL/7Mbps/UDP)(30 sec)(single-ue)</desc>
+		<iperf_args>-u -b 7M -t 30 -i 1 -R</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+		<iperf_profile>single-ue</iperf_profile>
+	</testCase>
+
+	<testCase id="040668">
+		<class>Iperf</class>
+		<desc>iperf (20MHz - UL/7Mbps/UDP)(30 sec)(unbalanced)</desc>
+		<iperf_args>-u -b 7M -t 30 -i 1 -R</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+		<iperf_profile>unbalanced</iperf_profile>
+	</testCase>
+
+	<testCase id="040669">
+		<class>Iperf</class>
+		<desc>iperf (20MHz - UL/TCP)(30 sec)(single-ue)</desc>
+		<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+		<iperf_profile>single-ue</iperf_profile>
+	</testCase>
+
+	<testCase id="040670">
+		<class>Iperf</class>
+		<desc>iperf (20MHz - UL/TCP)(30 sec)</desc>
+		<iperf_args>-t 30 -i 1 -fm -R</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+	</testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/enb_usrp210_band7_test_10mhz_tm1_cdrx.xml b/ci-scripts/xml_files/enb_usrp210_band7_test_10mhz_tm1_cdrx.xml
index f62c31dd5a4be1718f09af57cb6475f3f743b935..a76f188bc48d19dfe1db5f13e022aa9d3b9dcf82 100644
--- a/ci-scripts/xml_files/enb_usrp210_band7_test_10mhz_tm1_cdrx.xml
+++ b/ci-scripts/xml_files/enb_usrp210_band7_test_10mhz_tm1_cdrx.xml
@@ -56,7 +56,6 @@
 	<testCase id="040302">
 		<class>Attach_UE</class>
 		<desc>Attach UE</desc>
-		<nbMaxUEtoAttach>1</nbMaxUEtoAttach>
 	</testCase>
 
 	<testCase id="040401">
diff --git a/ci-scripts/xml_files/if4p5_usrp210_band40_test_20mhz.xml b/ci-scripts/xml_files/if4p5_usrp210_band40_test_20mhz.xml
index 15d641efeb431917f96d24568558447d68d64080..cb54ba31eeed23f203777d4f7451af63d86a1c4c 100644
--- a/ci-scripts/xml_files/if4p5_usrp210_band40_test_20mhz.xml
+++ b/ci-scripts/xml_files/if4p5_usrp210_band40_test_20mhz.xml
@@ -43,7 +43,7 @@
 	<testCase id="030125">
 		<class>Initialize_eNB</class>
 		<desc>Initialize RCC (TDD/Band40/20MHz/info)</desc>
-		<Initialize_eNB_args>-O ci-scripts/conf_files/rcc.band40.tm1.100PRB.FairScheduler.usrpb210.conf</Initialize_eNB_args>
+		<Initialize_eNB_args>-O ci-scripts/conf_files/rcc.band40.tm1.100PRB.FairScheduler.usrpb210.conf --MACRLCs.[0].scheduler_mode default</Initialize_eNB_args>
 		<eNB_instance>1</eNB_instance>
 	</testCase>
 
diff --git a/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_epc_start.xml b/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_epc_start.xml
new file mode 100644
index 0000000000000000000000000000000000000000..51aaba439e6f6c7c6db222299c1dac619d15ba07
--- /dev/null
+++ b/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_epc_start.xml
@@ -0,0 +1,53 @@
+<!--
+
+ Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The OpenAirInterface Software Alliance licenses this file to You under
+ the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.openairinterface.org/?page_id=698
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ For more information about the OpenAirInterface (OAI) Software Alliance:
+      contact@openairinterface.org
+
+-->
+<testCaseList>
+	<htmlTabRef>epc-start-oai-ue</htmlTabRef>
+	<htmlTabName>EPC-Start-OAI-UE</htmlTabName>
+	<htmlTabIcon>log-in</htmlTabIcon>
+	<TestCaseRequestedList>
+ 050101 000001 060101 000001 070101
+	</TestCaseRequestedList>
+	<TestCaseExclusionList></TestCaseExclusionList>
+
+    <testCase id="000001">
+        <class>IdleSleep</class>
+        <desc>Sleep</desc>
+        <idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
+    </testCase>
+
+	<testCase id="050101">
+		<class>Initialize_HSS</class>
+		<desc>Initialize HSS</desc>
+	</testCase>
+
+	<testCase id="060101">
+		<class>Initialize_MME</class>
+		<desc>Initialize MME</desc>
+	</testCase>
+
+	<testCase id="070101">
+		<class>Initialize_SPGW</class>
+		<desc>Initialize SPGW</desc>
+	</testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_epc_stop.xml b/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_epc_stop.xml
new file mode 100644
index 0000000000000000000000000000000000000000..07fb6951f8e99a35cabd2ee4e48232d2bd035f41
--- /dev/null
+++ b/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_epc_stop.xml
@@ -0,0 +1,47 @@
+<!--
+
+ Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The OpenAirInterface Software Alliance licenses this file to You under
+ the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.openairinterface.org/?page_id=698
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ For more information about the OpenAirInterface (OAI) Software Alliance:
+      contact@openairinterface.org
+
+-->
+<testCaseList>
+	<htmlTabRef>epc-closure</htmlTabRef>
+	<htmlTabName>EPC-Closure</htmlTabName>
+	<htmlTabIcon>log-out</htmlTabIcon>
+	<TestCaseRequestedList>
+ 050201 060201 070201
+	</TestCaseRequestedList>
+	<TestCaseExclusionList></TestCaseExclusionList>
+
+	<testCase id="050201">
+		<class>Terminate_HSS</class>
+		<desc>Terminate HSS</desc>
+	</testCase>
+
+	<testCase id="060201">
+		<class>Terminate_MME</class>
+		<desc>Terminate MME</desc>
+	</testCase>
+
+	<testCase id="070201">
+		<class>Terminate_SPGW</class>
+		<desc>Terminate SPGW</desc>
+	</testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_terminate.xml b/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_terminate.xml
new file mode 100644
index 0000000000000000000000000000000000000000..962aec41295093aaf4c7c1d9aa7d545a83a7b7d6
--- /dev/null
+++ b/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_terminate.xml
@@ -0,0 +1,42 @@
+<!--
+
+ Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The OpenAirInterface Software Alliance licenses this file to You under
+ the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.openairinterface.org/?page_id=698
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ For more information about the OpenAirInterface (OAI) Software Alliance:
+      contact@openairinterface.org
+
+-->
+<testCaseList>
+	<htmlTabRef>terminate-enb-oai-ue</htmlTabRef>
+	<htmlTabName>Terminate-all-eNBs-OAI-UEs</htmlTabName>
+	<htmlTabIcon>tasks</htmlTabIcon>
+	<TestCaseRequestedList>
+ 030201 090109
+	</TestCaseRequestedList>
+	<TestCaseExclusionList></TestCaseExclusionList>
+
+	<testCase id="030201">
+		<class>Terminate_eNB</class>
+		<desc>Terminate eNB</desc>
+	</testCase>
+
+	<testCase id="090109">
+		<class>Terminate_OAI_UE</class>
+		<desc>Terminate OAI UE</desc>
+	</testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1.xml b/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1471b9a016e94c4cef21bc179e4c06382637e0f8
--- /dev/null
+++ b/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1.xml
@@ -0,0 +1,103 @@
+<!--
+
+ Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The OpenAirInterface Software Alliance licenses this file to You under
+ the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.openairinterface.org/?page_id=698
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ For more information about the OpenAirInterface (OAI) Software Alliance:
+      contact@openairinterface.org
+
+-->
+<testCaseList>
+	<htmlTabRef>test-05-tm1-oai-ue</htmlTabRef>
+	<htmlTabName>Test-05MHz-TM1-OAI-UE</htmlTabName>
+	<htmlTabIcon>tasks</htmlTabIcon>
+	<repeatCount>4</repeatCount>
+	<TestCaseRequestedList>
+ 030201 090109
+ 030102 000001 090102 000002 040503 000002 040603 040604 040643 040644 000002 090109 000001 030201
+	</TestCaseRequestedList>
+	<TestCaseExclusionList></TestCaseExclusionList>
+
+	<testCase id="000001">
+		<class>IdleSleep</class>
+		<desc>Sleep for 10 sec</desc>
+		<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
+	</testCase>
+
+	<testCase id="000002">
+		<class>IdleSleep</class>
+		<desc>Sleep for 3 sec</desc>
+		<idle_sleep_time_in_sec>3</idle_sleep_time_in_sec>
+	</testCase>
+
+	<testCase id="030102">
+		<class>Initialize_eNB</class>
+		<desc>Initialize eNB (FDD/Band7/5MHz)</desc>
+		<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf --eNBs.[0].rrc_inactivity_threshold 0 --RUs.[0].max_rxgain 120 --eNBs.[0].component_carriers.[0].pusch_p0_Nominal -90 --eNBs.[0].component_carriers.[0].pucch_p0_Nominal -96 --eNBs.[0].tracking_area_code 600 --eNBs.[0].plmn_list.[0].mnc 95 --THREAD_STRUCT.[0].parallel_config PARALLEL_RU_L1_TRX_SPLIT</Initialize_eNB_args>
+	</testCase>
+
+	<testCase id="030201">
+		<class>Terminate_eNB</class>
+		<desc>Terminate eNB</desc>
+	</testCase>
+
+	<testCase id="090102">
+		<class>Initialize_OAI_UE</class>
+		<desc>Initialize OAI UE (FDD/Band7/5MHz)</desc>
+		<Initialize_OAI_UE_args>-C 2680000000 -r 25 --ue-rxgain 130 --ue-txgain 1 --ue-max-power -6 --ue-scan-carrier --nokrnmod 1</Initialize_OAI_UE_args>
+	</testCase>
+
+	<testCase id="090109">
+		<class>Terminate_OAI_UE</class>
+		<desc>Terminate OAI UE</desc>
+	</testCase>
+
+	<testCase id="040503">
+		<class>Ping</class>
+		<desc>ping (5MHz - 20 sec)</desc>
+		<ping_args>-I 192.168.248.159 -c 20</ping_args>
+       		<ping_packetloss_threshold>5</ping_packetloss_threshold>
+	</testCase>
+
+	<testCase id="040603">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - DL/1Mbps/UDP)(30 sec)</desc>
+		<iperf_args>-u -b 1M -t 30 -i 1 -fm</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+	</testCase>
+
+	<testCase id="040604">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - DL/12Mbps/UDP)(30 sec)</desc>
+		<iperf_args>-u -b 12M -t 30 -i 1 -fm</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+	</testCase>
+
+	<testCase id="040643">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - UL/1Mbps/UDP)(30 sec)</desc>
+		<iperf_args>-u -b 1M -t 30 -i 1 -fm -R</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+	</testCase>
+
+	<testCase id="040644">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)</desc>
+		<iperf_args>-u -b 2M -t 30 -i 1 -fm -R</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+	</testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1_nos1.xml b/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1_nos1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dff0761bd392acc7647889e517f2593a78d2039c
--- /dev/null
+++ b/ci-scripts/xml_files/inria/enb_ue_usrp210_band7_test_05mhz_tm1_nos1.xml
@@ -0,0 +1,118 @@
+<!--
+
+ Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The OpenAirInterface Software Alliance licenses this file to You under
+ the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.openairinterface.org/?page_id=698
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ For more information about the OpenAirInterface (OAI) Software Alliance:
+      contact@openairinterface.org
+
+-->
+<testCaseList>
+	<htmlTabRef>test-05-tm1-nos1-tunnel</htmlTabRef>
+	<htmlTabName>Test-05MHz-TM1-noS1-tunnel</htmlTabName>
+	<htmlTabIcon>tasks</htmlTabIcon>
+	<repeatCount>2</repeatCount>
+	<TestCaseRequestedList>
+ 030201 090109
+ 030101 000001 090101 000002 040501 040502 000001 040601 040602 040641 040642 000001 090109 030201
+	</TestCaseRequestedList>
+	<TestCaseExclusionList></TestCaseExclusionList>
+
+	<testCase id="000001">
+		<class>IdleSleep</class>
+		<desc>Sleep</desc>
+		<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
+	</testCase>
+
+	<testCase id="000002">
+		<class>IdleSleep</class>
+		<desc>Sleep</desc>
+		<idle_sleep_time_in_sec>5</idle_sleep_time_in_sec>
+	</testCase>
+
+	<testCase id="000003">
+		<class>IdleSleep</class>
+		<desc>Sleep</desc>
+		<idle_sleep_time_in_sec>60</idle_sleep_time_in_sec>
+	</testCase>
+
+	<testCase id="030101">
+		<class>Initialize_eNB</class>
+		<desc>Initialize eNB (FDD/Band7/5MHz)</desc>
+		<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf --noS1 --eNBs.[0].rrc_inactivity_threshold 0 --RUs.[0].max_rxgain 120 --eNBs.[0].component_carriers.[0].pusch_p0_Nominal -90 --eNBs.[0].component_carriers.[0].pucch_p0_Nominal -96 --eNBs.[0].tracking_area_code 600 --eNBs.[0].plmn_list.[0].mnc 95 --THREAD_STRUCT.[0].parallel_config PARALLEL_RU_L1_TRX_SPLIT</Initialize_eNB_args>
+	</testCase>
+
+	<testCase id="030201">
+		<class>Terminate_eNB</class>
+		<desc>Terminate eNB</desc>
+	</testCase>
+
+	<testCase id="090101">
+		<class>Initialize_OAI_UE</class>
+		<desc>Initialize OAI UE (FDD/Band7/5MHz)</desc>
+		<Initialize_OAI_UE_args>-C 2680000000 -r 25 --ue-rxgain 130 --ue-txgain 1 --ue-max-power -6 --ue-scan-carrier --nokrnmod 1 --noS1</Initialize_OAI_UE_args>
+	</testCase>
+
+	<testCase id="090109">
+		<class>Terminate_OAI_UE</class>
+		<desc>Terminate OAI UE</desc>
+	</testCase>
+
+	<testCase id="040501">
+		<class>Ping</class>
+		<desc>ping (5MHz - 20 sec)(from eNB to OAI UE)</desc>
+		<ping_args>-I oaitun_enb1 -c 20 10.0.1.2</ping_args>
+		<ping_packetloss_threshold>5</ping_packetloss_threshold>
+	</testCase>
+
+	<testCase id="040502">
+		<class>Ping</class>
+		<desc>ping (5MHz - 20 sec)(from OAI UE to eNB)</desc>
+		<ping_args>-I oaitun_ue1 -c 20 10.0.1.1</ping_args>
+		<ping_packetloss_threshold>5</ping_packetloss_threshold>
+	</testCase>
+
+	<testCase id="040601">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - DL/1Mbps/UDP)(30 sec)</desc>
+		<iperf_args>-c 10.0.1.2 -u -b 1M -t 30 -i 1 -fm -B 10.0.1.1</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+	</testCase>
+
+	<testCase id="040602">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - DL/10Mbps/UDP)(30 sec)</desc>
+		<iperf_args>-c 10.0.1.2 -u -b 10M -t 30 -i 1 -fm -B 10.0.1.1</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+	</testCase>
+
+	<testCase id="040641">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - UL/1Mbps/UDP)(30 sec)</desc>
+		<iperf_args>-c 10.0.1.1 -u -b 1M -t 30 -i 1 -fm -B 10.0.1.2 -R</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+		<iperf_profile>balanced</iperf_profile>
+	</testCase>
+
+	<testCase id="040642">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)</desc>
+		<iperf_args>-c 10.0.1.1 -u -b 2M -t 30 -i 1 -fm -B 10.0.1.2 -R</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+		<iperf_profile>balanced</iperf_profile>
+	</testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/inria/enb_usrp210_band7_build.xml b/ci-scripts/xml_files/inria/enb_usrp210_band7_build.xml
new file mode 100644
index 0000000000000000000000000000000000000000..776c92106d131afe341c9b01dda7999113cb1ebd
--- /dev/null
+++ b/ci-scripts/xml_files/inria/enb_usrp210_band7_build.xml
@@ -0,0 +1,38 @@
+<!--
+
+ Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The OpenAirInterface Software Alliance licenses this file to You under
+ the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.openairinterface.org/?page_id=698
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ For more information about the OpenAirInterface (OAI) Software Alliance:
+      contact@openairinterface.org
+
+-->
+<testCaseList>
+	<htmlTabRef>build-tab-enb0</htmlTabRef>
+	<htmlTabName>Build eNB0</htmlTabName>
+	<htmlTabIcon>wrench</htmlTabIcon>
+	<TestCaseRequestedList>
+ 010101
+	</TestCaseRequestedList>
+	<TestCaseExclusionList></TestCaseExclusionList>
+
+	<testCase id="010101">
+		<class>Build_eNB</class>
+		<desc>Build eNB (USRP)</desc>
+		<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
+	</testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/inria/enb_usrp210_band7_epc_start.xml b/ci-scripts/xml_files/inria/enb_usrp210_band7_epc_start.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5fc3a2e96060d0332f61133ae3afb98273f9285b
--- /dev/null
+++ b/ci-scripts/xml_files/inria/enb_usrp210_band7_epc_start.xml
@@ -0,0 +1,53 @@
+<!--
+
+ Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The OpenAirInterface Software Alliance licenses this file to You under
+ the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.openairinterface.org/?page_id=698
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ For more information about the OpenAirInterface (OAI) Software Alliance:
+      contact@openairinterface.org
+
+-->
+<testCaseList>
+	<htmlTabRef>epc-start</htmlTabRef>
+	<htmlTabName>EPC-Start</htmlTabName>
+	<htmlTabIcon>log-in</htmlTabIcon>
+	<TestCaseRequestedList>
+ 050102 000001 060102 000001 070102
+	</TestCaseRequestedList>
+	<TestCaseExclusionList></TestCaseExclusionList>
+
+    <testCase id="000001">
+        <class>IdleSleep</class>
+        <desc>Sleep</desc>
+        <idle_sleep_time_in_sec>20</idle_sleep_time_in_sec>
+    </testCase>
+
+	<testCase id="050102">
+		<class>Initialize_HSS</class>
+		<desc>Initialize HSS</desc>
+	</testCase>
+
+	<testCase id="060102">
+		<class>Initialize_MME</class>
+		<desc>Initialize MME</desc>
+	</testCase>
+
+	<testCase id="070102">
+		<class>Initialize_SPGW</class>
+		<desc>Initialize SPGW</desc>
+	</testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/inria/enb_usrp210_band7_epc_stop.xml b/ci-scripts/xml_files/inria/enb_usrp210_band7_epc_stop.xml
new file mode 100644
index 0000000000000000000000000000000000000000..617e78b3bf18feb17646c941fced43a1980129ab
--- /dev/null
+++ b/ci-scripts/xml_files/inria/enb_usrp210_band7_epc_stop.xml
@@ -0,0 +1,53 @@
+<!--
+
+ Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The OpenAirInterface Software Alliance licenses this file to You under
+ the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.openairinterface.org/?page_id=698
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ For more information about the OpenAirInterface (OAI) Software Alliance:
+      contact@openairinterface.org
+
+-->
+<testCaseList>
+	<htmlTabRef>epc-stop</htmlTabRef>
+	<htmlTabName>EPC-Stop</htmlTabName>
+	<htmlTabIcon>log-out</htmlTabIcon>
+	<TestCaseRequestedList>
+ 050201 060201 070201
+ 040101
+	</TestCaseRequestedList>
+	<TestCaseExclusionList></TestCaseExclusionList>
+
+	<testCase id="050201">
+		<class>Terminate_HSS</class>
+		<desc>Terminate HSS</desc>
+	</testCase>
+
+	<testCase id="060201">
+		<class>Terminate_MME</class>
+		<desc>Terminate MME</desc>
+	</testCase>
+
+	<testCase id="070201">
+		<class>Terminate_SPGW</class>
+		<desc>Terminate SPGW</desc>
+	</testCase>
+
+	<testCase id="040101">
+		<class>Initialize_UE</class>
+		<desc>Initialize UE</desc>
+	</testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/inria/enb_usrp210_band7_test_05mhz_tm1.xml b/ci-scripts/xml_files/inria/enb_usrp210_band7_test_05mhz_tm1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5843539f72d69eed7a7ac1b72af5b8d8f8c1ae4d
--- /dev/null
+++ b/ci-scripts/xml_files/inria/enb_usrp210_band7_test_05mhz_tm1.xml
@@ -0,0 +1,108 @@
+<!--
+
+ Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The OpenAirInterface Software Alliance licenses this file to You under
+ the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.openairinterface.org/?page_id=698
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ For more information about the OpenAirInterface (OAI) Software Alliance:
+      contact@openairinterface.org
+
+ 030102 000002 040301 000002 040504 040605 040606 040645 040646 000001 040401 000002 030201
+-->
+<testCaseList>
+	<htmlTabRef>test-05-tm1</htmlTabRef>
+	<htmlTabName>Test-05MHz-TM1</htmlTabName>
+	<htmlTabIcon>tasks</htmlTabIcon>
+	<repeatCount>2</repeatCount>
+	<TestCaseRequestedList>
+ 030201 040101
+ 030102 000002 040301 000002 040504 000001 040401 000002 030201
+	</TestCaseRequestedList>
+	<TestCaseExclusionList></TestCaseExclusionList>
+
+	<testCase id="040101">
+		<class>Initialize_UE</class>
+		<desc>Initialize UE</desc>
+	</testCase>
+
+	<testCase id="000001">
+		<class>IdleSleep</class>
+		<desc>Sleep for 10 sec</desc>
+		<idle_sleep_time_in_sec>10</idle_sleep_time_in_sec>
+	</testCase>
+
+	<testCase id="000002">
+		<class>IdleSleep</class>
+		<desc>Sleep for 3 sec</desc>
+		<idle_sleep_time_in_sec>3</idle_sleep_time_in_sec>
+	</testCase>
+
+	<testCase id="030102">
+		<class>Initialize_eNB</class>
+		<desc>Initialize eNB (FDD/Band7/5MHz)</desc>
+		<Initialize_eNB_args>-O ci-scripts/conf_files/enb.band7.tm1.25PRB.usrpb210.conf --eNBs.[0].rrc_inactivity_threshold 0 --RUs.[0].max_rxgain 120 --eNBs.[0].component_carriers.[0].pusch_p0_Nominal -90 --eNBs.[0].component_carriers.[0].pucch_p0_Nominal -96 --eNBs.[0].tracking_area_code 600 --eNBs.[0].plmn_list.[0].mnc 95 --THREAD_STRUCT.[0].parallel_config PARALLEL_RU_L1_TRX_SPLIT</Initialize_eNB_args>
+	</testCase>
+
+	<testCase id="030201">
+		<class>Terminate_eNB</class>
+		<desc>Terminate eNB</desc>
+	</testCase>
+
+	<testCase id="040301">
+		<class>Attach_UE</class>
+		<desc>Attach UE</desc>
+	</testCase>
+
+	<testCase id="040401">
+		<class>Detach_UE</class>
+		<desc>Detach UE</desc>
+	</testCase>
+
+	<testCase id="040504">
+		<class>Ping</class>
+		<desc>ping (5MHz - 20 sec)</desc>
+		<ping_args>-I 192.168.248.159 -c 20</ping_args>
+		<ping_packetloss_threshold>5</ping_packetloss_threshold>
+	</testCase>
+
+	<testCase id="040605">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - DL/1Mbps/UDP)(30 sec)</desc>
+		<iperf_args>-u -b 1M -t 30 -i 1 -fm</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+	</testCase>
+
+	<testCase id="040606">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - DL/12Mbps/UDP)(30 sec)</desc>
+		<iperf_args>-u -b 12M -t 30 -i 1 -fm</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+	</testCase>
+
+	<testCase id="040645">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - UL/1Mbps/UDP)(30 sec)</desc>
+		<iperf_args>-u -b 1M -t 30 -i 1 -fm -R</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+	</testCase>
+
+	<testCase id="040646">
+		<class>Iperf</class>
+		<desc>iperf (5MHz - UL/2Mbps/UDP)(30 sec)</desc>
+		<iperf_args>-u -b 2M -t 30 -i 1 -fm -R</iperf_args>
+		<iperf_packetloss_threshold>50</iperf_packetloss_threshold>
+	</testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/inria/ue_usrp210_band7_build.xml b/ci-scripts/xml_files/inria/ue_usrp210_band7_build.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7d7ae6e0df4624a7929048eb56120d2e0d7d6133
--- /dev/null
+++ b/ci-scripts/xml_files/inria/ue_usrp210_band7_build.xml
@@ -0,0 +1,38 @@
+<!--
+
+ Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The OpenAirInterface Software Alliance licenses this file to You under
+ the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.openairinterface.org/?page_id=698
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ For more information about the OpenAirInterface (OAI) Software Alliance:
+      contact@openairinterface.org
+
+-->
+<testCaseList>
+	<htmlTabRef>build-tab-ue0</htmlTabRef>
+	<htmlTabName>Build UE0</htmlTabName>
+	<htmlTabIcon>wrench</htmlTabIcon>
+	<TestCaseRequestedList>
+090101
+	</TestCaseRequestedList>
+	<TestCaseExclusionList></TestCaseExclusionList>
+
+	<testCase id="090101">
+		<class>Build_OAI_UE</class>
+		<desc>Build OAI UE</desc>
+		<Build_OAI_UE_args>-w USRP --UE</Build_OAI_UE_args>
+	</testCase>
+
+</testCaseList>
diff --git a/ci-scripts/xml_files/simple_dummy_build.xml b/ci-scripts/xml_files/simple_dummy_build.xml
new file mode 100644
index 0000000000000000000000000000000000000000..75e5f6339a00e0e69053042792615f992eaef4da
--- /dev/null
+++ b/ci-scripts/xml_files/simple_dummy_build.xml
@@ -0,0 +1,41 @@
+<!--
+
+ Licensed to the OpenAirInterface (OAI) Software Alliance under one or more
+ contributor license agreements.  See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The OpenAirInterface Software Alliance licenses this file to You under
+ the OAI Public License, Version 1.1  (the "License"); you may not use this file
+ except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.openairinterface.org/?page_id=698
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ For more information about the OpenAirInterface (OAI) Software Alliance:
+      contact@openairinterface.org
+
+-->
+<testCaseList>
+	<htmlTabRef>build-tab</htmlTabRef>
+	<htmlTabName>Build</htmlTabName>
+	<htmlTabIcon>wrench</htmlTabIcon>
+	<TestCaseRequestedList>
+ 010101
+	</TestCaseRequestedList>
+	<TestCaseExclusionList>
+	</TestCaseExclusionList>
+
+	<testCase id="010101">
+		<class>Build_eNB</class>
+		<desc>Build Master eNB (USRP)</desc>
+		<Build_eNB_args>-w USRP -c --eNB</Build_eNB_args>
+		<eNB_instance>0</eNB_instance>
+		<eNB_serverId>0</eNB_serverId>
+	</testCase>
+
+</testCaseList>
diff --git a/cmake_targets/CMakeLists.txt b/cmake_targets/CMakeLists.txt
index 5c999e353a1eceec77bde97caa636e7c9db1abdb..e10311afbc8f06f49ac4342e45350e06402d07a4 100644
--- a/cmake_targets/CMakeLists.txt
+++ b/cmake_targets/CMakeLists.txt
@@ -183,8 +183,8 @@ set(CMAKE_EXE_LINKER_FLAGS  "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,${CMAKE_CU
 #########################
 # set a flag for changes in the source code
 # these changes are related to hardcoded path to include .h files
-set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} -g -DMALLOC_CHECK_=3")
-set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} -g -DMALLOC_CHECK_=3 -O2")
+set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} -g3 -DMALLOC_CHECK_=3")
+set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} -g3 -DMALLOC_CHECK_=3 -O2")
 
 
 set(GIT_BRANCH        "UNKNOWN")
diff --git a/common/utils/T/tracer/hacks/multi-rru-clean.c b/common/utils/T/tracer/hacks/multi-rru-clean.c
index c85dc0de7f5ceadcfee64207ec64b49b50ddd8c9..791ef6fac9f88c10e8f5362f0be30c0603abee0b 100644
--- a/common/utils/T/tracer/hacks/multi-rru-clean.c
+++ b/common/utils/T/tracer/hacks/multi-rru-clean.c
@@ -12,6 +12,7 @@ void usage(void)
     "usage: <number of tags> <input record file> <output curated record file>\n"
     "options:\n"
     "    -d <database file>        this option is mandatory\n"
+    "    -e <event name>           trace given event (default CALIBRATION_CHANNEL_ESTIMATES)\n"
   );
   exit(1);
 }
@@ -88,6 +89,7 @@ int main(int n, char **v)
   int  number_of_tags = -1;
   char *input_filename = NULL;
   char *output_filename = NULL;
+  char *event_name = "CALIBRATION_CHANNEL_ESTIMATES";
   int  i;
   FILE *in;
   FILE *out;
@@ -107,6 +109,8 @@ int main(int n, char **v)
     if (!strcmp(v[i], "-h") || !strcmp(v[i], "--help")) usage();
     if (!strcmp(v[i], "-d")) { if (i > n-2) usage();
       database_filename = v[++i]; continue; }
+    if (!strcmp(v[i], "-e")) { if (i > n-2) usage();
+      event_name = v[++i]; continue; }
     if (number_of_tags == -1) { number_of_tags = atoi(v[i]);
       if (number_of_tags <= 0) {usage();} continue; }
     if (input_filename == NULL) { input_filename = v[i]; continue; }
@@ -124,7 +128,7 @@ int main(int n, char **v)
 
   database = parse_database(database_filename);
 
-  channel_estimate_id = event_id_from_name(database, "CALIBRATION_CHANNEL_ESTIMATES");
+  channel_estimate_id = event_id_from_name(database, event_name);
   f = get_format(database, channel_estimate_id);
 
   frame_arg    = get_field(&f, "frame",    "int");
diff --git a/openair1/PHY/CODING/lte_segmentation.c b/openair1/PHY/CODING/lte_segmentation.c
index 5116c765b86a7e7afdb2c19195fc260a0537e5ac..7b8308656ad88020536e9d7dbd7d66053dd41003 100644
--- a/openair1/PHY/CODING/lte_segmentation.c
+++ b/openair1/PHY/CODING/lte_segmentation.c
@@ -59,7 +59,7 @@ int lte_segmentation(unsigned char *input_buffer,
   }
 
   if ((*C)>MAX_NUM_DLSCH_SEGMENTS) {
-    printf("%d\n",*(int*)0);
+    printf("%d\n",*(int *)0);
     LOG_E(PHY,"lte_segmentation.c: too many segments %d, B %d, L %d, Bprime %d\n",*C,B,L,Bprime);
     return(-1);
   }
@@ -105,7 +105,7 @@ int lte_segmentation(unsigned char *input_buffer,
 #endif
     *Kminus = (*Kplus - 64);
   } else {
-    printf("lte_segmentation.c: Illegal codeword size !!!\n");
+    LOG_E(PHY,"lte_segmentation.c: Illegal codeword size !!!\n");
     return(-1);
   }
 
diff --git a/openair1/PHY/LTE_TRANSPORT/uci_tools.c b/openair1/PHY/LTE_TRANSPORT/uci_tools.c
index c301c8510f03f4ab7d22b50496cdf507435336de..f8ade9afc86f8bb6a0f233d6bc078ccc95896a48 100644
--- a/openair1/PHY/LTE_TRANSPORT/uci_tools.c
+++ b/openair1/PHY/LTE_TRANSPORT/uci_tools.c
@@ -31,7 +31,7 @@
 */
 #include "PHY/defs_eNB.h"
 #ifdef DEBUG_UCI_TOOLS
-#include "PHY/vars.h"
+  #include "PHY/vars.h"
 #endif
 
 //#define DEBUG_UCI 1
@@ -41,15 +41,21 @@ int16_t find_uci(uint16_t rnti, int frame, int subframe, PHY_VARS_eNB *eNB,find_
   uint16_t i;
   int16_t first_free_index=-1;
   AssertFatal(eNB!=NULL,"eNB is null\n");
+
   for (i=0; i<NUMBER_OF_UCI_VARS_MAX; i++) {
     if ((eNB->uci_vars[i].active >0) &&
-	(eNB->uci_vars[i].rnti==rnti) &&
-	(eNB->uci_vars[i].frame==frame) &&
-	(eNB->uci_vars[i].subframe==subframe)) return(i); 
+        (eNB->uci_vars[i].rnti==rnti) &&
+        (eNB->uci_vars[i].frame==frame) &&
+        (eNB->uci_vars[i].subframe==subframe)) return(i);
     else if ((eNB->uci_vars[i].active == 0) && (first_free_index==-1)) first_free_index=i;
   }
+
   if (type == SEARCH_EXIST) return(-1);
-  else return(first_free_index);
+
+  if (first_free_index==-1)
+    LOG_E(MAC,"UCI table is full\n");
+
+  return(first_free_index);
 }
 
 
diff --git a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
index 5d23c3c23ddd44b2eb2ddbdb784b0859e892b806..14117307b870d92c4227be0209c6faed4b8e05bc 100644
--- a/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
+++ b/openair1/PHY/LTE_TRANSPORT/ulsch_decoding.c
@@ -563,8 +563,8 @@ int ulsch_decoding_data(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag)
   else
     tc = *decoder8;
 
-  if(ulsch_harq->repetition_number == 1){
-	  memset(pusch_rep_buffer,0,(sizeof(int32_t)*3*(6144+64))) ;  // reset the buffer every new repetitions
+  if(ulsch_harq->repetition_number == 1) {
+    memset(pusch_rep_buffer,0,(sizeof(int32_t)*3*(6144+64))) ;  // reset the buffer every new repetitions
   }
 
   for (r=0; r<ulsch_harq->C; r++) {
@@ -581,11 +581,10 @@ int ulsch_decoding_data(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag)
                                           (uint8_t *)&dummy_w[r][0],
                                           (r==0) ? ulsch_harq->F : 0);
 #ifdef DEBUG_ULSCH_DECODING
-    printf("Rate Matching Segment %u (coded bits (G) %d,unpunctured/repeated bits %u, Q_m %d, nb_rb %d, Nl %d)...\n",
+    printf("Rate Matching Segment %u (coded bits (G) %d,unpunctured/repeated bits %u, Q_m %d, Nl %d)...\n",
            r, G,
            Kr*3,
-           Q_m,
-           nb_rb,
+           ulsch_harq->Qm,
            ulsch_harq->Nl);
 #endif
     start_meas(&eNB->ulsch_rate_unmatching_stats);
@@ -610,26 +609,22 @@ int ulsch_decoding_data(PHY_VARS_eNB *eNB,int UE_id,int harq_pid,int llr8_flag)
     }
 
     stop_meas(&eNB->ulsch_rate_unmatching_stats);
-
     max_Ncb = 3*ulsch_harq->RTC[r]*32 ;
 
-    if(ulsch_harq->total_number_of_repetitions > 1)
-    {
-    	if (ulsch_harq->rvidx==1)
-    	{ 					// Store the result of HARQ combining in the last emtc repetitions of sequence 0,2,3,1
-    		for (int nn=0;nn<max_Ncb;nn++)
-    		{
-    			pusch_rep_buffer[nn] += ulsch_harq->w[r][nn] ;
-    		}
+    if(ulsch_harq->total_number_of_repetitions > 1) {
+      if (ulsch_harq->rvidx==1) {
+        // Store the result of HARQ combining in the last emtc repetitions of sequence 0,2,3,1
+        for (int nn=0; nn<max_Ncb; nn++) {
+          pusch_rep_buffer[nn] += ulsch_harq->w[r][nn] ;
+        }
+      }
+
+      if (ulsch_harq->repetition_number == ulsch_harq->total_number_of_repetitions) {
+        for (int nn=0; nn<max_Ncb; nn++) {
+          ulsch_harq->w[r][nn] =  pusch_rep_buffer[nn] ;
         }
-    	if (ulsch_harq->repetition_number == ulsch_harq->total_number_of_repetitions)
-    	{
-    		for (int nn=0;nn<max_Ncb;nn++)
-    		{
-    			ulsch_harq->w[r][nn] =  pusch_rep_buffer[nn] ;
-      		}
-      	}
       }
+    }
 
     r_offset += E;
     start_meas(&eNB->ulsch_deinterleaving_stats);
@@ -764,18 +759,17 @@ unsigned int  ulsch_decoding(PHY_VARS_eNB *eNB,L1_rxtx_proc_t *proc,
   int frame = proc->frame_rx;
   int subframe = proc->subframe_rx;
   LTE_UL_eNB_HARQ_t *ulsch_harq;
-
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
   LOG_D(PHY,"ue_type %d\n",ulsch->ue_type);
+
   if (ulsch->ue_type>0)     harq_pid = 0;
   else
 #endif
-    {
-      harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe);
-    }
+  {
+    harq_pid = subframe2harq_pid(frame_parms,proc->frame_rx,subframe);
+  }
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PHY_ENB_ULSCH_DECODING0+harq_pid,1);
-
   // x1 is set in lte_gold_generic
   x2 = ((uint32_t)ulsch->rnti<<14) + ((uint32_t)subframe<<9) + frame_parms->Nid_cell; //this is c_init in 36.211 Sec 6.3.1
   ulsch_harq = ulsch->harq_processes[harq_pid];
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/initial_sync.c b/openair1/PHY/LTE_UE_TRANSPORT/initial_sync.c
index 968597bfb8fdc5ada6342b9f497ab3b12be3ba31..3478d522ab42fed26647e8046245e3afd9d4365a 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/initial_sync.c
+++ b/openair1/PHY/LTE_UE_TRANSPORT/initial_sync.c
@@ -50,7 +50,6 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode) {
   uint8_t l,pbch_decoded,frame_mod4,pbch_tx_ant,dummy;
   LTE_DL_FRAME_PARMS *frame_parms=&ue->frame_parms;
   char phich_resource[6];
-
   LOG_D(PHY,"[UE%d] Initial sync: starting PBCH detection (rx_offset %d)\n",ue->Mod_id,
         ue->rx_offset);
 
@@ -95,7 +94,6 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode) {
                         0);
   }
 
-
   LOG_D(PHY,"[UE %d] RX RSSI %d dBm, digital (%d, %d) dB, linear (%d, %d), avg rx power %d dB (%d lin), RX gain %d dB\n",
         ue->Mod_id,
         ue->measurements.rx_rssi_dBm[0] - ((ue->frame_parms.nb_antennas_rx==2) ? 3 : 0),
@@ -106,7 +104,6 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode) {
         ue->measurements.rx_power_avg_dB[0],
         ue->measurements.rx_power_avg[0],
         ue->rx_total_gain_dB);
-
   LOG_D(PHY,"[UE %d] N0 %d dBm digital (%d, %d) dB, linear (%d, %d), avg noise power %d dB (%d lin)\n",
         ue->Mod_id,
         ue->measurements.n0_power_tot_dBm,
@@ -116,57 +113,60 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode) {
         ue->measurements.n0_power[1],
         ue->measurements.n0_power_avg_dB,
         ue->measurements.n0_power_avg);
-
   pbch_decoded = 0;
 
   for (frame_mod4=0; frame_mod4<4; frame_mod4++) {
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-    if (ue->FeMBMS_active != 2){	
+
+    if (ue->FeMBMS_active != 2) {
 #endif
-    	pbch_tx_ant = rx_pbch(&ue->common_vars,
-                          ue->pbch_vars[0],
-                          frame_parms,
-                          0,
-                          SISO,
-                          ue->high_speed_flag,
-                          frame_mod4);
+      pbch_tx_ant = rx_pbch(&ue->common_vars,
+                            ue->pbch_vars[0],
+                            frame_parms,
+                            0,
+                            SISO,
+                            ue->high_speed_flag,
+                            frame_mod4);
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-	}else{
-    	pbch_tx_ant = rx_pbch_fembms(&ue->common_vars,
-                          ue->pbch_vars[0],
-                          frame_parms,
-                          0,
-                          SISO,
-                          ue->high_speed_flag,
-                          frame_mod4);
-	}
+    } else {
+      pbch_tx_ant = rx_pbch_fembms(&ue->common_vars,
+                                   ue->pbch_vars[0],
+                                   frame_parms,
+                                   0,
+                                   SISO,
+                                   ue->high_speed_flag,
+                                   frame_mod4);
+    }
+
 #endif
 
-    	if ((pbch_tx_ant>0) && (pbch_tx_ant<=2)) {
-      		pbch_decoded = 1;
-      	break;
+    if ((pbch_tx_ant>0) && (pbch_tx_ant<=2)) {
+      pbch_decoded = 1;
+      break;
     }
 
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-    if (ue->FeMBMS_active != 2){
+
+    if (ue->FeMBMS_active != 2) {
 #endif
-    	pbch_tx_ant = rx_pbch(&ue->common_vars,
-                          ue->pbch_vars[0],
-                          frame_parms,
-                          0,
-                          ALAMOUTI,
-                          ue->high_speed_flag,
-                          frame_mod4);
+      pbch_tx_ant = rx_pbch(&ue->common_vars,
+                            ue->pbch_vars[0],
+                            frame_parms,
+                            0,
+                            ALAMOUTI,
+                            ue->high_speed_flag,
+                            frame_mod4);
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-    }else{
-	    pbch_tx_ant = rx_pbch_fembms(&ue->common_vars,
-                          ue->pbch_vars[0],
-                          frame_parms,
-                          0,
-                          ALAMOUTI,
-                          ue->high_speed_flag,
-                          frame_mod4);
+    } else {
+      pbch_tx_ant = rx_pbch_fembms(&ue->common_vars,
+                                   ue->pbch_vars[0],
+                                   frame_parms,
+                                   0,
+                                   ALAMOUTI,
+                                   ue->high_speed_flag,
+                                   frame_mod4);
     }
+
 #endif
 
     if ((pbch_tx_ant>0) && (pbch_tx_ant<=2)) {
@@ -218,73 +218,72 @@ int pbch_detection(PHY_VARS_UE *ue, runmode_t mode) {
     }
 
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-  if(ue->FeMBMS_active != 2) {
-#endif
-    // now check for PHICH parameters
-    frame_parms->phich_config_common.phich_duration = (PHICH_DURATION_t)((ue->pbch_vars[0]->decoded_output[2]>>4)&1);
-    dummy = (ue->pbch_vars[0]->decoded_output[2]>>2)&3;
-
-    switch (dummy) {
-      case 0:
-        frame_parms->phich_config_common.phich_resource = oneSixth;
-        sprintf(phich_resource,"1/6");
-        break;
-
-      case 1:
-        frame_parms->phich_config_common.phich_resource = half;
-        sprintf(phich_resource,"1/2");
-        break;
-
-      case 2:
-        frame_parms->phich_config_common.phich_resource = one;
-        sprintf(phich_resource,"1");
-        break;
-
-      case 3:
-        frame_parms->phich_config_common.phich_resource = two;
-        sprintf(phich_resource,"2");
-        break;
-
-      default:
-        LOG_E(PHY,"[UE%d] Initial sync: Unknown PHICH_DURATION\n",ue->Mod_id);
-        return -1;
-        break;
-    }
-
-    for(int i=0; i<RX_NB_TH; i++) {
-      ue->proc.proc_rxtx[i].frame_rx =   (((ue->pbch_vars[0]->decoded_output[2]&3)<<6) + (ue->pbch_vars[0]->decoded_output[1]>>2))<<2;
-      ue->proc.proc_rxtx[i].frame_rx =   (((ue->pbch_vars[0]->decoded_output[2]&3)<<6) + (ue->pbch_vars[0]->decoded_output[1]>>2))<<2;
-      ue->proc.proc_rxtx[i].frame_tx = ue->proc.proc_rxtx[0].frame_rx;
-    }
 
+    if(ue->FeMBMS_active != 2) {
+#endif
+      // now check for PHICH parameters
+      frame_parms->phich_config_common.phich_duration = (PHICH_DURATION_t)((ue->pbch_vars[0]->decoded_output[2]>>4)&1);
+      dummy = (ue->pbch_vars[0]->decoded_output[2]>>2)&3;
+
+      switch (dummy) {
+        case 0:
+          frame_parms->phich_config_common.phich_resource = oneSixth;
+          sprintf(phich_resource,"1/6");
+          break;
+
+        case 1:
+          frame_parms->phich_config_common.phich_resource = half;
+          sprintf(phich_resource,"1/2");
+          break;
+
+        case 2:
+          frame_parms->phich_config_common.phich_resource = one;
+          sprintf(phich_resource,"1");
+          break;
+
+        case 3:
+          frame_parms->phich_config_common.phich_resource = two;
+          sprintf(phich_resource,"2");
+          break;
+
+        default:
+          LOG_E(PHY,"[UE%d] Initial sync: Unknown PHICH_DURATION\n",ue->Mod_id);
+          return -1;
+          break;
+      }
 
-    LOG_D(PHY,"[UE%d] Initial sync: pbch decoded sucessfully p %d, tx_ant %d, frame %d, N_RB_DL %d, phich_duration %d, phich_resource %s!\n",
-          ue->Mod_id,
-          frame_parms->nb_antenna_ports_eNB,
-          pbch_tx_ant,
-          ue->proc.proc_rxtx[0].frame_rx,
-          frame_parms->N_RB_DL,
-          frame_parms->phich_config_common.phich_duration,
-          phich_resource);  //frame_parms->phich_config_common.phich_resource);
+      for(int i=0; i<RX_NB_TH; i++) {
+        ue->proc.proc_rxtx[i].frame_rx =   (((ue->pbch_vars[0]->decoded_output[2]&3)<<6) + (ue->pbch_vars[0]->decoded_output[1]>>2))<<2;
+        ue->proc.proc_rxtx[i].frame_rx =   (((ue->pbch_vars[0]->decoded_output[2]&3)<<6) + (ue->pbch_vars[0]->decoded_output[1]>>2))<<2;
+        ue->proc.proc_rxtx[i].frame_tx = ue->proc.proc_rxtx[0].frame_rx;
+      }
 
+      LOG_D(PHY,"[UE%d] Initial sync: pbch decoded sucessfully p %d, tx_ant %d, frame %d, N_RB_DL %d, phich_duration %d, phich_resource %s!\n",
+            ue->Mod_id,
+            frame_parms->nb_antenna_ports_eNB,
+            pbch_tx_ant,
+            ue->proc.proc_rxtx[0].frame_rx,
+            frame_parms->N_RB_DL,
+            frame_parms->phich_config_common.phich_duration,
+            phich_resource);  //frame_parms->phich_config_common.phich_resource);
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
- }else{
-	for(int i=0; i<RX_NB_TH;i++)
-        { 
-          ue->proc.proc_rxtx[i].frame_rx =   (((ue->pbch_vars[0]->decoded_output[2]&31)<<1) + (ue->pbch_vars[0]->decoded_output[1]>>7))<<4;
-          ue->proc.proc_rxtx[i].frame_tx = ue->proc.proc_rxtx[0].frame_rx;
-	}
-	LOG_D(PHY,"[UE%d] Initial sync: FeMBMS pbch decoded sucessfully p %d, tx_ant %d, frame %d, N_RB_DL %d, AdditionalNonMBSFN_SF %d, frame_mod4 %d\n",
+    } else {
+      for(int i=0; i<RX_NB_TH; i++) {
+        ue->proc.proc_rxtx[i].frame_rx =   (((ue->pbch_vars[0]->decoded_output[2]&31)<<1) + (ue->pbch_vars[0]->decoded_output[1]>>7))<<4;
+        ue->proc.proc_rxtx[i].frame_tx = ue->proc.proc_rxtx[0].frame_rx;
+      }
+
+      LOG_D(PHY,"[UE%d] Initial sync: FeMBMS pbch decoded sucessfully p %d, tx_ant %d, frame %d, N_RB_DL %d, AdditionalNonMBSFN_SF %d, frame_mod4 %d\n",
             ue->Mod_id,
             frame_parms->nb_antenna_ports_eNB,
             pbch_tx_ant,
             ue->proc.proc_rxtx[0].frame_rx,
             frame_parms->N_RB_DL,
-                0,
-                frame_mod4
-        );
-	
- }
+            0,
+            frame_mod4
+           );
+    }
+
 #endif
     return(0);
   } else {
@@ -310,7 +309,6 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
   frame_parms->frame_type=FDD;
   frame_parms->nb_antenna_ports_eNB = 2;
   init_frame_parms(frame_parms,1);
-
   /*
   LOG_M("rxdata0.m","rxd0",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
   exit(-1);
@@ -325,9 +323,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
   else
     sync_pos2 = sync_pos + FRAME_LENGTH_COMPLEX_SAMPLES - frame_parms->nb_prefix_samples;
 
-
   LOG_D(PHY,"[UE%d] Initial sync : Estimated PSS position %d, Nid2 %d\n",ue->Mod_id,sync_pos,ue->common_vars.eNb_id);
-
   // SSS detection
   // PSS is hypothesized in last symbol of first slot in Frame
   sync_pos_slot = (frame_parms->samples_per_tti>>1) - frame_parms->ofdm_symbol_size - frame_parms->nb_prefix_samples;
@@ -350,22 +346,23 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
     lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell);
     ret = pbch_detection(ue,mode);
     //   LOG_M("rxdata2.m","rxd2",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
-
     LOG_D(PHY,"FDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
           frame_parms->Nid_cell,metric_fdd_ncp,phase_fdd_ncp,flip_fdd_ncp,ret);
-
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-      if (ret==-1){
-	 ue->FeMBMS_active = 2;
-	 ret = pbch_detection(ue,mode);
-	 if (ret==-1){
-		ue->FeMBMS_active = 0;
-		frame_parms->FeMBMS_active = 0;
-	 }
-	 else frame_parms->FeMBMS_active = 1;
+
+    if (ret==-1) {
+      ue->FeMBMS_active = 2;
+      ret = pbch_detection(ue,mode);
+
+      if (ret==-1) {
+        ue->FeMBMS_active = 0;
+        frame_parms->FeMBMS_active = 0;
+      } else frame_parms->FeMBMS_active = 1;
+
       LOG_D(PHY,"FeMBMS Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
-          frame_parms->Nid_cell,metric_fdd_ncp,phase_fdd_ncp,flip_fdd_ncp,ret);
-      }
+            frame_parms->Nid_cell,metric_fdd_ncp,phase_fdd_ncp,flip_fdd_ncp,ret);
+    }
+
 #endif
   } else {
     LOG_D(PHY,"FDD Normal prefix: SSS error condition: sync_pos %d, sync_pos_slot %d\n", sync_pos, sync_pos_slot);
@@ -406,23 +403,22 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
       //     LOG_M("rxdata3.m","rxd3",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
       LOG_D(PHY,"FDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
             frame_parms->Nid_cell,metric_fdd_ecp,phase_fdd_ecp,flip_fdd_ecp,ret);
-	
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-      if (ret==-1){
-	 ue->FeMBMS_active = 2;
-	 ret = pbch_detection(ue,mode);
-	 if (ret==-1){
-		ue->FeMBMS_active = 0;
-		frame_parms->FeMBMS_active = 0;
-	 }
-	 else frame_parms->FeMBMS_active = 1;
-      LOG_I(PHY,"FeMBMS CAS Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
-            frame_parms->Nid_cell,metric_fdd_ecp,phase_fdd_ecp,flip_fdd_ecp,ret);
 
-      }
-#endif
+      if (ret==-1) {
+        ue->FeMBMS_active = 2;
+        ret = pbch_detection(ue,mode);
 
+        if (ret==-1) {
+          ue->FeMBMS_active = 0;
+          frame_parms->FeMBMS_active = 0;
+        } else frame_parms->FeMBMS_active = 1;
+
+        LOG_I(PHY,"FeMBMS CAS Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
+              frame_parms->Nid_cell,metric_fdd_ecp,phase_fdd_ecp,flip_fdd_ecp,ret);
+      }
 
+#endif
     } else {
       LOG_D(PHY,"FDD Extended prefix: SSS error condition: sync_pos %d, sync_pos_slot %d\n", sync_pos, sync_pos_slot);
     }
@@ -460,9 +456,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
       lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell);
       ret = pbch_detection(ue,mode);
       //      LOG_M("rxdata4.m","rxd4",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
-
       LOG_D(PHY,"TDD Normal prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
-
             frame_parms->Nid_cell,metric_tdd_ncp,phase_tdd_ncp,flip_tdd_ncp,ret);
 
       if (ret==-1) {
@@ -496,9 +490,7 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
         lte_gold(frame_parms,ue->lte_gold_table[0],frame_parms->Nid_cell);
         ret = pbch_detection(ue,mode);
         //  LOG_M("rxdata5.m","rxd5",ue->common_vars.rxdata[0],10*frame_parms->samples_per_tti,1,1);
-
         LOG_D(PHY,"TDD Extended prefix: CellId %d metric %d, phase %d, flip %d, pbch %d\n",
-
               frame_parms->Nid_cell,metric_tdd_ecp,phase_tdd_ecp,flip_tdd_ecp,ret);
       }
     }
@@ -525,7 +517,6 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
       generate_pcfich_reg_mapping(frame_parms);
       generate_phich_reg_mapping(frame_parms);
       ue->pbch_vars[0]->pdu_errors_conseq=0;
-
     }
 
     LOG_I(PHY, "[UE %d] Frame %d RRC Measurements => rssi %3.1f dBm (dig %3.1f dB, gain %d), N0 %d dBm,  rsrp %3.1f dBm/RE, rsrq %3.1f dB\n",ue->Mod_id,
@@ -562,7 +553,6 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
           metric_tdd_ecp,Nid_cell_tdd_ecp);*/
     LOG_D(PHY,"[UE%d] Initial sync : Estimated Nid_cell %d, Frame_type %d\n",ue->Mod_id,
           frame_parms->Nid_cell,frame_parms->frame_type);
-
     ue->UE_mode[0] = NOT_SYNCHED;
     ue->pbch_vars[0]->pdu_errors_last=ue->pbch_vars[0]->pdu_errors;
     ue->pbch_vars[0]->pdu_errors++;
@@ -587,15 +577,13 @@ int initial_sync(PHY_VARS_UE *ue, runmode_t mode) {
     // we might add a low-pass filter here later
     ue->measurements.rx_power_avg[0] = rx_power/frame_parms->nb_antennas_rx;
     ue->measurements.rx_power_avg_dB[0] = dB_fixed(ue->measurements.rx_power_avg[0]);
-
     LOG_I(PHY,"[UE%d] Initial sync : Estimated power: %d dB\n",ue->Mod_id,ue->measurements.rx_power_avg_dB[0] );
 
-    if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM )
+    if (IS_SOFTMODEM_BASICSIM )
       phy_adjust_gain(ue,ue->measurements.rx_power_avg_dB[0],0);
   } else {
-    if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM )
+    if (IS_SOFTMODEM_BASICSIM )
       phy_adjust_gain(ue,dB_fixed(ue->measurements.rssi),0);
-
   }
 
   return ret;
diff --git a/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c b/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c
index 8139c496aef3cfeb33ae137beb514d0b9a8f8d82..49fa484c2650cf7d3c5bf095511f32d126528100 100644
--- a/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c
+++ b/openair1/PHY/LTE_UE_TRANSPORT/prach_ue.c
@@ -80,7 +80,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
   int i, prach_len;
   uint16_t first_nonzero_root_idx=0;
 
-  if ( !(IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ) {
+  if ( !(IS_SOFTMODEM_BASICSIM ) ) {
     prach_start =  (ue->rx_offset+subframe*ue->frame_parms.samples_per_tti-ue->hw_timing_advance-ue->N_TA_offset);
 #ifdef PRACH_DEBUG
     LOG_I(PHY,"[UE %d] prach_start %d, rx_offset %d, hw_timing_advance %d, N_TA_offset %d\n", ue->Mod_id,
@@ -473,7 +473,7 @@ int32_t generate_prach( PHY_VARS_UE *ue, uint8_t eNB_id, uint8_t subframe, uint1
   AssertFatal(prach_fmt<4,
               "prach_fmt4 not fully implemented" );
 
-  if (!(IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ) {
+  if (!(IS_SOFTMODEM_BASICSIM ) ) {
     int j;
     int overflow = prach_start + prach_len - LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*ue->frame_parms.samples_per_tti;
     LOG_I( PHY, "prach_start=%d, overflow=%d\n", prach_start, overflow );
diff --git a/openair1/SCHED_UE/phy_procedures_lte_ue.c b/openair1/SCHED_UE/phy_procedures_lte_ue.c
index 5e7f723c970f45927794de14f0d16a3cd157fbd3..253b6d692a620a30aef270d672e289ec5ecb7093 100644
--- a/openair1/SCHED_UE/phy_procedures_lte_ue.c
+++ b/openair1/SCHED_UE/phy_procedures_lte_ue.c
@@ -19,17 +19,17 @@
  *      contact@openairinterface.org
  */
 
- /*! \file phy_procedures_lte_ue.c
-  * \brief Implementation of UE procedures from 36.213 LTE specifications / This includes FeMBMS UE procedures from 36.213 v14.2.0 specification
-  * \author R. Knopp, F. Kaltenberger, N. Nikaein, J. Morgade
-  * \date 2011
-  * \version 0.1
-  * \company Eurecom
-  * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr, navid.nikaein@eurecom.fr, javier.morgad
+/*! \file phy_procedures_lte_ue.c
+ * \brief Implementation of UE procedures from 36.213 LTE specifications / This includes FeMBMS UE procedures from 36.213 v14.2.0 specification
+ * \author R. Knopp, F. Kaltenberger, N. Nikaein, J. Morgade
+ * \date 2011
+ * \version 0.1
+ * \company Eurecom
+ * \email: knopp@eurecom.fr,florian.kaltenberger@eurecom.fr, navid.nikaein@eurecom.fr, javier.morgad
 e@ieee.org
-  * \note
-  * \warning
-  */
+ * \note
+ * \warning
+ */
 
 #define _GNU_SOURCE
 
@@ -166,13 +166,16 @@ unsigned int get_tx_amp(int power_dBm, int power_max_dBm, int N_RB_UL, int nb_rb
   int gain_dB;
   double gain_lin;
 
-  if (power_dBm<=power_max_dBm)
+  if ( (power_dBm<=power_max_dBm) && ! IS_SOFTMODEM_RFSIM)
     gain_dB = power_dBm - power_max_dBm;
   else
     gain_dB = 0;
 
   gain_lin = pow(10,.1*gain_dB);
   AssertFatal((nb_rb >0) && (nb_rb <= N_RB_UL),"Illegal nb_rb/N_RB_UL combination (%d/%d)\n",nb_rb,N_RB_UL);
+  LOG_D(PHY," tx gain: %d = %d * sqrt ( pow(10, 0.1*max(0,%d-%d)) * %d/%d ) (gain lin=%f (dB=%d))\n",
+        (int)(AMP*sqrt(gain_lin*N_RB_UL/(double)nb_rb)),
+        AMP, power_dBm, power_max_dBm,  N_RB_UL, nb_rb, gain_lin, gain_dB);
   return((int)(AMP*sqrt(gain_lin*N_RB_UL/(double)nb_rb)));
 }
 
@@ -1099,7 +1102,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
 
   nsymb = (frame_parms->Ncp == 0) ? 14 : 12;
 
-  if (!(IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ) {
+  if (!IS_SOFTMODEM_BASICSIM) {
     ulsch_start = (ue->rx_offset+subframe_tx*frame_parms->samples_per_tti-
                    ue->hw_timing_advance-
                    ue->timing_advance-
@@ -1130,7 +1133,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
   }
 
   for (aa=0; aa<frame_parms->nb_antennas_tx; aa++) {
-    int *Buff = (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ? &ue->common_vars.txdata[aa][ulsch_start] :dummy_tx_buffer;
+    int *Buff = IS_SOFTMODEM_BASICSIM ? &ue->common_vars.txdata[aa][ulsch_start] :dummy_tx_buffer;
 
     if (frame_parms->Ncp == 1) {
       PHY_ofdm_mod(&ue->common_vars.txdataF[aa][subframe_tx*nsymb*frame_parms->ofdm_symbol_size],
@@ -1151,7 +1154,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
                         &ue->frame_parms);
     }
 
-    if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
+    if (IS_SOFTMODEM_BASICSIM ) {
       apply_7_5_kHz(ue,&ue->common_vars.txdata[aa][ulsch_start],0);
       apply_7_5_kHz(ue,&ue->common_vars.txdata[aa][ulsch_start],1);
     } else {
@@ -1159,7 +1162,7 @@ void ulsch_common_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc, uint8_t empt
       apply_7_5_kHz(ue,dummy_tx_buffer,1);
     }
 
-    if (!(IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM) ) {
+    if (!(IS_SOFTMODEM_BASICSIM ) ) {
       overflow = ulsch_start - 9*frame_parms->samples_per_tti;
 
       for (k=ulsch_start,l=0; k<cmin(frame_parms->samples_per_tti*LTE_NUMBER_OF_SUBFRAMES_PER_FRAME,ulsch_start+frame_parms->samples_per_tti); k++,l++) {
@@ -1259,7 +1262,7 @@ void ue_prach_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
           ue->prach_resources[eNB_id]->ra_RNTI);
     ue->tx_total_RE[subframe_tx] = 96;
 
-    if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
+    if (IS_SOFTMODEM_BASICSIM ) {
       ue->prach_vars[eNB_id]->amp = get_tx_amp(ue->tx_power_dBm[subframe_tx],
                                     ue->tx_power_max_dBm,
                                     ue->frame_parms.N_RB_UL,
@@ -1630,7 +1633,7 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
 
       ue->tx_total_RE[subframe_tx] = nb_rb*12;
 
-      if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
+      if (IS_SOFTMODEM_BASICSIM ) {
         tx_amp = AMP;
       } else {
         tx_amp = get_tx_amp(ue->tx_power_dBm[subframe_tx],
@@ -1661,8 +1664,8 @@ void ue_ulsch_uespec_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB
       for (aa=0; aa<1/*frame_parms->nb_antennas_tx*/; aa++)
         generate_drs_pusch(ue,
                            proc,
-			   (LTE_DL_FRAME_PARMS *)NULL,
-			   (int32_t**)NULL,
+                           (LTE_DL_FRAME_PARMS *)NULL,
+                           (int32_t **)NULL,
                            eNB_id,
                            tx_amp,
                            subframe_tx,
@@ -1704,7 +1707,7 @@ void ue_srs_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uint8
       Po_SRS = ue->tx_power_max_dBm;
     }
 
-    if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
+    if (IS_SOFTMODEM_BASICSIM) {
       tx_amp = AMP;
     } else {
       if (ue->mac_enabled==1) {
@@ -1942,7 +1945,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
       ue->tx_power_dBm[subframe_tx] = Po_PUCCH;
       ue->tx_total_RE[subframe_tx] = 12;
 
-      if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
+      if (IS_SOFTMODEM_BASICSIM ) {
         tx_amp = AMP;
       } else {
         tx_amp = get_tx_amp(Po_PUCCH,
@@ -2023,7 +2026,7 @@ void ue_pucch_procedures(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,uin
       ue->tx_power_dBm[subframe_tx] = Po_PUCCH;
       ue->tx_total_RE[subframe_tx] = 12;
 
-      if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM ) {
+      if (IS_SOFTMODEM_BASICSIM ) {
         tx_amp = AMP;
       } else {
         tx_amp =  get_tx_amp(Po_PUCCH,
@@ -2269,7 +2272,7 @@ void ue_measurement_procedures(
     // AGC
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GAIN_CONTROL, VCD_FUNCTION_IN);
 
-    if (IS_SOFTMODEM_BASICSIM || IS_SOFTMODEM_RFSIM )
+    if (IS_SOFTMODEM_BASICSIM )
       phy_adjust_gain (ue,dB_fixed(ue->measurements.rssi),0);
 
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_GAIN_CONTROL, VCD_FUNCTION_OUT);
@@ -2309,24 +2312,23 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin
     //for (pbch_phase=0;pbch_phase<4;pbch_phase++) {
     //LOG_I(PHY,"[UE  %d] Frame %d, Trying PBCH %d (NidCell %d, eNB_id %d)\n",ue->Mod_id,frame_rx,pbch_phase,ue->frame_parms.Nid_cell,eNB_id);
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-	if(is_fembms_cas_subframe(frame_rx,subframe_rx,&ue->frame_parms)){
-    	 	pbch_tx_ant = rx_pbch_fembms(&ue->common_vars,
-                          ue->pbch_vars[eNB_id],
-                          &ue->frame_parms,
-                          eNB_id,
-                          ue->frame_parms.nb_antenna_ports_eNB==1?SISO:ALAMOUTI,
-                          ue->high_speed_flag,
-                          pbch_phase);
-
-	}else
+    if(is_fembms_cas_subframe(frame_rx,subframe_rx,&ue->frame_parms)) {
+      pbch_tx_ant = rx_pbch_fembms(&ue->common_vars,
+                                   ue->pbch_vars[eNB_id],
+                                   &ue->frame_parms,
+                                   eNB_id,
+                                   ue->frame_parms.nb_antenna_ports_eNB==1?SISO:ALAMOUTI,
+                                   ue->high_speed_flag,
+                                   pbch_phase);
+    } else
 #endif
-    		pbch_tx_ant = rx_pbch(&ue->common_vars,
-                          ue->pbch_vars[eNB_id],
-                          &ue->frame_parms,
-                          eNB_id,
-                          ue->frame_parms.nb_antenna_ports_eNB==1?SISO:ALAMOUTI,
-                          ue->high_speed_flag,
-                          pbch_phase);
+      pbch_tx_ant = rx_pbch(&ue->common_vars,
+                            ue->pbch_vars[eNB_id],
+                            &ue->frame_parms,
+                            eNB_id,
+                            ue->frame_parms.nb_antenna_ports_eNB==1?SISO:ALAMOUTI,
+                            ue->high_speed_flag,
+                            pbch_phase);
 
     if ((pbch_tx_ant>0) && (pbch_tx_ant<=4)) {
       break;
@@ -2346,8 +2348,6 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin
       dummy[2] = ue->pbch_vars[eNB_id]->decoded_output[0];
       trace_pdu( DIRECTION_DOWNLINK, dummy, WS_C_RNTI, ue->Mod_id, 0, 0,
                  frame_rx, subframe_rx, 0, 0);
-      LOG_D(OPT,"[UE %d][PBCH] Frame %d trace pdu for PBCH\n",
-            ue->Mod_id, subframe_rx);
     }
 
     if (pbch_tx_ant>2) {
@@ -2356,21 +2356,21 @@ void ue_pbch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc, uin
       return;
     }
 
-
     ue->pbch_vars[eNB_id]->pdu_errors_conseq = 0;
-
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-        if(is_fembms_cas_subframe(frame_rx,subframe_rx,&ue->frame_parms)){
-		frame_tx  = (int)((ue->pbch_vars[eNB_id]->decoded_output[2]&31)<<1);
-		frame_tx += ue->pbch_vars[eNB_id]->decoded_output[1]>>7;
-		frame_tx +=4*pbch_phase;	
-	}else{
+
+    if(is_fembms_cas_subframe(frame_rx,subframe_rx,&ue->frame_parms)) {
+      frame_tx  = (int)((ue->pbch_vars[eNB_id]->decoded_output[2]&31)<<1);
+      frame_tx += ue->pbch_vars[eNB_id]->decoded_output[1]>>7;
+      frame_tx +=4*pbch_phase;
+    } else {
 #endif
-    		frame_tx = (((int)(ue->pbch_vars[eNB_id]->decoded_output[2]&0x03))<<8);
-    		frame_tx += ((int)(ue->pbch_vars[eNB_id]->decoded_output[1]&0xfc));
-    		frame_tx += pbch_phase;
+      frame_tx = (((int)(ue->pbch_vars[eNB_id]->decoded_output[2]&0x03))<<8);
+      frame_tx += ((int)(ue->pbch_vars[eNB_id]->decoded_output[1]&0xfc));
+      frame_tx += pbch_phase;
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-	}
+    }
+
 #endif
 
     if (ue->mac_enabled==1) {
@@ -2794,9 +2794,9 @@ int ue_pdcch_procedures(uint8_t eNB_id,PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint
 
 void ue_pmch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,int eNB_id,int abstraction_flag
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-, uint8_t fembms_flag
+  , uint8_t fembms_flag
 #endif
-) {
+                       ) {
   int subframe_rx = proc->subframe_rx;
   int frame_rx = proc->frame_rx;
   int pmch_mcs=-1;
@@ -2827,72 +2827,75 @@ void ue_pmch_procedures(PHY_VARS_UE *ue, UE_rxtx_proc_t *proc,int eNB_id,int abs
     if (pmch_mcs>=0) {
       LOG_D(PHY,"[UE %d] Frame %d, subframe %d: Programming PMCH demodulation for mcs %d\n",ue->Mod_id,frame_rx,subframe_rx,pmch_mcs);
       fill_UE_dlsch_MCH(ue,pmch_mcs,1,0,0);
-
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-      if(fembms_flag /*subframe_rx == 3 || subframe_rx == 2*/){
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_MBSFN_KHZ_1DOT25, VCD_FUNCTION_IN);
-	slot_fep_mbsfn_khz_1dot25(ue,subframe_rx,0);	
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_MBSFN_KHZ_1DOT25, VCD_FUNCTION_OUT);
-      }
-      else{
+
+      if(fembms_flag /*subframe_rx == 3 || subframe_rx == 2*/) {
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_MBSFN_KHZ_1DOT25, VCD_FUNCTION_IN);
+        slot_fep_mbsfn_khz_1dot25(ue,subframe_rx,0);
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_MBSFN_KHZ_1DOT25, VCD_FUNCTION_OUT);
+      } else {
 #endif
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_MBSFN, VCD_FUNCTION_IN);
-      for (l=2; l<12; l++) {
-        slot_fep_mbsfn(ue,
-                       l,
-                       subframe_rx,
-                       0,0);//ue->rx_offset,0);
-      }
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_MBSFN, VCD_FUNCTION_OUT);
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_MBSFN, VCD_FUNCTION_IN);
+
+        for (l=2; l<12; l++) {
+          slot_fep_mbsfn(ue,
+                         l,
+                         subframe_rx,
+                         0,0);//ue->rx_offset,0);
+        }
+
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP_MBSFN, VCD_FUNCTION_OUT);
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
       }
-#endif
 
+#endif
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-      if(fembms_flag /*subframe_rx == 3 || subframe_rx == 2*/){
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PMCH_KHZ_1DOT25, VCD_FUNCTION_IN);
-	rx_pmch_khz_1dot25(ue,0,subframe_rx,pmch_mcs);
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PMCH_KHZ_1DOT25, VCD_FUNCTION_OUT);
 
-      }
-      else{
+      if(fembms_flag /*subframe_rx == 3 || subframe_rx == 2*/) {
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PMCH_KHZ_1DOT25, VCD_FUNCTION_IN);
+        rx_pmch_khz_1dot25(ue,0,subframe_rx,pmch_mcs);
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PMCH_KHZ_1DOT25, VCD_FUNCTION_OUT);
+      } else {
 #endif
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PMCH, VCD_FUNCTION_IN);
-      for (l=2; l<12; l++) {
-        rx_pmch(ue,
-                0,
-                subframe_rx,
-                l);
-      }
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PMCH, VCD_FUNCTION_OUT);
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PMCH, VCD_FUNCTION_IN);
+
+        for (l=2; l<12; l++) {
+          rx_pmch(ue,
+                  0,
+                  subframe_rx,
+                  l);
+        }
+
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_PMCH, VCD_FUNCTION_OUT);
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
       }
-#endif
 
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PMCH_DECODING, VCD_FUNCTION_IN);
+#endif
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PMCH_DECODING, VCD_FUNCTION_IN);
       ue->dlsch_MCH[0]->harq_processes[0]->Qm = get_Qm(pmch_mcs);
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
+
       if(fembms_flag /*subframe_rx == 3 || subframe_rx == 2*/)
-      	ue->dlsch_MCH[0]->harq_processes[0]->G = get_G_khz_1dot25(&ue->frame_parms,
-	   	ue->dlsch_MCH[0]->harq_processes[0]->nb_rb,
-          	ue->dlsch_MCH[0]->harq_processes[0]->rb_alloc_even,
-          	ue->dlsch_MCH[0]->harq_processes[0]->Qm,
-          	1,
-          	2,
-          	frame_rx,
-          	subframe_rx,
-          	0);
+        ue->dlsch_MCH[0]->harq_processes[0]->G = get_G_khz_1dot25(&ue->frame_parms,
+            ue->dlsch_MCH[0]->harq_processes[0]->nb_rb,
+            ue->dlsch_MCH[0]->harq_processes[0]->rb_alloc_even,
+            ue->dlsch_MCH[0]->harq_processes[0]->Qm,
+            1,
+            2,
+            frame_rx,
+            subframe_rx,
+            0);
       else
 #endif
-      	ue->dlsch_MCH[0]->harq_processes[0]->G = get_G(&ue->frame_parms,
-          	ue->dlsch_MCH[0]->harq_processes[0]->nb_rb,
-          	ue->dlsch_MCH[0]->harq_processes[0]->rb_alloc_even,
-          	ue->dlsch_MCH[0]->harq_processes[0]->Qm,
-          	1,
-          	2,
-          	frame_rx,
-          	subframe_rx,
-          	0);
+        ue->dlsch_MCH[0]->harq_processes[0]->G = get_G(&ue->frame_parms,
+            ue->dlsch_MCH[0]->harq_processes[0]->nb_rb,
+            ue->dlsch_MCH[0]->harq_processes[0]->rb_alloc_even,
+            ue->dlsch_MCH[0]->harq_processes[0]->Qm,
+            1,
+            2,
+            frame_rx,
+            subframe_rx,
+            0);
 
       dlsch_unscrambling(&ue->frame_parms,1,ue->dlsch_MCH[0],
                          ue->dlsch_MCH[0]->harq_processes[0]->G,
@@ -2912,7 +2915,7 @@ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PMCH_D
                            subframe_rx,
                            0,
                            0,1);
-VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PMCH_DECODING, VCD_FUNCTION_OUT);
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PMCH_DECODING, VCD_FUNCTION_OUT);
 
       if (mcch_active == 1)
         ue->dlsch_mcch_trials[sync_area][0]++;
@@ -2934,7 +2937,7 @@ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PMCH_D
               ue->dlsch_MCH[0]->max_turbo_iterations,
               ue->dlsch_MCH[0]->harq_processes[0]->G);
         // dump_mch(ue,0,ue->dlsch_MCH[0]->harq_processes[0]->G,subframe_rx);
-	//if(subframe_rx == 3){
+        //if(subframe_rx == 3){
         //dump_mch(ue,0,ue->dlsch_MCH[0]->harq_processes[0]->G,subframe_rx);
         //exit_fun("nothing to add");
         //}
@@ -2959,7 +2962,6 @@ VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_DLSCH_PMCH_D
               ue->dlsch_MCH[0]->harq_processes[0]->TBS>>3,
               ue->dlsch_MCH[0]->max_turbo_iterations,
               ue->dlsch_MCH[0]->harq_processes[0]->G);
-
         ue_send_mch_sdu(ue->Mod_id,
                         CC_id,
                         frame_rx,
@@ -3447,24 +3449,24 @@ void ue_dlsch_procedures(PHY_VARS_UE *ue,
 
           case SI_PDSCH:
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-            if(subframe_rx == 0) { 
-               ue_decode_si_mbms(ue->Mod_id,
-                         CC_id,
-                         frame_rx,
-                         eNB_id,
-                         ue->dlsch_SI[eNB_id]->harq_processes[0]->b,
-                         ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3);
+            if(subframe_rx == 0) {
+              ue_decode_si_mbms(ue->Mod_id,
+                                CC_id,
+                                frame_rx,
+                                eNB_id,
+                                ue->dlsch_SI[eNB_id]->harq_processes[0]->b,
+                                ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3);
+            } else {
+              ue_decode_si(ue->Mod_id,
+                           CC_id,
+                           frame_rx,
+                           eNB_id,
+                           ue->dlsch_SI[eNB_id]->harq_processes[0]->b,
+                           ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3);
+            }
 
-	    } else {
-            	ue_decode_si(ue->Mod_id,
-                         CC_id,
-                         frame_rx,
-                         eNB_id,
-                         ue->dlsch_SI[eNB_id]->harq_processes[0]->b,
-                         ue->dlsch_SI[eNB_id]->harq_processes[0]->TBS>>3);
-	    }
 #else
-       	ue_decode_si(ue->Mod_id,
+            ue_decode_si(ue->Mod_id,
                          CC_id,
                          frame_rx,
                          eNB_id,
@@ -4360,415 +4362,413 @@ int phy_procedures_UE_RX(PHY_VARS_UE *ue,UE_rxtx_proc_t *proc,uint8_t eNB_id,
     start_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]);
   }
 
-
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-  if(is_fembms_pmch_subframe(frame_rx,subframe_rx,&ue->frame_parms)){
-	ue_pmch_procedures(ue,proc,eNB_id,abstraction_flag,1);
-	return 0;
-  }else{ // this gets closed at end
+
+  if(is_fembms_pmch_subframe(frame_rx,subframe_rx,&ue->frame_parms)) {
+    ue_pmch_procedures(ue,proc,eNB_id,abstraction_flag,1);
+    return 0;
+  } else { // this gets closed at end
 #endif
+    pmch_flag = is_pmch_subframe(frame_rx,subframe_rx,&ue->frame_parms) ? 1 : 0;
 
+    if (do_pdcch_flag) {
+      // deactivate reception until we scan pdcch
+      if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0])
+        ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active = 0;
 
-  pmch_flag = is_pmch_subframe(frame_rx,subframe_rx,&ue->frame_parms) ? 1 : 0;
+      if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][1])
+        ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][1]->active = 0;
 
-  if (do_pdcch_flag) {
-    // deactivate reception until we scan pdcch
-    if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0])
-      ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active = 0;
+      if (ue->dlsch_SI[eNB_id])
+        ue->dlsch_SI[eNB_id]->active = 0;
 
-    if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][1])
-      ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][1]->active = 0;
+      if (ue->dlsch_p[eNB_id])
+        ue->dlsch_p[eNB_id]->active = 0;
 
-    if (ue->dlsch_SI[eNB_id])
-      ue->dlsch_SI[eNB_id]->active = 0;
+      if (ue->dlsch_ra[eNB_id])
+        ue->dlsch_ra[eNB_id]->active = 0;
+    }
 
-    if (ue->dlsch_p[eNB_id])
-      ue->dlsch_p[eNB_id]->active = 0;
+    if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
+      LOG_D(PHY,"[UE %d] Frame %d subframe %d: Doing phy_procedures_UE_RX\n",
+            ue->Mod_id,frame_rx, subframe_rx);
+    }
 
-    if (ue->dlsch_ra[eNB_id])
-      ue->dlsch_ra[eNB_id]->active = 0;
-  }
+    if (ue->frame_parms.Ncp == 0) {  // normal prefix
+      pilot1 = 4;
+    } else { // extended prefix
+      pilot1 = 3;
+    }
 
-  if (LOG_DEBUGFLAG(DEBUG_UE_PHYPROC)) {
-    LOG_D(PHY,"[UE %d] Frame %d subframe %d: Doing phy_procedures_UE_RX\n",
-          ue->Mod_id,frame_rx, subframe_rx);
-  }
+    if (subframe_select(&ue->frame_parms,subframe_rx) == SF_S) { // S-subframe, do first 5 symbols only
+      l2 = 4;
+    } else if (pmch_flag == 1) { // do first 2 symbols only
+      l2 = 1;
+    } else { // normal subframe, last symbol to be processed is the first of the second slot
+      l2 = (ue->frame_parms.symbols_per_tti/2)-1;
+    }
 
-  if (ue->frame_parms.Ncp == 0) {  // normal prefix
-    pilot1 = 4;
-  } else { // extended prefix
-    pilot1 = 3;
-  }
+    int prev_subframe_rx = (subframe_rx - 1)<0? 9: (subframe_rx - 1);
 
-  if (subframe_select(&ue->frame_parms,subframe_rx) == SF_S) { // S-subframe, do first 5 symbols only
-    l2 = 4;
-  } else if (pmch_flag == 1) { // do first 2 symbols only
-    l2 = 1;
-  } else { // normal subframe, last symbol to be processed is the first of the second slot
-    l2 = (ue->frame_parms.symbols_per_tti/2)-1;
-  }
+    if (subframe_select(&ue->frame_parms,prev_subframe_rx) != SF_DL) {
+      //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+      // RX processing of symbols l=0...l2
+      //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+      l=0;
+    } else {
+      //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+      // RX processing of symbols l=1...l2 (l=0 is done in last scheduling epoch)
+      //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+      l=1;
+    }
 
-  int prev_subframe_rx = (subframe_rx - 1)<0? 9: (subframe_rx - 1);
+    LOG_D(PHY," ------ slot 0 Processing: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+    LOG_D(PHY," ------  --> FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
 
-  if (subframe_select(&ue->frame_parms,prev_subframe_rx) != SF_DL) {
-    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-    // RX processing of symbols l=0...l2
-    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-    l=0;
-  } else {
-    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-    // RX processing of symbols l=1...l2 (l=0 is done in last scheduling epoch)
-    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-    l=1;
-  }
+    for (; l<=l2; l++) {
+      if (abstraction_flag == 0) {
+        if (LOG_DEBUGFLAG(UE_TIMING)) {
+          start_meas(&ue->ofdm_demod_stats);
+        }
 
-  LOG_D(PHY," ------ slot 0 Processing: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
-  LOG_D(PHY," ------  --> FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
+        slot_fep(ue,
+                 l,
+                 (subframe_rx<<1),
+                 0,
+                 0,
+                 0);
+        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
 
-  for (; l<=l2; l++) {
-    if (abstraction_flag == 0) {
-      if (LOG_DEBUGFLAG(UE_TIMING)) {
-        start_meas(&ue->ofdm_demod_stats);
+        if (LOG_DEBUGFLAG(UE_TIMING)) {
+          stop_meas(&ue->ofdm_demod_stats);
+        }
       }
 
-      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
-      slot_fep(ue,
-               l,
-               (subframe_rx<<1),
-               0,
-               0,
-               0);
-      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
+      ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode);
 
-      if (LOG_DEBUGFLAG(UE_TIMING)) {
-        stop_meas(&ue->ofdm_demod_stats);
-      }
-    }
+      if (do_pdcch_flag) {
+        if ((l==pilot1) ||
+            ((pmch_flag==1)&&(l==l2)))  {
+          LOG_D(PHY,"[UE  %d] Frame %d: Calling pdcch procedures (eNB %d)\n",ue->Mod_id,frame_rx,eNB_id);
 
-    ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode);
+          //start_meas(&ue->rx_pdcch_stats[ue->current_thread_id[subframe_rx]]);
+          if (ue_pdcch_procedures(eNB_id,ue,proc,abstraction_flag) == -1) {
+            LOG_E(PHY,"[UE  %d] Frame %d, subframe %d: Error in pdcch procedures\n",ue->Mod_id,frame_rx,subframe_rx);
+            return(-1);
+          }
 
-    if (do_pdcch_flag) {
-      if ((l==pilot1) ||
-          ((pmch_flag==1)&&(l==l2)))  {
-        LOG_D(PHY,"[UE  %d] Frame %d: Calling pdcch procedures (eNB %d)\n",ue->Mod_id,frame_rx,eNB_id);
-
-        //start_meas(&ue->rx_pdcch_stats[ue->current_thread_id[subframe_rx]]);
-        if (ue_pdcch_procedures(eNB_id,ue,proc,abstraction_flag) == -1) {
-          LOG_E(PHY,"[UE  %d] Frame %d, subframe %d: Error in pdcch procedures\n",ue->Mod_id,frame_rx,subframe_rx);
-          return(-1);
+          //stop_meas(&ue->rx_pdcch_stats[ue->current_thread_id[subframe_rx]]);
+          //printf("subframe %d n_pdcch_sym %d pdcch procedures  %5.3f \n",
+          //        subframe_rx, ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
+          //     (ue->rx_pdcch_stats[ue->current_thread_id[subframe_rx]].p_time)/(cpuf*1000.0));
+          LOG_D(PHY,"num_pdcch_symbols %d\n",ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols);
         }
-
-        //stop_meas(&ue->rx_pdcch_stats[ue->current_thread_id[subframe_rx]]);
-        //printf("subframe %d n_pdcch_sym %d pdcch procedures  %5.3f \n",
-        //        subframe_rx, ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
-        //     (ue->rx_pdcch_stats[ue->current_thread_id[subframe_rx]].p_time)/(cpuf*1000.0));
-        LOG_D(PHY,"num_pdcch_symbols %d\n",ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols);
       }
-    }
-  } // for l=1..l2
+    } // for l=1..l2
 
-  ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode);
-  LOG_D(PHY," ------  end FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+    ue_measurement_procedures(l-1,ue,proc,eNB_id,(subframe_rx<<1),abstraction_flag,mode);
+    LOG_D(PHY," ------  end FFT/ChannelEst/PDCCH slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
 
-  // If this is PMCH, call procedures, do channel estimation for first symbol of next DL subframe and return
-  if (pmch_flag == 1) {
-    ue_pmch_procedures(ue,proc,eNB_id,abstraction_flag
+    // If this is PMCH, call procedures, do channel estimation for first symbol of next DL subframe and return
+    if (pmch_flag == 1) {
+      ue_pmch_procedures(ue,proc,eNB_id,abstraction_flag
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-,0
+                         ,0
 #endif
-);
-    int next_subframe_rx = (1+subframe_rx)%10;
+                        );
+      int next_subframe_rx = (1+subframe_rx)%10;
 
-    if (subframe_select(&ue->frame_parms,next_subframe_rx) != SF_UL) {
-      slot_fep(ue,
-               0,
-               (next_subframe_rx<<1),
-               0,
-               0,
-               0);
+      if (subframe_select(&ue->frame_parms,next_subframe_rx) != SF_UL) {
+        slot_fep(ue,
+                 0,
+                 (next_subframe_rx<<1),
+                 0,
+                 0,
+                 0);
+      }
+
+      return 0;
     }
 
-    return 0;
-  }
+    slot_fep(ue,
+             0,
+             1+(subframe_rx<<1),
+             0,
+             0,
+             0);
 
-  slot_fep(ue,
-           0,
-           1+(subframe_rx<<1),
-           0,
-           0,
-           0);
+    // first slot has been processed (FFTs + Channel Estimation, PCFICH/PHICH/PDCCH)
+    if (LOG_DEBUGFLAG(UE_TIMING)) {
+      stop_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]);
+      LOG_I(PHY, "[SFN %d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",subframe_rx,ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
+    }
 
-  // first slot has been processed (FFTs + Channel Estimation, PCFICH/PHICH/PDCCH)
-  if (LOG_DEBUGFLAG(UE_TIMING)) {
-    stop_meas(&ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]]);
-    LOG_I(PHY, "[SFN %d] Slot0: FFT + Channel Estimate + PCFICH/PHICH/PDCCH %5.2f \n",subframe_rx,ue->ue_front_end_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
-  }
+    LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
 
-  LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+    if (LOG_DEBUGFLAG(UE_TIMING)) {
+      start_meas(&ue->generic_stat);
+      start_meas(&ue->crnti_procedures_stats);
+    }
 
-  if (LOG_DEBUGFLAG(UE_TIMING)) {
-    start_meas(&ue->generic_stat);
-    start_meas(&ue->crnti_procedures_stats);
-  }
+    // do procedures for C-RNTI
+    if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active == 1) {
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
+      ue_pdsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          PDSCH,
+                          ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0],
+                          NULL,
+                          ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
+                          ue->frame_parms.symbols_per_tti>>1,
+                          abstraction_flag);
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT);
+    }
 
-  // do procedures for C-RNTI
-  if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active == 1) {
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
-    ue_pdsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        PDSCH,
-                        ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0],
-                        NULL,
-                        ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
-                        ue->frame_parms.symbols_per_tti>>1,
-                        abstraction_flag);
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT);
-  }
+    if (LOG_DEBUGFLAG(UE_TIMING)) {
+      stop_meas(&ue->crnti_procedures_stats);
+    }
 
-  if (LOG_DEBUGFLAG(UE_TIMING)) {
-    stop_meas(&ue->crnti_procedures_stats);
-  }
+    LOG_D(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
 
-  LOG_D(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+    // do procedures for SI-RNTI
+    if ((ue->dlsch_SI[eNB_id]) && (ue->dlsch_SI[eNB_id]->active == 1)) {
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI, VCD_FUNCTION_IN);
+      ue_pdsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          SI_PDSCH,
+                          ue->dlsch_SI[eNB_id],
+                          NULL,
+                          ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
+                          ue->frame_parms.symbols_per_tti>>1,
+                          abstraction_flag);
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI, VCD_FUNCTION_OUT);
+    }
 
-  // do procedures for SI-RNTI
-  if ((ue->dlsch_SI[eNB_id]) && (ue->dlsch_SI[eNB_id]->active == 1)) {
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI, VCD_FUNCTION_IN);
-    ue_pdsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        SI_PDSCH,
-                        ue->dlsch_SI[eNB_id],
-                        NULL,
-                        ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
-                        ue->frame_parms.symbols_per_tti>>1,
-                        abstraction_flag);
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_SI, VCD_FUNCTION_OUT);
-  }
+    // do procedures for SI-RNTI
+    if ((ue->dlsch_p[eNB_id]) && (ue->dlsch_p[eNB_id]->active == 1)) {
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_P, VCD_FUNCTION_IN);
+      ue_pdsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          P_PDSCH,
+                          ue->dlsch_p[eNB_id],
+                          NULL,
+                          ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
+                          ue->frame_parms.symbols_per_tti>>1,
+                          abstraction_flag);
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_P, VCD_FUNCTION_OUT);
+    }
 
-  // do procedures for SI-RNTI
-  if ((ue->dlsch_p[eNB_id]) && (ue->dlsch_p[eNB_id]->active == 1)) {
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_P, VCD_FUNCTION_IN);
-    ue_pdsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        P_PDSCH,
-                        ue->dlsch_p[eNB_id],
-                        NULL,
-                        ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
-                        ue->frame_parms.symbols_per_tti>>1,
-                        abstraction_flag);
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_P, VCD_FUNCTION_OUT);
-  }
+    // do procedures for RA-RNTI
+    if ((ue->dlsch_ra[eNB_id]) && (ue->dlsch_ra[eNB_id]->active == 1)) {
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA, VCD_FUNCTION_IN);
+      ue_pdsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          RA_PDSCH,
+                          ue->dlsch_ra[eNB_id],
+                          NULL,
+                          ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
+                          ue->frame_parms.symbols_per_tti>>1,
+                          abstraction_flag);
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA, VCD_FUNCTION_OUT);
+    }
 
-  // do procedures for RA-RNTI
-  if ((ue->dlsch_ra[eNB_id]) && (ue->dlsch_ra[eNB_id]->active == 1)) {
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA, VCD_FUNCTION_IN);
-    ue_pdsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        RA_PDSCH,
-                        ue->dlsch_ra[eNB_id],
-                        NULL,
-                        ue->pdcch_vars[ue->current_thread_id[subframe_rx]][eNB_id]->num_pdcch_symbols,
-                        ue->frame_parms.symbols_per_tti>>1,
-                        abstraction_flag);
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_RA, VCD_FUNCTION_OUT);
-  }
+    LOG_D(PHY," ------ slot 1 Processing: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+    LOG_D(PHY," ------  --> FFT/ChannelEst/PDCCH slot 1: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
 
-  LOG_D(PHY," ------ slot 1 Processing: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
-  LOG_D(PHY," ------  --> FFT/ChannelEst/PDCCH slot 1: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+    if (subframe_select(&ue->frame_parms,subframe_rx) != SF_S) {  // do front-end processing for second slot, and first symbol of next subframe
+      for (l=1; l<ue->frame_parms.symbols_per_tti>>1; l++) {
+        if (abstraction_flag == 0) {
+          if (LOG_DEBUGFLAG(UE_TIMING)) {
+            start_meas(&ue->ofdm_demod_stats);
+          }
 
-  if (subframe_select(&ue->frame_parms,subframe_rx) != SF_S) {  // do front-end processing for second slot, and first symbol of next subframe
-    for (l=1; l<ue->frame_parms.symbols_per_tti>>1; l++) {
-      if (abstraction_flag == 0) {
-        if (LOG_DEBUGFLAG(UE_TIMING)) {
-          start_meas(&ue->ofdm_demod_stats);
+          VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
+          slot_fep(ue,
+                   l,
+                   1+(subframe_rx<<1),
+                   0,
+                   0,
+                   0);
+          VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
+
+          if (LOG_DEBUGFLAG(UE_TIMING)) {
+            stop_meas(&ue->ofdm_demod_stats);
+          }
         }
 
-        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_IN);
+        ue_measurement_procedures(l-1,ue,proc,eNB_id,1+(subframe_rx<<1),abstraction_flag,mode);
+      } // for l=1..l2
+
+      ue_measurement_procedures(l-1,ue,proc,eNB_id,1+(subframe_rx<<1),abstraction_flag,mode);
+      // do first symbol of next downlink subframe for channel estimation
+      int next_subframe_rx = (1+subframe_rx)%10;
+
+      if (subframe_select(&ue->frame_parms,next_subframe_rx) != SF_UL) {
         slot_fep(ue,
-                 l,
-                 1+(subframe_rx<<1),
+                 0,
+                 (next_subframe_rx<<1),
                  0,
                  0,
                  0);
-        VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SLOT_FEP, VCD_FUNCTION_OUT);
-
-        if (LOG_DEBUGFLAG(UE_TIMING)) {
-          stop_meas(&ue->ofdm_demod_stats);
-        }
       }
+    } // not an S-subframe
 
-      ue_measurement_procedures(l-1,ue,proc,eNB_id,1+(subframe_rx<<1),abstraction_flag,mode);
-    } // for l=1..l2
+    if(LOG_DEBUGFLAG(UE_TIMING)) {
+      stop_meas(&ue->generic_stat);
+      LOG_I(PHY, "[SFN %d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
+    }
 
-    ue_measurement_procedures(l-1,ue,proc,eNB_id,1+(subframe_rx<<1),abstraction_flag,mode);
-    // do first symbol of next downlink subframe for channel estimation
-    int next_subframe_rx = (1+subframe_rx)%10;
+    LOG_D(PHY," ------  end FFT/ChannelEst/PDCCH slot 1: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
 
-    if (subframe_select(&ue->frame_parms,next_subframe_rx) != SF_UL) {
-      slot_fep(ue,
-               0,
-               (next_subframe_rx<<1),
-               0,
-               0,
-               0);
+    if ( (subframe_rx == 0) && (ue->decode_MIB == 1)) {
+      ue_pbch_procedures(eNB_id,ue,proc,abstraction_flag);
     }
-  } // not an S-subframe
 
-  if(LOG_DEBUGFLAG(UE_TIMING)) {
-    stop_meas(&ue->generic_stat);
-    LOG_I(PHY, "[SFN %d] Slot1: FFT + Channel Estimate + Pdsch Proc Slot0 %5.2f \n",subframe_rx,ue->generic_stat.p_time/(cpuf*1000.0));
-  }
+    // do procedures for C-RNTI
+    LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
 
-  LOG_D(PHY," ------  end FFT/ChannelEst/PDCCH slot 1: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+    if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active == 1) {
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
 
-  if ( (subframe_rx == 0) && (ue->decode_MIB == 1)) {
-    ue_pbch_procedures(eNB_id,ue,proc,abstraction_flag);
-  }
+      if (LOG_DEBUGFLAG(UE_TIMING)) {
+        start_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+      }
 
-  // do procedures for C-RNTI
-  LOG_D(PHY," ------ --> PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+      ue_pdsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          PDSCH,
+                          ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0],
+                          NULL,
+                          1+(ue->frame_parms.symbols_per_tti>>1),
+                          ue->frame_parms.symbols_per_tti-1,
+                          abstraction_flag);
+      LOG_D(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+      LOG_D(PHY," ------ --> PDSCH Turbo Decoder slot 0/1: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
 
-  if (ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->active == 1) {
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
+      if (LOG_DEBUGFLAG(UE_TIMING)) {
+        stop_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+        start_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+      }
 
-    if (LOG_DEBUGFLAG(UE_TIMING)) {
-      start_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
-    }
+      ue_dlsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          PDSCH,
+                          ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0],
+                          ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][1],
+                          &ue->dlsch_errors[eNB_id],
+                          mode,
+                          abstraction_flag);
 
-    ue_pdsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        PDSCH,
-                        ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0],
-                        NULL,
-                        1+(ue->frame_parms.symbols_per_tti>>1),
-                        ue->frame_parms.symbols_per_tti-1,
-                        abstraction_flag);
-    LOG_D(PHY," ------ end PDSCH ChannelComp/LLR slot 0: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
-    LOG_D(PHY," ------ --> PDSCH Turbo Decoder slot 0/1: AbsSubframe %d.%d ------  \n", frame_rx%1024, subframe_rx);
+      if (LOG_DEBUGFLAG(UE_TIMING)) {
+        stop_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+        LOG_I(PHY, "[SFN %d] Slot1:       Pdsch Proc %5.2f\n",subframe_rx,ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
+        LOG_I(PHY, "[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n",subframe_rx,ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
+      }
 
-    if (LOG_DEBUGFLAG(UE_TIMING)) {
-      stop_meas(&ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
-      start_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT);
     }
 
-    ue_dlsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        PDSCH,
-                        ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0],
-                        ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][1],
-                        &ue->dlsch_errors[eNB_id],
-                        mode,
-                        abstraction_flag);
-
     if (LOG_DEBUGFLAG(UE_TIMING)) {
-      stop_meas(&ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]]);
-      LOG_I(PHY, "[SFN %d] Slot1:       Pdsch Proc %5.2f\n",subframe_rx,ue->pdsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
-      LOG_I(PHY, "[SFN %d] Slot0 Slot1: Dlsch Proc %5.2f\n",subframe_rx,ue->dlsch_procedures_stat[ue->current_thread_id[subframe_rx]].p_time/(cpuf*1000.0));
+      start_meas(&ue->generic_stat);
     }
 
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_OUT);
-  }
-
-  if (LOG_DEBUGFLAG(UE_TIMING)) {
-    start_meas(&ue->generic_stat);
-  }
-
-  if (LOG_DUMPFLAG(DEBUG_UE_PHYPROC)) {
-    if(subframe_rx==5 &&  ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->harq_processes[ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->current_harq_pid]->nb_rb > 20) {
-      //LOG_M("decoder_llr.m","decllr",dlsch_llr,G,1,0);
-      //LOG_M("llr.m","llr",  &ue->pdsch_vars[eNB_id]->llr[0][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0);
-      LOG_M("rxdataF0_current.m", "rxdataF0", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
-      //LOG_M("rxdataF0_previous.m"    , "rxdataF0_prev_sss", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
-      //LOG_M("rxdataF0_previous.m"    , "rxdataF0_prev", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
-      LOG_M("dl_ch_estimates.m", "dl_ch_estimates_sfn5", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].dl_ch_estimates[0][0][0],14*ue->frame_parms.ofdm_symbol_size,1,
-            1);
-      LOG_M("dl_ch_estimates_ext.m", "dl_ch_estimatesExt_sfn5", &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_estimates_ext[0][0],14*ue->frame_parms.N_RB_DL*12,1,1);
-      LOG_M("rxdataF_comp00.m","rxdataF_comp00",     &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->rxdataF_comp0[0][0],14*ue->frame_parms.N_RB_DL*12,1,1);
-      //LOG_M("magDLFirst.m", "magDLFirst", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_mag0[0][0],14*frame_parms->N_RB_DL*12,1,1);
-      //LOG_M("magDLSecond.m", "magDLSecond", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_magb0[0][0],14*frame_parms->N_RB_DL*12,1,1);
-      AssertFatal (0,"");
+    if (LOG_DUMPFLAG(DEBUG_UE_PHYPROC)) {
+      if(subframe_rx==5 &&  ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->harq_processes[ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->current_harq_pid]->nb_rb > 20) {
+        //LOG_M("decoder_llr.m","decllr",dlsch_llr,G,1,0);
+        //LOG_M("llr.m","llr",  &ue->pdsch_vars[eNB_id]->llr[0][0],(14*nb_rb*12*dlsch1_harq->Qm) - 4*(nb_rb*4*dlsch1_harq->Qm),1,0);
+        LOG_M("rxdataF0_current.m", "rxdataF0", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
+        //LOG_M("rxdataF0_previous.m"    , "rxdataF0_prev_sss", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
+        //LOG_M("rxdataF0_previous.m"    , "rxdataF0_prev", &ue->common_vars.common_vars_rx_data_per_thread[next_thread_id].rxdataF[0][0],14*ue->frame_parms.ofdm_symbol_size,1,1);
+        LOG_M("dl_ch_estimates.m", "dl_ch_estimates_sfn5", &ue->common_vars.common_vars_rx_data_per_thread[ue->current_thread_id[subframe_rx]].dl_ch_estimates[0][0][0],14*ue->frame_parms.ofdm_symbol_size,1,
+              1);
+        LOG_M("dl_ch_estimates_ext.m", "dl_ch_estimatesExt_sfn5", &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_estimates_ext[0][0],14*ue->frame_parms.N_RB_DL*12,1,1);
+        LOG_M("rxdataF_comp00.m","rxdataF_comp00",     &ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->rxdataF_comp0[0][0],14*ue->frame_parms.N_RB_DL*12,1,1);
+        //LOG_M("magDLFirst.m", "magDLFirst", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_mag0[0][0],14*frame_parms->N_RB_DL*12,1,1);
+        //LOG_M("magDLSecond.m", "magDLSecond", &phy_vars_ue->pdsch_vars[ue->current_thread_id[subframe_rx]][0]->dl_ch_magb0[0][0],14*frame_parms->N_RB_DL*12,1,1);
+        AssertFatal (0,"");
+      }
     }
-  }
 
-  // do procedures for SI-RNTI
-  if ((ue->dlsch_SI[eNB_id]) && (ue->dlsch_SI[eNB_id]->active == 1)) {
-    ue_pdsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        SI_PDSCH,
-                        ue->dlsch_SI[eNB_id],
-                        NULL,
-                        1+(ue->frame_parms.symbols_per_tti>>1),
-                        ue->frame_parms.symbols_per_tti-1,
-                        abstraction_flag);
-    ue_dlsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        SI_PDSCH,
-                        ue->dlsch_SI[eNB_id],
-                        NULL,
-                        &ue->dlsch_SI_errors[eNB_id],
-                        mode,
-                        abstraction_flag);
-    ue->dlsch_SI[eNB_id]->active = 0;
-  }
+    // do procedures for SI-RNTI
+    if ((ue->dlsch_SI[eNB_id]) && (ue->dlsch_SI[eNB_id]->active == 1)) {
+      ue_pdsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          SI_PDSCH,
+                          ue->dlsch_SI[eNB_id],
+                          NULL,
+                          1+(ue->frame_parms.symbols_per_tti>>1),
+                          ue->frame_parms.symbols_per_tti-1,
+                          abstraction_flag);
+      ue_dlsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          SI_PDSCH,
+                          ue->dlsch_SI[eNB_id],
+                          NULL,
+                          &ue->dlsch_SI_errors[eNB_id],
+                          mode,
+                          abstraction_flag);
+      ue->dlsch_SI[eNB_id]->active = 0;
+    }
 
-  // do procedures for P-RNTI
-  if ((ue->dlsch_p[eNB_id]) && (ue->dlsch_p[eNB_id]->active == 1)) {
-    ue_pdsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        P_PDSCH,
-                        ue->dlsch_p[eNB_id],
-                        NULL,
-                        1+(ue->frame_parms.symbols_per_tti>>1),
-                        ue->frame_parms.symbols_per_tti-1,
-                        abstraction_flag);
-    ue_dlsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        P_PDSCH,
-                        ue->dlsch_p[eNB_id],
-                        NULL,
-                        &ue->dlsch_p_errors[eNB_id],
-                        mode,
-                        abstraction_flag);
-    ue->dlsch_p[eNB_id]->active = 0;
-  }
+    // do procedures for P-RNTI
+    if ((ue->dlsch_p[eNB_id]) && (ue->dlsch_p[eNB_id]->active == 1)) {
+      ue_pdsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          P_PDSCH,
+                          ue->dlsch_p[eNB_id],
+                          NULL,
+                          1+(ue->frame_parms.symbols_per_tti>>1),
+                          ue->frame_parms.symbols_per_tti-1,
+                          abstraction_flag);
+      ue_dlsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          P_PDSCH,
+                          ue->dlsch_p[eNB_id],
+                          NULL,
+                          &ue->dlsch_p_errors[eNB_id],
+                          mode,
+                          abstraction_flag);
+      ue->dlsch_p[eNB_id]->active = 0;
+    }
 
-  // do procedures for RA-RNTI
-  if ((ue->dlsch_ra[eNB_id]) && (ue->dlsch_ra[eNB_id]->active == 1)) {
-    ue_pdsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        RA_PDSCH,
-                        ue->dlsch_ra[eNB_id],
-                        NULL,
-                        1+(ue->frame_parms.symbols_per_tti>>1),
-                        ue->frame_parms.symbols_per_tti-1,
-                        abstraction_flag);
-    ue_dlsch_procedures(ue,
-                        proc,
-                        eNB_id,
-                        RA_PDSCH,
-                        ue->dlsch_ra[eNB_id],
-                        NULL,
-                        &ue->dlsch_ra_errors[eNB_id],
-                        mode,
-                        abstraction_flag);
-    ue->dlsch_ra[eNB_id]->active = 0;
-  }
+    // do procedures for RA-RNTI
+    if ((ue->dlsch_ra[eNB_id]) && (ue->dlsch_ra[eNB_id]->active == 1)) {
+      ue_pdsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          RA_PDSCH,
+                          ue->dlsch_ra[eNB_id],
+                          NULL,
+                          1+(ue->frame_parms.symbols_per_tti>>1),
+                          ue->frame_parms.symbols_per_tti-1,
+                          abstraction_flag);
+      ue_dlsch_procedures(ue,
+                          proc,
+                          eNB_id,
+                          RA_PDSCH,
+                          ue->dlsch_ra[eNB_id],
+                          NULL,
+                          &ue->dlsch_ra_errors[eNB_id],
+                          mode,
+                          abstraction_flag);
+      ue->dlsch_ra[eNB_id]->active = 0;
+    }
 
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
   } // This commes from feMBMS subframe filtering !
-#endif
 
+#endif
   // duplicate harq structure
   uint8_t          current_harq_pid        = ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->current_harq_pid;
   LTE_DL_UE_HARQ_t *current_harq_processes = ue->dlsch[ue->current_thread_id[subframe_rx]][eNB_id][0]->harq_processes[current_harq_pid];
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_RA.c b/openair2/LAYER2/MAC/eNB_scheduler_RA.c
index 732e7d984fc15ecab5ace980d68a91e59f68cad3..9c20d59d28e54773d5517f862c45cf5ac77d8a2c 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_RA.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_RA.c
@@ -143,13 +143,14 @@ add_msg3(module_id_t module_idP, int CC_id, RA_t *ra, frame_t frameP,
     ul_config_pdu->ulsch_pdu.ulsch_pdu_rel8.size = get_TBS_UL (ra->msg3_mcs, ra->msg3_nb_rb);
     // Re13 fields
     ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.ue_type = ra->rach_resource_type > 2 ? 2 : 1;
+
     if (ra->rach_resource_type > 0) {
-	pusch_maxNumRepetitionCEmodeA_r13= *(rrc->configuration.pusch_maxNumRepetitionCEmodeA_r13[CC_id]);
-	ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.total_number_of_repetitions= pusch_repetition_Table8_2_36213[pusch_maxNumRepetitionCEmodeA_r13][ra->pusch_repetition_levels];
-    }
-    else{
-    	ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.total_number_of_repetitions=1;
+      pusch_maxNumRepetitionCEmodeA_r13= *(rrc->configuration.pusch_maxNumRepetitionCEmodeA_r13[CC_id]);
+      ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.total_number_of_repetitions= pusch_repetition_Table8_2_36213[pusch_maxNumRepetitionCEmodeA_r13][ra->pusch_repetition_levels];
+    } else {
+      ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.total_number_of_repetitions=1;
     }
+
     ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.repetition_number = 1;
     ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.initial_transmission_sf_io = (ra->Msg3_frame * 10) + ra->Msg3_subframe;
     ul_req_body->number_of_pdus++;
@@ -273,10 +274,9 @@ void generate_Msg2(module_id_t module_idP,
   uint16_t        absSF_Msg2 = (10 * ra->Msg2_frame) + ra->Msg2_subframe;
 
   if (ra->rach_resource_type > 0) {
-	PUSCH_Rep_Level= *(rrc->configuration.pusch_repetitionLevelCEmodeA_r13[CC_idP]);
-  }
-  else {
-  	PUSCH_Rep_Level= 0;
+    PUSCH_Rep_Level= *(rrc->configuration.pusch_repetitionLevelCEmodeA_r13[CC_idP]);
+  } else {
+    PUSCH_Rep_Level= 0;
   }
 
   if (absSF > absSF_Msg2) {
@@ -347,9 +347,7 @@ void generate_Msg2(module_id_t module_idP,
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.mpdcch_tansmission_type = 1;   // imposed (9.1.5 in 213) for Type 2 Common search space
       AssertFatal (cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13 != NULL, "cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13 is null\n");
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.start_symbol = cc[CC_idP].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13;
-
       LOG_E(MAC, "start_symbol = %d \n", dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.start_symbol);
-
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.ecce_index = 0;        // Note: this should be dynamic
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.aggregation_level = 24;        // OK for CEModeA r1-3 (9.1.5-1b) or CEModeB r1-4
       dl_config_pdu->mpdcch_pdu.mpdcch_pdu_rel13.rnti_type = 2; // RA-RNTI
@@ -421,7 +419,7 @@ void generate_Msg2(module_id_t module_idP,
       }
 
       ra->pusch_repetition_levels = PUSCH_Rep_Level;
-	  
+
       if((ra->Msg2_frame == frameP) && (ra->Msg2_subframe == subframeP)) {
         /* Program PDSCH */
         LOG_D(MAC, "[eNB %d][RAPROC] Frame %d, Subframe %d : In generate_Msg2, Programming PDSCH\n",
@@ -913,11 +911,10 @@ generate_Msg4(module_id_t module_idP,
       ul_req_body->number_of_pdus++;
       T (T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT (module_idP), T_INT (CC_idP), T_INT (ra->rnti), T_INT (frameP), T_INT (subframeP),
          T_INT (0 /*harq_pid always 0? */ ), T_BUFFER (&mac->UE_list.DLSCH_pdu[CC_idP][0][UE_id].payload[0], ra->msg4_TBsize));
-
-      if (opt_enabled == 1) {
-        trace_pdu (1, (uint8_t *) mac->UE_list.DLSCH_pdu[CC_idP][0][(unsigned char) UE_id].payload[0], ra->msg4_rrc_sdu_length, UE_id, 3, UE_RNTI (module_idP, UE_id), mac->frame, mac->subframe, 0, 0);
-        LOG_D (OPT, "[eNB %d][DLSCH] CC_id %d Frame %d trace pdu for rnti %x with size %d\n", module_idP, CC_idP, frameP, UE_RNTI (module_idP, UE_id), ra->msg4_rrc_sdu_length);
-      }
+      trace_pdu (DIRECTION_DOWNLINK, (uint8_t *) mac->UE_list.DLSCH_pdu[CC_idP][0][(unsigned char) UE_id].payload[0],
+                 ra->msg4_rrc_sdu_length,
+                 UE_id, 3, UE_RNTI (module_idP, UE_id),
+                 mac->frame, mac->subframe, 0, 0);
     }                           // Msg4 frame/subframe
   }                             // rach_resource_type > 0
   else
@@ -979,12 +976,10 @@ generate_Msg4(module_id_t module_idP,
                              1, // tpc, none
                              getRIV(N_RB_DL, first_rb, 4),  // resource_block_coding
                              ra->msg4_mcs,  // mcs
-				 1 - UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid],
+                             1 - UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid],
                              0, // rv
                              0);  // vrb_flag
-    	
-    	UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid] = 1 - UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid];
-
+        UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid] = 1 - UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid];
         LOG_D(MAC,
               "Frame %d, subframe %d: Msg4 DCI pdu_num %d (rnti %x,rnti_type %d,harq_pid %d, resource_block_coding (%p) %d\n",
               frameP, subframeP, dl_req_body->number_pdu,
@@ -1074,7 +1069,7 @@ generate_Msg4(module_id_t module_idP,
           mac->TX_req[CC_idP].sfn_sf =
             fill_nfapi_tx_req(&mac->TX_req[CC_idP].tx_request_body,
                               (frameP * 10) + subframeP,
-				      rrc_sdu_length+offset,
+                              rrc_sdu_length+offset,
                               mac->pdu_index[CC_idP],
                               mac->UE_list.
                               DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0]);
@@ -1094,20 +1089,12 @@ generate_Msg4(module_id_t module_idP,
             T_INT(subframeP), T_INT(0 /*harq_pid always 0? */ ),
             T_BUFFER(&mac->UE_list.DLSCH_pdu[CC_idP][0][UE_id].
                      payload[0], ra->msg4_TBsize));
-
-          if (opt_enabled == 1) {
-            trace_pdu(DIRECTION_DOWNLINK,
-                      (uint8_t *) mac->
-                      UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0],
-                      rrc_sdu_length, UE_id,  WS_C_RNTI,
-                      UE_RNTI(module_idP, UE_id), mac->frame,
-                      mac->subframe, 0, 0);
-            LOG_D(OPT,
-                  "[eNB %d][DLSCH] CC_id %d Frame %d trace pdu for rnti %x with size %d\n",
-                  module_idP, CC_idP, frameP, UE_RNTI(module_idP,
-                      UE_id),
-                  rrc_sdu_length);
-          }
+          trace_pdu(DIRECTION_DOWNLINK,
+                    (uint8_t *) mac->
+                    UE_list.DLSCH_pdu[CC_idP][0][(unsigned char)UE_id].payload[0],
+                    rrc_sdu_length, UE_id,  WS_C_RNTI,
+                    UE_RNTI(module_idP, UE_id), mac->frame,
+                    mac->subframe, 0, 0);
 
           if(RC.mac[module_idP]->scheduler_mode == SCHED_MODE_FAIR_RR) {
             set_dl_ue_select_msg4(CC_idP, 4, UE_id, ra->rnti);
@@ -1219,7 +1206,7 @@ check_Msg4_retransmission(module_id_t module_idP, int CC_idP,
                              1, // tpc, none
                              getRIV(N_RB_DL, first_rb, 4),  // resource_block_coding
                              ra->msg4_mcs,  // mcs
-				     UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid],
+                             UE_list->UE_template[CC_idP][UE_id].oldNDI[ra->harq_pid],
                              round & 3, // rv
                              0);  // vrb_flag
 
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_bch.c b/openair2/LAYER2/MAC/eNB_scheduler_bch.c
index d523fb4e17b6f7aa031b6b7849a4a9b51430f756..fcecc4c77d0f01897257aa17a9f3f2237638c74a 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_bch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_bch.c
@@ -46,7 +46,7 @@
 #include "pdcp.h"
 
 #if defined(ENABLE_ITTI)
-#include "intertask_interface.h"
+  #include "intertask_interface.h"
 #endif
 
 #define ENABLE_MAC_PAYLOAD_DEBUG
@@ -78,228 +78,223 @@ int SIB1_BR_TBS_table[6] = { 208, 256, 328, 504, 712, 936 };
 //------------------------------------------------------------------------------
 void
 schedule_SIB1_MBMS(module_id_t module_idP,
-		 frame_t frameP, sub_frame_t subframeP)
+                   frame_t frameP, sub_frame_t subframeP)
 //------------------------------------------------------------------------------
 {
 #ifdef SCHEDULE_SIB1_MBMS
-    int8_t bcch_sdu_length;
-    int CC_id;
-    eNB_MAC_INST *eNB = RC.mac[module_idP];
-    COMMON_channels_t *cc;
-    uint8_t *vrb_map;
-    int first_rb = -1;
-    int N_RB_DL;
-    nfapi_dl_config_request_pdu_t *dl_config_pdu;
-    nfapi_tx_request_pdu_t *TX_req;
-    nfapi_dl_config_request_body_t *dl_req;
-    int m, i, N_S_NB;
-    int *Sj;
-    int n_NB = 0;
-    int TBS;
-    int k = 0, rvidx;
-    uint16_t sfn_sf = frameP<<4|subframeP;
+  int8_t bcch_sdu_length;
+  int CC_id;
+  eNB_MAC_INST *eNB = RC.mac[module_idP];
+  COMMON_channels_t *cc;
+  uint8_t *vrb_map;
+  int first_rb = -1;
+  int N_RB_DL;
+  nfapi_dl_config_request_pdu_t *dl_config_pdu;
+  nfapi_tx_request_pdu_t *TX_req;
+  nfapi_dl_config_request_body_t *dl_req;
+  int m, i, N_S_NB;
+  int *Sj;
+  int n_NB = 0;
+  int TBS;
+  int k = 0, rvidx;
+  uint16_t sfn_sf = frameP<<4|subframeP;
+
+  for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
+    cc = &eNB->common_channels[CC_id];
+    vrb_map = (void *) &cc->vrb_map;
+    N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
+    dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
+    int foffset = cc->physCellId & 1;
+    int sfoffset = (cc->tdd_Config == NULL) ? 0 : 1;
 
-    for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
+    // Time-domain scheduling
+    if (cc->mib->message.schedulingInfoSIB1_BR_r13 == 0)
+      continue;
+    else
+      switch ((cc->mib->message.schedulingInfoSIB1_BR_r13 - 1) % 3) {
+        case 0:   // repetition 4
+          k = (frameP >> 1) & 3;
+
+          if ((subframeP != (4 + sfoffset))
+              || ((frameP & 1) != foffset))
+            continue;
+
+          break;
+
+        case 1:   // repetition 8
+          k = frameP & 3;
+          AssertFatal(N_RB_DL > 15,
+                      "SIB1-BR repetition 8 not allowed for N_RB_DL= %d\n",
+                      N_RB_DL);
+
+          if ((foffset == 0) && (subframeP != (4 + sfoffset)))
+            continue;
+          else if ((foffset == 1)
+                   && (subframeP != ((9 + sfoffset) % 10)))
+            continue;
+
+          break;
+
+        case 2:   // repetition 16
+          k = ((10 * frameP) + subframeP) & 3;
+          AssertFatal(N_RB_DL > 15,
+                      "SIB1-BR repetition 16 not allowed for N_RB_DL= %d\n",
+                      N_RB_DL);
+
+          if ((sfoffset == 1)
+              && ((subframeP != 0) || (subframeP != 5)))
+            continue;
+          else if ((sfoffset == 0) && (foffset == 0)
+                   && (subframeP != 4) && (subframeP != 9))
+            continue;
+          else if ((sfoffset == 0) && (foffset == 1)
+                   && (subframeP != 0) && (subframeP != 9))
+            continue;
+
+          break;
+      }
+
+    // if we get here we have to schedule SIB1_BR in this frame/subframe
+
+    // keep counter of SIB1_BR repetitions in 8 frame period to choose narrowband on which to transmit
+    if ((frameP & 7) == 0)
+      cc->SIB1_BR_cnt = 0;
+    else
+      cc->SIB1_BR_cnt++;
+
+    // Frequency-domain scheduling
+    switch (N_RB_DL) {
+      case 6:
+      case 15:
+      default:
+        m = 1;
+        n_NB = 0;
+        N_S_NB = 0;
+        Sj = NULL;
+        break;
+
+      case 25:
+        m = 2;
+        N_S_NB = 2;
+        Sj = Sj25;
+        break;
+
+      case 50:
+        m = 2;
+        N_S_NB = 6;
+        Sj = Sj50;
+        break;
+
+      case 75:
+        m = 4;
+        N_S_NB = 10;
+        Sj = Sj75;
+        break;
+
+      case 100:
+        m = 4;
+        N_S_NB = 14;
+        Sj = Sj100;
+        break;
+    }
 
-	cc = &eNB->common_channels[CC_id];
-	vrb_map = (void *) &cc->vrb_map;
-	N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
-	dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
-
-	int foffset = cc->physCellId & 1;
-	int sfoffset = (cc->tdd_Config == NULL) ? 0 : 1;
-
-	// Time-domain scheduling
-	if (cc->mib->message.schedulingInfoSIB1_BR_r13 == 0)
-	    continue;
-	else
-	    switch ((cc->mib->message.schedulingInfoSIB1_BR_r13 - 1) % 3) {
-	    case 0:		// repetition 4
-		k = (frameP >> 1) & 3;
-		if ((subframeP != (4 + sfoffset))
-		    || ((frameP & 1) != foffset))
-		    continue;
-		break;
-	    case 1:		// repetition 8
-		k = frameP & 3;
-		AssertFatal(N_RB_DL > 15,
-			    "SIB1-BR repetition 8 not allowed for N_RB_DL= %d\n",
-			    N_RB_DL);
-		if ((foffset == 0) && (subframeP != (4 + sfoffset)))
-		    continue;
-		else if ((foffset == 1)
-			 && (subframeP != ((9 + sfoffset) % 10)))
-		    continue;
-		break;
-	    case 2:		// repetition 16
-		k = ((10 * frameP) + subframeP) & 3;
-		AssertFatal(N_RB_DL > 15,
-			    "SIB1-BR repetition 16 not allowed for N_RB_DL= %d\n",
-			    N_RB_DL);
-		if ((sfoffset == 1)
-		    && ((subframeP != 0) || (subframeP != 5)))
-		    continue;
-		else if ((sfoffset == 0) && (foffset == 0)
-			 && (subframeP != 4) && (subframeP != 9))
-		    continue;
-		else if ((sfoffset == 0) && (foffset == 1)
-			 && (subframeP != 0) && (subframeP != 9))
-		    continue;
-		break;
-	    }
-	// if we get here we have to schedule SIB1_BR in this frame/subframe
-
-	// keep counter of SIB1_BR repetitions in 8 frame period to choose narrowband on which to transmit
-	if ((frameP & 7) == 0)
-	    cc->SIB1_BR_cnt = 0;
-	else
-	    cc->SIB1_BR_cnt++;
-
-	// Frequency-domain scheduling
-	switch (N_RB_DL) {
-	case 6:
-	case 15:
-	default:
-	    m = 1;
-	    n_NB = 0;
-	    N_S_NB = 0;
-	    Sj = NULL;
-	    break;
-	case 25:
-	    m = 2;
-	    N_S_NB = 2;
-	    Sj = Sj25;
-	    break;
-	case 50:
-	    m = 2;
-	    N_S_NB = 6;
-	    Sj = Sj50;
-	    break;
-	case 75:
-	    m = 4;
-	    N_S_NB = 10;
-	    Sj = Sj75;
-	    break;
-	case 100:
-	    m = 4;
-	    N_S_NB = 14;
-	    Sj = Sj100;
-	    break;
-	}
-	// Note: definition of k above and rvidx from 36.321 section 5.3.1
-	rvidx = (((3 * k) >> 1) + (k & 1)) & 3;
-
-	i = cc->SIB1_BR_cnt & (m - 1);
-
-	n_NB = Sj[((cc->physCellId % N_S_NB) + (i * N_S_NB / m)) % N_S_NB];
-
-
-	bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SIB1_BR, 1, &cc->BCCH_BR_pdu[0].payload[0], 0);	// not used in this case
-
-	AssertFatal(cc->mib->message.schedulingInfoSIB1_BR_r13 < 19,
-		    "schedulingInfoSIB1_BR_r13 %d > 18\n",
-		    (int) cc->mib->message.schedulingInfoSIB1_BR_r13);
-
-	AssertFatal(bcch_sdu_length > 0,
-		    "RRC returned 0 bytes for SIB1-BR\n");
-
-	TBS =
-	    SIB1_BR_TBS_table[(cc->mib->message.schedulingInfoSIB1_BR_r13 -
-			       1) / 3] >> 3;
-
-	AssertFatal(bcch_sdu_length <= TBS,
-		    "length returned by RRC %d is not compatible with the TBS %d from MIB\n",
-		    bcch_sdu_length, TBS);
-
-	if ((frameP & 1023) < 200)
-	    LOG_D(MAC,
-		  "[eNB %d] Frame %d Subframe %d: SIB1_BR->DLSCH CC_id %d, Received %d bytes, scheduling on NB %d (i %d,m %d,N_S_NB %d)  rvidx %d\n",
-		  module_idP, frameP, subframeP, CC_id, bcch_sdu_length,
-		  n_NB, i, m, N_S_NB, rvidx);
-
-	// allocate all 6 PRBs in narrowband for SIB1_BR
-
-	first_rb = narrowband_to_first_rb(cc, n_NB);
-
-	vrb_map[first_rb] = 1;
-	vrb_map[first_rb + 1] = 1;
-	vrb_map[first_rb + 2] = 1;
-	vrb_map[first_rb + 3] = 1;
-	vrb_map[first_rb + 4] = 1;
-	vrb_map[first_rb + 5] = 1;
-
-	dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
-	memset((void *) dl_config_pdu, 0,
-	       sizeof(nfapi_dl_config_request_pdu_t));
-	dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
-	dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
-        dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = TBS;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = eNB->pdu_index[CC_id];
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = 0xFFFF;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2;	// format 1A/1B/1D
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0;	// localized
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 6);
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2;	//QPSK
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = rvidx;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1;	// first block
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = (cc->p_eNB == 1) ? 0 : 1;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1;
-	//  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4;	// 0 dB
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = 0;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth);	// ignored
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB == 1) ? 1 : 2;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
-	// Rel10 fields
-        dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = 3;
-	// Rel13 fields
-        dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1;	// CEModeA UE
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 0;	// SIB1-BR
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = 0xFFFF;	// absolute SFx
-
-	//  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ; 
-	dl_req->number_pdu++;
-        dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
-
-	// Program TX Request
-	TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
-	TX_req->pdu_length = bcch_sdu_length;
-	TX_req->pdu_index = eNB->pdu_index[CC_id]++;
-	TX_req->num_segments = 1;
-	TX_req->segments[0].segment_length = bcch_sdu_length;
-	TX_req->segments[0].segment_data = cc->BCCH_BR_pdu[0].payload;
-        eNB->TX_req[CC_id].sfn_sf = sfn_sf;
-        eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
-        eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
-        eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
-
-	if (opt_enabled == 1) {
-	    trace_pdu(DIRECTION_DOWNLINK,
-		      &cc->BCCH_BR_pdu[0].payload[0],
-		      bcch_sdu_length,
-		      0xffff, WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
-	    LOG_D(OPT,
-		  "[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-		  module_idP, frameP, CC_id, 0xffff, bcch_sdu_length);
-	}
-	if (cc->tdd_Config != NULL) {	//TDD
-	    LOG_D(MAC,
-		  "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (TDD) for CC_id %d SIB1-BR %d bytes\n",
-		  frameP, CC_id, bcch_sdu_length);
-	} else {
-	    LOG_D(MAC,
-		  "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (FDD) for CC_id %d SIB1-BR %d bytes\n",
-		  frameP, CC_id, bcch_sdu_length);
-	}
+    // Note: definition of k above and rvidx from 36.321 section 5.3.1
+    rvidx = (((3 * k) >> 1) + (k & 1)) & 3;
+    i = cc->SIB1_BR_cnt & (m - 1);
+    n_NB = Sj[((cc->physCellId % N_S_NB) + (i * N_S_NB / m)) % N_S_NB];
+    bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SIB1_BR, 1, &cc->BCCH_BR_pdu[0].payload[0], 0);  // not used in this case
+    AssertFatal(cc->mib->message.schedulingInfoSIB1_BR_r13 < 19,
+                "schedulingInfoSIB1_BR_r13 %d > 18\n",
+                (int) cc->mib->message.schedulingInfoSIB1_BR_r13);
+    AssertFatal(bcch_sdu_length > 0,
+                "RRC returned 0 bytes for SIB1-BR\n");
+    TBS =
+      SIB1_BR_TBS_table[(cc->mib->message.schedulingInfoSIB1_BR_r13 -
+                         1) / 3] >> 3;
+    AssertFatal(bcch_sdu_length <= TBS,
+                "length returned by RRC %d is not compatible with the TBS %d from MIB\n",
+                bcch_sdu_length, TBS);
+
+    if ((frameP & 1023) < 200)
+      LOG_D(MAC,
+            "[eNB %d] Frame %d Subframe %d: SIB1_BR->DLSCH CC_id %d, Received %d bytes, scheduling on NB %d (i %d,m %d,N_S_NB %d)  rvidx %d\n",
+            module_idP, frameP, subframeP, CC_id, bcch_sdu_length,
+            n_NB, i, m, N_S_NB, rvidx);
+
+    // allocate all 6 PRBs in narrowband for SIB1_BR
+    first_rb = narrowband_to_first_rb(cc, n_NB);
+    vrb_map[first_rb] = 1;
+    vrb_map[first_rb + 1] = 1;
+    vrb_map[first_rb + 2] = 1;
+    vrb_map[first_rb + 3] = 1;
+    vrb_map[first_rb + 4] = 1;
+    vrb_map[first_rb + 5] = 1;
+    dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
+    memset((void *) dl_config_pdu, 0,
+           sizeof(nfapi_dl_config_request_pdu_t));
+    dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
+    dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = TBS;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = eNB->pdu_index[CC_id];
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = 0xFFFF;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 6);
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = rvidx;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1; // first block
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = (cc->p_eNB == 1) ? 0 : 1;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1;
+    //  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = 0;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth);  // ignored
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB == 1) ? 1 : 2;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
+    // Rel10 fields
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = 3;
+    // Rel13 fields
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 0;  // SIB1-BR
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = 0xFFFF; // absolute SFx
+    //  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ;
+    dl_req->number_pdu++;
+    dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+    // Program TX Request
+    TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
+    TX_req->pdu_length = bcch_sdu_length;
+    TX_req->pdu_index = eNB->pdu_index[CC_id]++;
+    TX_req->num_segments = 1;
+    TX_req->segments[0].segment_length = bcch_sdu_length;
+    TX_req->segments[0].segment_data = cc->BCCH_BR_pdu[0].payload;
+    eNB->TX_req[CC_id].sfn_sf = sfn_sf;
+    eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
+    eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
+    eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
+    trace_pdu(DIRECTION_DOWNLINK,
+              &cc->BCCH_BR_pdu[0].payload[0],
+              bcch_sdu_length,
+              0xffff, WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
+
+    if (cc->tdd_Config != NULL) { //TDD
+      LOG_D(MAC,
+            "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (TDD) for CC_id %d SIB1-BR %d bytes\n",
+            frameP, CC_id, bcch_sdu_length);
+    } else {
+      LOG_D(MAC,
+            "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (FDD) for CC_id %d SIB1-BR %d bytes\n",
+            frameP, CC_id, bcch_sdu_length);
     }
+  }
+
 #endif
 }
 
@@ -307,227 +302,221 @@ schedule_SIB1_MBMS(module_id_t module_idP,
 //------------------------------------------------------------------------------
 void
 schedule_SIB1_BR(module_id_t module_idP,
-		 frame_t frameP, sub_frame_t subframeP)
+                 frame_t frameP, sub_frame_t subframeP)
 //------------------------------------------------------------------------------
 {
-    int8_t bcch_sdu_length;
-    int CC_id;
-    eNB_MAC_INST *eNB = RC.mac[module_idP];
-    COMMON_channels_t *cc;
-    uint8_t *vrb_map;
-    int first_rb = -1;
-    int N_RB_DL;
-    nfapi_dl_config_request_pdu_t *dl_config_pdu;
-    nfapi_tx_request_pdu_t *TX_req;
-    nfapi_dl_config_request_body_t *dl_req;
-    int m, i, N_S_NB;
-    int *Sj;
-    int n_NB = 0;
-    int TBS;
-    int k = 0, rvidx;
-    uint16_t sfn_sf = frameP<<4|subframeP;
+  int8_t bcch_sdu_length;
+  int CC_id;
+  eNB_MAC_INST *eNB = RC.mac[module_idP];
+  COMMON_channels_t *cc;
+  uint8_t *vrb_map;
+  int first_rb = -1;
+  int N_RB_DL;
+  nfapi_dl_config_request_pdu_t *dl_config_pdu;
+  nfapi_tx_request_pdu_t *TX_req;
+  nfapi_dl_config_request_body_t *dl_req;
+  int m, i, N_S_NB;
+  int *Sj;
+  int n_NB = 0;
+  int TBS;
+  int k = 0, rvidx;
+  uint16_t sfn_sf = frameP<<4|subframeP;
+
+  for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
+    cc = &eNB->common_channels[CC_id];
+    vrb_map = (void *) &cc->vrb_map;
+    N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
+    dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
+    int foffset = cc->physCellId & 1;
+    int sfoffset = (cc->tdd_Config == NULL) ? 0 : 1;
 
-    for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
+    // Time-domain scheduling
+    if (cc->mib->message.schedulingInfoSIB1_BR_r13 == 0)
+      continue;
+    else
+      switch ((cc->mib->message.schedulingInfoSIB1_BR_r13 - 1) % 3) {
+        case 0:   // repetition 4
+          k = (frameP >> 1) & 3;
+
+          if ((subframeP != (4 + sfoffset))
+              || ((frameP & 1) != foffset))
+            continue;
+
+          break;
+
+        case 1:   // repetition 8
+          k = frameP & 3;
+          AssertFatal(N_RB_DL > 15,
+                      "SIB1-BR repetition 8 not allowed for N_RB_DL= %d\n",
+                      N_RB_DL);
+
+          if ((foffset == 0) && (subframeP != (4 + sfoffset)))
+            continue;
+          else if ((foffset == 1)
+                   && (subframeP != ((9 + sfoffset) % 10)))
+            continue;
+
+          break;
+
+        case 2:   // repetition 16
+          k = ((10 * frameP) + subframeP) & 3;
+          AssertFatal(N_RB_DL > 15,
+                      "SIB1-BR repetition 16 not allowed for N_RB_DL= %d\n",
+                      N_RB_DL);
+
+          if ((sfoffset == 1)
+              && ((subframeP != 0) || (subframeP != 5)))
+            continue;
+          else if ((sfoffset == 0) && (foffset == 0)
+                   && (subframeP != 4) && (subframeP != 9))
+            continue;
+          else if ((sfoffset == 0) && (foffset == 1)
+                   && (subframeP != 0) && (subframeP != 9))
+            continue;
+
+          break;
+      }
+
+    // if we get here we have to schedule SIB1_BR in this frame/subframe
+
+    // keep counter of SIB1_BR repetitions in 8 frame period to choose narrowband on which to transmit
+    if ((frameP & 7) == 0)
+      cc->SIB1_BR_cnt = 0;
+    else
+      cc->SIB1_BR_cnt++;
+
+    // Frequency-domain scheduling
+    switch (N_RB_DL) {
+      case 6:
+      case 15:
+      default:
+        m = 1;
+        n_NB = 0;
+        N_S_NB = 0;
+        Sj = NULL;
+        break;
+
+      case 25:
+        m = 2;
+        N_S_NB = 2;
+        Sj = Sj25;
+        break;
+
+      case 50:
+        m = 2;
+        N_S_NB = 6;
+        Sj = Sj50;
+        break;
+
+      case 75:
+        m = 4;
+        N_S_NB = 10;
+        Sj = Sj75;
+        break;
+
+      case 100:
+        m = 4;
+        N_S_NB = 14;
+        Sj = Sj100;
+        break;
+    }
 
-	cc = &eNB->common_channels[CC_id];
-	vrb_map = (void *) &cc->vrb_map;
-	N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
-	dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
-
-	int foffset = cc->physCellId & 1;
-	int sfoffset = (cc->tdd_Config == NULL) ? 0 : 1;
-
-	// Time-domain scheduling
-	if (cc->mib->message.schedulingInfoSIB1_BR_r13 == 0)
-	    continue;
-	else
-	    switch ((cc->mib->message.schedulingInfoSIB1_BR_r13 - 1) % 3) {
-	    case 0:		// repetition 4
-		k = (frameP >> 1) & 3;
-		if ((subframeP != (4 + sfoffset))
-		    || ((frameP & 1) != foffset))
-		    continue;
-		break;
-	    case 1:		// repetition 8
-		k = frameP & 3;
-		AssertFatal(N_RB_DL > 15,
-			    "SIB1-BR repetition 8 not allowed for N_RB_DL= %d\n",
-			    N_RB_DL);
-		if ((foffset == 0) && (subframeP != (4 + sfoffset)))
-		    continue;
-		else if ((foffset == 1)
-			 && (subframeP != ((9 + sfoffset) % 10)))
-		    continue;
-		break;
-	    case 2:		// repetition 16
-		k = ((10 * frameP) + subframeP) & 3;
-		AssertFatal(N_RB_DL > 15,
-			    "SIB1-BR repetition 16 not allowed for N_RB_DL= %d\n",
-			    N_RB_DL);
-		if ((sfoffset == 1)
-		    && ((subframeP != 0) || (subframeP != 5)))
-		    continue;
-		else if ((sfoffset == 0) && (foffset == 0)
-			 && (subframeP != 4) && (subframeP != 9))
-		    continue;
-		else if ((sfoffset == 0) && (foffset == 1)
-			 && (subframeP != 0) && (subframeP != 9))
-		    continue;
-		break;
-	    }
-	// if we get here we have to schedule SIB1_BR in this frame/subframe
-
-	// keep counter of SIB1_BR repetitions in 8 frame period to choose narrowband on which to transmit
-	if ((frameP & 7) == 0)
-	    cc->SIB1_BR_cnt = 0;
-	else
-	    cc->SIB1_BR_cnt++;
-
-	// Frequency-domain scheduling
-	switch (N_RB_DL) {
-	case 6:
-	case 15:
-	default:
-	    m = 1;
-	    n_NB = 0;
-	    N_S_NB = 0;
-	    Sj = NULL;
-	    break;
-	case 25:
-	    m = 2;
-	    N_S_NB = 2;
-	    Sj = Sj25;
-	    break;
-	case 50:
-	    m = 2;
-	    N_S_NB = 6;
-	    Sj = Sj50;
-	    break;
-	case 75:
-	    m = 4;
-	    N_S_NB = 10;
-	    Sj = Sj75;
-	    break;
-	case 100:
-	    m = 4;
-	    N_S_NB = 14;
-	    Sj = Sj100;
-	    break;
-	}
-	// Note: definition of k above and rvidx from 36.321 section 5.3.1
-	rvidx = (((3 * k) >> 1) + (k & 1)) & 3;
-
-	i = cc->SIB1_BR_cnt & (m - 1);
-
-	n_NB = Sj[((cc->physCellId % N_S_NB) + (i * N_S_NB / m)) % N_S_NB];
-
-
-	bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SIB1_BR, 0xFFFF, 1, &cc->BCCH_BR_pdu[0].payload[0], 0);	// not used in this case
-
-	AssertFatal(cc->mib->message.schedulingInfoSIB1_BR_r13 < 19,
-		    "schedulingInfoSIB1_BR_r13 %d > 18\n",
-		    (int) cc->mib->message.schedulingInfoSIB1_BR_r13);
-
-	AssertFatal(bcch_sdu_length > 0,
-		    "RRC returned 0 bytes for SIB1-BR\n");
-
-	TBS =
-	    SIB1_BR_TBS_table[(cc->mib->message.schedulingInfoSIB1_BR_r13 -
-			       1) / 3] >> 3;
-
-	AssertFatal(bcch_sdu_length <= TBS,
-		    "length returned by RRC %d is not compatible with the TBS %d from MIB\n",
-		    bcch_sdu_length, TBS);
-
-	if ((frameP & 1023) < 200)
-	    LOG_D(MAC,
-		  "[eNB %d] Frame %d Subframe %d: SIB1_BR->DLSCH CC_id %d, Received %d bytes, scheduling on NB %d (i %d,m %d,N_S_NB %d)  rvidx %d\n",
-		  module_idP, frameP, subframeP, CC_id, bcch_sdu_length,
-		  n_NB, i, m, N_S_NB, rvidx);
-
-	// allocate all 6 PRBs in narrowband for SIB1_BR
-
-	first_rb = narrowband_to_first_rb(cc, n_NB);
-
-	vrb_map[first_rb] = 1;
-	vrb_map[first_rb + 1] = 1;
-	vrb_map[first_rb + 2] = 1;
-	vrb_map[first_rb + 3] = 1;
-	vrb_map[first_rb + 4] = 1;
-	vrb_map[first_rb + 5] = 1;
-
-	dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
-	memset((void *) dl_config_pdu, 0,
-	       sizeof(nfapi_dl_config_request_pdu_t));
-	dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
-	dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
-        dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = TBS;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = eNB->pdu_index[CC_id];
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = 0xFFFF;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2;	// format 1A/1B/1D
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0;	// localized
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 6);
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2;	//QPSK
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = rvidx;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1;	// first block
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = (cc->p_eNB == 1) ? 0 : 1;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1;
-	//  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4;	// 0 dB
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = 0;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth);	// ignored
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB == 1) ? 1 : 2;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
-	// Rel10 fields
-        dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = 3;
-	// Rel13 fields
-        dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1;	// CEModeA UE
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 0;	// SIB1-BR
-	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = 0xFFFF;	// absolute SFx
-
-	//  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ; 
-	dl_req->number_pdu++;
-        dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
-
-	// Program TX Request
-	TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
-	TX_req->pdu_length = bcch_sdu_length;
-	TX_req->pdu_index = eNB->pdu_index[CC_id]++;
-	TX_req->num_segments = 1;
-	TX_req->segments[0].segment_length = bcch_sdu_length;
-	TX_req->segments[0].segment_data = cc->BCCH_BR_pdu[0].payload;
-        eNB->TX_req[CC_id].sfn_sf = sfn_sf;
-        eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
-        eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
-        eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
-
-	if (opt_enabled == 1) {
-	    trace_pdu(DIRECTION_DOWNLINK,
-		      &cc->BCCH_BR_pdu[0].payload[0],
-		      bcch_sdu_length,
-		      0xffff, WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
-	    LOG_D(OPT,
-		  "[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-		  module_idP, frameP, CC_id, 0xffff, bcch_sdu_length);
-	}
-	if (cc->tdd_Config != NULL) {	//TDD
-	    LOG_D(MAC,
-		  "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (TDD) for CC_id %d SIB1-BR %d bytes\n",
-		  frameP, CC_id, bcch_sdu_length);
-	} else {
-	    LOG_D(MAC,
-		  "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (FDD) for CC_id %d SIB1-BR %d bytes\n",
-		  frameP, CC_id, bcch_sdu_length);
-	}
+    // Note: definition of k above and rvidx from 36.321 section 5.3.1
+    rvidx = (((3 * k) >> 1) + (k & 1)) & 3;
+    i = cc->SIB1_BR_cnt & (m - 1);
+    n_NB = Sj[((cc->physCellId % N_S_NB) + (i * N_S_NB / m)) % N_S_NB];
+    bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SIB1_BR, 0xFFFF, 1, &cc->BCCH_BR_pdu[0].payload[0], 0);  // not used in this case
+    AssertFatal(cc->mib->message.schedulingInfoSIB1_BR_r13 < 19,
+                "schedulingInfoSIB1_BR_r13 %d > 18\n",
+                (int) cc->mib->message.schedulingInfoSIB1_BR_r13);
+    AssertFatal(bcch_sdu_length > 0,
+                "RRC returned 0 bytes for SIB1-BR\n");
+    TBS =
+      SIB1_BR_TBS_table[(cc->mib->message.schedulingInfoSIB1_BR_r13 -
+                         1) / 3] >> 3;
+    AssertFatal(bcch_sdu_length <= TBS,
+                "length returned by RRC %d is not compatible with the TBS %d from MIB\n",
+                bcch_sdu_length, TBS);
+
+    if ((frameP & 1023) < 200)
+      LOG_D(MAC,
+            "[eNB %d] Frame %d Subframe %d: SIB1_BR->DLSCH CC_id %d, Received %d bytes, scheduling on NB %d (i %d,m %d,N_S_NB %d)  rvidx %d\n",
+            module_idP, frameP, subframeP, CC_id, bcch_sdu_length,
+            n_NB, i, m, N_S_NB, rvidx);
+
+    // allocate all 6 PRBs in narrowband for SIB1_BR
+    first_rb = narrowband_to_first_rb(cc, n_NB);
+    vrb_map[first_rb] = 1;
+    vrb_map[first_rb + 1] = 1;
+    vrb_map[first_rb + 2] = 1;
+    vrb_map[first_rb + 3] = 1;
+    vrb_map[first_rb + 4] = 1;
+    vrb_map[first_rb + 5] = 1;
+    dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
+    memset((void *) dl_config_pdu, 0,
+           sizeof(nfapi_dl_config_request_pdu_t));
+    dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
+    dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length = TBS;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index = eNB->pdu_index[CC_id];
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti = 0xFFFF;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type = 2; // format 1A/1B/1D
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 6);
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation = 2; //QPSK
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version = rvidx;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks = 1; // first block
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag = 0;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme = (cc->p_eNB == 1) ? 0 : 1;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers = 1;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands = 1;
+    //  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity = 1;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa = 4; // 0 dB
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index = 0;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap = 0;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb = get_subbandsize(cc->mib->message.dl_Bandwidth);  // ignored
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode = (cc->p_eNB == 1) ? 1 : 2;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband = 1;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector = 1;
+    // Rel10 fields
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = 3;
+    // Rel13 fields
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 0;  // SIB1-BR
+    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = 0xFFFF; // absolute SFx
+    //  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ;
+    dl_req->number_pdu++;
+    dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+    // Program TX Request
+    TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
+    TX_req->pdu_length = bcch_sdu_length;
+    TX_req->pdu_index = eNB->pdu_index[CC_id]++;
+    TX_req->num_segments = 1;
+    TX_req->segments[0].segment_length = bcch_sdu_length;
+    TX_req->segments[0].segment_data = cc->BCCH_BR_pdu[0].payload;
+    eNB->TX_req[CC_id].sfn_sf = sfn_sf;
+    eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
+    eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
+    eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
+    trace_pdu(DIRECTION_DOWNLINK,
+              &cc->BCCH_BR_pdu[0].payload[0],
+              bcch_sdu_length,
+              0xffff, WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
+
+    if (cc->tdd_Config != NULL) { //TDD
+      LOG_D(MAC,
+            "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (TDD) for CC_id %d SIB1-BR %d bytes\n",
+            frameP, CC_id, bcch_sdu_length);
+    } else {
+      LOG_D(MAC,
+            "[eNB] Frame %d : Scheduling BCCH-BR 0->DLSCH (FDD) for CC_id %d SIB1-BR %d bytes\n",
+            frameP, CC_id, bcch_sdu_length);
     }
+  }
 }
 
 int si_WindowLength_BR_r13tab[LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_spare] = { 20, 40, 60, 80, 120, 160, 200 };
@@ -538,7 +527,7 @@ int si_WindowLength_MBMS_r14tab[8] = { 1, 2, 5, 10, 15, 20, 40, 80 };
 //------------------------------------------------------------------------------
 void
 schedule_SI_BR(module_id_t module_idP, frame_t frameP,
-	       sub_frame_t subframeP)
+               sub_frame_t subframeP)
 //------------------------------------------------------------------------------
 {
   int8_t                                  bcch_sdu_length;
@@ -555,55 +544,48 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
   int                                     rvidx;
   int                                     absSF = (frameP*10)+subframeP;
 
-
   for (CC_id=0; CC_id<MAX_NUM_CCs; CC_id++) {
-
     cc              = &eNB->common_channels[CC_id];
-    vrb_map         = (void*)&cc->vrb_map;
+    vrb_map         = (void *)&cc->vrb_map;
     N_RB_DL         = to_prb(cc->mib->message.dl_Bandwidth);
     dl_req          = &eNB->DL_req[CC_id].dl_config_request_body;
 
     // Time-domain scheduling
     if (cc->mib->message.schedulingInfoSIB1_BR_r13==0) continue;
     else  {
-
-
       AssertFatal(cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13!=NULL,
-		  "sib_v13ext->bandwidthReducedAccessRelatedInfo_r13 is null\n");
-
+                  "sib_v13ext->bandwidthReducedAccessRelatedInfo_r13 is null\n");
       LTE_SchedulingInfoList_BR_r13_t *schedulingInfoList_BR_r13 = cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->schedulingInfoList_BR_r13;
       AssertFatal(schedulingInfoList_BR_r13!=NULL,
-		  "sib_v13ext->schedulingInfoList_BR_r13 is null\n");
-
+                  "sib_v13ext->schedulingInfoList_BR_r13 is null\n");
       LTE_SchedulingInfoList_t *schedulingInfoList = cc->schedulingInfoList;
       AssertFatal(schedulingInfoList_BR_r13->list.count==schedulingInfoList->list.count,
-		  "schedulingInfolist_BR.r13->list.count %d != schedulingInfoList.list.count %d\n",
-		  schedulingInfoList_BR_r13->list.count,schedulingInfoList->list.count);
-
-      AssertFatal(cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13<=LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_ms200,
-		  "si_WindowLength_BR_r13 %d > %d\n",
-		  (int)cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13,
-		  LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_ms200);
-
+                  "schedulingInfolist_BR.r13->list.count %d != schedulingInfoList.list.count %d\n",
+                  schedulingInfoList_BR_r13->list.count,schedulingInfoList->list.count);
+      AssertFatal(cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13<=
+                  LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_ms200,
+                  "si_WindowLength_BR_r13 %d > %d\n",
+                  (int)cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13,
+                  LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_WindowLength_BR_r13_ms200);
       // check that SI frequency-hopping is disabled
-      AssertFatal(cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_HoppingConfigCommon_r13==LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_HoppingConfigCommon_r13_off,
-		  "Deactivate SI_HoppingConfigCommon_r13 in configuration file, not supported for now\n");
+      AssertFatal(cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_HoppingConfigCommon_r13==
+                  LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_HoppingConfigCommon_r13_off,
+                  "Deactivate SI_HoppingConfigCommon_r13 in configuration file, not supported for now\n");
       long si_WindowLength_BR_r13   = si_WindowLength_BR_r13tab[cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_WindowLength_BR_r13];
-
       long si_RepetitionPattern_r13 = cc->sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->si_RepetitionPattern_r13;
       AssertFatal(si_RepetitionPattern_r13<=LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_RepetitionPattern_r13_every8thRF,
-		  "si_RepetitionPattern_r13 %d > %d\n",
-		  (int)si_RepetitionPattern_r13,
-		  LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_RepetitionPattern_r13_every8thRF);
+                  "si_RepetitionPattern_r13 %d > %d\n",
+                  (int)si_RepetitionPattern_r13,
+                  LTE_SystemInformationBlockType1_v1310_IEs__bandwidthReducedAccessRelatedInfo_r13__si_RepetitionPattern_r13_every8thRF);
       // cycle through SIB list
 
-      for (i=0;i<schedulingInfoList_BR_r13->list.count;i++) {
+      for (i=0; i<schedulingInfoList_BR_r13->list.count; i++) {
         long si_Periodicity = schedulingInfoList->list.array[i]->si_Periodicity;
         long si_Narrowband_r13 = schedulingInfoList_BR_r13->list.array[i]->si_Narrowband_r13;
         long si_TBS_r13 = si_TBS_r13tab[schedulingInfoList_BR_r13->list.array[i]->si_TBS_r13];
-
         // check if the SI is to be scheduled now
         int period_in_sf;
+
         if ((si_Periodicity >= 0) && (si_Periodicity < 25)) {
           // 2^i * 80 subframes, note: si_Periodicity is 2^i * 80ms
           period_in_sf = 80 << ((int) si_Periodicity);
@@ -612,19 +594,17 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
         } else if (si_Periodicity > 24) {
           period_in_sf = 80 << 24;
         }
+
         int sf_mod_period = absSF % period_in_sf;
         int k = sf_mod_period & 3;
         // Note: definition of k and rvidx from 36.321 section 5.3.1
         rvidx = (((3 * k) >> 1) + (k & 1)) & 3;
 
         if ((sf_mod_period < si_WindowLength_BR_r13)
-            && ((frameP & (((1 << si_RepetitionPattern_r13) - 1))) == 0)) {	// this SIB is to be scheduled
-
-          bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SI_BR + i, 0xFFFF, 1, &cc->BCCH_BR_pdu[i + 1].payload[0], 0);	// not used in this case
-
-
+            && ((frameP & (((1 << si_RepetitionPattern_r13) - 1))) == 0)) { // this SIB is to be scheduled
+          bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SI_BR + i, 0xFFFF, 1, &cc->BCCH_BR_pdu[i + 1].payload[0], 0);  // not used in this case
           AssertFatal(bcch_sdu_length > 0,
-          "RRC returned 0 bytes for SI-BR %d\n", i);
+                      "RRC returned 0 bytes for SI-BR %d\n", i);
 
           if (bcch_sdu_length > 0) {
             AssertFatal(bcch_sdu_length <= (si_TBS_r13 >> 3),
@@ -647,23 +627,20 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
 
             if ((frameP&1023) < 200)
               LOG_D(MAC,"[eNB %d] Frame %d Subframe %d: SI_BR->DLSCH CC_id %d, Narrowband %d rvidx %d (sf_mod_period %d : si_WindowLength_BR_r13 %d : si_RepetitionPattern_r13 %d) bcch_sdu_length %d\n",
-                   module_idP,frameP,subframeP,CC_id,(int)si_Narrowband_r13-1,rvidx,
-                   sf_mod_period,(int)si_WindowLength_BR_r13,(int)si_RepetitionPattern_r13,
-                   bcch_sdu_length);
-
+                    module_idP,frameP,subframeP,CC_id,(int)si_Narrowband_r13-1,rvidx,
+                    sf_mod_period,(int)si_WindowLength_BR_r13,(int)si_RepetitionPattern_r13,
+                    bcch_sdu_length);
 
             //// Rel10 fields (for PDSCH starting symbol)
             //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start = cc[CC_id].sib1_v13ext->bandwidthReducedAccessRelatedInfo_r13->startSymbolBR_r13;
             //// Rel13 fields
             //                  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
-            //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1;	// CEModeA UE
-            //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 1;	// SI-BR
+            //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type = 1; // CEModeA UE
+            //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type = 1;  // SI-BR
             //dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io = absSF - sf_mod_period;
-
             ////  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ;
             //dl_req->number_pdu++;
             //                  dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
-
             dl_config_pdu                                                                  = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
             memset((void *) dl_config_pdu, 0, sizeof(nfapi_dl_config_request_pdu_t));
             dl_config_pdu->pdu_type                                                        = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
@@ -681,7 +658,7 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme                    = (cc->p_eNB==1 ) ? 0 : 1;
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers                       = 1;
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands                     = 1;
-            //	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
+            //  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity                   = 1;
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa                                     = 4; // 0 dB
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index               = 0;
@@ -696,10 +673,8 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type                               = 1; // CEModeA UE
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type                    = 1; // SI-BR
             dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io            = absSF - sf_mod_period;
-
-            //	dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ;
+            //  dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ;
             dl_req->number_pdu++;
-
             // Program TX Request
             TX_req                                                                = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
             TX_req->pdu_length                                                    = bcch_sdu_length;
@@ -708,30 +683,27 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
             TX_req->segments[0].segment_length                                    = bcch_sdu_length;
             TX_req->segments[0].segment_data                                      = cc->BCCH_BR_pdu[i+1].payload;
             eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
-
-            if (opt_enabled == 1) {
-                trace_pdu(DIRECTION_DOWNLINK,
-                    &cc->BCCH_BR_pdu[i + 1].payload[0],
-                    bcch_sdu_length,
-                    0xffff,
-                    WS_SI_RNTI,
-                    0xffff, eNB->frame, eNB->subframe, 0,
-                    0);
-                LOG_D(OPT, "[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-                      module_idP, frameP, CC_id, 0xffff, bcch_sdu_length);
-            }
-            if (cc->tdd_Config != NULL) {	//TDD
-                LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH-BR %d->DLSCH (TDD) for CC_id %d SI-BR %d bytes\n",
-                      frameP, i, CC_id, bcch_sdu_length);
+            trace_pdu(DIRECTION_DOWNLINK,
+                      &cc->BCCH_BR_pdu[i + 1].payload[0],
+                      bcch_sdu_length,
+                      0xffff,
+                      WS_SI_RNTI,
+                      0xffff, eNB->frame, eNB->subframe, 0,
+                      0);
+
+            if (cc->tdd_Config != NULL) { //TDD
+              LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH-BR %d->DLSCH (TDD) for CC_id %d SI-BR %d bytes\n",
+                    frameP, i, CC_id, bcch_sdu_length);
             } else {
-                LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH-BR %d->DLSCH (FDD) for CC_id %d SI-BR %d bytes\n",
-                      frameP, i, CC_id, bcch_sdu_length);
+              LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH-BR %d->DLSCH (FDD) for CC_id %d SI-BR %d bytes\n",
+                    frameP, i, CC_id, bcch_sdu_length);
             }
           }
-        }		// scheduling in current frame/subframe
-	    }			//for SI List
-    }			// eMTC is activated
-  }				// CC_id
+        }   // scheduling in current frame/subframe
+      }     //for SI List
+    }     // eMTC is activated
+  }       // CC_id
+
   return;
 }
 
@@ -739,300 +711,274 @@ schedule_SI_BR(module_id_t module_idP, frame_t frameP,
 //------------------------------------------------------------------------------
 void
 schedule_SI_MBMS(module_id_t module_idP, frame_t frameP,
-	       sub_frame_t subframeP)
+                 sub_frame_t subframeP)
 //------------------------------------------------------------------------------
 {
-    int8_t bcch_sdu_length;
-    int mcs = -1;
-    int CC_id;
-    eNB_MAC_INST *eNB = RC.mac[module_idP];
-    COMMON_channels_t *cc;
-    uint8_t *vrb_map;
-    int first_rb = -1;
-    int N_RB_DL;
-    nfapi_dl_config_request_t      *dl_config_request;
-    nfapi_dl_config_request_pdu_t  *dl_config_pdu;
-    nfapi_tx_request_pdu_t *TX_req;
-    nfapi_dl_config_request_body_t *dl_req;
-    uint16_t sfn_sf = frameP << 4 | subframeP;
-
-    start_meas(&eNB->schedule_si_mbms);
-
-    // Only schedule LTE System Information in subframe 0
-    if (subframeP == 0) {
-
-	for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
-
-	    cc = &eNB->common_channels[CC_id];
-	    vrb_map = (void *) &cc->vrb_map;
-	    N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
-            dl_config_request = &eNB->DL_req[CC_id];
-	    dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
-
-
-	    bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SI_MBMS,0xFFFF, 1, &cc->BCCH_MBMS_pdu.payload[0], 0);	// not used in this case
-
-	    if (bcch_sdu_length > 0) {
-		LOG_D(MAC, "[eNB %d] Frame %d : BCCH-MBMS->DLSCH CC_id %d, Received %d bytes \n", module_idP, frameP, CC_id, bcch_sdu_length);
-
-		// Allocate 4 PRBs in a random location
-		/*
-		   while (1) {
-		   first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL-4));
-		   if ((vrb_map[first_rb] != 1) && 
-		   (vrb_map[first_rb+1] != 1) && 
-		   (vrb_map[first_rb+2] != 1) && 
-		   (vrb_map[first_rb+3] != 1))
-		   break;
-		   }
-		 */
-		switch (N_RB_DL) {
-		case 6:
-		    first_rb = 0;
-		    break;
-		case 15:
-		    first_rb = 6;
-		    break;
-		case 25:
-		    first_rb = 11;
-		    break;
-		case 50:
-		    first_rb = 23;
-		    break;
-		case 100:
-		    first_rb = 48;
-		    break;
-		}
-
-		vrb_map[first_rb] = 1;
-		vrb_map[first_rb + 1] = 1;
-		vrb_map[first_rb + 2] = 1;
-		vrb_map[first_rb + 3] = 1;
-
-		// Get MCS for length of SI, 3 PRBs
-		if (bcch_sdu_length <= 7) {
-		    mcs = 0;
-		} else if (bcch_sdu_length <= 11) {
-		    mcs = 1;
-		} else if (bcch_sdu_length <= 18) {
-		    mcs = 2;
-		} else if (bcch_sdu_length <= 22) {
-		    mcs = 3;
-		} else if (bcch_sdu_length <= 26) {
-		    mcs = 4;
-		} else if (bcch_sdu_length <= 28) {
-		    mcs = 5;
-		} else if (bcch_sdu_length <= 32) {
-		    mcs = 6;
-		} else if (bcch_sdu_length <= 41) {
-		    mcs = 7;
-		} else if (bcch_sdu_length <= 49) {
-		    mcs = 8;
-		}
-
-
-		dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
-		memset((void *) dl_config_pdu, 0,
-		       sizeof(nfapi_dl_config_request_pdu_t));
-		dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE;
-		dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dci_dl_pdu));
-                dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag                = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format            = NFAPI_DL_DCI_FORMAT_1A;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level     = 4;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti                  = 0xFFFF;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type             = 2;	// S-RNTI : see Table 4-10 from SCF082 - nFAPI specifications
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power    = 6000;	// equal to RS power
-
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process          = 0;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc                   = 1;	// no TPC
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1  = 0;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1                 = mcs;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1  = 0;
-
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 4);
-                dl_config_request->sfn_sf = sfn_sf;
-
-		if (!CCE_allocation_infeasible(module_idP, CC_id, 0, subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, SI_RNTI)) {
-		    LOG_D(MAC, "Frame %d: Subframe %d : Adding common DCI for S_RNTI MBMS\n", frameP, subframeP);
-		    dl_req->number_dci++;
-		    dl_req->number_pdu++;
-		    dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
-		    memset((void *) dl_config_pdu, 0,
-			   sizeof(nfapi_dl_config_request_pdu_t));
-		    dl_config_pdu->pdu_type                                                        = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
-		    dl_config_pdu->pdu_size                                                        = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index                              = eNB->pdu_index[CC_id];
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag                                 = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length                                 = bcch_sdu_length;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti                                   = 0xFFFF;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type               = 2;	// format 1A/1B/1D
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0;	// localized
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding                  = getRIV(N_RB_DL, first_rb, 4);
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation                             = 2;	//QPSK
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version                     = 0;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks                       = 1;	// first block
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag  = 0; dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme                    = (cc->p_eNB == 1) ? 0 : 1;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers                       = 1;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands                     = 1;
-		    //    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity                   = 1;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa                                     = 4;	// 0 dB
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index               = 0;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap                                   = 0;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb                                   = get_subbandsize(cc->mib->message.dl_Bandwidth);	// ignored
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode                      = (cc->p_eNB == 1) ? 1 : 2;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband                 = 1;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector                          = 1;
-		    //    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ; 
-		    dl_req->number_pdu++;
-
-                    // Rel10 fields
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start                           = 3;
-                    // Rel13 fields
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type                               = 0;   // regular UE
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type                    = 2;        // not BR
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io            = 0xFFFF;   // absolute SF
-
-                    dl_config_request->header.message_id                                           = NFAPI_DL_CONFIG_REQUEST;
-                    dl_config_request->sfn_sf                                                      = sfn_sf;
-
-		    // Program TX Request
-		    TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
-		    TX_req->pdu_length = bcch_sdu_length;
-		    TX_req->pdu_index = eNB->pdu_index[CC_id]++;
-		    TX_req->num_segments = 1;
-		    TX_req->segments[0].segment_length = bcch_sdu_length;
-		    TX_req->segments[0].segment_data = cc->BCCH_MBMS_pdu.payload;
-		    eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
-                    eNB->TX_req[CC_id].sfn_sf = sfn_sf;
-                    eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
-                    eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
-
-		} else {
-		    LOG_E(MAC,
-			  "[eNB %d] CCid %d Frame %d, subframe %d : Cannot add DCI 1A for SI MBMS\n",
-			  module_idP, CC_id, frameP, subframeP);
-		}
-
-                T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(0xffff),
-                  T_INT(frameP), T_INT(subframeP), T_INT(0), T_BUFFER(cc->BCCH_MBMS_pdu.payload, bcch_sdu_length));
-
-		if (opt_enabled == 1) {
-		    trace_pdu(DIRECTION_DOWNLINK,
-			      &cc->BCCH_MBMS_pdu.payload[0],
-			      bcch_sdu_length,
-			      0xffff,
-			     WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
-		    LOG_D(OPT,
-			  "[eNB %d][BCH-MBMS] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-			  module_idP, frameP, CC_id, 0xffff,
-			  bcch_sdu_length);
-		}
-		if (0/*cc->tdd_Config != NULL*/) {	//TDD not for FeMBMS
-		    LOG_D(MAC,
-			  "[eNB] Frame %d : Scheduling BCCH->DLSCH (TDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n",
-			  frameP, CC_id, bcch_sdu_length, mcs);
-		} else {
-		    LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH-MBMS->DLSCH (FDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n", frameP, CC_id, bcch_sdu_length, mcs);
-		}
-
-
-		eNB->eNB_stats[CC_id].total_num_bcch_pdu += 1;
-		eNB->eNB_stats[CC_id].bcch_buffer = bcch_sdu_length;
-		eNB->eNB_stats[CC_id].total_bcch_buffer += bcch_sdu_length;
-		eNB->eNB_stats[CC_id].bcch_mcs = mcs;
-//printf("SI %d.%d\n", frameP, subframeP);/////////////////////////////////////////******************************
-	    } else {
-
-		//LOG_D(MAC,"[eNB %d] Frame %d : BCCH not active \n",Mod_id,frame);
-	    }
-	}
+  int8_t bcch_sdu_length;
+  int mcs = -1;
+  int CC_id;
+  eNB_MAC_INST *eNB = RC.mac[module_idP];
+  COMMON_channels_t *cc;
+  uint8_t *vrb_map;
+  int first_rb = -1;
+  int N_RB_DL;
+  nfapi_dl_config_request_t      *dl_config_request;
+  nfapi_dl_config_request_pdu_t  *dl_config_pdu;
+  nfapi_tx_request_pdu_t *TX_req;
+  nfapi_dl_config_request_body_t *dl_req;
+  uint16_t sfn_sf = frameP << 4 | subframeP;
+  start_meas(&eNB->schedule_si_mbms);
+
+  // Only schedule LTE System Information in subframe 0
+  if (subframeP == 0) {
+    for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
+      cc = &eNB->common_channels[CC_id];
+      vrb_map = (void *) &cc->vrb_map;
+      N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
+      dl_config_request = &eNB->DL_req[CC_id];
+      dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
+      bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH_SI_MBMS,0xFFFF, 1, &cc->BCCH_MBMS_pdu.payload[0], 0);  // not used in this case
+
+      if (bcch_sdu_length > 0) {
+        LOG_D(MAC, "[eNB %d] Frame %d : BCCH-MBMS->DLSCH CC_id %d, Received %d bytes \n", module_idP, frameP, CC_id, bcch_sdu_length);
+
+        // Allocate 4 PRBs in a random location
+        /*
+           while (1) {
+           first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL-4));
+           if ((vrb_map[first_rb] != 1) &&
+           (vrb_map[first_rb+1] != 1) &&
+           (vrb_map[first_rb+2] != 1) &&
+           (vrb_map[first_rb+3] != 1))
+           break;
+           }
+         */
+        switch (N_RB_DL) {
+          case 6:
+            first_rb = 0;
+            break;
+
+          case 15:
+            first_rb = 6;
+            break;
+
+          case 25:
+            first_rb = 11;
+            break;
+
+          case 50:
+            first_rb = 23;
+            break;
+
+          case 100:
+            first_rb = 48;
+            break;
+        }
+
+        vrb_map[first_rb] = 1;
+        vrb_map[first_rb + 1] = 1;
+        vrb_map[first_rb + 2] = 1;
+        vrb_map[first_rb + 3] = 1;
+
+        // Get MCS for length of SI, 3 PRBs
+        if (bcch_sdu_length <= 7) {
+          mcs = 0;
+        } else if (bcch_sdu_length <= 11) {
+          mcs = 1;
+        } else if (bcch_sdu_length <= 18) {
+          mcs = 2;
+        } else if (bcch_sdu_length <= 22) {
+          mcs = 3;
+        } else if (bcch_sdu_length <= 26) {
+          mcs = 4;
+        } else if (bcch_sdu_length <= 28) {
+          mcs = 5;
+        } else if (bcch_sdu_length <= 32) {
+          mcs = 6;
+        } else if (bcch_sdu_length <= 41) {
+          mcs = 7;
+        } else if (bcch_sdu_length <= 49) {
+          mcs = 8;
+        }
+
+        dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
+        memset((void *) dl_config_pdu, 0,
+               sizeof(nfapi_dl_config_request_pdu_t));
+        dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE;
+        dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dci_dl_pdu));
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag                = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format            = NFAPI_DL_DCI_FORMAT_1A;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level     = 4;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti                  = 0xFFFF;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type             = 2;  // S-RNTI : see Table 4-10 from SCF082 - nFAPI specifications
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power    = 6000; // equal to RS power
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process          = 0;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc                   = 1;  // no TPC
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1  = 0;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1                 = mcs;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1  = 0;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 4);
+        dl_config_request->sfn_sf = sfn_sf;
+
+        if (!CCE_allocation_infeasible(module_idP, CC_id, 0, subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, SI_RNTI)) {
+          LOG_D(MAC, "Frame %d: Subframe %d : Adding common DCI for S_RNTI MBMS\n", frameP, subframeP);
+          dl_req->number_dci++;
+          dl_req->number_pdu++;
+          dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
+          memset((void *) dl_config_pdu, 0,
+                 sizeof(nfapi_dl_config_request_pdu_t));
+          dl_config_pdu->pdu_type                                                        = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
+          dl_config_pdu->pdu_size                                                        = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index                              = eNB->pdu_index[CC_id];
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag                                 = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length                                 = bcch_sdu_length;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti                                   = 0xFFFF;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type               = 2; // format 1A/1B/1D
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding                  = getRIV(N_RB_DL, first_rb, 4);
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation                             = 2; //QPSK
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version                     = 0;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks                       = 1; // first block
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag  = 0;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme                    = (cc->p_eNB == 1) ? 0 : 1;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers                       = 1;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands                     = 1;
+          //    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity                   = 1;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa                                     = 4; // 0 dB
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index               = 0;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap                                   = 0;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb                                   = get_subbandsize(cc->mib->message.dl_Bandwidth);  // ignored
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode                      = (cc->p_eNB == 1) ? 1 : 2;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband                 = 1;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector                          = 1;
+          //    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ;
+          dl_req->number_pdu++;
+          // Rel10 fields
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start                           = 3;
+          // Rel13 fields
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type                               = 0;   // regular UE
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type                    = 2;        // not BR
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io            = 0xFFFF;   // absolute SF
+          dl_config_request->header.message_id                                           = NFAPI_DL_CONFIG_REQUEST;
+          dl_config_request->sfn_sf                                                      = sfn_sf;
+          // Program TX Request
+          TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
+          TX_req->pdu_length = bcch_sdu_length;
+          TX_req->pdu_index = eNB->pdu_index[CC_id]++;
+          TX_req->num_segments = 1;
+          TX_req->segments[0].segment_length = bcch_sdu_length;
+          TX_req->segments[0].segment_data = cc->BCCH_MBMS_pdu.payload;
+          eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
+          eNB->TX_req[CC_id].sfn_sf = sfn_sf;
+          eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
+          eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
+        } else {
+          LOG_E(MAC,
+                "[eNB %d] CCid %d Frame %d, subframe %d : Cannot add DCI 1A for SI MBMS\n",
+                module_idP, CC_id, frameP, subframeP);
+        }
+
+        T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(0xffff),
+          T_INT(frameP), T_INT(subframeP), T_INT(0), T_BUFFER(cc->BCCH_MBMS_pdu.payload, bcch_sdu_length));
+        trace_pdu(DIRECTION_DOWNLINK,
+                  &cc->BCCH_MBMS_pdu.payload[0],
+                  bcch_sdu_length,
+                  0xffff,
+                  WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
+
+        if (0/*cc->tdd_Config != NULL*/) {  //TDD not for FeMBMS
+          LOG_D(MAC,
+                "[eNB] Frame %d : Scheduling BCCH->DLSCH (TDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n",
+                frameP, CC_id, bcch_sdu_length, mcs);
+        } else {
+          LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH-MBMS->DLSCH (FDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n", frameP, CC_id, bcch_sdu_length, mcs);
+        }
+
+        eNB->eNB_stats[CC_id].total_num_bcch_pdu += 1;
+        eNB->eNB_stats[CC_id].bcch_buffer = bcch_sdu_length;
+        eNB->eNB_stats[CC_id].total_bcch_buffer += bcch_sdu_length;
+        eNB->eNB_stats[CC_id].bcch_mcs = mcs;
+        //printf("SI %d.%d\n", frameP, subframeP);/////////////////////////////////////////******************************
+      } else {
+        //LOG_D(MAC,"[eNB %d] Frame %d : BCCH not active \n",Mod_id,frame);
+      }
     }
+  }
+
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-    //schedule_SIB1_BR(module_idP, frameP, subframeP);
-    //schedule_SI_BR(module_idP, frameP, subframeP);
+  //schedule_SIB1_BR(module_idP, frameP, subframeP);
+  //schedule_SI_BR(module_idP, frameP, subframeP);
 #endif
-
   stop_meas(&eNB->schedule_si_mbms);
-
-
 }
 #endif
 
 void
-schedule_mib(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
-{
-    eNB_MAC_INST *eNB = RC.mac[module_idP];
-    COMMON_channels_t *cc;
-    nfapi_dl_config_request_pdu_t *dl_config_pdu;
-    nfapi_tx_request_pdu_t *TX_req;
-    int mib_sdu_length;
-    int CC_id;
-    nfapi_dl_config_request_t *dl_config_request;
-    nfapi_dl_config_request_body_t *dl_req;
-    uint16_t sfn_sf = frameP << 4 | subframeP;
-
-    AssertFatal(subframeP == 0, "Subframe must be 0\n");
-    AssertFatal((frameP & 3) == 0, "Frame must be a multiple of 4\n");
-
-    for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
-
-	dl_config_request = &eNB->DL_req[CC_id];
-	dl_req = &dl_config_request->dl_config_request_body;
-	cc = &eNB->common_channels[CC_id];
-
-	mib_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MIBCH, 0xFFFF, 1, &cc->MIB_pdu.payload[0], 0);	// not used in this case
-
-	LOG_D(MAC, "Frame %d, subframe %d: BCH PDU length %d\n", frameP, subframeP, mib_sdu_length);
-
-	if (mib_sdu_length > 0) {
-
-	    LOG_D(MAC, "Frame %d, subframe %d: Adding BCH PDU in position %d (length %d)\n", frameP, subframeP, dl_req->number_pdu, mib_sdu_length);
-
-	    if ((frameP & 1023) < 40)
+schedule_mib(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP) {
+  eNB_MAC_INST *eNB = RC.mac[module_idP];
+  COMMON_channels_t *cc;
+  nfapi_dl_config_request_pdu_t *dl_config_pdu;
+  nfapi_tx_request_pdu_t *TX_req;
+  int mib_sdu_length;
+  int CC_id;
+  nfapi_dl_config_request_t *dl_config_request;
+  nfapi_dl_config_request_body_t *dl_req;
+  uint16_t sfn_sf = frameP << 4 | subframeP;
+  AssertFatal(subframeP == 0, "Subframe must be 0\n");
+  AssertFatal((frameP & 3) == 0, "Frame must be a multiple of 4\n");
+
+  for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
+    dl_config_request = &eNB->DL_req[CC_id];
+    dl_req = &dl_config_request->dl_config_request_body;
+    cc = &eNB->common_channels[CC_id];
+    mib_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, MIBCH, 0xFFFF, 1, &cc->MIB_pdu.payload[0], 0); // not used in this case
+    LOG_D(MAC, "Frame %d, subframe %d: BCH PDU length %d\n", frameP, subframeP, mib_sdu_length);
+
+    if (mib_sdu_length > 0) {
+      LOG_D(MAC, "Frame %d, subframe %d: Adding BCH PDU in position %d (length %d)\n", frameP, subframeP, dl_req->number_pdu, mib_sdu_length);
+
+      if ((frameP & 1023) < 40)
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-		LOG_D(MAC,
-		      "[eNB %d] Frame %d : MIB->BCH  CC_id %d, Received %d bytes (cc->mib->message.schedulingInfoSIB1_BR_r13 %d)\n",
-		      module_idP, frameP, CC_id, mib_sdu_length,
-		      (int) cc->mib->message.schedulingInfoSIB1_BR_r13);
+        LOG_D(MAC,
+              "[eNB %d] Frame %d : MIB->BCH  CC_id %d, Received %d bytes (cc->mib->message.schedulingInfoSIB1_BR_r13 %d)\n",
+              module_idP, frameP, CC_id, mib_sdu_length,
+              (int) cc->mib->message.schedulingInfoSIB1_BR_r13);
+
 #else
-		LOG_D(MAC,
-		      "[eNB %d] Frame %d : MIB->BCH  CC_id %d, Received %d bytes\n",
-		      module_idP, frameP, CC_id, mib_sdu_length);
+        LOG_D(MAC,
+              "[eNB %d] Frame %d : MIB->BCH  CC_id %d, Received %d bytes\n",
+              module_idP, frameP, CC_id, mib_sdu_length);
 #endif
-
-	    dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
-	    memset((void *) dl_config_pdu, 0,
-		   sizeof(nfapi_dl_config_request_pdu_t));
-	    dl_config_pdu->pdu_type                                = NFAPI_DL_CONFIG_BCH_PDU_TYPE, dl_config_pdu->pdu_size =
-		2 + sizeof(nfapi_dl_config_bch_pdu);
-            dl_config_pdu->bch_pdu.bch_pdu_rel8.tl.tag             = NFAPI_DL_CONFIG_REQUEST_BCH_PDU_REL8_TAG;
-	    dl_config_pdu->bch_pdu.bch_pdu_rel8.length             = mib_sdu_length;
-	    dl_config_pdu->bch_pdu.bch_pdu_rel8.pdu_index          = eNB->pdu_index[CC_id];
-	    dl_config_pdu->bch_pdu.bch_pdu_rel8.transmission_power = 6000;
-            dl_req->tl.tag                                         = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
-	    dl_req->number_pdu++;
-
-            dl_config_request->header.message_id = NFAPI_DL_CONFIG_REQUEST;
-            dl_config_request->sfn_sf = sfn_sf;
-
-	    LOG_D(MAC, "eNB->DL_req[0].number_pdu %d (%p)\n", dl_req->number_pdu, &dl_req->number_pdu);
-	    // DL request
-
-	    TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
-	    TX_req->pdu_length = 3;
-	    TX_req->pdu_index = eNB->pdu_index[CC_id]++;
-	    TX_req->num_segments = 1;
-	    TX_req->segments[0].segment_length = 3;
-	    TX_req->segments[0].segment_data = cc[CC_id].MIB_pdu.payload;
-	    eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
-            eNB->TX_req[CC_id].sfn_sf = sfn_sf;
-            eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
-            eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
-	}
+      dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
+      memset((void *) dl_config_pdu, 0,
+             sizeof(nfapi_dl_config_request_pdu_t));
+      dl_config_pdu->pdu_type                                = NFAPI_DL_CONFIG_BCH_PDU_TYPE, dl_config_pdu->pdu_size =
+            2 + sizeof(nfapi_dl_config_bch_pdu);
+      dl_config_pdu->bch_pdu.bch_pdu_rel8.tl.tag             = NFAPI_DL_CONFIG_REQUEST_BCH_PDU_REL8_TAG;
+      dl_config_pdu->bch_pdu.bch_pdu_rel8.length             = mib_sdu_length;
+      dl_config_pdu->bch_pdu.bch_pdu_rel8.pdu_index          = eNB->pdu_index[CC_id];
+      dl_config_pdu->bch_pdu.bch_pdu_rel8.transmission_power = 6000;
+      dl_req->tl.tag                                         = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+      dl_req->number_pdu++;
+      dl_config_request->header.message_id = NFAPI_DL_CONFIG_REQUEST;
+      dl_config_request->sfn_sf = sfn_sf;
+      LOG_D(MAC, "eNB->DL_req[0].number_pdu %d (%p)\n", dl_req->number_pdu, &dl_req->number_pdu);
+      // DL request
+      TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
+      TX_req->pdu_length = 3;
+      TX_req->pdu_index = eNB->pdu_index[CC_id]++;
+      TX_req->num_segments = 1;
+      TX_req->segments[0].segment_length = 3;
+      TX_req->segments[0].segment_data = cc[CC_id].MIB_pdu.payload;
+      eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
+      eNB->TX_req[CC_id].sfn_sf = sfn_sf;
+      eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
+      eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
     }
+  }
 }
 
 
@@ -1041,224 +987,207 @@ void
 schedule_SI(module_id_t module_idP, frame_t frameP, sub_frame_t subframeP)
 //------------------------------------------------------------------------------
 {
+  int8_t bcch_sdu_length;
+  int mcs = -1;
+  int CC_id;
+  eNB_MAC_INST *eNB = RC.mac[module_idP];
+  COMMON_channels_t *cc;
+  uint8_t *vrb_map;
+  int first_rb = -1;
+  int N_RB_DL;
+  nfapi_dl_config_request_t      *dl_config_request;
+  nfapi_dl_config_request_pdu_t  *dl_config_pdu;
+  nfapi_tx_request_pdu_t *TX_req;
+  nfapi_dl_config_request_body_t *dl_req;
+  uint16_t sfn_sf = frameP << 4 | subframeP;
+  start_meas(&eNB->schedule_si);
+
+  // Only schedule LTE System Information in subframe 5
+  if (subframeP == 5) {
+    for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
+      cc = &eNB->common_channels[CC_id];
+      vrb_map = (void *) &cc->vrb_map;
+      N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
+      dl_config_request = &eNB->DL_req[CC_id];
+      dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
+      bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH, 0xFFFF,1, &cc->BCCH_pdu.payload[0], 0); // not used in this case
+
+      if (bcch_sdu_length > 0) {
+        LOG_D(MAC, "[eNB %d] Frame %d : BCCH->DLSCH CC_id %d, Received %d bytes \n", module_idP, frameP, CC_id, bcch_sdu_length);
+
+        // Allocate 4 PRBs in a random location
+        /*
+           while (1) {
+           first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL-4));
+           if ((vrb_map[first_rb] != 1) &&
+           (vrb_map[first_rb+1] != 1) &&
+           (vrb_map[first_rb+2] != 1) &&
+           (vrb_map[first_rb+3] != 1))
+           break;
+           }
+         */
+        switch (N_RB_DL) {
+          case 6:
+            first_rb = 0;
+            break;
+
+          case 15:
+            first_rb = 6;
+            break;
+
+          case 25:
+            first_rb = 11;
+            break;
+
+          case 50:
+            first_rb = 23;
+            break;
+
+          case 100:
+            first_rb = 48;
+            break;
+        }
+
+        vrb_map[first_rb] = 1;
+        vrb_map[first_rb + 1] = 1;
+        vrb_map[first_rb + 2] = 1;
+        vrb_map[first_rb + 3] = 1;
+
+        // Get MCS for length of SI, 3 PRBs
+        if (bcch_sdu_length <= 7) {
+          mcs = 0;
+        } else if (bcch_sdu_length <= 11) {
+          mcs = 1;
+        } else if (bcch_sdu_length <= 18) {
+          mcs = 2;
+        } else if (bcch_sdu_length <= 22) {
+          mcs = 3;
+        } else if (bcch_sdu_length <= 26) {
+          mcs = 4;
+        } else if (bcch_sdu_length <= 28) {
+          mcs = 5;
+        } else if (bcch_sdu_length <= 32) {
+          mcs = 6;
+        } else if (bcch_sdu_length <= 41) {
+          mcs = 7;
+        } else if (bcch_sdu_length <= 49) {
+          mcs = 8;
+        } else if (bcch_sdu_length <= 59) {
+          mcs = 9;
+        } else AssertFatal(1==0,"Cannot Assign mcs for bcch_sdu_length %d (max mcs 9)\n",bcch_sdu_length);
+
+        dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
+        memset((void *) dl_config_pdu, 0,
+               sizeof(nfapi_dl_config_request_pdu_t));
+        dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE;
+        dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dci_dl_pdu));
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag                = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format            = NFAPI_DL_DCI_FORMAT_1A;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level     = 4;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti                  = 0xFFFF;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type             = 2;  // S-RNTI : see Table 4-10 from SCF082 - nFAPI specifications
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power    = 6000; // equal to RS power
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process          = 0;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc                   = 1;  // no TPC
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1  = 0;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1                 = mcs;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1  = 0;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 4);
+        dl_config_request->sfn_sf = sfn_sf;
+
+        if (!CCE_allocation_infeasible(module_idP, CC_id, 0, subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, SI_RNTI)) {
+          LOG_D(MAC, "Frame %d: Subframe %d : Adding common DCI for S_RNTI\n", frameP, subframeP);
+          dl_req->number_dci++;
+          dl_req->number_pdu++;
+          dl_req->tl.tag   = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+          dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
+          memset((void *) dl_config_pdu, 0,
+                 sizeof(nfapi_dl_config_request_pdu_t));
+          dl_config_pdu->pdu_type                                                        = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
+          dl_config_pdu->pdu_size                                                        = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index                              = eNB->pdu_index[CC_id];
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag                                 = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length                                 = bcch_sdu_length;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti                                   = 0xFFFF;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type               = 2; // format 1A/1B/1D
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0; // localized
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding                  = getRIV(N_RB_DL, first_rb, 4);
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation                             = 2; //QPSK
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version                     = 0;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks                       = 1; // first block
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag  = 0;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme                    = (cc->p_eNB == 1) ? 0 : 1;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers                       = 1;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands                     = 1;
+          //    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity                   = 1;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa                                     = 4; // 0 dB
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index               = 0;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap                                   = 0;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb                                   = get_subbandsize(cc->mib->message.dl_Bandwidth);  // ignored
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode                      = (cc->p_eNB == 1) ? 1 : 2;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband                 = 1;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector                          = 1;
+          //    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ;
+          dl_req->number_pdu++;
+          dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
+          // Rel10 fields
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start                           = 3;
+          // Rel13 fields
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type                               = 0;   // regular UE
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type                    = 2;        // not BR
+          dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io            = 0xFFFF;   // absolute SF
+          dl_config_request->header.message_id                                           = NFAPI_DL_CONFIG_REQUEST;
+          dl_config_request->sfn_sf                                                      = sfn_sf;
+          // Program TX Request
+          TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
+          TX_req->pdu_length = bcch_sdu_length;
+          TX_req->pdu_index = eNB->pdu_index[CC_id]++;
+          TX_req->num_segments = 1;
+          TX_req->segments[0].segment_length = bcch_sdu_length;
+          TX_req->segments[0].segment_data = cc->BCCH_pdu.payload;
+          eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
+          eNB->TX_req[CC_id].sfn_sf = sfn_sf;
+          eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
+          eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
+        } else {
+          LOG_E(MAC,
+                "[eNB %d] CCid %d Frame %d, subframe %d : Cannot add DCI 1A for SI\n",
+                module_idP, CC_id, frameP, subframeP);
+        }
 
-    int8_t bcch_sdu_length;
-    int mcs = -1;
-    int CC_id;
-    eNB_MAC_INST *eNB = RC.mac[module_idP];
-    COMMON_channels_t *cc;
-    uint8_t *vrb_map;
-    int first_rb = -1;
-    int N_RB_DL;
-    nfapi_dl_config_request_t      *dl_config_request;
-    nfapi_dl_config_request_pdu_t  *dl_config_pdu;
-    nfapi_tx_request_pdu_t *TX_req;
-    nfapi_dl_config_request_body_t *dl_req;
-    uint16_t sfn_sf = frameP << 4 | subframeP;
-
-    start_meas(&eNB->schedule_si);
-
-    // Only schedule LTE System Information in subframe 5
-    if (subframeP == 5) {
-
-	for (CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++) {
-
-	    cc = &eNB->common_channels[CC_id];
-	    vrb_map = (void *) &cc->vrb_map;
-	    N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
-            dl_config_request = &eNB->DL_req[CC_id];
-	    dl_req = &eNB->DL_req[CC_id].dl_config_request_body;
-
-
-	    bcch_sdu_length = mac_rrc_data_req(module_idP, CC_id, frameP, BCCH, 0xFFFF,1, &cc->BCCH_pdu.payload[0], 0);	// not used in this case
-
-	    if (bcch_sdu_length > 0) {
-		LOG_D(MAC, "[eNB %d] Frame %d : BCCH->DLSCH CC_id %d, Received %d bytes \n", module_idP, frameP, CC_id, bcch_sdu_length);
-
-		// Allocate 4 PRBs in a random location
-		/*
-		   while (1) {
-		   first_rb = (unsigned char)(taus()%(PHY_vars_eNB_g[module_idP][CC_id]->frame_parms.N_RB_DL-4));
-		   if ((vrb_map[first_rb] != 1) && 
-		   (vrb_map[first_rb+1] != 1) && 
-		   (vrb_map[first_rb+2] != 1) && 
-		   (vrb_map[first_rb+3] != 1))
-		   break;
-		   }
-		 */
-		switch (N_RB_DL) {
-		case 6:
-		    first_rb = 0;
-		    break;
-		case 15:
-		    first_rb = 6;
-		    break;
-		case 25:
-		    first_rb = 11;
-		    break;
-		case 50:
-		    first_rb = 23;
-		    break;
-		case 100:
-		    first_rb = 48;
-		    break;
-		}
-
-		vrb_map[first_rb] = 1;
-		vrb_map[first_rb + 1] = 1;
-		vrb_map[first_rb + 2] = 1;
-		vrb_map[first_rb + 3] = 1;
-
-		// Get MCS for length of SI, 3 PRBs
-		if (bcch_sdu_length <= 7) {
-		    mcs = 0;
-		} else if (bcch_sdu_length <= 11) {
-		    mcs = 1;
-		} else if (bcch_sdu_length <= 18) {
-		    mcs = 2;
-		} else if (bcch_sdu_length <= 22) {
-		    mcs = 3;
-		} else if (bcch_sdu_length <= 26) {
-		    mcs = 4;
-		} else if (bcch_sdu_length <= 28) {
-		    mcs = 5;
-		} else if (bcch_sdu_length <= 32) {
-		    mcs = 6;
-		} else if (bcch_sdu_length <= 41) {
-		    mcs = 7;
-		} else if (bcch_sdu_length <= 49) {
-		    mcs = 8;
-		} else if (bcch_sdu_length <= 59) {
-                    mcs = 9;
-                } 
-                else AssertFatal(1==0,"Cannot Assign mcs for bcch_sdu_length %d (max mcs 9)\n",bcch_sdu_length);
-
-		dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
-		memset((void *) dl_config_pdu, 0,
-		       sizeof(nfapi_dl_config_request_pdu_t));
-		dl_config_pdu->pdu_type = NFAPI_DL_CONFIG_DCI_DL_PDU_TYPE;
-		dl_config_pdu->pdu_size = (uint8_t) (2 + sizeof(nfapi_dl_config_dci_dl_pdu));
-                dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tl.tag                = NFAPI_DL_CONFIG_REQUEST_DCI_DL_PDU_REL8_TAG;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format            = NFAPI_DL_DCI_FORMAT_1A;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level     = 4;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti                  = 0xFFFF;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.rnti_type             = 2;	// S-RNTI : see Table 4-10 from SCF082 - nFAPI specifications
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.transmission_power    = 6000;	// equal to RS power
-
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process          = 0;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc                   = 1;	// no TPC
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1  = 0;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.mcs_1                 = mcs;
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1  = 0;
-
-		dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = getRIV(N_RB_DL, first_rb, 4);
-                dl_config_request->sfn_sf = sfn_sf;
-
-		if (!CCE_allocation_infeasible(module_idP, CC_id, 0, subframeP,dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.aggregation_level, SI_RNTI)) {
-		    LOG_D(MAC, "Frame %d: Subframe %d : Adding common DCI for S_RNTI\n", frameP, subframeP);
-		    dl_req->number_dci++;
-		    dl_req->number_pdu++;
-                    dl_req->tl.tag   = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
-		    dl_config_pdu = &dl_req->dl_config_pdu_list[dl_req->number_pdu];
-		    memset((void *) dl_config_pdu, 0,
-			   sizeof(nfapi_dl_config_request_pdu_t));
-		    dl_config_pdu->pdu_type                                                        = NFAPI_DL_CONFIG_DLSCH_PDU_TYPE;
-		    dl_config_pdu->pdu_size                                                        = (uint8_t) (2 + sizeof(nfapi_dl_config_dlsch_pdu));
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pdu_index                              = eNB->pdu_index[CC_id];
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.tl.tag                                 = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL8_TAG;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.length                                 = bcch_sdu_length;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.rnti                                   = 0xFFFF;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_allocation_type               = 2;	// format 1A/1B/1D
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.virtual_resource_block_assignment_flag = 0;	// localized
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.resource_block_coding                  = getRIV(N_RB_DL, first_rb, 4);
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.modulation                             = 2;	//QPSK
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.redundancy_version                     = 0;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_blocks                       = 1;	// first block
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transport_block_to_codeword_swap_flag  = 0;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_scheme                    = (cc->p_eNB == 1) ? 0 : 1;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_layers                       = 1;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.number_of_subbands                     = 1;
-		    //    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.codebook_index                         = ;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ue_category_capacity                   = 1;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.pa                                     = 4;	// 0 dB
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.delta_power_offset_index               = 0;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.ngap                                   = 0;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.nprb                                   = get_subbandsize(cc->mib->message.dl_Bandwidth);	// ignored
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.transmission_mode                      = (cc->p_eNB == 1) ? 1 : 2;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_prb_per_subband                 = 1;
-		    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.num_bf_vector                          = 1;
-		    //    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel8.bf_vector                    = ; 
-		    dl_req->number_pdu++;
-		    dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
-
-                    // Rel10 fields
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL10_TAG;
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel10.pdsch_start                           = 3;
-                    // Rel13 fields
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.tl.tag                                = NFAPI_DL_CONFIG_REQUEST_DLSCH_PDU_REL13_TAG;
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.ue_type                               = 0;   // regular UE
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.pdsch_payload_type                    = 2;        // not BR
-                    dl_config_pdu->dlsch_pdu.dlsch_pdu_rel13.initial_transmission_sf_io            = 0xFFFF;   // absolute SF
-
-                    dl_config_request->header.message_id                                           = NFAPI_DL_CONFIG_REQUEST;
-                    dl_config_request->sfn_sf                                                      = sfn_sf;
-
-		    // Program TX Request
-		    TX_req = &eNB->TX_req[CC_id].tx_request_body.tx_pdu_list[eNB->TX_req[CC_id].tx_request_body.number_of_pdus];
-		    TX_req->pdu_length = bcch_sdu_length;
-		    TX_req->pdu_index = eNB->pdu_index[CC_id]++;
-		    TX_req->num_segments = 1;
-		    TX_req->segments[0].segment_length = bcch_sdu_length;
-		    TX_req->segments[0].segment_data = cc->BCCH_pdu.payload;
-		    eNB->TX_req[CC_id].tx_request_body.number_of_pdus++;
-                    eNB->TX_req[CC_id].sfn_sf = sfn_sf;
-                    eNB->TX_req[CC_id].tx_request_body.tl.tag = NFAPI_TX_REQUEST_BODY_TAG;
-                    eNB->TX_req[CC_id].header.message_id = NFAPI_TX_REQUEST;
-
-		} else {
-		    LOG_E(MAC,
-			  "[eNB %d] CCid %d Frame %d, subframe %d : Cannot add DCI 1A for SI\n",
-			  module_idP, CC_id, frameP, subframeP);
-		}
-
-                T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(0xffff),
-                  T_INT(frameP), T_INT(subframeP), T_INT(0), T_BUFFER(cc->BCCH_pdu.payload, bcch_sdu_length));
-
-		if (opt_enabled == 1) {
-		    trace_pdu(DIRECTION_DOWNLINK,
-			      &cc->BCCH_pdu.payload[0],
-			      bcch_sdu_length,
-			      0xffff,
-			     WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
-		    LOG_D(OPT,
-			  "[eNB %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-			  module_idP, frameP, CC_id, 0xffff,
-			  bcch_sdu_length);
-		}
-		if (cc->tdd_Config != NULL) {	//TDD
-		    LOG_D(MAC,
-			  "[eNB] Frame %d : Scheduling BCCH->DLSCH (TDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n",
-			  frameP, CC_id, bcch_sdu_length, mcs);
-		} else {
-		    LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH->DLSCH (FDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n", frameP, CC_id, bcch_sdu_length, mcs);
-		}
-
-
-		eNB->eNB_stats[CC_id].total_num_bcch_pdu += 1;
-		eNB->eNB_stats[CC_id].bcch_buffer = bcch_sdu_length;
-		eNB->eNB_stats[CC_id].total_bcch_buffer += bcch_sdu_length;
-		eNB->eNB_stats[CC_id].bcch_mcs = mcs;
-//printf("SI %d.%d\n", frameP, subframeP);/////////////////////////////////////////******************************
-	    } else {
-
-		//LOG_D(MAC,"[eNB %d] Frame %d : BCCH not active \n",Mod_id,frame);
-	    }
-	}
+        T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(0xffff),
+          T_INT(frameP), T_INT(subframeP), T_INT(0), T_BUFFER(cc->BCCH_pdu.payload, bcch_sdu_length));
+        trace_pdu(DIRECTION_DOWNLINK,
+                  &cc->BCCH_pdu.payload[0],
+                  bcch_sdu_length,
+                  0xffff,
+                  WS_SI_RNTI, 0xffff, eNB->frame, eNB->subframe, 0, 0);
+
+        if (cc->tdd_Config != NULL) { //TDD
+          LOG_D(MAC,
+                "[eNB] Frame %d : Scheduling BCCH->DLSCH (TDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n",
+                frameP, CC_id, bcch_sdu_length, mcs);
+        } else {
+          LOG_D(MAC, "[eNB] Frame %d : Scheduling BCCH->DLSCH (FDD) for CC_id %d SI %d bytes (mcs %d, rb 3)\n", frameP, CC_id, bcch_sdu_length, mcs);
+        }
+
+        eNB->eNB_stats[CC_id].total_num_bcch_pdu += 1;
+        eNB->eNB_stats[CC_id].bcch_buffer = bcch_sdu_length;
+        eNB->eNB_stats[CC_id].total_bcch_buffer += bcch_sdu_length;
+        eNB->eNB_stats[CC_id].bcch_mcs = mcs;
+        //printf("SI %d.%d\n", frameP, subframeP);/////////////////////////////////////////******************************
+      } else {
+        //LOG_D(MAC,"[eNB %d] Frame %d : BCCH not active \n",Mod_id,frame);
+      }
     }
+  }
+
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-    schedule_SIB1_BR(module_idP, frameP, subframeP);
-    schedule_SI_BR(module_idP, frameP, subframeP);
+  schedule_SIB1_BR(module_idP, frameP, subframeP);
+  schedule_SI_BR(module_idP, frameP, subframeP);
 #endif
-
   stop_meas(&eNB->schedule_si);
 }
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
index 22775f8c7d7bdaf850c301d64faec2a175056bf7..72d03c4060da5b3ef5239212d791849d07ed4bad 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_dlsch.c
@@ -572,7 +572,6 @@ schedule_ue_spec(module_id_t module_idP,
     dl_Bandwidth = cc[CC_id].mib->message.dl_Bandwidth;
     N_RB_DL[CC_id] = to_prb(dl_Bandwidth);
     min_rb_unit[CC_id] = get_min_rb_unit(module_idP, CC_id);
-
     // get number of PRBs less those used by common channels
     total_nb_available_rb[CC_id] = N_RB_DL[CC_id];
 
@@ -629,7 +628,6 @@ schedule_ue_spec(module_id_t module_idP,
       LOG_D(MAC, "doing schedule_ue_spec for CC_id %d UE %d\n",
             CC_id,
             UE_id);
-
       continue_flag = 0; // reset the flag to allow allocation for the remaining UEs
       rnti = UE_RNTI(module_idP, UE_id);
       ue_sched_ctrl = &UE_list->UE_sched_ctrl[UE_id];
@@ -783,7 +781,8 @@ schedule_ue_spec(module_id_t module_idP,
 
           if (ue_sched_ctrl->cdrx_configured) {
             ue_sched_ctrl->drx_retransmission_timer[harq_pid] = 0; // stop drx retransmission
-            /* 
+
+            /*
              * Note: contrary to the spec drx_retransmission_timer[harq_pid] is reset not stop.
              */
             if (harq_pid == 0) {
@@ -1018,9 +1017,10 @@ schedule_ue_spec(module_id_t module_idP,
                                              );
 
             if((rrc_release_info.num_UEs > 0) && (rlc_am_mui.rrc_mui_num > 0)) {
-              while(pthread_mutex_trylock(&rrc_release_freelist)){
+              while(pthread_mutex_trylock(&rrc_release_freelist)) {
                 /* spin... */
               }
+
               uint16_t release_total = 0;
 
               for (release_num = 0, release_ctrl = &rrc_release_info.RRC_release_ctrl[0];
@@ -1067,10 +1067,10 @@ schedule_ue_spec(module_id_t module_idP,
                 if(release_total >= rrc_release_info.num_UEs)
                   break;
               }
+
               pthread_mutex_unlock(&rrc_release_freelist);
             }
 
-
             for (ra_ii = 0, ra = &eNB->common_channels[CC_id].ra[0]; ra_ii < NB_RA_PROC_MAX; ra_ii++, ra++) {
               if ((ra->rnti == rnti) && (ra->state == MSGCRNTI)) {
                 for (uint16_t mui_num = 0; mui_num < rlc_am_mui.rrc_mui_num; mui_num++) {
@@ -1261,7 +1261,6 @@ schedule_ue_spec(module_id_t module_idP,
               header_length_total += header_length_last;
               num_sdus++;
               ue_sched_ctrl->uplane_inactivity_timer = 0;
-
               // reset RRC inactivity timer after uplane activity
               ue_contextP = rrc_eNB_get_ue_context(RC.rrc[module_idP], rnti);
 
@@ -1429,27 +1428,17 @@ schedule_ue_spec(module_id_t module_idP,
             dlsch_pdu->payload[0][offset + sdu_length_total + j] = 0;
           }
 
-          if (opt_enabled == 1) {
-            trace_pdu(DIRECTION_DOWNLINK,
-                      (uint8_t *) dlsch_pdu->payload[0],
-                      TBS,
-                      module_idP,
-                      WS_C_RNTI,
-                      UE_RNTI(module_idP,
-                              UE_id),
-                      eNB->frame,
-                      eNB->subframe,
-                      0,
-                      0);
-            LOG_D(OPT, "[eNB %d][DLSCH] CC_id %d Frame %d  rnti %x  with size %d\n",
-                  module_idP,
-                  CC_id,
-                  frameP,
-                  UE_RNTI(module_idP,
-                          UE_id),
-                  TBS);
-          }
-
+          trace_pdu(DIRECTION_DOWNLINK,
+                    (uint8_t *) dlsch_pdu->payload[0],
+                    TBS,
+                    module_idP,
+                    WS_C_RNTI,
+                    UE_RNTI(module_idP,
+                            UE_id),
+                    eNB->frame,
+                    eNB->subframe,
+                    0,
+                    0);
           T(T_ENB_MAC_UE_DL_PDU_WITH_DATA,
             T_INT(module_idP),
             T_INT(CC_id),
@@ -1513,7 +1502,7 @@ schedule_ue_spec(module_id_t module_idP,
                 tpc = 1;  //0
               }
 
-              LOG_D(MAC, "[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, snr/target snr %d/%d\n",
+              LOG_D(MAC, "[eNB %d] DLSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, snr/target snr %d/%d (normal case)\n",
                     module_idP,
                     frameP,
                     subframeP,
@@ -1585,17 +1574,17 @@ schedule_ue_spec(module_id_t module_idP,
             dl_req->tl.tag = NFAPI_DL_CONFIG_REQUEST_BODY_TAG;
             eNB->DL_req[CC_id].sfn_sf = frameP << 4 | subframeP;
             eNB->DL_req[CC_id].header.message_id = NFAPI_DL_CONFIG_REQUEST;
-
             /* CDRX */
             ue_sched_ctrl->harq_rtt_timer[CC_id][harq_pid] = 1; // restart HARQ RTT timer
 
             if (ue_sched_ctrl->cdrx_configured) {
               ue_sched_ctrl->drx_inactivity_timer = 1; // restart drx inactivity timer when new transmission
               ue_sched_ctrl->drx_retransmission_timer[harq_pid] = 0; // stop drx retransmission
-              /* 
+              /*
                * Note: contrary to the spec drx_retransmission_timer[harq_pid] is reset not stop.
                */
               VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_DRX_INACTIVITY, (unsigned long) ue_sched_ctrl->drx_inactivity_timer);
+
               if (harq_pid == 0) {
                 VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_DRX_RETRANSMISSION_HARQ0, (unsigned long) ue_sched_ctrl->drx_retransmission_timer[0]);
               }
@@ -2352,25 +2341,16 @@ schedule_ue_spec_br(module_id_t module_idP,
             UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0][offset + sdu_length_total + j] = (char)(taus()&0xff);
           }
 
-          if (opt_enabled == 1) {
-            trace_pdu(1,
-                      (uint8_t *)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0],
-                      TBS,
-                      module_idP,
-                      3,
-                      UE_RNTI(module_idP,UE_id),
-                      mac->frame,
-                      mac->subframe,
-                      0,
-                      0);
-            LOG_D(OPT,"[eNB %d][DLSCH] CC_id %d Frame %d  rnti %x  with size %d\n",
-                  module_idP,
-                  CC_id,
-                  frameP,
-                  UE_RNTI(module_idP, UE_id),
-                  TBS);
-          }
-
+          trace_pdu(DIRECTION_DOWNLINK,
+                    (uint8_t *)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0],
+                    TBS,
+                    module_idP,
+                    3,
+                    UE_RNTI(module_idP,UE_id),
+                    mac->frame,
+                    mac->subframe,
+                    0,
+                    0);
           T(T_ENB_MAC_UE_DL_PDU_WITH_DATA,
             T_INT(module_idP),
             T_INT(CC_id),
@@ -2563,25 +2543,16 @@ schedule_ue_spec_br(module_id_t module_idP,
         T_INT (subframeP),
         T_INT (0 /* harq_pid always 0? */ ),
         T_BUFFER (&mac->UE_list.DLSCH_pdu[CC_id][0][UE_id].payload[0], TX_req->pdu_length));
-
-      if (opt_enabled == 1) {
-        trace_pdu(1,
-                  (uint8_t *) mac->UE_list.DLSCH_pdu[CC_id][0][(unsigned char) UE_id].payload[0],
-                  TX_req->pdu_length,
-                  UE_id,
-                  3,
-                  rnti,
-                  frameP,
-                  subframeP,
-                  0,
-                  0);
-        LOG_D(OPT, "[eNB %d][DLSCH] CC_id %d Frame %d trace pdu for rnti %x with size %d\n",
-              module_idP,
-              CC_id,
-              frameP,
-              rnti,
-              TX_req->pdu_length);
-      }
+      trace_pdu(1,
+                (uint8_t *) mac->UE_list.DLSCH_pdu[CC_id][0][(unsigned char) UE_id].payload[0],
+                TX_req->pdu_length,
+                UE_id,
+                3,
+                rnti,
+                frameP,
+                subframeP,
+                0,
+                0);
     } // end else if ((subframeP == 7) && (round_DL < 8))
   } // end loop on UE_id
 }
@@ -3096,8 +3067,8 @@ schedule_PCH(module_id_t module_idP,
         dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.dci_format                  = NFAPI_DL_DCI_FORMAT_1A;
         dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.harq_process                = 0;
         dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.tpc                         = 1; // no TPC
-	    dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1        = 0;
-	    dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1        = 0;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.new_data_indicator_1        = 0;
+        dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.redundancy_version_1        = 0;
         dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.resource_block_coding = getRIV(n_rb_dl, first_rb, 4);
         dl_config_pdu->dci_dl_pdu.dci_dl_pdu_rel8.virtual_resource_block_assignment_flag = 0;
 #endif
@@ -3187,25 +3158,16 @@ schedule_PCH(module_id_t module_idP,
           continue;
         }
 
-        if (opt_enabled == 1) {
-          trace_pdu(DIRECTION_DOWNLINK,
-                    &eNB->common_channels[CC_id].PCCH_pdu.payload[0],
-                    pcch_sdu_length,
-                    0xffff,
-                    PCCH,
-                    P_RNTI,
-                    eNB->frame,
-                    eNB->subframe,
-                    0,
-                    0);
-          LOG_D(OPT,"[eNB %d][PCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-                module_idP,
-                frameP,
-                CC_id,
-                0xffff,
-                pcch_sdu_length);
-        }
-
+        trace_pdu(DIRECTION_DOWNLINK,
+                  &eNB->common_channels[CC_id].PCCH_pdu.payload[0],
+                  pcch_sdu_length,
+                  0xffff,
+                  PCCH,
+                  P_RNTI,
+                  eNB->frame,
+                  eNB->subframe,
+                  0,
+                  0);
         eNB->eNB_stats[CC_id].total_num_pcch_pdu++;
         eNB->eNB_stats[CC_id].pcch_buffer = pcch_sdu_length;
         eNB->eNB_stats[CC_id].total_pcch_buffer += pcch_sdu_length;
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
index 7ac5918b6ee4fb04eb72d0a7bfeec672d4226e32..31bddf7d51f64c900ec915d3b12b56eb09d49c62 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_fairRR.c
@@ -644,16 +644,18 @@ void dlsch_scheduler_pre_processor_fairRR (module_id_t   Mod_id,
     // Get total available RBS count and total UE count
     N_RB_DL = to_prb(cc->mib->message.dl_Bandwidth);
     temp_total_rbs_count = 0;
-    for(uint8_t rbg_i = 0;rbg_i < N_RBG[CC_id];rbg_i++ ){
-      if(rballoc_sub[CC_id][rbg_i] == 0){
+
+    for(uint8_t rbg_i = 0; rbg_i < N_RBG[CC_id]; rbg_i++ ) {
+      if(rballoc_sub[CC_id][rbg_i] == 0) {
         if((rbg_i == N_RBG[CC_id] -1) &&
-           ((N_RB_DL == 25) || (N_RB_DL == 50))){
+            ((N_RB_DL == 25) || (N_RB_DL == 50))) {
           temp_total_rbs_count += (min_rb_unit[CC_id] -1);
-        }else{
+        } else {
           temp_total_rbs_count += min_rb_unit[CC_id];
         }
       }
     }
+
     temp_total_ue_count = dlsch_ue_select[CC_id].ue_num;
 
     for (i = 0; i < dlsch_ue_select[CC_id].ue_num; i++) {
@@ -1311,10 +1313,11 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
 #endif
                                              );
 
-            if((rrc_release_info.num_UEs > 0) && (rlc_am_mui.rrc_mui_num > 0)){
+            if((rrc_release_info.num_UEs > 0) && (rlc_am_mui.rrc_mui_num > 0)) {
               while(pthread_mutex_trylock(&rrc_release_freelist)) {
                 /* spin... */
               }
+
               uint16_t release_total = 0;
 
               for(uint16_t release_num = 0; release_num < NUMBER_OF_UE_MAX; release_num++) {
@@ -1351,6 +1354,7 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
                 if(release_total >= rrc_release_info.num_UEs)
                   break;
               }
+
               pthread_mutex_unlock(&rrc_release_freelist);
             }
 
@@ -1709,14 +1713,9 @@ schedule_ue_spec_fairRR(module_id_t module_idP,
             UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0][offset+sdu_length_total+j] = (char)(taus()&0xff);
           }
 
-          if (opt_enabled == 1) {
-            trace_pdu(DIRECTION_DOWNLINK, (uint8_t *)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0],
-                      TBS, module_idP, WS_RA_RNTI, UE_RNTI(module_idP, UE_id),
-                      eNB->frame, eNB->subframe,0,0);
-            LOG_D(OPT,"[eNB %d][DLSCH] CC_id %d Frame %d  rnti %x  with size %d\n",
-                  module_idP, CC_id, frameP, UE_RNTI(module_idP, UE_id), TBS);
-          }
-
+          trace_pdu(DIRECTION_DOWNLINK, (uint8_t *)UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0],
+                    TBS, module_idP, WS_RA_RNTI, UE_RNTI(module_idP, UE_id),
+                    eNB->frame, eNB->subframe,0,0);
           T(T_ENB_MAC_UE_DL_PDU_WITH_DATA, T_INT(module_idP), T_INT(CC_id), T_INT(rnti), T_INT(frameP), T_INT(subframeP),
             T_INT(harq_pid), T_BUFFER(UE_list->DLSCH_pdu[CC_id][0][UE_id].payload[0], TBS));
           UE_list->UE_template[CC_id][UE_id].nb_rb[harq_pid] = nb_rb;
@@ -2002,6 +2001,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
   int                            format_flag;
   nfapi_hi_dci0_request_body_t   *HI_DCI0_req;
   nfapi_hi_dci0_request_pdu_t    *hi_dci0_pdu;
+  int rrc_status;
 
   for ( CC_id = 0; CC_id < MAX_NUM_CCs; CC_id++ ) {
     //save ulsch dci number
@@ -2058,6 +2058,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
       hi_dci0_pdu   = &HI_DCI0_req->hi_dci0_pdu_list[HI_DCI0_req->number_of_dci+HI_DCI0_req->number_of_hi];
       format_flag = 2;
       aggregation=get_aggregation(get_bw_index(module_idP,CC_id),UE_list->UE_sched_ctrl[UE_id].dl_cqi[CC_id],format0);
+
       if (CCE_allocation_infeasible(module_idP,CC_id,format_flag,subframeP,aggregation,rnti) == 1) {
         cc_id_flag[CC_id] = 1;
         continue;
@@ -2096,9 +2097,11 @@ void ulsch_scheduler_pre_ue_select_fairRR(
       }
 
       UE_sched_ctl = &UE_list->UE_sched_ctrl[UE_id];
+      rrc_status = mac_eNB_get_rrc_status(module_idP, rnti);
 
       if ( ((UE_sched_ctl->ul_inactivity_timer>20)&&(UE_sched_ctl->ul_scheduled==0))  ||
-           ((UE_sched_ctl->ul_inactivity_timer>10)&&(UE_sched_ctl->ul_scheduled==0)&&(mac_eNB_get_rrc_status(module_idP,UE_RNTI(module_idP,UE_id)) < RRC_CONNECTED))) {
+           ((UE_sched_ctl->ul_inactivity_timer>10)&&(UE_sched_ctl->ul_scheduled==0)&&(rrc_status < RRC_CONNECTED)) ||
+           ((UE_sched_ctl->cqi_req_timer>300)&&((rrc_status >= RRC_CONNECTED))) ) {
         first_ue_id[CC_id][ue_first_num[CC_id]]= UE_id;
         first_ue_total[CC_id] [ue_first_num[CC_id]] = 0;
         ue_first_num[CC_id]++;
@@ -2136,7 +2139,8 @@ void ulsch_scheduler_pre_ue_select_fairRR(
       hi_dci0_pdu   = &HI_DCI0_req->hi_dci0_pdu_list[HI_DCI0_req->number_of_dci+HI_DCI0_req->number_of_hi];
       format_flag = 2;
       rnti = UE_RNTI(module_idP,first_ue_id[CC_id][temp]);
-      aggregation=get_aggregation(get_bw_index(module_idP,CC_id),UE_list->UE_sched_ctrl[first_ue_id[CC_id][temp]].dl_cqi[CC_id],format0); 
+      aggregation=get_aggregation(get_bw_index(module_idP,CC_id),UE_list->UE_sched_ctrl[first_ue_id[CC_id][temp]].dl_cqi[CC_id],format0);
+
       if (CCE_allocation_infeasible(module_idP,CC_id,format_flag,subframeP,aggregation,rnti) == 1) {
         cc_id_flag[CC_id] = 1;
         break;
@@ -2202,13 +2206,16 @@ void ulsch_scheduler_pre_ue_select_fairRR(
     int bytes_to_schedule = UE_list->UE_template[CC_id][UE_id].estimated_ul_buffer - UE_list->UE_template[CC_id][UE_id].scheduled_ul_bytes;
 
     if (bytes_to_schedule < 0) bytes_to_schedule = 0;
+    rrc_status = mac_eNB_get_rrc_status(module_idP, rnti);
 
     if ( (bytes_to_schedule > 0) || (UE_list->UE_template[CC_id][UE_id].ul_SR > 0) ||
          ((UE_sched_ctl->ul_inactivity_timer>20)&&(UE_sched_ctl->ul_scheduled==0))  ||
-         ((UE_sched_ctl->ul_inactivity_timer>10)&&(UE_sched_ctl->ul_scheduled==0)&&(mac_eNB_get_rrc_status(module_idP,UE_RNTI(module_idP,UE_id)) < RRC_CONNECTED)) ) {
+         ((UE_sched_ctl->ul_inactivity_timer>10)&&(UE_sched_ctl->ul_scheduled==0)&&(rrc_status < RRC_CONNECTED)) ||
+         ((UE_sched_ctl->cqi_req_timer>300)&&((rrc_status >= RRC_CONNECTED))) ) {
       hi_dci0_pdu   = &HI_DCI0_req->hi_dci0_pdu_list[HI_DCI0_req->number_of_dci+HI_DCI0_req->number_of_hi];
       format_flag = 2;
       aggregation=get_aggregation(get_bw_index(module_idP,CC_id),UE_list->UE_sched_ctrl[UE_id].dl_cqi[CC_id],format0);
+
       if (CCE_allocation_infeasible(module_idP,CC_id,format_flag,subframeP,aggregation,rnti) == 1) {
         cc_id_flag[CC_id] = 1;
         continue;
@@ -2262,6 +2269,7 @@ void ulsch_scheduler_pre_ue_select_fairRR(
       format_flag = 2;
       rnti = UE_RNTI(module_idP,ul_inactivity_id[CC_id][temp]);
       aggregation=get_aggregation(get_bw_index(module_idP,CC_id),UE_list->UE_sched_ctrl[ul_inactivity_id[CC_id][temp]].dl_cqi[CC_id],format0);
+
       if (CCE_allocation_infeasible(module_idP,CC_id,format_flag,subframeP,aggregation,rnti) == 1) {
         cc_id_flag[CC_id] = 1;
         continue;
@@ -2460,20 +2468,20 @@ void ulsch_scheduler_pre_processor_fairRR(module_id_t module_idP,
               UE_list->UE_template[CC_id][UE_id].pre_assigned_mcs_ul = mcs;
             }
           } else {
-            if (mac_eNB_get_rrc_status(module_idP,UE_RNTI(module_idP, UE_id)) < RRC_CONNECTED){
+            if (mac_eNB_get_rrc_status(module_idP,UE_RNTI(module_idP, UE_id)) < RRC_CONNECTED) {
               // assigne RBS( 6 RBs)
               first_rb[CC_id] = first_rb[CC_id] + 6;
               UE_list->UE_template[CC_id][UE_id].pre_allocated_nb_rb_ul[0] = 6;
               UE_list->UE_template[CC_id][UE_id].pre_allocated_rb_table_index_ul = 5;
               UE_list->UE_template[CC_id][UE_id].pre_assigned_mcs_ul = 10;
-            }else{
+            } else {
               // assigne RBS( 3 RBs)
               first_rb[CC_id] = first_rb[CC_id] + 3;
               UE_list->UE_template[CC_id][UE_id].pre_allocated_nb_rb_ul[0] = 3;
               UE_list->UE_template[CC_id][UE_id].pre_allocated_rb_table_index_ul = 2;
               UE_list->UE_template[CC_id][UE_id].pre_assigned_mcs_ul = 10;
             }
-           }
+          }
         } else if ( ulsch_ue_select[CC_id].list[ulsch_ue_num].ue_priority  == SCH_UL_INACTIVE ) {
           // assigne RBS( 3 RBs)
           first_rb[CC_id] = first_rb[CC_id] + 3;
@@ -2772,7 +2780,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t   module_idP,
       UE_sched_ctrl = &UE_list->UE_sched_ctrl[UE_id];
       harq_pid      = subframe2harqpid(cc,sched_frame,sched_subframeP);
       rnti = UE_RNTI(CC_id,UE_id);
-      aggregation=get_aggregation(get_bw_index(module_idP,CC_id),UE_sched_ctrl[UE_id].dl_cqi[CC_id],format0); 
+      aggregation=get_aggregation(get_bw_index(module_idP,CC_id),UE_sched_ctrl[UE_id].dl_cqi[CC_id],format0);
       LOG_D(MAC,"[eNB %d] frame %d subframe %d,Checking PUSCH %d for UE %d/%x CC %d : aggregation level %d, N_RB_UL %d\n",
             module_idP,frameP,subframeP,harq_pid,UE_id,rnti,CC_id, aggregation,N_RB_UL);
       int bytes_to_schedule = UE_template->estimated_ul_buffer - UE_template->scheduled_ul_bytes;
@@ -2785,19 +2793,25 @@ void schedule_ulsch_rnti_fairRR(module_id_t   module_idP,
 
       if (status < RRC_CONNECTED)
         cqi_req = 0;
-      else if (UE_sched_ctrl->cqi_req_timer>30) {
+      else if (UE_sched_ctrl->cqi_received == 1){
+        LOG_D(MAC,"Clearing CQI request timer\n");
+        UE_sched_ctrl->cqi_req_flag = 0;
+        UE_sched_ctrl->cqi_received = 0;
+        UE_sched_ctrl->cqi_req_timer = 0;
+        cqi_req = 0;
+      }else if (UE_sched_ctrl->cqi_req_timer>30) {
         cqi_req = 1;
 
         // To be safe , do not ask CQI in special SFs:36.213/7.2.3 CQI definition
         if (cc->tdd_Config) {
           switch (cc->tdd_Config->subframeAssignment) {
             case 1:
-              if( sched_subframeP == 1 || sched_subframeP == 6 ) cqi_req=0;
+              if( subframeP == 1 || subframeP == 6 ) cqi_req=0;
 
               break;
 
             case 3:
-              if( sched_subframeP == 1 ) cqi_req=0;
+              if( subframeP == 1 ) cqi_req=0;
 
               break;
 
@@ -2808,7 +2822,6 @@ void schedule_ulsch_rnti_fairRR(module_id_t   module_idP,
         }
 
         if(cqi_req == 1) {
-          UE_sched_ctrl->cqi_req_timer=0;
           UE_sched_ctrl->cqi_req_flag |= 1 << sched_subframeP;
         }
       } else
@@ -2842,7 +2855,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t   module_idP,
       }
 
       if (tpc!=1) {
-        LOG_D(MAC,"[eNB %d] ULSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, snr/target snr %d/%d\n",
+        LOG_D(MAC,"[eNB %d] ULSCH schedulerRR: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, snr/target snr %d/%d\n",
               module_idP,frameP,subframeP,harq_pid,tpc,
               tpc_accumulated,snr,target_snr);
       }
@@ -2887,6 +2900,7 @@ void schedule_ulsch_rnti_fairRR(module_id_t   module_idP,
         //store for possible retransmission
         UE_template->nb_rb_ul[harq_pid]    = rb_table[rb_table_index];
         UE_template->first_rb_ul[harq_pid] = first_rb[CC_id];
+        UE_template->cqi_req[harq_pid] = cqi_req;
         UE_sched_ctrl->ul_scheduled |= (1<<harq_pid);
 
         if (UE_id == UE_list->head)
@@ -3053,11 +3067,11 @@ void schedule_ulsch_rnti_fairRR(module_id_t   module_idP,
           LOG_D(MAC,"[eNB %d][PUSCH %d/%x] CC_id %d Frame %d subframeP %d Scheduled UE %d (mcs %d, first rb %d, nb_rb %d, TBS %d, harq_pid %d)\n",
                 module_idP,harq_pid,rnti,CC_id,frameP,subframeP,UE_id,mcs_rv,first_rb[CC_id],ulsch_ue_select[CC_id].list[ulsch_ue_num].nb_rb,UE_template->TBS_UL[harq_pid],harq_pid);
 
-
         // bad indices : 20 (40 PRB), 21 (45 PRB), 22 (48 PRB)
         //store for possible retransmission
         UE_template->nb_rb_ul[harq_pid]    = ulsch_ue_select[CC_id].list[ulsch_ue_num].nb_rb;
         UE_template->first_rb_ul[harq_pid] = ulsch_ue_select[CC_id].list[ulsch_ue_num].start_rb;
+        cqi_req = UE_template->cqi_req[harq_pid];
         UE_sched_ctrl->ul_scheduled |= (1<<harq_pid);
         // Cyclic shift for DM RS
         cshift = 0;// values from 0 to 7 can be used for mapping the cyclic shift (36.211 , Table 5.5.2.1.1-1)
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_mch.c b/openair2/LAYER2/MAC/eNB_scheduler_mch.c
index 31f685e90670cdbc72af66c939f6287d6b455e2d..b1e9717a9e16429a1078d67a2aadd9f1f5dc4706 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_mch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_mch.c
@@ -48,10 +48,10 @@
 #include "assertions.h"
 
 #if defined(ENABLE_ITTI)
-#include "intertask_interface.h"
+  #include "intertask_interface.h"
 #endif
 
-#include "SIMULATION/TOOLS/sim.h"	// for taus
+#include "SIMULATION/TOOLS/sim.h" // for taus
 
 #define ENABLE_MAC_PAYLOAD_DEBUG
 #define DEBUG_eNB_SCHEDULER 1
@@ -62,24 +62,23 @@ extern RAN_CONTEXT_t RC;
 #if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
 int8_t
 get_mbsfn_sf_alloction(module_id_t module_idP, uint8_t CC_id,
-		       uint8_t mbsfn_sync_area)
-{
-    // currently there is one-to-one mapping between sf allocation pattern and sync area
-    if (mbsfn_sync_area > MAX_MBSFN_AREA) {
-	LOG_W(MAC,
-	      "[eNB %d] CC_id %d MBSFN synchronization area %d out of range\n ",
-	      module_idP, CC_id, mbsfn_sync_area);
-	return -1;
-    } else if (RC.mac[module_idP]->
-	       common_channels[CC_id].mbsfn_SubframeConfig[mbsfn_sync_area]
-	       != NULL) {
-	return mbsfn_sync_area;
-    } else {
-	LOG_W(MAC,
-	      "[eNB %d] CC_id %d MBSFN Subframe Config pattern %d not found \n ",
-	      module_idP, CC_id, mbsfn_sync_area);
-	return -1;
-    }
+                       uint8_t mbsfn_sync_area) {
+  // currently there is one-to-one mapping between sf allocation pattern and sync area
+  if (mbsfn_sync_area >= MAX_MBSFN_AREA) {
+    LOG_W(MAC,
+          "[eNB %d] CC_id %d MBSFN synchronization area %d out of range\n ",
+          module_idP, CC_id, mbsfn_sync_area);
+    return -1;
+  } else if (RC.mac[module_idP]->
+             common_channels[CC_id].mbsfn_SubframeConfig[mbsfn_sync_area]
+             != NULL) {
+    return mbsfn_sync_area;
+  } else {
+    LOG_W(MAC,
+          "[eNB %d] CC_id %d MBSFN Subframe Config pattern %d not found \n ",
+          module_idP, CC_id, mbsfn_sync_area);
+    return -1;
+  }
 }
 
 uint32_t bytes_in_buffer=0;
@@ -94,6 +93,7 @@ uint8_t msi_sfs=0;
 
 //MSI_ELEMENT * ptr =NULL;
 
+
 int
 schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
 	      sub_frame_t subframeP)
@@ -906,13 +906,13 @@ schedule_MBMS(module_id_t module_idP, uint8_t CC_id, frame_t frameP,
      */
 }
 
+
 MCH_PDU *get_mch_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
-		     sub_frame_t subframeP)
-{
-    //  RC.mac[module_idP]->MCH_pdu.mcs=0;
-    //LOG_D(MAC," MCH_pdu.mcs is %d\n", RC.mac[module_idP]->MCH_pdu.mcs);
-//#warning "MCH pdu should take the CC_id index"
-    return (&RC.mac[module_idP]->common_channels[CC_id].MCH_pdu);
+                     sub_frame_t subframeP) {
+  //  RC.mac[module_idP]->MCH_pdu.mcs=0;
+  //LOG_D(MAC," MCH_pdu.mcs is %d\n", RC.mac[module_idP]->MCH_pdu.mcs);
+  //#warning "MCH pdu should take the CC_id index"
+  return (&RC.mac[module_idP]->common_channels[CC_id].MCH_pdu);
 }
 
 #endif
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
index 63f838f652daa216fa49b6d02c7b8c8848de23ce..6750998b9ff5b15055ff868d234f9ab4bce87a82 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_primitives.c
@@ -2523,6 +2523,7 @@ UE_is_to_be_scheduled(module_id_t module_idP,
 {
   UE_TEMPLATE *UE_template = &RC.mac[module_idP]->UE_list.UE_template[CC_id][UE_id];
   UE_sched_ctrl_t *UE_sched_ctl = &RC.mac[module_idP]->UE_list.UE_sched_ctrl[UE_id];
+  int rrc_status;
 
   // do not schedule UE if UL is not working
   if (UE_sched_ctl->ul_failure_timer > 0 || UE_sched_ctl->ul_out_of_sync > 0)
@@ -2535,13 +2536,14 @@ UE_is_to_be_scheduled(module_id_t module_idP,
         UE_id,
         ue_rnti);
 
+  rrc_status = mac_eNB_get_rrc_status(module_idP, ue_rnti);
+
   if (UE_template->scheduled_ul_bytes < UE_template->estimated_ul_buffer ||
       UE_template->ul_SR > 0 || // uplink scheduling request
       (UE_sched_ctl->ul_inactivity_timer > 19 && UE_sched_ctl->ul_scheduled == 0) ||  // every 2 frames when RRC_CONNECTED
       (UE_sched_ctl->ul_inactivity_timer > 10 &&
-       UE_sched_ctl->ul_scheduled == 0 &&
-       mac_eNB_get_rrc_status(module_idP,
-                              ue_rnti) < RRC_CONNECTED)) { // every Frame when not RRC_CONNECTED
+       UE_sched_ctl->ul_scheduled == 0 && rrc_status < RRC_CONNECTED) || // every Frame when not RRC_CONNECTED
+      (UE_sched_ctl->cqi_req_timer > 300 && rrc_status >= RRC_CONNECTED)) { // cqi req timer expired long ago (do not put too low value)
     LOG_D(MAC, "[eNB %d][PUSCH] UE %d/%x should be scheduled (BSR0 estimated size %d, SR %d)\n",
           module_idP,
           UE_id,
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
index 6d752eb3a65a4456cda58bbf085eadadda08a9b8..4aa09b59de5e8b5d69d7fe9cc94663fe70af066d 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
@@ -85,11 +85,10 @@ uint8_t rb_table[34] = {
 };
 
 // This table hold the possible number of MTC repetition for CE ModeA
-const uint8_t pusch_repetition_Table8_2_36213[3][4]=
-{
-		{1 , 2 , 4 , 8 },
-		{1 , 4 , 8 , 16},
-		{1 , 4 , 16, 32}
+const uint8_t pusch_repetition_Table8_2_36213[3][4]= {
+  {1, 2, 4, 8 },
+  {1, 4, 8, 16},
+  {1, 4, 16, 32}
 };
 
 extern mui_t rrc_eNB_mui;
@@ -131,7 +130,6 @@ rx_sdu(const module_id_t enb_mod_idP,
   rrc_eNB_ue_context_t *ue_contextP = NULL;
   UE_sched_ctrl_t *UE_scheduling_control = NULL;
   UE_TEMPLATE *UE_template_ptr = NULL;
-
   /* Init */
   current_rnti = rntiP;
   UE_id = find_UE_id(enb_mod_idP, current_rnti);
@@ -143,20 +141,11 @@ rx_sdu(const module_id_t enb_mod_idP,
   memset(rx_lengths, 0, NB_RB_MAX * sizeof(unsigned short));
   start_meas(&mac->rx_ulsch_sdu);
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_RX_SDU, 1);
-
-  if (opt_enabled == 1) {
-    trace_pdu(DIRECTION_UPLINK, sduP, sdu_lenP, 0, WS_C_RNTI, current_rnti, frameP, subframeP, 0, 0);
-    LOG_D(OPT, "[eNB %d][ULSCH] Frame %d rnti %x with size %d\n",
-          enb_mod_idP,
-          frameP,
-          current_rnti,
-          sdu_lenP);
-  }
+  trace_pdu(DIRECTION_UPLINK, sduP, sdu_lenP, 0, WS_C_RNTI, current_rnti, frameP, subframeP, 0, 0);
 
   if (UE_id != -1) {
     UE_scheduling_control = &(UE_list->UE_sched_ctrl[UE_id]);
     UE_template_ptr = &(UE_list->UE_template[CC_idP][UE_id]);
-
     LOG_D(MAC, "[eNB %d][PUSCH %d] CC_id %d %d.%d Received ULSCH sdu round %d from PHY (rnti %x, UE_id %d) ul_cqi %d\n",
           enb_mod_idP,
           harq_pid,
@@ -167,7 +156,6 @@ rx_sdu(const module_id_t enb_mod_idP,
           current_rnti,
           UE_id,
           ul_cqi);
-
     AssertFatal(UE_scheduling_control->round_UL[CC_idP][harq_pid] < 8, "round >= 8\n");
 
     if (sduP != NULL) {
@@ -182,7 +170,6 @@ rx_sdu(const module_id_t enb_mod_idP,
       UE_scheduling_control->ta_update = (UE_scheduling_control->ta_update * 3 + timing_advance) / 4;
       UE_scheduling_control->pusch_snr[CC_idP] = ul_cqi;
       UE_scheduling_control->ul_consecutive_errors = 0;
-
       first_rb = UE_template_ptr->first_rb_ul[harq_pid];
 
       if (UE_scheduling_control->ul_out_of_sync > 0) {
@@ -239,7 +226,7 @@ rx_sdu(const module_id_t enb_mod_idP,
       if (UE_scheduling_control->cdrx_configured == TRUE) {
         /* Synchronous UL HARQ */
         UE_scheduling_control->ul_synchronous_harq_timer[CC_idP][harq_pid] = 5;
-        /* 
+        /*
          * The NACK is programmed in n+4 subframes, so UE will have drxRetransmission running.
          * Setting ul_synchronous_harq_timer = 5 will trigger drxRetransmission timer.
          * Note: in case of asynchronous UL HARQ process restart here relevant RTT timer.
@@ -248,13 +235,11 @@ rx_sdu(const module_id_t enb_mod_idP,
       }
 
       first_rb = UE_template_ptr->first_rb_ul[harq_pid];
-
       /* Program NACK for PHICH */
       LOG_D(MAC, "Programming PHICH NACK for rnti %x harq_pid %d (first_rb %d)\n",
             current_rnti,
             harq_pid,
             first_rb);
-
       nfapi_hi_dci0_request_t *hi_dci0_req = NULL;
       uint8_t sf_ahead_dl = ul_subframe2_k_phich(&mac->common_channels[CC_idP], subframeP);
       hi_dci0_req = &mac->HI_DCI0_req[CC_idP][(subframeP + sf_ahead_dl) % 10];
@@ -309,22 +294,20 @@ rx_sdu(const module_id_t enb_mod_idP,
       if (ra->msg3_round >= mac->common_channels[CC_idP].radioResourceConfigCommon->rach_ConfigCommon.maxHARQ_Msg3Tx - 1) {
         cancel_ra_proc(enb_mod_idP, CC_idP, frameP, current_rnti);
       } else {
-    	  if (ra->rach_resource_type > 0) {
-    		  cancel_ra_proc(enb_mod_idP, CC_idP, frameP, current_rnti);				// TODO: Currently we don't support retransmission of Msg3 ( If in error Cancel RA procedure and reattach)
-    	      }
-    	  else
-    	  {
-    		  // first_rb = UE_template_ptr->first_rb_ul[harq_pid]; // UE_id = -1 !!!!
-    		          ra->msg3_round++;
-    		          /* Prepare handling of retransmission */
-    		          get_Msg3allocret(&mac->common_channels[CC_idP],
-    		                           ra->Msg3_subframe,
-    		                           ra->Msg3_frame,
-    		                           &ra->Msg3_frame,
-    		                           &ra->Msg3_subframe);
-    		          // prepare handling of retransmission
-    		          add_msg3(enb_mod_idP, CC_idP, ra, frameP, subframeP);
-    	  }
+        if (ra->rach_resource_type > 0) {
+          cancel_ra_proc(enb_mod_idP, CC_idP, frameP, current_rnti);        // TODO: Currently we don't support retransmission of Msg3 ( If in error Cancel RA procedure and reattach)
+        } else {
+          // first_rb = UE_template_ptr->first_rb_ul[harq_pid]; // UE_id = -1 !!!!
+          ra->msg3_round++;
+          /* Prepare handling of retransmission */
+          get_Msg3allocret(&mac->common_channels[CC_idP],
+                           ra->Msg3_subframe,
+                           ra->Msg3_frame,
+                           &ra->Msg3_frame,
+                           &ra->Msg3_subframe);
+          // prepare handling of retransmission
+          add_msg3(enb_mod_idP, CC_idP, ra, frameP, subframeP);
+        }
       }
 
       /* TODO: program NACK for PHICH? */
@@ -400,7 +383,6 @@ rx_sdu(const module_id_t enb_mod_idP,
                 CC_idP,
                 rx_ces[i],
                 UE_template_ptr->phr_info);
-
           UE_template_ptr->phr_info_configured = 1;
           UE_scheduling_control->phr_received = 1;
         }
@@ -432,13 +414,11 @@ rx_sdu(const module_id_t enb_mod_idP,
                   CC_idP,
                   old_rnti,
                   old_UE_id);
-
             UE_id = old_UE_id;
             current_rnti = old_rnti;
             /* Clear timer */
             UE_scheduling_control = &(UE_list->UE_sched_ctrl[UE_id]);
             UE_template_ptr = &(UE_list->UE_template[CC_idP][UE_id]);
-
             UE_scheduling_control->uplane_inactivity_timer = 0;
             UE_scheduling_control->ul_inactivity_timer = 0;
             UE_scheduling_control->ul_failure_timer = 0;
@@ -451,6 +431,7 @@ rx_sdu(const module_id_t enb_mod_idP,
                                      subframeP,
                                      old_rnti);
             }
+
             UE_template_ptr->ul_SR = 1;
             UE_scheduling_control->crnti_reconfigurationcomplete_flag = 1;
             UE_list->UE_template[UE_PCCID(enb_mod_idP, UE_id)][UE_id].configured = 1;
@@ -475,51 +456,52 @@ rx_sdu(const module_id_t enb_mod_idP,
             if (RA_id != -1) {
               RA_t *ra = &(mac->common_channels[CC_idP].ra[RA_id]);
               int8_t ret = mac_rrc_data_ind(enb_mod_idP,
-                               CC_idP,
-                               frameP, subframeP,
-                               UE_id,
-                               old_rnti,
-                               DCCH,
-                               (uint8_t *) payload_ptr,
-                               rx_lengths[i],
-                               0
+                                            CC_idP,
+                                            frameP, subframeP,
+                                            UE_id,
+                                            old_rnti,
+                                            DCCH,
+                                            (uint8_t *) payload_ptr,
+                                            rx_lengths[i],
+                                            0
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-                               ,ra->rach_resource_type > 0
+                                            ,ra->rach_resource_type > 0
 #endif
-                              );
+                                           );
+
               /* Received a new rnti */
               if (ret == 0) {
-              ra->state = MSGCRNTI;
-              LOG_I(MAC, "[eNB %d] Frame %d, Subframe %d CC_id %d : (rnti %x UE_id %d) Received rnti(Msg4)\n",
-                    enb_mod_idP,
-                    frameP,
-                    subframeP,
-                    CC_idP,
-                    old_rnti,
-                    old_UE_id);
-              UE_id = old_UE_id;
-              current_rnti = old_rnti;
-              ra->rnti = old_rnti;
-              ra->crnti_rrc_mui = rrc_eNB_mui-1;
-              ra->crnti_harq_pid = -1;
-
-              /* Clear timer */
-              UE_scheduling_control = &(UE_list->UE_sched_ctrl[UE_id]);
-              UE_template_ptr = &(UE_list->UE_template[CC_idP][UE_id]);
-
-              UE_scheduling_control->uplane_inactivity_timer = 0;
-              UE_scheduling_control->ul_inactivity_timer = 0;
-              UE_scheduling_control->ul_failure_timer = 0;
+                ra->state = MSGCRNTI;
+                LOG_I(MAC, "[eNB %d] Frame %d, Subframe %d CC_id %d : (rnti %x UE_id %d) Received rnti(Msg4)\n",
+                      enb_mod_idP,
+                      frameP,
+                      subframeP,
+                      CC_idP,
+                      old_rnti,
+                      old_UE_id);
+                UE_id = old_UE_id;
+                current_rnti = old_rnti;
+                ra->rnti = old_rnti;
+                ra->crnti_rrc_mui = rrc_eNB_mui-1;
+                ra->crnti_harq_pid = -1;
+                /* Clear timer */
+                UE_scheduling_control = &(UE_list->UE_sched_ctrl[UE_id]);
+                UE_template_ptr = &(UE_list->UE_template[CC_idP][UE_id]);
+                UE_scheduling_control->uplane_inactivity_timer = 0;
+                UE_scheduling_control->ul_inactivity_timer = 0;
+                UE_scheduling_control->ul_failure_timer = 0;
+
+                if (UE_scheduling_control->ul_out_of_sync > 0) {
+                  UE_scheduling_control->ul_out_of_sync = 0;
+                  mac_eNB_rrc_ul_in_sync(enb_mod_idP, CC_idP, frameP, subframeP, old_rnti);
+                }
 
-              if (UE_scheduling_control->ul_out_of_sync > 0) {
-                UE_scheduling_control->ul_out_of_sync = 0;
-                mac_eNB_rrc_ul_in_sync(enb_mod_idP, CC_idP, frameP, subframeP, old_rnti);
-              }
-              UE_template_ptr->ul_SR = 1;
-              UE_scheduling_control->crnti_reconfigurationcomplete_flag = 1;
+                UE_template_ptr->ul_SR = 1;
+                UE_scheduling_control->crnti_reconfigurationcomplete_flag = 1;
               } else {
                 cancel_ra_proc(enb_mod_idP, CC_idP, frameP, current_rnti);
               }
+
               // break;
             }
           }
@@ -553,7 +535,6 @@ rx_sdu(const module_id_t enb_mod_idP,
             UE_template_ptr->ul_buffer_info[LCGID1] +
             UE_template_ptr->ul_buffer_info[LCGID2] +
             UE_template_ptr->ul_buffer_info[LCGID3];
-
           RC.eNB[enb_mod_idP][CC_idP]->pusch_stats_bsr[UE_id][(frameP * 10) + subframeP] = (payload_ptr[0] & 0x3f);
 
           if (UE_id == UE_list->head) {
@@ -594,21 +575,19 @@ rx_sdu(const module_id_t enb_mod_idP,
           UE_template_ptr->ul_buffer_info[LCGID1] = BSR_TABLE[bsr1];
           UE_template_ptr->ul_buffer_info[LCGID2] = BSR_TABLE[bsr2];
           UE_template_ptr->ul_buffer_info[LCGID3] = BSR_TABLE[bsr3];
-
           UE_template_ptr->estimated_ul_buffer =
             UE_template_ptr->ul_buffer_info[LCGID0] +
             UE_template_ptr->ul_buffer_info[LCGID1] +
             UE_template_ptr->ul_buffer_info[LCGID2] +
             UE_template_ptr->ul_buffer_info[LCGID3];
-
           LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d: Received long BSR. Size is LCGID0 = %u LCGID1 = %u LCGID2 = %u LCGID3 = %u\n",
-            enb_mod_idP,
-            CC_idP,
-            rx_ces[i],
-            UE_template_ptr->ul_buffer_info[LCGID0],
-            UE_template_ptr->ul_buffer_info[LCGID1],
-            UE_template_ptr->ul_buffer_info[LCGID2],
-            UE_template_ptr->ul_buffer_info[LCGID3]);
+                enb_mod_idP,
+                CC_idP,
+                rx_ces[i],
+                UE_template_ptr->ul_buffer_info[LCGID0],
+                UE_template_ptr->ul_buffer_info[LCGID1],
+                UE_template_ptr->ul_buffer_info[LCGID2],
+                UE_template_ptr->ul_buffer_info[LCGID3]);
 
           if (crnti_rx == 1) {
             LOG_D(MAC, "[eNB %d] CC_id %d MAC CE_LCID %d: Received CRNTI.\n",
@@ -719,7 +698,6 @@ rx_sdu(const module_id_t enb_mod_idP,
                     frameP,
                     ra->rnti,
                     UE_id);
-
               UE_scheduling_control = &(UE_list->UE_sched_ctrl[UE_id]);
               UE_template_ptr = &(UE_list->UE_template[CC_idP][UE_id]);
             }
@@ -815,7 +793,7 @@ rx_sdu(const module_id_t enb_mod_idP,
           mac_rlc_data_ind(enb_mod_idP, current_rnti, enb_mod_idP, frameP, ENB_FLAG_YES, MBMS_FLAG_NO, rx_lcids[i], (char *) payload_ptr, rx_lengths[i], 1, NULL);  //(unsigned int*)crc_status);
           UE_list->eNB_UE_stats[CC_idP][UE_id].num_pdu_rx[rx_lcids[i]] += 1;
           UE_list->eNB_UE_stats[CC_idP][UE_id].num_bytes_rx[rx_lcids[i]] += rx_lengths[i];
-        
+
           if (mac_eNB_get_rrc_status(enb_mod_idP, current_rnti) < RRC_RECONFIGURED) {
             UE_list->UE_sched_ctrl[UE_id].uplane_inactivity_timer = 0;
           }
@@ -878,7 +856,6 @@ rx_sdu(const module_id_t enb_mod_idP,
               UE_list->eNB_UE_stats[CC_idP][UE_id].num_bytes_rx[rx_lcids[i]] += rx_lengths[i];
               /* Clear uplane_inactivity_timer */
               UE_scheduling_control->uplane_inactivity_timer = 0;
-
               /* Reset RRC inactivity timer after uplane activity */
               ue_contextP = rrc_eNB_get_ue_context(RC.rrc[enb_mod_idP], current_rnti);
 
@@ -920,7 +897,7 @@ rx_sdu(const module_id_t enb_mod_idP,
     if (UE_scheduling_control->cdrx_configured == TRUE) {
       /* Synchronous UL HARQ */
       UE_scheduling_control->ul_synchronous_harq_timer[CC_idP][harq_pid] = 5;
-      /* 
+      /*
        * The ACK is programmed in n+4 subframes, so UE will have drxRetransmission running.
        * Setting ul_synchronous_harq_timer = 5 will trigger drxRetransmission timer.
        * Note: in case of asynchronous UL HARQ process restart here relevant RTT timer
@@ -934,11 +911,9 @@ rx_sdu(const module_id_t enb_mod_idP,
         current_rnti,
         harq_pid,
         first_rb);
-
   nfapi_hi_dci0_request_t *hi_dci0_req;
   uint8_t sf_ahead_dl = ul_subframe2_k_phich(&mac->common_channels[CC_idP], subframeP);
   hi_dci0_req = &mac->HI_DCI0_req[CC_idP][(subframeP+sf_ahead_dl)%10];
-
   nfapi_hi_dci0_request_body_t *hi_dci0_req_body = &hi_dci0_req->hi_dci0_request_body;
   nfapi_hi_dci0_request_pdu_t *hi_dci0_pdu = &hi_dci0_req_body->hi_dci0_pdu_list[hi_dci0_req_body->number_of_dci +
                                       hi_dci0_req_body->number_of_hi];
@@ -1143,13 +1118,11 @@ schedule_ulsch(module_id_t module_idP,
   COMMON_channels_t *cc = NULL;
   int sched_subframe;
   int sched_frame;
-
   /* Init */
   mac = RC.mac[module_idP];
   sli = &(mac->slice_info);
   memset(first_rb, 0, NFAPI_CC_MAX * sizeof(uint16_t));
   start_meas(&(mac->schedule_ulsch));
-
   sched_subframe = (subframeP + 4) % 10;
   sched_frame = frameP;
   cc = mac->common_channels;
@@ -1260,13 +1233,26 @@ schedule_ulsch(module_id_t module_idP,
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
     first_rb[CC_id] = (emtc_active[CC_id] == 1) ? 7 : 1;
 #else
+
     /* Note: the size of PUCCH is arbitrary, to be done properly. */
     switch (RC.eNB[module_idP][CC_id]->frame_parms.N_RB_DL) {
-    case 25:  first_rb[CC_id] = 1; break; // leave out first RB for PUCCH
-    case 50:  first_rb[CC_id] = 2; break; // leave out first RB for PUCCH
-    case 100: first_rb[CC_id] = 3; break; // leave out first RB for PUCCH
-    default: LOG_E(MAC, "nb RBs not handled, todo.\n"); exit(1);
+      case 25:
+        first_rb[CC_id] = 1;
+        break; // leave out first RB for PUCCH
+
+      case 50:
+        first_rb[CC_id] = 2;
+        break; // leave out first RB for PUCCH
+
+      case 100:
+        first_rb[CC_id] = 3;
+        break; // leave out first RB for PUCCH
+
+      default:
+        LOG_E(MAC, "nb RBs not handled, todo.\n");
+        exit(1);
     }
+
 #endif
     RA_t *ra_ptr = cc->ra;
 
@@ -1392,6 +1378,7 @@ schedule_ulsch_rnti(module_id_t   module_idP,
   /* Note: RC.nb_mac_CC[module_idP] should be lower than or equal to NFAPI_CC_MAX */
   for (CC_id = 0; CC_id < RC.nb_mac_CC[module_idP]; CC_id++) {
     n_rb_ul_tab[CC_id] = to_prb(cc[CC_id].ul_Bandwidth); // return total number of PRB
+
     /* HACK: let's remove the PUCCH from available RBs
      * we suppose PUCCH size is:
      * - for 25 RBs: 1 RB (top and bottom of ressource grid)
@@ -1402,15 +1389,27 @@ schedule_ulsch_rnti(module_id_t   module_idP,
      * so we only remove the top part of the resource grid.
      */
     switch (n_rb_ul_tab[CC_id]) {
-    case 25:  n_rb_ul_tab[CC_id] -= 1; break;
-    case 50:  n_rb_ul_tab[CC_id] -= 2; break;
-    case 100: n_rb_ul_tab[CC_id] -= 3; break;
-    default: LOG_E(MAC, "RBs setting not handled. Todo.\n"); exit(1);
+      case 25:
+        n_rb_ul_tab[CC_id] -= 1;
+        break;
+
+      case 50:
+        n_rb_ul_tab[CC_id] -= 2;
+        break;
+
+      case 100:
+        n_rb_ul_tab[CC_id] -= 3;
+        break;
+
+      default:
+        LOG_E(MAC, "RBs setting not handled. Todo.\n");
+        exit(1);
     }
+
     UE_list->first_rb_offset[CC_id][slice_idx] = cmin(n_rb_ul_tab[CC_id], sli->ul[slice_idx].first_rb);
   }
 
-  /* 
+  /*
    * ULSCH preprocessor: set UE_template->
    * pre_allocated_nb_rb_ul[slice_idx]
    * pre_assigned_mcs_ul
@@ -1427,7 +1426,7 @@ schedule_ulsch_rnti(module_id_t   module_idP,
     if (!ue_ul_slice_membership(module_idP, UE_id, slice_idx)) {
       continue;
     }
-    
+
     if (UE_list->UE_template[UE_PCCID(module_idP, UE_id)][UE_id].rach_resource_type > 0)  continue;
 
     // don't schedule if Msg5 is not received yet
@@ -1455,7 +1454,6 @@ schedule_ulsch_rnti(module_id_t   module_idP,
     for (int n = 0; n < UE_list->numactiveULCCs[UE_id]; n++) {
       /* This is the actual CC_id in the list */
       CC_id = UE_list->ordered_ULCCids[n][UE_id];
-
       UE_template_ptr = &(UE_list->UE_template[CC_id][UE_id]);
       UE_sched_ctrl_ptr = &(UE_list->UE_sched_ctrl[UE_id]);
       harq_pid = subframe2harqpid(&cc[CC_id], sched_frame, sched_subframeP);
@@ -1497,7 +1495,6 @@ schedule_ulsch_rnti(module_id_t   module_idP,
               UE_sched_ctrl_ptr->ul_inactivity_timer,
               UE_sched_ctrl_ptr->ul_failure_timer,
               UE_sched_ctrl_ptr->cqi_req_timer);
-
         /* Reset the scheduling request */
         UE_template_ptr->ul_SR = 0;
         status = mac_eNB_get_rrc_status(module_idP, rnti);
@@ -1507,13 +1504,12 @@ schedule_ulsch_rnti(module_id_t   module_idP,
           /* Be sure that there are some free RBs */
           if (first_rb_slice[CC_id] >= n_rb_ul_tab[CC_id]) {
             LOG_W(MAC, "[eNB %d] frame %d, subframe %d, UE %d/%x CC %d: dropping, not enough RBs\n",
-              module_idP,
-              frameP,
-              subframeP,
-              UE_id,
-              rnti,
-              CC_id);
-
+                  module_idP,
+                  frameP,
+                  subframeP,
+                  UE_id,
+                  rnti,
+                  CC_id);
             continue;
           }
 
@@ -1521,27 +1517,27 @@ schedule_ulsch_rnti(module_id_t   module_idP,
           /* This test seems to be way too long, can we provide an optimization? */
           if (CCE_allocation_infeasible(module_idP, CC_id, 1, subframeP, aggregation, rnti)) {
             LOG_W(MAC, "[eNB %d] frame %d, subframe %d, UE %d/%x CC %d: not enough CCE\n",
-              module_idP,
-              frameP,
-              subframeP,
-              UE_id,
-              rnti,
-              CC_id);
-
+                  module_idP,
+                  frameP,
+                  subframeP,
+                  UE_id,
+                  rnti,
+                  CC_id);
             continue;
           }
-          
+
           /* Handle the aperiodic CQI report */
           cqi_req = 0;
           LOG_D(MAC,"RRC Conenction status %d, cqi_timer %d\n",status,UE_sched_ctrl_ptr->cqi_req_timer);
+
           if (status >= RRC_CONNECTED && UE_sched_ctrl_ptr->cqi_req_timer > 30) {
             if (UE_sched_ctrl_ptr->cqi_received == 0) {
               if (NFAPI_MODE != NFAPI_MONOLITHIC) {
                 cqi_req = 0;
               } else {
                 cqi_req = 1;
-
                 LOG_D(MAC,"Setting CQI_REQ (timer %d)\n",UE_sched_ctrl_ptr->cqi_req_timer);
+
                 /* TDD: to be safe, do not ask CQI in special Subframes:36.213/7.2.3 CQI definition */
                 if (cc[CC_id].tdd_Config) {
                   switch (cc[CC_id].tdd_Config->subframeAssignment) {
@@ -1549,12 +1545,14 @@ schedule_ulsch_rnti(module_id_t   module_idP,
                       if(subframeP == 1 || subframeP == 6) {
                         cqi_req=0;
                       }
+
                       break;
 
                     case 3:
                       if(subframeP == 1) {
                         cqi_req=0;
                       }
+
                       break;
 
                     default:
@@ -1583,7 +1581,6 @@ schedule_ulsch_rnti(module_id_t   module_idP,
            */
           snr = (5 * UE_sched_ctrl_ptr->pusch_snr[CC_id] - 640) / 10;
           target_snr = mac->puSch10xSnr / 10;
-
           /*
            * This assumes accumulated tpc
            * Make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out
@@ -1592,7 +1589,6 @@ schedule_ulsch_rnti(module_id_t   module_idP,
 
           if (((framex10psubframe + 10) <= (frameP * 10 + subframeP)) || // normal case
               ((framex10psubframe > (frameP * 10 + subframeP)) && (((10240 - framex10psubframe + frameP * 10 + subframeP) >= 10)))) { //frame wrap-around
-
             UE_template_ptr->pusch_tpc_tx_frame = frameP;
             UE_template_ptr->pusch_tpc_tx_subframe = subframeP;
 
@@ -1611,14 +1607,14 @@ schedule_ulsch_rnti(module_id_t   module_idP,
 
           if (tpc != 1) {
             LOG_D(MAC, "[eNB %d] ULSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, snr/target snr %d/%d\n",
-              module_idP,
-              frameP,
-              subframeP,
-              harq_pid,
-              tpc,
-              tpc_accumulated,
-              snr,
-              target_snr);
+                  module_idP,
+                  frameP,
+                  subframeP,
+                  harq_pid,
+                  tpc,
+                  tpc_accumulated,
+                  snr,
+                  target_snr);
           }
 
           ndi = 1 - UE_template_ptr->oldNDI_UL[harq_pid]; // NDI: new data indicator
@@ -1632,8 +1628,8 @@ schedule_ulsch_rnti(module_id_t   module_idP,
           if (UE_sched_ctrl_ptr->cdrx_configured) {
             UE_sched_ctrl_ptr->drx_inactivity_timer = 1; // reset drx inactivity timer when new transmission
             VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_DRX_INACTIVITY, (unsigned long) UE_sched_ctrl_ptr->drx_inactivity_timer);
-            UE_sched_ctrl_ptr->dci0_ongoing_timer = 1; // when set the UE_template_ptr->ul_SR cannot be set to 1, 
-                                                       // see definition for more information
+            UE_sched_ctrl_ptr->dci0_ongoing_timer = 1; // when set the UE_template_ptr->ul_SR cannot be set to 1,
+            // see definition for more information
           }
 
           if (UE_template_ptr->pre_allocated_rb_table_index_ul >= 0) {
@@ -1771,6 +1767,7 @@ schedule_ulsch_rnti(module_id_t   module_idP,
                                                  1,  // repetition_number
                                                  (frameP * 10) + subframeP);
           }
+
 #endif
 
           if (dlsch_flag == 1) {
@@ -1877,6 +1874,7 @@ schedule_ulsch_rnti(module_id_t   module_idP,
                                                0, // n_srs
                                                UE_template_ptr->TBS_UL[harq_pid]);
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
+
           /* This is a BL/CE UE allocation */
           if (UE_template_ptr->rach_resource_type > 0) {
             fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp_body->ul_config_pdu_list[ul_req_index],
@@ -1885,6 +1883,7 @@ schedule_ulsch_rnti(module_id_t   module_idP,
                                                  1, // repetition_number
                                                  (frameP * 10) + subframeP);
           }
+
 #endif
 
           if(dlsch_flag == 1) {
@@ -1916,14 +1915,14 @@ schedule_ulsch_rnti(module_id_t   module_idP,
           ul_req_tmp->sfn_sf = sched_frame<<4|sched_subframeP;
           ul_req_tmp->header.message_id = NFAPI_UL_CONFIG_REQUEST;
           LOG_D(MAC, "[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG.Request for UE %d/%x, ulsch_frame %d, ulsch_subframe %d cqi_req %d\n",
-            harq_pid,
-            frameP,
-            subframeP,
-            UE_id,
-            rnti,
-            sched_frame,
-            sched_subframeP,
-            cqi_req);
+                harq_pid,
+                frameP,
+                subframeP,
+                UE_id,
+                rnti,
+                sched_frame,
+                sched_subframeP,
+                cqi_req);
 
           /* HACK: RBs used by retransmission have to be reserved.
            * The current mechanism uses the notion of 'first_rb', so
@@ -1937,7 +1936,7 @@ schedule_ulsch_rnti(module_id_t   module_idP,
            */
           if (first_rb_slice[CC_id] < UE_template_ptr->first_rb_ul[harq_pid] + UE_template_ptr->nb_rb_ul[harq_pid])
             first_rb_slice[CC_id] = UE_template_ptr->first_rb_ul[harq_pid] + UE_template_ptr->nb_rb_ul[harq_pid];
-        }  // end of round > 0 
+        }  // end of round > 0
       }  // UE_is_to_be_scheduled
     }  // loop over all active CC_ids
   }  // loop over UE_ids
@@ -1977,8 +1976,8 @@ void schedule_ulsch_rnti_emtc(module_id_t   module_idP,
   UE_list_t         *UE_list = &(eNB->UE_list);
   UE_TEMPLATE       *UE_template = NULL;
   UE_sched_ctrl_t     *UE_sched_ctrl = NULL;
-  uint8_t	    Total_Num_Rep_ULSCH,pusch_maxNumRepetitionCEmodeA_r13;
-  uint8_t	    UL_Scheduling_DCI_SF,UL_Scheduling_DCI_Frame_Even_Odd_Flag;							//TODO: To be removed after scheduler relaxation Task
+  uint8_t     Total_Num_Rep_ULSCH,pusch_maxNumRepetitionCEmodeA_r13;
+  uint8_t     UL_Scheduling_DCI_SF,UL_Scheduling_DCI_Frame_Even_Odd_Flag;             //TODO: To be removed after scheduler relaxation Task
 
   if (sched_subframeP < subframeP) {
     sched_frame++;
@@ -2046,367 +2045,362 @@ void schedule_ulsch_rnti_emtc(module_id_t   module_idP,
             N_RB_UL);
       RC.eNB[module_idP][CC_id]->pusch_stats_BO[UE_id][(frameP*10)+subframeP] = UE_template->estimated_ul_buffer;
       VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_BO, UE_template->estimated_ul_buffer);
-
       pusch_maxNumRepetitionCEmodeA_r13= *(rrc->configuration.pusch_maxNumRepetitionCEmodeA_r13[CC_id]);
       Total_Num_Rep_ULSCH = pusch_repetition_Table8_2_36213[pusch_maxNumRepetitionCEmodeA_r13][UE_template->pusch_repetition_levels];
-      UL_Scheduling_DCI_SF = (40-4 - Total_Num_Rep_ULSCH)%10;										//TODO: [eMTC Scheduler] To be removed after scheduler relaxation task
-      UL_Scheduling_DCI_Frame_Even_Odd_Flag= ! (((40-4 - Total_Num_Rep_ULSCH)/10 )%2);							//TODO: [eMTC Scheduler] To be removed after scheduler relaxation task
+      UL_Scheduling_DCI_SF = (40-4 - Total_Num_Rep_ULSCH)%10;                   //TODO: [eMTC Scheduler] To be removed after scheduler relaxation task
+      UL_Scheduling_DCI_Frame_Even_Odd_Flag= ! (((40-4 - Total_Num_Rep_ULSCH)/10 )%2);              //TODO: [eMTC Scheduler] To be removed after scheduler relaxation task
 
       /* If frameP odd don't schedule */
-      if ((frameP&1) == UL_Scheduling_DCI_Frame_Even_Odd_Flag)										//TODO: [eMTC Scheduler] To be removed after scheduler relaxation task
-      {
+      if ((frameP&1) == UL_Scheduling_DCI_Frame_Even_Odd_Flag) {                  //TODO: [eMTC Scheduler] To be removed after scheduler relaxation task
+        //if ((UE_is_to_be_scheduled(module_idP, CC_id, UE_id) > 0) && (subframeP == 5)) {
+        if ((UE_template->ul_SR > 0 || round_UL > 0 || status < RRC_CONNECTED) && (subframeP == UL_Scheduling_DCI_SF)) {
+          /*
+           * if there is information on bsr of DCCH, DTCH,
+           * or if there is UL_SR,
+           * or if there is a packet to retransmit,
+           * or we want to schedule a periodic feedback every frame
+           */
+          LOG_D(MAC,"[eNB %d][PUSCH %d] Frame %d subframe %d Scheduling UE %d/%x in round_UL %d(SR %d,UL_inactivity timer %d,UL_failure timer %d,cqi_req_timer %d)\n",
+                module_idP,
+                harq_pid,
+                frameP,
+                subframeP,
+                UE_id,
+                rnti,
+                round_UL,
+                UE_template->ul_SR,
+                UE_sched_ctrl->ul_inactivity_timer,
+                UE_sched_ctrl->ul_failure_timer,
+                UE_sched_ctrl->cqi_req_timer);
+          /* Reset the scheduling request */
+          emtc_active[CC_id] = 1;
+          UE_template->ul_SR = 0;
+          status = mac_eNB_get_rrc_status(module_idP,rnti);
+          cqi_req = 0;
+          /* Power control: compute the expected ULSCH RX snr (for the stats) */
+          /* This is the normalized snr and this should be constant (regardless of mcs) */
+          snr = (5 * UE_sched_ctrl->pusch_snr[CC_id] - 640) / 10;
+          target_snr = eNB->puSch10xSnr / 10; /* TODO: target_rx_power was 178, what to put? */
+          /* This assumes accumulated tpc */
+          /* Make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out */
+          int32_t framex10psubframe = UE_template->pusch_tpc_tx_frame * 10 + UE_template->pusch_tpc_tx_subframe;
 
+          if (((framex10psubframe + 10) <= (frameP * 10 + subframeP)) || // normal case
+              ((framex10psubframe > (frameP * 10 + subframeP)) && (((10240 - framex10psubframe + frameP * 10 + subframeP) >= 10)))) { // frame wrap-around
+            UE_template->pusch_tpc_tx_frame = frameP;
+            UE_template->pusch_tpc_tx_subframe = subframeP;
 
-      //if ((UE_is_to_be_scheduled(module_idP, CC_id, UE_id) > 0) && (subframeP == 5)) {
-      if ((UE_template->ul_SR > 0 || round_UL > 0 || status < RRC_CONNECTED) && (subframeP == UL_Scheduling_DCI_SF)) {
-        /*
-         * if there is information on bsr of DCCH, DTCH,
-         * or if there is UL_SR,
-         * or if there is a packet to retransmit,
-         * or we want to schedule a periodic feedback every frame
-         */
-        LOG_D(MAC,"[eNB %d][PUSCH %d] Frame %d subframe %d Scheduling UE %d/%x in round_UL %d(SR %d,UL_inactivity timer %d,UL_failure timer %d,cqi_req_timer %d)\n",
-              module_idP,
-              harq_pid,
-              frameP,
-              subframeP,
-              UE_id,
-              rnti,
-              round_UL,
-              UE_template->ul_SR,
-              UE_sched_ctrl->ul_inactivity_timer,
-              UE_sched_ctrl->ul_failure_timer,
-              UE_sched_ctrl->cqi_req_timer);
-        /* Reset the scheduling request */
-        emtc_active[CC_id] = 1;
-        UE_template->ul_SR = 0;
-        status = mac_eNB_get_rrc_status(module_idP,rnti);
-        cqi_req = 0;
-        /* Power control: compute the expected ULSCH RX snr (for the stats) */
-        /* This is the normalized snr and this should be constant (regardless of mcs) */
-        snr = (5 * UE_sched_ctrl->pusch_snr[CC_id] - 640) / 10;
-        target_snr = eNB->puSch10xSnr / 10; /* TODO: target_rx_power was 178, what to put? */
-        /* This assumes accumulated tpc */
-        /* Make sure that we are only sending a tpc update once a frame, otherwise the control loop will freak out */
-        int32_t framex10psubframe = UE_template->pusch_tpc_tx_frame * 10 + UE_template->pusch_tpc_tx_subframe;
-
-        if (((framex10psubframe + 10) <= (frameP * 10 + subframeP)) || // normal case
-            ((framex10psubframe > (frameP * 10 + subframeP)) && (((10240 - framex10psubframe + frameP * 10 + subframeP) >= 10)))) { // frame wrap-around
-          UE_template->pusch_tpc_tx_frame = frameP;
-          UE_template->pusch_tpc_tx_subframe = subframeP;
-
-          if (snr > target_snr + 4) {
-            tpc = 0; //-1
-            UE_sched_ctrl->tpc_accumulated[CC_id]--;
-          } else if (snr < target_snr - 4) {
-            tpc = 2; //+1
-            UE_sched_ctrl->tpc_accumulated[CC_id]++;
+            if (snr > target_snr + 4) {
+              tpc = 0; //-1
+              UE_sched_ctrl->tpc_accumulated[CC_id]--;
+            } else if (snr < target_snr - 4) {
+              tpc = 2; //+1
+              UE_sched_ctrl->tpc_accumulated[CC_id]++;
+            } else {
+              tpc = 1; //0
+            }
           } else {
             tpc = 1; //0
           }
-        } else {
-          tpc = 1; //0
-        }
 
-        if (tpc != 1) {
-          LOG_D(MAC,"[eNB %d] ULSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, snr/target snr %d/%d\n",
-                module_idP,
-                frameP,
-                subframeP,
-                harq_pid,
-                tpc,
-                UE_sched_ctrl->tpc_accumulated[CC_id],
-                snr,
-                target_snr);
-        }
+          if (tpc != 1) {
+            LOG_D(MAC,"[eNB %d] ULSCH scheduler: frame %d, subframe %d, harq_pid %d, tpc %d, accumulated %d, snr/target snr %d/%d\n",
+                  module_idP,
+                  frameP,
+                  subframeP,
+                  harq_pid,
+                  tpc,
+                  UE_sched_ctrl->tpc_accumulated[CC_id],
+                  snr,
+                  target_snr);
+          }
 
-        /* New transmission */
-        if (round_UL == 0) {
-          ndi = 1 - UE_template->oldNDI_UL[harq_pid];
-          UE_template->oldNDI_UL[harq_pid] = ndi;
-          UE_template->mcs_UL[harq_pid] = 4;
-          UE_template->TBS_UL[harq_pid] = get_TBS_UL(UE_template->mcs_UL[harq_pid], 6);
-          UE_list->eNB_UE_stats[CC_id][UE_id].snr = snr;
-          UE_list->eNB_UE_stats[CC_id][UE_id].target_snr = target_snr;
-          UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1 = 4;
-          UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2 = UE_template->mcs_UL[harq_pid];
-          UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx += 6;
-          UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_TBS = UE_template->TBS_UL[harq_pid];
-          T(T_ENB_MAC_UE_UL_SCHEDULE,
-            T_INT(module_idP),
-            T_INT(CC_id),
-            T_INT(rnti),
-            T_INT(frameP),
-            T_INT(subframeP),
-            T_INT(harq_pid),
-            T_INT(UE_template->mcs_UL[harq_pid]),
-            T_INT(0),
-            T_INT(6),
-            T_INT(UE_template->TBS_UL[harq_pid]),
-            T_INT(ndi));
-          /* Store for possible retransmission */
-          UE_template->nb_rb_ul[harq_pid]    = 6;
-          UE_sched_ctrl->ul_scheduled |= (1 << harq_pid);
+          /* New transmission */
+          if (round_UL == 0) {
+            ndi = 1 - UE_template->oldNDI_UL[harq_pid];
+            UE_template->oldNDI_UL[harq_pid] = ndi;
+            UE_template->mcs_UL[harq_pid] = 4;
+            UE_template->TBS_UL[harq_pid] = get_TBS_UL(UE_template->mcs_UL[harq_pid], 6);
+            UE_list->eNB_UE_stats[CC_id][UE_id].snr = snr;
+            UE_list->eNB_UE_stats[CC_id][UE_id].target_snr = target_snr;
+            UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1 = 4;
+            UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs2 = UE_template->mcs_UL[harq_pid];
+            UE_list->eNB_UE_stats[CC_id][UE_id].total_rbs_used_rx += 6;
+            UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_TBS = UE_template->TBS_UL[harq_pid];
+            T(T_ENB_MAC_UE_UL_SCHEDULE,
+              T_INT(module_idP),
+              T_INT(CC_id),
+              T_INT(rnti),
+              T_INT(frameP),
+              T_INT(subframeP),
+              T_INT(harq_pid),
+              T_INT(UE_template->mcs_UL[harq_pid]),
+              T_INT(0),
+              T_INT(6),
+              T_INT(UE_template->TBS_UL[harq_pid]),
+              T_INT(ndi));
+            /* Store for possible retransmission */
+            UE_template->nb_rb_ul[harq_pid]    = 6;
+            UE_sched_ctrl->ul_scheduled |= (1 << harq_pid);
+
+            if (UE_id == UE_list->head) {
+              VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_SCHEDULED, UE_sched_ctrl->ul_scheduled);
+            }
 
-          if (UE_id == UE_list->head) {
-            VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_UE0_SCHEDULED, UE_sched_ctrl->ul_scheduled);
+            /* Adjust total UL buffer status by TBS, wait for UL sdus to do final update */
+            UE_template->scheduled_ul_bytes += UE_template->TBS_UL[harq_pid];
+            LOG_D(MAC, "scheduled_ul_bytes, new %d\n", UE_template->scheduled_ul_bytes);
+            /* Cyclic shift for DMRS */
+            cshift = 0; // values from 0 to 7 can be used for mapping the cyclic shift (36.211 , Table 5.5.2.1.1-1)
+            /* save it for a potential retransmission */
+            UE_template->cshift[harq_pid] = cshift;
+            AssertFatal (UE_template->physicalConfigDedicated != NULL, "UE_template->physicalConfigDedicated is null\n");
+            AssertFatal (UE_template->physicalConfigDedicated->ext4 != NULL, "UE_template->physicalConfigDedicated->ext4 is null\n");
+            AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 != NULL, "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 is null\n");
+            AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.present == LTE_EPDCCH_Config_r11__config_r11_PR_setup,
+                         "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.present != setup\n");
+            AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11 != NULL,
+                         "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11 = NULL\n");
+            LTE_EPDCCH_SetConfig_r11_t *epdcch_setconfig_r11 = UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11->list.array[0];
+            AssertFatal(epdcch_setconfig_r11 != NULL, "epdcch_setconfig_r11 is null\n");
+            AssertFatal(epdcch_setconfig_r11->ext2 != NULL, "epdcch_setconfig_r11->ext2 is null\n");
+            AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13 != NULL, "epdcch_setconfig_r11->ext2->mpdcch_config_r13 is null");
+            AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13->present == LTE_EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13_PR_setup,
+                        "epdcch_setconfig_r11->ext2->mpdcch_config_r13->present is not setup\n");
+            AssertFatal(epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310 != NULL, "epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310 is null");
+            AssertFatal(epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310->present == LTE_EPDCCH_SetConfig_r11__ext2__numberPRB_Pairs_v1310_PR_setup,
+                        "epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310->present is not setup\n");
+            LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL 6-0A MPDCCH for BL/CE UE %d/%x, ulsch_frame %d, ulsch_subframe %d, UESS MPDCCH Narrowband %d\n",
+                  harq_pid,
+                  frameP,
+                  subframeP,
+                  UE_id,
+                  rnti,
+                  sched_frame,
+                  sched_subframeP,
+                  (int)epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1);
+            UE_template->first_rb_ul[harq_pid] = narrowband_to_first_rb (cc, epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1);
+            hi_dci0_pdu = &(hi_dci0_req->hi_dci0_pdu_list[hi_dci0_req->number_of_dci + hi_dci0_req->number_of_hi]);
+            memset((void *) hi_dci0_pdu, 0, sizeof(nfapi_hi_dci0_request_pdu_t));
+            hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_MPDCCH_DCI_PDU_TYPE;
+            hi_dci0_pdu->pdu_size = (uint8_t) (2 + sizeof (nfapi_dl_config_mpdcch_pdu));
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dci_format = (UE_template->rach_resource_type > 1) ? 5 : 4;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ce_mode = (UE_template->rach_resource_type > 1) ? 2 : 1;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mpdcch_narrowband = epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_prb_pairs = 6;       // checked above that it has to be this
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.resource_block_assignment = 0; // Note: this can be dynamic
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mpdcch_transmission_type = epdcch_setconfig_r11->transmissionType_r11;  // distibuted
+            AssertFatal(UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11 != NULL,
+                        "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11 is null\n");
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.start_symbol = *UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ecce_index = 0;        // Note: this should be dynamic
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.aggreagation_level = 24;        // OK for CEModeA r1-3 (9.1.5-1b) or CEModeB r1-4
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.rnti_type = 4; // other
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.rnti = rnti;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ce_mode = (UE_template->rach_resource_type < 3) ? 1 : 2; // already set above...
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.drms_scrambling_init = epdcch_setconfig_r11->dmrs_ScramblingSequenceInt_r11;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.initial_transmission_sf_io = (frameP * 10) + subframeP;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.transmission_power = 6000;     // 0dB
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.resource_block_start = UE_template->first_rb_ul[harq_pid];
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_resource_blocks = 6;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mcs = 4;       // adjust according to size of RAR, 208 bits with N1A_PRB = 3
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.pusch_repetition_levels = UE_template->pusch_repetition_levels;
+            AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_pdsch_HoppingConfig_r13 == LTE_EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13__setup__mpdcch_pdsch_HoppingConfig_r13_off,
+                        "epdcch_setconfig_r11->ext2->mpdcch_config_r13->mpdcch_pdsch_HoppingConfig_r13 is not off\n");
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.frequency_hopping_flag = 1 - epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_pdsch_HoppingConfig_r13;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.redudency_version = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.new_data_indication = UE_template->oldNDI_UL[harq_pid];
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.harq_process = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.tpc = tpc;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.csi_request = cqi_req;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ul_inex = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dai_presence_flag = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dl_assignment_index = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.srs_request = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dci_subframe_repetition_number = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.tcp_bitmap = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.total_dci_length_include_padding = 29; // hard-coded for 10 MHz
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_tx_antenna_ports = 1;
+            hi_dci0_req->number_of_dci++;
+            LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG. Request for BL/CE UE %d/%x, ulsch_frame %d, ulsch_subframe %d, UESS mpdcch narrowband %d\n",
+                  harq_pid,
+                  frameP,
+                  subframeP,
+                  UE_id,
+                  rnti,
+                  sched_frame,
+                  sched_subframeP,
+                  (int)epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1);
+            fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
+                                                 cqi_req,
+                                                 cc,
+                                                 UE_template->physicalConfigDedicated,
+                                                 get_tmode(module_idP,CC_id,UE_id),
+                                                 eNB->ul_handle,
+                                                 rnti,
+                                                 UE_template->first_rb_ul[harq_pid], // resource_block_start
+                                                 UE_template->nb_rb_ul[harq_pid], // number_of_resource_blocks
+                                                 UE_template->mcs_UL[harq_pid],
+                                                 cshift, // cyclic_shift_2_for_drms
+                                                 0, // frequency_hopping_enabled_flag
+                                                 0, // frequency_hopping_bits
+                                                 UE_template->oldNDI_UL[harq_pid], // new_data_indication
+                                                 rvidx_tab[round_UL&3], // redundancy_version
+                                                 harq_pid, // harq_process_number
+                                                 0, // ul_tx_mode
+                                                 0, // current_tx_nb
+                                                 0, // n_srs
+                                                 UE_template->TBS_UL[harq_pid]
+                                                );
+            fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
+                                                 UE_template->rach_resource_type > 2 ? 2 : 1,
+                                                 Total_Num_Rep_ULSCH, // total_number_of_repetitions
+                                                 1, // repetition_number
+                                                 (frameP * 10) + subframeP);
+            ul_req_tmp->number_of_pdus++;
+            eNB->ul_handle++;
+            add_ue_ulsch_info(module_idP,
+                              CC_id,
+                              UE_id,
+                              subframeP,
+                              S_UL_SCHEDULED);
+            LOG_D(MAC,"[eNB %d] CC_id %d Frame %d, subframeP %d: Generated ULSCH DCI for next UE_id %d, format 0\n",
+                  module_idP,
+                  CC_id,
+                  frameP,
+                  subframeP,
+                  UE_id);
+          } else { // round_UL > 0 => retransmission
+            /* In LTE-M the UL HARQ process is asynchronous */
+            T(T_ENB_MAC_UE_UL_SCHEDULE_RETRANSMISSION,
+              T_INT(module_idP),
+              T_INT(CC_id),
+              T_INT(rnti),
+              T_INT(frameP),
+              T_INT(subframeP),
+              T_INT(harq_pid),
+              T_INT(UE_template->mcs_UL[harq_pid]),
+              T_INT(0),
+              T_INT(6),
+              T_INT(round_UL));
+            AssertFatal (UE_template->physicalConfigDedicated != NULL, "UE_template->physicalConfigDedicated is null\n");
+            AssertFatal (UE_template->physicalConfigDedicated->ext4 != NULL, "UE_template->physicalConfigDedicated->ext4 is null\n");
+            AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 != NULL, "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 is null\n");
+            AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.present == LTE_EPDCCH_Config_r11__config_r11_PR_setup,
+                         "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.present != setup\n");
+            AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11 != NULL,
+                         "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11 = NULL\n");
+            LTE_EPDCCH_SetConfig_r11_t *epdcch_setconfig_r11 = UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11->list.array[0];
+            AssertFatal(epdcch_setconfig_r11 != NULL, "epdcch_setconfig_r11 is null\n");
+            AssertFatal(epdcch_setconfig_r11->ext2 != NULL, "epdcch_setconfig_r11->ext2 is null\n");
+            AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13 != NULL, "epdcch_setconfig_r11->ext2->mpdcch_config_r13 is null");
+            AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13 != NULL, "epdcch_setconfig_r11->ext2->mpdcch_config_r13 is null");
+            AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13->present == LTE_EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13_PR_setup,
+                        "epdcch_setconfig_r11->ext2->mpdcch_config_r13->present is not setup\n");
+            AssertFatal(epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310 != NULL, "epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310 is null");
+            AssertFatal(epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310->present == LTE_EPDCCH_SetConfig_r11__ext2__numberPRB_Pairs_v1310_PR_setup,
+                        "epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310->present is not setup\n");
+            LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL 6-0A MPDCCH for BL/CE UE %d/%x, ulsch_frame %d, ulsch_subframe %d,UESS MPDCCH Narrowband %d\n",
+                  harq_pid,
+                  frameP,
+                  subframeP,
+                  UE_id,
+                  rnti,
+                  sched_frame,
+                  sched_subframeP,
+                  (int)epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1);
+            UE_template->first_rb_ul[harq_pid] = narrowband_to_first_rb(cc, epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13-1);
+            hi_dci0_pdu = &(hi_dci0_req->hi_dci0_pdu_list[hi_dci0_req->number_of_dci+hi_dci0_req->number_of_hi]);
+            memset((void *) hi_dci0_pdu, 0, sizeof(nfapi_hi_dci0_request_pdu_t));
+            hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_MPDCCH_DCI_PDU_TYPE;
+            hi_dci0_pdu->pdu_size = (uint8_t) (2 + sizeof (nfapi_dl_config_mpdcch_pdu));
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dci_format = (UE_template->rach_resource_type > 1) ? 5 : 4;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ce_mode = (UE_template->rach_resource_type > 1) ? 2 : 1;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mpdcch_narrowband = epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_prb_pairs = 6;       // checked above that it has to be this
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.resource_block_assignment = 0; // Note: this can be dynamic
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mpdcch_transmission_type = epdcch_setconfig_r11->transmissionType_r11;  // distibuted
+            AssertFatal(UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11 != NULL,
+                        "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11 is null\n");
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.start_symbol = *UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ecce_index = 0;        // Note: this should be dynamic
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.aggreagation_level = 24;        // OK for CEModeA r1-3 (9.1.5-1b) or CEModeB r1-4
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.rnti_type = 4; // other
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.rnti = rnti;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ce_mode = (UE_template->rach_resource_type < 3) ? 1 : 2;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.drms_scrambling_init = epdcch_setconfig_r11->dmrs_ScramblingSequenceInt_r11;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.initial_transmission_sf_io = (frameP * 10) + subframeP;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.transmission_power = 6000;     // 0dB
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.resource_block_start = UE_template->first_rb_ul[harq_pid];
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_resource_blocks = 6;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mcs = 4;       // adjust according to size of RAR, 208 bits with N1A_PRB=3
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.pusch_repetition_levels = 0;
+            AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_pdsch_HoppingConfig_r13 == LTE_EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13__setup__mpdcch_pdsch_HoppingConfig_r13_off,
+                        "epdcch_setconfig_r11->ext2->mpdcch_config_r13->mpdcch_pdsch_HoppingConfig_r13 is not off\n");
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.frequency_hopping_flag  = 1 - epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_pdsch_HoppingConfig_r13;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.redudency_version = rvidx_tab[round_UL&3];
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.new_data_indication = UE_template->oldNDI_UL[harq_pid];
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.harq_process = harq_pid;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.tpc = tpc;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.csi_request = cqi_req;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ul_inex = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dai_presence_flag = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dl_assignment_index = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.srs_request = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dci_subframe_repetition_number = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.tcp_bitmap = 0;
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.total_dci_length_include_padding = 29; // hard-coded for 10 MHz
+            hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_tx_antenna_ports = 1;
+            hi_dci0_req->number_of_dci++;
+            fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
+                                                 cqi_req,
+                                                 cc,
+                                                 UE_template->physicalConfigDedicated,
+                                                 get_tmode(module_idP,CC_id,UE_id),
+                                                 eNB->ul_handle,
+                                                 rnti,
+                                                 UE_template->first_rb_ul[harq_pid], // resource_block_start
+                                                 UE_template->nb_rb_ul[harq_pid], // number_of_resource_blocks
+                                                 UE_template->mcs_UL[harq_pid],
+                                                 cshift, // cyclic_shift_2_for_drms
+                                                 0, // frequency_hopping_enabled_flag
+                                                 0, // frequency_hopping_bits
+                                                 UE_template->oldNDI_UL[harq_pid], // new_data_indication
+                                                 rvidx_tab[round_UL&3], // redundancy_version
+                                                 harq_pid, // harq_process_number
+                                                 0, // ul_tx_mode
+                                                 0, // current_tx_nb
+                                                 0, // n_srs
+                                                 UE_template->TBS_UL[harq_pid]
+                                                );
+            fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
+                                                 UE_template->rach_resource_type>2 ? 2 : 1,
+                                                 1, //total_number_of_repetitions
+                                                 1, //repetition_number
+                                                 (frameP * 10) + subframeP);
+            ul_req_tmp->number_of_pdus++;
+            eNB->ul_handle++;
           }
-
-          /* Adjust total UL buffer status by TBS, wait for UL sdus to do final update */
-          UE_template->scheduled_ul_bytes += UE_template->TBS_UL[harq_pid];
-          LOG_D(MAC, "scheduled_ul_bytes, new %d\n", UE_template->scheduled_ul_bytes);
-          /* Cyclic shift for DMRS */
-          cshift = 0; // values from 0 to 7 can be used for mapping the cyclic shift (36.211 , Table 5.5.2.1.1-1)
-          /* save it for a potential retransmission */
-          UE_template->cshift[harq_pid] = cshift;
-          AssertFatal (UE_template->physicalConfigDedicated != NULL, "UE_template->physicalConfigDedicated is null\n");
-          AssertFatal (UE_template->physicalConfigDedicated->ext4 != NULL, "UE_template->physicalConfigDedicated->ext4 is null\n");
-          AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 != NULL, "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 is null\n");
-          AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.present == LTE_EPDCCH_Config_r11__config_r11_PR_setup,
-                       "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.present != setup\n");
-          AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11 != NULL,
-                       "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11 = NULL\n");
-          LTE_EPDCCH_SetConfig_r11_t *epdcch_setconfig_r11 = UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11->list.array[0];
-          AssertFatal(epdcch_setconfig_r11 != NULL, "epdcch_setconfig_r11 is null\n");
-          AssertFatal(epdcch_setconfig_r11->ext2 != NULL, "epdcch_setconfig_r11->ext2 is null\n");
-          AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13 != NULL, "epdcch_setconfig_r11->ext2->mpdcch_config_r13 is null");
-          AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13->present == LTE_EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13_PR_setup,
-                      "epdcch_setconfig_r11->ext2->mpdcch_config_r13->present is not setup\n");
-          AssertFatal(epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310 != NULL, "epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310 is null");
-          AssertFatal(epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310->present == LTE_EPDCCH_SetConfig_r11__ext2__numberPRB_Pairs_v1310_PR_setup,
-                      "epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310->present is not setup\n");
-          LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL 6-0A MPDCCH for BL/CE UE %d/%x, ulsch_frame %d, ulsch_subframe %d, UESS MPDCCH Narrowband %d\n",
-                harq_pid,
-                frameP,
-                subframeP,
-                UE_id,
-                rnti,
-                sched_frame,
-                sched_subframeP,
-                (int)epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1);
-          UE_template->first_rb_ul[harq_pid] = narrowband_to_first_rb (cc, epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1);
-          hi_dci0_pdu = &(hi_dci0_req->hi_dci0_pdu_list[hi_dci0_req->number_of_dci + hi_dci0_req->number_of_hi]);
-          memset((void *) hi_dci0_pdu, 0, sizeof(nfapi_hi_dci0_request_pdu_t));
-          hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_MPDCCH_DCI_PDU_TYPE;
-          hi_dci0_pdu->pdu_size = (uint8_t) (2 + sizeof (nfapi_dl_config_mpdcch_pdu));
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dci_format = (UE_template->rach_resource_type > 1) ? 5 : 4;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ce_mode = (UE_template->rach_resource_type > 1) ? 2 : 1;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mpdcch_narrowband = epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_prb_pairs = 6;       // checked above that it has to be this
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.resource_block_assignment = 0; // Note: this can be dynamic
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mpdcch_transmission_type = epdcch_setconfig_r11->transmissionType_r11;  // distibuted
-          AssertFatal(UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11 != NULL,
-                      "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11 is null\n");
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.start_symbol = *UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ecce_index = 0;        // Note: this should be dynamic
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.aggreagation_level = 24;        // OK for CEModeA r1-3 (9.1.5-1b) or CEModeB r1-4
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.rnti_type = 4; // other
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.rnti = rnti;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ce_mode = (UE_template->rach_resource_type < 3) ? 1 : 2; // already set above...
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.drms_scrambling_init = epdcch_setconfig_r11->dmrs_ScramblingSequenceInt_r11;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.initial_transmission_sf_io = (frameP * 10) + subframeP;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.transmission_power = 6000;     // 0dB
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.resource_block_start = UE_template->first_rb_ul[harq_pid];
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_resource_blocks = 6;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mcs = 4;       // adjust according to size of RAR, 208 bits with N1A_PRB = 3
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.pusch_repetition_levels = UE_template->pusch_repetition_levels;
-          AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_pdsch_HoppingConfig_r13 == LTE_EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13__setup__mpdcch_pdsch_HoppingConfig_r13_off,
-                      "epdcch_setconfig_r11->ext2->mpdcch_config_r13->mpdcch_pdsch_HoppingConfig_r13 is not off\n");
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.frequency_hopping_flag = 1 - epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_pdsch_HoppingConfig_r13;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.redudency_version = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.new_data_indication = UE_template->oldNDI_UL[harq_pid];
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.harq_process = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.tpc = tpc;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.csi_request = cqi_req;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ul_inex = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dai_presence_flag = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dl_assignment_index = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.srs_request = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dci_subframe_repetition_number = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.tcp_bitmap = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.total_dci_length_include_padding = 29; // hard-coded for 10 MHz
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_tx_antenna_ports = 1;
-          hi_dci0_req->number_of_dci++;
-          LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL CONFIG. Request for BL/CE UE %d/%x, ulsch_frame %d, ulsch_subframe %d, UESS mpdcch narrowband %d\n",
-                harq_pid,
-                frameP,
-                subframeP,
-                UE_id,
-                rnti,
-                sched_frame,
-                sched_subframeP,
-                (int)epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1);
-          fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
-                                               cqi_req,
-                                               cc,
-                                               UE_template->physicalConfigDedicated,
-                                               get_tmode(module_idP,CC_id,UE_id),
-                                               eNB->ul_handle,
-                                               rnti,
-                                               UE_template->first_rb_ul[harq_pid], // resource_block_start
-                                               UE_template->nb_rb_ul[harq_pid], // number_of_resource_blocks
-                                               UE_template->mcs_UL[harq_pid],
-                                               cshift, // cyclic_shift_2_for_drms
-                                               0, // frequency_hopping_enabled_flag
-                                               0, // frequency_hopping_bits
-                                               UE_template->oldNDI_UL[harq_pid], // new_data_indication
-                                               rvidx_tab[round_UL&3], // redundancy_version
-                                               harq_pid, // harq_process_number
-                                               0, // ul_tx_mode
-                                               0, // current_tx_nb
-                                               0, // n_srs
-                                               UE_template->TBS_UL[harq_pid]
-                                              );
-          fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
-                                               UE_template->rach_resource_type > 2 ? 2 : 1,
-                                               Total_Num_Rep_ULSCH, // total_number_of_repetitions
-                                               1, // repetition_number
-                                               (frameP * 10) + subframeP);
-          ul_req_tmp->number_of_pdus++;
-          eNB->ul_handle++;
-          add_ue_ulsch_info(module_idP,
-                            CC_id,
-                            UE_id,
-                            subframeP,
-                            S_UL_SCHEDULED);
-          LOG_D(MAC,"[eNB %d] CC_id %d Frame %d, subframeP %d: Generated ULSCH DCI for next UE_id %d, format 0\n",
-                module_idP,
-                CC_id,
-                frameP,
-                subframeP,
-                UE_id);
-        } else { // round_UL > 0 => retransmission
-          /* In LTE-M the UL HARQ process is asynchronous */
-          T(T_ENB_MAC_UE_UL_SCHEDULE_RETRANSMISSION,
-            T_INT(module_idP),
-            T_INT(CC_id),
-            T_INT(rnti),
-            T_INT(frameP),
-            T_INT(subframeP),
-            T_INT(harq_pid),
-            T_INT(UE_template->mcs_UL[harq_pid]),
-            T_INT(0),
-            T_INT(6),
-            T_INT(round_UL));
-          AssertFatal (UE_template->physicalConfigDedicated != NULL, "UE_template->physicalConfigDedicated is null\n");
-          AssertFatal (UE_template->physicalConfigDedicated->ext4 != NULL, "UE_template->physicalConfigDedicated->ext4 is null\n");
-          AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 != NULL, "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11 is null\n");
-          AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.present == LTE_EPDCCH_Config_r11__config_r11_PR_setup,
-                       "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.present != setup\n");
-          AssertFatal (UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11 != NULL,
-                       "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11 = NULL\n");
-          LTE_EPDCCH_SetConfig_r11_t *epdcch_setconfig_r11 = UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.setConfigToAddModList_r11->list.array[0];
-          AssertFatal(epdcch_setconfig_r11 != NULL, "epdcch_setconfig_r11 is null\n");
-          AssertFatal(epdcch_setconfig_r11->ext2 != NULL, "epdcch_setconfig_r11->ext2 is null\n");
-          AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13 != NULL, "epdcch_setconfig_r11->ext2->mpdcch_config_r13 is null");
-          AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13 != NULL, "epdcch_setconfig_r11->ext2->mpdcch_config_r13 is null");
-          AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13->present == LTE_EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13_PR_setup,
-                      "epdcch_setconfig_r11->ext2->mpdcch_config_r13->present is not setup\n");
-          AssertFatal(epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310 != NULL, "epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310 is null");
-          AssertFatal(epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310->present == LTE_EPDCCH_SetConfig_r11__ext2__numberPRB_Pairs_v1310_PR_setup,
-                      "epdcch_setconfig_r11->ext2->numberPRB_Pairs_v1310->present is not setup\n");
-          LOG_D(MAC,"[PUSCH %d] Frame %d, Subframe %d: Adding UL 6-0A MPDCCH for BL/CE UE %d/%x, ulsch_frame %d, ulsch_subframe %d,UESS MPDCCH Narrowband %d\n",
-                harq_pid,
-                frameP,
-                subframeP,
-                UE_id,
-                rnti,
-                sched_frame,
-                sched_subframeP,
-                (int)epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1);
-          UE_template->first_rb_ul[harq_pid] = narrowband_to_first_rb(cc, epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13-1);
-          hi_dci0_pdu = &(hi_dci0_req->hi_dci0_pdu_list[hi_dci0_req->number_of_dci+hi_dci0_req->number_of_hi]);
-          memset((void *) hi_dci0_pdu, 0, sizeof(nfapi_hi_dci0_request_pdu_t));
-          hi_dci0_pdu->pdu_type = NFAPI_HI_DCI0_MPDCCH_DCI_PDU_TYPE;
-          hi_dci0_pdu->pdu_size = (uint8_t) (2 + sizeof (nfapi_dl_config_mpdcch_pdu));
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dci_format = (UE_template->rach_resource_type > 1) ? 5 : 4;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ce_mode = (UE_template->rach_resource_type > 1) ? 2 : 1;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mpdcch_narrowband = epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_Narrowband_r13 - 1;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_prb_pairs = 6;       // checked above that it has to be this
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.resource_block_assignment = 0; // Note: this can be dynamic
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mpdcch_transmission_type = epdcch_setconfig_r11->transmissionType_r11;  // distibuted
-          AssertFatal(UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11 != NULL,
-                      "UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11 is null\n");
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.start_symbol = *UE_template->physicalConfigDedicated->ext4->epdcch_Config_r11->config_r11.choice.setup.startSymbol_r11;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ecce_index = 0;        // Note: this should be dynamic
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.aggreagation_level = 24;        // OK for CEModeA r1-3 (9.1.5-1b) or CEModeB r1-4
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.rnti_type = 4; // other
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.rnti = rnti;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ce_mode = (UE_template->rach_resource_type < 3) ? 1 : 2;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.drms_scrambling_init = epdcch_setconfig_r11->dmrs_ScramblingSequenceInt_r11;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.initial_transmission_sf_io = (frameP * 10) + subframeP;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.transmission_power = 6000;     // 0dB
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.resource_block_start = UE_template->first_rb_ul[harq_pid];
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_resource_blocks = 6;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.mcs = 4;       // adjust according to size of RAR, 208 bits with N1A_PRB=3
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.pusch_repetition_levels = 0;
-          AssertFatal(epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_pdsch_HoppingConfig_r13 == LTE_EPDCCH_SetConfig_r11__ext2__mpdcch_config_r13__setup__mpdcch_pdsch_HoppingConfig_r13_off,
-                      "epdcch_setconfig_r11->ext2->mpdcch_config_r13->mpdcch_pdsch_HoppingConfig_r13 is not off\n");
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.frequency_hopping_flag  = 1 - epdcch_setconfig_r11->ext2->mpdcch_config_r13->choice.setup.mpdcch_pdsch_HoppingConfig_r13;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.redudency_version = rvidx_tab[round_UL&3];
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.new_data_indication = UE_template->oldNDI_UL[harq_pid];
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.harq_process = harq_pid;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.tpc = tpc;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.csi_request = cqi_req;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.ul_inex = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dai_presence_flag = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dl_assignment_index = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.srs_request = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.dci_subframe_repetition_number = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.tcp_bitmap = 0;
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.total_dci_length_include_padding = 29; // hard-coded for 10 MHz
-          hi_dci0_pdu->mpdcch_dci_pdu.mpdcch_dci_pdu_rel13.number_of_tx_antenna_ports = 1;
-          hi_dci0_req->number_of_dci++;
-          fill_nfapi_ulsch_config_request_rel8(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
-                                               cqi_req,
-                                               cc,
-                                               UE_template->physicalConfigDedicated,
-                                               get_tmode(module_idP,CC_id,UE_id),
-                                               eNB->ul_handle,
-                                               rnti,
-                                               UE_template->first_rb_ul[harq_pid], // resource_block_start
-                                               UE_template->nb_rb_ul[harq_pid], // number_of_resource_blocks
-                                               UE_template->mcs_UL[harq_pid],
-                                               cshift, // cyclic_shift_2_for_drms
-                                               0, // frequency_hopping_enabled_flag
-                                               0, // frequency_hopping_bits
-                                               UE_template->oldNDI_UL[harq_pid], // new_data_indication
-                                               rvidx_tab[round_UL&3], // redundancy_version
-                                               harq_pid, // harq_process_number
-                                               0, // ul_tx_mode
-                                               0, // current_tx_nb
-                                               0, // n_srs
-                                               UE_template->TBS_UL[harq_pid]
-                                              );
-          fill_nfapi_ulsch_config_request_emtc(&ul_req_tmp->ul_config_pdu_list[ul_req_tmp->number_of_pdus],
-                                               UE_template->rach_resource_type>2 ? 2 : 1,
-                                               1, //total_number_of_repetitions
-                                               1, //repetition_number
-                                               (frameP * 10) + subframeP);
-          ul_req_tmp->number_of_pdus++;
-          eNB->ul_handle++;
-        }
-      } // UE_is_to_be_scheduled
-    } // ULCCs
-   } // loop over UE_id
+        } // UE_is_to_be_scheduled
+      } // ULCCs
+    } // loop over UE_id
   } // Schedule new ULSCH
 
   // This section is to repeat ULSCH PDU for a number of MTC repetitions
-  for(int i=0;i<ul_req_tmp->number_of_pdus;i++)
-  {
-	  ul_config_pdu = &ul_req_tmp->ul_config_pdu_list[i];
-	  if (ul_config_pdu->pdu_type!=NFAPI_UL_CONFIG_ULSCH_PDU_TYPE) // Repeat ULSCH PDUs only
-		  continue ;
-
-	  if(ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.repetition_number < ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.total_number_of_repetitions)
-	  {
-		  ul_req_body_Rep = &eNB->UL_req_tmp[CC_id][(sched_subframeP+1)%10].ul_config_request_body;
-		  ul_config_pdu_Rep = &ul_req_body_Rep->ul_config_pdu_list[ul_req_body_Rep->number_of_pdus];
-		  memcpy ((void *) ul_config_pdu_Rep, ul_config_pdu, sizeof (nfapi_ul_config_request_pdu_t));
-		  ul_config_pdu_Rep->ulsch_pdu.ulsch_pdu_rel8.handle = eNB->ul_handle++;
-		  ul_config_pdu_Rep->ulsch_pdu.ulsch_pdu_rel13.repetition_number = ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.repetition_number +1;
-		  ul_req_body_Rep->number_of_pdus++;
-	  } //repetition_number < total_number_of_repetitions
+  for(int i=0; i<ul_req_tmp->number_of_pdus; i++) {
+    ul_config_pdu = &ul_req_tmp->ul_config_pdu_list[i];
+
+    if (ul_config_pdu->pdu_type!=NFAPI_UL_CONFIG_ULSCH_PDU_TYPE) // Repeat ULSCH PDUs only
+      continue ;
+
+    if(ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.repetition_number < ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.total_number_of_repetitions) {
+      ul_req_body_Rep = &eNB->UL_req_tmp[CC_id][(sched_subframeP+1)%10].ul_config_request_body;
+      ul_config_pdu_Rep = &ul_req_body_Rep->ul_config_pdu_list[ul_req_body_Rep->number_of_pdus];
+      memcpy ((void *) ul_config_pdu_Rep, ul_config_pdu, sizeof (nfapi_ul_config_request_pdu_t));
+      ul_config_pdu_Rep->ulsch_pdu.ulsch_pdu_rel8.handle = eNB->ul_handle++;
+      ul_config_pdu_Rep->ulsch_pdu.ulsch_pdu_rel13.repetition_number = ul_config_pdu->ulsch_pdu.ulsch_pdu_rel13.repetition_number +1;
+      ul_req_body_Rep->number_of_pdus++;
+    } //repetition_number < total_number_of_repetitions
   }   // For loop on PDUs
 }
 #endif
diff --git a/openair2/LAYER2/MAC/pre_processor.c b/openair2/LAYER2/MAC/pre_processor.c
index 0dc11b0e45a4fa7f35c7964615065435e4794eeb..40f9334bfab3be7d1dd184d85f5ae7a6f47b616d 100644
--- a/openair2/LAYER2/MAC/pre_processor.c
+++ b/openair2/LAYER2/MAC/pre_processor.c
@@ -2024,6 +2024,14 @@ static int ue_ul_compare(const void *_a, const void *_b, void *_params) {
       UE_list->UE_template[pCCid2][UE_id2].pre_assigned_mcs_ul)
     return 1;
 
+  if (UE_list->UE_sched_ctrl[UE_id1].cqi_req_timer >
+      UE_list->UE_sched_ctrl[UE_id2].cqi_req_timer)
+    return -1;
+
+  if (UE_list->UE_sched_ctrl[UE_id1].cqi_req_timer <
+      UE_list->UE_sched_ctrl[UE_id2].cqi_req_timer)
+    return 1;
+
   return 0;
 }
 
diff --git a/openair2/LAYER2/MAC/ra_procedures.c b/openair2/LAYER2/MAC/ra_procedures.c
index 70cee3e24bc26f41a600f6cb0d1083ae6508e501..bfa8660c9e3a36c2729c4d8510edb9f3ed1433e7 100644
--- a/openair2/LAYER2/MAC/ra_procedures.c
+++ b/openair2/LAYER2/MAC/ra_procedures.c
@@ -255,17 +255,11 @@ Msg1_transmitted(module_id_t module_idP, uint8_t CC_id,
               "Transmission on secondary CCs is not supported yet\n");
   // start contention resolution timer
   UE_mac_inst[module_idP].RA_attempt_number++;
-
-  if (opt_enabled) {
-    trace_pdu(DIRECTION_UPLINK, NULL, 0, module_idP, WS_NO_RNTI,
-              UE_mac_inst[module_idP].RA_prach_resources.
-              ra_PreambleIndex, UE_mac_inst[module_idP].txFrame,
-              UE_mac_inst[module_idP].txSubframe, 0,
-              UE_mac_inst[module_idP].RA_attempt_number);
-    LOG_D(OPT,
-          "[UE %d][RAPROC] TX MSG1 Frame %d trace pdu for rnti %x  with size %d\n",
-          module_idP, frameP, 1, UE_mac_inst[module_idP].RA_Msg3_size);
-  }
+  trace_pdu(DIRECTION_UPLINK, NULL, 0, module_idP, WS_NO_RNTI,
+            UE_mac_inst[module_idP].RA_prach_resources.
+            ra_PreambleIndex, UE_mac_inst[module_idP].txFrame,
+            UE_mac_inst[module_idP].txSubframe, 0,
+            UE_mac_inst[module_idP].RA_attempt_number);
 }
 
 
@@ -280,19 +274,11 @@ Msg3_transmitted(module_id_t module_idP, uint8_t CC_id,
         module_idP, frameP);
   UE_mac_inst[module_idP].RA_contention_resolution_cnt = 0;
   UE_mac_inst[module_idP].RA_contention_resolution_timer_active = 1;
-
-  if (opt_enabled) {    // msg3
-    trace_pdu(DIRECTION_UPLINK, &UE_mac_inst[module_idP].CCCH_pdu.payload[0],
-              UE_mac_inst[module_idP].RA_Msg3_size, module_idP, WS_C_RNTI,
-              UE_mac_inst[module_idP].crnti,
-              UE_mac_inst[module_idP].txFrame,
-              UE_mac_inst[module_idP].txSubframe, 0, 0);
-    LOG_D(OPT,
-          "[UE %d][RAPROC] MSG3 Frame %d trace pdu Preamble %d   with size %d\n",
-          module_idP, frameP, UE_mac_inst[module_idP].crnti
-          /*UE_mac_inst[module_idP].RA_prach_resources.ra_PreambleIndex */
-          , UE_mac_inst[module_idP].RA_Msg3_size);
-  }
+  trace_pdu(DIRECTION_UPLINK, &UE_mac_inst[module_idP].CCCH_pdu.payload[0],
+            UE_mac_inst[module_idP].RA_Msg3_size, module_idP, WS_C_RNTI,
+            UE_mac_inst[module_idP].crnti,
+            UE_mac_inst[module_idP].txFrame,
+            UE_mac_inst[module_idP].txSubframe, 0, 0);
 }
 
 
diff --git a/openair2/LAYER2/MAC/rar_tools.c b/openair2/LAYER2/MAC/rar_tools.c
index cb18d8dffe7d60e811707aec00058a876b1c2b2a..e7af451f6ba079b126855827b19d34cb43e983c6 100644
--- a/openair2/LAYER2/MAC/rar_tools.c
+++ b/openair2/LAYER2/MAC/rar_tools.c
@@ -49,63 +49,54 @@ extern RAN_CONTEXT_t RC;
 //------------------------------------------------------------------------------
 unsigned short
 fill_rar(const module_id_t module_idP,
-	 const int CC_id,
-	 RA_t * ra,
-	 const frame_t frameP,
-	 uint8_t * const dlsch_buffer,
-	 const uint16_t N_RB_UL, const uint8_t input_buffer_length)
+         const int CC_id,
+         RA_t *ra,
+         const frame_t frameP,
+         uint8_t *const dlsch_buffer,
+         const uint16_t N_RB_UL, const uint8_t input_buffer_length)
 //------------------------------------------------------------------------------
 {
-
-    RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *) dlsch_buffer;
-    uint8_t *rar = (uint8_t *) (dlsch_buffer + 1);
-
-
-    // subheader fixed
-    rarh->E = 0;		// First and last RAR
-    rarh->T = 1;		// 0 for E/T/R/R/BI subheader, 1 for E/T/RAPID subheader
-    rarh->RAPID = ra->preamble_index;	// Respond to Preamble 0 only for the moment
-    rar[4] = (uint8_t) (ra->rnti >> 8);
-    rar[5] = (uint8_t) (ra->rnti & 0xff);
-    //ra->timing_offset = 0;
-    ra->timing_offset /= 16;	//T_A = N_TA/16, where N_TA should be on a 30.72Msps
-    rar[0] = (uint8_t) (ra->timing_offset >> (2 + 4));	// 7 MSBs of timing advance + divide by 4
-    rar[1] = (uint8_t) (ra->timing_offset << (4 - 2)) & 0xf0;	// 4 LSBs of timing advance + divide by 4
-    COMMON_channels_t *cc = &RC.mac[module_idP]->common_channels[CC_id];
-    if(N_RB_UL == 25){
-      ra->msg3_first_rb = 1;
-    }else{
-      if (cc->tdd_Config && N_RB_UL == 100) {
-        ra->msg3_first_rb = 3;
-      } else {
-        ra->msg3_first_rb = 2;
-      }
-    }
-    ra->msg3_nb_rb = 1;
-    uint16_t rballoc = mac_computeRIV(N_RB_UL, ra->msg3_first_rb, ra->msg3_nb_rb);	// first PRB only for UL Grant
-    rar[1] |= (rballoc >> 7) & 7;	// Hopping = 0 (bit 3), 3 MSBs of rballoc
-    rar[2] = ((uint8_t) (rballoc & 0xff)) << 1;	// 7 LSBs of rballoc
-    ra->msg3_mcs = 10;
-    ra->msg3_TPC = 3;
-    ra->msg3_ULdelay = 0;
-    ra->msg3_cqireq = 0;
-    ra->msg3_round = 0;
-    rar[2] |= ((ra->msg3_mcs & 0x8) >> 3);	// mcs 10
-    rar[3] =
-	(((ra->msg3_mcs & 0x7) << 5)) | ((ra->msg3_TPC & 7) << 2) |
-	((ra->msg3_ULdelay & 1) << 1) | (ra->msg3_cqireq & 1);
-
-    if (opt_enabled) {
-	trace_pdu(DIRECTION_DOWNLINK , dlsch_buffer, input_buffer_length, module_idP,  WS_RA_RNTI , 1,
-		  RC.mac[module_idP]->frame, RC.mac[module_idP]->subframe,
-		  0, 0);
-	LOG_D(OPT,
-	      "[eNB %d][RAPROC] CC_id %d RAR Frame %d trace pdu for rnti %x and  rapid %d size %d\n",
-	      module_idP, CC_id, frameP, ra->rnti, rarh->RAPID,
-	      input_buffer_length);
+  RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *) dlsch_buffer;
+  uint8_t *rar = (uint8_t *) (dlsch_buffer + 1);
+  // subheader fixed
+  rarh->E = 0;    // First and last RAR
+  rarh->T = 1;    // 0 for E/T/R/R/BI subheader, 1 for E/T/RAPID subheader
+  rarh->RAPID = ra->preamble_index; // Respond to Preamble 0 only for the moment
+  rar[4] = (uint8_t) (ra->rnti >> 8);
+  rar[5] = (uint8_t) (ra->rnti & 0xff);
+  //ra->timing_offset = 0;
+  ra->timing_offset /= 16;  //T_A = N_TA/16, where N_TA should be on a 30.72Msps
+  rar[0] = (uint8_t) (ra->timing_offset >> (2 + 4));  // 7 MSBs of timing advance + divide by 4
+  rar[1] = (uint8_t) (ra->timing_offset << (4 - 2)) & 0xf0; // 4 LSBs of timing advance + divide by 4
+  COMMON_channels_t *cc = &RC.mac[module_idP]->common_channels[CC_id];
+
+  if(N_RB_UL == 25) {
+    ra->msg3_first_rb = 1;
+  } else {
+    if (cc->tdd_Config && N_RB_UL == 100) {
+      ra->msg3_first_rb = 3;
+    } else {
+      ra->msg3_first_rb = 2;
     }
+  }
 
-    return (ra->rnti);
+  ra->msg3_nb_rb = 1;
+  uint16_t rballoc = mac_computeRIV(N_RB_UL, ra->msg3_first_rb, ra->msg3_nb_rb);  // first PRB only for UL Grant
+  rar[1] |= (rballoc >> 7) & 7; // Hopping = 0 (bit 3), 3 MSBs of rballoc
+  rar[2] = ((uint8_t) (rballoc & 0xff)) << 1; // 7 LSBs of rballoc
+  ra->msg3_mcs = 10;
+  ra->msg3_TPC = 3;
+  ra->msg3_ULdelay = 0;
+  ra->msg3_cqireq = 0;
+  ra->msg3_round = 0;
+  rar[2] |= ((ra->msg3_mcs & 0x8) >> 3);  // mcs 10
+  rar[3] =
+    (((ra->msg3_mcs & 0x7) << 5)) | ((ra->msg3_TPC & 7) << 2) |
+    ((ra->msg3_ULdelay & 1) << 1) | (ra->msg3_cqireq & 1);
+  trace_pdu(DIRECTION_DOWNLINK, dlsch_buffer, input_buffer_length, module_idP,  WS_RA_RNTI, 1,
+            RC.mac[module_idP]->frame, RC.mac[module_idP]->subframe,
+            0, 0);
+  return (ra->rnti);
 }
 
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
@@ -118,14 +109,13 @@ unsigned short fill_rar_br(eNB_MAC_INST *eNB,
                            RA_t *ra,
                            const frame_t frameP,
                            const sub_frame_t subframeP,
-                           uint8_t* const dlsch_buffer,
+                           uint8_t *const dlsch_buffer,
                            const uint8_t ce_level)
 //------------------------------------------------------------------------------
 {
   RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *) dlsch_buffer;
   COMMON_channels_t *cc = &eNB->common_channels[CC_id];
   uint8_t *rar = (uint8_t *)(dlsch_buffer + 1);
-
   uint32_t rballoc = 0;
   uint32_t ULdelay = 0;
   uint32_t cqireq = 0;
@@ -133,30 +123,24 @@ unsigned short fill_rar_br(eNB_MAC_INST *eNB,
   uint32_t TPC = 0;
   int input_buffer_length = 0;
   int N_NB_index = 0;
-
   AssertFatal(ra != NULL, "RA is null \n");
-  
   /* Subheader fixed */
-  rarh->E = 0;		// First and last RAR
-  rarh->T = 1;		// 0 for E/T/R/R/BI subheader, 1 for E/T/RAPID subheader
-  rarh->RAPID = ra->preamble_index;	// Respond to Preamble
-
+  rarh->E = 0;    // First and last RAR
+  rarh->T = 1;    // 0 for E/T/R/R/BI subheader, 1 for E/T/RAPID subheader
+  rarh->RAPID = ra->preamble_index; // Respond to Preamble
   /* RAR PDU */
   /* TA Command */
-  ra->timing_offset /= 16;	// T_A = N_TA/16, where N_TA should be on a 30.72Msps
-  rar[0] = (uint8_t) (ra->timing_offset >> 4) & 0x7f;	// 7 MSBs of timing advance
-  rar[1] = (uint8_t) (ra->timing_offset & 0x0f) << 4;	// 4 LSBs of timing advance
-  
+  ra->timing_offset /= 16;  // T_A = N_TA/16, where N_TA should be on a 30.72Msps
+  rar[0] = (uint8_t) (ra->timing_offset >> 4) & 0x7f; // 7 MSBs of timing advance
+  rar[1] = (uint8_t) (ra->timing_offset & 0x0f) << 4; // 4 LSBs of timing advance
   /* Copy the Msg2 narrowband */
   ra->msg34_narrowband = ra->msg2_narrowband;
   ra->msg3_first_rb    = 0;
   ra->msg3_nb_rb       = 2;
 
-  if (ce_level < 2) {	// CE Level 0, 1 (CEmodeA)
+  if (ce_level < 2) { // CE Level 0, 1 (CEmodeA)
     input_buffer_length = 6;
-    
     N_NB_index = get_numnarrowbandbits(cc->mib->message.dl_Bandwidth);
-
     /* UL Grant */
     ra->msg3_mcs = 7;
     TPC = 3; // no power increase
@@ -164,7 +148,6 @@ unsigned short fill_rar_br(eNB_MAC_INST *eNB,
     cqireq = 0;
     mpdcch_nb_index = 0;
     rballoc = mac_computeRIV(6, ra->msg3_first_rb, ra->msg3_nb_rb);
-
     uint32_t buffer = 0;
     buffer |= ra->msg34_narrowband << (16 + (4 - N_NB_index));
     buffer |= ((rballoc & 0x0F) << (12 + (4 - N_NB_index)));
@@ -174,21 +157,15 @@ unsigned short fill_rar_br(eNB_MAC_INST *eNB,
     buffer |= ((cqireq & 0x01) << (3 + (4 - N_NB_index)));
     buffer |= ((ULdelay & 0x01) << (2 + (4 - N_NB_index)));
     buffer |= (mpdcch_nb_index << (4 - N_NB_index));
-
     rar[1] |= (uint8_t) (buffer >> 16) & 0x0F;
     rar[2] = (uint8_t) (buffer >> 8) & 0xFF;
     rar[3] = (uint8_t) buffer & 0xFF;
-
     /* RA CRNTI */
     rar[4] = (uint8_t)(ra->rnti >> 8);
     rar[5] = (uint8_t)(ra->rnti & 0xff);
-  
   } else { // CE level 2, 3 (CEModeB)
-
     AssertFatal(1 == 0, "Shouldn't get here ...\n");
-
     input_buffer_length = 5;
-
     rar[3] = (uint8_t)(ra->rnti >> 8);
     rar[4] = (uint8_t)(ra->rnti & 0xff);
   }
@@ -196,7 +173,7 @@ unsigned short fill_rar_br(eNB_MAC_INST *eNB,
   LOG_I(MAC, "[RAPROC] Frame %d Subframe %d : Generating RAR BR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for ce_level %d, CRNTI %x, preamble %d/%d, TIMING OFFSET %d\n",
         frameP,
         subframeP,
-        *(uint8_t*) rarh,
+        *(uint8_t *) rarh,
         rar[0],
         rar[1],
         rar[2],
@@ -208,26 +185,16 @@ unsigned short fill_rar_br(eNB_MAC_INST *eNB,
         rarh->RAPID,
         ra->preamble_index,
         ra->timing_offset);
-
-  if (opt_enabled) {
-    trace_pdu(DIRECTION_DOWNLINK, 
-              dlsch_buffer, 
-              input_buffer_length, 
-              eNB->Mod_id,  
-              WS_RA_RNTI, 
-              1, 
-              eNB->frame, 
-              eNB->subframe, 
-              0, 
-              0);
-
-    LOG_D(OPT, "[RAPROC] RAR Frame %d trace pdu for rnti %x and rapid %d size %d\n",
-	        frameP, 
-          ra->rnti, 
-          rarh->RAPID, 
-          input_buffer_length);
-  }
-
+  trace_pdu(DIRECTION_DOWNLINK,
+            dlsch_buffer,
+            input_buffer_length,
+            eNB->Mod_id,
+            WS_RA_RNTI,
+            1,
+            eNB->frame,
+            eNB->subframe,
+            0,
+            0);
   return (ra->rnti);
 }
 #endif
diff --git a/openair2/LAYER2/MAC/rar_tools_ue.c b/openair2/LAYER2/MAC/rar_tools_ue.c
index 35d1f7925e55ddc07c0d37dbe4217f19a0910aa0..611aaf865b27d1d36f21785f7dbdcfa2ef086764 100644
--- a/openair2/LAYER2/MAC/rar_tools_ue.c
+++ b/openair2/LAYER2/MAC/rar_tools_ue.c
@@ -41,103 +41,96 @@
 #define DEBUG_RAR
 
 //------------------------------------------------------------------------------
-uint16_t ue_process_rar(const module_id_t module_idP, const int CC_id, const frame_t frameP, const rnti_t ra_rnti, uint8_t * const dlsch_buffer, rnti_t * const t_crnti, const uint8_t preamble_index, uint8_t * selected_rar_buffer	// output argument for storing the selected RAR header and RAR payload
-    )
+uint16_t ue_process_rar(const module_id_t module_idP, const int CC_id, const frame_t frameP, const rnti_t ra_rnti, uint8_t *const dlsch_buffer, rnti_t *const t_crnti, const uint8_t preamble_index,
+                        uint8_t *selected_rar_buffer   // output argument for storing the selected RAR header and RAR payload
+                       )
 //------------------------------------------------------------------------------
 {
-    uint16_t ret = 0;		// return value
-
-    RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *) dlsch_buffer;
-    //  RAR_PDU *rar = (RAR_PDU *)(dlsch_buffer+1);
-    uint8_t *rar = (uint8_t *) (dlsch_buffer + 1);
-
-    // get the last RAR payload for working with CMW500
-    uint8_t n_rarpy = 0;	// number of RAR payloads
-    uint8_t n_rarh = 0;		// number of MAC RAR subheaders
-    uint8_t best_rx_rapid = -1;	// the closest RAPID receive from all RARs
-    while (1) {
-	n_rarh++;
-	if (rarh->T == 1) {
-	    n_rarpy++;
-	    LOG_D(MAC, "RAPID %d\n", rarh->RAPID);
-	}
-
-	if (rarh->RAPID == preamble_index) {
-	    LOG_D(PHY, "Found RAR with the intended RAPID %d\n",
-		  rarh->RAPID);
-	    rar = (uint8_t *) (dlsch_buffer + n_rarh + (n_rarpy - 1) * 6);
-	    break;
-	}
-
-	if (abs((int) rarh->RAPID - (int) preamble_index) <
-	    abs((int) best_rx_rapid - (int) preamble_index)) {
-	    best_rx_rapid = rarh->RAPID;
-	    rar = (uint8_t *) (dlsch_buffer + n_rarh + (n_rarpy - 1) * 6);
-	}
-
-	if (rarh->E == 0) {
-	    LOG_I(PHY,
-		  "No RAR found with the intended RAPID. The closest RAPID in all RARs is %d\n",
-		  best_rx_rapid);
-	    break;
-	} else {
-	    rarh++;
-	}
-    };
-    LOG_D(MAC, "number of RAR subheader %d; number of RAR pyloads %d\n",
-	  n_rarh, n_rarpy);
-
-    if (CC_id > 0) {
-	LOG_W(MAC, "Should not have received RAR on secondary CCs! \n");
-	return (0xffff);
+  uint16_t ret = 0;   // return value
+  RA_HEADER_RAPID *rarh = (RA_HEADER_RAPID *) dlsch_buffer;
+  //  RAR_PDU *rar = (RAR_PDU *)(dlsch_buffer+1);
+  uint8_t *rar = (uint8_t *) (dlsch_buffer + 1);
+  // get the last RAR payload for working with CMW500
+  uint8_t n_rarpy = 0;  // number of RAR payloads
+  uint8_t n_rarh = 0;   // number of MAC RAR subheaders
+  uint8_t best_rx_rapid = -1; // the closest RAPID receive from all RARs
+
+  while (1) {
+    n_rarh++;
+
+    if (rarh->T == 1) {
+      n_rarpy++;
+      LOG_D(MAC, "RAPID %d\n", rarh->RAPID);
     }
 
-    LOG_I(MAC,
-	  "[UE %d][RAPROC] Frame %d Received RAR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for preamble %d/%d\n",
-	  module_idP, frameP, *(uint8_t *) rarh, rar[0], rar[1], rar[2],
-	  rar[3], rar[4], rar[5], rarh->RAPID, preamble_index);
-#ifdef DEBUG_RAR
-    LOG_D(MAC, "[UE %d][RAPROC] rarh->E %d\n", module_idP, rarh->E);
-    LOG_D(MAC, "[UE %d][RAPROC] rarh->T %d\n", module_idP, rarh->T);
-    LOG_D(MAC, "[UE %d][RAPROC] rarh->RAPID %d\n", module_idP,
-	  rarh->RAPID);
-
-    //  LOG_I(MAC,"[UE %d][RAPROC] rar->R %d\n",module_idP,rar->R);
-    LOG_D(MAC, "[UE %d][RAPROC] rar->Timing_Advance_Command %d\n",
-	  module_idP, (((uint16_t) (rar[0] & 0x7f)) << 4) + (rar[1] >> 4));
-    //  LOG_I(MAC,"[UE %d][RAPROC] rar->hopping_flag %d\n",module_idP,rar->hopping_flag);
-    //  LOG_I(MAC,"[UE %d][RAPROC] rar->rb_alloc %d\n",module_idP,rar->rb_alloc);
-    //  LOG_I(MAC,"[UE %d][RAPROC] rar->mcs %d\n",module_idP,rar->mcs);
-    //  LOG_I(MAC,"[UE %d][RAPROC] rar->TPC %d\n",module_idP,rar->TPC);
-    //  LOG_I(MAC,"[UE %d][RAPROC] rar->UL_delay %d\n",module_idP,rar->UL_delay);
-    //  LOG_I(MAC,"[UE %d][RAPROC] rar->cqi_req %d\n",module_idP,rar->cqi_req);
-    LOG_D(MAC, "[UE %d][RAPROC] rar->t_crnti %x\n", module_idP,
-	  (uint16_t) rar[5] + (rar[4] << 8));
-#endif
+    if (rarh->RAPID == preamble_index) {
+      LOG_D(PHY, "Found RAR with the intended RAPID %d\n",
+            rarh->RAPID);
+      rar = (uint8_t *) (dlsch_buffer + n_rarh + (n_rarpy - 1) * 6);
+      break;
+    }
 
-    if (opt_enabled) {
-	LOG_D(OPT,
-	      "[UE %d][RAPROC] CC_id %d RAR Frame %d trace pdu for ra-RNTI %x\n",
-	      module_idP, CC_id, frameP, ra_rnti);
-	trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) dlsch_buffer, n_rarh + n_rarpy * 6,
-		  module_idP, WS_RA_RNTI, ra_rnti, UE_mac_inst[module_idP].rxFrame,
-		  UE_mac_inst[module_idP].rxSubframe, 0, 0);
+    if (abs((int) rarh->RAPID - (int) preamble_index) <
+        abs((int) best_rx_rapid - (int) preamble_index)) {
+      best_rx_rapid = rarh->RAPID;
+      rar = (uint8_t *) (dlsch_buffer + n_rarh + (n_rarpy - 1) * 6);
     }
 
-    if (preamble_index == rarh->RAPID) {
-	*t_crnti = (uint16_t) rar[5] + (rar[4] << 8);	//rar->t_crnti;
-	UE_mac_inst[module_idP].crnti = *t_crnti;	//rar->t_crnti;
-	//return(rar->Timing_Advance_Command);
-	ret = ((((uint16_t) (rar[0] & 0x7f)) << 4) + (rar[1] >> 4));
+    if (rarh->E == 0) {
+      LOG_I(PHY,
+            "No RAR found with the intended RAPID. The closest RAPID in all RARs is %d\n",
+            best_rx_rapid);
+      break;
     } else {
-	UE_mac_inst[module_idP].crnti = 0;
-	ret = (0xffff);
+      rarh++;
     }
+  };
 
-    // move the selected RAR to the front of the RA_PDSCH buffer
-    memcpy(selected_rar_buffer + 0, (uint8_t *) rarh, 1);
-    memcpy(selected_rar_buffer + 1, (uint8_t *) rar, 6);
+  LOG_D(MAC, "number of RAR subheader %d; number of RAR pyloads %d\n",
+        n_rarh, n_rarpy);
 
-    return ret;
+  if (CC_id > 0) {
+    LOG_W(MAC, "Should not have received RAR on secondary CCs! \n");
+    return (0xffff);
+  }
 
+  LOG_I(MAC,
+        "[UE %d][RAPROC] Frame %d Received RAR (%02x|%02x.%02x.%02x.%02x.%02x.%02x) for preamble %d/%d\n",
+        module_idP, frameP, *(uint8_t *) rarh, rar[0], rar[1], rar[2],
+        rar[3], rar[4], rar[5], rarh->RAPID, preamble_index);
+#ifdef DEBUG_RAR
+  LOG_D(MAC, "[UE %d][RAPROC] rarh->E %d\n", module_idP, rarh->E);
+  LOG_D(MAC, "[UE %d][RAPROC] rarh->T %d\n", module_idP, rarh->T);
+  LOG_D(MAC, "[UE %d][RAPROC] rarh->RAPID %d\n", module_idP,
+        rarh->RAPID);
+  //  LOG_I(MAC,"[UE %d][RAPROC] rar->R %d\n",module_idP,rar->R);
+  LOG_D(MAC, "[UE %d][RAPROC] rar->Timing_Advance_Command %d\n",
+        module_idP, (((uint16_t) (rar[0] & 0x7f)) << 4) + (rar[1] >> 4));
+  //  LOG_I(MAC,"[UE %d][RAPROC] rar->hopping_flag %d\n",module_idP,rar->hopping_flag);
+  //  LOG_I(MAC,"[UE %d][RAPROC] rar->rb_alloc %d\n",module_idP,rar->rb_alloc);
+  //  LOG_I(MAC,"[UE %d][RAPROC] rar->mcs %d\n",module_idP,rar->mcs);
+  //  LOG_I(MAC,"[UE %d][RAPROC] rar->TPC %d\n",module_idP,rar->TPC);
+  //  LOG_I(MAC,"[UE %d][RAPROC] rar->UL_delay %d\n",module_idP,rar->UL_delay);
+  //  LOG_I(MAC,"[UE %d][RAPROC] rar->cqi_req %d\n",module_idP,rar->cqi_req);
+  LOG_D(MAC, "[UE %d][RAPROC] rar->t_crnti %x\n", module_idP,
+        (uint16_t) rar[5] + (rar[4] << 8));
+#endif
+  trace_pdu(DIRECTION_DOWNLINK, (uint8_t *) dlsch_buffer, n_rarh + n_rarpy * 6,
+            module_idP, WS_RA_RNTI, ra_rnti, UE_mac_inst[module_idP].rxFrame,
+            UE_mac_inst[module_idP].rxSubframe, 0, 0);
+
+  if (preamble_index == rarh->RAPID) {
+    *t_crnti = (uint16_t) rar[5] + (rar[4] << 8); //rar->t_crnti;
+    UE_mac_inst[module_idP].crnti = *t_crnti; //rar->t_crnti;
+    //return(rar->Timing_Advance_Command);
+    ret = ((((uint16_t) (rar[0] & 0x7f)) << 4) + (rar[1] >> 4));
+  } else {
+    UE_mac_inst[module_idP].crnti = 0;
+    ret = (0xffff);
+  }
+
+  // move the selected RAR to the front of the RA_PDSCH buffer
+  memcpy(selected_rar_buffer + 0, (uint8_t *) rarh, 1);
+  memcpy(selected_rar_buffer + 1, (uint8_t *) rar, 6);
+  return ret;
 }
diff --git a/openair2/LAYER2/MAC/ue_procedures.c b/openair2/LAYER2/MAC/ue_procedures.c
index db8f7156363f39daeb8653afe63cc59990cf619f..cec4bdee923f9ec036b274562574f7f015f46ee1 100644
--- a/openair2/LAYER2/MAC/ue_procedures.c
+++ b/openair2/LAYER2/MAC/ue_procedures.c
@@ -402,17 +402,9 @@ ue_send_sdu(module_id_t module_idP,
 #endif
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
   (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_SEND_SDU, VCD_FUNCTION_IN);
-
   //LOG_D(MAC,"sdu: %x.%x.%x\n",sdu[0],sdu[1],sdu[2]);
-
-  if (opt_enabled) {
-    trace_pdu(DIRECTION_DOWNLINK, sdu, sdu_len, module_idP, WS_C_RNTI,
-              UE_mac_inst[module_idP].crnti, frameP, subframeP, 0, 0);
-    LOG_D(OPT,
-          "[UE %d][DLSCH] Frame %d trace pdu for rnti %x  with size %d\n",
-          module_idP, frameP, UE_mac_inst[module_idP].crnti, sdu_len);
-  }
-
+  trace_pdu(DIRECTION_DOWNLINK, sdu, sdu_len, module_idP, WS_C_RNTI,
+            UE_mac_inst[module_idP].crnti, frameP, subframeP, 0, 0);
   payload_ptr =
     parse_header(sdu, &num_ce, &num_sdu, rx_ces, rx_lcids, rx_lengths,
                  sdu_len);
@@ -599,39 +591,31 @@ ue_send_sdu(module_id_t module_idP,
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
 void
 ue_decode_si_mbms(module_id_t module_idP, int CC_id, frame_t frameP,
-            uint8_t eNB_index, void *pdu, uint16_t len)
-{
+                  uint8_t eNB_index, void *pdu, uint16_t len) {
 #if UE_TIMING_TRACE
-    start_meas(&UE_mac_inst[module_idP].rx_si);
+  start_meas(&UE_mac_inst[module_idP].rx_si);
 #endif
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
-       (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_IN);
-
-    LOG_D(MAC, "[UE %d] Frame %d Sending SI MBMS to RRC (LCID Id %d,len %d)\n",
-         module_idP, frameP, BCCH, len);
-
-    mac_rrc_data_ind_ue(module_idP, CC_id, frameP, 0,  // unknown subframe
-                    SI_RNTI,
-                    BCCH_SI_MBMS, (uint8_t *) pdu, len, eNB_index,
-                    0);
-    VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
-       (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_OUT);
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
+  (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_IN);
+  LOG_D(MAC, "[UE %d] Frame %d Sending SI MBMS to RRC (LCID Id %d,len %d)\n",
+        module_idP, frameP, BCCH, len);
+  mac_rrc_data_ind_ue(module_idP, CC_id, frameP, 0,  // unknown subframe
+                      SI_RNTI,
+                      BCCH_SI_MBMS, (uint8_t *) pdu, len, eNB_index,
+                      0);
+  VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME
+  (VCD_SIGNAL_DUMPER_FUNCTIONS_UE_DECODE_SI, VCD_FUNCTION_OUT);
 #if UE_TIMING_TRACE
-    stop_meas(&UE_mac_inst[module_idP].rx_si);
+  stop_meas(&UE_mac_inst[module_idP].rx_si);
 #endif
-    if (opt_enabled == 1) {
-       trace_pdu(DIRECTION_UPLINK,
-                 (uint8_t *) pdu,
-                 len,
-                 module_idP,
-                 WS_SI_RNTI,
-                 0xffff,
-                 UE_mac_inst[module_idP].rxFrame,
-                 UE_mac_inst[module_idP].rxSubframe, 0, 0);
-       LOG_D(OPT,
-             "[UE %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-             module_idP, frameP, CC_id, 0xffff, len);
-    }
+  trace_pdu(DIRECTION_UPLINK,
+            (uint8_t *) pdu,
+            len,
+            module_idP,
+            WS_SI_RNTI,
+            0xffff,
+            UE_mac_inst[module_idP].rxFrame,
+            UE_mac_inst[module_idP].rxSubframe, 0, 0);
 }
 #endif
 
@@ -654,20 +638,14 @@ ue_decode_si(module_id_t module_idP, int CC_id, frame_t frameP,
 #if UE_TIMING_TRACE
   stop_meas(&UE_mac_inst[module_idP].rx_si);
 #endif
-
-  if (opt_enabled == 1) {
-    trace_pdu(DIRECTION_UPLINK,
-              (uint8_t *) pdu,
-              len,
-              module_idP,
-              WS_SI_RNTI,
-              0xffff,
-              UE_mac_inst[module_idP].rxFrame,
-              UE_mac_inst[module_idP].rxSubframe, 0, 0);
-    LOG_D(OPT,
-          "[UE %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-          module_idP, frameP, CC_id, 0xffff, len);
-  }
+  trace_pdu(DIRECTION_UPLINK,
+            (uint8_t *) pdu,
+            len,
+            module_idP,
+            WS_SI_RNTI,
+            0xffff,
+            UE_mac_inst[module_idP].rxFrame,
+            UE_mac_inst[module_idP].rxSubframe, 0, 0);
 }
 
 void
@@ -690,20 +668,14 @@ ue_decode_p(module_id_t module_idP, int CC_id, frame_t frameP,
 #if UE_TIMING_TRACE
   stop_meas(&UE_mac_inst[module_idP].rx_p);
 #endif
-
-  if (opt_enabled == 1) {
-    trace_pdu(DIRECTION_UPLINK,
-              (uint8_t *) pdu,
-              len,
-              module_idP,
-              WS_SI_RNTI,
-              P_RNTI,
-              UE_mac_inst[module_idP].rxFrame,
-              UE_mac_inst[module_idP].rxSubframe, 0, 0);
-    LOG_D(OPT,
-          "[UE %d][BCH] Frame %d trace pdu for CC_id %d rnti %x with size %d\n",
-          module_idP, frameP, CC_id, P_RNTI, len);
-  }
+  trace_pdu(DIRECTION_UPLINK,
+            (uint8_t *) pdu,
+            len,
+            module_idP,
+            WS_SI_RNTI,
+            P_RNTI,
+            UE_mac_inst[module_idP].rxFrame,
+            UE_mac_inst[module_idP].rxSubframe, 0, 0);
 }
 
 #if (LTE_RRC_VERSION >= MAKE_VERSION(10, 0, 0))
@@ -2479,17 +2451,10 @@ ue_get_sdu(module_id_t module_idP, int CC_id, frame_t frameP,
 #if UE_TIMING_TRACE
   stop_meas(&UE_mac_inst[module_idP].tx_ulsch_sdu);
 #endif
-
-  if (opt_enabled) {
-    trace_pdu(DIRECTION_UPLINK, ulsch_buffer, buflen, module_idP, WS_C_RNTI,
-              UE_mac_inst[module_idP].crnti,
-              UE_mac_inst[module_idP].txFrame,
-              UE_mac_inst[module_idP].txSubframe, 0, 0);
-    LOG_D(OPT,
-          "[UE %d][ULSCH] Frame %d subframe %d trace pdu for rnti %x  with size %d\n",
-          module_idP, frameP, subframe, UE_mac_inst[module_idP].crnti,
-          buflen);
-  }
+  trace_pdu(DIRECTION_UPLINK, ulsch_buffer, buflen, module_idP, WS_C_RNTI,
+            UE_mac_inst[module_idP].crnti,
+            UE_mac_inst[module_idP].txFrame,
+            UE_mac_inst[module_idP].txSubframe, 0, 0);
 }
 
 
diff --git a/openair2/PHY_INTERFACE/IF_Module.c b/openair2/PHY_INTERFACE/IF_Module.c
index 2cc43189c696134b92bf82d14c53411516c35f13..5b3b6d5da63a3f08adff5b4835dbc083f3aeeffe 100644
--- a/openair2/PHY_INTERFACE/IF_Module.c
+++ b/openair2/PHY_INTERFACE/IF_Module.c
@@ -22,45 +22,45 @@ extern UL_RCC_IND_t  UL_RCC_INFO;
 uint16_t frame_cnt=0;
 void handle_rach(UL_IND_t *UL_info) {
   int i;
-  if(NFAPI_MODE == NFAPI_MODE_VNF){
-    for(uint8_t j = 0;j < NUM_NFPAI_SUBFRAME;j++){
-     if (UL_RCC_INFO.rach_ind[j].rach_indication_body.number_of_preambles>0) {
 
-       AssertFatal(UL_RCC_INFO.rach_ind[j].rach_indication_body.number_of_preambles==1,"More than 1 preamble not supported\n");
-       LOG_D(MAC,"UL_info[Frame %d, Subframe %d] Calling initiate_ra_proc RACH:SFN/SF:%d\n",UL_info->frame,UL_info->subframe, NFAPI_SFNSF2DEC(UL_RCC_INFO.rach_ind[j].sfn_sf));
-       initiate_ra_proc(UL_info->module_id,
-                        UL_info->CC_id,
-                        NFAPI_SFNSF2SFN(UL_RCC_INFO.rach_ind[j].sfn_sf),
-                        NFAPI_SFNSF2SF(UL_RCC_INFO.rach_ind[j].sfn_sf),
-                        UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list[0].preamble_rel8.preamble,
-                        UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list[0].preamble_rel8.timing_advance,
-                        UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list[0].preamble_rel8.rnti
+  if(NFAPI_MODE == NFAPI_MODE_VNF) {
+    for(uint8_t j = 0; j < NUM_NFPAI_SUBFRAME; j++) {
+      if (UL_RCC_INFO.rach_ind[j].rach_indication_body.number_of_preambles>0) {
+        AssertFatal(UL_RCC_INFO.rach_ind[j].rach_indication_body.number_of_preambles==1,"More than 1 preamble not supported\n");
+        LOG_D(MAC,"UL_info[Frame %d, Subframe %d] Calling initiate_ra_proc RACH:SFN/SF:%d\n",UL_info->frame,UL_info->subframe, NFAPI_SFNSF2DEC(UL_RCC_INFO.rach_ind[j].sfn_sf));
+        initiate_ra_proc(UL_info->module_id,
+                         UL_info->CC_id,
+                         NFAPI_SFNSF2SFN(UL_RCC_INFO.rach_ind[j].sfn_sf),
+                         NFAPI_SFNSF2SF(UL_RCC_INFO.rach_ind[j].sfn_sf),
+                         UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list[0].preamble_rel8.preamble,
+                         UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list[0].preamble_rel8.timing_advance,
+                         UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list[0].preamble_rel8.rnti
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-                        ,0
+                         ,0
 #endif
-       );
-       free(UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list);
-       UL_RCC_INFO.rach_ind[j].rach_indication_body.number_of_preambles = 0;
-       UL_RCC_INFO.rach_ind[j].header.message_id = 0;
-     }
-   }
-  }else{
-  if (UL_info->rach_ind.rach_indication_body.number_of_preambles>0) {
-    AssertFatal(UL_info->rach_ind.rach_indication_body.number_of_preambles==1,"More than 1 preamble not supported\n");
-    UL_info->rach_ind.rach_indication_body.number_of_preambles=0;
-    LOG_D(MAC,"UL_info[Frame %d, Subframe %d] Calling initiate_ra_proc RACH:SFN/SF:%d\n",UL_info->frame,UL_info->subframe, NFAPI_SFNSF2DEC(UL_info->rach_ind.sfn_sf));
-    initiate_ra_proc(UL_info->module_id,
-                     UL_info->CC_id,
-                     NFAPI_SFNSF2SFN(UL_info->rach_ind.sfn_sf),
-                     NFAPI_SFNSF2SF(UL_info->rach_ind.sfn_sf),
-                     UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.preamble,
-                     UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.timing_advance,
-                     UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.rnti
+                        );
+        free(UL_RCC_INFO.rach_ind[j].rach_indication_body.preamble_list);
+        UL_RCC_INFO.rach_ind[j].rach_indication_body.number_of_preambles = 0;
+        UL_RCC_INFO.rach_ind[j].header.message_id = 0;
+      }
+    }
+  } else {
+    if (UL_info->rach_ind.rach_indication_body.number_of_preambles>0) {
+      AssertFatal(UL_info->rach_ind.rach_indication_body.number_of_preambles==1,"More than 1 preamble not supported\n");
+      UL_info->rach_ind.rach_indication_body.number_of_preambles=0;
+      LOG_D(MAC,"UL_info[Frame %d, Subframe %d] Calling initiate_ra_proc RACH:SFN/SF:%d\n",UL_info->frame,UL_info->subframe, NFAPI_SFNSF2DEC(UL_info->rach_ind.sfn_sf));
+      initiate_ra_proc(UL_info->module_id,
+                       UL_info->CC_id,
+                       NFAPI_SFNSF2SFN(UL_info->rach_ind.sfn_sf),
+                       NFAPI_SFNSF2SF(UL_info->rach_ind.sfn_sf),
+                       UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.preamble,
+                       UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.timing_advance,
+                       UL_info->rach_ind.rach_indication_body.preamble_list[0].preamble_rel8.rnti
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-                     ,0
+                       ,0
 #endif
-                    );
-  }
+                      );
+    }
   }
 
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
@@ -97,17 +97,18 @@ void handle_sr(UL_IND_t *UL_info) {
     if (UL_info->sr_ind.sr_indication_body.number_of_srs>0) {
       oai_nfapi_sr_indication(&UL_info->sr_ind);
     }
-  } else if(NFAPI_MODE == NFAPI_MODE_VNF){
-    for(uint8_t j = 0;j < NUM_NFPAI_SUBFRAME;j++){
-      if(UL_RCC_INFO.sr_ind[j].sr_indication_body.number_of_srs > 0){
-        for (i=0;i<UL_RCC_INFO.sr_ind[j].sr_indication_body.number_of_srs;i++){
+  } else if(NFAPI_MODE == NFAPI_MODE_VNF) {
+    for(uint8_t j = 0; j < NUM_NFPAI_SUBFRAME; j++) {
+      if(UL_RCC_INFO.sr_ind[j].sr_indication_body.number_of_srs > 0) {
+        for (i=0; i<UL_RCC_INFO.sr_ind[j].sr_indication_body.number_of_srs; i++) {
           SR_indication(UL_info->module_id,
-              UL_info->CC_id,
-              NFAPI_SFNSF2SFN(UL_RCC_INFO.sr_ind[j].sfn_sf),
-              NFAPI_SFNSF2SF(UL_RCC_INFO.sr_ind[j].sfn_sf),
-              UL_RCC_INFO.sr_ind[j].sr_indication_body.sr_pdu_list[i].rx_ue_information.rnti,
-              UL_RCC_INFO.sr_ind[j].sr_indication_body.sr_pdu_list[i].ul_cqi_information.ul_cqi);
+                        UL_info->CC_id,
+                        NFAPI_SFNSF2SFN(UL_RCC_INFO.sr_ind[j].sfn_sf),
+                        NFAPI_SFNSF2SF(UL_RCC_INFO.sr_ind[j].sfn_sf),
+                        UL_RCC_INFO.sr_ind[j].sr_indication_body.sr_pdu_list[i].rx_ue_information.rnti,
+                        UL_RCC_INFO.sr_ind[j].sr_indication_body.sr_pdu_list[i].ul_cqi_information.ul_cqi);
         }
+
         free(UL_RCC_INFO.sr_ind[j].sr_indication_body.sr_pdu_list);
         UL_RCC_INFO.sr_ind[j].sr_indication_body.number_of_srs=0;
         UL_RCC_INFO.sr_ind[j].header.message_id = 0;
@@ -134,14 +135,13 @@ void handle_cqi(UL_IND_t *UL_info) {
       LOG_D(PHY,"UL_info->cqi_ind.number_of_cqis:%d\n", UL_info->cqi_ind.cqi_indication_body.number_of_cqis);
       UL_info->cqi_ind.header.message_id = NFAPI_RX_CQI_INDICATION;
       UL_info->cqi_ind.sfn_sf = UL_info->frame<<4 | UL_info->subframe;
-
       oai_nfapi_cqi_indication(&UL_info->cqi_ind);
       UL_info->cqi_ind.cqi_indication_body.number_of_cqis=0;
     }
   } else if (NFAPI_MODE == NFAPI_MODE_VNF) {
-    for(uint8_t j = 0;j < NUM_NFPAI_SUBFRAME;j++){
-      if(UL_RCC_INFO.cqi_ind[j].cqi_indication_body.number_of_cqis > 0){
-        for (i=0;i<UL_RCC_INFO.cqi_ind[j].cqi_indication_body.number_of_cqis;i++){
+    for(uint8_t j = 0; j < NUM_NFPAI_SUBFRAME; j++) {
+      if(UL_RCC_INFO.cqi_ind[j].cqi_indication_body.number_of_cqis > 0) {
+        for (i=0; i<UL_RCC_INFO.cqi_ind[j].cqi_indication_body.number_of_cqis; i++) {
           cqi_indication(UL_info->module_id,
                          UL_info->CC_id,
                          NFAPI_SFNSF2SFN(UL_RCC_INFO.cqi_ind[j].sfn_sf),
@@ -159,15 +159,15 @@ void handle_cqi(UL_IND_t *UL_info) {
       }
     }
   } else {
-    for (i=0;i<UL_info->cqi_ind.cqi_indication_body.number_of_cqis;i++)
+    for (i=0; i<UL_info->cqi_ind.cqi_indication_body.number_of_cqis; i++)
       cqi_indication(UL_info->module_id,
                      UL_info->CC_id,
-          NFAPI_SFNSF2SFN(UL_info->cqi_ind.sfn_sf),
-          NFAPI_SFNSF2SF(UL_info->cqi_ind.sfn_sf),
-          UL_info->cqi_ind.cqi_indication_body.cqi_pdu_list[i].rx_ue_information.rnti,
-          &UL_info->cqi_ind.cqi_indication_body.cqi_pdu_list[i].cqi_indication_rel9,
-          UL_info->cqi_ind.cqi_indication_body.cqi_raw_pdu_list[i].pdu,
-          &UL_info->cqi_ind.cqi_indication_body.cqi_pdu_list[i].ul_cqi_information);
+                     NFAPI_SFNSF2SFN(UL_info->cqi_ind.sfn_sf),
+                     NFAPI_SFNSF2SF(UL_info->cqi_ind.sfn_sf),
+                     UL_info->cqi_ind.cqi_indication_body.cqi_pdu_list[i].rx_ue_information.rnti,
+                     &UL_info->cqi_ind.cqi_indication_body.cqi_pdu_list[i].cqi_indication_rel9,
+                     UL_info->cqi_ind.cqi_indication_body.cqi_raw_pdu_list[i].pdu,
+                     &UL_info->cqi_ind.cqi_indication_body.cqi_pdu_list[i].ul_cqi_information);
 
     UL_info->cqi_ind.cqi_indication_body.number_of_cqis=0;
   }
@@ -183,15 +183,15 @@ void handle_harq(UL_IND_t *UL_info) {
     }
 
     UL_info->harq_ind.harq_indication_body.number_of_harqs = 0;
-  }else if(NFAPI_MODE == NFAPI_MODE_VNF){
-    for(uint8_t j = 0;j < NUM_NFPAI_SUBFRAME;j++){
-      if(UL_RCC_INFO.harq_ind[j].harq_indication_body.number_of_harqs > 0){
-        for (int i=0;i<UL_RCC_INFO.harq_ind[j].harq_indication_body.number_of_harqs;i++){
+  } else if(NFAPI_MODE == NFAPI_MODE_VNF) {
+    for(uint8_t j = 0; j < NUM_NFPAI_SUBFRAME; j++) {
+      if(UL_RCC_INFO.harq_ind[j].harq_indication_body.number_of_harqs > 0) {
+        for (int i=0; i<UL_RCC_INFO.harq_ind[j].harq_indication_body.number_of_harqs; i++) {
           harq_indication(UL_info->module_id,
-                         UL_info->CC_id,
-                         NFAPI_SFNSF2SFN(UL_RCC_INFO.harq_ind[j].sfn_sf),
-                         NFAPI_SFNSF2SF(UL_RCC_INFO.harq_ind[j].sfn_sf),
-                         &UL_RCC_INFO.harq_ind[j].harq_indication_body.harq_pdu_list[i]);
+                          UL_info->CC_id,
+                          NFAPI_SFNSF2SFN(UL_RCC_INFO.harq_ind[j].sfn_sf),
+                          NFAPI_SFNSF2SF(UL_RCC_INFO.harq_ind[j].sfn_sf),
+                          &UL_RCC_INFO.harq_ind[j].harq_indication_body.harq_pdu_list[i]);
         }
 
         free(UL_RCC_INFO.harq_ind[j].harq_indication_body.harq_pdu_list);
@@ -226,48 +226,52 @@ void handle_ulsch(UL_IND_t *UL_info) {
       oai_nfapi_rx_ind(&UL_info->rx_ind);
       UL_info->rx_ind.rx_indication_body.number_of_pdus = 0;
     }
-  } else if(NFAPI_MODE == NFAPI_MODE_VNF){
-    for(uint8_t k = 0;k < NUM_NFPAI_SUBFRAME;k++){
-      if((UL_RCC_INFO.rx_ind[k].rx_indication_body.number_of_pdus>0) && (UL_RCC_INFO.crc_ind[k].crc_indication_body.number_of_crcs>0)){
-        for (i=0;i<UL_RCC_INFO.rx_ind[k].rx_indication_body.number_of_pdus;i++) {
-          for (j=0;j<UL_RCC_INFO.crc_ind[k].crc_indication_body.number_of_crcs;j++) {
+  } else if(NFAPI_MODE == NFAPI_MODE_VNF) {
+    for(uint8_t k = 0; k < NUM_NFPAI_SUBFRAME; k++) {
+      if((UL_RCC_INFO.rx_ind[k].rx_indication_body.number_of_pdus>0) && (UL_RCC_INFO.crc_ind[k].crc_indication_body.number_of_crcs>0)) {
+        for (i=0; i<UL_RCC_INFO.rx_ind[k].rx_indication_body.number_of_pdus; i++) {
+          for (j=0; j<UL_RCC_INFO.crc_ind[k].crc_indication_body.number_of_crcs; j++) {
             // find crc_indication j corresponding rx_indication i
             LOG_D(PHY,"UL_info->crc_ind.crc_indication_body.crc_pdu_list[%d].rx_ue_information.rnti:%04x UL_info->rx_ind.rx_indication_body.rx_pdu_list[%d].rx_ue_information.rnti:%04x\n",
-                       j,UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list[j].rx_ue_information.rnti, i,UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti);
+                  j,UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list[j].rx_ue_information.rnti, i,UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti);
+
             if (UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list[j].rx_ue_information.rnti == UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti) {
               LOG_D(PHY, "UL_info->crc_ind.crc_indication_body.crc_pdu_list[%d].crc_indication_rel8.crc_flag:%d\n",
-                          j, UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list[j].crc_indication_rel8.crc_flag);
+                    j, UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list[j].crc_indication_rel8.crc_flag);
+
               if (UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list[j].crc_indication_rel8.crc_flag == 1) { // CRC error indication
                 LOG_D(MAC,"Frame %d, Subframe %d Calling rx_sdu (CRC error) \n",UL_info->frame,UL_info->subframe);
-                  rx_sdu(UL_info->module_id,
-                      UL_info->CC_id,
-                      NFAPI_SFNSF2SFN(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->frame,
-                      NFAPI_SFNSF2SF(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->subframe,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti,
-                      (uint8_t *)NULL,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.length,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.timing_advance,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.ul_cqi);
-              }
-              else {
-                  LOG_D(MAC,"Frame %d, Subframe %d Calling rx_sdu (CRC ok) \n",UL_info->frame,UL_info->subframe);
-                  rx_sdu(UL_info->module_id,
-                      UL_info->CC_id,
-                      NFAPI_SFNSF2SFN(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->frame,
-                      NFAPI_SFNSF2SF(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->subframe,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].data,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.length,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.timing_advance,
-                      UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.ul_cqi);
+                rx_sdu(UL_info->module_id,
+                       UL_info->CC_id,
+                       NFAPI_SFNSF2SFN(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->frame,
+                       NFAPI_SFNSF2SF(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->subframe,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti,
+                       (uint8_t *)NULL,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.length,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.timing_advance,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.ul_cqi);
+              } else {
+                LOG_D(MAC,"Frame %d, Subframe %d Calling rx_sdu (CRC ok) \n",UL_info->frame,UL_info->subframe);
+                rx_sdu(UL_info->module_id,
+                       UL_info->CC_id,
+                       NFAPI_SFNSF2SFN(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->frame,
+                       NFAPI_SFNSF2SF(UL_RCC_INFO.rx_ind[k].sfn_sf), //UL_info->subframe,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_ue_information.rnti,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].data,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.length,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.timing_advance,
+                       UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].rx_indication_rel8.ul_cqi);
               }
-              if(UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].data != NULL){
+
+              if(UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].data != NULL) {
                 free(UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list[i].data);
               }
+
               break;
             } //if (UL_info->crc_ind.crc_pdu_list[j].rx_ue_information.rnti == UL_info->rx_ind.rx_pdu_list[i].rx_ue_information.rnti)
           } //    for (j=0;j<UL_info->crc_ind.crc_indication_body.number_of_crcs;j++)
         } //   for (i=0;i<UL_info->rx_ind.number_of_pdus;i++)
+
         free(UL_RCC_INFO.crc_ind[k].crc_indication_body.crc_pdu_list);
         free(UL_RCC_INFO.rx_ind[k].rx_indication_body.rx_pdu_list);
         UL_RCC_INFO.crc_ind[k].crc_indication_body.number_of_crcs = 0;
@@ -388,10 +392,10 @@ static void dump_ul(UL_IND_t *u) {
 
   A("XXXX     crc_ind  %d\n", u->crc_ind.crc_indication_body.number_of_crcs);
   A("XXXX     sr_ind   %d\n", u->sr_ind.sr_indication_body.number_of_srs);
-  A("XXXX     cqi_ind  %d\n", u->cqi_ind.number_of_cqis);
+  A("XXXX     cqi_ind  %d\n", u->cqi_ind.cqi_indication_body.number_of_cqis);
 
-  for (i = 0; i < u->cqi_ind.number_of_cqis; i++) {
-    nfapi_cqi_indication_pdu_t *v = &u->cqi_ind.cqi_pdu_list[i];
+  for (i = 0; i < u->cqi_ind.cqi_indication_body.number_of_cqis; i++) {
+    nfapi_cqi_indication_pdu_t *v = &u->cqi_ind.cqi_indication_body.cqi_pdu_list[i];
     A("XXXX         cqi ind %d\n", i);
     A("XXXX cqi         ul_cqi %d channel %d\n", v->ul_cqi_information.ul_cqi,
       v->ul_cqi_information.channel);
@@ -699,11 +703,11 @@ void UL_indication(UL_IND_t *UL_info) {
   Sched_Rsp_t  *sched_info = &Sched_INFO[module_id][CC_id];
   IF_Module_t  *ifi        = if_inst[module_id];
   eNB_MAC_INST *mac        = RC.mac[module_id];
-
   LOG_D(PHY,"SFN/SF:%d%d module_id:%d CC_id:%d UL_info[rx_ind:%d harqs:%d crcs:%d cqis:%d preambles:%d sr_ind:%d]\n",
         UL_info->frame,UL_info->subframe,
         module_id,CC_id,
-        UL_info->rx_ind.rx_indication_body.number_of_pdus, UL_info->harq_ind.harq_indication_body.number_of_harqs, UL_info->crc_ind.crc_indication_body.number_of_crcs, UL_info->cqi_ind.cqi_indication_body.number_of_cqis, UL_info->rach_ind.rach_indication_body.number_of_preambles, UL_info->sr_ind.sr_indication_body.number_of_srs);
+        UL_info->rx_ind.rx_indication_body.number_of_pdus, UL_info->harq_ind.harq_indication_body.number_of_harqs, UL_info->crc_ind.crc_indication_body.number_of_crcs,
+        UL_info->cqi_ind.cqi_indication_body.number_of_cqis, UL_info->rach_ind.rach_indication_body.number_of_preambles, UL_info->sr_ind.sr_indication_body.number_of_srs);
 
   if(UL_info->frame==1023&&UL_info->subframe==6) { // dl scheduling (0,0)
     frame_cnt= (frame_cnt + 1)%7; // to prevent frame_cnt get too big
@@ -729,7 +733,6 @@ void UL_indication(UL_IND_t *UL_info) {
   handle_sr(UL_info);
   handle_cqi(UL_info);
   handle_harq(UL_info);
-
   // clear HI prior to handling ULSCH
   uint8_t sf_ahead_dl = ul_subframe2_k_phich(&mac->common_channels[CC_id], UL_info->subframe);
 
diff --git a/openair2/UTIL/OPT/README.txt b/openair2/UTIL/OPT/README.txt
index c56aeda93d96902b490d583c034f6101abecd540..2ac68f83fdbf1057f414e88a7559e6eb0c7345db 100644
--- a/openair2/UTIL/OPT/README.txt
+++ b/openair2/UTIL/OPT/README.txt
@@ -1,13 +1,20 @@
+
 How to configure wireshark for dissecting LTE protocols:
 - start the wireshark as a sudoers
-- goto analyze->enabled prototols
+  - goto analyze->enabled prototols
   => enable mac_lte_udp and rlc_lte_udp
-- goto edit/preferences and expand Protocols
-- select UDP and check "try heuristic sub-dissectors first"
-- select MAC-LTE, and check all the options (checkboxes), and set the "which layer info to show in info column" to "MAC info"
-- select RLC-LTE, and check all the options except the "May see RLC headers only", and set the "call PDCP dissector for DRB PDUs" to "12-bit SN". Optionally you may select the sequence analysis for RLC AM/UM.
+  - goto edit/preferences and expand Protocols
+  - select UDP and check "try heuristic sub-dissectors first"
+  - select MAC-LTE, and check all the options (checkboxes), and set the "which layer info to show in info column" to "MAC info"
+    - select RLC-LTE, and check all the options except the "May see RLC headers only", and
+    set the "call PDCP dissector for DRB PDUs" to "12-bit SN". Optionally you may select the sequence analysis for RLC AM/UM.
 
-How to use
-- start eNB or UE with option -W (or -P if you want to make a pcap file)
-- capture on local interface "lo" 
-- filter out the ICMP/DNS/TCP messages (e.g. "!icmp && !dns && !tcp") 
+    How to use
+    - start eNB or UE with option --opt.type wireshark
+  --opt options are:
+    --opt.type none/wireshark/pcap
+  --opt.ip 127.0.0.1 to specify the output IP address (default: 127.0.0.1)
+        output port is always: 9999 (to change it, change constant: PACKET_MAC_LTE_DEFAULT_UDP_PORT in OAI code)
+        --opt.path file_name to specify the file name (pcap)
+        - capture on local interface "lo"
+        - filter out the ICMP/DNS/TCP messages (e.g. "!icmp && !dns && !tcp")
diff --git a/openair2/UTIL/OPT/opt.h b/openair2/UTIL/OPT/opt.h
index 5ae19f9b552e1f08d3206b81ac5196c4e17f7310..85c25cf8ad259a8cf87cb3af376f65b9e4fc7f1a 100644
--- a/openair2/UTIL/OPT/opt.h
+++ b/openair2/UTIL/OPT/opt.h
@@ -111,15 +111,17 @@ typedef enum radio_type_e {
  * function def
 */
 
-void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
-               int ueid, int rntiType, int rnti, uint16_t sysFrame, uint8_t subframe,
-               int oob_event, int oob_event_value);
+extern int opt_enabled;
+#define trace_pdu(x...) if (opt_enabled) trace_pdu_implementation(x)
+
+void trace_pdu_implementation(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
+                              int ueid, int rntiType, int rnti, uint16_t sysFrame, uint8_t subframe,
+                              int oob_event, int oob_event_value);
 
 int init_opt(void);
 
 void terminate_opt(void);
 
-extern int opt_enabled;
 //double *timing_analyzer(int index, int direction );
 
 #endif /* OPT_H_ */
diff --git a/openair2/UTIL/OPT/probe.c b/openair2/UTIL/OPT/probe.c
index b032784028ee4dc7f2349e615cc7bbef5a6cbc6d..88adb1b209f29bdfb81640cb26186b5499addc6f 100644
--- a/openair2/UTIL/OPT/probe.c
+++ b/openair2/UTIL/OPT/probe.c
@@ -390,17 +390,22 @@ static int MAC_LTE_PCAP_WritePDU(MAC_Context_Info_t *context,
 extern RAN_CONTEXT_t RC;
 #include <openair1/PHY/phy_extern_ue.h>
 /* Remote serveraddress (where Wireshark is running) */
-void trace_pdu(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
-               int ueid, int rntiType, int rnti, uint16_t sysFrameNumber, uint8_t subFrameNumber, int oob_event,
-               int oob_event_value) {
+void trace_pdu_implementation(int direction, uint8_t *pdu_buffer, unsigned int pdu_buffer_size,
+                              int ueid, int rntiType, int rnti, uint16_t sysFrameNumber, uint8_t subFrameNumber, int oob_event,
+                              int oob_event_value) {
   MAC_Context_Info_t pdu_context;
   int radioType=FDD_RADIO;
+  LOG_D(OPT,"sending packet to wireshark: direction=%s, size: %d, ueid: %d, rnti: %x, frame/sf: %d.%d\n",
+        direction?"DL":"UL", pdu_buffer_size, ueid, rnti, sysFrameNumber,subFrameNumber);
 
-  if (RC.eNB[0][0]!=NULL)
+  if (RC.eNB && RC.eNB[0][0]!=NULL)
     radioType=RC.eNB[0][0]->frame_parms.frame_type== FDD ? FDD_RADIO:TDD_RADIO;
-
-  if (PHY_vars_UE_g[0][0] != NULL)
+  else if (PHY_vars_UE_g && PHY_vars_UE_g[0][0] != NULL)
     radioType=PHY_vars_UE_g[0][0]->frame_parms.frame_type== FDD ? FDD_RADIO:TDD_RADIO;
+  else {
+    LOG_E(OPT,"not a eNB neither a UE!!! \n");
+    return;
+  }
 
   switch (opt_type) {
     case OPT_WIRESHARK :
diff --git a/targets/ARCH/rfsimulator/simulator.c b/targets/ARCH/rfsimulator/simulator.c
index 76f2f3f0fbacfce031b70b5a50cef0b9107d52a1..7a7e1a31f8e1a99b4ba0b90600ac45a89dc336dc 100644
--- a/targets/ARCH/rfsimulator/simulator.c
+++ b/targets/ARCH/rfsimulator/simulator.c
@@ -431,7 +431,8 @@ static bool flushInput(rfsimulator_state_t *t, int timeout) {
             }
           }
 
-          LOG_W(HW,"gap of: %ld in reception\n", b->th.timestamp-b->lastReceivedTS );
+          if ( abs(b->th.timestamp-b->lastReceivedTS) > 50 )
+            LOG_W(HW,"gap of: %ld in reception\n", b->th.timestamp-b->lastReceivedTS );
         }
 
         b->lastReceivedTS=b->th.timestamp;
diff --git a/targets/ARCH/rfsimulator/stored_node.c b/targets/ARCH/rfsimulator/stored_node.c
index 8cf3aa3bb269958070a582801ae5650229579d5a..a523c66bb25f7bcb2f8c635d1cd613abbfea7a4c 100644
--- a/targets/ARCH/rfsimulator/stored_node.c
+++ b/targets/ARCH/rfsimulator/stored_node.c
@@ -7,6 +7,24 @@
 
 volatile int             oai_exit = 0;
 
+int fullread(int fd, void *_buf, int count) {
+  char *buf = _buf;
+  int ret = 0;
+  int l;
+
+  while (count) {
+    l = read(fd, buf, count);
+
+    if (l <= 0) return -1;
+
+    count -= l;
+    buf += l;
+    ret += l;
+  }
+
+  return ret;
+}
+
 void fullwrite(int fd, void *_buf, int count) {
   char *buf = _buf;
   int l;
@@ -63,10 +81,9 @@ sin_addr:
   bool connected=false;
 
   while(!connected) {
-    LOG_I(HW,"rfsimulator: trying to connect to %s:%d\n", IP, port);
-
+    //LOG_I(HW,"rfsimulator: trying to connect to %s:%d\n", IP, port);
     if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) == 0) {
-      LOG_I(HW,"rfsimulator: connection established\n");
+      //LOG_I(HW,"rfsimulator: connection established\n");
       connected=true;
     }
 
@@ -108,12 +125,13 @@ int main(int argc, char *argv[]) {
   if (strcmp(argv[2],"server")==0) {
     serviceSock=server_start(atoi(argv[3]));
   } else {
-    client_start(argv[2],atoi(argv[3]));
+    serviceSock=client_start(argv[2],atoi(argv[3]));
   }
 
   samplesBlockHeader_t header;
   int bufSize=100000;
   void *buff=malloc(bufSize);
+  uint64_t readTS=0;
 
   while (1) {
     //Rewind the file to loop on the samples
@@ -125,9 +143,11 @@ int main(int argc, char *argv[]) {
     AssertFatal(read(fd,&header,sizeof(header)), "");
     fullwrite(serviceSock, &header, sizeof(header));
     int dataSize=sizeof(int32_t)*header.size*header.nbAnt;
+    uint64_t wroteTS=header.timestamp;
 
     if (dataSize>bufSize) {
-      void * new_buff = realloc(buff, dataSize);
+      void *new_buff = realloc(buff, dataSize);
+
       if (new_buff == NULL) {
         free(buff);
         AssertFatal(1, "Could not reallocate");
@@ -139,9 +159,18 @@ int main(int argc, char *argv[]) {
     AssertFatal(read(fd,buff,dataSize) == dataSize, "");
     fullwrite(serviceSock, buff, dataSize);
     // Purge incoming samples
-    setblocking(serviceSock, notBlocking);
+    setblocking(serviceSock, blocking);
+
+    while(readTS < wroteTS) {
+      if ( fullread(serviceSock, &header,sizeof(header)) != sizeof(header) ||
+           fullread(serviceSock, buff, sizeof(int32_t)*header.size*header.nbAnt) !=
+           sizeof(int32_t)*header.size*header.nbAnt
+         ) {
+        printf("error: %s\n", strerror(errno));
+        exit(1);
+      }
 
-    while(recv(serviceSock,buff, bufSize, MSG_DONTWAIT) > 0) {
+      readTS=header.timestamp;
     }
   }
 
diff --git a/targets/RT/USER/lte-ru.c b/targets/RT/USER/lte-ru.c
index b75ac502b8fb3ab9ed1722a33707d5a13646b68e..4d4bfcbc12b79749c162d052aba07add26f86c6c 100644
--- a/targets/RT/USER/lte-ru.c
+++ b/targets/RT/USER/lte-ru.c
@@ -154,19 +154,21 @@ static inline void fh_if5_south_out(RU_t *ru) {
 // southbound IF4p5 fronthaul
 static inline void fh_if4p5_south_out(RU_t *ru) {
   if (ru == RC.ru[0]) VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, ru->proc.timestamp_tx&0xffffffff );
+
   LOG_D(PHY,"ENTERED fh_if4p5_south_out   Sending IF4p5 for frame %d subframe %d ru %d\n",ru->proc.frame_tx,ru->proc.subframe_tx,ru->idx);
+
   if (subframe_select(&ru->frame_parms,ru->proc.subframe_tx)!=SF_UL) {
     send_IF4p5(ru,ru->proc.frame_tx, ru->proc.subframe_tx, IF4p5_PDLFFT);
     ru->south_out_cnt++;
     LOG_D(PHY,"south_out_cnt %d\n",ru->south_out_cnt);
   }
-/*if (ru == RC.ru[0] || ru == RC.ru[1]) {
-    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU+ru->idx, ru->proc.frame_tx );
-    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU+ru->idx, ru->proc.subframe_tx );
-  }*/
-VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_IF4P5_SOUTH_OUT_RU+ru->idx,ru->proc.frame_tx);
-VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_IF4P5_SOUTH_OUT_RU+ru->idx,ru->proc.subframe_tx);
 
+  /*if (ru == RC.ru[0] || ru == RC.ru[1]) {
+      VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU+ru->idx, ru->proc.frame_tx );
+      VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU+ru->idx, ru->proc.subframe_tx );
+    }*/
+  VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_IF4P5_SOUTH_OUT_RU+ru->idx,ru->proc.frame_tx);
+  VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_IF4P5_SOUTH_OUT_RU+ru->idx,ru->proc.subframe_tx);
 }
 
 /*************************************************************/
@@ -209,61 +211,67 @@ void fh_if4p5_south_in(RU_t *ru,int *frame,int *subframe) {
   uint32_t symbol_mask_full;
   int pultick_received=0;
 
+  if ((fp->frame_type == TDD) && (subframe_select(fp,*subframe)==SF_S))
+    symbol_mask_full = (1<<fp->ul_symbols_in_S_subframe)-1;
+  else
+    symbol_mask_full = (1<<fp->symbols_per_tti)-1;
 
-  if ((fp->frame_type == TDD) && (subframe_select(fp,*subframe)==SF_S))  
-    symbol_mask_full = (1<<fp->ul_symbols_in_S_subframe)-1;   
-  else     
-    symbol_mask_full = (1<<fp->symbols_per_tti)-1; 
   LOG_D(PHY,"fh_if4p5_south_in: RU %d, frame %d, subframe %d, ru %d, mask %x\n",ru->idx,*frame,*subframe,ru->idx,proc->symbol_mask[*subframe]);
   AssertFatal(proc->symbol_mask[*subframe]==0 || proc->symbol_mask[*subframe]==symbol_mask_full,"rx_fh_if4p5: proc->symbol_mask[%d] = %x\n",*subframe,proc->symbol_mask[*subframe]);
-  if (proc->symbol_mask[*subframe]==0) { // this is normal case, if not true then we received a PULTICK before the previous subframe was finished 
-     do {
-       recv_IF4p5(ru, &f, &sf, &packet_type, &symbol_number);
-	 LOG_D(PHY,"fh_if4p5_south_in: RU %d, frame %d, subframe %d, f %d, sf %d\n",ru->idx,*frame,*subframe,f,sf);
-       if (oai_exit == 1 || ru->cmd== STOP_RU) break;
-       if (packet_type == IF4p5_PULFFT) proc->symbol_mask[sf] = proc->symbol_mask[sf] | (1<<symbol_number);
-       else if (packet_type == IF4p5_PULTICK) {           
-         proc->symbol_mask[sf] = symbol_mask_full;
-         pultick_received++;
-/*
-         if ((proc->first_rx==0) && (f!=*frame)) LOG_E(PHY,"rx_fh_if4p5: PULTICK received frame %d != expected %d (RU %d) \n",f,*frame, ru->idx);       
-         else if ((proc->first_rx==0) && (sf!=*subframe)) LOG_E(PHY,"rx_fh_if4p5: PULTICK received subframe %d != expected %d (first_rx %d)\n",sf,*subframe,proc->first_rx);       
-         else break; */
-         if (f==*frame || sf==*subframe) break;
-       } else if (packet_type == IF4p5_PRACH) {
-      // nothing in RU for RAU
-       }
-       LOG_D(PHY,"rx_fh_if4p5 for RU %d: subframe %d, sf %d, symbol mask %x\n",ru->idx,*subframe,sf,proc->symbol_mask[sf]);
-     } while(proc->symbol_mask[sf] != symbol_mask_full);    
-  }
-  else {
-   f = *frame;
-   sf = *subframe;
+
+  if (proc->symbol_mask[*subframe]==0) { // this is normal case, if not true then we received a PULTICK before the previous subframe was finished
+    do {
+      recv_IF4p5(ru, &f, &sf, &packet_type, &symbol_number);
+      LOG_D(PHY,"fh_if4p5_south_in: RU %d, frame %d, subframe %d, f %d, sf %d\n",ru->idx,*frame,*subframe,f,sf);
+
+      if (oai_exit == 1 || ru->cmd== STOP_RU) break;
+
+      if (packet_type == IF4p5_PULFFT) proc->symbol_mask[sf] = proc->symbol_mask[sf] | (1<<symbol_number);
+      else if (packet_type == IF4p5_PULTICK) {
+        proc->symbol_mask[sf] = symbol_mask_full;
+        pultick_received++;
+
+        /*
+                 if ((proc->first_rx==0) && (f!=*frame)) LOG_E(PHY,"rx_fh_if4p5: PULTICK received frame %d != expected %d (RU %d) \n",f,*frame, ru->idx);
+                 else if ((proc->first_rx==0) && (sf!=*subframe)) LOG_E(PHY,"rx_fh_if4p5: PULTICK received subframe %d != expected %d (first_rx %d)\n",sf,*subframe,proc->first_rx);
+                 else break; */
+        if (f==*frame || sf==*subframe) break;
+      } else if (packet_type == IF4p5_PRACH) {
+        // nothing in RU for RAU
+      }
+
+      LOG_D(PHY,"rx_fh_if4p5 for RU %d: subframe %d, sf %d, symbol mask %x\n",ru->idx,*subframe,sf,proc->symbol_mask[sf]);
+    } while(proc->symbol_mask[sf] != symbol_mask_full);
+  } else {
+    f = *frame;
+    sf = *subframe;
   }
+
   //calculate timestamp_rx, timestamp_tx based on frame and subframe
   proc->subframe_rx  = sf;
   proc->frame_rx     = f;
   proc->timestamp_rx = ((proc->frame_rx * 10)  + proc->subframe_rx ) * fp->samples_per_tti ;
+
   if (get_nprocs()<=4) {
-     proc->subframe_tx  = (sf+sf_ahead)%10;
-     proc->frame_tx     = (sf>(9-sf_ahead)) ? (f+1)&1023 : f;
+    proc->subframe_tx  = (sf+sf_ahead)%10;
+    proc->frame_tx     = (sf>(9-sf_ahead)) ? (f+1)&1023 : f;
   }
 
   LOG_D(PHY,"Setting proc for (%d,%d)\n",sf,f);
 
   if (proc->first_rx == 0) {
-   if (proc->subframe_rx != *subframe){
+    if (proc->subframe_rx != *subframe) {
       LOG_E(PHY,"Received Timestamp (IF4p5) doesn't correspond to the time we think it is (proc->subframe_rx %d, subframe %d, symbol_mask %x)\n",proc->subframe_rx,*subframe,proc->symbol_mask[*subframe]);
-      *subframe=sf; 
+      *subframe=sf;
       //exit_fun("Exiting");
     }
+
     if (ru->cmd != WAIT_RESYNCH && proc->frame_rx != *frame) {
       LOG_E(PHY,"Received Timestamp (IF4p5) doesn't correspond to the time we think it is (proc->frame_rx %d frame %d,symbol_mask %x\n",proc->frame_rx,*frame,proc->symbol_mask[*subframe]);
       //exit_fun("Exiting");
-    }
-    else if (ru->cmd == WAIT_RESYNCH && proc->frame_rx != *frame){
-       ru->cmd=EMPTY;
-       *frame=proc->frame_rx; 
+    } else if (ru->cmd == WAIT_RESYNCH && proc->frame_rx != *frame) {
+      ru->cmd=EMPTY;
+      *frame=proc->frame_rx;
     }
   } else {
     proc->first_rx = 0;
@@ -274,12 +282,10 @@ void fh_if4p5_south_in(RU_t *ru,int *frame,int *subframe) {
   /*if (ru == RC.ru[0] || ru == RC.ru[1]) {
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_RU+ru->idx, f );
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_RU+ru->idx, sf );
-    
-  }*/
 
+  }*/
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_IF4P5_SOUTH_IN_RU+ru->idx,f);
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_IF4P5_SOUTH_IN_RU+ru->idx,sf);
-
   proc->symbol_mask[sf] = 0;
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TS, proc->timestamp_rx&0xffffffff );
   LOG_D(PHY,"RU %d: fh_if4p5_south_in returning ...\n",ru->idx);
@@ -313,6 +319,7 @@ void fh_if4p5_south_asynch_in(RU_t *ru,int *frame,int *subframe) {
     recv_IF4p5(ru, &proc->frame_rx, &proc->subframe_rx, &packet_type, &symbol_number);
 
     if (ru->cmd == STOP_RU) break;
+
     // grab first prach information for this new subframe
     if (got_prach_info==0) {
       prach_rx       = is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx);
@@ -367,12 +374,13 @@ void fh_if4p5_north_in(RU_t *ru,int *frame,int *subframe) {
   symbol_mask_full = (1<<ru->frame_parms.symbols_per_tti)-1;
   LOG_D(PHY,"fh_if4p5_north_in: frame %d, subframe %d\n",*frame,*subframe);
 
-  do { 
+  do {
     recv_IF4p5(ru, frame, subframe, &packet_type, &symbol_number);
     symbol_mask = symbol_mask | (1<<symbol_number);
-  } while (symbol_mask != symbol_mask_full); 
-  
+  } while (symbol_mask != symbol_mask_full);
+
   ru->north_in_cnt++;
+
   // dump VCD output for first RU in list
   if (ru == RC.ru[0]) {
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, *frame );
@@ -389,10 +397,9 @@ void fh_if5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
   //      printf("Received subframe %d (TS %llu) from RCC\n",subframe_tx,timestamp_tx);
   subframe_tx = (timestamp_tx/fp->samples_per_tti)%10;
   frame_tx    = (timestamp_tx/(fp->samples_per_tti*10))&1023;
-
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, proc->frame_tx );
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU, proc->subframe_tx );
-  
+
   if (proc->first_tx != 0) {
     *subframe = subframe_tx;
     *frame    = frame_tx;
@@ -403,6 +410,7 @@ void fh_if5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
     AssertFatal(frame_tx == *frame,
                 "frame_tx %d is not what we expect %d\n",frame_tx,*frame);
   }
+
   ru->north_in_cnt++;
 }
 
@@ -413,26 +421,28 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
   uint32_t symbol_number,symbol_mask,symbol_mask_full;
   int subframe_tx,frame_tx;
   int ret;
-
   symbol_number = 0;
   symbol_mask = 0;
   symbol_mask_full = ((subframe_select(fp,*subframe) == SF_S) ? (1<<fp->dl_symbols_in_S_subframe) : (1<<fp->symbols_per_tti))-1;
   LOG_D(PHY,"fh_if4p5_north_asynch_in: RU %d, frame %d, subframe %d\n",ru->idx,*frame,*subframe);
-  do {   
+
+  do {
     recv_IF4p5(ru, &frame_tx, &subframe_tx, &packet_type, &symbol_number);
     LOG_D(PHY,"income frame.subframe %d.%d, our frame.subframe.symbol_number %d.%d.%d (symbol mask %x)\n",frame_tx,subframe_tx,*frame,*subframe,symbol_number,symbol_mask);
-    if (ru->cmd == STOP_RU){
+
+    if (ru->cmd == STOP_RU) {
       LOG_E(PHY,"Got STOP_RU\n");
       AssertFatal((ret=pthread_mutex_lock(&proc->mutex_ru))==0,"mutex_lock returns %d\n",ret);
       proc->instance_cnt_ru = -1;
       AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_ru))==0,"mutex_unlock returns %d\n",ret);
       ru->cmd=STOP_RU;
       return;
-    } 
+    }
+
     if ((subframe_select(fp,subframe_tx) == SF_DL) && (symbol_number == 0)) start_meas(&ru->rx_fhaul);
 
     LOG_D(PHY,"subframe %d (%d): frame %d, subframe %d, symbol %d\n",
-	  *subframe,subframe_select(fp,*subframe),frame_tx,subframe_tx,symbol_number);
+          *subframe,subframe_select(fp,*subframe),frame_tx,subframe_tx,symbol_number);
 
     if (proc->first_tx != 0) {
       *frame    = frame_tx;
@@ -440,25 +450,23 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
       proc->first_tx = 0;
       symbol_mask_full = ((subframe_select(fp,*subframe) == SF_S) ? (1<<fp->dl_symbols_in_S_subframe) : (1<<fp->symbols_per_tti))-1;
     } else {
-     /* AssertFatal(frame_tx == *frame,
-                  "frame_tx %d is not what we expect %d\n",frame_tx,*frame);
-      AssertFatal(subframe_tx == *subframe,
-		  "In frame_tx %d : subframe_tx %d is not what we expect %d\n",frame_tx,subframe_tx,*subframe);
-     */
+      /* AssertFatal(frame_tx == *frame,
+                   "frame_tx %d is not what we expect %d\n",frame_tx,*frame);
+       AssertFatal(subframe_tx == *subframe,
+       "In frame_tx %d : subframe_tx %d is not what we expect %d\n",frame_tx,subframe_tx,*subframe);
+      */
       *frame    = frame_tx;
       *subframe = subframe_tx;
     }
 
     if (packet_type == IF4p5_PDLFFT) {
       symbol_mask = symbol_mask | (1<<symbol_number);
-    }
-    else AssertFatal(1==0,"Illegal IF4p5 packet type (should only be IF4p5_PDLFFT got %d\n",packet_type);
-  } while (symbol_mask != symbol_mask_full);    
+    } else AssertFatal(1==0,"Illegal IF4p5 packet type (should only be IF4p5_PDLFFT got %d\n",packet_type);
+  } while (symbol_mask != symbol_mask_full);
 
   if (subframe_select(fp,subframe_tx) == SF_DL) stop_meas(&ru->rx_fhaul);
 
   ru->north_in_cnt++;
-
   proc->subframe_tx  = subframe_tx;
   proc->frame_tx     = frame_tx;
 
@@ -466,6 +474,7 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
 
   proc->timestamp_tx = ((((uint64_t)frame_tx + (uint64_t)proc->frame_tx_unwrap) * 10) + (uint64_t)subframe_tx) * (uint64_t)fp->samples_per_tti;
   LOG_D(PHY,"RU %d/%d TST %llu, frame %d, subframe %d\n",ru->idx,0,(long long unsigned int)proc->timestamp_tx,frame_tx,subframe_tx);
+
   // dump VCD output for first RU in list
   if (ru == RC.ru[0]) {
     /*VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, frame_tx );
@@ -475,7 +484,6 @@ void fh_if4p5_north_asynch_in(RU_t *ru,int *frame,int *subframe) {
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_IF4P5_NORTH_ASYNCH_IN,subframe_tx);
   }
 
-
   if (ru->feptx_ofdm) ru->feptx_ofdm(ru);
 
   if (ru->fh_south_out) ru->fh_south_out(ru);
@@ -495,11 +503,14 @@ void fh_if4p5_north_out(RU_t *ru) {
   RU_proc_t *proc=&ru->proc;
   LTE_DL_FRAME_PARMS *fp = &ru->frame_parms;
   const int subframe     = proc->subframe_rx;
-  if (ru->idx==0){
- 	 VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_IF4P5_NORTH_OUT, proc->subframe_rx );
-         VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_IF4P5_NORTH_OUT, proc->frame_rx );
+
+  if (ru->idx==0) {
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_IF4P5_NORTH_OUT, proc->subframe_rx );
+    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_IF4P5_NORTH_OUT, proc->frame_rx );
   }
+
   LOG_D(PHY,"fh_if4p5_north_out: Sending IF4p5_PULFFT SFN.SF %d.%d\n",proc->frame_rx,proc->subframe_rx);
+
   if ((fp->frame_type == TDD) && (subframe_select(fp,subframe)!=SF_UL)) {
     /// **** in TDD during DL send_IF4 of ULTICK to RCC **** ///
     send_IF4p5(ru, proc->frame_rx, proc->subframe_rx, IF4p5_PULTICK);
@@ -539,7 +550,6 @@ static void *emulatedRF_thread(void *param) {
   pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), &cpuset);
   int policy;
   int ret;
-
   struct sched_param sparam;
   memset(&sparam, 0, sizeof(sparam));
   sparam.sched_priority = sched_get_priority_max(SCHED_FIFO);
@@ -570,12 +580,9 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) {
   void *rxp[ru->nb_rx];
   unsigned int rxs;
   int i;
-
-
   int resynch=0;
-  
-
   openair0_timestamp ts=0,old_ts=0;
+
   for (i=0; i<ru->nb_rx; i++)
     rxp[i] = (void *)&ru->common.rxdata[i][*subframe*fp->samples_per_tti];
 
@@ -595,19 +602,20 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) {
   }
 
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 );
-
   ru->south_in_cnt++;
   LOG_D(PHY,"south_in_cnt %d\n",ru->south_in_cnt);
 
   if (ru->cmd==RU_FRAME_RESYNCH) {
     LOG_I(PHY,"Applying frame resynch %d => %d\n",*frame,ru->cmdval);
+
     if (proc->frame_rx>ru->cmdval) ru->ts_offset += (proc->frame_rx - ru->cmdval)*fp->samples_per_tti*10;
     else ru->ts_offset -= (-proc->frame_rx + ru->cmdval)*fp->samples_per_tti*10;
+
     *frame = ru->cmdval;
     ru->cmd=EMPTY;
     resynch=1;
   }
- 
+
   proc->timestamp_rx = ts-ru->ts_offset;
 
   //  AssertFatal(rxs == fp->samples_per_tti,
@@ -620,19 +628,16 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) {
   if (proc->first_rx == 1) {
     ru->ts_offset = proc->timestamp_rx;
     proc->timestamp_rx = 0;
-  } 
-  else if (resynch==0 && (proc->timestamp_rx - old_ts != fp->samples_per_tti)) {
+  } else if (resynch==0 && (proc->timestamp_rx - old_ts != fp->samples_per_tti)) {
     LOG_I(PHY,"rx_rf: rfdevice timing drift of %"PRId64" samples (ts_off %"PRId64")\n",proc->timestamp_rx - old_ts - fp->samples_per_tti,ru->ts_offset);
     ru->ts_offset += (proc->timestamp_rx - old_ts - fp->samples_per_tti);
     proc->timestamp_rx = ts-ru->ts_offset;
   }
 
-
   proc->frame_rx     = (proc->timestamp_rx / (fp->samples_per_tti*10))&1023;
   proc->subframe_rx  = (proc->timestamp_rx / fp->samples_per_tti)%10;
   // synchronize first reception to frame 0 subframe 0
 
-
   if (ru->fh_north_asynch_in == NULL) {
 #ifdef PHY_TX_THREAD
     proc->timestamp_phy_tx = proc->timestamp_rx+((sf_ahead-1)*fp->samples_per_tti);
@@ -640,23 +645,24 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) {
     proc->frame_phy_tx     = (proc->subframe_rx>(9-(sf_ahead-1))) ? (proc->frame_rx+1)&1023 : proc->frame_rx;
 #endif
     LOG_D(PHY,"RU %d/%d TS %llu (off %d), frame %d, subframe %d\n",
-	  ru->idx,
-	  0,
-	  (unsigned long long int)proc->timestamp_rx,
-	  (int)ru->ts_offset,proc->frame_rx,proc->subframe_rx);
-    
+          ru->idx,
+          0,
+          (unsigned long long int)proc->timestamp_rx,
+          (int)ru->ts_offset,proc->frame_rx,proc->subframe_rx);
     LOG_D(PHY,"south_in/rx_rf: RU %d/%d TS %llu (off %d), frame %d, subframe %d\n",
-	  ru->idx, 
-	  0, 
-	  (unsigned long long int)proc->timestamp_rx,
-	  (int)ru->ts_offset,proc->frame_rx,proc->subframe_rx);
+          ru->idx,
+          0,
+          (unsigned long long int)proc->timestamp_rx,
+          (int)ru->ts_offset,proc->frame_rx,proc->subframe_rx);
+
     // dump VCD output for first RU in list
     if (ru == RC.ru[0]) {
       VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_RX0_RU, proc->frame_rx );
       VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_RX0_RU, proc->subframe_rx );
+
       if (ru->fh_north_asynch_in == NULL) {
-	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, proc->frame_tx );
-	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU, proc->subframe_tx );
+        VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_TX0_RU, proc->frame_tx );
+        VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_TX0_RU, proc->subframe_tx );
       }
     }
   }
@@ -702,7 +708,6 @@ void tx_rf(RU_t *ru) {
   lte_subframe_t SF_type     = subframe_select(fp,proc->subframe_tx%10);
   lte_subframe_t prevSF_type = subframe_select(fp,(proc->subframe_tx+9)%10);
   int sf_extension = 0;
-  
 
   if ((SF_type == SF_DL) ||
       (SF_type == SF_S)) {
@@ -782,17 +787,18 @@ void tx_rf(RU_t *ru) {
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 );
     // prepare tx buffer pointers
     txs = ru->rfdevice.trx_write_func(&ru->rfdevice,
-				      proc->timestamp_tx+ru->ts_offset-ru->openair0_cfg.tx_sample_advance-sf_extension,
-				      txp,
-				      siglen+sf_extension,
-				      ru->nb_tx,
-				      flags);
+                                      proc->timestamp_tx+ru->ts_offset-ru->openair0_cfg.tx_sample_advance-sf_extension,
+                                      txp,
+                                      siglen+sf_extension,
+                                      ru->nb_tx,
+                                      flags);
     ru->south_out_cnt++;
     LOG_D(PHY,"south_out_cnt %d\n",ru->south_out_cnt);
     int se = dB_fixed(signal_energy(txp[0],siglen+sf_extension));
 
     if (SF_type == SF_S) LOG_D(PHY,"[TXPATH] RU %d tx_rf (en %d,len %d), writing to TS %llu, frame %d, unwrapped_frame %d, subframe %d\n",ru->idx,se,siglen+sf_extension,
-	  (long long unsigned int)proc->timestamp_tx,proc->frame_tx,proc->frame_tx_unwrap,proc->subframe_tx);
+                                 (long long unsigned int)proc->timestamp_tx,proc->frame_tx,proc->frame_tx_unwrap,proc->subframe_tx);
+
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 );
 
     //    AssertFatal(txs ==  siglen+sf_extension,"TX : Timeout (sent %d/%d)\n",txs, siglen);
@@ -820,9 +826,7 @@ void *ru_thread_asynch_rxtx( void *param ) {
   wait_sync("ru_thread_asynch_rxtx");
   // wait for top-level synchronization and do one acquisition to get timestamp for setting frame/subframe
   LOG_I(PHY, "waiting for devices (ru_thread_asynch_rxtx)\n");
-
   wait_on_condition(&proc->mutex_asynch_rxtx,&proc->cond_asynch_rxtx,&proc->instance_cnt_asynch_rxtx,"thread_asynch");
-
   LOG_I(PHY, "devices ok (ru_thread_asynch_rxtx)\n");
 
   while (!oai_exit) {
@@ -832,24 +836,25 @@ void *ru_thread_asynch_rxtx( void *param ) {
       subframe=0;
       frame=0;
       usleep(1000);
-    }
-    else {
-      if (subframe==9) { 
-         subframe=0;
-         frame++;
-         frame&=1023;
-       } else {
-         subframe++;
-      }      
+    } else {
+      if (subframe==9) {
+        subframe=0;
+        frame++;
+        frame&=1023;
+      } else {
+        subframe++;
+      }
+
       LOG_D(PHY,"ru_thread_asynch_rxtx: Waiting on incoming fronthaul\n");
+
       // asynchronous receive from north (RRU IF4/IF5)
       if (ru->fh_north_asynch_in) {
-	if (subframe_select(&ru->frame_parms,subframe)!=SF_UL)
-	  ru->fh_north_asynch_in(ru,&frame,&subframe);
-      }
-      else AssertFatal(1==0,"Unknown function in ru_thread_asynch_rxtx\n");
+        if (subframe_select(&ru->frame_parms,subframe)!=SF_UL)
+          ru->fh_north_asynch_in(ru,&frame,&subframe);
+      } else AssertFatal(1==0,"Unknown function in ru_thread_asynch_rxtx\n");
     }
   }
+
   ru_thread_asynch_rxtx_status=0;
   return(&ru_thread_asynch_rxtx_status);
 }
@@ -864,18 +869,17 @@ void wakeup_slaves(RU_proc_t *proc) {
 
   for (i=0; i<proc->num_slaves; i++) {
     RU_proc_t *slave_proc = proc->slave_proc[i];
-
     // wake up slave FH thread
     // lock the FH mutex and make sure the thread is ready
     clock_gettime(CLOCK_REALTIME,&wait);
     wait.tv_nsec += time_ns;
-    if(wait.tv_nsec >= 1000*1000*1000)
-    {
+
+    if(wait.tv_nsec >= 1000*1000*1000) {
       wait.tv_nsec -= 1000*1000*1000;
       wait.tv_sec  += 1;
     }
-    AssertFatal((ret=pthread_mutex_timedlock(&slave_proc->mutex_FH,&wait))==0,"ERROR pthread_mutex_lock for RU %d slave %d (IC %d)\n",proc->ru->idx,slave_proc->ru->idx,slave_proc->instance_cnt_FH);
 
+    AssertFatal((ret=pthread_mutex_timedlock(&slave_proc->mutex_FH,&wait))==0,"ERROR pthread_mutex_lock for RU %d slave %d (IC %d)\n",proc->ru->idx,slave_proc->ru->idx,slave_proc->instance_cnt_FH);
     int cnt_slave            = ++slave_proc->instance_cnt_FH;
     slave_proc->frame_rx     = proc->frame_rx;
     slave_proc->subframe_rx  = proc->subframe_rx;
@@ -886,9 +890,9 @@ void wakeup_slaves(RU_proc_t *proc) {
     if (cnt_slave == 0) {
       // the thread was presumably waiting where it should and can now be woken up
       if (pthread_cond_signal(&slave_proc->cond_FH) != 0) {
-	LOG_E( PHY, "ERROR pthread_cond_signal for RU %d, slave RU %d\n",proc->ru->idx,slave_proc->ru->idx);
-	exit_fun( "ERROR pthread_cond_signal" );
-	break;
+        LOG_E( PHY, "ERROR pthread_cond_signal for RU %d, slave RU %d\n",proc->ru->idx,slave_proc->ru->idx);
+        exit_fun( "ERROR pthread_cond_signal" );
+        break;
       }
     } else {
       LOG_W( PHY,"[RU] Frame %d, slave %d thread busy!! (cnt_FH %i)\n",slave_proc->frame_rx,slave_proc->ru->idx, cnt_slave);
@@ -939,7 +943,7 @@ void *ru_thread_prach( void *param ) {
                NULL,
                NULL,
                NULL,
-	       NULL,
+               NULL,
                proc->frame_prach,
                0
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
@@ -978,7 +982,7 @@ void *ru_thread_prach_br( void *param ) {
              NULL,
              NULL,
              NULL,
-	     NULL,
+             NULL,
              proc->frame_prach_br,
              0,
              1);
@@ -996,18 +1000,17 @@ int wakeup_synch(RU_t *ru) {
   int ret;
   struct timespec wait;
   int time_ns = 5000000L;
-
   // wake up synch thread
   // lock the synch mutex and make sure the thread is readif (pthread_mutex_timedlock(&ru->proc.mutex_synch,&wait) != 0) {
   clock_gettime(CLOCK_REALTIME,&wait);
   wait.tv_nsec += time_ns;
-  if(wait.tv_nsec >= 1000*1000*1000)
-  {
+
+  if(wait.tv_nsec >= 1000*1000*1000) {
     wait.tv_nsec -= 1000*1000*1000;
     wait.tv_sec  += 1;
   }
-  AssertFatal((ret=pthread_mutex_timedlock(&ru->proc.mutex_synch,&wait)) == 0,"[RU] ERROR pthread_mutex_lock for RU synch thread (IC %d)\n", ru->proc.instance_cnt_synch );
 
+  AssertFatal((ret=pthread_mutex_timedlock(&ru->proc.mutex_synch,&wait)) == 0,"[RU] ERROR pthread_mutex_lock for RU synch thread (IC %d)\n", ru->proc.instance_cnt_synch );
   ++ru->proc.instance_cnt_synch;
 
   // the thread can now be woken up
@@ -1053,6 +1056,7 @@ void do_ru_synch(RU_t *ru) {
                                      ru->nb_rx);
 
     if (rxs != fp->samples_per_tti*10) LOG_E(PHY,"requested %d samples, got %d\n",fp->samples_per_tti*10,rxs);
+
     // wakeup synchronization processing thread
     wakeup_synch(ru);
     ic=0;
@@ -1079,79 +1083,79 @@ void do_ru_synch(RU_t *ru) {
   // read in rx_offset samples
   LOG_I(PHY,"Resynchronizing by %d samples\n",ru->rx_offset);
   rxs = ru->rfdevice.trx_read_func(&ru->rfdevice,
-				   &(proc->timestamp_rx),
-				   rxp,
-				   ru->rx_offset,
-				   ru->nb_rx);
+                                   &(proc->timestamp_rx),
+                                   rxp,
+                                   ru->rx_offset,
+                                   ru->nb_rx);
   // Verification of synchronization procedure
   ru->state = RU_CHECK_SYNC;
-
   LOG_I(PHY,"Exiting synch routine\n");
 }
 
-int check_sync(RU_t *ru, RU_t *ru_master, int subframe){
+int check_sync(RU_t *ru, RU_t *ru_master, int subframe) {
+  if (fabs(ru_master->proc.t[subframe].tv_nsec - ru->proc.t[subframe].tv_nsec) > 500000)
+    return 0;
 
-	if (fabs(ru_master->proc.t[subframe].tv_nsec - ru->proc.t[subframe].tv_nsec) > 500000)
-		return 0;
-	return 1;
+  return 1;
 }
 
 void wakeup_L1s(RU_t *ru) {
   int i;
   PHY_VARS_eNB **eNB_list = ru->eNB_list;
   LOG_D(PHY,"wakeup_L1s (num %d) for RU %d (%d.%d)\n",ru->num_eNB,ru->idx, ru->proc.frame_rx,ru->proc.subframe_rx);
-
   PHY_VARS_eNB *eNB=eNB_list[0];
   L1_proc_t *proc      = &eNB->proc;
   struct timespec t;
   LOG_D(PHY,"wakeup_L1s (num %d) for RU %d ru->eNB_top:%p\n",ru->num_eNB,ru->idx, ru->eNB_top);
-
   // call eNB function directly
   char string[20];
   sprintf(string,"Incoming RU %d",ru->idx);
-
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_WAKEUP_L1S_RU+ru->idx, ru->proc.frame_rx);
   VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_WAKEUP_L1S_RU+ru->idx, ru->proc.subframe_rx);
-  
   AssertFatal(0==pthread_mutex_lock(&proc->mutex_RU),"");
   VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_LOCK_MUTEX_RU+ru->idx, 1 );
-  
   //printf("wakeup_L1s: Frame %d, Subframe %d: RU %d done (wait_cnt %d),RU_mask[%d] %x\n",
   //          ru->proc.frame_rx,ru->proc.subframe_rx,ru->idx,ru->wait_cnt,ru->proc.subframe_rx,proc->RU_mask[ru->proc.subframe_rx]);
   //    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_WAKEUP_L1S_RU+ru->idx, ru->proc.frame_rx);
   //    VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_WAKEUP_L1S_RU+ru->idx, ru->proc.subframe_rx);
   clock_gettime(CLOCK_MONOTONIC,&ru->proc.t[ru->proc.subframe_rx]);
-  
-  if (proc->RU_mask[ru->proc.subframe_rx] == 0){
+
+  if (proc->RU_mask[ru->proc.subframe_rx] == 0) {
     //clock_gettime(CLOCK_MONOTONIC,&proc->t[ru->proc.subframe_rx]);
     proc->t[ru->proc.subframe_rx] = ru->proc.t[ru->proc.subframe_rx];
     //start_meas(&proc->ru_arrival_time);
     LOG_D(PHY,"RU %d starting timer for frame %d subframe %d\n",ru->idx, ru->proc.frame_rx,ru->proc.subframe_rx);
   }
-  
-  for (i=0;i<eNB->num_RU;i++) {
+
+  for (i=0; i<eNB->num_RU; i++) {
     if (eNB->RU_list[i]->wait_cnt==1 && ru->proc.subframe_rx!=9) eNB->RU_list[i]->wait_cnt=0;
+
     LOG_D(PHY,"RU %d has frame %d and subframe %d, state %s\n",eNB->RU_list[i]->idx,eNB->RU_list[i]->proc.frame_rx, eNB->RU_list[i]->proc.subframe_rx, ru_states[eNB->RU_list[i]->state]);
+
     if (ru == eNB->RU_list[i] && eNB->RU_list[i]->wait_cnt == 0) {
-      //	AssertFatal((proc->RU_mask&(1<<i)) == 0, "eNB %d frame %d, subframe %d : previous information from RU %d (num_RU %d,mask %x) has not been served yet!\n",eNB->Mod_id,ru->proc.frame_rx,ru->proc.subframe_rx,ru->idx,eNB->num_RU,proc->RU_mask);
+      //  AssertFatal((proc->RU_mask&(1<<i)) == 0, "eNB %d frame %d, subframe %d : previous information from RU %d (num_RU %d,mask %x) has not been served yet!\n",eNB->Mod_id,ru->proc.frame_rx,ru->proc.subframe_rx,ru->idx,eNB->num_RU,proc->RU_mask);
       proc->RU_mask[ru->proc.subframe_rx] |= (1<<i);
-    }else if (/*eNB->RU_list[i]->state == RU_SYNC || */
-	      (eNB->RU_list[i]->is_slave==1 && eNB->RU_list[i]->wait_cnt>0 && ru!=eNB->RU_list[i] && ru->is_slave==0)){
+    } else if (/*eNB->RU_list[i]->state == RU_SYNC || */
+      (eNB->RU_list[i]->is_slave==1 && eNB->RU_list[i]->wait_cnt>0 && ru!=eNB->RU_list[i] && ru->is_slave==0)) {
       proc->RU_mask[ru->proc.subframe_rx] |= (1<<i);
     }
+
     //printf("RU %d, RU_mask[%d] %d, i %d, frame %d, slave %d, ru->cnt %d, i->cnt %d\n",ru->idx,ru->proc.subframe_rx,proc->RU_mask[ru->proc.subframe_rx],i,ru->proc.frame_rx,ru->is_slave,ru->wait_cnt,eNB->RU_list[i]->wait_cnt);
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_MASK_RU, proc->RU_mask[ru->proc.subframe_rx]);
+
     if (ru->is_slave == 0 && ( (proc->RU_mask[ru->proc.subframe_rx]&(1<<i)) == 1) && eNB->RU_list[i]->state == RU_RUN) { // This is master & the RRU has already been received
       if (check_sync(eNB->RU_list[i],eNB->RU_list[0],ru->proc.subframe_rx)  == 0)
-	LOG_E(PHY,"RU %d is not SYNC, subframe %d, time  %f this is master\n", eNB->RU_list[i]->idx, ru->proc.subframe_rx, fabs(eNB->RU_list[i]->proc.t[ru->proc.subframe_rx].tv_nsec - eNB->RU_list[0]->proc.t[ru->proc.subframe_rx].tv_nsec));
-    }else if (ru->is_slave == 1 && ru->state == RU_RUN && ( (proc->RU_mask[ru->proc.subframe_rx]&(1<<0)) == 1)){ // master already received. TODO: we assume that RU0 is master.
+        LOG_E(PHY,"RU %d is not SYNC, subframe %d, time  %f this is master\n", eNB->RU_list[i]->idx, ru->proc.subframe_rx,
+              fabs(eNB->RU_list[i]->proc.t[ru->proc.subframe_rx].tv_nsec - eNB->RU_list[0]->proc.t[ru->proc.subframe_rx].tv_nsec));
+    } else if (ru->is_slave == 1 && ru->state == RU_RUN && ( (proc->RU_mask[ru->proc.subframe_rx]&(1<<0)) == 1)) { // master already received. TODO: we assume that RU0 is master.
       if (check_sync(ru,eNB->RU_list[0],ru->proc.subframe_rx)  == 0)
-	LOG_E(PHY,"RU %d is not SYNC time, subframe %d, time  %f\n", ru->idx, ru->proc.subframe_rx, fabs(ru->proc.t[ru->proc.subframe_rx].tv_nsec - eNB->RU_list[0]->proc.t[ru->proc.subframe_rx].tv_nsec));
+        LOG_E(PHY,"RU %d is not SYNC time, subframe %d, time  %f\n", ru->idx, ru->proc.subframe_rx, fabs(ru->proc.t[ru->proc.subframe_rx].tv_nsec - eNB->RU_list[0]->proc.t[ru->proc.subframe_rx].tv_nsec));
     }
   }
+
   //clock_gettime(CLOCK_MONOTONIC,&t);
   //LOG_I(PHY,"RU mask is now %x, time is %lu\n",proc->RU_mask[ru->proc.subframe_rx], t.tv_nsec - proc->t[ru->proc.subframe_rx].tv_nsec);
-  
+
   if (proc->RU_mask[ru->proc.subframe_rx] == (1<<eNB->num_RU)-1) { // all RUs have provided their information so continue on and wakeup eNB top
     LOG_D(PHY,"ru_mask is %d \n ", proc->RU_mask[ru->proc.subframe_rx]);
     LOG_D(PHY,"the number of RU is %d, the current ru is RU %d \n ", (1<<eNB->num_RU)-1, ru->idx);
@@ -1162,29 +1166,30 @@ void wakeup_L1s(RU_t *ru) {
     clock_gettime(CLOCK_MONOTONIC,&t);
     //stop_meas(&proc->ru_arrival_time);
     /*    AssertFatal(t.tv_nsec < proc->t[ru->proc.subframe_rx].tv_nsec+5000000,
-		"Time difference for subframe %d (Frame %d) => %lu > 5ms, this is RU %d\n",
-		ru->proc.subframe_rx, ru->proc.frame_rx, t.tv_nsec - proc->t[ru->proc.subframe_rx].tv_nsec, ru->idx);
+    "Time difference for subframe %d (Frame %d) => %lu > 5ms, this is RU %d\n",
+    ru->proc.subframe_rx, ru->proc.frame_rx, t.tv_nsec - proc->t[ru->proc.subframe_rx].tv_nsec, ru->idx);
     */
     // VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_FRAME_NUMBER_WAKEUP_L1S_RU+ru->idx, ru->proc.frame_rx);
     //VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_SUBFRAME_NUMBER_WAKEUP_L1S_RU+ru->idx, ru->proc.subframe_rx);
     AssertFatal(0==pthread_mutex_unlock(&proc->mutex_RU),"");
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_LOCK_MUTEX_RU+ru->idx, 0 );
-    
     // unlock RUs that are waiting for eNB processing to be completed
     LOG_D(PHY,"RU %d wakeup eNB top for subframe %d\n", ru->idx,ru->proc.subframe_rx);
+
     if (ru->wait_cnt == 0) {
       if (ru->num_eNB==1 && ru->eNB_top!=0 && get_thread_parallel_conf() == PARALLEL_SINGLE_THREAD)
-	ru->eNB_top(eNB_list[0],proc->frame_rx,proc->subframe_rx,string,ru);
+        ru->eNB_top(eNB_list[0],proc->frame_rx,proc->subframe_rx,string,ru);
       else {
-	for (i=0;i<ru->num_eNB;i++) {
-	  eNB_list[i]->proc.ru_proc = &ru->proc;
-	  if (ru->wakeup_rxtx!=0 && ru->wakeup_rxtx(eNB_list[i],ru) < 0)
-	    {
-	      LOG_E(PHY,"could not wakeup eNB rxtx process for subframe %d\n", ru->proc.subframe_rx);
-	    }
-	}
+        for (i=0; i<ru->num_eNB; i++) {
+          eNB_list[i]->proc.ru_proc = &ru->proc;
+
+          if (ru->wakeup_rxtx!=0 && ru->wakeup_rxtx(eNB_list[i],ru) < 0) {
+            LOG_E(PHY,"could not wakeup eNB rxtx process for subframe %d\n", ru->proc.subframe_rx);
+          }
+        }
       }
     }
+
     /*
       AssertFatal(0==pthread_mutex_lock(&ruproc->mutex_eNBs),"");
       LOG_D(PHY,"RU %d sending signal to unlock waiting ru_threads\n", ru->idx);
@@ -1192,32 +1197,30 @@ void wakeup_L1s(RU_t *ru) {
       if (ruproc->instance_cnt_eNBs==-1) ruproc->instance_cnt_eNBs++;
       AssertFatal(0==pthread_mutex_unlock(&ruproc->mutex_eNBs),"");
     */
-    }
-    else{ // not all RUs have provided their information  
+  } else { // not all RUs have provided their information
     AssertFatal(0==pthread_mutex_unlock(&proc->mutex_RU),"");
     VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_LOCK_MUTEX_RU+ru->idx, 0 );
   }
-//      pthread_mutex_unlock(&proc->mutex_RU);
-//      LOG_D(PHY,"wakeup eNB top for for subframe %d\n", ru->proc.subframe_rx);
-//      ru->eNB_top(eNB_list[0],ru->proc.frame_rx,ru->proc.subframe_rx,string);
 
-    ru->proc.emulate_rf_busy = 0;
-  
+  //      pthread_mutex_unlock(&proc->mutex_RU);
+  //      LOG_D(PHY,"wakeup eNB top for for subframe %d\n", ru->proc.subframe_rx);
+  //      ru->eNB_top(eNB_list[0],ru->proc.frame_rx,ru->proc.subframe_rx,string);
+  ru->proc.emulate_rf_busy = 0;
 }
-inline int wakeup_prach_ru(RU_t *ru) {
+
+void  wakeup_prach_ru(RU_t *ru) {
   int ret;
   struct timespec wait;
   int time_ns = 5000000L;
-
   clock_gettime(CLOCK_REALTIME,&wait);
   wait.tv_nsec += time_ns;
-  if(wait.tv_nsec >= 1000*1000*1000)
-  {
+
+  if(wait.tv_nsec >= 1000*1000*1000) {
     wait.tv_nsec -= 1000*1000*1000;
     wait.tv_sec  += 1;
   }
-  AssertFatal((ret=pthread_mutex_timedlock(&ru->proc.mutex_prach,&wait)) == 0,"[RU] ERROR pthread_mutex_lock for RU prach thread (IC %d)\n", ru->proc.instance_cnt_prach);
 
+  AssertFatal((ret=pthread_mutex_timedlock(&ru->proc.mutex_prach,&wait)) == 0,"[RU] ERROR pthread_mutex_lock for RU prach thread (IC %d)\n", ru->proc.instance_cnt_prach);
 
   if (ru->proc.instance_cnt_prach==-1) {
     ++ru->proc.instance_cnt_prach;
@@ -1236,25 +1239,22 @@ inline int wakeup_prach_ru(RU_t *ru) {
   } else LOG_W(PHY,"RU prach thread busy, skipping\n");
 
   AssertFatal((ret=pthread_mutex_unlock( &ru->proc.mutex_prach ))==0,"mutex_unlock returns %d\n",ret);
-  return(0);
 }
 
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
-inline int wakeup_prach_ru_br(RU_t *ru) {
+void wakeup_prach_ru_br(RU_t *ru) {
   int ret;
   struct timespec wait;
   int time_ns = 5000000L;
-
-
   clock_gettime(CLOCK_REALTIME,&wait);
   wait.tv_nsec += time_ns;
-  if(wait.tv_nsec >= 1000*1000*1000)
-  {
+
+  if(wait.tv_nsec >= 1000*1000*1000) {
     wait.tv_nsec -= 1000*1000*1000;
     wait.tv_sec  += 1;
   }
-  AssertFatal((ret=pthread_mutex_timedlock(&ru->proc.mutex_prach_br,&wait))==0,"[RU] ERROR pthread_mutex_lock for RU prach thread BR (IC %d)\n", ru->proc.instance_cnt_prach_br);
 
+  AssertFatal((ret=pthread_mutex_timedlock(&ru->proc.mutex_prach_br,&wait))==0,"[RU] ERROR pthread_mutex_lock for RU prach thread BR (IC %d)\n", ru->proc.instance_cnt_prach_br);
 
   if (ru->proc.instance_cnt_prach_br==-1) {
     ++ru->proc.instance_cnt_prach_br;
@@ -1266,7 +1266,6 @@ inline int wakeup_prach_ru_br(RU_t *ru) {
   } else LOG_W(PHY,"RU prach thread busy, skipping\n");
 
   AssertFatal((ret=pthread_mutex_unlock( &ru->proc.mutex_prach_br ))==0,"mutex_unlock returns %d\n",ret);
-  return(0);
 }
 #endif
 
@@ -1325,7 +1324,6 @@ void fill_rf_config(RU_t *ru, char *rf_config_file) {
     cfg->rx_bw = 1.5e6;
   } else AssertFatal(1==0,"Unknown N_RB_DL %d\n",fp->N_RB_DL);
 
-
   if (fp->frame_type==TDD)
     cfg->duplex_mode = duplex_mode_TDD;
   else //FDD
@@ -1433,30 +1431,33 @@ int setup_RU_buffers(RU_t *ru) {
   return(0);
 }
 
-void* ru_stats_thread(void* param) {
-
-  RU_t               *ru      = (RU_t*)param;
-
+void *ru_stats_thread(void *param) {
+  RU_t               *ru      = (RU_t *)param;
   wait_sync("ru_stats_thread");
-  
+
   while (!oai_exit) {
     sleep(1);
+
     if (opp_enabled) {
       if (ru->feprx) print_meas(&ru->ofdm_demod_stats,"feprx",NULL,NULL);
+
       if (ru->feptx_ofdm) print_meas(&ru->ofdm_mod_stats,"feptx_ofdm",NULL,NULL);
+
       if (ru->fh_north_asynch_in) print_meas(&ru->rx_fhaul,"rx_fhaul",NULL,NULL);
+
       if (ru->fh_north_out) {
-	print_meas(&ru->tx_fhaul,"tx_fhaul",NULL,NULL);
-	print_meas(&ru->compression,"compression",NULL,NULL);
-	print_meas(&ru->transport,"transport",NULL,NULL);
-	LOG_I(PHY,"ru->north_out_cnt = %d\n",ru->north_out_cnt);
+        print_meas(&ru->tx_fhaul,"tx_fhaul",NULL,NULL);
+        print_meas(&ru->compression,"compression",NULL,NULL);
+        print_meas(&ru->transport,"transport",NULL,NULL);
+        LOG_I(PHY,"ru->north_out_cnt = %d\n",ru->north_out_cnt);
       }
+
       if (ru->fh_south_out) LOG_I(PHY,"ru->south_out_cnt = %d\n",ru->south_out_cnt);
+
       if (ru->fh_north_asynch_in) LOG_I(PHY,"ru->north_in_cnt = %d\n",ru->north_in_cnt);
-      
     }
   }
-  
+
   return(NULL);
 }
 
@@ -1489,7 +1490,6 @@ void *ru_thread_tx( void *param ) {
     LOG_D(PHY,"ru_thread_tx (ru %d): Waiting for TX processing\n",ru->idx);
     // wait until eNBs are finished subframe RX n and TX n+4
     wait_on_condition(&proc->mutex_eNBs,&proc->cond_eNBs,&proc->instance_cnt_eNBs,"ru_thread_tx");
-
     LOG_D(PHY,"ru_thread_tx: TX in %d.%d\n",ru->proc.frame_tx,ru->proc.subframe_tx);
 
     if (oai_exit) break;
@@ -1504,6 +1504,7 @@ void *ru_thread_tx( void *param ) {
       // do outgoing fronthaul (south) if needed
       if ((ru->fh_north_asynch_in == NULL) && (ru->fh_south_out)) ru->fh_south_out(ru);
     }
+
     LOG_D(PHY,"ru_thread_tx: releasing RU TX in %d.%d\n",proc->frame_tx,proc->subframe_tx);
     release_thread(&proc->mutex_eNBs,&proc->instance_cnt_eNBs,"ru_thread_tx");
 
@@ -1511,34 +1512,35 @@ void *ru_thread_tx( void *param ) {
       eNB       = ru->eNB_list[i];
       eNB_proc  = &eNB->proc;
       L1_proc   = (get_thread_parallel_conf() == PARALLEL_RU_L1_TRX_SPLIT)? &eNB_proc->L1_proc_tx : &eNB_proc->L1_proc;
-
       AssertFatal((ret=pthread_mutex_lock(&eNB_proc->mutex_RU_tx))==0,"mutex_lock returns %d\n",ret);
+
       for (int j=0; j<eNB->num_RU; j++) {
         if (ru == eNB->RU_list[j]) {
           if ((eNB_proc->RU_mask_tx&(1<<j)) > 0)
             LOG_E(PHY,"eNB %d frame %d, subframe %d : previous information from RU tx %d (num_RU %d,mask %x) has not been served yet!\n",
                   eNB->Mod_id,eNB_proc->frame_rx,eNB_proc->subframe_rx,ru->idx,eNB->num_RU,eNB_proc->RU_mask_tx);
 
+          eNB_proc->RU_mask_tx |= (1<<j);
+        } else if (/*eNB->RU_list[j]->state==RU_SYNC ||*/ (eNB->RU_list[j]->is_slave==1 && eNB->RU_list[j]->wait_cnt>0 && ru!=eNB->RU_list[j] && ru->is_slave==0)) {
           eNB_proc->RU_mask_tx |= (1<<j);
         }
-        else if (/*eNB->RU_list[j]->state==RU_SYNC ||*/ (eNB->RU_list[j]->is_slave==1 && eNB->RU_list[j]->wait_cnt>0 && ru!=eNB->RU_list[j] && ru->is_slave==0)){
-		eNB_proc->RU_mask_tx |= (1<<j);
-        }
-	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_MASK_TX_RU, eNB_proc->RU_mask_tx);
+
+        VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_MASK_TX_RU, eNB_proc->RU_mask_tx);
       }
+
       if (eNB_proc->RU_mask_tx != (1<<eNB->num_RU)-1) {  // not all RUs have provided their information so return
-      	//printf("Not all RUs have provided their info (mask = %d), RU %d, num_RUs %d\n", eNB_proc->RU_mask_tx,ru->idx,eNB->num_RU);
+        //printf("Not all RUs have provided their info (mask = %d), RU %d, num_RUs %d\n", eNB_proc->RU_mask_tx,ru->idx,eNB->num_RU);
         AssertFatal((ret=pthread_mutex_unlock(&eNB_proc->mutex_RU_tx))==0,"mutex_unlock returns %d\n",ret);
       } else { // all RUs TX are finished so send the ready signal to eNB processing
         eNB_proc->RU_mask_tx = 0;
-	VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_MASK_TX_RU, eNB_proc->RU_mask_tx);
+        VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME(VCD_SIGNAL_DUMPER_VARIABLES_MASK_TX_RU, eNB_proc->RU_mask_tx);
         AssertFatal((ret=pthread_mutex_unlock(&eNB_proc->mutex_RU_tx))==0,"mutex_unlock returns %d\n",ret);
         AssertFatal((ret=pthread_mutex_lock( &L1_proc->mutex_RUs))==0,"mutex_lock returns %d\n",ret);
         L1_proc->instance_cnt_RUs = 0;
-
         LOG_D(PHY,"ru_thread_tx: Signaling RU TX done in %d.%d\n",proc->frame_tx,proc->subframe_tx);
         // the thread can now be woken up
-        LOG_D(PHY,"ru_thread_tx: clearing mask and Waking up L1 thread\n"); 
+        LOG_D(PHY,"ru_thread_tx: clearing mask and Waking up L1 thread\n");
+
         if (pthread_cond_signal(&L1_proc->cond_RUs) != 0) {
           LOG_E( PHY, "[eNB] ERROR pthread_cond_signal for eNB TXnp4 thread\n");
           exit_fun( "ERROR pthread_cond_signal" );
@@ -1547,8 +1549,9 @@ void *ru_thread_tx( void *param ) {
         AssertFatal((ret=pthread_mutex_unlock( &L1_proc->mutex_RUs))==0,"mutex_unlock returns %d\n",ret);
       }
     }
+
     //printf("ru_thread_tx: Frame %d, Subframe %d: RU %d done (wait_cnt %d),RU_mask_tx %d\n",
-      //    eNB_proc->frame_rx,eNB_proc->subframe_rx,ru->idx,ru->wait_cnt,eNB_proc->RU_mask_tx);
+    //    eNB_proc->frame_rx,eNB_proc->subframe_rx,ru->idx,ru->wait_cnt,eNB_proc->RU_mask_tx);
   }
 
   release_thread(&proc->mutex_FH1,&proc->instance_cnt_FH1,"ru_thread_tx");
@@ -1566,7 +1569,6 @@ void *ru_thread( void *param ) {
   cpu_set_t cpuset;
   CPU_ZERO(&cpuset);
   // set default return value
-
 #if defined(PRE_SCD_THREAD)
   dlsch_ue_select_tbl_in_use = 1;
 #endif
@@ -1577,105 +1579,100 @@ void *ru_thread( void *param ) {
   pthread_setname_np( pthread_self(),"ru thread");
   LOG_I(PHY,"thread ru created id=%ld\n", syscall(__NR_gettid));
   LOG_I(PHY,"Starting RU %d (%s,%s),\n",ru->idx,eNB_functions[ru->function],eNB_timing[ru->if_timing]);
-  
+
   if(get_softmodem_params()->emulate_rf) {
     fill_rf_config(ru,ru->rf_config_file);
     init_frame_parms(&ru->frame_parms,1);
     phy_init_RU(ru);
-    
+
     if (setup_RU_buffers(ru)!=0) {
       printf("Exiting, cannot initialize RU Buffers\n");
       exit(-1);
     }
-    
+
     LOG_I(PHY, "Signaling main thread that RU %d is ready\n",ru->idx);
     AssertFatal((ret=pthread_mutex_lock(&RC.ru_mutex))==0,"mutex_lock returns %d\n",ret);
     RC.ru_mask &= ~(1<<ru->idx);
     pthread_cond_signal(&RC.ru_cond);
     AssertFatal((ret=pthread_mutex_unlock(&RC.ru_mutex))==0,"mutex_unlock returns %d\n",ret);
     ru->state = RU_RUN;
-  }
-  else if (ru->has_ctrl_prt == 0){
+  } else if (ru->has_ctrl_prt == 0) {
     // There is no control port: start everything here
     LOG_I(PHY, "RU %d has not ctrl port\n",ru->idx);
-    if (ru->if_south == LOCAL_RF){
+
+    if (ru->if_south == LOCAL_RF) {
       fill_rf_config(ru,ru->rf_config_file);
       init_frame_parms(&ru->frame_parms,1);
       ru->frame_parms.nb_antennas_rx = ru->nb_rx;
       phy_init_RU(ru);
-      
-      
       openair0_device_load(&ru->rfdevice,&ru->openair0_cfg);
-      
+
       if (setup_RU_buffers(ru)!=0) {
-	printf("Exiting, cannot initialize RU Buffers\n");
-	exit(-1);
+        printf("Exiting, cannot initialize RU Buffers\n");
+        exit(-1);
       }
+
       AssertFatal((ret=pthread_mutex_lock(&RC.ru_mutex))==0,"mutex_lock returns %d\n",ret);
       RC.ru_mask &= ~(1<<ru->idx);
       pthread_cond_signal(&RC.ru_cond);
       AssertFatal((ret=pthread_mutex_unlock(&RC.ru_mutex))==0,"mutex_unlock returns %d\n",ret);
     }
+
     AssertFatal((ret=pthread_mutex_lock(&RC.ru_mutex))==0,"mutex_lock returns %d\n",ret);
     RC.ru_mask &= ~(1<<ru->idx);
     pthread_cond_signal(&RC.ru_cond);
     AssertFatal((ret=pthread_mutex_unlock(&RC.ru_mutex))==0,"mutex_unlock returns %d\n",ret);
-    
     ru->state = RU_RUN;
-    
-    
   }
-  
+
   AssertFatal((ret=pthread_mutex_lock(&proc->mutex_FH1))==0,"mutex_lock returns %d\n",ret);
   proc->instance_cnt_FH1 = 0;
   pthread_cond_signal(&proc->cond_FH1);
   AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_FH1))==0,"mutex_unlock returns %d\n",ret);
 
   while (!oai_exit) {
-    
     if (ru->if_south != LOCAL_RF && ru->is_slave==1) {
       ru->wait_cnt = 100;
-    }
-    else { 
+    } else {
       ru->wait_cnt = 0;
       ru->wait_check = 0;
     }
-    
-    
+
     // wait to be woken up
     if (ru->function!=eNodeB_3GPP && ru->has_ctrl_prt == 1) {
       if (wait_on_condition(&ru->proc.mutex_ru,&ru->proc.cond_ru_thread,&ru->proc.instance_cnt_ru,"ru_thread")<0) break;
-    }
-    else wait_sync("ru_thread");
-    
+    } else wait_sync("ru_thread");
+
     if(!(get_softmodem_params()->emulate_rf)) {
       if (ru->is_slave == 0) AssertFatal(ru->state == RU_RUN,"ru-%d state = %s != RU_RUN\n",ru->idx,ru_states[ru->state]);
-      else if (ru->is_slave == 1) AssertFatal(ru->state == RU_SYNC || ru->state == RU_RUN || ru->state == RU_CHECK_SYNC,"ru %d state = %s != RU_SYNC or RU_RUN or RU_CHECK_SYNC\n",ru->idx,ru_states[ru->state]); 
+      else if (ru->is_slave == 1) AssertFatal(ru->state == RU_SYNC || ru->state == RU_RUN ||
+                                                ru->state == RU_CHECK_SYNC,"ru %d state = %s != RU_SYNC or RU_RUN or RU_CHECK_SYNC\n",ru->idx,ru_states[ru->state]);
+
       // Start RF device if any
       if (ru->start_rf) {
-	if (ru->start_rf(ru) != 0)
-	  LOG_E(HW,"Could not start the RF device\n");
-	else LOG_I(PHY,"RU %d rf device ready\n",ru->idx);
-      }
-      else LOG_D(PHY,"RU %d no rf device\n",ru->idx);
+        if (ru->start_rf(ru) != 0)
+          LOG_E(HW,"Could not start the RF device\n");
+        else LOG_I(PHY,"RU %d rf device ready\n",ru->idx);
+      } else LOG_D(PHY,"RU %d no rf device\n",ru->idx);
     }
+
     // if an asnych_rxtx thread exists
     // wakeup the thread because the devices are ready at this point
-    
+
     if ((ru->fh_south_asynch_in)||(ru->fh_north_asynch_in)) {
       AssertFatal((ret=pthread_mutex_lock(&proc->mutex_asynch_rxtx))==0,"mutex_lock returns %d\n",ret);
       proc->instance_cnt_asynch_rxtx=0;
       pthread_cond_signal(&proc->cond_asynch_rxtx);
       AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_asynch_rxtx))==0,"mutex_unlock returns %d\n",ret);
     } else LOG_D(PHY,"RU %d no asynch_south interface\n",ru->idx);
-    
+
     // if this is a slave RRU, try to synchronize on the DL frequency
     if ((ru->is_slave == 1) && (ru->if_south == LOCAL_RF)) do_ru_synch(ru);
-    
+
     LOG_D(PHY,"Starting steady-state operation\n");
+
     // This is a forever while loop, it loops over subframes which are scheduled by incoming samples from HW devices
     while (ru->state == RU_RUN || ru->state == RU_CHECK_SYNC) {
-      
       // these are local subframe/frame counters to check that we are in synch with the fronthaul timing.
       // They are set on the first rx/tx in the underly FH routines.
       if (subframe==9) {
@@ -1685,120 +1682,118 @@ void *ru_thread( void *param ) {
       } else {
         subframe++;
       }
-      
+
       // synchronization on input FH interface, acquire signals/data and block
       if (ru->fh_south_in) ru->fh_south_in(ru,&frame,&subframe);
       else AssertFatal(1==0, "No fronthaul interface at south port");
-      
+
 #ifdef PHY_TX_THREAD
-      if(first_phy_tx == 0)
-	{ 
-	  phy_tx_end = 0;
-	  phy_tx_txdataF_end = 0;
-          AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_phy_tx))==0,"[RU] ERROR pthread_mutex_lock for phy tx thread (IC %d)\n", ru->proc.instance_cnt_phy_tx);
-
-	  if (ru->proc.instance_cnt_phy_tx==-1) {
-	    ++ru->proc.instance_cnt_phy_tx;
-	    
-	    // the thread can now be woken up
-	    AssertFatal(pthread_cond_signal(&ru->proc.cond_phy_tx) == 0, "ERROR pthread_cond_signal for phy_tx thread\n");
-	  }else{
-	    LOG_E(PHY,"phy tx thread busy, skipping\n");
-	    ++ru->proc.instance_cnt_phy_tx;
-	  }
-          AssertFatal((ret=pthread_mutex_unlock( &ru->proc.mutex_phy_tx ))==0,"mutex_unlock returns %d\n",ret);
-	} else { 
+
+      if(first_phy_tx == 0) {
+        phy_tx_end = 0;
+        phy_tx_txdataF_end = 0;
+        AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_phy_tx))==0,"[RU] ERROR pthread_mutex_lock for phy tx thread (IC %d)\n", ru->proc.instance_cnt_phy_tx);
+
+        if (ru->proc.instance_cnt_phy_tx==-1) {
+          ++ru->proc.instance_cnt_phy_tx;
+          // the thread can now be woken up
+          AssertFatal(pthread_cond_signal(&ru->proc.cond_phy_tx) == 0, "ERROR pthread_cond_signal for phy_tx thread\n");
+        } else {
+          LOG_E(PHY,"phy tx thread busy, skipping\n");
+          ++ru->proc.instance_cnt_phy_tx;
+        }
+
+        AssertFatal((ret=pthread_mutex_unlock( &ru->proc.mutex_phy_tx ))==0,"mutex_unlock returns %d\n",ret);
+      } else {
         phy_tx_end = 1;
         phy_tx_txdataF_end = 1;
       }
+
       first_phy_tx = 0;
 #endif
-      
+
       if (ru->stop_rf && ru->cmd == STOP_RU) {
         ru->stop_rf(ru);
         ru->state = RU_IDLE;
         ru->cmd   = EMPTY;
         LOG_I(PHY,"RU %d rf device stopped\n",ru->idx);
         break;
-      }
-      else if (ru->cmd == STOP_RU) {
+      } else if (ru->cmd == STOP_RU) {
         ru->state = RU_IDLE;
         ru->cmd   = EMPTY;
         LOG_I(PHY,"RU %d stopped\n",ru->idx);
         break;
       }
+
       if (oai_exit == 1) break;
-      
+
       if (ru->wait_cnt > 0) {
-	
         ru->wait_cnt--;
         LOG_D(PHY,"RU thread %d, frame %d, subframe %d, wait_cnt %d \n",ru->idx, frame, subframe, ru->wait_cnt);
-	
+
         if (ru->if_south!=LOCAL_RF && ru->wait_cnt <=20 && subframe == 5 && frame != RC.ru[0]->proc.frame_rx && resynch_done == 0) {
-	  // Send RRU_frame adjust
+          // Send RRU_frame adjust
           RRU_CONFIG_msg_t rru_config_msg;
           rru_config_msg.type = RRU_frame_resynch;
           rru_config_msg.len  = sizeof(RRU_CONFIG_msg_t); // TODO: set to correct msg len
-          ((uint16_t*)&rru_config_msg.msg[0])[0] = RC.ru[0]->proc.frame_rx;
+          ((uint16_t *)&rru_config_msg.msg[0])[0] = RC.ru[0]->proc.frame_rx;
           ru->cmd=WAIT_RESYNCH;
           LOG_I(PHY,"Sending Frame Resynch %d to RRU %d\n", RC.ru[0]->proc.frame_rx,ru->idx);
           AssertFatal((ru->ifdevice.trx_ctlsend_func(&ru->ifdevice,&rru_config_msg,rru_config_msg.len)!=-1),"Failed to send msg to RAU\n");
           resynch_done=1;
         }
+
         wakeup_L1s(ru);
-      }
-      else {
-	
+      } else {
         LOG_D(PHY,"RU thread %d, frame %d, subframe %d \n",
               ru->idx,frame,subframe);
-	
+
         if ((ru->do_prach>0) && (is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx)==1)) {
           LOG_D(PHY,"Waking up prach for %d.%d\n",proc->frame_rx,proc->subframe_rx);
           wakeup_prach_ru(ru);
         }
-	
-	
+
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
         else if ((ru->do_prach>0) && (is_prach_subframe(fp, proc->frame_rx, proc->subframe_rx)>1))
           wakeup_prach_ru_br(ru);
+
 #endif
-	
-	// adjust for timing offset between RU
-	if (ru->idx!=0) proc->frame_tx = (proc->frame_tx+proc->frame_offset)&1023;
-	
-	// At this point, all information for subframe has been received on FH interface
-	// If this proc is to provide synchronization, do so
-	wakeup_slaves(proc);
-	
+
+        // adjust for timing offset between RU
+        if (ru->idx!=0) proc->frame_tx = (proc->frame_tx+proc->frame_offset)&1023;
+
+        // At this point, all information for subframe has been received on FH interface
+        // If this proc is to provide synchronization, do so
+        wakeup_slaves(proc);
+
         // do RX front-end processing (frequency-shift, dft) if needed
-	if (ru->feprx) ru->feprx(ru);
-	
+        if (ru->feprx) ru->feprx(ru);
+
         // wakeup all eNB processes waiting for this RU
         AssertFatal((ret=pthread_mutex_lock(&proc->mutex_eNBs))==0,"mutex_lock returns %d\n",ret);
-	if (proc->instance_cnt_eNBs==0) proc->instance_cnt_eNBs--;
+
+        if (proc->instance_cnt_eNBs==0) proc->instance_cnt_eNBs--;
+
         AssertFatal((ret=pthread_mutex_unlock(&proc->mutex_eNBs))==0,"mutex_unlock returns %d\n",ret);
-	
 #if defined(PRE_SCD_THREAD)
-	new_dlsch_ue_select_tbl_in_use = dlsch_ue_select_tbl_in_use;
-	dlsch_ue_select_tbl_in_use = !dlsch_ue_select_tbl_in_use;
-	memcpy(&pre_scd_eNB_UE_stats,&RC.mac[ru->eNB_list[0]->Mod_id]->UE_list.eNB_UE_stats, sizeof(eNB_UE_STATS)*MAX_NUM_CCs*NUMBER_OF_UE_MAX);
-	memcpy(&pre_scd_activeUE, &RC.mac[ru->eNB_list[0]->Mod_id]->UE_list.active, sizeof(boolean_t)*NUMBER_OF_UE_MAX);
+        new_dlsch_ue_select_tbl_in_use = dlsch_ue_select_tbl_in_use;
+        dlsch_ue_select_tbl_in_use = !dlsch_ue_select_tbl_in_use;
+        memcpy(&pre_scd_eNB_UE_stats,&RC.mac[ru->eNB_list[0]->Mod_id]->UE_list.eNB_UE_stats, sizeof(eNB_UE_STATS)*MAX_NUM_CCs*NUMBER_OF_UE_MAX);
+        memcpy(&pre_scd_activeUE, &RC.mac[ru->eNB_list[0]->Mod_id]->UE_list.active, sizeof(boolean_t)*NUMBER_OF_UE_MAX);
         AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_pre_scd))==0,"[eNB] error locking proc mutex for eNB pre scd\n");
-	
-	ru->proc.instance_pre_scd++;
-	
-	if (ru->proc.instance_pre_scd == 0) {
-	  if (pthread_cond_signal(&ru->proc.cond_pre_scd) != 0) {
-	    LOG_E( PHY, "[eNB] ERROR pthread_cond_signal for eNB pre scd\n" );
-	    exit_fun( "ERROR pthread_cond_signal cond_pre_scd" );
-	  }
-	}else{
-	  LOG_E( PHY, "[eNB] frame %d subframe %d rxtx busy instance_pre_scd %d\n",
-		 frame,subframe,ru->proc.instance_pre_scd );
-	}
+        ru->proc.instance_pre_scd++;
 
-	AssertFatal((ret=pthread_mutex_unlock(&ru->proc.mutex_pre_scd))==0,"[eNB] error unlocking mutex_pre_scd mutex for eNB pre scd\n");
+        if (ru->proc.instance_pre_scd == 0) {
+          if (pthread_cond_signal(&ru->proc.cond_pre_scd) != 0) {
+            LOG_E( PHY, "[eNB] ERROR pthread_cond_signal for eNB pre scd\n" );
+            exit_fun( "ERROR pthread_cond_signal cond_pre_scd" );
+          }
+        } else {
+          LOG_E( PHY, "[eNB] frame %d subframe %d rxtx busy instance_pre_scd %d\n",
+                 frame,subframe,ru->proc.instance_pre_scd );
+        }
 
+        AssertFatal((ret=pthread_mutex_unlock(&ru->proc.mutex_pre_scd))==0,"[eNB] error unlocking mutex_pre_scd mutex for eNB pre scd\n");
 #endif
 	// wakeup all eNB processes waiting for this RU
 	if (ru->num_eNB>0) wakeup_L1s(ru);
@@ -1814,40 +1809,41 @@ void *ru_thread( void *param ) {
 #endif
 	
 #ifndef PHY_TX_THREAD
-	
-	if(get_thread_parallel_conf() == PARALLEL_SINGLE_THREAD || ru->num_eNB==0) {
-	  // do TX front-end processing if needed (precoding and/or IDFTs)
-	  if (ru->feptx_prec) ru->feptx_prec(ru);
-	  
-	  // do OFDM if needed
-	  if ((ru->fh_north_asynch_in == NULL) && (ru->feptx_ofdm)) ru->feptx_ofdm(ru);
-	  
-	  if(!(get_softmodem_params()->emulate_rf)) {
-	    // do outgoing fronthaul (south) if needed
-	    if ((ru->fh_north_asynch_in == NULL) && (ru->fh_south_out)) ru->fh_south_out(ru);
-	    
-	    if ((ru->fh_north_out) && (ru->state!=RU_CHECK_SYNC)) ru->fh_north_out(ru);
-	  }
-	  
-	  proc->emulate_rf_busy = 0;
-	}
-	
+
+        if(get_thread_parallel_conf() == PARALLEL_SINGLE_THREAD || ru->num_eNB==0) {
+          // do TX front-end processing if needed (precoding and/or IDFTs)
+          if (ru->feptx_prec) ru->feptx_prec(ru);
+
+          // do OFDM if needed
+          if ((ru->fh_north_asynch_in == NULL) && (ru->feptx_ofdm)) ru->feptx_ofdm(ru);
+
+          if(!(get_softmodem_params()->emulate_rf)) {
+            // do outgoing fronthaul (south) if needed
+            if ((ru->fh_north_asynch_in == NULL) && (ru->fh_south_out)) ru->fh_south_out(ru);
+
+            if ((ru->fh_north_out) && (ru->state!=RU_CHECK_SYNC)) ru->fh_north_out(ru);
+          }
+
+          proc->emulate_rf_busy = 0;
+        }
+
 #else
-	struct timespec time_req, time_rem;
-	time_req.tv_sec = 0;
-	time_req.tv_nsec = 10000;
-	
-	while((!oai_exit)&&(phy_tx_end == 0)){
-	  nanosleep(&time_req,&time_rem);
-	  continue;
-	}
+        struct timespec time_req, time_rem;
+        time_req.tv_sec = 0;
+        time_req.tv_nsec = 10000;
+
+        while((!oai_exit)&&(phy_tx_end == 0)) {
+          nanosleep(&time_req,&time_rem);
+          continue;
+        }
+
 #endif
       } // else wait_cnt == 0
     } // ru->state = RU_RUN
   } // while !oai_exit
-  
+
   printf( "Exiting ru_thread \n");
-  
+
   if (!(get_softmodem_params()->emulate_rf)) {
     if (ru->stop_rf != NULL) {
       if (ru->stop_rf(ru) != 0)
@@ -1855,9 +1851,8 @@ void *ru_thread( void *param ) {
       else LOG_I(PHY,"RU %d rf device stopped\n",ru->idx);
     }
   }
-  
-  return NULL;
 
+  return NULL;
 }
 
 
@@ -1869,7 +1864,6 @@ void *ru_thread_synch(void *arg) {
   int64_t avg;
   static int ru_thread_synch_status=0;
   int cnt=0;
-
   thread_top_init("ru_thread_synch",0,5000000,10000000,10000000);
   wait_sync("ru_thread_synch");
   // initialize variables for PSS detection
@@ -1884,37 +1878,36 @@ void *ru_thread_synch(void *arg) {
       // run intial synch like UE
       LOG_I(PHY,"Running initial synchronization\n");
       ru->rx_offset = ru_sync_time(ru,
-				   &peak_val,
-				   &avg);
+                                   &peak_val,
+                                   &avg);
       LOG_I(PHY,"RU synch cnt %d: %d, val %llu (%d dB,%d dB)\n",cnt,ru->rx_offset,(unsigned long long)peak_val,dB_fixed64(peak_val),dB_fixed64(avg));
       cnt++;
+
       //if (/*ru->rx_offset >= 0*/dB_fixed(peak_val)>=85 && cnt>10) {
       if (ru->rx_offset >= 0 && avg>0 && dB_fixed(peak_val/avg)>=15 && cnt>10) {
-	LOG_I(PHY,"Estimated peak_val %d dB, avg %d => timing offset %llu\n",dB_fixed(peak_val),dB_fixed(avg),(unsigned long long int)ru->rx_offset);
-	ru->in_synch = 1;
-/*
-        LOG_M("ru_sync_rx.m","rurx",&ru->common.rxdata[0][0],LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,1);
-        LOG_M("ru_sync_corr.m","sync_corr",ru->dmrs_corr,LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,6);
-        LOG_M("ru_dmrs.m","rudmrs",&ru->dmrssync[0],fp->ofdm_symbol_size,1,1);
-  */      
-//exit(-1);
+        LOG_I(PHY,"Estimated peak_val %d dB, avg %d => timing offset %llu\n",dB_fixed(peak_val),dB_fixed(avg),(unsigned long long int)ru->rx_offset);
+        ru->in_synch = 1;
+        /*
+                LOG_M("ru_sync_rx.m","rurx",&ru->common.rxdata[0][0],LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,1);
+                LOG_M("ru_sync_corr.m","sync_corr",ru->dmrs_corr,LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,6);
+                LOG_M("ru_dmrs.m","rudmrs",&ru->dmrssync[0],fp->ofdm_symbol_size,1,1);
+          */
+        //exit(-1);
       } // sync_pos > 0
-      else //AssertFatal(cnt<1000,"Cannot find synch reference\n");
-          { 
-              if (cnt>200) {
-                 LOG_M("ru_sync_rx.m","rurx",&ru->common.rxdata[0][0],LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,1);
-                 LOG_M("ru_sync_corr.m","sync_corr",ru->dmrs_corr,LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,6);
-                 LOG_M("ru_dmrs.m","rudmrs",&ru->dmrssync[0],fp->ofdm_symbol_size,1,1);
-
-                 exit(-1);
-              }
-          }
+      else { //AssertFatal(cnt<1000,"Cannot find synch reference\n");
+        if (cnt>200) {
+          LOG_M("ru_sync_rx.m","rurx",&ru->common.rxdata[0][0],LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,1);
+          LOG_M("ru_sync_corr.m","sync_corr",ru->dmrs_corr,LTE_NUMBER_OF_SUBFRAMES_PER_FRAME*fp->samples_per_tti,1,6);
+          LOG_M("ru_dmrs.m","rudmrs",&ru->dmrssync[0],fp->ofdm_symbol_size,1,1);
+          exit(-1);
+        }
+      }
     } // ru->in_synch==0
+
     if (release_thread(&ru->proc.mutex_synch,&ru->proc.instance_cnt_synch,"ru_synch_thread") < 0) break;
   } // oai_exit
 
   ru_sync_time_free(ru);
-
   ru_thread_synch_status = 0;
   return &ru_thread_synch_status;
 }
@@ -2005,13 +1998,11 @@ static void *eNB_thread_phy_tx( void *param ) {
     if (wait_on_condition(&proc->mutex_phy_tx,&proc->cond_phy_tx,&proc->instance_cnt_phy_tx,"eNB_phy_tx_thread") < 0) break;
 
     LOG_D(PHY,"Running eNB phy tx procedures\n");
-
     AssertFatal(ru->num_eNB == 1, "handle multiple L1 case\n");
     L1_proc.subframe_tx = proc->subframe_phy_tx;
     L1_proc.frame_tx = proc->frame_phy_tx;
     phy_procedures_eNB_TX(eNB_list[0], &L1_proc, 1);
     phy_tx_txdataF_end = 1;
-
     AssertFatal((ret=pthread_mutex_lock(&ru->proc.mutex_rf_tx))==0,"[RU] ERROR pthread_mutex_lock for rf tx thread (IC %d)\n", ru->proc.instance_cnt_rf_tx);
 
     if (ru->proc.instance_cnt_rf_tx==-1) {
@@ -2109,26 +2100,23 @@ extern void kill_fep_thread(RU_t *ru);
 extern void kill_feptx_thread(RU_t *ru);
 
 extern void configure_ru(int idx,
-		  void *arg);
+                         void *arg);
 
 void reset_proc(RU_t *ru) {
-
   int i=0;
   RU_proc_t *proc;
-
   AssertFatal(ru != NULL, "ru is null\n");
   proc = &ru->proc;
-
   proc->ru = ru;
   proc->first_rx                 = 1;
   proc->first_tx                 = 1;
   proc->frame_offset             = 0;
   proc->frame_tx_unwrap          = 0;
 
-  for (i=0;i<10;i++) proc->symbol_mask[i]=0;
+  for (i=0; i<10; i++) proc->symbol_mask[i]=0;
 }
 
-extern void* ru_thread_control( void* param );
+extern void *ru_thread_control( void *param );
 
 void init_RU_proc(RU_t *ru) {
   int i=0,ret;
@@ -2138,7 +2126,6 @@ void init_RU_proc(RU_t *ru) {
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
   pthread_attr_t *attr_prach_br=NULL;
 #endif
-
 #ifndef OCP_FRAMEWORK
   LOG_I(PHY,"Initializing RU proc %d (%s,%s),\n",ru->idx,eNB_functions[ru->function],eNB_timing[ru->if_timing]);
 #endif
@@ -2151,11 +2138,8 @@ void init_RU_proc(RU_t *ru) {
   proc->instance_cnt_FH1         = -1;
   proc->instance_cnt_emulateRF   = -1;
   proc->instance_cnt_asynch_rxtx = -1;
-
-  proc->instance_cnt_ru 	 = -1;
-
+  proc->instance_cnt_ru    = -1;
   proc->instance_cnt_eNBs        = -1;
-
   proc->first_rx                 = 1;
   proc->first_tx                 = 1;
   proc->frame_offset             = 0;
@@ -2172,7 +2156,6 @@ void init_RU_proc(RU_t *ru) {
   pthread_mutex_init( &proc->mutex_emulateRF,NULL);
   pthread_mutex_init( &proc->mutex_eNBs, NULL);
   pthread_mutex_init( &proc->mutex_ru,NULL);
-
   pthread_cond_init( &proc->cond_prach, NULL);
   pthread_cond_init( &proc->cond_FH, NULL);
   pthread_cond_init( &proc->cond_FH1, NULL);
@@ -2181,7 +2164,6 @@ void init_RU_proc(RU_t *ru) {
   pthread_cond_init( &proc->cond_synch,NULL);
   pthread_cond_init( &proc->cond_eNBs, NULL);
   pthread_cond_init( &proc->cond_ru_thread,NULL);
-
   pthread_attr_init( &proc->attr_FH);
   pthread_attr_init( &proc->attr_FH1);
   pthread_attr_init( &proc->attr_emulateRF);
@@ -2214,11 +2196,10 @@ void init_RU_proc(RU_t *ru) {
   attr_prach_br  = &proc->attr_prach_br;
 #endif
 #endif
-  if (ru->function!=eNodeB_3GPP) pthread_create( &proc->pthread_ctrl, attr_ctrl, ru_thread_control, (void*)ru );
-  
 
-  pthread_create( &proc->pthread_FH, attr_FH, ru_thread, (void*)ru );
+  if (ru->function!=eNodeB_3GPP) pthread_create( &proc->pthread_ctrl, attr_ctrl, ru_thread_control, (void *)ru );
 
+  pthread_create( &proc->pthread_FH, attr_FH, ru_thread, (void *)ru );
 #if defined(PRE_SCD_THREAD)
   proc->instance_pre_scd = -1;
   pthread_mutex_init( &proc->mutex_pre_scd, NULL);
@@ -2238,7 +2219,6 @@ void init_RU_proc(RU_t *ru) {
   if (get_thread_parallel_conf() == PARALLEL_RU_L1_SPLIT || get_thread_parallel_conf() == PARALLEL_RU_L1_TRX_SPLIT)
     pthread_create( &proc->pthread_FH1, attr_FH1, ru_thread_tx, (void *)ru );
 
-
   if (ru->function == NGFI_RRU_IF4p5) {
     pthread_create( &proc->pthread_prach, attr_prach, ru_thread_prach, (void *)ru );
 #if (LTE_RRC_VERSION >= MAKE_VERSION(14, 0, 0))
@@ -2248,41 +2228,36 @@ void init_RU_proc(RU_t *ru) {
     if (ru->is_slave == 1) pthread_create( &proc->pthread_synch, attr_synch, ru_thread_synch, (void *)ru);
 
     if ((ru->if_timing == synch_to_other) ||
-	(ru->function == NGFI_RRU_IF5) ||
-	(ru->function == NGFI_RRU_IF4p5)) {
-        LOG_I(PHY,"Starting ru_thread_asynch_rxtx, ru->is_slave %d, ru->generate_dmrs_sync %d\n",
-              ru->is_slave,ru->generate_dmrs_sync);
-	//generate_ul_ref_sigs();
-        //ru->dmrssync = (int16_t*)malloc16_clear(ru->frame_parms.ofdm_symbol_size*2*sizeof(int16_t)); 
-        pthread_create( &proc->pthread_asynch_rxtx, attr_asynch, ru_thread_asynch_rxtx, (void*)ru );
+        (ru->function == NGFI_RRU_IF5) ||
+        (ru->function == NGFI_RRU_IF4p5)) {
+      LOG_I(PHY,"Starting ru_thread_asynch_rxtx, ru->is_slave %d, ru->generate_dmrs_sync %d\n",
+            ru->is_slave,ru->generate_dmrs_sync);
+      //generate_ul_ref_sigs();
+      //ru->dmrssync = (int16_t*)malloc16_clear(ru->frame_parms.ofdm_symbol_size*2*sizeof(int16_t));
+      pthread_create( &proc->pthread_asynch_rxtx, attr_asynch, ru_thread_asynch_rxtx, (void *)ru );
     }
-    
-    
-  }
-  else if (ru->function == eNodeB_3GPP && ru->if_south == LOCAL_RF) { // DJP - need something else to distinguish between monolithic and PNF
+  } else if (ru->function == eNodeB_3GPP && ru->if_south == LOCAL_RF) { // DJP - need something else to distinguish between monolithic and PNF
     LOG_I(PHY,"%s() DJP - added creation of pthread_prach\n", __FUNCTION__);
-    pthread_create( &proc->pthread_prach, attr_prach, ru_thread_prach, (void*)ru );
+    pthread_create( &proc->pthread_prach, attr_prach, ru_thread_prach, (void *)ru );
     ru->state=RU_RUN;
     fill_rf_config(ru,ru->rf_config_file);
     init_frame_parms(&ru->frame_parms,1);
     ru->frame_parms.nb_antennas_rx = ru->nb_rx;
     phy_init_RU(ru);
-
-
     openair0_device_load(&ru->rfdevice,&ru->openair0_cfg);
 
-   if (setup_RU_buffers(ru)!=0) {
+    if (setup_RU_buffers(ru)!=0) {
       printf("Exiting, cannot initialize RU Buffers\n");
       exit(-1);
-   }
+    }
   }
 
   if (get_thread_worker_conf() == WORKER_ENABLE) {
     init_fep_thread(ru,NULL);
     init_feptx_thread(ru,NULL);
-  } 
-  if (opp_enabled == 1) pthread_create(&ru->ru_stats_thread,NULL,ru_stats_thread,(void*)ru); 
- 
+  }
+
+  if (opp_enabled == 1) pthread_create(&ru->ru_stats_thread,NULL,ru_stats_thread,(void *)ru);
 
   if (ru->function == eNodeB_3GPP) {
     usleep(10000);
@@ -2458,153 +2433,153 @@ void set_function_spec_param(RU_t *ru) {
   int ret;
 
   switch (ru->if_south) {
-  case LOCAL_RF:   // this is an RU with integrated RF (RRU, eNB)
-    if (ru->function ==  NGFI_RRU_IF5) {                 // IF5 RRU
-      ru->do_prach              = 0;                      // no prach processing in RU
-      ru->fh_north_in           = NULL;                   // no shynchronous incoming fronthaul from north
-      ru->fh_north_out          = fh_if5_north_out;       // need only to do send_IF5  reception
-      ru->fh_south_out          = tx_rf;                  // send output to RF
-      ru->fh_north_asynch_in    = fh_if5_north_asynch_in; // TX packets come asynchronously
-      ru->feprx                 = NULL;                   // nothing (this is a time-domain signal)
-      ru->feptx_ofdm            = NULL;                   // nothing (this is a time-domain signal)
-      ru->feptx_prec            = NULL;                   // nothing (this is a time-domain signal)
-      ru->start_if              = start_if;               // need to start the if interface for if5
-      ru->ifdevice.host_type    = RRU_HOST;
-      ru->rfdevice.host_type    = RRU_HOST;
-      ru->ifdevice.eth_params   = &ru->eth_params;
-      reset_meas(&ru->rx_fhaul);
-      reset_meas(&ru->tx_fhaul);
-      reset_meas(&ru->compression);
-      reset_meas(&ru->transport);
+    case LOCAL_RF:   // this is an RU with integrated RF (RRU, eNB)
+      if (ru->function ==  NGFI_RRU_IF5) {                 // IF5 RRU
+        ru->do_prach              = 0;                      // no prach processing in RU
+        ru->fh_north_in           = NULL;                   // no shynchronous incoming fronthaul from north
+        ru->fh_north_out          = fh_if5_north_out;       // need only to do send_IF5  reception
+        ru->fh_south_out          = tx_rf;                  // send output to RF
+        ru->fh_north_asynch_in    = fh_if5_north_asynch_in; // TX packets come asynchronously
+        ru->feprx                 = NULL;                   // nothing (this is a time-domain signal)
+        ru->feptx_ofdm            = NULL;                   // nothing (this is a time-domain signal)
+        ru->feptx_prec            = NULL;                   // nothing (this is a time-domain signal)
+        ru->start_if              = start_if;               // need to start the if interface for if5
+        ru->ifdevice.host_type    = RRU_HOST;
+        ru->rfdevice.host_type    = RRU_HOST;
+        ru->ifdevice.eth_params   = &ru->eth_params;
+        reset_meas(&ru->rx_fhaul);
+        reset_meas(&ru->tx_fhaul);
+        reset_meas(&ru->compression);
+        reset_meas(&ru->transport);
+        ret = openair0_transport_load(&ru->ifdevice,&ru->openair0_cfg,&ru->eth_params);
+        printf("openair0_transport_init returns %d for ru_id %d\n", ret, ru->idx);
+
+        if (ret<0) {
+          printf("Exiting, cannot initialize transport protocol\n");
+          exit(-1);
+        }
+      } else if (ru->function == NGFI_RRU_IF4p5) {
+        ru->do_prach              = 1;                        // do part of prach processing in RU
+        ru->fh_north_in           = NULL;                     // no synchronous incoming fronthaul from north
+        ru->fh_north_out          = fh_if4p5_north_out;       // send_IF4p5 on reception
+        ru->fh_south_out          = tx_rf;                    // send output to RF
+        ru->fh_north_asynch_in    = fh_if4p5_north_asynch_in; // TX packets come asynchronously
+        ru->feprx                 = (get_thread_worker_conf() == WORKER_DISABLE) ? fep_full :ru_fep_full_2thread;                 // RX DFTs
+        ru->feptx_ofdm            = (get_thread_worker_conf() == WORKER_DISABLE) ? feptx_ofdm : feptx_ofdm_2thread;               // this is fep with idft only (no precoding in RRU)
+        ru->feptx_prec            = NULL;
+        ru->start_if              = start_if;                 // need to start the if interface for if4p5
+        ru->ifdevice.host_type    = RRU_HOST;
+        ru->rfdevice.host_type    = RRU_HOST;
+        ru->ifdevice.eth_params   = &ru->eth_params;
+        reset_meas(&ru->rx_fhaul);
+        reset_meas(&ru->tx_fhaul);
+        reset_meas(&ru->compression);
+        reset_meas(&ru->transport);
+        ret = openair0_transport_load(&ru->ifdevice,&ru->openair0_cfg,&ru->eth_params);
+        printf("openair0_transport_init returns %d for ru_id %d\n", ret, ru->idx);
+
+        if (ret<0) {
+          printf("Exiting, cannot initialize transport protocol\n");
+          exit(-1);
+        }
+
+        malloc_IF4p5_buffer(ru);
+      } else if (ru->function == eNodeB_3GPP) {
+        ru->do_prach             = 0;                       // no prach processing in RU
+        ru->feprx                = (get_thread_worker_conf() == WORKER_DISABLE) ? fep_full : ru_fep_full_2thread;                // RX DFTs
+        ru->feptx_ofdm           = (get_thread_worker_conf() == WORKER_DISABLE) ? feptx_ofdm : feptx_ofdm_2thread;              // this is fep with idft and precoding
+        ru->feptx_prec           = feptx_prec;              // this is fep with idft and precoding
+        ru->fh_north_in          = NULL;                    // no incoming fronthaul from north
+        ru->fh_north_out         = NULL;                    // no outgoing fronthaul to north
+        ru->start_if             = NULL;                    // no if interface
+        ru->rfdevice.host_type   = RAU_HOST;
+      }
+
+      ru->fh_south_in            = rx_rf;                               // local synchronous RF RX
+      ru->fh_south_out           = tx_rf;                               // local synchronous RF TX
+      ru->start_rf               = start_rf;                            // need to start the local RF interface
+      ru->stop_rf                = stop_rf;
+      printf("configuring ru_id %d (start_rf %p)\n", ru->idx, start_rf);
+      /*
+        if (ru->function == eNodeB_3GPP) { // configure RF parameters only for 3GPP eNodeB, we need to get them from RAU otherwise
+        fill_rf_config(ru,rf_config_file);
+        init_frame_parms(&ru->frame_parms,1);
+        phy_init_RU(ru);
+        }
+
+        ret = openair0_device_load(&ru->rfdevice,&ru->openair0_cfg);
+        if (setup_RU_buffers(ru)!=0) {
+        printf("Exiting, cannot initialize RU Buffers\n");
+        exit(-1);
+        }*/
+      break;
+
+    case REMOTE_IF5: // the remote unit is IF5 RRU
+      ru->do_prach               = 0;
+      ru->feprx                  = (get_thread_worker_conf() == WORKER_DISABLE) ? fep_full : fep_full;                   // this is frequency-shift + DFTs
+      ru->feptx_prec             = feptx_prec;                 // need to do transmit Precoding + IDFTs
+      ru->feptx_ofdm             = (get_thread_worker_conf() == WORKER_DISABLE) ? feptx_ofdm : feptx_ofdm_2thread;                 // need to do transmit Precoding + IDFTs
+
+      if (ru->if_timing == synch_to_other) {
+        ru->fh_south_in          = fh_slave_south_in;                  // synchronize to master
+      } else {
+        ru->fh_south_in          = fh_if5_south_in;     // synchronous IF5 reception
+        ru->fh_south_out         = fh_if5_south_out;    // synchronous IF5 transmission
+        ru->fh_south_asynch_in   = NULL;                // no asynchronous UL
+      }
+
+      ru->start_rf               = NULL;                 // no local RF
+      ru->stop_rf                = NULL;
+      ru->start_if               = start_if;             // need to start if interface for IF5
+      ru->ifdevice.host_type     = RAU_HOST;
+      ru->ifdevice.eth_params    = &ru->eth_params;
+      ru->ifdevice.configure_rru = configure_ru;
       ret = openair0_transport_load(&ru->ifdevice,&ru->openair0_cfg,&ru->eth_params);
       printf("openair0_transport_init returns %d for ru_id %d\n", ret, ru->idx);
-      
+
       if (ret<0) {
-	printf("Exiting, cannot initialize transport protocol\n");
-	exit(-1);
+        printf("Exiting, cannot initialize transport protocol\n");
+        exit(-1);
       }
-    } else if (ru->function == NGFI_RRU_IF4p5) {
-      ru->do_prach              = 1;                        // do part of prach processing in RU
-      ru->fh_north_in           = NULL;                     // no synchronous incoming fronthaul from north
-      ru->fh_north_out          = fh_if4p5_north_out;       // send_IF4p5 on reception
-      ru->fh_south_out          = tx_rf;                    // send output to RF
-      ru->fh_north_asynch_in    = fh_if4p5_north_asynch_in; // TX packets come asynchronously
-      ru->feprx                 = (get_thread_worker_conf() == WORKER_DISABLE) ? fep_full :ru_fep_full_2thread;                 // RX DFTs
-      ru->feptx_ofdm            = (get_thread_worker_conf() == WORKER_DISABLE) ? feptx_ofdm : feptx_ofdm_2thread;               // this is fep with idft only (no precoding in RRU)
-      ru->feptx_prec            = NULL;
-      ru->start_if              = start_if;                 // need to start the if interface for if4p5
-      ru->ifdevice.host_type    = RRU_HOST;
-      ru->rfdevice.host_type    = RRU_HOST;
-      ru->ifdevice.eth_params   = &ru->eth_params;
-      reset_meas(&ru->rx_fhaul);
-      reset_meas(&ru->tx_fhaul);
-      reset_meas(&ru->compression);
-      reset_meas(&ru->transport);
-      ret = openair0_transport_load(&ru->ifdevice,&ru->openair0_cfg,&ru->eth_params);
+
+      break;
+
+    case REMOTE_IF4p5:
+      ru->do_prach               = 0;
+      ru->feprx                  = NULL;                // DFTs
+      ru->feptx_prec             = feptx_prec;          // Precoding operation
+      ru->feptx_ofdm             = NULL;                // no OFDM mod
+      ru->fh_south_in            = fh_if4p5_south_in;   // synchronous IF4p5 reception
+      ru->fh_south_out           = fh_if4p5_south_out;  // synchronous IF4p5 transmission
+      ru->fh_south_asynch_in     = (ru->if_timing == synch_to_other) ? fh_if4p5_south_in : NULL;                // asynchronous UL if synch_to_other
+      ru->fh_north_out           = NULL;
+      ru->fh_north_asynch_in     = NULL;
+      ru->start_rf               = NULL;                // no local RF
+      ru->stop_rf                = NULL;
+      ru->start_if               = start_if;            // need to start if interface for IF4p5
+      ru->ifdevice.host_type     = RAU_HOST;
+      ru->ifdevice.eth_params    = &ru->eth_params;
+      ru->ifdevice.configure_rru = configure_ru;
+      ret = openair0_transport_load(&ru->ifdevice, &ru->openair0_cfg, &ru->eth_params);
       printf("openair0_transport_init returns %d for ru_id %d\n", ret, ru->idx);
-      
+
       if (ret<0) {
-	printf("Exiting, cannot initialize transport protocol\n");
-	exit(-1);
+        printf("Exiting, cannot initialize transport protocol\n");
+        exit(-1);
       }
-      
+
       malloc_IF4p5_buffer(ru);
-    } else if (ru->function == eNodeB_3GPP) {
-      ru->do_prach             = 0;                       // no prach processing in RU
-      ru->feprx                = (get_thread_worker_conf() == WORKER_DISABLE) ? fep_full : ru_fep_full_2thread;                // RX DFTs
-      ru->feptx_ofdm           = (get_thread_worker_conf() == WORKER_DISABLE) ? feptx_ofdm : feptx_ofdm_2thread;              // this is fep with idft and precoding
-      ru->feptx_prec           = feptx_prec;              // this is fep with idft and precoding
-      ru->fh_north_in          = NULL;                    // no incoming fronthaul from north
-      ru->fh_north_out         = NULL;                    // no outgoing fronthaul to north
-      ru->start_if             = NULL;                    // no if interface
-      ru->rfdevice.host_type   = RAU_HOST;
-    }
-    
-    ru->fh_south_in            = rx_rf;                               // local synchronous RF RX
-    ru->fh_south_out           = tx_rf;                               // local synchronous RF TX
-    ru->start_rf               = start_rf;                            // need to start the local RF interface
-    ru->stop_rf                = stop_rf;
-    printf("configuring ru_id %d (start_rf %p)\n", ru->idx, start_rf);
-    /*
-      if (ru->function == eNodeB_3GPP) { // configure RF parameters only for 3GPP eNodeB, we need to get them from RAU otherwise
-      fill_rf_config(ru,rf_config_file);
-      init_frame_parms(&ru->frame_parms,1);
-      phy_init_RU(ru);
-      }
-      
-      ret = openair0_device_load(&ru->rfdevice,&ru->openair0_cfg);
-      if (setup_RU_buffers(ru)!=0) {
-      printf("Exiting, cannot initialize RU Buffers\n");
-      exit(-1);
-      }*/
-    break;
-    
-  case REMOTE_IF5: // the remote unit is IF5 RRU
-    ru->do_prach               = 0;
-    ru->feprx                  = (get_thread_worker_conf() == WORKER_DISABLE) ? fep_full : fep_full;                   // this is frequency-shift + DFTs
-    ru->feptx_prec             = feptx_prec;                 // need to do transmit Precoding + IDFTs
-    ru->feptx_ofdm             = (get_thread_worker_conf() == WORKER_DISABLE) ? feptx_ofdm : feptx_ofdm_2thread;                 // need to do transmit Precoding + IDFTs
-    
-    if (ru->if_timing == synch_to_other) {
-      ru->fh_south_in          = fh_slave_south_in;                  // synchronize to master
-    } else {
-      ru->fh_south_in          = fh_if5_south_in;     // synchronous IF5 reception
-      ru->fh_south_out         = fh_if5_south_out;    // synchronous IF5 transmission
-      ru->fh_south_asynch_in   = NULL;                // no asynchronous UL
-    }
-    
-    ru->start_rf               = NULL;                 // no local RF
-    ru->stop_rf                = NULL;
-    ru->start_if               = start_if;             // need to start if interface for IF5
-    ru->ifdevice.host_type     = RAU_HOST;
-    ru->ifdevice.eth_params    = &ru->eth_params;
-    ru->ifdevice.configure_rru = configure_ru;
-    ret = openair0_transport_load(&ru->ifdevice,&ru->openair0_cfg,&ru->eth_params);
-    printf("openair0_transport_init returns %d for ru_id %d\n", ret, ru->idx);
-    
-    if (ret<0) {
-      printf("Exiting, cannot initialize transport protocol\n");
-      exit(-1);
-    }
-    
-    break;
-    
-  case REMOTE_IF4p5:
-    ru->do_prach               = 0;
-    ru->feprx                  = NULL;                // DFTs
-    ru->feptx_prec             = feptx_prec;          // Precoding operation
-    ru->feptx_ofdm             = NULL;                // no OFDM mod
-    ru->fh_south_in            = fh_if4p5_south_in;   // synchronous IF4p5 reception
-    ru->fh_south_out           = fh_if4p5_south_out;  // synchronous IF4p5 transmission
-    ru->fh_south_asynch_in     = (ru->if_timing == synch_to_other) ? fh_if4p5_south_in : NULL;                // asynchronous UL if synch_to_other
-    ru->fh_north_out           = NULL;
-    ru->fh_north_asynch_in     = NULL;
-    ru->start_rf               = NULL;                // no local RF
-    ru->stop_rf                = NULL;
-    ru->start_if               = start_if;            // need to start if interface for IF4p5
-    ru->ifdevice.host_type     = RAU_HOST;
-    ru->ifdevice.eth_params    = &ru->eth_params;
-    ru->ifdevice.configure_rru = configure_ru;
-    ret = openair0_transport_load(&ru->ifdevice, &ru->openair0_cfg, &ru->eth_params);
-    printf("openair0_transport_init returns %d for ru_id %d\n", ret, ru->idx);
-    
-    if (ret<0) {
-      printf("Exiting, cannot initialize transport protocol\n");
-      exit(-1);
-    }
-    malloc_IF4p5_buffer(ru);
-    break;
-  
-  default:
-    LOG_E(PHY,"RU with invalid or unknown southbound interface type %d\n",ru->if_south);
-    break;
+      break;
+
+    default:
+      LOG_E(PHY,"RU with invalid or unknown southbound interface type %d\n",ru->if_south);
+      break;
   } // switch on interface type
 }
- 
+
 //extern void RCconfig_RU(void);
 
 void init_RU(char *rf_config_file, clock_source_t clock_source,clock_source_t time_source,int send_dmrssync) {
-  
   int ru_id;
   RU_t *ru;
   PHY_VARS_eNB *eNB0= (PHY_VARS_eNB *)NULL;
@@ -2631,31 +2606,36 @@ void init_RU(char *rf_config_file, clock_source_t clock_source,clock_source_t ti
     ru->rf_config_file = rf_config_file;
     ru->idx          = ru_id;
     ru->ts_offset    = 0;
+
     if (ru->is_slave == 1) {
-       ru->in_synch    = 0;
-       ru->generate_dmrs_sync = 0; 	
-    }
-    else {
-       ru->in_synch    = 1;
-       ru->generate_dmrs_sync=send_dmrssync;
+      ru->in_synch    = 0;
+      ru->generate_dmrs_sync = 0;
+    } else {
+      ru->in_synch    = 1;
+      ru->generate_dmrs_sync=send_dmrssync;
     }
-    ru->cmd	     = EMPTY;
+
+    ru->cmd      = EMPTY;
     ru->south_out_cnt= 0;
     // use eNB_list[0] as a reference for RU frame parameters
     // NOTE: multiple CC_id are not handled here yet!
     ru->openair0_cfg.clock_source  = clock_source;
     ru->openair0_cfg.time_source = time_source;
+
     //ru->generate_dmrs_sync = (ru->is_slave == 0) ? 1 : 0;
     if ((ru->is_slave == 0) && (ru->ota_sync_enable == 1))
       ru->generate_dmrs_sync = 1;
     else
       ru->generate_dmrs_sync = 0;
+
     if (ru->generate_dmrs_sync == 1) {
       generate_ul_ref_sigs();
-      ru->dmrssync = (int16_t*)malloc16_clear(ru->frame_parms.ofdm_symbol_size*2*sizeof(int16_t)); 	
+      ru->dmrssync = (int16_t *)malloc16_clear(ru->frame_parms.ofdm_symbol_size*2*sizeof(int16_t));
     }
+
     ru->wakeup_L1_sleeptime = 2000;
     ru->wakeup_L1_sleep_cnt_max  = 3;
+
     if (ru->num_eNB > 0) {
       LOG_D(PHY, "%s() RC.ru[%d].num_eNB:%d ru->eNB_list[0]:%p RC.eNB[0][0]:%p rf_config_file:%s\n", __FUNCTION__, ru_id, ru->num_eNB, ru->eNB_list[0], RC.eNB[0][0], ru->rf_config_file);
 
@@ -2674,68 +2654,70 @@ void init_RU(char *rf_config_file, clock_source_t clock_source,clock_source_t ti
     eNB0             = ru->eNB_list[0];
     LOG_D(PHY, "RU FUnction:%d ru->if_south:%d\n", ru->function, ru->if_south);
     LOG_D(PHY, "eNB0:%p\n", eNB0);
-    if (eNB0)
-      {
-	if ((ru->function != NGFI_RRU_IF5) && (ru->function != NGFI_RRU_IF4p5))
-	  AssertFatal(eNB0!=NULL,"eNB0 is null!\n");
-
-	if (eNB0) {
-	  LOG_I(PHY,"Copying frame parms from eNB %d to ru %d\n",eNB0->Mod_id,ru->idx);
-	  memcpy((void*)&ru->frame_parms,(void*)&eNB0->frame_parms,sizeof(LTE_DL_FRAME_PARMS));
-
-	  // attach all RU to all eNBs in its list/
-	  LOG_D(PHY,"ru->num_eNB:%d eNB0->num_RU:%d\n", ru->num_eNB, eNB0->num_RU);
-	  for (i=0;i<ru->num_eNB;i++) {
-	    eNB0 = ru->eNB_list[i];
-	    eNB0->RU_list[eNB0->num_RU++] = ru;
-	  }
-	}
+
+    if (eNB0) {
+      if ((ru->function != NGFI_RRU_IF5) && (ru->function != NGFI_RRU_IF4p5))
+        AssertFatal(eNB0!=NULL,"eNB0 is null!\n");
+
+      if (eNB0) {
+        LOG_I(PHY,"Copying frame parms from eNB %d to ru %d\n",eNB0->Mod_id,ru->idx);
+        memcpy((void *)&ru->frame_parms,(void *)&eNB0->frame_parms,sizeof(LTE_DL_FRAME_PARMS));
+        // attach all RU to all eNBs in its list/
+        LOG_D(PHY,"ru->num_eNB:%d eNB0->num_RU:%d\n", ru->num_eNB, eNB0->num_RU);
+
+        for (i=0; i<ru->num_eNB; i++) {
+          eNB0 = ru->eNB_list[i];
+          eNB0->RU_list[eNB0->num_RU++] = ru;
+        }
       }
+    }
+
     //    LOG_I(PHY,"Initializing RRU descriptor %d : (%s,%s,%d)\n",ru_id,ru_if_types[ru->if_south],eNB_timing[ru->if_timing],ru->function);
     LOG_I(PHY,"Initializing RRU descriptor %d : (%s,%s,%d)\n",ru_id,ru_if_types[ru->if_south],eNB_timing[ru->if_timing],ru->function);
     set_function_spec_param(ru);
     LOG_I(PHY,"Starting ru_thread %d, is_slave %d, send_dmrs %d\n",ru_id,ru->is_slave,ru->generate_dmrs_sync);
-
     init_RU_proc(ru);
   } // for ru_id
-  
+
   //  sleep(1);
   LOG_D(HW,"[lte-softmodem.c] RU threads created\n");
 }
 
 void stop_ru(RU_t *ru) {
-
 #if defined(PRE_SCD_THREAD) || defined(PHY_TX_THREAD)
   int *status;
 #endif
-  printf("Stopping RU %p processing threads\n",(void*)ru);
+  printf("Stopping RU %p processing threads\n",(void *)ru);
 #if defined(PRE_SCD_THREAD)
-  if(ru){
+
+  if(ru) {
     ru->proc.instance_pre_scd = 0;
     pthread_cond_signal( &ru->proc.cond_pre_scd );
-    pthread_join(ru->proc.pthread_pre_scd, (void**)&status );
+    pthread_join(ru->proc.pthread_pre_scd, (void **)&status );
     pthread_mutex_destroy(&ru->proc.mutex_pre_scd );
     pthread_cond_destroy(&ru->proc.cond_pre_scd );
   }
+
 #endif
 #ifdef PHY_TX_THREAD
-  if(ru){
-      ru->proc.instance_cnt_phy_tx = 0;
-      pthread_cond_signal(&ru->proc.cond_phy_tx);
-      pthread_join( ru->proc.pthread_phy_tx, (void**)&status );
-      pthread_mutex_destroy( &ru->proc.mutex_phy_tx );
-      pthread_cond_destroy( &ru->proc.cond_phy_tx );
-      ru->proc.instance_cnt_rf_tx = 0;
-      pthread_cond_signal(&ru->proc.cond_rf_tx);
-      pthread_join( ru->proc.pthread_rf_tx, (void**)&status );
-      pthread_mutex_destroy( &ru->proc.mutex_rf_tx );
-      pthread_cond_destroy( &ru->proc.cond_rf_tx );
+
+  if(ru) {
+    ru->proc.instance_cnt_phy_tx = 0;
+    pthread_cond_signal(&ru->proc.cond_phy_tx);
+    pthread_join( ru->proc.pthread_phy_tx, (void **)&status );
+    pthread_mutex_destroy( &ru->proc.mutex_phy_tx );
+    pthread_cond_destroy( &ru->proc.cond_phy_tx );
+    ru->proc.instance_cnt_rf_tx = 0;
+    pthread_cond_signal(&ru->proc.cond_rf_tx);
+    pthread_join( ru->proc.pthread_rf_tx, (void **)&status );
+    pthread_mutex_destroy( &ru->proc.mutex_rf_tx );
+    pthread_cond_destroy( &ru->proc.cond_rf_tx );
   }
+
 #endif
 }
 
-void stop_RU(int nb_ru)
-{
+void stop_RU(int nb_ru) {
   for (int inst = 0; inst < nb_ru; inst++) {
     LOG_I(PHY, "Stopping RU %d processing threads\n", inst);
     kill_RU_proc(RC.ru[inst]);
@@ -2857,8 +2839,9 @@ void RCconfig_RU(void) {
       if (RC.nb_L1_inst >0)
         RC.ru[j]->num_eNB                           = RUParamList.paramarray[j][RU_ENB_LIST_IDX].numelt;
       else
-	RC.ru[j]->num_eNB                           = 0;
-      for (i=0;i<RC.ru[j]->num_eNB;i++) RC.ru[j]->eNB_list[i] = RC.eNB[RUParamList.paramarray[j][RU_ENB_LIST_IDX].iptr[i]][0];     
+        RC.ru[j]->num_eNB                           = 0;
+
+      for (i=0; i<RC.ru[j]->num_eNB; i++) RC.ru[j]->eNB_list[i] = RC.eNB[RUParamList.paramarray[j][RU_ENB_LIST_IDX].iptr[i]][0];
 
       RC.ru[j]->has_ctrl_prt                        = 1;
 
@@ -2882,98 +2865,97 @@ void RCconfig_RU(void) {
       }
 
       if (strcmp(*(RUParamList.paramarray[j][RU_LOCAL_RF_IDX].strptr), "yes") == 0) {
-	if ( !(config_isparamset(RUParamList.paramarray[j],RU_LOCAL_IF_NAME_IDX)) ) {
-	  RC.ru[j]->if_south                        = LOCAL_RF;
-	  RC.ru[j]->function                        = eNodeB_3GPP;
+        if ( !(config_isparamset(RUParamList.paramarray[j],RU_LOCAL_IF_NAME_IDX)) ) {
+          RC.ru[j]->if_south                        = LOCAL_RF;
+          RC.ru[j]->function                        = eNodeB_3GPP;
           RC.ru[j]->state                           = RU_RUN;
-	  printf("Setting function for RU %d to eNodeB_3GPP\n",j);
-        }
-        else { 
-          RC.ru[j]->eth_params.local_if_name            = strdup(*(RUParamList.paramarray[j][RU_LOCAL_IF_NAME_IDX].strptr));    
-          RC.ru[j]->eth_params.my_addr                  = strdup(*(RUParamList.paramarray[j][RU_LOCAL_ADDRESS_IDX].strptr)); 
+          printf("Setting function for RU %d to eNodeB_3GPP\n",j);
+        } else {
+          RC.ru[j]->eth_params.local_if_name            = strdup(*(RUParamList.paramarray[j][RU_LOCAL_IF_NAME_IDX].strptr));
+          RC.ru[j]->eth_params.my_addr                  = strdup(*(RUParamList.paramarray[j][RU_LOCAL_ADDRESS_IDX].strptr));
           RC.ru[j]->eth_params.remote_addr              = strdup(*(RUParamList.paramarray[j][RU_REMOTE_ADDRESS_IDX].strptr));
           RC.ru[j]->eth_params.my_portd                 = *(RUParamList.paramarray[j][RU_LOCAL_PORTD_IDX].uptr);
           RC.ru[j]->eth_params.remote_portd             = *(RUParamList.paramarray[j][RU_REMOTE_PORTD_IDX].uptr);
 
-	  // Check if control port set
-	  if  (!(config_isparamset(RUParamList.paramarray[j],RU_REMOTE_PORTC_IDX)) ){
-	        printf("Removing control port for RU %d\n",j);
+          // Check if control port set
+          if  (!(config_isparamset(RUParamList.paramarray[j],RU_REMOTE_PORTC_IDX)) ) {
+            printf("Removing control port for RU %d\n",j);
+            RC.ru[j]->has_ctrl_prt            = 0;
+          } else {
+            RC.ru[j]->eth_params.my_portc                 = *(RUParamList.paramarray[j][RU_LOCAL_PORTC_IDX].uptr);
+            RC.ru[j]->eth_params.remote_portc             = *(RUParamList.paramarray[j][RU_REMOTE_PORTC_IDX].uptr);
+            printf(" Control port %u \n",RC.ru[j]->eth_params.my_portc);
+          }
 
-		RC.ru[j]->has_ctrl_prt			      = 0;
+          if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp") == 0) {
+            RC.ru[j]->if_south                        = LOCAL_RF;
+            RC.ru[j]->function                        = NGFI_RRU_IF5;
+            RC.ru[j]->eth_params.transp_preference    = ETH_UDP_MODE;
+            printf("Setting function for RU %d to NGFI_RRU_IF5 (udp)\n",j);
+          } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw") == 0) {
+            RC.ru[j]->if_south                        = LOCAL_RF;
+            RC.ru[j]->function                        = NGFI_RRU_IF5;
+            RC.ru[j]->eth_params.transp_preference    = ETH_RAW_MODE;
+            printf("Setting function for RU %d to NGFI_RRU_IF5 (raw)\n",j);
+          } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp_if4p5") == 0) {
+            RC.ru[j]->if_south                        = LOCAL_RF;
+            RC.ru[j]->function                        = NGFI_RRU_IF4p5;
+            RC.ru[j]->eth_params.transp_preference    = ETH_UDP_IF4p5_MODE;
+            printf("Setting function for RU %d to NGFI_RRU_IF4p5 (udp)\n",j);
+          } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw_if4p5") == 0) {
+            RC.ru[j]->if_south                        = LOCAL_RF;
+            RC.ru[j]->function                        = NGFI_RRU_IF4p5;
+            RC.ru[j]->eth_params.transp_preference    = ETH_RAW_IF4p5_MODE;
+            printf("Setting function for RU %d to NGFI_RRU_IF4p5 (raw)\n",j);
           }
-	  else {
-	    RC.ru[j]->eth_params.my_portc                 = *(RUParamList.paramarray[j][RU_LOCAL_PORTC_IDX].uptr);
-	    RC.ru[j]->eth_params.remote_portc             = *(RUParamList.paramarray[j][RU_REMOTE_PORTC_IDX].uptr);
-	    printf(" Control port %u \n",RC.ru[j]->eth_params.my_portc);
-	  
-	  }
-
-	  if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp") == 0) {
-	    RC.ru[j]->if_south                        = LOCAL_RF;
-	    RC.ru[j]->function                        = NGFI_RRU_IF5;
-	    RC.ru[j]->eth_params.transp_preference    = ETH_UDP_MODE;
-           
-	    printf("Setting function for RU %d to NGFI_RRU_IF5 (udp)\n",j);
-	  } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw") == 0) {
-	    RC.ru[j]->if_south                        = LOCAL_RF;
-	    RC.ru[j]->function                        = NGFI_RRU_IF5;
-	    RC.ru[j]->eth_params.transp_preference    = ETH_RAW_MODE;
-	  
-	    printf("Setting function for RU %d to NGFI_RRU_IF5 (raw)\n",j);
-	  } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp_if4p5") == 0) {
-	    RC.ru[j]->if_south                        = LOCAL_RF;
-	    RC.ru[j]->function                        = NGFI_RRU_IF4p5;
-	    RC.ru[j]->eth_params.transp_preference    = ETH_UDP_IF4p5_MODE;
-	 
-	    printf("Setting function for RU %d to NGFI_RRU_IF4p5 (udp)\n",j);
-	  } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw_if4p5") == 0) {
-	    RC.ru[j]->if_south                        = LOCAL_RF;
-	    RC.ru[j]->function                        = NGFI_RRU_IF4p5;
-	    RC.ru[j]->eth_params.transp_preference    = ETH_RAW_IF4p5_MODE;
-	
-	    printf("Setting function for RU %d to NGFI_RRU_IF4p5 (raw)\n",j);
-	  }
+
           printf("RU %d is_slave=%s\n",j,*(RUParamList.paramarray[j][RU_IS_SLAVE_IDX].strptr));
+
           if (strcmp(*(RUParamList.paramarray[j][RU_IS_SLAVE_IDX].strptr), "yes") == 0) RC.ru[j]->is_slave=1;
           else RC.ru[j]->is_slave=0;
+
           printf("RU %d ota_sync_enabled=%s\n",j,*(RUParamList.paramarray[j][RU_OTA_SYNC_ENABLE_IDX].strptr));
+
           if (strcmp(*(RUParamList.paramarray[j][RU_OTA_SYNC_ENABLE_IDX].strptr), "yes") == 0) RC.ru[j]->ota_sync_enable=1;
           else RC.ru[j]->ota_sync_enable=0;
-	}
-	RC.ru[j]->max_pdschReferenceSignalPower     = *(RUParamList.paramarray[j][RU_MAX_RS_EPRE_IDX].uptr);;
-	RC.ru[j]->max_rxgain                        = *(RUParamList.paramarray[j][RU_MAX_RXGAIN_IDX].uptr);
-	RC.ru[j]->num_bands                         = RUParamList.paramarray[j][RU_BAND_LIST_IDX].numelt;
-	/* sf_extension is in unit of samples for 30.72MHz here, has to be scaled later */
+        }
+
+        RC.ru[j]->max_pdschReferenceSignalPower     = *(RUParamList.paramarray[j][RU_MAX_RS_EPRE_IDX].uptr);;
+        RC.ru[j]->max_rxgain                        = *(RUParamList.paramarray[j][RU_MAX_RXGAIN_IDX].uptr);
+        RC.ru[j]->num_bands                         = RUParamList.paramarray[j][RU_BAND_LIST_IDX].numelt;
+        /* sf_extension is in unit of samples for 30.72MHz here, has to be scaled later */
         RC.ru[j]->sf_extension                      = *(RUParamList.paramarray[j][RU_SF_EXTENSION_IDX].uptr);
-	for (i=0;i<RC.ru[j]->num_bands;i++) RC.ru[j]->band[i] = RUParamList.paramarray[j][RU_BAND_LIST_IDX].iptr[i]; 
+
+        for (i=0; i<RC.ru[j]->num_bands; i++) RC.ru[j]->band[i] = RUParamList.paramarray[j][RU_BAND_LIST_IDX].iptr[i];
       } //strcmp(local_rf, "yes") == 0
       else {
-	printf("RU %d: Transport %s\n",j,*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr));
-	
-        RC.ru[j]->eth_params.local_if_name	      = strdup(*(RUParamList.paramarray[j][RU_LOCAL_IF_NAME_IDX].strptr));    
-        RC.ru[j]->eth_params.my_addr		      = strdup(*(RUParamList.paramarray[j][RU_LOCAL_ADDRESS_IDX].strptr)); 
-        RC.ru[j]->eth_params.remote_addr	      = strdup(*(RUParamList.paramarray[j][RU_REMOTE_ADDRESS_IDX].strptr));
-        RC.ru[j]->eth_params.my_portc		      = *(RUParamList.paramarray[j][RU_LOCAL_PORTC_IDX].uptr);
-        RC.ru[j]->eth_params.remote_portc	      = *(RUParamList.paramarray[j][RU_REMOTE_PORTC_IDX].uptr);
-        RC.ru[j]->eth_params.my_portd		      = *(RUParamList.paramarray[j][RU_LOCAL_PORTD_IDX].uptr);
-        RC.ru[j]->eth_params.remote_portd	      = *(RUParamList.paramarray[j][RU_REMOTE_PORTD_IDX].uptr);
-	if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp") == 0) {
-	  RC.ru[j]->if_south                     = REMOTE_IF5;
-	  RC.ru[j]->function                     = NGFI_RAU_IF5;
-	  RC.ru[j]->eth_params.transp_preference = ETH_UDP_MODE;
-	} else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw") == 0) {
-	  RC.ru[j]->if_south                     = REMOTE_IF5;
-	  RC.ru[j]->function                     = NGFI_RAU_IF5;
-	  RC.ru[j]->eth_params.transp_preference = ETH_RAW_MODE;
-	} else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp_if4p5") == 0) {
-	  RC.ru[j]->if_south                     = REMOTE_IF4p5;
-	  RC.ru[j]->function                     = NGFI_RAU_IF4p5;
-	  RC.ru[j]->eth_params.transp_preference = ETH_UDP_IF4p5_MODE;
-	} else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw_if4p5") == 0) {
-	  RC.ru[j]->if_south                     = REMOTE_IF4p5;
-	  RC.ru[j]->function                     = NGFI_RAU_IF4p5;
-	  RC.ru[j]->eth_params.transp_preference = ETH_RAW_IF4p5_MODE;
-	}
+        printf("RU %d: Transport %s\n",j,*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr));
+        RC.ru[j]->eth_params.local_if_name        = strdup(*(RUParamList.paramarray[j][RU_LOCAL_IF_NAME_IDX].strptr));
+        RC.ru[j]->eth_params.my_addr          = strdup(*(RUParamList.paramarray[j][RU_LOCAL_ADDRESS_IDX].strptr));
+        RC.ru[j]->eth_params.remote_addr        = strdup(*(RUParamList.paramarray[j][RU_REMOTE_ADDRESS_IDX].strptr));
+        RC.ru[j]->eth_params.my_portc         = *(RUParamList.paramarray[j][RU_LOCAL_PORTC_IDX].uptr);
+        RC.ru[j]->eth_params.remote_portc       = *(RUParamList.paramarray[j][RU_REMOTE_PORTC_IDX].uptr);
+        RC.ru[j]->eth_params.my_portd         = *(RUParamList.paramarray[j][RU_LOCAL_PORTD_IDX].uptr);
+        RC.ru[j]->eth_params.remote_portd       = *(RUParamList.paramarray[j][RU_REMOTE_PORTD_IDX].uptr);
+
+        if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp") == 0) {
+          RC.ru[j]->if_south                     = REMOTE_IF5;
+          RC.ru[j]->function                     = NGFI_RAU_IF5;
+          RC.ru[j]->eth_params.transp_preference = ETH_UDP_MODE;
+        } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw") == 0) {
+          RC.ru[j]->if_south                     = REMOTE_IF5;
+          RC.ru[j]->function                     = NGFI_RAU_IF5;
+          RC.ru[j]->eth_params.transp_preference = ETH_RAW_MODE;
+        } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "udp_if4p5") == 0) {
+          RC.ru[j]->if_south                     = REMOTE_IF4p5;
+          RC.ru[j]->function                     = NGFI_RAU_IF4p5;
+          RC.ru[j]->eth_params.transp_preference = ETH_UDP_IF4p5_MODE;
+        } else if (strcmp(*(RUParamList.paramarray[j][RU_TRANSPORT_PREFERENCE_IDX].strptr), "raw_if4p5") == 0) {
+          RC.ru[j]->if_south                     = REMOTE_IF4p5;
+          RC.ru[j]->function                     = NGFI_RAU_IF4p5;
+          RC.ru[j]->eth_params.transp_preference = ETH_RAW_IF4p5_MODE;
+        }
+
         if (strcmp(*(RUParamList.paramarray[j][RU_IS_SLAVE_IDX].strptr), "yes") == 0) RC.ru[j]->is_slave=1;
         else RC.ru[j]->is_slave=0;
       }  /* strcmp(local_rf, "yes") != 0 */