diff --git a/src/netbeans.c b/src/netbeans.c
index c4223ca..8339b95 100644
--- a/src/netbeans.c
+++ b/src/netbeans.c
@@ -257,7 +257,7 @@
     {
 	nbdebug(("Wrong access mode for NetBeans connection info file: \"%s\"\n",
 								       file));
-	semsg(_("E668: Wrong access mode for NetBeans connection info file: \"%s\""),
+	semsg(_(e_wrong_access_mode_for_netbeans_connection_info_file_str),
 									file);
 	return FAIL;
     }
@@ -267,7 +267,7 @@
     if (fp == NULL)
     {
 	nbdebug(("Cannot open NetBeans connection info file\n"));
-	PERROR("E660: Cannot open NetBeans connection info file");
+	PERROR(e_cannot_open_netbeans_connection_info_file);
 	return FAIL;
     }
 
@@ -477,7 +477,7 @@
     if (*verb != ':')
     {
 	nbdebug(("    missing colon: %s\n", cmd));
-	semsg("E627: missing colon: %s", cmd);
+	semsg(e_missing_colon_str, cmd);
 	return;
     }
     ++verb; // skip colon
@@ -501,7 +501,7 @@
     if (isfunc < 0)
     {
 	nbdebug(("    missing ! or / in: %s\n", cmd));
-	semsg("E628: missing ! or / in: %s", cmd);
+	semsg(e_missing_bang_or_slash_in_str, cmd);
 	return;
     }
 
@@ -518,7 +518,7 @@
 	 * so I'm disabling it except for debugging.
 	 */
 	nbdebug(("nb_parse_cmd: Command error for \"%s\"\n", cmd));
-	emsg("E629: bad return from nb_do_cmd");
+	emsg(e_bad_return_from_nb_do_cmd);
 #endif
     }
 }
@@ -1040,7 +1040,7 @@
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
 		nbdebug(("    Invalid buffer identifier in getAnno\n"));
-		emsg("E652: Invalid buffer identifier in getAnno");
+		emsg(e_invalid_buffer_identifier_in_getanno);
 		retval = FAIL;
 	    }
 	    else
@@ -1063,7 +1063,7 @@
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in getLength\n"));
-		emsg("E632: invalid buffer identifier in getLength");
+		emsg(e_invalid_buffer_identifier_in_getlength);
 		retval = FAIL;
 	    }
 	    else
@@ -1085,7 +1085,7 @@
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in getText\n"));
-		emsg("E633: invalid buffer identifier in getText");
+		emsg(e_invalid_buffer_identifier_in_gettext);
 		retval = FAIL;
 	    }
 	    else
@@ -1148,7 +1148,7 @@
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in remove\n"));
-		emsg("E634: invalid buffer identifier in remove");
+		emsg(e_invalid_buffer_identifier_in_remove);
 		retval = FAIL;
 	    }
 	    else
@@ -1318,7 +1318,7 @@
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in insert\n"));
-		emsg("E635: invalid buffer identifier in insert");
+		emsg(e_invalid_buffer_identifier_in_insert);
 		retval = FAIL;
 	    }
 	    else if (args != NULL)
@@ -1478,7 +1478,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in create\n"));
-		emsg("E636: invalid buffer identifier in create");
+		emsg(e_invalid_buffer_identifier_in_create);
 		return FAIL;
 	    }
 	    VIM_CLEAR(buf->displayname);
@@ -1526,7 +1526,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in startDocumentListen\n"));
-		emsg("E637: invalid buffer identifier in startDocumentListen");
+		emsg(e_invalid_buffer_identifier_in_startdocumentlisten);
 		return FAIL;
 	    }
 	    buf->fireChanges = 1;
@@ -1537,7 +1537,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in stopDocumentListen\n"));
-		emsg("E638: invalid buffer identifier in stopDocumentListen");
+		emsg(e_invalid_buffer_identifier_in_stopdocumentlisten);
 		return FAIL;
 	    }
 	    buf->fireChanges = 0;
