added protection and genericity