Hi there! This patch updates some derived conditional forms (and do and and-let*) to support definitions in expression context. Meaning it makes this valid code: (cond ((pred? arg) (define a (something arg)) (when (error-case a) (error "a is broken")) (define b (something2 a)) (when (= 3 *log-level*) (display "logging something1 and 2 as successful")) (define c (something3 b a)) (when (odd? c) (error "something went wrong in something3")) c) (else ;;chosen by fair dice roll. Guaranteed to be random 4))) While awful, is sometimes what the world makes us do. The change means cond, case, when and unless behaves like it does in racket. Do was below case, so I changed that as well, and will actually become yet another way guile is superior to racket. I did also change the documentation, but I learned english by watching Beverly Hills cop, so that might need some fine touches by a capable english speaker. Best regards Linus Björnstam