diff --git a/src/buffer.c b/src/buffer.c
index c836393..1b89330 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1233,12 +1233,13 @@
     if (action == DOBUF_SPLIT)	    /* split window first */
     {
 # ifdef FEAT_WINDOWS
-	/* jump to first window containing buf if one exists ("useopen") */
-	if (vim_strchr(p_swb, 'o') != NULL && buf_jump_open_win(buf))
+	/* If 'switchbuf' contains "useopen": jump to first window containing
+	 * "buf" if one exists */
+	if ((swb_flags & SWB_USEOPEN) && buf_jump_open_win(buf))
 	    return OK;
-	/* jump to first window in any tab page containing buf if one exists
-	 * ("usetab") */
-	if (vim_strchr(p_swb, 'a') != NULL && buf_jump_open_tab(buf))
+	/* If 'switchbuf' contians "usetab": jump to first window in any tab
+	 * page containing "buf" if one exists */
+	if ((swb_flags & SWB_USETAB) && buf_jump_open_tab(buf))
 	    return OK;
 	if (win_split(0, 0) == FAIL)
 # endif
@@ -1874,16 +1875,21 @@
 #ifdef FEAT_WINDOWS
     if (options & GETF_SWITCH)
     {
-	/* use existing open window for buffer if wanted */
-	if (vim_strchr(p_swb, 'o') != NULL)	/* useopen */
+	/* If 'switchbuf' contains "useopen": jump to first window containing
+	 * "buf" if one exists */
+	if (swb_flags & SWB_USEOPEN)
 	    wp = buf_jump_open_win(buf);
-	/* use existing open window in any tab page for buffer if wanted */
-	if (vim_strchr(p_swb, 'a') != NULL)	/* usetab */
+	/* If 'switchbuf' contians "usetab": jump to first window in any tab
+	 * page containing "buf" if one exists */
+	if (wp == NULL && (swb_flags & SWB_USETAB))
 	    wp = buf_jump_open_tab(buf);
-	/* split window if wanted ("split") */
-	if (wp == NULL && vim_strchr(p_swb, 'l') != NULL && !bufempty())
+	/* If 'switchbuf' contains "split" or "newtab" and the current buffer
+	 * isn't empty: open new window */
+	if (wp == NULL && (swb_flags & (SWB_SPLIT | SWB_NEWTAB)) && !bufempty())
 	{
-	    if (win_split(0, 0) == FAIL)
+	    if (swb_flags & SWB_NEWTAB)		/* Open in a new tab */
+		tabpage_new();
+	    else if (win_split(0, 0) == FAIL)	/* Open in a new window */
 		return FAIL;
 # ifdef FEAT_SCROLLBIND
 	    curwin->w_p_scb = FALSE;
@@ -4023,7 +4029,7 @@
 #endif
 		n = width - maxwidth + 1;
 	    p = s + n;
-	    mch_memmove(s + 1, p, STRLEN(p) + 1);
+	    STRMOVE(s + 1, p);
 	    *s = '<';
 
 	    /* Fill up for half a double-wide character. */
@@ -4054,7 +4060,7 @@
 	if (l < itemcnt)
 	{
 	    p = item[l].start + maxwidth - width;
-	    mch_memmove(p, item[l].start, STRLEN(item[l].start) + 1);
+	    STRMOVE(p, item[l].start);
 	    for (s = item[l].start; s < p; s++)
 		*s = fillchar;
 	    for (l++; l < itemcnt; l++)
@@ -4867,7 +4873,7 @@
 	     */
 	    for (e = s; *e != ':' && *e != NUL; ++e)
 		if (e[0] == '\\' && e[1] == ':')
-		    mch_memmove(e, e + 1, STRLEN(e));
+		    STRMOVE(e, e + 1);
 	    if (*e == NUL)
 		end = TRUE;
 
diff --git a/src/getchar.c b/src/getchar.c
index d1c70c9..ec5ae87 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -221,7 +221,7 @@
     char_u *
 get_inserted()
 {
-    return(get_buffcont(&redobuff, FALSE));
+    return get_buffcont(&redobuff, FALSE);
 }
 
 /*
@@ -2233,6 +2233,8 @@
 		    if ((mp == NULL || max_mlen >= mp_match_len)
 						     && keylen != KL_PART_MAP)
 		    {
+			int	save_keylen = keylen;
+
 			/*
 			 * When no matching mapping found or found a
 			 * non-matching mapping that matches at least what the
@@ -2252,6 +2254,12 @@
 			{
 			    keylen = check_termcode(max_mlen + 1, NULL, 0);
 
+			    /* If no termcode matched but 'pastetoggle'
+			     * matched partially it's like an incomplete key
+			     * sequence. */
+			    if (keylen == 0 && save_keylen == KL_PART_KEY)
+				keylen = KL_PART_KEY;
+
 			    /*
 			     * When getting a partial match, but the last
 			     * characters were not typed, don't wait for a
@@ -2293,7 +2301,9 @@
 #endif
 			      /* When there was a matching mapping and no
 			       * termcode could be replaced after another one,
-			       * use that mapping. */
+			       * use that mapping (loop around). If there was
+			       * no mapping use the character from the
+			       * typeahead buffer right here. */
 			      if (mp == NULL)
 			      {
 /*
@@ -2883,6 +2893,12 @@
 #endif
 	    )
     {
+
+#if defined(FEAT_NETBEANS_INTG)
+	/* Process the queued netbeans messages. */
+	netbeans_parse_messages();
+#endif
+
 	if (got_int || (script_char = getc(scriptin[curscript])) < 0)
 	{
 	    /* Reached EOF.
@@ -3847,7 +3863,7 @@
     while (++len <= 3)
 	msg_putchar(' ');
 
-    /* Get length of what we write */
+    /* Display the LHS.  Get length of what we write. */
     len = msg_outtrans_special(mp->m_keys, TRUE);
     do
     {
diff --git a/src/netbeans.c b/src/netbeans.c
index a06690c..d3fa4b0 100644
--- a/src/netbeans.c
+++ b/src/netbeans.c
@@ -25,7 +25,6 @@
 #if defined(FEAT_NETBEANS_INTG) || defined(PROTO)
 
 /* Note: when making changes here also adjust configure.in. */
-# include <fcntl.h>
 #ifdef WIN32
 # ifdef DEBUG
 #  include <tchar.h>	/* for _T definition for TRACEn macros */
@@ -327,6 +326,7 @@
 
     if ((sd = (NBSOCK)socket(AF_INET, SOCK_STREAM, 0)) == (NBSOCK)-1)
     {
+	nbdebug(("error in socket() in netbeans_connect()\n"));
 	PERROR("socket() in netbeans_connect()");
 	goto theend;
     }
@@ -344,6 +344,7 @@
 	    sd = mch_open(hostname, O_RDONLY, 0);
 	    goto theend;
 	}
+	nbdebug(("error in gethostbyname() in netbeans_connect()\n"));
 	PERROR("gethostbyname() in netbeans_connect()");
 	sd = -1;
 	goto theend;
@@ -352,7 +353,8 @@
 #else
     if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
     {
-	PERROR("socket()");
+	nbdebug(("error in socket() in netbeans_connect()\n"));
+	PERROR("socket() in netbeans_connect()");
 	goto theend;
     }
 
@@ -369,12 +371,14 @@
 #ifdef INET_SOCKETS
 	    if ((sd = (NBSOCK)socket(AF_INET, SOCK_STREAM, 0)) == (NBSOCK)-1)
 	    {
+		nbdebug(("socket()#2 in netbeans_connect()\n"));
 		PERROR("socket()#2 in netbeans_connect()");
 		goto theend;
 	    }
 #else
 	    if ((sd = socket(AF_UNIX, SOCK_STREAM, 0)) == -1)
 	    {
+		nbdebug(("socket()#2 in netbeans_connect()\n"));
 		PERROR("socket()#2 in netbeans_connect()");
 		goto theend;
 	    }
@@ -398,6 +402,7 @@
 		if (!success)
 		{
 		    /* Get here when the server can't be found. */
+		    nbdebug(("Cannot connect to Netbeans #2\n"));
 		    PERROR(_("Cannot connect to Netbeans #2"));
 		    getout(1);
 		}
@@ -406,6 +411,7 @@
 	}
 	else
 	{
+	    nbdebug(("Cannot connect to Netbeans\n"));
 	    PERROR(_("Cannot connect to Netbeans"));
 	    getout(1);
 	}
@@ -450,6 +456,8 @@
      */
     if (mch_stat(file, &st) == 0 && (st.st_mode & 0077) != 0)
     {
+	nbdebug(("Wrong access mode for NetBeans connection info file: \"%s\"\n",
+								       file));
 	EMSG2(_("E668: Wrong access mode for NetBeans connection info file: \"%s\""),
 									file);
 	return FAIL;
@@ -459,6 +467,7 @@
     fp = mch_fopen(file, "r");
     if (fp == NULL)
     {
+	nbdebug(("Cannot open NetBeans connection info file\n"));
 	PERROR("E660: Cannot open NetBeans connection info file");
 	return FAIL;
     }
@@ -621,13 +630,13 @@
 /*
  * While there's still a command in the work queue, parse and execute it.
  */
-    static void
-nb_parse_messages(void)
+    void
+netbeans_parse_messages(void)
 {
     char_u	*p;
     queue_T	*node;
 
-    while (head.next != &head)
+    while (head.next != NULL && head.next != &head)
     {
 	node = head.next;
 
@@ -640,7 +649,8 @@
 	     * prepend the text to that buffer and delete this one.  */
 	    if (node->next == &head)
 		return;
-	    p = alloc((unsigned)(STRLEN(node->buffer) + STRLEN(node->next->buffer) + 1));
+	    p = alloc((unsigned)(STRLEN(node->buffer)
+					   + STRLEN(node->next->buffer) + 1));
 	    if (p == NULL)
 		return;	    /* out of memory */
 	    STRCPY(p, node->buffer);
@@ -679,7 +689,7 @@
 	    else
 	    {
 		/* more follows, move to the start */
-		mch_memmove(node->buffer, p, STRLEN(p) + 1);
+		STRMOVE(node->buffer, p);
 	    }
 	}
     }
@@ -711,7 +721,9 @@
     static char_u	*buf = NULL;
     int			len;
     int			readlen = 0;
+#ifndef FEAT_GUI_GTK
     static int		level = 0;
+#endif
 
     if (sd < 0)
     {
@@ -719,7 +731,9 @@
 	return;
     }
 
+#ifndef FEAT_GUI_GTK
     ++level;  /* recursion guard; this will be called from the X event loop */
+#endif
 
     /* Allocate a buffer to read into. */
     if (buf == NULL)
@@ -749,15 +763,23 @@
 	netbeans_disconnect();
 	nbdebug(("messageFromNetbeans: Error in read() from socket\n"));
 	if (len < 0)
+	{
+	    nbdebug(("read from Netbeans socket\n"));
 	    PERROR(_("read from Netbeans socket"));
+	}
 	return; /* don't try to parse it */
     }
 
+#ifdef FEAT_GUI_GTK
+    if (gtk_main_level() > 0)
+	gtk_main_quit();
+#else
     /* Parse the messages, but avoid recursion. */
     if (level == 1)
-	nb_parse_messages();
+	netbeans_parse_messages();
 
     --level;
+#endif
 }
 
 /*
@@ -809,6 +831,7 @@
 
     if (*verb != ':')
     {
+	nbdebug(("    missing colon: %s\n", cmd));
 	EMSG2("E627: missing colon: %s", cmd);
 	return;
     }
@@ -832,6 +855,7 @@
 
     if (isfunc < 0)
     {
+	nbdebug(("    missing ! or / in: %s\n", cmd));
 	EMSG2("E628: missing ! or / in: %s", cmd);
 	return;
     }
@@ -1037,13 +1061,19 @@
     if (sd < 0)
     {
 	if (!did_error)
+	{
+	    nbdebug(("    %s(): write while not connected\n", fun));
 	    EMSG2("E630: %s(): write while not connected", fun);
+	}
 	did_error = TRUE;
     }
     else if (sock_write(sd, buf, (int)STRLEN(buf)) != (int)STRLEN(buf))
     {
 	if (!did_error)
+	{
+	    nbdebug(("    %s(): write failed\n", fun));
 	    EMSG2("E631: %s(): write failed", fun);
+	}
 	did_error = TRUE;
     }
     else
@@ -1229,7 +1259,7 @@
     if (newtext != NULL)
     {
 	mch_memmove(newtext, oldtext, first);
-	mch_memmove(newtext + first, oldtext + lastbyte + 1, STRLEN(oldtext + lastbyte + 1) + 1);
+	STRMOVE(newtext + first, oldtext + lastbyte + 1);
 	nbdebug(("    NEW LINE %d: %s\n", lnum, newtext));
 	ml_replace(lnum, newtext, FALSE);
     }
@@ -1329,8 +1359,8 @@
 #ifdef FEAT_SIGNS
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
-		nbdebug(("    null bufp in getAnno"));
-		EMSG("E652: null bufp in getAnno");
+		nbdebug(("    Invalid buffer identifier in getAnno\n"));
+		EMSG("E652: Invalid buffer identifier in getAnno");
 		retval = FAIL;
 	    }
 	    else
@@ -1352,8 +1382,8 @@
 
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
-		nbdebug(("    null bufp in getLength"));
-		EMSG("E632: null bufp in getLength");
+		nbdebug(("    invalid buffer identifier in getLength\n"));
+		EMSG("E632: invalid buffer identifier in getLength");
 		retval = FAIL;
 	    }
 	    else
@@ -1374,8 +1404,8 @@
 
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
-		nbdebug(("    null bufp in getText"));
-		EMSG("E633: null bufp in getText");
+		nbdebug(("    invalid buffer identifier in getText\n"));
+		EMSG("E633: invalid buffer identifier in getText");
 		retval = FAIL;
 	    }
 	    else
@@ -1438,8 +1468,8 @@
 
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
-		nbdebug(("    null bufp in remove"));
-		EMSG("E634: null bufp in remove");
+		nbdebug(("    invalid buffer identifier in remove\n"));
+		EMSG("E634: invalid buffer identifier in remove");
 		retval = FAIL;
 	    }
 	    else
@@ -1457,6 +1487,7 @@
 		pos = off2pos(buf->bufp, off);
 		if (!pos)
 		{
+		    nbdebug(("    !bad position\n"));
 		    nb_reply_text(cmdno, (char_u *)"!bad position");
 		    netbeansFireChanges = oldFire;
 		    netbeansSuppressNoLines = oldSuppress;
@@ -1467,6 +1498,7 @@
 		pos = off2pos(buf->bufp, off+count-1);
 		if (!pos)
 		{
+		    nbdebug(("    !bad count\n"));
 		    nb_reply_text(cmdno, (char_u *)"!bad count");
 		    netbeansFireChanges = oldFire;
 		    netbeansSuppressNoLines = oldSuppress;
@@ -1599,8 +1631,8 @@
 
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
-		nbdebug(("    null bufp in insert"));
-		EMSG("E635: null bufp in insert");
+		nbdebug(("    invalid buffer identifier in insert\n"));
+		EMSG("E635: invalid buffer identifier in insert");
 		retval = FAIL;
 	    }
 	    else if (args != NULL)
@@ -1756,7 +1788,8 @@
 	    /* Create a buffer without a name. */
 	    if (buf == NULL)
 	    {
-		EMSG("E636: null buf in create");
+		nbdebug(("    invalid buffer identifier in create\n"));
+		EMSG("E636: invalid buffer identifier in create");
 		return FAIL;
 	    }
 	    vim_free(buf->displayname);
@@ -1775,7 +1808,7 @@
 	{
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
-		nbdebug(("    null bufp in insertDone"));
+		nbdebug(("    invalid buffer identifier in insertDone\n"));
 	    }
 	    else
 	    {
@@ -1793,7 +1826,7 @@
 
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
-		nbdebug(("    null bufp in saveDone"));
+		nbdebug(("    invalid buffer identifier in saveDone\n"));
 	    }
 	    else
 		print_save_msg(buf, savedChars);
@@ -1803,7 +1836,8 @@
 	{
 	    if (buf == NULL)
 	    {
-		EMSG("E637: null buf in startDocumentListen");
+		nbdebug(("    invalid buffer identifier in startDocumentListen\n"));
+		EMSG("E637: invalid buffer identifier in startDocumentListen");
 		return FAIL;
 	    }
 	    buf->fireChanges = 1;
@@ -1813,15 +1847,19 @@
 	{
 	    if (buf == NULL)
 	    {
-		EMSG("E638: null buf in stopDocumentListen");
+		nbdebug(("    invalid buffer identifier in stopDocumentListen\n"));
+		EMSG("E638: invalid buffer identifier in stopDocumentListen");
 		return FAIL;
 	    }
 	    buf->fireChanges = 0;
 	    if (buf->bufp != NULL && buf->bufp->b_was_netbeans_file)
 	    {
 		if (!buf->bufp->b_netbeans_file)
+		{
+		    nbdebug(("E658: NetBeans connection lost for buffer %ld\n", buf->bufp->b_fnum));
 		    EMSGN(_("E658: NetBeans connection lost for buffer %ld"),
 							   buf->bufp->b_fnum);
+		}
 		else
 		{
 		    /* NetBeans uses stopDocumentListen when it stops editing
@@ -1838,7 +1876,8 @@
 	{
 	    if (buf == NULL)
 	    {
-		EMSG("E639: null buf in setTitle");
+		nbdebug(("    invalid buffer identifier in setTitle\n"));
+		EMSG("E639: invalid buffer identifier in setTitle");
 		return FAIL;
 	    }
 	    vim_free(buf->displayname);
@@ -1849,7 +1888,8 @@
 	{
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
-		EMSG("E640: null buf in initDone");
+		nbdebug(("    invalid buffer identifier in initDone\n"));
+		EMSG("E640: invalid buffer identifier in initDone");
 		return FAIL;
 	    }
 	    doupdate = 1;
@@ -1871,7 +1911,8 @@
 
 	    if (buf == NULL)
 	    {
-		EMSG("E641: null buf in setBufferNumber");
+		nbdebug(("    invalid buffer identifier in setBufferNumber\n"));
+		EMSG("E641: invalid buffer identifier in setBufferNumber");
 		return FAIL;
 	    }
 	    path = (char_u *)nb_unquote(args, NULL);
@@ -1881,6 +1922,7 @@
 	    vim_free(path);
 	    if (bufp == NULL)
 	    {
+	    	nbdebug(("    File %s not found in setBufferNumber\n", args));
 		EMSG2("E642: File %s not found in setBufferNumber", args);
 		return FAIL;
 	    }
@@ -1910,7 +1952,8 @@
 	{
 	    if (buf == NULL)
 	    {
-		EMSG("E643: null buf in setFullName");
+		nbdebug(("    invalid buffer identifier in setFullName\n"));
+		EMSG("E643: invalid buffer identifier in setFullName");
 		return FAIL;
 	    }
 	    vim_free(buf->displayname);
@@ -1929,7 +1972,8 @@
 	{
 	    if (buf == NULL)
 	    {
-		EMSG("E644: null buf in editFile");
+		nbdebug(("    invalid buffer identifier in editFile\n"));
+		EMSG("E644: invalid buffer identifier in editFile");
 		return FAIL;
 	    }
 	    /* Edit a file: like create + setFullName + read the file. */
@@ -1950,7 +1994,11 @@
 	{
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
-/*		EMSG("E645: null bufp in setVisible"); */
+		nbdebug(("    invalid buffer identifier in setVisible\n"));
+		/* This message was commented out, probably because it can
+		 * happen when shutting down. */
+		if (p_verbose > 0)
+		    EMSG("E645: invalid buffer identifier in setVisible");
 		return FAIL;
 	    }
 	    if (streq((char *)args, "T") && buf->bufp != curbuf)
@@ -1982,7 +2030,11 @@
 
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
-/*		EMSG("E646: null bufp in setModified"); */
+		nbdebug(("    invalid buffer identifier in setModified\n"));
+		/* This message was commented out, probably because it can
+		 * happen when shutting down. */
+		if (p_verbose > 0)
+		    EMSG("E646: invalid buffer identifier in setModified");
 		return FAIL;
 	    }
 	    prev_b_changed = buf->bufp->b_changed;
@@ -2016,7 +2068,7 @@
 	else if (streq((char *)cmd, "setModtime"))
 	{
 	    if (buf == NULL || buf->bufp == NULL)
-		nbdebug(("    null bufp in setModtime"));
+		nbdebug(("    invalid buffer identifier in setModtime\n"));
 	    else
 		buf->bufp->b_mtime = atoi((char *)args);
 /* =====================================================================*/
@@ -2024,7 +2076,7 @@
 	else if (streq((char *)cmd, "setReadOnly"))
 	{
 	    if (buf == NULL || buf->bufp == NULL)
-		nbdebug(("    null bufp in setReadOnly"));
+		nbdebug(("    invalid buffer identifier in setReadOnly\n"));
 	    else if (streq((char *)args, "T"))
 		buf->bufp->b_p_ro = TRUE;
 	    else
@@ -2065,7 +2117,8 @@
 
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
-		EMSG("E647: null bufp in setDot");
+		nbdebug(("    invalid buffer identifier in setDot\n"));
+		EMSG("E647: invalid buffer identifier in setDot");
 		return FAIL;
 	    }
 
@@ -2117,7 +2170,8 @@
 
 	    if (buf == NULL)
 	    {
-		EMSG("E648: null buf in close");
+		nbdebug(("    invalid buffer identifier in close\n"));
+		EMSG("E648: invalid buffer identifier in close");
 		return FAIL;
 	    }
 
@@ -2125,8 +2179,14 @@
 	    if (buf->displayname != NULL)
 		name = buf->displayname;
 #endif
-/*	    if (buf->bufp == NULL) */
-/*		EMSG("E649: null bufp in close"); */
+	    if (buf->bufp == NULL)
+	    {
+		nbdebug(("    invalid buffer identifier in close\n"));
+		/* This message was commented out, probably because it can
+		 * happen when shutting down. */
+		if (p_verbose > 0)
+		    EMSG("E649: invalid buffer identifier in close");
+	    }
 	    nbdebug(("    CLOSE %d: %s\n", bufno, name));
 	    need_mouse_correct = TRUE;
 	    if (buf->bufp != NULL)
@@ -2139,7 +2199,7 @@
 	}
 	else if (streq((char *)cmd, "setStyle")) /* obsolete... */
 	{
-	    nbdebug(("    setStyle is obsolete!"));
+	    nbdebug(("    setStyle is obsolete!\n"));
 /* =====================================================================*/
 	}
 	else if (streq((char *)cmd, "setExitDelay"))
@@ -2162,7 +2222,8 @@
 
 	    if (buf == NULL)
 	    {
-		EMSG("E650: null buf in defineAnnoType");
+		nbdebug(("    invalid buffer identifier in defineAnnoType\n"));
+		EMSG("E650: invalid buffer identifier in defineAnnoType");
 		return FAIL;
 	    }
 
@@ -2224,7 +2285,8 @@
 
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
-		EMSG("E651: null bufp in addAnno");
+		nbdebug(("    invalid buffer identifier in addAnno\n"));
+		EMSG("E651: invalid buffer identifier in addAnno");
 		return FAIL;
 	    }
 
@@ -2250,12 +2312,12 @@
 # ifdef NBDEBUG
 	    if (len != -1)
 	    {
-		nbdebug(("    partial line annotation -- Not Yet Implemented!"));
+		nbdebug(("    partial line annotation -- Not Yet Implemented!\n"));
 	    }
 # endif
 	    if (serNum >= GUARDEDOFFSET)
 	    {
-		nbdebug(("    too many annotations! ignoring..."));
+		nbdebug(("    too many annotations! ignoring...\n"));
 		return FAIL;
 	    }
 	    if (pos)
@@ -2276,7 +2338,7 @@
 
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
-		nbdebug(("    null bufp in removeAnno"));
+		nbdebug(("    invalid buffer identifier in removeAnno\n"));
 		return FAIL;
 	    }
 	    doupdate = 1;
@@ -2292,7 +2354,7 @@
 	else if (streq((char *)cmd, "moveAnnoToFront"))
 	{
 #ifdef FEAT_SIGNS
-	    nbdebug(("    moveAnnoToFront: Not Yet Implemented!"));
+	    nbdebug(("    moveAnnoToFront: Not Yet Implemented!\n"));
 #endif
 /* =====================================================================*/
 	}
@@ -2315,7 +2377,7 @@
 
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
-		nbdebug(("    null bufp in %s command", cmd));
+		nbdebug(("    invalid buffer identifier in %s command\n", cmd));
 		return FAIL;
 	    }
 	    nb_set_curbuf(buf->bufp);
@@ -2399,7 +2461,7 @@
 	     */
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
-		nbdebug(("    null bufp in %s command", cmd));
+		nbdebug(("    invalid buffer identifier in %s command\n", cmd));
 		return FAIL;
 	    }
 
@@ -2423,13 +2485,17 @@
 #endif
 		}
 	    }
+	    else
+	    {
+	        nbdebug(("    Buffer has no changes!\n"));
+	    }
 /* =====================================================================*/
 	}
 	else if (streq((char *)cmd, "netbeansBuffer"))
 	{
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
-		nbdebug(("    null bufp in %s command", cmd));
+		nbdebug(("    invalid buffer identifier in %s command\n", cmd));
 		return FAIL;
 	    }
 	    if (*args == 'T')
