@Override
    protected List<Avatar> doInBackground(Void... params) {
      // reuse cached avatars
      avatars = avatarManager.getAvatarList();

      // contains accounts who don`t have avatars yet
      List<Account> acts = avatarManager.getAccountsWithoutAvatars();

      // contains new avatars in order to persist them to database
      List<Avatar> newAvatars = new ArrayList<Avatar>(acts.size());

      // load avatars from server
      for (Account account : acts) {
        httpConnection = new SeafConnection(account);

        String avatarRawData = null;
        try {
          avatarRawData = httpConnection.getAvatar(account.getEmail(), avatarSize);
        } catch (SeafException e) {
          e.printStackTrace();
          return avatars;
        }

        Avatar avatar = avatarManager.parseAvatar(avatarRawData);
        if (avatar == null) continue;

        avatar.setSignature(account.getSignature());

        avatars.add(avatar);

        newAvatars.add(avatar);
      }

      // save new added avatars to database
      avatarManager.saveAvatarList(newAvatars);

      return avatars;
    }