diff --git a/client/proxmark3.c b/client/proxmark3.c
index e6f239329..461a30c30 100644
--- a/client/proxmark3.c
+++ b/client/proxmark3.c
@@ -372,11 +372,7 @@ int main(int argc, char* argv[]) {
 #else
 	main_loop(script_cmds_file, usb_present);
 #endif	
-
-	// Clean up the port
-	if (usb_present)
-		uart_close(sp);
-  
+ 
 	// clean up mutex
 	pthread_mutex_destroy(&print_lock);
 	
diff --git a/uart/uart_posix.c b/uart/uart_posix.c
index dcf5d4bd4..11ded0dc5 100644
--- a/uart/uart_posix.c
+++ b/uart/uart_posix.c
@@ -112,7 +112,7 @@ serial_port uart_open(const char* pcPortName)
   sp->tiNew.c_cc[VTIME] = 0;
   
   // Try to set the new terminal info struct
-  if(tcsetattr(sp->fd,TCSANOW,&sp->tiNew) == -1) {
+  if(tcsetattr(sp->fd, TCSANOW, &sp->tiNew) == -1) {
     uart_close(sp);
     return INVALID_SERIAL_PORT;
   }
@@ -128,9 +128,13 @@ serial_port uart_open(const char* pcPortName)
 }
 
 void uart_close(const serial_port sp) {
+  if (!sp) return; 
+  if (sp == INVALID_SERIAL_PORT) return;
+  if (sp == CLAIMED_SERIAL_PORT) return;
+
   serial_port_unix* spu = (serial_port_unix*)sp;
-  tcflush(spu->fd,TCIOFLUSH);
-  tcsetattr(spu->fd,TCSANOW,&(spu->tiOld));
+  tcflush(spu->fd, TCIOFLUSH);
+  tcsetattr(spu->fd, TCSANOW, &(spu->tiOld));
   struct flock fl;
   fl.l_type   = F_UNLCK;
   fl.l_whence = SEEK_SET;
diff --git a/uart/uart_win32.c b/uart/uart_win32.c
index 0927a427d..d8e41cfa4 100644
--- a/uart/uart_win32.c
+++ b/uart/uart_win32.c
@@ -69,7 +69,7 @@ serial_port uart_open(const char* pcPortName) {
   sp->hPort = CreateFileA(acPortName, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
   if (sp->hPort == INVALID_HANDLE_VALUE) {
     uart_close(sp);
-    return INVALID_SERIAL_PORT;
+	return INVALID_SERIAL_PORT;
   }
   
   // Prepare the device control
@@ -107,7 +107,9 @@ serial_port uart_open(const char* pcPortName) {
 }
 
 void uart_close(const serial_port sp) {
-	if (!sp) return;
+  if (!sp) return; 
+  if (sp == INVALID_SERIAL_PORT) return;
+  if (sp == CLAIMED_SERIAL_PORT) return;
 	if (((serial_port_windows*)sp)->hPort != NULL )
 		CloseHandle(((serial_port_windows*)sp)->hPort);
 	free(sp);