Arbitrary attributes do over

Simpler implementation of #181 which addresses #165.