diff --git a/dlls/dmscript/dmscript_main.c b/dlls/dmscript/dmscript_main.c
index c211aa7..ae1cdbc 100644
--- a/dlls/dmscript/dmscript_main.c
+++ b/dlls/dmscript/dmscript_main.c
@@ -633,10 +633,6 @@
  *
  *
  */
-/* check whether the given DWORD is even (return 0) or odd (return 1) */
-int even_or_odd (DWORD number) {
-	return (number & 0x1); /* basically, check if bit 0 is set ;) */
-}
 
 /* FOURCC to string conversion for debug messages */
 const char *debugstr_fourcc (DWORD fourcc) {
@@ -647,7 +643,7 @@
 }
 
 /* DMUS_VERSION struct to string conversion for debug messages */
-const char *debugstr_dmversion (const DMUS_VERSION *version) {
+static const char *debugstr_dmversion (const DMUS_VERSION *version) {
 	if (!version) return "'null'";
 	return wine_dbg_sprintf ("\'%i,%i,%i,%i\'",
 		(int)((version->dwVersionMS & 0xFFFF0000) >> 8), (int)(version->dwVersionMS & 0x0000FFFF), 
@@ -838,144 +834,8 @@
 	return debugstr_guid(id);
 }	
 
-/* returns name of given error code */
-const char *debugstr_dmreturn (DWORD code) {
-	static const flag_info codes[] = {
-		FE(S_OK),
-		FE(S_FALSE),
-		FE(DMUS_S_PARTIALLOAD),
-		FE(DMUS_S_PARTIALDOWNLOAD),
-		FE(DMUS_S_REQUEUE),
-		FE(DMUS_S_FREE),
-		FE(DMUS_S_END),
-		FE(DMUS_S_STRING_TRUNCATED),
-		FE(DMUS_S_LAST_TOOL),
-		FE(DMUS_S_OVER_CHORD),
-		FE(DMUS_S_UP_OCTAVE),
-		FE(DMUS_S_DOWN_OCTAVE),
-		FE(DMUS_S_NOBUFFERCONTROL),
-		FE(DMUS_S_GARBAGE_COLLECTED),
-		FE(DMUS_E_DRIVER_FAILED),
-		FE(DMUS_E_PORTS_OPEN),
-		FE(DMUS_E_DEVICE_IN_USE),
-		FE(DMUS_E_INSUFFICIENTBUFFER),
-		FE(DMUS_E_BUFFERNOTSET),
-		FE(DMUS_E_BUFFERNOTAVAILABLE),
-		FE(DMUS_E_NOTADLSCOL),
-		FE(DMUS_E_INVALIDOFFSET),
-		FE(DMUS_E_ALREADY_LOADED),
-		FE(DMUS_E_INVALIDPOS),
-		FE(DMUS_E_INVALIDPATCH),
-		FE(DMUS_E_CANNOTSEEK),
-		FE(DMUS_E_CANNOTWRITE),
-		FE(DMUS_E_CHUNKNOTFOUND),
-		FE(DMUS_E_INVALID_DOWNLOADID),
-		FE(DMUS_E_NOT_DOWNLOADED_TO_PORT),
-		FE(DMUS_E_ALREADY_DOWNLOADED),
-		FE(DMUS_E_UNKNOWN_PROPERTY),
-		FE(DMUS_E_SET_UNSUPPORTED),
-		FE(DMUS_E_GET_UNSUPPORTED),
-		FE(DMUS_E_NOTMONO),
-		FE(DMUS_E_BADARTICULATION),
-		FE(DMUS_E_BADINSTRUMENT),
-		FE(DMUS_E_BADWAVELINK),
-		FE(DMUS_E_NOARTICULATION),
-		FE(DMUS_E_NOTPCM),
-		FE(DMUS_E_BADWAVE),
-		FE(DMUS_E_BADOFFSETTABLE),
-		FE(DMUS_E_UNKNOWNDOWNLOAD),
-		FE(DMUS_E_NOSYNTHSINK),
-		FE(DMUS_E_ALREADYOPEN),
-		FE(DMUS_E_ALREADYCLOSED),
-		FE(DMUS_E_SYNTHNOTCONFIGURED),
-		FE(DMUS_E_SYNTHACTIVE),
-		FE(DMUS_E_CANNOTREAD),
-		FE(DMUS_E_DMUSIC_RELEASED),
-		FE(DMUS_E_BUFFER_EMPTY),
-		FE(DMUS_E_BUFFER_FULL),
-		FE(DMUS_E_PORT_NOT_CAPTURE),
-		FE(DMUS_E_PORT_NOT_RENDER),
-		FE(DMUS_E_DSOUND_NOT_SET),
-		FE(DMUS_E_ALREADY_ACTIVATED),
-		FE(DMUS_E_INVALIDBUFFER),
-		FE(DMUS_E_WAVEFORMATNOTSUPPORTED),
-		FE(DMUS_E_SYNTHINACTIVE),
-		FE(DMUS_E_DSOUND_ALREADY_SET),
-		FE(DMUS_E_INVALID_EVENT),
-		FE(DMUS_E_UNSUPPORTED_STREAM),
-		FE(DMUS_E_ALREADY_INITED),
-		FE(DMUS_E_INVALID_BAND),
-		FE(DMUS_E_TRACK_HDR_NOT_FIRST_CK),
-		FE(DMUS_E_TOOL_HDR_NOT_FIRST_CK),
-		FE(DMUS_E_INVALID_TRACK_HDR),
-		FE(DMUS_E_INVALID_TOOL_HDR),
-		FE(DMUS_E_ALL_TOOLS_FAILED),
-		FE(DMUS_E_ALL_TRACKS_FAILED),
-		FE(DMUS_E_NOT_FOUND),
-		FE(DMUS_E_NOT_INIT),
-		FE(DMUS_E_TYPE_DISABLED),
-		FE(DMUS_E_TYPE_UNSUPPORTED),
-		FE(DMUS_E_TIME_PAST),
-		FE(DMUS_E_TRACK_NOT_FOUND),
-		FE(DMUS_E_TRACK_NO_CLOCKTIME_SUPPORT),
-		FE(DMUS_E_NO_MASTER_CLOCK),
-		FE(DMUS_E_LOADER_NOCLASSID),
-		FE(DMUS_E_LOADER_BADPATH),
-		FE(DMUS_E_LOADER_FAILEDOPEN),
-		FE(DMUS_E_LOADER_FORMATNOTSUPPORTED),
-		FE(DMUS_E_LOADER_FAILEDCREATE),
-		FE(DMUS_E_LOADER_OBJECTNOTFOUND),
-		FE(DMUS_E_LOADER_NOFILENAME),
-		FE(DMUS_E_INVALIDFILE),
-		FE(DMUS_E_ALREADY_EXISTS),
-		FE(DMUS_E_OUT_OF_RANGE),
-		FE(DMUS_E_SEGMENT_INIT_FAILED),
-		FE(DMUS_E_ALREADY_SENT),
-		FE(DMUS_E_CANNOT_FREE),
-		FE(DMUS_E_CANNOT_OPEN_PORT),
-		FE(DMUS_E_CANNOT_CONVERT),
-		FE(DMUS_E_DESCEND_CHUNK_FAIL),
-		FE(DMUS_E_NOT_LOADED),
-		FE(DMUS_E_SCRIPT_LANGUAGE_INCOMPATIBLE),
-		FE(DMUS_E_SCRIPT_UNSUPPORTED_VARTYPE),
-		FE(DMUS_E_SCRIPT_ERROR_IN_SCRIPT),
-		FE(DMUS_E_SCRIPT_CANTLOAD_OLEAUT32),
-		FE(DMUS_E_SCRIPT_LOADSCRIPT_ERROR),
-		FE(DMUS_E_SCRIPT_INVALID_FILE),
-		FE(DMUS_E_INVALID_SCRIPTTRACK),
-		FE(DMUS_E_SCRIPT_VARIABLE_NOT_FOUND),
-		FE(DMUS_E_SCRIPT_ROUTINE_NOT_FOUND),
-		FE(DMUS_E_SCRIPT_CONTENT_READONLY),
-		FE(DMUS_E_SCRIPT_NOT_A_REFERENCE),
-		FE(DMUS_E_SCRIPT_VALUE_NOT_SUPPORTED),
-		FE(DMUS_E_INVALID_SEGMENTTRIGGERTRACK),
-		FE(DMUS_E_INVALID_LYRICSTRACK),
-		FE(DMUS_E_INVALID_PARAMCONTROLTRACK),
-		FE(DMUS_E_AUDIOVBSCRIPT_SYNTAXERROR),
-		FE(DMUS_E_AUDIOVBSCRIPT_RUNTIMEERROR),
-		FE(DMUS_E_AUDIOVBSCRIPT_OPERATIONFAILURE),
-		FE(DMUS_E_AUDIOPATHS_NOT_VALID),
-		FE(DMUS_E_AUDIOPATHS_IN_USE),
-		FE(DMUS_E_NO_AUDIOPATH_CONFIG),
-		FE(DMUS_E_AUDIOPATH_INACTIVE),
-		FE(DMUS_E_AUDIOPATH_NOBUFFER),
-		FE(DMUS_E_AUDIOPATH_NOPORT),
-		FE(DMUS_E_NO_AUDIOPATH),
-		FE(DMUS_E_INVALIDCHUNK),
-		FE(DMUS_E_AUDIOPATH_NOGLOBALFXBUFFER),
-		FE(DMUS_E_INVALID_CONTAINER_OBJECT)
-	};
-	unsigned int i;
-	for (i = 0; i < sizeof(codes)/sizeof(codes[0]); i++) {
-		if (code == codes[i].val)
-			return codes[i].name;
-	}
-	/* if we didn't find it, return value */
-	return wine_dbg_sprintf("0x%08x", code);
-}
-
 /* generic flag-dumping function */
-const char* debugstr_flags (DWORD flags, const flag_info* names, size_t num_names){
+static const char* debugstr_flags (DWORD flags, const flag_info* names, size_t num_names){
 	char buffer[128] = "", *ptr = &buffer[0];
 	unsigned int i;
 	int size = sizeof(buffer);
@@ -995,7 +855,7 @@
 }
 
 /* dump DMUS_OBJ flags */
-const char *debugstr_DMUS_OBJ_FLAGS (DWORD flagmask) {
+static const char *debugstr_DMUS_OBJ_FLAGS (DWORD flagmask) {
     static const flag_info flags[] = {
 	    FE(DMUS_OBJ_OBJECT),
 	    FE(DMUS_OBJ_CLASS),
