Cleaned up
Got rid of the attributes merging mess
Removed useless caching
Added an assertion for set( )
Refactored methods caching
Switched back to the old memoization system
Note