diff --git a/ggsn/Makefile.am b/ggsn/Makefile.am
index 77aa013..0e99f50 100644
--- a/ggsn/Makefile.am
+++ b/ggsn/Makefile.am
@@ -6,5 +6,5 @@
 
 ggsn_LDADD = @LIBOBJS@
 
-ggsn_SOURCES = ggsn.c tun.c tun.h cmdline.c cmdline.h ippool.h ippool.c syserr.h syserr.c
+ggsn_SOURCES = ggsn.c tun.c tun.h cmdline.c cmdline.h ippool.h ippool.c syserr.h syserr.c lookup.c
 
diff --git a/ggsn/Makefile.in b/ggsn/Makefile.in
index 6b81c2b..de98cdd 100644
--- a/ggsn/Makefile.in
+++ b/ggsn/Makefile.in
@@ -98,7 +98,7 @@
 
 ggsn_LDADD = @LIBOBJS@
 
-ggsn_SOURCES = ggsn.c tun.c tun.h cmdline.c cmdline.h ippool.h ippool.c syserr.h syserr.c
+ggsn_SOURCES = ggsn.c tun.c tun.h cmdline.c cmdline.h ippool.h ippool.c syserr.h syserr.c lookup.c
 subdir = ggsn
 mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
 CONFIG_HEADER = $(top_builddir)/config.h
@@ -107,7 +107,7 @@
 PROGRAMS = $(bin_PROGRAMS)
 
 am_ggsn_OBJECTS = ggsn.$(OBJEXT) tun.$(OBJEXT) cmdline.$(OBJEXT) \
-	ippool.$(OBJEXT) syserr.$(OBJEXT)
+	ippool.$(OBJEXT) syserr.$(OBJEXT) lookup.$(OBJEXT)
 ggsn_OBJECTS = $(am_ggsn_OBJECTS)
 ggsn_DEPENDENCIES = @LIBOBJS@
 ggsn_LDFLAGS =
@@ -120,8 +120,8 @@
 am__depfiles_maybe = depfiles
 @AMDEP_TRUE@DEP_FILES = $(DEPDIR)/getopt.Po $(DEPDIR)/getopt1.Po \
 @AMDEP_TRUE@	./$(DEPDIR)/cmdline.Po ./$(DEPDIR)/ggsn.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/ippool.Po ./$(DEPDIR)/syserr.Po \
-@AMDEP_TRUE@	./$(DEPDIR)/tun.Po
+@AMDEP_TRUE@	./$(DEPDIR)/ippool.Po ./$(DEPDIR)/lookup.Po \
+@AMDEP_TRUE@	./$(DEPDIR)/syserr.Po ./$(DEPDIR)/tun.Po
 COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
 	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
 LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) \
@@ -186,6 +186,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmdline.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ggsn.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ippool.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lookup.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/syserr.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tun.Po@am__quote@
 
diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c
index 08acab7..ca6a5cc 100644
--- a/ggsn/ggsn.c
+++ b/ggsn/ggsn.c
@@ -160,7 +160,7 @@
     addr.s_addr = 0; /* Request dynamic */
   }
 
