added clone
added abstract class to keep dry
added abstract class to keep dry
added model property filter