diff --git a/hardware.c b/hardware.c
index 786e142..dff5ac3 100644
--- a/hardware.c
+++ b/hardware.c
@@ -68,8 +68,6 @@
     /* Construct the path. */
     snprintf(path, sizeof(path), "%s/%s.%s.so", HAL_LIBRARY_PATH, id, variant);
 
-    LOGV("load: E id=%s path=%s", id, path);
-
     /*
      * load the symbols resolving undefined symbols before
      * dlopen returns. Since RTLD_GLOBAL is not or'd in with
@@ -112,12 +110,13 @@
             dlclose(handle);
             handle = NULL;
         }
+    } else {
+        LOGV("loaded HAL id=%s path=%s hmi=%p handle=%p",
+             id, path, *pHmi, handle);
     }
 
     *pHmi = hmi;
 
-    LOGV("load: X id=%s path=%s hmi=%p handle=%p status=%d",
-         id, path, *pHmi, handle, status);
     return status;
 }
 
@@ -135,8 +134,6 @@
      * We also assume that dlopen() is thread-safe.
      */
     
-    LOGV("hal_module_info_get: Load module id=%s", id);
-
     status = -EINVAL;
 
     /* Loop through the configuration variants looking for a module */
@@ -153,7 +150,5 @@
     }
     
     *module = hmi;
-    LOGV("hal_module_info_get: X id=%s hmi=%p status=%d", id, hmi, status);
-
     return status;
 }
diff --git a/modules/gralloc/allocator.cpp b/modules/gralloc/allocator.cpp
index f901741..4dad6a1 100644
--- a/modules/gralloc/allocator.cpp
+++ b/modules/gralloc/allocator.cpp
@@ -22,13 +22,15 @@
 // align all the memory blocks on a cache-line boundary
 const int SimpleBestFitAllocator::kMemoryAlign = 32;
 
-SimpleBestFitAllocator::SimpleBestFitAllocator(size_t size)
+SimpleBestFitAllocator::SimpleBestFitAllocator()
+    : mHeapSize(0)
 {
-    size_t pagesize = getpagesize();
-    mHeapSize = ((size + pagesize-1) & ~(pagesize-1));
+}
 
-    chunk_t* node = new chunk_t(0, mHeapSize / kMemoryAlign);
-    mList.insertHead(node);
+SimpleBestFitAllocator::SimpleBestFitAllocator(size_t size)
+    : mHeapSize(0)
+{
+    setSize(size);
 }
 
 SimpleBestFitAllocator::~SimpleBestFitAllocator()
@@ -38,14 +40,27 @@
     }
 }
 
+ssize_t SimpleBestFitAllocator::setSize(size_t size)
+{
+    Locker::Autolock _l(mLock);
+    if (mHeapSize != 0) return -EINVAL;
+    size_t pagesize = getpagesize();
+    mHeapSize = ((size + pagesize-1) & ~(pagesize-1));
+    chunk_t* node = new chunk_t(0, mHeapSize / kMemoryAlign);
+    mList.insertHead(node);
+    return size;
+}
+    
+    
 size_t SimpleBestFitAllocator::size() const
 {
     return mHeapSize;
 }
 
-size_t SimpleBestFitAllocator::allocate(size_t size, uint32_t flags)
+ssize_t SimpleBestFitAllocator::allocate(size_t size, uint32_t flags)
 {
     Locker::Autolock _l(mLock);
+    if (mHeapSize == 0) return -EINVAL;
     ssize_t offset = alloc(size, flags);
     return offset;
 }
