- chain implementation