diff --git a/TESTS/mbed-crypto/sanity/main.cpp b/TESTS/mbed-crypto/sanity/main.cpp
index 051d88b2e30..d71563dbcba 100644
--- a/TESTS/mbed-crypto/sanity/main.cpp
+++ b/TESTS/mbed-crypto/sanity/main.cpp
@@ -438,9 +438,7 @@ utest::v1::status_t case_teardown_handler(const Case *const source, const size_t
 
 utest::v1::status_t test_setup(const size_t number_of_cases)
 {
-#ifndef NO_GREENTEA
     GREENTEA_SETUP(120, "default_auto");
-#endif
     return verbose_test_setup_handler(number_of_cases);
 }
 
diff --git a/TESTS/mbed_hal/spm/main.cpp b/TESTS/mbed_hal/spm/main.cpp
index 8d654fb599e..ba73753cb8c 100644
--- a/TESTS/mbed_hal/spm/main.cpp
+++ b/TESTS/mbed_hal/spm/main.cpp
@@ -150,9 +150,7 @@ Case cases[] = {
 
 utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
 {
-#ifndef NO_GREENTEA
     GREENTEA_SETUP(20, "default_auto");
-#endif
     return greentea_test_setup_handler(number_of_cases);
 }
 
diff --git a/TESTS/psa/attestation/main.cpp b/TESTS/psa/attestation/main.cpp
index 72a5a29019d..391c0a289fa 100755
--- a/TESTS/psa/attestation/main.cpp
+++ b/TESTS/psa/attestation/main.cpp
@@ -44,9 +44,7 @@ using namespace utest::v1;
 
 utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
 {
-#ifndef NO_GREENTEA
     GREENTEA_SETUP(60, "default_auto");
-#endif
     return greentea_test_setup_handler(number_of_cases);
 }
 
diff --git a/TESTS/psa/crypto_access_control/COMPONENT_NSPE/main.cpp b/TESTS/psa/crypto_access_control/COMPONENT_NSPE/main.cpp
index 01ecfea6770..c6311a8dc34 100644
--- a/TESTS/psa/crypto_access_control/COMPONENT_NSPE/main.cpp
+++ b/TESTS/psa/crypto_access_control/COMPONENT_NSPE/main.cpp
@@ -468,9 +468,7 @@ utest::v1::status_t case_teardown_handler(const Case *const source, const size_t
 
 utest::v1::status_t test_setup(const size_t number_of_cases)
 {
-#ifndef NO_GREENTEA
     GREENTEA_SETUP(120, "default_auto");
-#endif
     return verbose_test_setup_handler(number_of_cases);
 }
 
diff --git a/TESTS/psa/crypto_init/main.cpp b/TESTS/psa/crypto_init/main.cpp
index b7fa4824e2e..cad0258d2a4 100644
--- a/TESTS/psa/crypto_init/main.cpp
+++ b/TESTS/psa/crypto_init/main.cpp
@@ -41,9 +41,7 @@ using namespace utest::v1;
 
 utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
 {
-#ifndef NO_GREENTEA
     GREENTEA_SETUP(60, "default_auto");
-#endif
     return greentea_test_setup_handler(number_of_cases);
 }
 
diff --git a/TESTS/psa/entropy_inject/main.cpp b/TESTS/psa/entropy_inject/main.cpp
index 355312f0fcf..da3898c7d9f 100644
--- a/TESTS/psa/entropy_inject/main.cpp
+++ b/TESTS/psa/entropy_inject/main.cpp
@@ -92,9 +92,7 @@ void run_entropy_inject_with_crypto_init()
 
 utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
 {
-#ifndef NO_GREENTEA
     GREENTEA_SETUP(60, "default_auto");
-#endif
 
     /* fill seed in some data */
     for (size_t i = 0; i < sizeof(seed); ++i) {
diff --git a/TESTS/psa/its_ps/main.cpp b/TESTS/psa/its_ps/main.cpp
index b78507487eb..38ab54fddb6 100644
--- a/TESTS/psa/its_ps/main.cpp
+++ b/TESTS/psa/its_ps/main.cpp
@@ -184,9 +184,7 @@ Case cases[] = {
 
 utest::v1::status_t greentea_test_setup(const size_t number_of_cases)
 {
-#ifndef NO_GREENTEA
     GREENTEA_SETUP(60, "default_auto");
-#endif
     return greentea_test_setup_handler(number_of_cases);
 }
 
diff --git a/TESTS/psa/spm_client/COMPONENT_NSPE/main.cpp b/TESTS/psa/spm_client/COMPONENT_NSPE/main.cpp
index f5e62328f40..aad62cbd1c7 100644
--- a/TESTS/psa/spm_client/COMPONENT_NSPE/main.cpp
+++ b/TESTS/psa/spm_client/COMPONENT_NSPE/main.cpp
@@ -475,9 +475,7 @@ Case cases[] = {
 utest::v1::status_t test_setup(const size_t number_of_cases)
 {
     // Setup Greentea using a reasonable timeout in seconds
-#ifndef NO_GREENTEA
     GREENTEA_SETUP(60, "default_auto");
-#endif
     return verbose_test_setup_handler(number_of_cases);
 }
 
diff --git a/TESTS/psa/spm_server/COMPONENT_NSPE/main.cpp b/TESTS/psa/spm_server/COMPONENT_NSPE/main.cpp
index e225e6fd10e..1877e1059e9 100644
--- a/TESTS/psa/spm_server/COMPONENT_NSPE/main.cpp
+++ b/TESTS/psa/spm_server/COMPONENT_NSPE/main.cpp
@@ -213,9 +213,7 @@ utest::v1::status_t spm_setup(const size_t number_of_cases)
         error("Could not open a connection with SERVER_TESTS_PART1_CONTROL ROT_SRV");
     }
 
-#ifndef NO_GREENTEA
     GREENTEA_SETUP(60, "default_auto");
-#endif
     return greentea_test_setup_handler(number_of_cases);
 }
 
diff --git a/TESTS/psa/spm_smoke/COMPONENT_NSPE/main.cpp b/TESTS/psa/spm_smoke/COMPONENT_NSPE/main.cpp
index 2ab94f32acd..49dac6e3c2a 100644
--- a/TESTS/psa/spm_smoke/COMPONENT_NSPE/main.cpp
+++ b/TESTS/psa/spm_smoke/COMPONENT_NSPE/main.cpp
@@ -74,10 +74,7 @@ void example_main(void)
 
 utest::v1::status_t greentea_setup(const size_t number_of_cases)
 {
-#ifndef NO_GREENTEA
     GREENTEA_SETUP(20, "default_auto");
-#endif
-    // Call the default reporting function
     return greentea_test_setup_handler(number_of_cases);
 }
 
diff --git a/UNITTESTS/features/cellular/framework/device/cellularstatemachine/cellularstatemachinetest.cpp b/UNITTESTS/features/cellular/framework/device/cellularstatemachine/cellularstatemachinetest.cpp
index 5466b72ae6b..b96a20f4bea 100644
--- a/UNITTESTS/features/cellular/framework/device/cellularstatemachine/cellularstatemachinetest.cpp
+++ b/UNITTESTS/features/cellular/framework/device/cellularstatemachine/cellularstatemachinetest.cpp
@@ -34,7 +34,6 @@ enum UT_CellularState {
     UT_STATE_DEVICE_READY,
     UT_STATE_SIM_PIN,
     UT_STATE_REGISTERING_NETWORK,
-    UT_STATE_MANUAL_REGISTERING_NETWORK,
     UT_STATE_ATTACHING_NETWORK,
     UT_STATE_MAX_FSM_STATE
 };
@@ -392,8 +391,8 @@ TEST_F(TestCellularStateMachine, test_run_to_state)
     ut.set_plmn("12345");
     ASSERT_EQ(NSAPI_ERROR_OK, ut.run_to_device_registered());
     (void)ut.get_current_status(current_state, target_state);
-    ASSERT_EQ(UT_STATE_MANUAL_REGISTERING_NETWORK, current_state);
-    ASSERT_EQ(UT_STATE_MANUAL_REGISTERING_NETWORK, target_state);
+    ASSERT_EQ(UT_STATE_REGISTERING_NETWORK, current_state);
+    ASSERT_EQ(UT_STATE_REGISTERING_NETWORK, target_state);
     ut.cellular_event_changed((nsapi_event_t)CellularRegistrationStatusChanged, (intptr_t)&data);
     ut.reset();
 
diff --git a/features/FEATURE_BLE/targets/TARGET_CORDIO/driver/CordioHCIDriver.cpp b/features/FEATURE_BLE/targets/TARGET_CORDIO/driver/CordioHCIDriver.cpp
index 3040d0ba0f5..271ff9463a8 100644
--- a/features/FEATURE_BLE/targets/TARGET_CORDIO/driver/CordioHCIDriver.cpp
+++ b/features/FEATURE_BLE/targets/TARGET_CORDIO/driver/CordioHCIDriver.cpp
@@ -223,6 +223,11 @@ void CordioHCIDriver::handle_reset_sequence(uint8_t *pMsg)
             }   break;
 
             case HCI_OPCODE_LE_WRITE_DEF_DATA_LEN:
+                /* send next command in sequence */
+                HciReadLocalVerInfoCmd();
+                break;
+
+            case HCI_OPCODE_READ_LOCAL_VER_INFO:
                 if (hciCoreCb.extResetSeq) {
                     /* send first extended command */
                     (*hciCoreCb.extResetSeq)(pMsg, opcode);
diff --git a/features/FEATURE_BLE/targets/TARGET_CORDIO/source/CordioGattServer.cpp b/features/FEATURE_BLE/targets/TARGET_CORDIO/source/CordioGattServer.cpp
index 0b4bb8a82dc..89f46fbfe40 100644
--- a/features/FEATURE_BLE/targets/TARGET_CORDIO/source/CordioGattServer.cpp
+++ b/features/FEATURE_BLE/targets/TARGET_CORDIO/source/CordioGattServer.cpp
@@ -488,6 +488,10 @@ ble_error_t GattServer::insert_descriptor(
 #endif // BLE_FEATURE_SECURE_CONNECTIONS
 #endif // BLE_FEATURE_SECURITY
         }
+
+        if (properties & READ_PROPERTY) {
+            attribute_it->settings |= ATTS_SET_READ_CBACK;
+        }
     }
 
     // configure write permission
@@ -517,6 +521,10 @@ ble_error_t GattServer::insert_descriptor(
 #endif // BLE_FEATURE_SECURE_CONNECTIONS
 #endif // BLE_FEATURE_SECURITY
         }
+
+        if (properties & WRITABLE_PROPERTIES) {
+            attribute_it->settings |= ATTS_SET_WRITE_CBACK;
+        }
     }
 
     attribute_it++;
diff --git a/features/cellular/framework/AT/AT_CellularNetwork.cpp b/features/cellular/framework/AT/AT_CellularNetwork.cpp
index 4d0591e963a..b82438ca962 100644
--- a/features/cellular/framework/AT/AT_CellularNetwork.cpp
+++ b/features/cellular/framework/AT/AT_CellularNetwork.cpp
@@ -171,7 +171,9 @@ void AT_CellularNetwork::read_reg_params_and_compare(RegistrationType type)
                     reg_params._status == RegisteredRoaming)) {
                 if (previous_registration_status == RegisteredHomeNetwork ||
                         previous_registration_status == RegisteredRoaming) {
-                    call_network_cb(NSAPI_STATUS_DISCONNECTED);
+                    if (type != C_REG) {// we are interested only if we drop from packet network
+                        _connection_status_cb(NSAPI_EVENT_CONNECTION_STATUS_CHANGE, NSAPI_STATUS_DISCONNECTED);
+                    }
                 }
             }
         }
