adaptation from :