--- basic/source/comp/exprtree.cxx	2007-08-08 17:43:12.000000000 +0100
+++ basic.patched/source/comp/exprtree.cxx	2007-08-08 17:19:19.000000000 +0100
@@ -117,7 +117,7 @@ SbiExpression::~SbiExpression()
 // Folgen Parameter ohne Klammer? Dies kann eine Zahl, ein String,
 // ein Symbol oder auch ein Komma sein (wenn der 1. Parameter fehlt)
 
-static BOOL DoParametersFollow( SbiParser* p, SbiExprType eCurExpr, SbiToken eTok )
+static BOOL DoParametersFollow( SbiParser* p, SbiExprType eCurExpr, SbiToken eTok, bool bNested )
 {
 	if( eTok == LPAREN )
 		return TRUE;
@@ -129,12 +129,15 @@ static BOOL DoParametersFollow( SbiParse
 	{
 		return TRUE;
 	}
-	else // check for default params with reserved names ( e.g. names of tokens )
+	else // check for default params with reserved names ( e.g. names of tokens )  also cater for aFuncCall -10 ( where we need to handle the minus )
 	{
 		SbiTokenizer tokens( *(SbiTokenizer*)p );
 		// Urk the Next() / Peek() symantics are... weird
 		tokens.Next();
-		if ( tokens.Peek() == ASSIGN )
+		SbiToken eNext = tokens.Peek();
+		if ( !bNested && eTok == MINUS && ( eNext == NUMBER || eNext == FIXSTRING || eNext == SYMBOL ) ) // note vba will strip a leadin +
+			return TRUE;
+		if ( eNext == ASSIGN )
 			return TRUE;
 	}
 	return FALSE; 	
@@ -245,7 +248,7 @@ SbiExprNode* SbiExpression::Term()
 		}
 	}
 
-	if( DoParametersFollow( pParser, eCurExpr, eTok = eNextTok ) )
+	if( DoParametersFollow( pParser, eCurExpr, eTok = eNextTok, mbNested ) )
 	{
 		pPar = new SbiParameters( pParser, FALSE, TRUE, mbNested );
 		bError |= !pPar->IsValid();
@@ -408,7 +411,7 @@ SbiExprNode* SbiExpression::ObjTerm( Sbi
 	SbiParameters* pPar = NULL;
 	eTok = pParser->Peek();
 	// Parameter?
-	if( DoParametersFollow( pParser, eCurExpr, eTok ) )
+	if( DoParametersFollow( pParser, eCurExpr, eTok, mbNested ) )
 	{
 		pPar = new SbiParameters( pParser, FALSE, TRUE, mbNested );
 		bError |= !pPar->IsValid();