@@ -53,6 +68,7 @@
 ssize_t SimpleBestFitAllocator::deallocate(size_t offset)
 {
     Locker::Autolock _l(mLock);
+    if (mHeapSize == 0) return -EINVAL;
     chunk_t const * const freed = dealloc(offset);
     if (freed) {
         return 0;
diff --git a/modules/gralloc/allocator.h b/modules/gralloc/allocator.h
index dfb06f6..6823982 100644
--- a/modules/gralloc/allocator.h
+++ b/modules/gralloc/allocator.h
@@ -95,12 +95,15 @@
 {
 public:
 
-                        SimpleBestFitAllocator(size_t size);
-    virtual             ~SimpleBestFitAllocator();
+    SimpleBestFitAllocator();
+    SimpleBestFitAllocator(size_t size);
+    ~SimpleBestFitAllocator();
 
-    virtual size_t      allocate(size_t size, uint32_t flags = 0);
-    virtual ssize_t     deallocate(size_t offset);
-    virtual size_t      size() const;
+    ssize_t     setSize(size_t size);
+
+    ssize_t     allocate(size_t size, uint32_t flags = 0);
+    ssize_t     deallocate(size_t offset);
+    size_t      size() const;
 
 private:
     struct chunk_t {
@@ -123,5 +126,4 @@
     size_t              mHeapSize;
 };
 
-
 #endif /* GRALLOC_ALLOCATOR_H_ */
diff --git a/modules/gralloc/framebuffer.cpp b/modules/gralloc/framebuffer.cpp
index 0aaa9da..5f97032 100644
--- a/modules/gralloc/framebuffer.cpp
+++ b/modules/gralloc/framebuffer.cpp
@@ -41,9 +41,6 @@
 
 /*****************************************************************************/
 
-// should be a build option
-#define SUPPORTS_UPDATE_ON_DEMAND   1
-
 // numbers of buffers for page flipping
 #define NUM_BUFFERS 2
 
@@ -334,7 +331,6 @@
 {
     int status = -EINVAL;
     if (!strcmp(name, GRALLOC_HARDWARE_FB0)) {
-
         alloc_device_t* gralloc_device;
         status = gralloc_open(module, &gralloc_device);
         if (status < 0)
@@ -367,15 +363,6 @@
             const_cast<float&>(dev->device.fps) = m->fps;
             const_cast<int&>(dev->device.minSwapInterval) = 1;
             const_cast<int&>(dev->device.maxSwapInterval) = 1;
-
-#if SUPPORTS_UPDATE_ON_DEMAND
-            if (m->finfo.reserved[0] == 0x5444 && 
-                    m->finfo.reserved[1] == 0x5055) {
-                dev->device.setUpdateRect = fb_setUpdateRect;
-                LOGD("UPDATE_ON_DEMAND supported");
-            }
-#endif
-
             *device = &dev->device.common;
         }
     }
diff --git a/modules/gralloc/gralloc.cpp b/modules/gralloc/gralloc.cpp
index 8c496dc..4eb9317 100644
--- a/modules/gralloc/gralloc.cpp
+++ b/modules/gralloc/gralloc.cpp
@@ -43,6 +43,10 @@
 
 /*****************************************************************************/
 
+static SimpleBestFitAllocator sAllocator;
+
+/*****************************************************************************/
+
 struct gralloc_context_t {
     alloc_device_t  device;
     /* our private data here */
@@ -172,14 +176,24 @@
     return err;
 }
 
-static SimpleBestFitAllocator sAllocator(8*1024*1024);
-
 static int init_pmem_area_locked(private_module_t* m)
 {
     int err = 0;
+#if HAVE_ANDROID_OS // should probably define HAVE_PMEM somewhere
     int master_fd = open("/dev/pmem", O_RDWR, 0);
     if (master_fd >= 0) {
-        void* base = mmap(0, sAllocator.size(),
+        
+        size_t size;
+        pmem_region region;
+        if (ioctl(master_fd, PMEM_GET_TOTAL_SIZE, &region) < 0) {
+            LOGE("PMEM_GET_TOTAL_SIZE failed, limp mode");
+            size = 8<<20;   // 8 MiB
+        } else {
+            size = region.len;
+        }
+        sAllocator.setSize(size);
+
+        void* base = mmap(0, size, 
                 PROT_READ|PROT_WRITE, MAP_SHARED, master_fd, 0);
         if (base == MAP_FAILED) {
             err = -errno;
@@ -193,6 +207,9 @@
         err = -errno;
     }
     return err;
+#else
+    return -1;
+#endif
 }
 
 static int init_pmem_area(private_module_t* m)
