Use let* and funcall instead of cl-labels (resolves #3)