|  | @@ -748,7 +748,7 @@ class chain(Signature):
 | 
	
		
			
				|  |  |                  tasks = d['kwargs']['tasks'] = list(tasks)
 | 
	
		
			
				|  |  |              # First task must be signature object to get app
 | 
	
		
			
				|  |  |              tasks[0] = maybe_signature(tasks[0], app=app)
 | 
	
		
			
				|  |  | -        return _upgrade(d, chain(*tasks, app=app, **d['options']))
 | 
	
		
			
				|  |  | +        return _upgrade(d, chain(tasks, app=app, **d['options']))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      @property
 | 
	
		
			
				|  |  |      def app(self):
 | 
	
	
		
			
				|  | @@ -761,6 +761,9 @@ class chain(Signature):
 | 
	
		
			
				|  |  |          return app or current_app
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def __repr__(self):
 | 
	
		
			
				|  |  | +        if not self.tasks:
 | 
	
		
			
				|  |  | +            return '<{0}@{1:#x}: empty>'.format(
 | 
	
		
			
				|  |  | +                type(self).__name__, id(self))
 | 
	
		
			
				|  |  |          return ' | '.join(repr(t) for t in self.tasks)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -865,7 +868,7 @@ def _maybe_group(tasks, app):
 | 
	
		
			
				|  |  |      if isinstance(tasks, dict):
 | 
	
		
			
				|  |  |          tasks = signature(tasks, app=app)
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    if isinstance(tasks, group):
 | 
	
		
			
				|  |  | +    if isinstance(tasks, (group, chain)):
 | 
	
		
			
				|  |  |          tasks = tasks.tasks
 | 
	
		
			
				|  |  |      elif isinstance(tasks, abstract.CallableSignature):
 | 
	
		
			
				|  |  |          tasks = [tasks]
 | 
	
	
		
			
				|  | @@ -1199,6 +1202,7 @@ class chord(Signature):
 | 
	
		
			
				|  |  |      def apply_async(self, args=(), kwargs={}, task_id=None,
 | 
	
		
			
				|  |  |                      producer=None, publisher=None, connection=None,
 | 
	
		
			
				|  |  |                      router=None, result_cls=None, **options):
 | 
	
		
			
				|  |  | +        kwargs = kwargs or {}
 | 
	
		
			
				|  |  |          args = (tuple(args) + tuple(self.args)
 | 
	
		
			
				|  |  |                  if args and not self.immutable else self.args)
 | 
	
		
			
				|  |  |          body = kwargs.pop('body', None) or self.kwargs['body']
 |