diff --git a/ggsn/ggsn.c b/ggsn/ggsn.c
index c0592c9..5611359 100644
--- a/ggsn/ggsn.c
+++ b/ggsn/ggsn.c
@@ -60,7 +60,7 @@
 int maxfd = 0;	                /* For select()            */
 
 struct in_addr listen_;
-struct in_addr net, mask;       /* Network interface       */
+struct in_addr netaddr, destaddr, net, mask;  /* Network interface       */
 struct in_addr dns1, dns2;      /* PCO DNS address         */
 char *ipup, *ipdown;            /* Filename of scripts     */
 int debug;                      /* Print debug output      */
@@ -184,7 +184,9 @@
   struct tun_packet_t *iph = (struct tun_packet_t*) pack;
   
   dst.s_addr = iph->dst;
-  
+
+  if (debug) printf("Received packet from tun!\n");
+
   if (ippool_getip(ippool, &ipm, &dst)) {
     if (debug) printf("Received packet with no destination!!!\n");
     return 0;
@@ -196,7 +198,7 @@
 }
 
 int encaps_tun(struct pdp_t *pdp, void *pack, unsigned len) {
-  /*  printf("encaps_tun. Packet received: forwarding to tun\n");*/
+  if (debug) printf("encaps_tun. Packet received: forwarding to tun\n");
   return tun_encaps((struct tun_t*) pdp->ipif, pack, len);
 }
 
@@ -231,18 +233,18 @@
     exit(1);
   if (args_info.debug_flag) {
     printf("listen: %s\n", args_info.listen_arg);
-    printf("conf: %s\n", args_info.conf_arg);
+    if (args_info.conf_arg) printf("conf: %s\n", args_info.conf_arg);
     printf("fg: %d\n", args_info.fg_flag);
     printf("debug: %d\n", args_info.debug_flag);
     printf("qos: %#08x\n", args_info.qos_arg);
-    printf("apn: %s\n", args_info.apn_arg);
-    printf("net: %s\n", args_info.net_arg);
-    printf("dynip: %s\n", args_info.dynip_arg);
-    printf("statip: %s\n", args_info.statip_arg);
-    printf("ipup: %s\n", args_info.ipup_arg);
-    printf("ipdown: %s\n", args_info.ipdown_arg);
-    printf("pidfile: %s\n", args_info.pidfile_arg);
-    printf("statedir: %s\n", args_info.statedir_arg);
+    if (args_info.apn_arg) printf("apn: %s\n", args_info.apn_arg);
+    if (args_info.net_arg) printf("net: %s\n", args_info.net_arg);
+    if (args_info.dynip_arg) printf("dynip: %s\n", args_info.dynip_arg);
+    if (args_info.statip_arg) printf("statip: %s\n", args_info.statip_arg);
+    if (args_info.ipup_arg) printf("ipup: %s\n", args_info.ipup_arg);
+    if (args_info.ipdown_arg) printf("ipdown: %s\n", args_info.ipdown_arg);
+    if (args_info.pidfile_arg) printf("pidfile: %s\n", args_info.pidfile_arg);
+    if (args_info.statedir_arg) printf("statedir: %s\n", args_info.statedir_arg);
     printf("timelimit: %d\n", args_info.timelimit_arg);
   }
 
@@ -257,14 +259,14 @@
     printf("fg: %d\n", args_info.fg_flag);
     printf("debug: %d\n", args_info.debug_flag);
     printf("qos: %#08x\n", args_info.qos_arg);
-    printf("apn: %s\n", args_info.apn_arg);
-    printf("net: %s\n", args_info.net_arg);
-    printf("dynip: %s\n", args_info.dynip_arg);
-    printf("statip: %s\n", args_info.statip_arg);
-    printf("ipup: %s\n", args_info.ipup_arg);
-    printf("ipdown: %s\n", args_info.ipdown_arg);
-    printf("pidfile: %s\n", args_info.pidfile_arg);
-    printf("statedir: %s\n", args_info.statedir_arg);
+    if (args_info.apn_arg) printf("apn: %s\n", args_info.apn_arg);
+    if (args_info.net_arg) printf("net: %s\n", args_info.net_arg);
+    if (args_info.dynip_arg) printf("dynip: %s\n", args_info.dynip_arg);
+    if (args_info.statip_arg) printf("statip: %s\n", args_info.statip_arg);
+    if (args_info.ipup_arg) printf("ipup: %s\n", args_info.ipup_arg);
+    if (args_info.ipdown_arg) printf("ipdown: %s\n", args_info.ipdown_arg);
+    if (args_info.pidfile_arg) printf("pidfile: %s\n", args_info.pidfile_arg);
+    if (args_info.statedir_arg) printf("statedir: %s\n", args_info.statedir_arg);
     printf("timelimit: %d\n", args_info.timelimit_arg);
   }
 
@@ -304,6 +306,8 @@
 	      "Invalid network address: %s!", args_info.net_arg);
       exit(1);
     }
+    netaddr.s_addr = htonl(ntohl(net.s_addr) + 1);
+    destaddr.s_addr = htonl(ntohl(net.s_addr) + 1);
   }
   else {
     sys_err(LOG_ERR, __FILE__, __LINE__, 0,
@@ -314,7 +318,7 @@
   /* dynip                                                        */
   if (!args_info.dynip_arg) {
     if (ippool_new(&ippool, args_info.net_arg, NULL, 1, 0,
-		   IPPOOL_NONETWORK | IPPOOL_NOBROADCAST)) {
+		   IPPOOL_NONETWORK | IPPOOL_NOGATEWAY | IPPOOL_NOBROADCAST)) {
       sys_err(LOG_ERR, __FILE__, __LINE__, 0,
 	      "Failed to allocate IP pool!");
       exit(1);
@@ -322,7 +326,7 @@
   }
   else {
     if (ippool_new(&ippool, args_info.dynip_arg, NULL, 1 ,0,
-		   IPPOOL_NONETWORK | IPPOOL_NOBROADCAST)) {
+		   IPPOOL_NONETWORK | IPPOOL_NOGATEWAY | IPPOOL_NOBROADCAST)) {
       sys_err(LOG_ERR, __FILE__, __LINE__, 0,
 	      "Failed to allocate IP pool!");
       exit(1);
@@ -450,16 +454,26 @@
 
 
   /* Create a tunnel interface */
+  if (debug) printf("Creating tun interface\n");
   if (tun_new((struct tun_t**) &tun)) {
     sys_err(LOG_ERR, __FILE__, __LINE__, 0,
 	    "Failed to create tun");
+    if (debug) printf("Failed to create tun\n");
     exit(1);
   }
 
-  tun_setaddr(tun, &net,  &net, &mask);
+  if (debug) printf("Setting tun IP address\n");
+  if (tun_setaddr(tun, &netaddr, &destaddr, &mask)) {
+    sys_err(LOG_ERR, __FILE__, __LINE__, 0,
+	    "Failed to set tun IP address");
+    if (debug) printf("Failed to set tun IP address\n");
+    exit(1);
+  }
+
+
   tun_set_cb_ind(tun, cb_tun_ind);
   if (tun->fd > maxfd) maxfd = tun->fd;
-
+  
   if (ipup) tun_runscript(tun, ipup);
 
   /******************************************************************/
