def _search(self, which, term):
        """
        The real search method.

        :param which: 1 for anime, 2 for manga
        :param term: What to search for
        :rtype: list
        :return: list of :class:`Pymoe.Mal.Objects.Manga` or :class:`Pymoe.Mal.Objects.Anime` objects as per the type param.
        """
        url = self.apiurl + "{}/search.xml".format('anime' if which == 1 else 'manga')
        r = requests.get(url, params={'q': term},
                         auth=HTTPBasicAuth(self._username, self._password),
                         headers=self.header)
        if r.status_code != 200:
            return []
        data = ET.fromstring(r.text)
        final_list = []
        if which == 1:
            for item in data.findall('entry'):
                syn = item.find('synonyms').text.split(';') if item.find('synonyms').text else []
                final_list.append(Anime(
                    item.find('id').text,
                    title=item.find('title').text,
                    synonyms=syn.append(item.find('english').text),
                    episodes=item.find('episodes').text,
                    average=item.find('score').text,
                    anime_start=item.find('start_date').text,
                    anime_end=item.find('end_date').text,
                    synopsis=html.unescape(item.find('synopsis').text.replace('<br />', '')) if item.find(
                        'synopsis').text else None,
                    image=item.find('image').text,
                    status_anime=item.find('status').text,
                    type=item.find('type').text
                ))
            return NT_SEARCH_ANIME(
                airing=[x for x in final_list if x.status.series == "Currently Airing"],
                finished=[x for x in final_list if x.status.series == "Finished Airing"],
                unaired=[x for x in final_list if x.status.series == "Not Yet Aired"],
                dropped=[x for x in final_list if x.status.series == "Dropped"],
                planned=[x for x in final_list if x.status.series == "Plan to Watch"]
            )
        else:
            for item in data.findall('entry'):
                syn = item.find('synonyms').text.split(';') if item.find('synonyms').text else []
                final_list.append(Manga(
                    item.find('id').text,
                    title=item.find('title').text,
                    synonyms=syn.append(item.find('english').text),
                    chapters=item.find('chapters').text,
                    volumes=item.find('volumes').text,
                    average=item.find('score').text,
                    manga_start=item.find('start_date').text,
                    manga_end=item.find('end_date').text,
                    synopsis=html.unescape(item.find('synopsis').text.replace('<br />', '')) if item.find(
                        'synopsis').text else None,
                    image=item.find('image').text,
                    status_manga=item.find('status').text,
                    type=item.find('type').text
                ))
            return NT_SEARCH_MANGA(
                publishing=[x for x in final_list if x.status.series == "Publishing"],
                finished=[x for x in final_list if x.status.series == "Finished"],
                unpublished=[x for x in final_list if x.status.series == "Not Yet Published"],
                dropped=[x for x in final_list if x.status.series == "Dropped"],
                planned=[x for x in final_list if x.status.series == "Plan to Read"]
            )