@@ -2455,6 +2521,10 @@
 	{
 	    /* not used yet */
 	}
+	else
+	{
+	    nbdebug(("Unrecognised command: %s\n", cmd));
+	}
 	/*
 	 * Unrecognized command is ignored.
 	 */
@@ -2994,7 +3064,7 @@
 
     if (len < 0)
     {
-	nbdebug(("Negative len %ld in netbeans_removed()!", len));
+	nbdebug(("Negative len %ld in netbeans_removed()!\n", len));
 	return;
     }
 
@@ -3635,6 +3705,7 @@
 	STRCAT(ebuf, IObuff);
 	STRCAT(ebuf, (char_u *)_("is read-only (add ! to override)"));
 	STRCPY(IObuff, ebuf);
+	nbdebug(("    %s\n", ebuf ));
 	emsg(IObuff);
     }
 }
diff --git a/src/po/af.po b/src/po/af.po
index 7f1db1d..c41225d 100644
--- a/src/po/af.po
+++ b/src/po/af.po
@@ -891,7 +891,7 @@
 msgstr "E156: Ontbrekende tekennaam"
 
 msgid "E612: Too many signs defined"
-msgstr "Te veel tekens gedefinieer"
+msgstr "E612: Te veel tekens gedefinieer"
 
 #, c-format
 msgid "E239: Invalid sign text: %s"
diff --git a/src/vim.def b/src/vim.def
index 4b79f7d..aeea667 100644
--- a/src/vim.def
+++ b/src/vim.def
@@ -1,4 +1,4 @@
 CODE PRELOAD EXECUTEONLY
 DATA MULTIPLE SHARED
-DESCRIPTION 'Vim 7.1'
+DESCRIPTION 'Vim 7.2a'
 HEAPSIZE 0,0
diff --git a/src/window.c b/src/window.c
index 584b9a4..a0f196b 100644
--- a/src/window.c
+++ b/src/window.c
@@ -9,10 +9,6 @@
 
 #include "vim.h"
 
-#ifdef HAVE_FCNTL_H
-# include <fcntl.h>	    /* for chdir() */
-#endif
-
 static int path_is_url __ARGS((char_u *p));
 #if defined(FEAT_WINDOWS) || defined(PROTO)
 static int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir));
