Index: globals-structtypes.h
===================================================================
--- globals-structtypes.h	(revision 3280)
+++ globals-structtypes.h	(working copy)
@@ -2147,6 +2147,7 @@
 
   /* Physical and Logical network interfaces */
 
+  pcap_if_t *allDevs;      /* all devices available for pcap_open */
   u_short numDevices;      /* total network interfaces */
   NtopInterface *device;   /* pointer to the network interfaces table */
 
Index: initialize.c
===================================================================
--- initialize.c	(revision 3280)
+++ initialize.c	(working copy)
@@ -1508,7 +1508,7 @@
  */
 void initDevices(char* devices) {
   char *tmpDev=NULL, *tmpDescr=NULL;
-  pcap_if_t *devpointer, *devpointer_original;
+  pcap_if_t *devpointer;
   char intNames[32][MAX_IF_NAME], intDescr[32][MAX_IF_NAME];
   int ifIdx = 0;
   int defaultIdx = -1;
@@ -1566,12 +1566,12 @@
 
   if(pcap_findalldevs(&devpointer, ebuf) < 0) {
     traceEvent(CONST_TRACE_ERROR, "pcap_findalldevs() call failed [%s]", ebuf);
-    traceEvent(CONST_TRACE_ERROR, "Have you instaled libpcap/winpcap properly?");
+    traceEvent(CONST_TRACE_ERROR, "Have you installed libpcap/winpcap properly?");
     return;
   } else {
     int i;
 
-    devpointer_original = devpointer;
+    myGlobals.allDevs = devpointer; /* save listhead for later use */
     for(i = 0; devpointer != 0; i++) {
       traceEvent(CONST_TRACE_NOISY, "Found interface [index=%d] '%s'", ifIdx, devpointer->name);
 
@@ -1617,8 +1617,6 @@
     }
   }
 
-  pcap_freealldevs(devpointer_original);
-
   if(devices != NULL) {
     /* User has specified devices in the parameter list */
     char *workDevices = strdup(devices), *strtokState;
Index: globals-core.c
===================================================================
--- globals-core.c	(revision 3280)
+++ globals-core.c	(working copy)
@@ -200,6 +200,8 @@
 
   /* NB: we can't init rrdPath here, because initGdbm hasn't been run */
 
+  /* list of available NICs */
+  myGlobals.allDevs = NULL;
   /* the table of enabled NICs */
   myGlobals.numDevices = 0;
   myGlobals.device = NULL;
Index: ntop.c
===================================================================
--- ntop.c	(revision 3280)
+++ ntop.c	(working copy)
@@ -833,6 +833,10 @@
     }
   }
 
+  if(myGlobals.allDevs != NULL) {
+    pcap_freealldevs(myGlobals.allDevs);
+  }
+
   if(myGlobals.device != NULL) {
     for(i=0; i<myGlobals.numDevices; i++) {
       if((myGlobals.device[i].pcapDispatchThreadId != 0) &&
Index: admin.c
===================================================================
--- admin.c	(revision 3280)
+++ admin.c	(working copy)
@@ -1491,14 +1491,14 @@
   switch (configScr) {
   case showPrefBasicPref:
     {
-      pcap_if_t *devpointer;
+      pcap_if_t *devpointer = myGlobals.allDevs;
       int i, rc;
       char ebuf[CONST_SIZE_PCAP_ERR_BUF];
 
       sendString("<TR><INPUT TYPE=HIDDEN NAME=BASIC_PREFS VALUE=1>"
 		 "<TD ALIGN=LEFT "DARK_BG">Capture Interfaces (-i)</TD><TD ALIGN=LEFT>\n");
 
-      if(((rc = pcap_findalldevs(&devpointer, ebuf)) >= 0) && (devpointer != NULL)) {
+      if(devpointer != NULL) {
 
 	for (i = 0; devpointer != 0; i++) {
 	  if(strcmp(devpointer->name, "any")) {
@@ -1513,16 +1513,11 @@
 	  devpointer = devpointer->next;
 	}
 
-	pcap_freealldevs(devpointer);
-
       } else {	
 	sendString("<INPUT TYPE=hidden name=\""NTOP_PREF_DEVICES"\" value=\"\">");
 #ifndef WIN32
-	if(myGlobals.userId == 0)
-	  traceEvent(CONST_TRACE_INFO, "pcap_findalldevs failed [rc=%d][%s]\n", rc, ebuf);
-	else
-	  sendString("<font color=red>You cannot set the capture interface: missing privileges.</font><br>"
-		     "You need to start ntop with super-user privileges [-u]");
+	sendString("<font color=red>You cannot set the capture interface: missing privileges.</font><br>"
+	     "You need to start ntop with super-user privileges [-u]");
 #endif
       }
       sendString("</TD></TR>\n");
