bug fix: make abstract class non-instantiatble by __metaclass__ = ABCMeta