-  if (ippool_newip(ippool, &member, &addr)) {
+  if (ippool_newip(ippool, &member, &addr, 0)) {
     gtp_create_context_resp(gsn, pdp, GTPCAUSE_NO_RESOURCES);
     return 0; /* Allready in use, or no more available */
   }
diff --git a/ggsn/ippool.c b/ggsn/ippool.c
index efd927e..35b14a3 100644
--- a/ggsn/ippool.c
+++ b/ggsn/ippool.c
@@ -1,7 +1,7 @@
-/* 
+/*
  * IP address pool functions.
  * Copyright (C) 2003, 2004 Mondru AB.
- * 
+ *
  * The contents of this file may be used under the terms of the GNU
  * General Public License Version 2, provided that the above copyright
  * notice and this permission notice is included in all copies or
@@ -9,12 +9,6 @@
  * 
  */
 
-#include "../config.h"
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
 #include <sys/types.h>
 #include <netinet/in.h> /* in_addr */
 #include <stdlib.h>     /* calloc */
@@ -23,78 +17,9 @@
 #include <string.h>
 #include <sys/socket.h>
 #include <arpa/inet.h>
-
 #include "syserr.h"
 #include "ippool.h"
-
-/**
- * lookup()
- * Generates a 32 bit hash.
- * Based on public domain code by Bob Jenkins
- * It should be one of the best hash functions around in terms of both
- * statistical properties and speed. It is NOT recommended for cryptographic
- * purposes.
- **/
-unsigned long int static lookup( k, length, level)
-register unsigned char *k;         /* the key */
-register unsigned long int length; /* the length of the key */
-register unsigned long int level; /* the previous hash, or an arbitrary value*/
-{
-
-#define mix(a,b,c) \
-{ \
-  a -= b; a -= c; a ^= (c>>13); \
-  b -= c; b -= a; b ^= (a<<8); \
-  c -= a; c -= b; c ^= (b>>13); \
-  a -= b; a -= c; a ^= (c>>12);  \
-  b -= c; b -= a; b ^= (a<<16); \
-  c -= a; c -= b; c ^= (b>>5); \
-  a -= b; a -= c; a ^= (c>>3);  \
-  b -= c; b -= a; b ^= (a<<10); \
-  c -= a; c -= b; c ^= (b>>15); \
-}
-
-  typedef  unsigned long  int  ub4;   /* unsigned 4-byte quantities */
-  typedef  unsigned       char ub1;   /* unsigned 1-byte quantities */
-  register unsigned long int a,b,c,len;
-  
-  /* Set up the internal state */
-  len = length;
-  a = b = 0x9e3779b9;  /* the golden ratio; an arbitrary value */
-  c = level;           /* the previous hash value */
-  
-  /*---------------------------------------- handle most of the key */
-  while (len >= 12)
-    {
-      a += (k[0] +((ub4)k[1]<<8) +((ub4)k[2]<<16) +((ub4)k[3]<<24));
-      b += (k[4] +((ub4)k[5]<<8) +((ub4)k[6]<<16) +((ub4)k[7]<<24));
-      c += (k[8] +((ub4)k[9]<<8) +((ub4)k[10]<<16)+((ub4)k[11]<<24));
-      mix(a,b,c);
-      k += 12; len -= 12;
-    }
-  
-  /*------------------------------------- handle the last 11 bytes */
-  c += length;
-  switch(len)              /* all the case statements fall through */
-    {
-    case 11: c+=((ub4)k[10]<<24);
-    case 10: c+=((ub4)k[9]<<16);
-    case 9 : c+=((ub4)k[8]<<8);
-      /* the first byte of c is reserved for the length */
-    case 8 : b+=((ub4)k[7]<<24);
-    case 7 : b+=((ub4)k[6]<<16);
-    case 6 : b+=((ub4)k[5]<<8);
-    case 5 : b+=k[4];
-    case 4 : a+=((ub4)k[3]<<24);
-    case 3 : a+=((ub4)k[2]<<16);
-    case 2 : a+=((ub4)k[1]<<8);
-    case 1 : a+=k[0];
-      /* case 0: nothing left to add */
-    }
-  mix(a,b,c);
-  /*-------------------------------------------- report the result */
-  return c;
-}
+#include "lookup.h"
 
 
 int ippool_printaddr(struct ippool_t *this) {
@@ -119,7 +44,6 @@
   return 0;
 }
 
-
 int ippool_hashadd(struct ippool_t *this, struct ippoolm_t *member) {
   uint32_t hash;
   struct ippoolm_t *p;
@@ -197,7 +121,7 @@
     mask->s_addr = 0xffffffff;
     break;
   case 5:
-    if (m1 < 0 || m1 > 32) {
+    if (m1 > 32) {
       sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Invalid mask");
       return -1; /* Invalid mask */
     }
@@ -350,7 +274,7 @@
     (*this)->lastdyn = &((*this)->member[i]);
     (*this)->member[i].next = NULL; /* Redundant */
 
-    ippool_hashadd(*this, &(*this)->member[i]);
+    ( void)ippool_hashadd(*this, &(*this)->member[i]);
   }
 
   (*this)->firststat = NULL;
@@ -372,10 +296,12 @@
     (*this)->member[i].next = NULL; /* Redundant */
   }
 
-  if (0) ippool_printaddr(*this);
+  if (0) (void)ippool_printaddr(*this);
   return 0;
 }
 
+
+
 /* Delete existing address pool */
 int ippool_free(struct ippool_t *this) {
   free(this->hash);
@@ -394,12 +320,12 @@
   hash = ippool_hash4(addr) & this->hashmask;
   for (p = this->hash[hash]; p; p = p->nexthash) {
     if ((p->addr.s_addr == addr->s_addr) && (p->inuse)) {
-      *member = p;
+      if (member) *member = p;
       return 0;
     }
   }
-  *member = NULL;
-  sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Address could not be found");
+  if (member) *member = NULL;
+  /*sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Address could not be found");*/
   return -1;
 }
 
