add extend
bugfix + enhance