public Request<DescribeServiceCertificatesRequest> marshall( DescribeServiceCertificatesRequest describeServiceCertificatesRequest ) {

    if (describeServiceCertificatesRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    final Request<DescribeServiceCertificatesRequest> request = new DefaultRequest<>(describeServiceCertificatesRequest, "EucalyptusServices");
    request.addParameter("Action", "DescribeServiceCertificates");
    request.addParameter("Version", "eucalyptus");

    if ( describeServiceCertificatesRequest.getFormat( ) != null ) {
      request.addParameter( "Format", describeServiceCertificatesRequest.getFormat( ) );
    }

    if ( describeServiceCertificatesRequest.getFingerprintDigest( ) != null ) {
      request.addParameter( "FingerprintDigest", describeServiceCertificatesRequest.getFingerprintDigest( ) );
    }

    final List<Filter> filtersList = describeServiceCertificatesRequest.getFilters( );
    int filtersListIndex = 1;

    for ( final Filter filtersListValue : filtersList ) {
      Filter filterMember = filtersListValue;
      if (filterMember != null) {
        if ( filterMember.getName( ) != null ) {
          request.addParameter( "Filter." + filtersListIndex + ".Name", StringUtils.fromString( filterMember.getName( ) ) );
        }

        if ( filterMember.getValues( ) != null ) {
          final List<String> valuesList = filterMember.getValues( );
          int valuesListIndex = 1;

          for ( final String valuesListValue : valuesList ) {
            if ( valuesListValue != null ) {
              request.addParameter("Filter." + filtersListIndex + ".Value." + valuesListIndex, StringUtils.fromString( valuesListValue ));
            }

            valuesListIndex++;
          }
        }
      }
      filtersListIndex++;
    }

    return request;
  }