general decorator