diff --git a/src/integration.c b/src/integration.c
index 0d46c97..c86a8a5 100644
--- a/src/integration.c
+++ b/src/integration.c
@@ -78,7 +78,7 @@
 
 /* Functions private to this file */
 static void workshop_connection_closed(void);
-static void messageFromEserve(XtPointer clientData, int *NOTUSED1, XtInputId *NOTUSED2);
+static void messageFromEserve(XtPointer clientData, int *dum1, XtInputId *dum2);
 static void workshop_disconnect(void);
 static void workshop_sensitivity(int num, char *table);
 static void adjust_sign_name(char *filename);
@@ -157,9 +157,10 @@
 
 }
 
-/*ARGSUSED*/
 void
-messageFromEserve(XtPointer clientData, int *NOTUSED1, XtInputId *NOTUSED2)
+messageFromEserve(XtPointer clientData UNUSED,
+		  int *dum1 UNUSED,
+		  XtInputId *dum2 UNUSED)
 {
 	char	*cmd;		/* the 1st word of the command */
 
@@ -199,7 +200,7 @@
 			if (sign) {
 				sign++;
 			}
-			/* Change sign name to accomodate a different size? */
+			/* Change sign name to accommodate a different size? */
 			adjust_sign_name(sign);
 			workshop_add_mark_type(idx, color, sign);
 		}
@@ -580,7 +581,7 @@
 #endif
 
 
-/* Change sign name to accomodate a different size:
+/* Change sign name to accommodate a different size:
  * Create the filename based on the height. The filename format
  * of multisize icons are:
  *    x.xpm   : largest icon
@@ -614,6 +615,7 @@
 		strcpy(s, ".xpm");
 }
 
+#if 0
 /* Were we invoked by WorkShop? This function can be used early during startup
    if you want to do things differently if the editor is started standalone
    or in WorkShop mode. For example, in standalone mode you may not want to
@@ -627,6 +629,7 @@
 	}
 	return result;
 }
+#endif
 
 /* Connect back to eserve */
 void	workshop_connect(XtAppContext context)
@@ -750,6 +753,7 @@
  * Utility functions
  */
 
+#if 0
 /* Set icon for the window */
 void
 workshop_set_icon(Display *display, Widget shell, char **xpmdata,
@@ -793,6 +797,7 @@
 	}
 	XtFree((char *)xpmAttributes.colorsymbols);
 }
+#endif
 
 /* Minimize and maximize shells. From libutil's shell.cc. */
 
@@ -927,7 +932,7 @@
 	return success;
 }
 
-
+#if 0
 Boolean workshop_get_rows_cols(int *rows, int *cols)
 {
 	static int	r = 0;
@@ -958,6 +963,7 @@
 	}
 	return success;
 }
+#endif
 
 /*
  * Toolbar code
@@ -1043,12 +1049,11 @@
 }
 
 
-
+#if 0
 /*
  * Send information to eserve on certain editor events
  * You must make sure these are called when necessary
  */
-
 void workshop_file_closed(char *filename)
 {
 	char buffer[2*MAXPATHLEN];
@@ -1056,6 +1061,7 @@
 			NOCATGETS("deletedFile %s\n"), filename);
 	write(sd, buffer, strlen(buffer));
 }
+#endif
 
 void workshop_file_closed_lineno(char *filename, int lineno)
 {
@@ -1086,14 +1092,7 @@
 	workshop_moved_marks(filename);
 }
 
-void workshop_move_mark(char *filename, int markId, int newLineno)
-{
-	char buffer[2*MAXPATHLEN];
-	vim_snprintf(buffer, sizeof(buffer),
-			NOCATGETS("moveMark %s %d %d\n"), filename, markId, newLineno);
-	write(sd, buffer, strlen(buffer));
-}
-
+#if 0
 void workshop_file_modified(char *filename)
 {
 	char buffer[2*MAXPATHLEN];
@@ -1102,6 +1101,15 @@
 	write(sd, buffer, strlen(buffer));
 }
 
+void workshop_move_mark(char *filename, int markId, int newLineno)
+{
+	char buffer[2*MAXPATHLEN];
+	vim_snprintf(buffer, sizeof(buffer),
+	       NOCATGETS("moveMark %s %d %d\n"), filename, markId, newLineno);
+	write(sd, buffer, strlen(buffer));
+}
+#endif
+
 void workshop_frame_moved(int new_x, int new_y, int new_w, int new_h)
 {
 	char buffer[200];
@@ -1179,10 +1187,12 @@
 }
 
 /* Send a message to eserve */
+#if defined(NOHANDS_SUPPORT_FUNCTIONS) || defined(FEAT_BEVAL)
 void workshop_send_message(char *buf)
 {
 	write(sd, buf, strlen(buf));
 }
+#endif
 
 /* Some methods, like currentFile, cursorPos, etc. are missing here.
  * But it looks like these are used for NoHands testing only so we
diff --git a/src/version.c b/src/version.c
index 1580b31..a802841 100644
--- a/src/version.c
+++ b/src/version.c
@@ -682,6 +682,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    327,
+/**/
     326,
 /**/
     325,
diff --git a/src/workshop.c b/src/workshop.c
index 1b491bb..7d4e891 100644
--- a/src/workshop.c
+++ b/src/workshop.c
@@ -56,12 +56,12 @@
 static void	 load_window(char *, int lnum);
 static void	 warp_to_pc(int);
 #ifdef FEAT_BEVAL
-void		workshop_beval_cb(BalloonEval *, int);
+void		 workshop_beval_cb(BalloonEval *, int);
+static int	 computeIndex(int, char_u *, int);
 #endif
 static char	*fixAccelText(char *);
 static void	 addMenu(char *, char *, char *);
 static char	*lookupVerb(char *, int);
-static int	 computeIndex(int, char_u *, int);
 static void	 coloncmd(char *, Boolean);
 
 extern Widget	 vimShell;
@@ -1624,8 +1624,6 @@
 	}
     }
 }
-#endif
-
 
     static int
 computeIndex(
@@ -1649,6 +1647,7 @@
 
     return -1;
 }
+#endif
 
     static void
 addMenu(
