diff --git a/parse.c b/parse.c
index ae49ab6..b05e0d2 100644
--- a/parse.c
+++ b/parse.c
@@ -2103,6 +2103,10 @@ static void ProcessScriptFunc(symbolNode_t *sym, boolean discardReturn)
 	int argCount;
 
 	MS_Message(MSG_DEBUG, "---- ProcessScriptFunc ----\n");
+	if(sym->info.scriptFunc.predefined == YES && discardReturn == NO)
+	{
+		sym->info.scriptFunc.hasReturnValue = YES;
+	}
 	argCount = sym->info.scriptFunc.argCount;
 	TK_NextTokenMustBe(TK_LPAREN, ERR_MISSING_LPAREN);
 	i = 0;
@@ -3694,7 +3698,8 @@ static void ExprFactor(void)
 				ProcessInternFunc(sym);
 				break;
 			case SY_SCRIPTFUNC:
-				if(sym->info.scriptFunc.hasReturnValue == NO)
+				if(sym->info.scriptFunc.predefined == NO
+					&& sym->info.scriptFunc.hasReturnValue == NO)
 				{
 					ERR_Error(ERR_EXPR_FUNC_NO_RET_VAL, YES);
 				}