split out attribute groups
synthetic attribute
some refactoring
fix const ref binding to use topological order