diff --git a/MemoryFree.cpp b/MemoryFree.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..3e9eab90ca8e756fa743ea4769c02e682e2fa70a
--- /dev/null
+++ b/MemoryFree.cpp
@@ -0,0 +1,44 @@
+ #if (ARDUINO >= 100)
+#include <Arduino.h>
+#else
+#include <WProgram.h>
+#endif
+
+extern unsigned int __heap_start;
+extern void *__brkval;
+
+/*
+ * The free list structure as maintained by the 
+ * avr-libc memory allocation routines.
+ */
+struct __freelist {
+  size_t sz;
+  struct __freelist *nx;
+};
+
+/* The head of the free list structure */
+extern struct __freelist *__flp;
+
+#include "MemoryFree.h"
+
+/* Calculates the size of the free list */
+int freeListSize() {
+  struct __freelist* current;
+  int total = 0;
+  for (current = __flp; current; current = current->nx) {
+    total += 2; /* Add two bytes for the memory block's header  */
+    total += (int) current->sz;
+  }
+  return total;
+}
+
+int freeMemory() {
+  int free_memory;
+  if ((int)__brkval == 0) {
+    free_memory = ((int)&free_memory) - ((int)&__heap_start);
+  } else {
+    free_memory = ((int)&free_memory) - ((int)__brkval);
+    free_memory += freeListSize();
+  }
+  return free_memory;
+}
\ No newline at end of file
diff --git a/MemoryFree.h b/MemoryFree.h
new file mode 100644
index 0000000000000000000000000000000000000000..3a7f2d5848ff24caf1596350fdf513ca7fb3fb00
--- /dev/null
+++ b/MemoryFree.h
@@ -0,0 +1,18 @@
+ // MemoryFree library based on code posted here:
+// http://forum.arduino.cc/index.php?topic=27536.msg204024#msg204024
+// Extended by Matthew Murdoch to include walking of the free list.
+
+#ifndef	MEMORY_FREE_H
+#define MEMORY_FREE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int freeMemory();
+
+#ifdef  __cplusplus
+}
+#endif
+
+#endif
\ No newline at end of file
diff --git a/NodeManager.cpp b/NodeManager.cpp
index 801298736408832f1764ab6380830dac7bf2d55c..390a69c55982b8ab67fa794d6ca4ce79624b4ffc 100755
--- a/NodeManager.cpp
+++ b/NodeManager.cpp
@@ -4,6 +4,10 @@
 
 #include "NodeManager.h"
 
+void printFM() {
+  Serial.print (F("Free memory = "));
+  Serial.println (freeMemory ());
+}
 /***************************************
    PowerManager
 */
@@ -3293,6 +3297,7 @@ void NodeManager::presentation() {
 
 // setup NodeManager
 void NodeManager::setup() {
+  Serial.print(F("NodeManager::setup: ")); printFM();
   // retrieve and store isMetric from the controller
   if (_get_controller_config) _is_metric = getControllerConfig().isMetric;
   #if DEBUG == 1
@@ -3307,9 +3312,11 @@ void NodeManager::setup() {
   // run setup for all the registered sensors
   for (int i = 1; i <= MAX_SENSORS; i++) {
     if (_sensors[i] == 0) continue;
+    Serial.print(F("NodeManager::setup: Before sensor "));Serial.print(i);printFM();
     // call each sensor's setup()
     _sensors[i]->setup();
   }
+  Serial.print(F("NodeManager::setup: END"));printFM();
 }
 
 // run the main function for all the register sensors
diff --git a/NodeManager.h b/NodeManager.h
index 8728831f7fa0df34d737b330c3f00eee5aa7d88a..2cd0f0cbefb68212622ca6582d84d56eca8e52d3 100755
--- a/NodeManager.h
+++ b/NodeManager.h
@@ -5,10 +5,13 @@
 #define NodeManager_h
 
 #include <Arduino.h>
+#include "MemoryFree.h"
 
 // define NodeManager version
 #define VERSION "1.6-dev"
 
+void printFM();
+
 /***********************************
    Constants
 */