diff --git a/NodeManager.cpp b/NodeManager.cpp
index 04618f5e2a86f31093dd1c3290ca92195ec2e8aa..4d218df677cedc060a621ebfdd5e56412314494c 100644
--- a/NodeManager.cpp
+++ b/NodeManager.cpp
@@ -4,16 +4,6 @@
 
 #include "NodeManager.h"
 
-/*
- * Constants
- */
-
-const char* BATTERY = "BATTERY";
-const char* AWAKE = "AWAKE";
-const char* REBOOT = "REBOOT";
-const char* CLEAR = "CLEAR";
-const char* WAKEUP = "WAKEUP";
-const char* STARTED = "STARTED";
 
 /***************************************
    PowerManager
@@ -22,9 +12,9 @@ const char* STARTED = "STARTED";
 // set the vcc and ground pin the sensor is connected to
 void PowerManager::setPowerPins(int ground_pin, int vcc_pin, long wait) {
   #if DEBUG == 1
-    Serial.print("PWR G=");
+    Serial.print(F("PWR G="));
     Serial.print(ground_pin);
-    Serial.print(" V=");
+    Serial.print(F(" V="));
     Serial.println(vcc_pin);
   #endif
   // configure the vcc pin as output and initialize to low (power off)
@@ -48,7 +38,7 @@ bool PowerManager::_hasPowerManager() {
 void PowerManager::powerOn() {
   if (! _hasPowerManager()) return;
   #if DEBUG == 1
-    Serial.print("ON P=");
+    Serial.print(F("ON P="));
     Serial.println(_vcc_pin);
   #endif
   // power on the sensor by turning high the vcc pin
@@ -61,7 +51,7 @@ void PowerManager::powerOn() {
 void PowerManager::powerOff() {
   if (! _hasPowerManager()) return;
   #if DEBUG == 1
-    Serial.print("OFF P=");
+    Serial.print(F("OFF P="));
     Serial.println(_vcc_pin);
   #endif
   // power off the sensor by turning low the vcc pin
@@ -150,9 +140,9 @@ void Sensor::setSleepBetweenSend(int value) {
 // present the sensor to the gateway and controller
 void Sensor::presentation() {
   #if DEBUG == 1
-    Serial.print("PRES I=");
+    Serial.print(F("PRES I="));
     Serial.print(_child_id);
-    Serial.print(" T=");
+    Serial.print(F(" T="));
     Serial.println(_presentation);
   #endif
   present(_child_id, _presentation);
@@ -244,19 +234,19 @@ void Sensor::_send(MyMessage & message) {
     // if configured, sleep beetween each send
     if (_sleep_between_send > 0) wait(_sleep_between_send);
     #if DEBUG == 1
-      Serial.print("SEND D=");
+      Serial.print(F("SEND D="));
       Serial.print(message.destination);
-      Serial.print(" I=");
+      Serial.print(F(" I="));
       Serial.print(message.sensor);
-      Serial.print(" C=");
+      Serial.print(F(" C="));
       Serial.print(message.getCommand());
-      Serial.print(" T=");
+      Serial.print(F(" T="));
       Serial.print(message.type);
-      Serial.print(" S=");
+      Serial.print(F(" S="));
       Serial.print(message.getString());
-      Serial.print(" N=");
+      Serial.print(F(" N="));
       Serial.print(message.getInt());
-      Serial.print(" F=");
+      Serial.print(F(" F="));
       Serial.println(message.getFloat());
     #endif
     send(message);
@@ -302,11 +292,11 @@ void SensorAnalogInput::onLoop() {
   int percentage = 0;
   if (_output_percentage) percentage = _getPercentage(adc);
   #if DEBUG == 1
-    Serial.print("A-IN I=");
+    Serial.print(F("A-IN I="));
     Serial.print(_child_id);
-    Serial.print(" V=");
+    Serial.print(F(" V="));
     Serial.print(adc);
-    Serial.print(" %=");
+    Serial.print(F(" %="));
     Serial.println(percentage);
   #endif
   // store the result
@@ -407,13 +397,13 @@ void SensorThermistor::onLoop() {
   temperature -= 273.15;                         // convert to C
   if (! getControllerConfig().isMetric) temperature = temperature * 1.8 + 32;
   #if DEBUG == 1
-    Serial.print("THER I=");
+    Serial.print(F("THER I="));
     Serial.print(_child_id);
-    Serial.print(" V=");
+    Serial.print(F(" V="));
     Serial.print(adc);
-    Serial.print(" T=");
+    Serial.print(F(" T="));
     Serial.println(temperature);
-    Serial.print(" M=");
+    Serial.print(F(" M="));
     Serial.println(getControllerConfig().isMetric);
   #endif
   // store the value
@@ -444,11 +434,11 @@ void SensorDigitalInput::onLoop() {
   // read the value
   int value = digitalRead(_pin);
   #if DEBUG == 1
-    Serial.print("D-IN I=");
+    Serial.print(F("D-IN I="));
     Serial.print(_child_id);
-    Serial.print(" P=");
+    Serial.print(F(" P="));
     Serial.print(_pin);
-    Serial.print(" V=");
+    Serial.print(F(" V="));
     Serial.println(value);
   #endif
   // store the value
@@ -496,15 +486,15 @@ void SensorDigitalOutput::onReceive(const MyMessage & message) {
   int value = message.getInt();
   if (value != 0 && value != 1) return;
   #if DEBUG == 1
-    Serial.print("DOUT I=");
+    Serial.print(F("DOUT I="));
     Serial.print(_child_id);
-    Serial.print(" P=");
+    Serial.print(F(" P="));
     Serial.print(_pin);
-    Serial.print(" S=");
+    Serial.print(F(" S="));
     Serial.print(_initial_value);
-    Serial.print(" V=");
+    Serial.print(F(" V="));
     Serial.print(value);
-    Serial.print(" P=");
+    Serial.print(F(" P="));
     Serial.println(_pulse_width);
   #endif
   // set the value
@@ -585,9 +575,9 @@ void SensorDHT::onLoop() {
     // convert it
     if (! getControllerConfig().isMetric) temperature = temperature * 1.8 + 32;
     #if DEBUG == 1
-      Serial.print("DHT I=");
+      Serial.print(F("DHT I="));
       Serial.print(_child_id);
-      Serial.print(" T=");
+      Serial.print(F(" T="));
       Serial.println(temperature);
     #endif
     // store the value
@@ -599,9 +589,9 @@ void SensorDHT::onLoop() {
     float humidity = _dht->readHumidity();
     if (isnan(humidity)) return;
     #if DEBUG == 1
-      Serial.print("DHT I=");
+      Serial.print(F("DHT I="));
       Serial.print(_child_id);
-      Serial.print(" H=");
+      Serial.print(F(" H="));
       Serial.println(humidity);
     #endif
     // store the value
@@ -652,9 +642,9 @@ void SensorSHT21::onLoop() {
     // convert it
     if (! getControllerConfig().isMetric) temperature = temperature * 1.8 + 32;
     #if DEBUG == 1
-      Serial.print("SHT I=");
+      Serial.print(F("SHT I="));
       Serial.print(_child_id);
-      Serial.print(" T=");
+      Serial.print(F(" T="));
       Serial.println(temperature);
     #endif
     // store the value
@@ -666,9 +656,9 @@ void SensorSHT21::onLoop() {
     float humidity = SHT2x.GetHumidity();
     if (isnan(humidity)) return;
     #if DEBUG == 1
-      Serial.print("SHT I=");
+      Serial.print(F("SHT I="));
       Serial.print(_child_id);
-      Serial.print(" H=");
+      Serial.print(F(" H="));
       Serial.println(humidity);
     #endif
     // store the value
@@ -734,11 +724,11 @@ void SensorSwitch::onLoop() {
   // process the value
   if ( (_mode == RISING && value == HIGH ) || (_mode == FALLING && value == LOW) || (_mode == CHANGE) )  {
     #if DEBUG == 1
-      Serial.print("SWITCH I=");
+      Serial.print(F("SWITCH I="));
       Serial.print(_child_id);
-      Serial.print(" P=");
+      Serial.print(F(" P="));
       Serial.print(_pin);
-      Serial.print(" V=");
+      Serial.print(F(" V="));
       Serial.println(value);
     #endif
     _value_int = value;
@@ -798,9 +788,9 @@ void SensorDs18b20::onLoop() {
   // convert it
   if (! getControllerConfig().isMetric) temperature = temperature * 1.8 + 32;
   #if DEBUG == 1
-    Serial.print("DS18 I=");
+    Serial.print(F("DS18 I="));
     Serial.print(_child_id);
-    Serial.print(" T=");
+    Serial.print(F(" T="));
     Serial.println(temperature);
   #endif
   // store the value
@@ -834,9 +824,9 @@ void SensorBH1750::onLoop() {
   // request the light level
   _value_int = _lightSensor->readLightLevel();
   #if DEBUG == 1
-    Serial.print("BH1 I=");
+    Serial.print(F("BH1 I="));
     Serial.print(_child_id);
-    Serial.print(" L=");
+    Serial.print(F(" L="));
     Serial.println(_value_int);
   #endif
 }
@@ -874,9 +864,9 @@ void SensorMLX90614::onLoop() {
   // convert it
   if (! getControllerConfig().isMetric) temperature = temperature * 1.8 + 32;
   #if DEBUG == 1
-    Serial.print("MLX I=");
+    Serial.print(F("MLX I="));
     Serial.print(_child_id);
-    Serial.print(" T=");
+    Serial.print(F(" T="));
     Serial.println(temperature);
   #endif
   if (! isnan(temperature)) _value_float = temperature;
@@ -931,9 +921,9 @@ void SensorBME280::onLoop() {
     // convert it
     if (! getControllerConfig().isMetric) temperature = temperature * 1.8 + 32;
     #if DEBUG == 1
-      Serial.print("BME I=");
+      Serial.print(F("BME I="));
       Serial.print(_child_id);
-      Serial.print(" T=");
+      Serial.print(F(" T="));
       Serial.println(temperature);
     #endif
     // store the value
@@ -945,9 +935,9 @@ void SensorBME280::onLoop() {
     float humidity = _bme->readHumidity();
     if (isnan(humidity)) return;
     #if DEBUG == 1
-      Serial.print("BME I=");
+      Serial.print(F("BME I="));
       Serial.print(_child_id);
-      Serial.print(" H=");
+      Serial.print(F(" H="));
       Serial.println(humidity);
     #endif
     // store the value
@@ -959,9 +949,9 @@ void SensorBME280::onLoop() {
     float pressure = _bme->readPressure() / 100.0F;
     if (isnan(pressure)) return;
     #if DEBUG == 1
-      Serial.print("BME I=");
+      Serial.print(F("BME I="));
       Serial.print(_child_id);
-      Serial.print(" P=");
+      Serial.print(F(" P="));
       Serial.println(pressure);
     #endif
     // store the value
@@ -1148,7 +1138,7 @@ int NodeManager::registerSensor(int sensor_type, int pin, int child_id) {
       Adafruit_BME280* bme = new Adafruit_BME280();
       if (! bme->begin()) {
         #if DEBUG == 1
-          Serial.println("NO BME");
+          Serial.println(F("NO BME"));
         #endif
         return -1;
       }
@@ -1161,7 +1151,7 @@ int NodeManager::registerSensor(int sensor_type, int pin, int child_id) {
   #endif
   else {
     #if DEBUG == 1
-      Serial.print("INVALID ");
+      Serial.print(F("INVALID "));
       Serial.println(sensor_type);
     #endif
     return -1;
@@ -1171,13 +1161,13 @@ int NodeManager::registerSensor(int sensor_type, int pin, int child_id) {
 // attach a built-in or custom sensor to this manager
 int NodeManager::registerSensor(Sensor* sensor) {
   #if DEBUG == 1
-    Serial.print("REG I=");
+    Serial.print(F("REG I="));
     Serial.print(sensor->getChildId());
-    Serial.print(" P=");
+    Serial.print(F(" P="));
     Serial.print(sensor->getPin());
-    Serial.print(" P=");
+    Serial.print(F(" P="));
     Serial.print(sensor->getPresentation());
-    Serial.print(" T=");
+    Serial.print(F(" T="));
     Serial.println(sensor->getType());
   #endif
   #if POWER_MANAGER == 1
@@ -1199,12 +1189,12 @@ Sensor* NodeManager::get(int child_id) {
 // setup NodeManager
 void NodeManager::before() {
   #if DEBUG == 1
-    Serial.print("NodeManager v");
+    Serial.print(F("NodeManager v"));
     Serial.println(VERSION);
   #endif
   if (_reboot_pin > -1) {
     #if DEBUG == 1
-      Serial.print("REB P=");
+      Serial.print(F("REB P="));
       Serial.println(_reboot_pin);
     #endif
     // setup the reboot pin
@@ -1228,9 +1218,9 @@ void NodeManager::before() {
     if (_interrupt_2_pull > -1) digitalWrite(INTERRUPT_PIN_2,_interrupt_2_pull);
   }
   #if DEBUG == 1
-    Serial.print("INT1 M=");
+    Serial.print(F("INT1 M="));
     Serial.println(_interrupt_1_mode);
-    Serial.print("INT2 M=");
+    Serial.print(F("INT2 M="));
     Serial.println(_interrupt_2_mode);
   #endif
   #if REMOTE_CONFIGURATION == 1 && SLEEP_MANAGER == 1 && PERSIST == 1
@@ -1245,11 +1235,11 @@ void NodeManager::before() {
       else if (major == 3) _sleep_time =  _sleep_time + 250 * 3;
       _sleep_unit = loadState(EEPROM_SLEEP_UNIT);
       #if DEBUG == 1
-        Serial.print("LOADSLP M=");
+        Serial.print(F("LOADSLP M="));
         Serial.print(_sleep_mode);
-        Serial.print(" T=");
+        Serial.print(F(" T="));
         Serial.print(_sleep_time);
-        Serial.print(" U=");
+        Serial.print(F(" U="));
         Serial.println(_sleep_unit);
       #endif
     }
@@ -1269,27 +1259,27 @@ void NodeManager::before() {
 // present NodeManager and its sensors
 void NodeManager::presentation() {
   #if DEBUG == 1
-    Serial.println("RADIO OK");
+    Serial.println(F("RADIO OK"));
   #endif
   // present the service as a custom sensor to the controller
   #if DEBUG == 1
-    Serial.print("PRES I=");
+    Serial.print(F("PRES I="));
     Serial.print(CONFIGURATION_CHILD_ID);
-    Serial.print(", T=");
+    Serial.print(F(", T="));
     Serial.println(S_CUSTOM);
   #endif
   present(CONFIGURATION_CHILD_ID, S_CUSTOM);
   #if BATTERY_MANAGER == 1 && BATTERY_SENSOR == 1
     #if DEBUG == 1
-      Serial.print("PRES I=");
+      Serial.print(F("PRES I="));
       Serial.print(BATTERY_CHILD_ID);
-      Serial.print(", T=");
+      Serial.print(F(", T="));
       Serial.println(S_MULTIMETER);
     #endif
     // present the battery service
     present(BATTERY_CHILD_ID, S_MULTIMETER);
     // report battery level
-    _process(BATTERY);
+    _process("BATTERY");
   #endif
   // present each sensor
   for (int i = 0; i < 255; i++) {
@@ -1298,7 +1288,7 @@ void NodeManager::presentation() {
     _sensors[i]->presentation();
   }
   #if DEBUG == 1
-    Serial.println("READY");
+    Serial.println(F("READY"));
     Serial.println("");
   #endif
 }
@@ -1307,13 +1297,13 @@ void NodeManager::presentation() {
 // setup NodeManager
 void NodeManager::setup() {
   #if DEBUG == 1
-    Serial.print("MY I=");
+    Serial.print(F("MY I="));
     Serial.print(getNodeId());
-    Serial.print(" M=");
+    Serial.print(F(" M="));
     Serial.println(getControllerConfig().isMetric);
   #endif
   #if SERVICE_MESSAGES == 1
-    _send(_msg.set(STARTED));
+    _send(_msg.set("STARTED"));
   #endif
 }
 
@@ -1347,15 +1337,15 @@ void NodeManager::loop() {
 // dispacth inbound messages
 void NodeManager::receive(const MyMessage &message) {
   #if DEBUG == 1
-    Serial.print("RECV S=");
+    Serial.print(F("RECV S="));
     Serial.print(message.sender);
-    Serial.print(" I=");
+    Serial.print(F(" I="));
     Serial.print(message.sensor);
-    Serial.print(" C=");
+    Serial.print(F(" C="));
     Serial.print(message.getCommand());
-    Serial.print(" T=");
+    Serial.print(F(" T="));
     Serial.print(message.type);
-    Serial.print(" D=");
+    Serial.print(F(" D="));
     Serial.println(message.getString());
   #endif
   // process incoming service messages
@@ -1384,19 +1374,19 @@ void NodeManager::_send(MyMessage & message) {
     // if configured, sleep beetween each send
     if (_sleep_between_send > 0) wait(_sleep_between_send);
     #if DEBUG == 1
-      Serial.print("SEND D=");
+      Serial.print(F("SEND D="));
       Serial.print(message.destination);
-      Serial.print(" I=");
+      Serial.print(F(" I="));
       Serial.print(message.sensor);
-      Serial.print(" C=");
+      Serial.print(F(" C="));
       Serial.print(message.getCommand());
-      Serial.print(" T=");
+      Serial.print(F(" T="));
       Serial.print(message.type);
-      Serial.print(" S=");
+      Serial.print(F(" S="));
       Serial.print(message.getString());
-      Serial.print(" I=");
+      Serial.print(F(" I="));
       Serial.print(message.getInt());
-      Serial.print(" F=");
+      Serial.print(F(" F="));
       Serial.println(message.getFloat());
     #endif
     send(message);
@@ -1411,7 +1401,7 @@ void NodeManager::_process(const char * message) {
   }
   #if BATTERY_MANAGER == 1
     // BATTERY: return the battery level
-    else if (strcmp(message, BATTERY) == 0) {
+    else if (strcmp(message, "BATTERY") == 0) {
       // measure the board vcc
       float volt = 0;
       if (_battery_internal_vcc || _battery_pin == -1) volt = _getVcc();
@@ -1421,9 +1411,9 @@ void NodeManager::_process(const char * message) {
       if (percentage > 100) percentage = 100;
       if (percentage < 0) percentage = 0;
       #if DEBUG == 1
-        Serial.print("BATT V=");
+        Serial.print(F("BATT V="));
         Serial.print(volt);
-        Serial.print(" P=");
+        Serial.print(F(" P="));
         Serial.println(percentage);
       #endif
       #if BATTERY_SENSOR == 1
@@ -1436,18 +1426,18 @@ void NodeManager::_process(const char * message) {
     }
   #endif
   // REBOOT: reboot the board
-  else if (strcmp(message, REBOOT) == 0 && _reboot_pin > -1) {
+  else if (strcmp(message, "REBOOT") == 0 && _reboot_pin > -1) {
     #if DEBUG == 1
-      Serial.println(REBOOT);
+      Serial.println(F("REBOOT"));
     #endif
     // set the reboot pin connected to RST to low so to reboot the board
     _send(_msg.set(message));
     digitalWrite(_reboot_pin, LOW);
   }
   // CLEAR: clear the user's eeprom
-  else if (strcmp(message, CLEAR) == 0) {
+  else if (strcmp(message, "CLEAR") == 0) {
     #if DEBUG == 1
-      Serial.println(CLEAR);
+      Serial.println(F("CLEAR"));
     #endif
     for (int i = 0; i <= EEPROM_LAST_ID; i++) saveState(i, 0xFF);
     _send(_msg.set(message));
@@ -1467,7 +1457,7 @@ void NodeManager::_process(const char * message) {
       s[3] = '\0';
       int node_id = atoi(s);
       #if DEBUG == 1
-        Serial.print("MY I=");
+        Serial.print(F("MY I="));
         Serial.println(node_id);
       #endif
       // Save static ID to eeprom
@@ -1486,7 +1476,7 @@ void NodeManager::_process(const char * message) {
         s[1] = '\0';
         _sleep_mode = atoi(s);
         #if DEBUG == 1
-          Serial.print("SLEEP M=");
+          Serial.print(F("SLEEP M="));
           Serial.println(_sleep_mode);
         #endif
         #if PERSIST == 1
@@ -1517,9 +1507,9 @@ void NodeManager::_process(const char * message) {
         s[3] = '\0';
         _sleep_time = atoi(s);
         #if DEBUG == 1
-          Serial.print("SLEEP T=");
+          Serial.print(F("SLEEP T="));
           Serial.print(_sleep_time);
-          Serial.print(" U=");
+          Serial.print(F(" U="));
           Serial.println(_sleep_unit);
         #endif
         #if PERSIST == 1
@@ -1543,9 +1533,9 @@ void NodeManager::_process(const char * message) {
   #endif
   // WAKEUP: when received after a sleeping cycle or during wait, abort the cycle and stay awake
   #if SLEEP_MANAGER == 1
-    else if (strcmp(message, WAKEUP) == 0) {
+    else if (strcmp(message, "WAKEUP") == 0) {
       #if DEBUG == 1
-        Serial.println(WAKEUP);
+        Serial.println(F("WAKEUP"));
       #endif
       _send(_msg.set(message));
       _sleep_mode = IDLE;
@@ -1563,9 +1553,9 @@ void NodeManager::_sleep() {
   else if (_sleep_unit == DAYS) sleep_sec = sleep_sec * 43200;
   long sleep_ms = sleep_sec * 1000;
   #if DEBUG == 1
-    Serial.print("SLEEP ");
+    Serial.print(F("SLEEP "));
     Serial.print(sleep_sec);
-    Serial.println("s");
+    Serial.println(F("s"));
   #endif
   #if SERVICE_MESSAGES == 1
     // notify the controller I'm going to sleep
@@ -1598,9 +1588,9 @@ void NodeManager::_sleep() {
         interrupt_mode = _interrupt_2_mode;
       }
       #if DEBUG == 1
-        Serial.print("WAKE P=");
+        Serial.print(F("WAKE P="));
         Serial.print(pin_number);
-        Serial.print(", M=");
+        Serial.print(F(", M="));
         Serial.println(interrupt_mode);
       #endif
       #if SLEEP_MANAGER == 1
@@ -1611,11 +1601,11 @@ void NodeManager::_sleep() {
   }
   // coming out of sleep
   #if DEBUG == 1
-    Serial.println(AWAKE);
+    Serial.println(F("AWAKE"));
   #endif
   #if SERVICE_MESSAGES == 1
     // notify the controller I am awake
-    _send(_msg.set(AWAKE));
+    _send(_msg.set("AWAKE"));
   #endif
   #if BATTERY_MANAGER == 1
     // keep track of the number of sleeping cycles
@@ -1623,7 +1613,7 @@ void NodeManager::_sleep() {
     // battery has to be reported after the configured number of sleep cycles
     if (_battery_report_cycles == _cycles) {
       // time to report the battery level again
-      _process(BATTERY);
+      _process("BATTERY");
       _cycles = 0;
     }
   #endif
diff --git a/config.h b/config.h
index 9d0b65dc7ec1783321b0f0a4f5d3fbb4a6c5749b..e160b1c4e18674e2a0a0cf21894a233e04be703d 100644
--- a/config.h
+++ b/config.h
@@ -16,7 +16,7 @@
 //#define MY_NODE_ID 100
 
 #define MY_RADIO_NRF24
-//#define MY_RF24_ENABLE_ENCRYPTION
+#define MY_RF24_ENABLE_ENCRYPTION
 //#define MY_RF24_CHANNEL 76
 
 //#define MY_RADIO_RFM69