Hello Andy, > $ /opt/guile-1.8/bin/guile > guile> (use-modules (oop goops)) > guile> (define-class () > ... (width #:accessor width #:init-keyword #:width #:init-value 0)) > guile> (define-class ()) > guile> (define b (make )) > guile> (width b) > 0 > guile> (set! (width b) 10) > guile> (width b) > 10 > guile> (define-method ((setter width) (self ) width) (next-method)) > guile> (set! (width b) 10) > > Backtrace: > In current input: > 10: 0* [setter:width #< 7f795ed527e0> 10] > ?: 1 (let* ((next-method (goops:make-next-method self width))) > (next-method)) > > : In expression (let* (#) (next-method)): > : No next method when calling #< setter:width (2)> > with arguments (#< 7f795ed527e0> 10) > ABORT: (goops-error) With respect to the above example(*), I _do_ get the expected result here, using the latest stable-2.0: please leave it as it is, it _is_ correct: I'm writing back because you pretend it should not work, I got confused... but it does, as it should, thanks god, the opposite would be a real disaster Cheers, David (*) not to be confused with the setter inheritance bug I mentioned, still is present in the latest stable, so I [just[ reported it. --8<---------------cut here---------------start------------->8--- (define-module (a) #:use-module (oop goops) #:export ( !width)) (define-class () (width #:accessor !width #:init-keyword #:width #:init-value 0)) (define-method ((setter !width) (self ) width) ;; here comes complex code, computing earth orbit, captain's age... (pk "this is !width setter method, hello!") (slot-set! self 'width width)) --8<---------------cut here---------------start------------->8--- --8<---------------cut here---------------start------------->8--- (define-module (b) #:use-module (oop goops) #:use-module (a) #:export () #:re-export (!width)) (define-class ()) (define-method ((setter !width) (self ) width) (next-method) ;; here comes 'extra' work instances must 'run' (pk "this is !width setter method, hello!") (!width self)) --8<---------------cut here---------------start------------->8--- GNU Guile 2.0.11.114-649ec Copyright (C) 1995-2014 Free Software Foundation, Inc. Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'. This program is free software, and you are welcome to redistribute it under certain conditions; type `,show c' for details. Enter `,help' for help. scheme@(guile-user)> scheme@(guile-user)> scheme@(guile-user)> ,use (oop goops) scheme@(guile-user)> ,use (b) ;;; note: source file ./b.scm ;;; newer than compiled /home/david/.cache/guile/ccache/2.0-LE-8-2.0/usr/alto/projects/guile-tests/goops/setter-inheritance-bug/b.scm.go ;;; note: auto-compilation is enabled, set GUILE_AUTO_COMPILE=0 ;;; or pass the --no-auto-compile argument to disable. ;;; compiling ./b.scm ;;; note: source file ./a.scm ;;; newer than compiled /home/david/.cache/guile/ccache/2.0-LE-8-2.0/usr/alto/projects/guile-tests/goops/setter-inheritance-bug/a.scm.go ;;; compiling ./a.scm ;;; compiled /home/david/.cache/guile/ccache/2.0-LE-8-2.0/usr/alto/projects/guile-tests/goops/setter-inheritance-bug/a.scm.go ;;; compiled /home/david/.cache/guile/ccache/2.0-LE-8-2.0/usr/alto/projects/guile-tests/goops/setter-inheritance-bug/b.scm.go scheme@(guile-user)> (set! (!width (make )) 20) ;;; ("this is !width setter method, hello!") ;;; ("this is !width setter method, hello!") $2 = 20 scheme@(guile-user)>