diff --git a/pjlib/include/pj/pool_alt.h b/pjlib/include/pj/pool_alt.h
index 9091b85..fb92315 100644
--- a/pjlib/include/pj/pool_alt.h
+++ b/pjlib/include/pj/pool_alt.h
@@ -22,9 +22,6 @@
 #define __PJ_POOL_H__
 
 
-typedef struct pj_pool_t pj_pool_t;
-
-
 /**
  * The type for function to receive callback from the pool when it is unable
  * to allocate memory. The elegant way to handle this condition is to throw
@@ -33,6 +30,25 @@
  */
 typedef void pj_pool_callback(pj_pool_t *pool, pj_size_t size);
 
+struct pj_pool_mem
+{
+    struct pj_pool_mem *next;
+
+    /* data follows immediately */
+};
+
+
+typedef struct pj_pool_t
+{
+    struct pj_pool_mem *first_mem;
+    pj_pool_factory    *factory;
+    char	        obj_name[32];
+    pj_size_t		used_size;
+    pj_pool_callback   *cb;
+} pj_pool_t;
+
+
+
 /**
  * This constant denotes the exception number that will be thrown by default
  * memory factory policy when memory allocation fails.
@@ -105,8 +121,54 @@
 				  pj_pool_t *pool, pj_size_t sz);
 
 
+#define PJ_POOL_ZALLOC_T(pool,type) \
+	    ((type*)pj_pool_zalloc(pool, sizeof(type)))
+#define PJ_POOL_ALLOC_T(pool,type) \
+	    ((type*)pj_pool_alloc(pool, sizeof(type)))
+#ifndef PJ_POOL_ALIGNMENT
+#   define PJ_POOL_ALIGNMENT    4
+#endif
+
+/**
+ * This structure declares pool factory interface.
+ */
+typedef struct pj_pool_factory_policy
+{
+    /**
+     * Allocate memory block (for use by pool). This function is called
+     * by memory pool to allocate memory block.
+     * 
+     * @param factory	Pool factory.
+     * @param size	The size of memory block to allocate.
+     *
+     * @return		Memory block.
+     */
+    void* (*block_alloc)(pj_pool_factory *factory, pj_size_t size);
+
+    /**
+     * Free memory block.
+     *
+     * @param factory	Pool factory.
+     * @param mem	Memory block previously allocated by block_alloc().
+     * @param size	The size of memory block.
+     */
+    void (*block_free)(pj_pool_factory *factory, void *mem, pj_size_t size);
+
+    /**
+     * Default callback to be called when memory allocation fails.
+     */
+    pj_pool_callback *callback;
+
+    /**
+     * Option flags.
+     */
+    unsigned flags;
+
+} pj_pool_factory_policy;
+
 typedef struct pj_pool_factory
 {
+    pj_pool_factory_policy policy;
     int dummy;
 } pj_pool_factory;
 
@@ -120,6 +182,5 @@
 #define pj_caching_pool_destroy(cp)
 #define pj_pool_factory_dump(pf, detail)
 
-
 #endif	/* __PJ_POOL_ALT_H__ */
 
diff --git a/pjlib/src/pj/pool_buf.c b/pjlib/src/pj/pool_buf.c
index f3c095d..b123e06 100644
--- a/pjlib/src/pj/pool_buf.c
+++ b/pjlib/src/pj/pool_buf.c
@@ -80,6 +80,7 @@
 					 void *buf,
 					 pj_size_t size)
 {
+#if PJ_HAS_POOL_ALT_API == 0
     struct creation_param param;
     long align_diff;
 
@@ -105,5 +106,9 @@
 
     return pj_pool_create_int(&stack_based_factory, name, size, 0, 
 			      pj_pool_factory_default_policy.callback);
+#else
+    PJ_UNUSED_ARG(buf);
+    return pj_pool_create(NULL, name, size, size, NULL);
+#endif
 }
 
diff --git a/pjlib/src/pj/pool_dbg.c b/pjlib/src/pj/pool_dbg.c
index 71dd564..1cc5bcc 100644
--- a/pjlib/src/pj/pool_dbg.c
+++ b/pjlib/src/pj/pool_dbg.c
@@ -19,7 +19,7 @@
 #include <pj/pool.h>
 #include <pj/string.h>
 
-#if PJ_POOL_DEBUG
+#if PJ_HAS_POOL_ALT_API
 
 #if PJ_HAS_MALLOC_H
 #   include <malloc.h>
@@ -41,25 +41,15 @@
 //#undef TRACE_
 
 
-struct pj_pool_mem
-{
-    struct pj_pool_mem *next;
-
-    /* data follows immediately */
-};
-
-
-struct pj_pool_t
-{
-    struct pj_pool_mem *first_mem;
-    pj_size_t		used_size;
-    pj_pool_callback   *cb;
-};
-
 
 int PJ_NO_MEMORY_EXCEPTION;
 
 
+PJ_DEF(int) pj_NO_MEMORY_EXCEPTION()
+{
+    return PJ_NO_MEMORY_EXCEPTION;
+}
+
 /* Create pool */
 PJ_DEF(pj_pool_t*) pj_pool_create_imp( const char *file, int line,
 				       void *factory,
@@ -73,7 +63,6 @@
     PJ_UNUSED_ARG(file);
     PJ_UNUSED_ARG(line);
     PJ_UNUSED_ARG(factory);
-    PJ_UNUSED_ARG(name);
     PJ_UNUSED_ARG(initial_size);
     PJ_UNUSED_ARG(increment_size);
 
@@ -81,6 +70,14 @@
     if (!pool)
 	return NULL;
 
+    if (name) {
+	pj_ansi_strncpy(pool->obj_name, name, sizeof(pool->obj_name));
+	pool->obj_name[sizeof(pool->obj_name)-1] = '\0';
+    } else {
+	strcpy(pool->obj_name, "altpool");
+    }
+
+    pool->factory = NULL;
     pool->first_mem = NULL;
     pool->used_size = 0;
     pool->cb = callback;
@@ -184,8 +181,9 @@
 PJ_DEF(void*) pj_pool_zalloc_imp( const char *file, int line, 
 				  pj_pool_t *pool, pj_size_t sz)
 {
-    return pj_pool_calloc_imp(file, line, pool, 1, sz);
+    return pj_pool_calloc_imp(file, line, pool, 1, sz); 
 }
 
 
-#endif	/* PJ_POOL_DEBUG */
+
+#endif	/* PJ_HAS_POOL_ALT_API */