@@ -411,7 +337,7 @@
  * address space.
 **/
 int ippool_newip(struct ippool_t *this, struct ippoolm_t **member,
-		 struct in_addr *addr) {
+		 struct in_addr *addr, int statip) {
   struct ippoolm_t *p;
   struct ippoolm_t *p2 = NULL;
   uint32_t hash;
@@ -428,10 +354,10 @@
    *
    */
 
-  if (0) ippool_printaddr(this);
+  if (0) (void)ippool_printaddr(this);
 
   /* First check to see if this type of address is allowed */
-  if ((addr) && (addr->s_addr)) { /* IP address given */
+  if ((addr) && (addr->s_addr) && statip) { /* IP address given */
     if (!this->allowstat) {
       sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Static IP address not allowed");
       return -1;
@@ -449,6 +375,7 @@
     }
   }
 
+  /* If IP address given try to find it in dynamic address pool */
   if ((addr) && (addr->s_addr)) { /* IP address given */
     /* Find in hash table */
     hash = ippool_hash4(addr) & this->hashmask;
@@ -459,7 +386,14 @@
       }
     }
   }
-  else { /* No ip address given */
+
+  /* If IP was already allocated we can not use it */
+  if ((!statip) && (p2) && (p2->inuse)) {
+    p2 = NULL; 
+  }
+
+  /* If not found yet and dynamic IP then allocate dynamic IP */
+  if ((!p2) && (!statip)) {
     if (!this ->firstdyn) {
       sys_err(LOG_ERR, __FILE__, __LINE__, 0, 
 	      "No more IP addresses available");
@@ -468,7 +402,7 @@
     else
       p2 = this ->firstdyn;
   }
-
+  
   if (p2) { /* Was allocated from dynamic address pool */
     if (p2->inuse) {
       sys_err(LOG_ERR, __FILE__, __LINE__, 0, 
@@ -490,15 +424,15 @@
     p2->inuse = 1; /* Dynamic address in use */
     
     *member = p2;
-    if (0) ippool_printaddr(this);
+    if (0) (void)ippool_printaddr(this);
     return 0; /* Success */
   }
 
   /* It was not possible to allocate from dynamic address pool */
   /* Try to allocate from static address space */
 
-  if ((addr) && (addr->s_addr)) { /* IP address given */
-    if (this->firststat) {
+  if ((addr) && (addr->s_addr) && (statip)) { /* IP address given */
+    if (!this->firststat) {
       sys_err(LOG_ERR, __FILE__, __LINE__, 0, 
 	      "No more IP addresses available");
       return -1; /* No more available */
@@ -517,12 +451,11 @@
       this->laststat = p2->prev;
     p2->next = NULL;
     p2->prev = NULL;
-    p2->inuse = 1; /* Static address in use */
-
+    p2->inuse = 2; /* Static address in use */
     memcpy(&p2->addr, addr, sizeof(addr));
     *member = p2;
-    ippool_hashadd(this, *member);
-    if (0) ippool_printaddr(this);
+    (void)ippool_hashadd(this, *member);
+    if (0) (void)ippool_printaddr(this);
     return 0; /* Success */
   }
 
@@ -534,7 +467,7 @@
 
 int ippool_freeip(struct ippool_t *this, struct ippoolm_t *member) {
   
-  if (0) ippool_printaddr(this);
+  if (0) (void)ippool_printaddr(this);
 
   if (!member->inuse) {
     sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Address not in use");
@@ -558,7 +491,7 @@
     
     member->inuse = 0;
     member->peer = NULL;
-    if (0) ippool_printaddr(this);
+    if (0) (void)ippool_printaddr(this);
     return 0;
   case 2: /* Allocated from static address space */
     if (ippool_hashdel(this, member))
@@ -577,7 +510,7 @@
     member->addr.s_addr = 0;
     member->peer = NULL;
     member->nexthash = NULL;
-    if (0) ippool_printaddr(this);
+    if (0) (void)ippool_printaddr(this);
     return 0;
   default: /* Should not happen */
     sys_err(LOG_ERR, __FILE__, __LINE__, 0, "Could not free IP address");
diff --git a/ggsn/ippool.h b/ggsn/ippool.h
index ddaa2de..fe9f90c 100644
--- a/ggsn/ippool.h
+++ b/ggsn/ippool.h
@@ -48,7 +48,7 @@
   int hashmask;                  /* Bitmask for calculating hash */
   struct ippoolm_t **hash;       /* Hashsize array of pointer to member */
   struct ippoolm_t *firstdyn;    /* Pointer to first free dynamic member */
-  struct ippoolm_t *lastdyn;     /* Pointer to last free dyanmic member */
+  struct ippoolm_t *lastdyn;     /* Pointer to last free dynamic member */
   struct ippoolm_t *firststat;   /* Pointer to first free static member */
   struct ippoolm_t *laststat;    /* Pointer to last free static member */
 };
@@ -86,7 +86,7 @@
 /* Get an IP address. If addr = 0.0.0.0 get a dynamic IP address. Otherwise
    check to see if the given address is available */
 extern int ippool_newip(struct ippool_t *this, struct ippoolm_t **member,
-			struct in_addr *addr);
+			struct in_addr *addr, int statip);
 
 /* Return a previously allocated IP address */
 extern int ippool_freeip(struct ippool_t *this, struct ippoolm_t *member);
