Hello all, I've cooked up a patch to help improve R6RS exception handling in Guile. As noted by Göran Weinholt in , the R6RS exception handlers in Guile are currently unable to catch native Guile exceptions. To fix this, the basic approach of this patch is to convert native Guile exceptions into R6RS conditions within the R6RS exception handlers. It's almost that simple, but there's one twist: if an R6RS exception handler chooses not to handle a given exception, it will call 'raise' again on the condition object, and here we must arrange to throw the original Guile exception again. We must do this because there's a lot of Guile code out there that can only handle native Guile exceptions, and which should not be broken by an R6RS exception handler somewhere in the middle of the call stack. We cope with this by including a special &guile condition object in the compound condition that is produced by conversion. Whenever 'raise' is applied to such a condition, it will use the native Guile 'throw' with the original KEY and ARGS stored in the &guile condition object. Still to do: Modify the core Guile routines where needed (especially I/O) to include enough information in exceptions to generate the standard R6RS condition objects. I'd be grateful for any feedback. Regards, Mark