still need to finish a bunch of substitution.