diff --git a/server/authoriz.cpp b/server/authoriz.cpp
index 1e53feb02..f59d23839 100755
--- a/server/authoriz.cpp
+++ b/server/authoriz.cpp
@@ -729,7 +729,7 @@ void TAuthorizationServer::ProcessUserLogin(wxString cmd, wxSocketBase& sock)
 		}
 		else
 		{
-			if (m_Users.GetCount() >= m_Dongle.MaxUsers())
+      if (m_Users.Find(sock, strUser) == NULL && m_Users.GetCount() >= m_Dongle.MaxUsers())
 	  		num = 0;
 			else
 			{
diff --git a/server/dongle.cpp b/server/dongle.cpp
index 5913918a1..1cac3e66b 100755
--- a/server/dongle.cpp
+++ b/server/dongle.cpp
@@ -299,7 +299,7 @@ unsigned long TEutronFooter::checksum(bool set)
   
   unsigned long cs = 0;
   for (unsigned short i = 0; i < len; i++, ptr++)
-    cs += *ptr | ~(*ptr << 8);
+    cs += *ptr | ~(short(*ptr << 8));
   if (set) _checksum = cs;
   return cs;  
 }
@@ -407,7 +407,7 @@ bool TDongle::already_programmed() const
       
     unsigned long cs = 0;
     for (byte* ptr = (byte*)_eprom; ptr < (byte*)&eh->_checksum; ptr++)
-      cs += *ptr | ~(*ptr << 8);
+      cs += *ptr | ~(short(*ptr << 8));
     if (eh->_checksum != cs)  
       return false;   // Malicious programming!
   }   
@@ -885,7 +885,7 @@ bool TDongle::burn_eutron()
   
   unsigned long cs = 0;
   for (unsigned char* ptr = (unsigned char*)_eprom; ptr < (unsigned char*)&eh->_checksum; ptr++)
-    cs += *ptr | ~(*ptr << 8);
+    cs += *ptr | ~(short(*ptr << 8));
   eh->_checksum = cs;
   
   const unsigned short otb = sizeof(TEutronHeader) / 2;