diff --git a/demofiles/demo.html.templ b/demofiles/demo.html.templ
index 8f35b19..17c9528 100644
--- a/demofiles/demo.html.templ
+++ b/demofiles/demo.html.templ
@@ -10,7 +10,7 @@
 	</head>
 	<body>
 		{% for(size_t i = 0; i < no; i++) %}
-			{# render "greeting.templ", names[i] #}<br />
+			{# render("greeting.templ", names[i]) #}<br />
 		{% end %}
 	</body>
 </html>
diff --git a/src/parser.y b/src/parser.y
index 7701177..54fa1ca 100644
--- a/src/parser.y
+++ b/src/parser.y
@@ -42,12 +42,13 @@ extern struct template result;
 %type <nodeType> structureType
 
 %token <text> TEXT
+%token <text> WHITESPACE
 %token SECTION COMMA END
 %token PARAMS_BEGIN PARAMS_END
 %token STATEMENT_BEGIN STATEMENT_END
 %token STRUCTURE_BEGIN STRUCTURE_END
 %token OUTPUT_BEGIN OUTPUT_END
-%token RENDER
+%token RENDER OPEN_PARENTHESES CLOSE_PARENTHESES
 
 %start template
 
@@ -143,17 +144,12 @@ mainSection: /* empty */
 		$$ = $1;
 		addNode(&$$, newOutputNode($3));
 	}
-           | mainSection STRUCTURE_BEGIN texts structureType text STRUCTURE_END
-   {
-   	if (!checkCharset($3, " \t\n")) {
-   		yyerror("unknown structure block command");
-   		YYERROR;
-   	}
-   	
+           | mainSection STRUCTURE_BEGIN optionalWhitespaces structureType optionalWhitespaces OPEN_PARENTHESES text CLOSE_PARENTHESES optionalWhitespaces STRUCTURE_END
+   {	
    	$$ = $1;
    	switch($4) {
    		case RENDER_NODE:
-		   	addNode(&$$, newRenderNode($5));
+		   	addNode(&$$, newRenderNode($7));
 		   	break;
 		   default:
 		   	yyerror("unhandled structure block command (internal error)");
@@ -162,6 +158,10 @@ mainSection: /* empty */
    }
 ;
 
+optionalWhitespaces: /* empty */
+                  | WHITESPACE optionalWhitespaces
+;
+
 structureType: RENDER
 	{
 		$$ = RENDER_NODE;
@@ -199,10 +199,18 @@ text: TEXT
 	{
 		$$ = $1;
 	}
+	 | WHITESPACE
+	{
+		$$ = $1;
+	}
     | TEXT text
 	{
 		$$ = combineStr($1, $2);
 	}
+	 | WHITESPACE text
+	{
+		$$ = combineStr($1, $2);
+	}
 
 texts: /* empty */
 	{
diff --git a/src/scanner.l b/src/scanner.l
index d6b7be5..195dcbf 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -74,8 +74,11 @@ type_or_id			{type_prefix}?{id}{type_pointer}*
 <STATEMENT>"e"							{ yylval.text = strdup(yytext); return TEXT; /* catch e as text */ }
 <STATEMENT>{statement_end}			{ BEGIN(isMetaSection ? META_SECTION : MAIN_SECTION); return STATEMENT_END; }
 
-<STRUCTURE>[^#r]+						{ yylval.text = strdup(yytext); return TEXT; }
+<STRUCTURE>[^#r() \t\n]+			{ yylval.text = strdup(yytext); return TEXT; }
+<STRUCTURE>{whitespace}+			{ yylval.text = strdup(yytext); return WHITESPACE; }
 <STRUCTURE>{render_token}			{ return RENDER; }
+<STRUCTURE>"("							{ return OPEN_PARENTHESES; }
+<STRUCTURE>")"							{ return CLOSE_PARENTHESES; }
 <STRUCTURE>"r"							{ yylval.text = strdup(yytext); return TEXT; /* catch r as text */ }
 <STRUCTURE>"#"							{ yylval.text = strdup(yytext); return TEXT; /* catch # as text */ }
 <STRUCTURE>{structure_end}			{ BEGIN(isMetaSection ? META_SECTION : MAIN_SECTION); return STRUCTURE_END; }