def get_context_data(self, *args, **kwargs):
        '''
        Context:
            If GET parameters are given:
            - search_text
            - form (FilterBillsForm)
            - long_description
            - description
            - get_params
            Otherwise, the only context item is an unbound FilterBillsForm.

        Templates:
            - Are specified in subclasses.
        '''
        context = super(RelatedBillsList, self).get_context_data(*args,
                                                                 **kwargs)
        metadata = context['metadata']
        FilterBillsForm = get_filter_bills_form(metadata)

        if self.request.GET:
            form = FilterBillsForm(self.request.GET)
            search_text = form.data.get('search_text')
            context.update(search_text=search_text)
            context.update(form=FilterBillsForm(self.request.GET))

            # human readable description of search
            description = []
            if metadata:
                description.append(metadata['name'])
            else:
                description = ['Search All']
            long_description = []
            chamber = form.data.get('chamber')
            session = form.data.get('session')
            type = form.data.get('type')
            status = form.data.getlist('status')
            subjects = form.data.getlist('subjects')
            sponsor = form.data.get('sponsor__leg_id')
            if chamber:
                if metadata:
                    description.append(metadata['chambers'][chamber]['name']
                                      )
                else:
                    description.extend([chamber.title(), 'Chamber'])
            description.append((type or 'Bill') + 's')
            if session:
                description.append(
                    '(%s)' %
                    metadata['session_details'][session]['display_name']
                )
            if 'signed' in status:
                long_description.append('which have been signed into law')
            elif 'passed_upper' in status and 'passed_lower' in status:
                long_description.append('which have passed both chambers')
            elif 'passed_lower' in status:
                chamber_name = (metadata['chambers']['lower']['name']
                                if metadata else 'lower chamber')
                long_description.append('which have passed the ' +
                                        chamber_name)
            elif 'passed_upper' in status:
                chamber_name = (metadata['chambers']['upper']['name']
                                if metadata else 'upper chamber')
                long_description.append('which have passed the ' +
                                        chamber_name)
            if sponsor:
                leg = db.legislators.find_one({'_all_ids': sponsor},
                                              fields=('full_name', '_id'))
                leg = leg['full_name']
                long_description.append('sponsored by ' + leg)
            if subjects:
                long_description.append('related to ' + ', '.join(subjects))
            if search_text:
                long_description.append(u'containing the term "{0}"'.format(
                    search_text))
            context.update(long_description=long_description)
        else:
            if metadata:
                description = [metadata['name'], 'Bills']
            else:
                description = ['All Bills']
            context.update(form=FilterBillsForm())

        context.update(description=' '.join(description))

        # Add the correct path to paginated links.
        params = list(self.request.GET.lists())
        for k, v in params[:]:
            if k == 'page':
                params.remove((k, v))
        get_params = urllib.urlencode(params, doseq=True)
        context['get_params'] = get_params

        # Add the abbr.
        context['abbr'] = self.kwargs['abbr']
        return context