Everything worked, except the "%u" elements (and all the others like "%u") which I expect to expand to inactive timestamps (w.o. time). If I switched the second line of my template to "%(org-file-contents \"~/emacs/org/capture-templates/training.org\")" I encountered the same bahaviour. In my opinion, this is because `%[FILE]' and `%(SEXP)' are is implemented the wrong way or at least, the aim of the implementation is vague and the documentation is not appropriate. EITHER (a) the user wants to insert the contents of file (or the result of a sexp) without special template parsing. In that case the "^{PROP}" substitution should not work as well, or the docs should reflect the facts, that "^{PROP}"-subtitution takes place after expansion of "%[]" and "%()", "%()"-substitution takes place after "%[]"-substitution (i.e. in the results of that substitution). "%[]"- and "%()"-substitutions takes place after simple substitution. Currently, the docs do not reflect the fact, that the user may not use arbitrary text in "%[]" files. Some expansions take place (the complex ones), some don't (the simple ones "%\\(uUtT...\\)" --- !??). Alternatively, the code vor "%()" and "%[]" should go to separate variables, that are inserted into the template after all expansion is done, i.e. the end of `org-capture-fill-template'. OR (b) the user wants the contents of the file (or the result of a sexp) to be used as a template with all bells and wistles (why? he would simply use `C-x i' otherwise). In that case, the evaluation of `%[FILE]' and `%(SEXP)' should be done, as my patch proposed, at the start of `org-capture-set-plist'. There, the value of the local `txt' variable should be set to the contents of the file (or the result of the sexp. Now it would work reliably for ever (assuming `org-capture-set-plist' is and will be the unique entry point to template parsing). OR (c) (a) and (b) are true and (b) is the special case, where the template consists of either a single entry "%[FILE]" or the contents of the local variable `txt' in `org-capture-set-plist' is the name of an existing file (+1). I'll keep rebasing my org-capture branch, which now does this: