Hello, Currently, the use (let ((arr (vector 0 1 2 3 4 5 6))) (setf (map-elt (cl-subseq arr 3) 0) 27) arr) expands to (let ((arr (vector 0 1 2 3 4 5 6))) (let* ((v arr)) (condition-case nil (with-no-warnings (map-put! (cl-subseq v 3) 0 27 nil)) (map-not-inplace (let* ((new (map-insert (cl-subseq v 3) 0 27))) (progn (cl-replace v new :start1 3 :end1 nil) new)) 27))) arr) which does not modify the original variable `arr` due to how `map-put!` is being used. With the attached patch, it would expand to (let ((arr (vector 0 1 2 3 4 5 6))) (let* ((v arr)) (condition-case nil (with-no-warnings (let* ((m (cl-subseq v 3))) (progn (map-put! m 0 27 nil) (let* ((new m)) (progn (cl-replace v new :start1 3 :end1 nil) new)) 27))) (map-not-inplace (let* ((new (map-insert (cl-subseq v 3) 0 27))) (progn (cl-replace v new :start1 3 :end1 nil) new)) 27))) arr) which correctly sets the value using `cl-replace` as the setter for `cl-subseq`. Thank you.