|  | @@ -265,26 +265,25 @@ class Celery(object):
 | 
	
		
			
				|  |  |                      sum([len(args), len(opts)])))
 | 
	
		
			
				|  |  |          return inner_create_task_cls(**opts)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    def _task_from_fun(self, fun, name=None, **options):
 | 
	
		
			
				|  |  | +    def _task_from_fun(self, fun, name=None, base=None, bind=False, **options):
 | 
	
		
			
				|  |  |          if not self.finalized and not self.autofinalize:
 | 
	
		
			
				|  |  |              raise RuntimeError('Contract breach: app not finalized')
 | 
	
		
			
				|  |  | -        base = options.pop('base', None) or self.Task
 | 
	
		
			
				|  |  | -        bind = options.pop('bind', False)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          name = name or gen_task_name(self, fun.__name__, fun.__module__)
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        T = type(fun.__name__, (base, ), dict({
 | 
	
		
			
				|  |  | -            'app': self,
 | 
	
		
			
				|  |  | -            'name': name,
 | 
	
		
			
				|  |  | -            'run': fun if bind else staticmethod(fun),
 | 
	
		
			
				|  |  | -            '_decorated': True,
 | 
	
		
			
				|  |  | -            '__doc__': fun.__doc__,
 | 
	
		
			
				|  |  | -            '__module__': fun.__module__,
 | 
	
		
			
				|  |  | -            '__wrapped__': fun}, **options))()
 | 
	
		
			
				|  |  | -        if T.name not in self._tasks:
 | 
	
		
			
				|  |  | -            self._tasks.register(T)
 | 
	
		
			
				|  |  | -            T.bind(self)  # connects task to this app
 | 
	
		
			
				|  |  | -        task = self._tasks[T.name]  # return global instance.
 | 
	
		
			
				|  |  | +        base = base or self.Task
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        if name not in self._tasks:
 | 
	
		
			
				|  |  | +            task = type(fun.__name__, (base, ), dict({
 | 
	
		
			
				|  |  | +                'app': self,
 | 
	
		
			
				|  |  | +                'name': name,
 | 
	
		
			
				|  |  | +                'run': fun if bind else staticmethod(fun),
 | 
	
		
			
				|  |  | +                '_decorated': True,
 | 
	
		
			
				|  |  | +                '__doc__': fun.__doc__,
 | 
	
		
			
				|  |  | +                '__module__': fun.__module__,
 | 
	
		
			
				|  |  | +                '__wrapped__': fun}, **options))()
 | 
	
		
			
				|  |  | +            self._tasks[task.name] = task
 | 
	
		
			
				|  |  | +            task.bind(self)  # connects task to this app
 | 
	
		
			
				|  |  | +        else:
 | 
	
		
			
				|  |  | +            task = self._tasks[name]
 | 
	
		
			
				|  |  |          return task
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def finalize(self, auto=False):
 |