diff --git a/Makefile b/Makefile
index 47454acb5d413c21479d0f8d68af8bd219f3f7e6..cf5d8b79d0ffa360f3b12331637ca680d9c9a985 100644
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,11 @@ CFLAGS = -std=c99
 CXXFLAGS = -std=c++14
 
 TARGETS = src/app/${app}/main.cc src/os/object/cpp_helpers.cc src/os/object/outputstream.cc
-TARGETS += src/driver/lm75.cc
+
+ifneq ($(findstring lm75,${drivers}), )
+	TARGETS += src/driver/lm75.cc
+	COMMON_FLAGS += -DDRIVER_LM75
+endif
 
 ifeq (${timer_cycles}, 1)
 	COMMON_FLAGS += -DTIMER_CYCLES
diff --git a/src/app/ledblink/main.cc b/src/app/ledblink/main.cc
index 75c9116d0cf54b56004b328f3c8c9019b61c3308..8b0fe874856deb151380655ea9163df58b41879a 100644
--- a/src/app/ledblink/main.cc
+++ b/src/app/ledblink/main.cc
@@ -6,9 +6,6 @@
 #ifndef TIMER_CYCLES
 #error makeflag timer_cycles=1 required
 #endif
-#ifndef TIMER_S
-#error makeflag timer_s=1 required
-#endif
 
 /*
 void check_command(unsigned char argc, char** argv)
@@ -96,7 +93,9 @@ void check_command(unsigned char argc, char** argv)
 void loop(void)
 {
 	gpio.led_toggle(1);
+#ifdef TIMER_S
 	kout << dec << uptime.get_s() << endl;
+#endif
 }
 
 int main(void)
diff --git a/src/arch/esp8266/Makefile.inc b/src/arch/esp8266/Makefile.inc
index 0484985fbc7b5ef05084d503a1b1856b9f88533c..a4b98319840b74c0dfba1e70bb741d3dec757cda 100644
--- a/src/arch/esp8266/Makefile.inc
+++ b/src/arch/esp8266/Makefile.inc
@@ -21,6 +21,10 @@ TARGETS += src/arch/esp8266/driver/stdout.cc src/arch/esp8266/driver/uptime.cc
 
 OBJECTS = ${TARGETS:.cc=.o}
 
+ifeq (${esp8266_led2}, 1)
+	COMMON_FLAGS += -DLED_ON_GPIO16
+endif
+
 .cc.o:
 	${CXX} ${INCLUDES} ${COMMON_FLAGS} ${CXXFLAGS} -c -o $@ ${@:.o=.cc}
 	${OBJCOPY} --rename-section .text=.irom0.text --rename-section .literal=.irom0.literal $@
diff --git a/src/arch/esp8266/driver/gpio.cc b/src/arch/esp8266/driver/gpio.cc
index 6e995fc0b981bd70dbc4e0468e74c346d401d1de..d06130d640eedad62a45ec632678ceebaf302890 100644
--- a/src/arch/esp8266/driver/gpio.cc
+++ b/src/arch/esp8266/driver/gpio.cc
@@ -12,29 +12,61 @@ void ICACHE_FLASH_ATTR GPIO::setup()
 	// Enable GPIO2 (ESP8266 on-board LED) as output
 	PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_GPIO2);
 
+#ifdef LED_ON_GPIO16
 	// Enable GPIO16 (RTC out / NodeMCU on-board LED) as output
-	//WRITE_PERI_REG(PAD_XPD_DCDC_CONF, (READ_PERI_REG(PAD_XPD_DCDC_CONF) & 0xffffffbc) | (uint32)0x1);
-	//WRITE_PERI_REG(RTC_GPIO_CONF, (READ_PERI_REG(RTC_GPIO_CONF) & (uint32)0xfffffffe) | (uint32)0x0);
-	//WRITE_PERI_REG(RTC_GPIO_ENABLE, (READ_PERI_REG(RTC_GPIO_ENABLE) & (uint32)0xfffffffe) | (uint32)0x1);
+	WRITE_PERI_REG(PAD_XPD_DCDC_CONF, (READ_PERI_REG(PAD_XPD_DCDC_CONF) & 0xffffffbc) | (uint32)0x1);
+	WRITE_PERI_REG(RTC_GPIO_CONF, (READ_PERI_REG(RTC_GPIO_CONF) & (uint32)0xfffffffe) | (uint32)0x0);
+	WRITE_PERI_REG(RTC_GPIO_ENABLE, (READ_PERI_REG(RTC_GPIO_ENABLE) & (uint32)0xfffffffe) | (uint32)0x1);
+	// Turn the GPIO on to make sure the LED is off by default
+	WRITE_PERI_REG(RTC_GPIO_OUT, (READ_PERI_REG(RTC_GPIO_OUT) & (uint32)0xfffffffe) | (uint32)(1));
+#endif
 }
 
 void ICACHE_FLASH_ATTR GPIO::led_on(unsigned char id)
 {
+#ifdef LED_ON_GPIO16
+	if (id == 0) {
+		gpio_output_set(0, BIT2, BIT2, 0);
+	} else {
+		WRITE_PERI_REG(RTC_GPIO_OUT, (READ_PERI_REG(RTC_GPIO_OUT) & (uint32)0xfffffffe) | (uint32)(0));
+	}
+#else
 	gpio_output_set(0, BIT2, BIT2, 0);
+#endif
 }
 
 void ICACHE_FLASH_ATTR GPIO::led_off(unsigned char id)
 {
+#ifdef LED_ON_GPIO16
+	if (id == 0) {
+		gpio_output_set(BIT2, 0, BIT2, 0);
+	} else {
+		WRITE_PERI_REG(RTC_GPIO_OUT, (READ_PERI_REG(RTC_GPIO_OUT) & (uint32)0xfffffffe) | (uint32)(0));
+	}
+#else
 	gpio_output_set(BIT2, 0, BIT2, 0);
+#endif
 }
 
 void ICACHE_FLASH_ATTR GPIO::led_toggle(unsigned char id)
 {
+#ifdef LED_ON_GPIO16
+	if (id == 0) {
+		if (gpio_input_get() & BIT2) {
+			led_on(0);
+		} else {
+			led_off(0);
+		}
+	} else {
+		WRITE_PERI_REG(RTC_GPIO_OUT, (READ_PERI_REG(RTC_GPIO_OUT) ^ BIT0));
+	}
+#else
 	if (gpio_input_get() & BIT2) {
 		led_on(0);
 	} else {
 		led_off(0);
 	}
+#endif
 }
 
 GPIO gpio;