Hi Andy, I know this is very last minute, but it would be great if you could include this fix in 2.0.4. Since the release is so close, I was _very_ careful writing it and testing it, and am quite confident that it is correct. (After regenerating psyntax-pp.scm, I removed all .go files, recompiled everything, and did a 'make check'. I also did several other tests by hand targetting the changed code.) I very nearly pushed this, but I know that you are very opinionated about psyntax changes, and this fix did require adding another parameter to 'expand-expr' and another return value to 'syntax-type', so I wanted to run it by you. Unless you object to the basic strategy here, please take my word for it that it is correct, and push it. So, what does this fix? The "definition in expression context" error message is broken in several ways. First of all, source location information is _never_ provided, even when compiling a module in the normal way. Secondly, instead of printing the definition form, it reports the identifier as the 'subform', and the rhs expression as the 'form'. Thirdly, "definition in expression context" is a confusing message for Scheme beginners, who are likely to make this mistake. This came up because Bruce Korb recently posted here, quite confused (and understandably so) about what could be the cause of this misleading error message. For example, if you try to compile a module containing: (let ((x 1)) #f (define blah 3)) Currently, you get a message like this: unknown location: definition in expression context in subform blah of 3 With this patch, you get a message like this: /home/mhw/guile-modules/foo.scm:5:2: internal definition in a context where definitions are not allowed in form (define blah 3) Okay, here's the patch, with the syntax-pp.scm portion removed. Mark