@@ -268,6 +270,9 @@ nsapi_error_t AT_CellularNetwork::set_registration(const char *plmn)
         tr_debug("Manual network registration to %s", plmn);
         _at.cmd_start("AT+COPS=1,2,");
         _at.write_string(plmn);
+        if (_op_act != RAT_UNKNOWN) {
+            _at.write_int(_op_act);
+        }
         _at.cmd_stop_read_resp();
     }
 
diff --git a/features/cellular/framework/device/CellularStateMachine.cpp b/features/cellular/framework/device/CellularStateMachine.cpp
index f4ad2bef65e..ad64585c206 100644
--- a/features/cellular/framework/device/CellularStateMachine.cpp
+++ b/features/cellular/framework/device/CellularStateMachine.cpp
@@ -48,8 +48,7 @@ CellularStateMachine::CellularStateMachine(CellularDevice &device, events::Event
     _cellularDevice(device), _state(STATE_INIT), _next_state(_state), _target_state(_state),
     _event_status_cb(0), _network(0), _queue(queue), _queue_thread(0), _sim_pin(0),
     _retry_count(0), _event_timeout(-1), _event_id(-1), _plmn(0), _command_success(false),
-    _plmn_network_found(false), _is_retry(false), _cb_data(), _current_event(NSAPI_EVENT_CONNECTION_STATUS_CHANGE),
-    _status(0)
+    _is_retry(false), _cb_data(), _current_event(NSAPI_EVENT_CONNECTION_STATUS_CHANGE), _status(0)
 {
 #if MBED_CONF_CELLULAR_RANDOM_MAX_START_DELAY == 0
     _start_time = 0;
@@ -83,7 +82,6 @@ void CellularStateMachine::reset()
     _state = STATE_INIT;
     _event_timeout = -1;
     _event_id = -1;
-    _plmn_network_found = false;
     _is_retry = false;
     _status = 0;
     _target_state = STATE_INIT;
@@ -161,7 +159,20 @@ bool CellularStateMachine::open_sim()
         }
     }
 
-    return state == CellularDevice::SimStateReady;
+    bool sim_ready = state == CellularDevice::SimStateReady;
+
+    if (sim_ready) {
+        // If plmn is set, we should it right after sim is opened so that registration is forced to correct network.
+        if (_plmn && strlen(_plmn)) {
+            _cb_data.error = _network->set_registration(_plmn);
+            tr_debug("STM: manual set_registration: %d, plmn: %s", _cb_data.error, _plmn);
+            if (_cb_data.error) {
+                return false;
+            }
+        }
+    }
+
+    return sim_ready;
 }
 
 bool CellularStateMachine::is_registered()
@@ -169,7 +180,9 @@ bool CellularStateMachine::is_registered()
     CellularNetwork::RegistrationStatus status;
     bool is_registered = false;
 
-    for (int type = 0; type < CellularNetwork::C_MAX; type++) {
+    // accept only CGREG/CEREG. CREG is for circuit switch network changed. If we accept CREG attach will fail if also
+    // CGREG/CEREG is not registered.
+    for (int type = 0; type < CellularNetwork::C_REG; type++) {
         if (get_network_registration((CellularNetwork::RegistrationType) type, status, is_registered)) {
             if (is_registered) {
                 break;
@@ -178,6 +191,11 @@ bool CellularStateMachine::is_registered()
     }
 
     _cb_data.status_data = status;
+    // in manual registering we are forcing registration to certain network so we don't accept active context or attached
+    // as indication that device is registered to correct network.
+    if (_plmn && strlen(_plmn)) {
+        return is_registered;
+    }
     return is_registered || _status;
 }
 
@@ -249,61 +267,13 @@ void CellularStateMachine::report_failure(const char *msg)
 const char *CellularStateMachine::get_state_string(CellularState state) const
 {
 #if MBED_CONF_MBED_TRACE_ENABLE
-    static const char *strings[STATE_MAX_FSM_STATE] = { "Init", "Power", "Device ready", "SIM pin", "Registering network", "Manual registering", "Attaching network"};
+    static const char *strings[STATE_MAX_FSM_STATE] = { "Init", "Power", "Device ready", "SIM pin", "Registering network", "Attaching network"};
     return strings[state];
 #else
     return NULL;
 #endif // #if MBED_CONF_MBED_TRACE_ENABLE
 }
 
-bool CellularStateMachine::is_registered_to_plmn()
-{
-    int format;
-    CellularNetwork::operator_t op;
-
-    _cb_data.error = _network->get_operator_params(format, op);
-    if (_cb_data.error == NSAPI_ERROR_OK) {
-        if (format == 2) {
-            // great, numeric format we can do comparison for that
-            if (strcmp(op.op_num, _plmn) == 0) {
-                return true;
-            }
-            return false;
-        }
-
-        // format was alpha, get operator names to do the comparing
-        CellularNetwork::operator_names_list names_list;
-        _cb_data.error = _network->get_operator_names(names_list);
-        if (_cb_data.error == NSAPI_ERROR_OK) {
-            CellularNetwork::operator_names_t *op_names = names_list.get_head();
-            bool found_match = false;
-            while (op_names) {
-                if (format == 0) {
-                    if (strcmp(op.op_long, op_names->alpha) == 0) {
-                        found_match = true;
-                    }
-                } else if (format == 1) {
-                    if (strcmp(op.op_short, op_names->alpha) == 0) {
-                        found_match = true;
-                    }
-                }
-
-                if (found_match) {
-                    if (strcmp(_plmn, op_names->numeric)) {
-                        names_list.delete_all();
-                        return true;
-                    }
-                    names_list.delete_all();
-                    return false;
-                }
-            }
-        }
-        names_list.delete_all();
-    }
-
-    return false;
-}
-
 void CellularStateMachine::enter_to_state(CellularState state)
 {
     _next_state = state;
@@ -378,6 +348,7 @@ bool CellularStateMachine::device_ready()
         _event_status_cb((nsapi_event_t)CellularDeviceReady, (intptr_t)&_cb_data);
     }
     _cellularDevice.set_ready_cb(0);
+
     return true;
 }
 
@@ -410,16 +381,15 @@ void CellularStateMachine::state_sim_pin()
     _cellularDevice.set_timeout(TIMEOUT_SIM_PIN);
     tr_info("Setup SIM (timeout %d s)", TIMEOUT_SIM_PIN / 1000);
     if (open_sim()) {
-
         bool success = false;
         for (int type = 0; type < CellularNetwork::C_MAX; type++) {
             _cb_data.error = _network->set_registration_urc((CellularNetwork::RegistrationType)type, true);
-            if (!_cb_data.error) {
+            if (!_cb_data.error && (type == CellularNetwork::C_EREG || type == CellularNetwork::C_GREG)) {
                 success = true;
             }
         }
         if (!success) {
-            tr_warn("Failed to set any URC's for registration");
+            tr_error("Failed to set CEREG/CGREG URC's for registration");
             retry_state_or_fail();
             return;
         }
@@ -428,16 +398,13 @@ void CellularStateMachine::state_sim_pin()
             tr_debug("Active context found.");
             _status |= ACTIVE_PDP_CONTEXT;
         }
-        CellularNetwork::AttachStatus status; // check if modem is already attached to a network
+        CellularNetwork::AttachStatus status = CellularNetwork::Detached; // check if modem is already attached to a network
         if (_network->get_attach(status) == NSAPI_ERROR_OK && status == CellularNetwork::Attached) {
             _status |= ATTACHED_TO_NETWORK;
             tr_debug("Cellular already attached.");
         }
-        if (_plmn) {
-            enter_to_state(STATE_MANUAL_REGISTERING_NETWORK);
-        } else {
-            enter_to_state(STATE_REGISTERING_NETWORK);
-        }
+
+        enter_to_state(STATE_REGISTERING_NETWORK);
     } else {
         retry_state_or_fail();
     }
@@ -448,44 +415,25 @@ void CellularStateMachine::state_registering()
     _cellularDevice.set_timeout(TIMEOUT_NETWORK);
     tr_info("Network registration (timeout %d s)", TIMEOUT_REGISTRATION / 1000);
     if (is_registered()) {
-        _cb_data.status_data = CellularNetwork::AlreadyRegistered;
+        if (_cb_data.status_data != CellularNetwork::RegisteredHomeNetwork &&
+                _cb_data.status_data != CellularNetwork::RegisteredRoaming && _status) {
+            // there was already activated context or attached to network, and registration status is not registered, set to already registered.
+            _cb_data.status_data = CellularNetwork::AlreadyRegistered;
+        }
         _cb_data.error = NSAPI_ERROR_OK;
         _event_status_cb(_current_event, (intptr_t)&_cb_data);
         // we are already registered, go to attach
         enter_to_state(STATE_ATTACHING_NETWORK);
     } else {
         _cellularDevice.set_timeout(TIMEOUT_REGISTRATION);
-        if (!_command_success) {
-            _cb_data.error = _network->set_registration();
+        if (!_command_success && !_plmn) { // don't call set_registration twice for manual registration
+            _cb_data.error = _network->set_registration(_plmn);
             _command_success = (_cb_data.error == NSAPI_ERROR_OK);
         }
         retry_state_or_fail();
     }
 }
 
-// only used when _plmn is set
-void CellularStateMachine::state_manual_registering_network()
-{
-    _cellularDevice.set_timeout(TIMEOUT_REGISTRATION);
-    tr_info("Manual registration %s (timeout %d s)", _plmn, TIMEOUT_REGISTRATION / 1000);
-    if (!_plmn_network_found) {
-        if (is_registered() && is_registered_to_plmn()) {
-            // we have to send registration changed event as network thinks that we are not registered even we have active PDP context
-            _cb_data.status_data = CellularNetwork::AlreadyRegistered;
-            _cb_data.error = NSAPI_ERROR_OK;
-            _event_status_cb(_current_event, (intptr_t)&_cb_data);
-            _plmn_network_found = true;
-            enter_to_state(STATE_ATTACHING_NETWORK);
-        } else {
-            if (!_command_success) {
-                _cb_data.error = _network->set_registration(_plmn);
-                _command_success = (_cb_data.error == NSAPI_ERROR_OK);
-            }
-            retry_state_or_fail();
-        }
-    }
-}
-
 void CellularStateMachine::state_attaching()
 {
     _cellularDevice.set_timeout(TIMEOUT_CONNECT);
@@ -523,13 +471,8 @@ void CellularStateMachine::continue_from_state(CellularState state)
 nsapi_error_t CellularStateMachine::run_to_state(CellularStateMachine::CellularState state)
 {
     _mutex.lock();
-
-    CellularState tmp_state = state;
-    if (_plmn && tmp_state == STATE_REGISTERING_NETWORK) {
-        tmp_state = STATE_MANUAL_REGISTERING_NETWORK;
-    }
     // call pre_event via queue so that it's in same thread and it's safe to decisions
-    int id = _queue.call_in(0, this, &CellularStateMachine::pre_event, tmp_state);
+    int id = _queue.call_in(0, this, &CellularStateMachine::pre_event, state);
     if (!id) {
         report_failure("Failed to call queue.");
         stop();
@@ -620,10 +563,6 @@ void CellularStateMachine::event()
             _current_event = (nsapi_event_t)CellularRegistrationStatusChanged;
             state_registering();
             break;
-        case STATE_MANUAL_REGISTERING_NETWORK:
-            _current_event = (nsapi_event_t)CellularRegistrationStatusChanged;
-            state_manual_registering_network();
-            break;
         case STATE_ATTACHING_NETWORK:
             _current_event = (nsapi_event_t)CellularAttachNetwork;
             state_attaching();
@@ -694,23 +633,14 @@ bool CellularStateMachine::check_is_target_reached()
 void CellularStateMachine::cellular_event_changed(nsapi_event_t ev, intptr_t ptr)
 {
     cell_callback_data_t *data = (cell_callback_data_t *)ptr;
-    if ((cellular_connection_status_t)ev == CellularRegistrationStatusChanged &&
-            (_state == STATE_REGISTERING_NETWORK || _state == STATE_MANUAL_REGISTERING_NETWORK)) {
+    if ((cellular_connection_status_t)ev == CellularRegistrationStatusChanged && _state == STATE_REGISTERING_NETWORK) {
         // expect packet data so only these states are valid
-        if ((data->status_data == CellularNetwork::RegisteredHomeNetwork || data->status_data == CellularNetwork::RegisteredRoaming) && data->error == NSAPI_ERROR_OK) {
-            if (_plmn) {
-                if (is_registered_to_plmn()) {
-                    if (!_plmn_network_found) {
-                        _plmn_network_found = true;
-                        _queue.cancel(_event_id);
-                        _is_retry = false;
-                        _event_id = -1;
-                        if (!check_is_target_reached()) {
-                            continue_from_state(STATE_ATTACHING_NETWORK);
-                        }
-                    }
-                }
-            } else {
+        CellularNetwork::registration_params_t reg_params;
+        nsapi_error_t err = _network->get_registration_params(reg_params);
+
+        if (err == NSAPI_ERROR_OK && (reg_params._type == CellularNetwork::C_EREG || reg_params._type == CellularNetwork::C_GREG)) {
+            if ((data->status_data == CellularNetwork::RegisteredHomeNetwork ||
+                    data->status_data == CellularNetwork::RegisteredRoaming) && data->error == NSAPI_ERROR_OK) {
                 _queue.cancel(_event_id);
                 _is_retry = false;
                 _event_id = -1;
@@ -718,6 +648,8 @@ void CellularStateMachine::cellular_event_changed(nsapi_event_t ev, intptr_t ptr
                     continue_from_state(STATE_ATTACHING_NETWORK);
                 }
             }
+        } else {
+            tr_debug("creg event, discard...");
         }
     }
 }
diff --git a/features/cellular/framework/device/CellularStateMachine.h b/features/cellular/framework/device/CellularStateMachine.h
index a2c815a6c54..f0efa16454b 100644
--- a/features/cellular/framework/device/CellularStateMachine.h
+++ b/features/cellular/framework/device/CellularStateMachine.h
@@ -58,7 +58,6 @@ class CellularStateMachine {
         STATE_DEVICE_READY,
         STATE_SIM_PIN,
         STATE_REGISTERING_NETWORK,
-        STATE_MANUAL_REGISTERING_NETWORK,
         STATE_ATTACHING_NETWORK,
         STATE_MAX_FSM_STATE
     };
@@ -146,12 +145,10 @@ class CellularStateMachine {
     void state_device_ready();
     void state_sim_pin();
     void state_registering();
-    void state_manual_registering_network();
     void state_attaching();
     void enter_to_state(CellularState state);
     void retry_state_or_fail();
     void continue_from_state(CellularState state);
-    bool is_registered_to_plmn();
     void report_failure(const char *msg);
     void event();
     void device_ready_cb();
@@ -179,7 +176,6 @@ class CellularStateMachine {
     int _event_id;
     const char *_plmn;
     bool _command_success;
-    bool _plmn_network_found;
     bool _is_retry;
     cell_callback_data_t _cb_data;
     nsapi_event_t _current_event;
diff --git a/features/frameworks/TARGET_PSA/val_greentea.cpp b/features/frameworks/TARGET_PSA/val_greentea.cpp
index 3ff074c2b6c..6498c9b6ee7 100644
--- a/features/frameworks/TARGET_PSA/val_greentea.cpp
+++ b/features/frameworks/TARGET_PSA/val_greentea.cpp
@@ -20,9 +20,7 @@ void mbed_val_test_init(uint32_t test_num, char8_t *desc, uint32_t test_bitfield
 
     mbed_val_print(PRINT_ALWAYS, "\nTEST: %d | DESCRIPTION: ", test_num);
     mbed_val_print(PRINT_ALWAYS, desc, 0);
-#ifndef NO_GREENTEA
     GREENTEA_SETUP(100, "default_auto");
-#endif
     mbed_val_set_status(RESULT_START(VAL_STATUS_SUCCESS));
     pal_mbed_os_compliance_test_initialize();
     return;
diff --git a/features/lwipstack/lwip-sys/arch/cc.h b/features/lwipstack/lwip-sys/arch/cc.h
index 619e144efd9..2510a11cfc9 100644
--- a/features/lwipstack/lwip-sys/arch/cc.h
+++ b/features/lwipstack/lwip-sys/arch/cc.h
@@ -34,6 +34,7 @@
 
 #include <stdint.h>
 #include <stddef.h> /* for size_t */
+#include "mbed_toolchain.h"
 
 #if LWIP_USE_EXTERNAL_MBEDTLS
 #include "mbedtls/md5.h"
diff --git a/features/nanostack/mbed-mesh-api/mbed_lib.json b/features/nanostack/mbed-mesh-api/mbed_lib.json
index 4c6c61ce40f..90097639c4e 100644
--- a/features/nanostack/mbed-mesh-api/mbed_lib.json
+++ b/features/nanostack/mbed-mesh-api/mbed_lib.json
@@ -112,7 +112,7 @@
         },
         "wisun-network-name": {
             "help": "default network name for wisun network",
-            "value": "\"NETWORK_NAME\""
+            "value": "\"Wi-SUN Network\""
         },
         "wisun-regulatory-domain": {
             "help": "Regulator domain.",
diff --git a/features/unsupported/tests/mbed/tsi/main.cpp b/features/unsupported/tests/mbed/tsi/main.cpp
index f1dfa089073..83664b34cd3 100644
--- a/features/unsupported/tests/mbed/tsi/main.cpp
+++ b/features/unsupported/tests/mbed/tsi/main.cpp
@@ -6,7 +6,7 @@ int main(void) {
     TSISensor tsi;
 
     while (true) {
-        printf("slider percentage: %f%\r\n", tsi.readPercentage());
+        printf("slider percentage: %f%%\r\n", tsi.readPercentage());
         printf("slider distance: %dmm\r\n", tsi.readDistance());
         wait(1);
         led = !led;
diff --git a/requirements.txt b/requirements.txt
index 01570b82c41..d653292575f 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -12,12 +12,10 @@ idna>=2,<2.8
 pyserial>=3,<=3.4
 Jinja2>=2.7.3,<=2.10
 intelhex>=1.3,<=2.2.1
-intervaltree>=2,<3
 mbed-ls>=1.5.1,<1.8
 mbed-host-tests>=1.4.4,<1.6
 mbed-greentea>=0.2.24,<1.7
 beautifulsoup4>=4,<=4.6.3
-fuzzywuzzy>=0.11,<=0.17
 pyelftools>=0.24,<=0.25
 git+https://github.com/armmbed/manifest-tool.git@v1.4.6
 icetea>=1.2.1,<1.3
diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/OdinWiFiInterface.cpp b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/OdinWiFiInterface.cpp
index 3aa33c51081..f7430c8657d 100644
--- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/OdinWiFiInterface.cpp
+++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_STM32F439xI/TARGET_MODULE_UBLOX_ODIN_W2/sdk/ublox-odin-w2-drivers/OdinWiFiInterface.cpp
@@ -879,7 +879,7 @@ void OdinWiFiInterface::handle_user_connect(user_connect_s *user_connect)
 
     if(error_code == NSAPI_ERROR_OK) {
         memset(&_wlan_status_connected_info, 0, sizeof(cbWLAN_StatusConnectedInfo));
-        memcpy(&_wlan_status_disconnected_info, 0, sizeof(cbWLAN_StatusDisconnectedInfo));
+        memset(&_wlan_status_disconnected_info, 0, sizeof(cbWLAN_StatusDisconnectedInfo));
 
         _state_sta = entry_wait_connect();
     }