private List<TraceSession> applyFilters(List<TraceSession> pTraceSessions) {
    List<TraceSession> lResult = pTraceSessions;
    if (mInviteSessionsOnly) {
      lResult = new InviteSesionFilter(lResult).process();
    }
    if (mSessionId != null) {
      lResult = new SessionIdFilter(lResult, mSessionId).process();
    }
    if (mCallId != null) {
      lResult = new CallIdFilter(lResult, mCallId).process();
    }
    if (mB2BSipTagToken != null) {
      lResult = new B2BSipTagTokenFilter(lResult, mB2BSipTagToken).process();
    }
    if (mCallerPhoneNumber != null) {
      lResult = new CallerPhoneNumberFilter(lResult, mCallerPhoneNumber).process();
    }
    if (mCallerName != null) {
      lResult = new CallerNameFilter(lResult, mCallerName).process();
    }
    if (mDestPhoneNumber != null) {
      lResult = new DestinationPhoneNumberFilter(lResult, mDestPhoneNumber).process();
    }
    if (mTime != null) {
      lResult = new BeginEndTimeFilter(lResult,
                                       mTime.substring(0, mTime.indexOf("\\")),
                                       mTime.substring(mTime.indexOf("|") + 1)).process();
    }
    if (mErrorOnly) {
      lResult = new ErrorFilter(lResult).process();
    }

    // TODO here we should be able to apply many filters
    return lResult;
  }