diff --git a/udpc_dialog.c b/udpc_dialog.c
index b23877e..e49f6f7 100644
--- a/udpc_dialog.c
+++ b/udpc_dialog.c
@@ -38,6 +38,8 @@ struct configDesc desc[]= {
     offsetof(struct config,netModule), -1},
   { "netmodparm", TYPE_STRING,	MODPARAMSIZE,
     offsetof(struct config, netParam),offsetof(struct config, netParamIsSet)},
+  { "defNic", TYPE_STRING,	IFNAMESIZE,
+    offsetof(struct config, defNic), -1},
 
   { "enableDiskmodule", TYPE_BOOLEAN,	-1, offsetof(struct config, enableDiskmodule), -1 },
 
@@ -465,7 +467,7 @@ int main(int argc, char **argv)
 		base, compr[udpc_config.modeIdx * 3 + udpc_config.comprIdx],
 		udpc_config.disk,
 		udpc_config.port ? udpc_config.port : 9000,
-		iface == NULL ? defaultIface : iface,
+		iface == NULL ? getInterface() : iface,
 		udpc_config.udpcParam);
       systemf(1, "/%s.post %d",base, r);
       systemf(1, "/post %d", r);
diff --git a/udpc_dialog.h b/udpc_dialog.h
index cb283de..6e4a0ca 100644
--- a/udpc_dialog.h
+++ b/udpc_dialog.h
@@ -73,6 +73,7 @@ int udpc_configureUdpcast(int forceManual, int step);
 #define KMAPSIZE 10
 #define MODSIZE 20
 #define MODPARAMSIZE 60
+#define IFNAMESIZE 12
 #define DISKNAMESIZE 60
 #define MODESIZE 4
 #define COMPRSIZE 5
@@ -89,6 +90,7 @@ extern struct config {
   char netModule[MODSIZE];	/* Name of network module */
   char netParam[MODPARAMSIZE];	/* Parameter of network module */
   int netParamIsSet;	/* Has the network param been set? */
+  char defNic[IFNAMESIZE]; /* Default interface name */
 
   int enableDiskmodule;		/* Should we enable a disk module? */
   char diskModule[MODSIZE];	/* Name of disk module */
@@ -139,6 +141,8 @@ char *nt_strncpy(char *dest, const char *src, size_t n);
 
 int udpc_countLines(const char *path);
 
+const char* getInterface(void);
+
 extern const char defaultIface[];
 extern char *iface;
 
diff --git a/udpc_netconfig.c b/udpc_netconfig.c
index bdecaf5..b43ae65 100644
--- a/udpc_netconfig.c
+++ b/udpc_netconfig.c
@@ -48,6 +48,16 @@
  * =============================================================== */
 static const char *title="IP config";
 
+const char* getInterface(void){
+ 	if(udpc_config.defNic[0] =='\0' ){
+ 		 return defaultIface;			
+ 	}else{
+		return udpc_config.defNic;
+       }
+}
+ 
+ 
+
 /**
  * Read DHCP config set by PXE loader
  */
@@ -234,7 +244,8 @@ static int readIpMacFiles(void)
   if(ipMacRead)
     return 0;
 
-  hw = udpc_getMac(defaultIface);
+   hw = udpc_getMac(getInterface());
+
   if(hw < 0)
     return -1;
 
@@ -307,7 +318,8 @@ static int listNetInterfaces(void) {
 	       "Could not make socket for listing network interfaces (%s)",
 	       strerror(errno));
     dialog_clear();
-    return dhcp(defaultIface);
+
+    return dhcp(getInterface());
   }
 
   ifc.ifc_len = sizeof(ibuf);
@@ -320,7 +332,9 @@ static int listNetInterfaces(void) {
 	       strerror(errno));
     dialog_clear();
     close(sock);
-    return dhcp(defaultIface);
+
+    return dhcp(getInterface());
+
   }
   close(sock);
 
@@ -428,7 +442,8 @@ static int listNetInterfaces(void) {
       }
     }
     if(!found) {
-      r = dhcp(defaultIface);
+       return dhcp(getInterface());
+
     }
     closedir(f);
   }
@@ -488,7 +503,8 @@ int udpc_configureNetSettings(int forceManual, int step)
 	strcpy(ip, inet_ntoa(udpc_config.ip));
 	strcpy(mask, inet_ntoa(udpc_config.netmask));
 	strcpy(bcast, inet_ntoa(broadcast));
-
+	
+	ifconfig_cmd[1] = getInterface();
 	if(udpc_spawn(-1, -1, ifconfig_cmd) == 0) {	
 	  return 0;
 	}
diff --git a/udpc_netdriver.c b/udpc_netdriver.c
index c24dec0..5b018c3 100644
--- a/udpc_netdriver.c
+++ b/udpc_netdriver.c
@@ -21,8 +21,8 @@ static int udpc_probecards(void)
 }
 
 static int net_isReady(void) {
-  /* we have a mac address ==> ok */
-  return (udpc_getMac(defaultIface) != -1);  
+  /* we have a mac address ==> ok */  
+  return (udpc_getMac(getInterface()) != -1);
 }
 
 static modules_t netModules = {
