diff --git a/pjlib/src/pj/pool.c b/pjlib/src/pj/pool.c
index 22df21c..800b86c 100644
--- a/pjlib/src/pj/pool.c
+++ b/pjlib/src/pj/pool.c
@@ -31,7 +31,8 @@
 #  include <pj/pool_i.h>
 #endif
 
-#define LOG(expr)   PJ_LOG(6,expr)
+#define LOG(expr)   			PJ_LOG(6,expr)
+#define ALIGN_PTR(PTR,ALIGNMENT)	(PTR + (-(long)(PTR) & (ALIGNMENT-1)))
 
 PJ_DEF_DATA(int) PJ_NO_MEMORY_EXCEPTION;
 
@@ -71,9 +72,7 @@
     block->end = ((unsigned char*)block) + size;
 
     /* Set the start pointer, aligning it as needed */
-    block->cur = (unsigned char*)
-                 (((unsigned long)block->buf + PJ_POOL_ALIGNMENT - 1) & 
-                  ~(PJ_POOL_ALIGNMENT - 1));
+    block->cur = ALIGN_PTR(block->buf, PJ_POOL_ALIGNMENT);
 
     /* Insert in the front of the list. */
     pj_list_insert_after(&pool->block_list, block);
@@ -216,9 +215,7 @@
     block->end = buffer + initial_size;
 
     /* Set the start pointer, aligning it as needed */
-    block->cur = (unsigned char*)
-                 (((unsigned long)block->buf + PJ_POOL_ALIGNMENT - 1) &
-                  ~(PJ_POOL_ALIGNMENT - 1));
+    block->cur = ALIGN_PTR(block->buf, PJ_POOL_ALIGNMENT);
 
     pj_list_insert_after(&pool->block_list, block);
 
@@ -262,9 +259,7 @@
     block = pool->block_list.next;
 
     /* Set the start pointer, aligning it as needed */
-    block->cur = (unsigned char*)
-                 (((unsigned long)block->buf + PJ_POOL_ALIGNMENT - 1) &
-                  ~(PJ_POOL_ALIGNMENT - 1));
+    block->cur = ALIGN_PTR(block->buf, PJ_POOL_ALIGNMENT);
 
     pool->capacity = block->end - (unsigned char*)pool;
 }
diff --git a/pjlib/src/pjlib-test/pool.c b/pjlib/src/pjlib-test/pool.c
index 930e552..21b2205 100644
--- a/pjlib/src/pjlib-test/pool.c
+++ b/pjlib/src/pjlib-test/pool.c
@@ -84,51 +84,41 @@
 {
     pj_pool_t *pool;
     void *ptr;
+    enum { MEMSIZE = 64, LOOP = 100 };
+    unsigned i;
 
     PJ_LOG(3,("test", "...alignment test"));
 
-    pool = pj_pool_create(mem, NULL, PJ_POOL_SIZE+64, 64, NULL);
+    pool = pj_pool_create(mem, NULL, PJ_POOL_SIZE+MEMSIZE, MEMSIZE, NULL);
     if (!pool)
 	return -300;
 
 #define IS_ALIGNED(p)	((((unsigned long)p) & (PJ_POOL_ALIGNMENT-1)) == 0)
 
-    /* Test first allocation */
-    ptr = pj_pool_alloc(pool, 1);
-    if (!IS_ALIGNED(ptr)) {
-	pj_pool_release(pool);
-	return -310;
-    }
+    for (i=0; i<LOOP; ++i) {
+	/* Test first allocation */
+	ptr = pj_pool_alloc(pool, 1);
+	if (!IS_ALIGNED(ptr)) {
+	    pj_pool_release(pool);
+	    return -310;
+	}
 
-    /* Test subsequent allocation */
-    ptr = pj_pool_alloc(pool, 1);
-    if (!IS_ALIGNED(ptr)) {
-	pj_pool_release(pool);
-	return -320;
-    }
+	/* Test subsequent allocation */
+	ptr = pj_pool_alloc(pool, 1);
+	if (!IS_ALIGNED(ptr)) {
+	    pj_pool_release(pool);
+	    return -320;
+	}
 
-    /* Test allocation after new block is created */
-    ptr = pj_pool_alloc(pool, 127);
-    if (!IS_ALIGNED(ptr)) {
-	pj_pool_release(pool);
-	return -330;
-    }
+	/* Test allocation after new block is created */
+	ptr = pj_pool_alloc(pool, MEMSIZE*2+1);
+	if (!IS_ALIGNED(ptr)) {
+	    pj_pool_release(pool);
+	    return -330;
+	}
 
-    /* Reset the pool */
-    pj_pool_reset(pool);
-
-    /* Retest first allocation */
-    ptr = pj_pool_alloc(pool, 1);
-    if (!IS_ALIGNED(ptr)) {
-	pj_pool_release(pool);
-	return -340;
-    }
-
-    /* Retest subsequent allocation */
-    ptr = pj_pool_alloc(pool, 1);
-    if (!IS_ALIGNED(ptr)) {
-	pj_pool_release(pool);
-	return -350;
+	/* Reset the pool */
+	pj_pool_reset(pool);
     }
 
     /* Done */
@@ -141,8 +131,10 @@
 static int pool_buf_alignment_test(void)
 {
     pj_pool_t *pool;
-    char buf[256];
+    char buf[512];
     void *ptr;
+    enum { LOOP = 100 };
+    unsigned i;
 
     PJ_LOG(3,("test", "...pool_buf alignment test"));
 
@@ -150,35 +142,23 @@
     if (!pool)
 	return -400;
 
-    /* Test first allocation */
-    ptr = pj_pool_alloc(pool, 1);
-    if (!IS_ALIGNED(ptr)) {
-	pj_pool_release(pool);
-	return -410;
-    }
+    for (i=0; i<LOOP; ++i) {
+	/* Test first allocation */
+	ptr = pj_pool_alloc(pool, 1);
+	if (!IS_ALIGNED(ptr)) {
+	    pj_pool_release(pool);
+	    return -410;
+	}
 
-    /* Test subsequent allocation */
-    ptr = pj_pool_alloc(pool, 1);
-    if (!IS_ALIGNED(ptr)) {
-	pj_pool_release(pool);
-	return -420;
-    }
+	/* Test subsequent allocation */
+	ptr = pj_pool_alloc(pool, 1);
+	if (!IS_ALIGNED(ptr)) {
+	    pj_pool_release(pool);
+	    return -420;
+	}
 
-    /* Reset the pool */
-    pj_pool_reset(pool);
-
-    /* Retest first allocation */
-    ptr = pj_pool_alloc(pool, 1);
-    if (!IS_ALIGNED(ptr)) {
-	pj_pool_release(pool);
-	return -430;
-    }
-
-    /* Retest subsequent allocation */
-    ptr = pj_pool_alloc(pool, 1);
-    if (!IS_ALIGNED(ptr)) {
-	pj_pool_release(pool);
-	return -440;
+	/* Reset the pool */
+	pj_pool_reset(pool);
     }
 
     /* Done */
