modify alloc method