diff --git a/common.mk b/common.mk
index 4320f98..d0a093d 100644
--- a/common.mk
+++ b/common.mk
@@ -57,9 +57,9 @@ MODULE_INCDIR    += include/lwip include/lwip/ipv4 include/lwip/ipv6
 SDK_INCDIR=include/espressif
 
 # libraries to link, mainly blobs provided by the esp-iot-rtos SDK
-LIBS		?= c gcc json lwip main net80211 phy pp ssl udhcp wpa hal
+LIBS		?= gcc json lwip main net80211 phy pp ssl udhcp wpa hal
 
-CFLAGS		= -Wall -Werror -Wl,-EL -nostdlib -mlongcalls -mtext-section-literals
+CFLAGS		= -Wall -Werror -Wl,-EL -nostdlib -mlongcalls -mtext-section-literals -std=gnu99
 LDFLAGS		= -nostdlib -Wl,--no-check-sections -Wl,-L$(ROOT)lib -u call_user_start -Wl,-static -Wl,-Map=build/${TARGET}.map
 
 ifeq ($(FLAVOR),debug)
diff --git a/examples/http_get/FreeRTOSConfig.h b/examples/http_get/FreeRTOSConfig.h
new file mode 100644
index 0000000..4d9565a
--- /dev/null
+++ b/examples/http_get/FreeRTOSConfig.h
@@ -0,0 +1,141 @@
+/*
+    FreeRTOS V7.5.2 - Copyright (C) 2013 Real Time Engineers Ltd.
+
+    VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION.
+
+    ***************************************************************************
+     *                                                                       *
+     *    FreeRTOS provides completely free yet professionally developed,    *
+     *    robust, strictly quality controlled, supported, and cross          *
+     *    platform software that has become a de facto standard.             *
+     *                                                                       *
+     *    Help yourself get started quickly and support the FreeRTOS         *
+     *    project by purchasing a FreeRTOS tutorial book, reference          *
+     *    manual, or both from: http://www.FreeRTOS.org/Documentation        *
+     *                                                                       *
+     *    Thank you!                                                         *
+     *                                                                       *
+    ***************************************************************************
+
+    This file is part of the FreeRTOS distribution.
+
+    FreeRTOS is free software; you can redistribute it and/or modify it under
+    the terms of the GNU General Public License (version 2) as published by the
+    Free Software Foundation >>!AND MODIFIED BY!<< the FreeRTOS exception.
+
+    >>! NOTE: The modification to the GPL is included to allow you to distribute
+    >>! a combined work that includes FreeRTOS without being obliged to provide
+    >>! the source code for proprietary components outside of the FreeRTOS
+    >>! kernel.
+
+    FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY
+    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+    FOR A PARTICULAR PURPOSE.  Full license text is available from the following
+    link: http://www.freertos.org/a00114.html
+
+    1 tab == 4 spaces!
+
+    ***************************************************************************
+     *                                                                       *
+     *    Having a problem?  Start by reading the FAQ "My application does   *
+     *    not run, what could be wrong?"                                     *
+     *                                                                       *
+     *    http://www.FreeRTOS.org/FAQHelp.html                               *
+     *                                                                       *
+    ***************************************************************************
+
+    http://www.FreeRTOS.org - Documentation, books, training, latest versions,
+    license and Real Time Engineers Ltd. contact details.
+
+    http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products,
+    including FreeRTOS+Trace - an indispensable productivity tool, a DOS
+    compatible FAT file system, and our tiny thread aware UDP/IP stack.
+
+    http://www.OpenRTOS.com - Real Time Engineers ltd license FreeRTOS to High
+    Integrity Systems to sell under the OpenRTOS brand.  Low cost OpenRTOS
+    licenses offer ticketed support, indemnification and middleware.
+
+    http://www.SafeRTOS.com - High Integrity Systems also provide a safety
+    engineered and independently SIL3 certified version for use in safety and
+    mission critical applications that require provable dependability.
+
+    1 tab == 4 spaces!
+*/
+
+#ifndef FREERTOS_CONFIG_H
+#define FREERTOS_CONFIG_H
+
+/*-----------------------------------------------------------
+ * Application specific definitions.
+ *
+ * These definitions should be adjusted for your particular hardware and
+ * application requirements.
+ *
+ * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE
+ * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. 
+ *
+ * See http://www.freertos.org/a00110.html.
+ *----------------------------------------------------------*/
+
+#define configUSE_PREEMPTION		1
+#define configUSE_IDLE_HOOK			0
+#define configUSE_TICK_HOOK			0
+#define configCPU_CLOCK_HZ			( ( unsigned long ) 80000000 )
+#define configTICK_RATE_HZ			( ( portTickType ) 100 )
+#define configMAX_PRIORITIES		( ( unsigned portBASE_TYPE ) 15 )
+#define configMINIMAL_STACK_SIZE	( ( unsigned short )156 )
+#define configTOTAL_HEAP_SIZE		( ( size_t ) ( 32 * 1024 ) )
+#define configMAX_TASK_NAME_LEN		( 16 )
+#define configUSE_TRACE_FACILITY	0
+#define configUSE_STATS_FORMATTING_FUNCTIONS 0
+#define configUSE_16_BIT_TICKS		0
+#define configIDLE_SHOULD_YIELD		1
+
+#define INCLUDE_xTaskGetIdleTaskHandle 1
+#define INCLUDE_xTimerGetTimerDaemonTaskHandle 1
+
+#define configCHECK_FOR_STACK_OVERFLOW  2
+#define configUSE_MUTEXES  1
+#define configUSE_TIMERS    1
+
+#if configUSE_TIMERS
+#define configTIMER_TASK_PRIORITY ( tskIDLE_PRIORITY + 2 )
+#define configTIMER_QUEUE_LENGTH (10)
+#define configTIMER_TASK_STACK_DEPTH  ( ( unsigned short ) 512 )
+#endif
+
+/* Co-routine definitions. */
+#define configUSE_CO_ROUTINES 		0
+#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )
+
+/* Set the following definitions to 1 to include the API function, or zero
+to exclude the API function. */
+
+#define INCLUDE_vTaskPrioritySet		1
+#define INCLUDE_uxTaskPriorityGet		1
+#define INCLUDE_vTaskDelete				1
+#define INCLUDE_vTaskCleanUpResources	0
+#define INCLUDE_vTaskSuspend			1
+#define INCLUDE_vTaskDelayUntil			1
+#define INCLUDE_vTaskDelay				1
+
+/*set the #define for debug info*/
+#define INCLUDE_xTaskGetCurrentTaskHandle 1
+#define INCLUDE_uxTaskGetStackHighWaterMark 1
+
+/* This is the raw value as per the Cortex-M3 NVIC.  Values can be 255
+(lowest) to 0 (1?) (highest). */
+#define configKERNEL_INTERRUPT_PRIORITY 		255
+/* !!!! configMAX_SYSCALL_INTERRUPT_PRIORITY must not be set to zero !!!!
+See http://www.FreeRTOS.org/RTOS-Cortex-M3-M4.html. */
+#define configMAX_SYSCALL_INTERRUPT_PRIORITY 	191 /* equivalent to 0xb0, or priority 11. */
+
+
+/* This is the value being used as per the ST library which permits 16
+priority values, 0 to 15.  This must correspond to the
+configKERNEL_INTERRUPT_PRIORITY setting.  Here 15 corresponds to the lowest
+NVIC value of 255. */
+#define configLIBRARY_KERNEL_INTERRUPT_PRIORITY	15
+
+#endif /* FREERTOS_CONFIG_H */
+
diff --git a/examples/http_get/Makefile b/examples/http_get/Makefile
new file mode 100644
index 0000000..571d50a
--- /dev/null
+++ b/examples/http_get/Makefile
@@ -0,0 +1,2 @@
+TARGET=http_get
+include ../../common.mk
diff --git a/examples/http_get/main.c b/examples/http_get/main.c
new file mode 100644
index 0000000..b9c7e6d
--- /dev/null
+++ b/examples/http_get/main.c
@@ -0,0 +1,122 @@
+#include "esp_common.h"
+
+#include "FreeRTOS.h"
+#include "task.h"
+
+#include "lwip/sockets.h"
+#include "lwip/dns.h"
+#include "lwip/netdb.h"
+
+#include "espressif/blob_prototypes.h"
+
+#define WEB_SERVER "chainxor.org"
+#define WEB_PORT 80
+#define WEB_URL "http://chainxor.org/"
+
+/* FILL THESE IN!!!!!!!!!! */
+#define WIFI_SSID "SSID Name Here"
+#define WIFI_PASS "Wifi Password Here"
+
+void http_get_task(void *pvParameters)
+{
+    int successes = 0, failures = 0;
+    printf("HTTP get task starting...\r\n");
+
+    while(1) {
+	const struct addrinfo hints = {
+	    .ai_family = AF_INET,
+	    .ai_socktype = SOCK_STREAM,
+	};
+	struct addrinfo *res;
+
+	printf("Running DNS lookup for %s...\r\n", WEB_SERVER);
+	int err = getaddrinfo(WEB_SERVER, "80", &hints, &res);
+
+	if(err != 0 || res == NULL) {
+	    printf("DNS lookup failed err=%d res=%p\r\n", err, res);
+	    if(res)
+		freeaddrinfo(res);
+	    vTaskDelay(1000 / portTICK_RATE_MS);
+	    failures++;
+	    continue;
+	}
+	printf("DNS lookup succeeded. IP=%s\r\n", inet_ntoa(res->ai_addr));
+
+	int s = socket(res->ai_family, res->ai_socktype, 0);
+	if(s < 0) {
+	    printf("... Failed to allocate socket.\r\n");
+	    freeaddrinfo(res);
+	    vTaskDelay(1000 / portTICK_RATE_MS);
+	    failures++;
+	    continue;
+	}
+
+        printf("... allocated socket\r\n");
+
+        if(connect(s, res->ai_addr, res->ai_addrlen) != 0) {
+            close(s);
+	    freeaddrinfo(res);
+            printf("... socket connect failed.\r\n");
+            vTaskDelay(4000 / portTICK_RATE_MS);
+	    failures++;
+            continue;
+        }
+
+        printf("... connected\r\n");
+	freeaddrinfo(res);
+
+	const char *req =
+	    "GET "WEB_URL"\r\n"
+	    "User-Agent: esp-open-rtos/0.1 esp8266\r\n"
+	    "\r\n";
+        if (write(s, req, strlen(req) + 1) < 0) {
+            printf("... socket send failed\r\n");
+	    close(s);
+	    vTaskDelay(4000 / portTICK_RATE_MS);
+	    failures++;
+	    continue;
+        }
+        printf("... socket send success\r\n");
+
+	static char recv_buf[128];
+	int r;
+	do {
+	    bzero(recv_buf, 128);
+	    r = read(s, recv_buf, 127);
+	    if(r > 0) {
+		printf("%s", recv_buf);
+	    }
+	} while(r > 0);
+
+	printf("... done reading from socket. Last read return=%d errno=%d\r\n", r, errno);
+	if(r != 0)
+	    failures++;
+	else
+	    successes++;
+	close(s);
+	printf("successes = %d failures = %d\r\n", successes, failures);
+	for(int countdown = 10; countdown >= 0; countdown--) {
+	    printf("%d... ", countdown);
+	    vTaskDelay(1000 / portTICK_RATE_MS);
+	}
+	printf("\r\nStarting again!\r\n");
+    }
+}
+
+void user_init(void)
+{
+    uart_div_modify(0, UART_CLK_FREQ / 115200);
+    printf("SDK version:%s\n", system_get_sdk_version());
+
+    struct station_config config = {
+	.ssid = WIFI_SSID,
+	.password = WIFI_PASS,
+    };
+
+    /* required to call wifi_set_opmode before station_set_config */
+    wifi_set_opmode(STATIONAP_MODE);
+    wifi_station_set_config(&config);
+
+    xTaskCreate(&http_get_task, (signed char *)"get_task", 256, NULL, 2, NULL);
+}
+