Consider this source file: test.scm: (use-modules (language python def) (system syntax internal) ((oop dict) #:select (slask-it))) (define-syntax m (lambda (x) (syntax-case x () ((_ n m y) (let* ((xx (syntax-expression x)) (yy (pk 'yy (source-properties xx))) (zz (syntax-expression #'y)) (ww (pk 'ww (source-properties zz))) (nn (assoc 'line yy)) (mm (assoc 'column yy)) (ii (assoc 'line ww)) (jj (assoc 'column ww))) (if nn (set-cdr! nn (syntax->datum #'n))) (if mm (set-cdr! mm (syntax->datum #'m))) (if ii (set-cdr! ii (syntax->datum #'n))) (if jj (set-cdr! jj (syntax->datum #'m))) (set-source-properties! xx (pk yy)) (set-source-properties! zz (pk ww)) #'y))))) (define f (slask-it (lambda () 1))) ;;----------------------------------------------------- Never mind the m macro and concentrate on the last define of f. slask-it is an imported function and equivalent to (lambda (x) x) (just to make sure to annynmous f. loading this source file an d quiring f lead to cheme@(guile-user)> f $10 = # Why 4:2? the line number is much higher and column number as well. Regards Stefan