The cached items are stored in a linked list to facilitate a constant(*) time lru algorithm. I could use a separate wrapper object to avoid 'polluting' the objects to be cached but I decided that the extra object creation (and related gc strain) is not justified. Please have a look at the (very clean) source, and if you have a better idea let me know! regards, George Moschovitis (*) if you consider a Ruby Hash lookup constant.