@@ -1545,8 +1545,9 @@
 	    {
 		if (!buf->bufp->b_netbeans_file)
 		{
-		    nbdebug(("E658: NetBeans connection lost for buffer %d\n", buf->bufp->b_fnum));
-		    semsg(_("E658: NetBeans connection lost for buffer %d"),
+		    nbdebug((e_netbeans_connection_lost_for_buffer_nr,
+							   buf->bufp->b_fnum));
+		    semsg(_(e_netbeans_connection_lost_for_buffer_nr),
 							   buf->bufp->b_fnum);
 		}
 		else
@@ -1566,7 +1567,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in setTitle\n"));
-		emsg("E639: invalid buffer identifier in setTitle");
+		emsg(e_invalid_buffer_identifier_in_settitle);
 		return FAIL;
 	    }
 	    vim_free(buf->displayname);
@@ -1578,7 +1579,7 @@
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in initDone\n"));
-		emsg("E640: invalid buffer identifier in initDone");
+		emsg(e_invalid_buffer_identifier_in_initdone);
 		return FAIL;
 	    }
 	    do_update = 1;
@@ -1599,7 +1600,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in setBufferNumber\n"));
-		emsg("E641: invalid buffer identifier in setBufferNumber");
+		emsg(e_invalid_buffer_identifier_in_setbuffernumber);
 		return FAIL;
 	    }
 	    path = (char_u *)nb_unquote(args, NULL);
@@ -1610,7 +1611,7 @@
 	    if (bufp == NULL)
 	    {
 		nbdebug(("    File %s not found in setBufferNumber\n", args));
-		semsg("E642: File %s not found in setBufferNumber", args);
+		semsg(e_file_str_not_found_in_setbuffernumber, args);
 		return FAIL;
 	    }
 	    buf->bufp = bufp;
@@ -1635,7 +1636,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in setFullName\n"));
-		emsg("E643: invalid buffer identifier in setFullName");
+		emsg(e_invalid_buffer_identifier_in_setfullname);
 		return FAIL;
 	    }
 	    vim_free(buf->displayname);
@@ -1658,7 +1659,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in editFile\n"));
-		emsg("E644: invalid buffer identifier in editFile");
+		emsg(e_invalid_buffer_identifier_in_editfile);
 		return FAIL;
 	    }
 	    // Edit a file: like create + setFullName + read the file.
@@ -1684,7 +1685,7 @@
 		// This message was commented out, probably because it can
 		// happen when shutting down.
 		if (p_verbose > 0)
-		    emsg("E645: invalid buffer identifier in setVisible");
+		    emsg(e_invalid_buffer_identifier_in_setvisible);
 		return FAIL;
 	    }
 	    if (streq((char *)args, "T") && buf->bufp != curbuf)
@@ -1724,7 +1725,7 @@
 		// This message was commented out, probably because it can
 		// happen when shutting down.
 		if (p_verbose > 0)
-		    emsg("E646: invalid buffer identifier in setModified");
+		    emsg(e_invalid_buffer_identifier_in_setmodified);
 		return FAIL;
 	    }
 	    prev_b_changed = buf->bufp->b_changed;
@@ -1807,7 +1808,7 @@
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in setDot\n"));
-		emsg("E647: invalid buffer identifier in setDot");
+		emsg(e_invalid_buffer_identifier_in_setdot);
 		return FAIL;
 	    }
 
@@ -1860,7 +1861,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in close\n"));
-		emsg("E648: invalid buffer identifier in close");
+		emsg(e_invalid_buffer_identifier_in_close);
 		return FAIL;
 	    }
 
@@ -1874,7 +1875,7 @@
 		// This message was commented out, probably because it can
 		// happen when shutting down.
 		if (p_verbose > 0)
-		    emsg("E649: invalid buffer identifier in close");
+		    emsg(e_invalid_buffer_identifier_in_close_2);
 	    }
 	    nbdebug(("    CLOSE %d: %s\n", bufno, name));
 #ifdef FEAT_GUI
@@ -1913,7 +1914,7 @@
 	    if (buf == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in defineAnnoType\n"));
-		emsg("E650: invalid buffer identifier in defineAnnoType");
+		emsg(e_invalid_buffer_identifier_in_defineannotype);
 		return FAIL;
 	    }
 
@@ -1970,7 +1971,7 @@
 	    if (buf == NULL || buf->bufp == NULL)
 	    {
 		nbdebug(("    invalid buffer identifier in addAnno\n"));
-		emsg("E651: invalid buffer identifier in addAnno");
+		emsg(e_invalid_buffer_identifier_in_addanno);
 		return FAIL;
 	    }
 
@@ -2350,7 +2351,7 @@
 		&& !defined(FEAT_GUI_MSWIN)
     if (gui.in_use)
     {
-	emsg(_("E838: netbeans is not supported with this GUI"));
+	emsg(_(e_netbeans_is_not_supported_with_this_GUI));
 	return;
     }
 # endif
