diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index 193796f..71a7b1b 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -3009,7 +3009,7 @@
 		break;
 	if (!isalpha(p[j]) && j >= cmdmods[i].minlen
 					&& (p == cmd || cmdmods[i].has_count))
-	    return j + (p - cmd);
+	    return j + (int)(p - cmd);
     }
     return 0;
 }
diff --git a/src/globals.h b/src/globals.h
index a77f14b..469801b 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -1263,7 +1263,7 @@
  * The value of the --windowid argument.
  * For embedding gvim inside another application.
  */
-EXTERN int	win_socket_id INIT(= 0);
+EXTERN long_u	win_socket_id INIT(= 0);
 #endif
 
 #if defined(FEAT_CLIENTSERVER) || defined(FEAT_EVAL)
diff --git a/src/if_cscope.c b/src/if_cscope.c
index e76b58d..b2d39cf 100644
--- a/src/if_cscope.c
+++ b/src/if_cscope.c
@@ -1400,7 +1400,7 @@
 	return NULL;
 
     /* Store length of eap->arg before it gets modified by strtok(). */
-    eap_arg_len = STRLEN(eap->arg);
+    eap_arg_len = (int)STRLEN(eap->arg);
 
     if ((stok = strtok((char *)(eap->arg), (const char *)" ")) == NULL)
 	return NULL;
diff --git a/src/main.c b/src/main.c
index 07390a9..2a02615 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1552,15 +1552,15 @@
 	else if (STRICMP(argv[i], "--socketid") == 0)
 #  endif
 	{
-	    unsigned int    id;
-	    int		    count;
+	    long_u	id;
+	    int		count;
 
 	    if (i == argc - 1)
 		mainerr_arg_missing((char_u *)argv[i]);
 	    if (STRNICMP(argv[i+1], "0x", 2) == 0)
-		count = sscanf(&(argv[i + 1][2]), "%x", &id);
+		count = sscanf(&(argv[i + 1][2]), SCANF_HEX_LONG_U, &id);
 	    else
-		count = sscanf(argv[i+1], "%u", &id);
+		count = sscanf(argv[i + 1], SCANF_DECIMAL_LONG_U, &id);
 	    if (count != 1)
 		mainerr(ME_INVALID_ARG, (char_u *)argv[i]);
 	    else
diff --git a/src/mark.c b/src/mark.c
index 2accbba..7428969 100644
--- a/src/mark.c
+++ b/src/mark.c
@@ -522,7 +522,7 @@
 	    int len;
 
 	    expand_env((char_u *)"~/", NameBuff, MAXPATHL);
-	    len = STRLEN(NameBuff);
+	    len = (int)STRLEN(NameBuff);
 	    vim_strncpy(NameBuff + len, fm->fname + 2, MAXPATHL - len - 1);
 	}
 	else
diff --git a/src/netbeans.c b/src/netbeans.c
index e3e3200..ed415a5 100644
--- a/src/netbeans.c
+++ b/src/netbeans.c
@@ -1216,7 +1216,7 @@
     int lastbyte = last;
 
     oldtext = ml_get(lnum);
-    oldlen = STRLEN(oldtext);
+    oldlen = (int)STRLEN(oldtext);
     if (first >= (colnr_T)oldlen || oldlen == 0)  /* just in case */
 	return;
     if (lastbyte >= oldlen)
@@ -1241,8 +1241,8 @@
     int len_first, len_other;
     char_u *p;
 
-    len_first = STRLEN(ml_get(first));
-    len_other = STRLEN(ml_get(other));
+    len_first = (int)STRLEN(ml_get(first));
+    len_other = (int)STRLEN(ml_get(other));
     p = alloc((unsigned)(len_first + len_other + 1));
     if (p != NULL)
     {
diff --git a/src/popupmnu.c b/src/popupmnu.c
index 4dd3a94..1d747a6 100644
--- a/src/popupmnu.c
+++ b/src/popupmnu.c
@@ -337,7 +337,7 @@
 
 				if (rt != NULL)
 				{
-				    len = STRLEN(rt);
+				    len = (int)STRLEN(rt);
 				    if (len > pum_width)
 				    {
 					for (j = pum_width; j < len; ++j)
diff --git a/src/version.c b/src/version.c
index 9e73bb9..b811919 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    283,
+/**/
     282,
 /**/
     281,
diff --git a/src/vim.h b/src/vim.h
index 6c2cde5..d93bec1 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -355,16 +355,19 @@
  * On Win64 longs are 32 bit and pointers 64 bit.
  * For printf() and scanf() we need to take care of long_u specifically. */
 #ifdef _WIN64
-typedef unsigned __int64 long_u;
-typedef		 __int64 long_i;
-# define SCANF_HEX_LONG_U  "%Ix"
-# define PRINTF_HEX_LONG_U "0x%Ix"
+typedef unsigned __int64        long_u;
+typedef		 __int64        long_i;
+# define SCANF_HEX_LONG_U       "%Ix"
+# define SCANF_DECIMAL_LONG_U   "%Iu"
+# define PRINTF_HEX_LONG_U      "0x%Ix"
 #else
-typedef unsigned long	long_u;
-typedef		 long	long_i;
-# define SCANF_HEX_LONG_U  "%lx"
-# define PRINTF_HEX_LONG_U "0x%lx"
+typedef unsigned long	        long_u;
+typedef		 long	        long_i;
+# define SCANF_HEX_LONG_U       "%lx"
+# define SCANF_DECIMAL_LONG_U   "%lu"
+# define PRINTF_HEX_LONG_U      "0x%lx"
 #endif
+#define PRINTF_DECIMAL_LONG_U SCANF_DECIMAL_LONG_U
 
 /*
  * The characters and attributes cached for the screen.
diff --git a/src/window.c b/src/window.c
index 74e3646..584b9a4 100644
--- a/src/window.c
+++ b/src/window.c
@@ -6303,7 +6303,7 @@
 	    cur = cur->next;
 	}
     }
-    if ((hlg_id = syn_namen2id(grp, STRLEN(grp))) == 0)
+    if ((hlg_id = syn_namen2id(grp, (int)STRLEN(grp))) == 0)
     {
 	EMSG2(_(e_nogroup), grp);
 	return -1;
