add adam's linear version