diff --git a/components/app/src/main/java/org/trellisldp/app/config/CORSConfiguration.java b/components/app/src/main/java/org/trellisldp/app/config/CORSConfiguration.java
index b0ad8f96b..477829184 100644
--- a/components/app/src/main/java/org/trellisldp/app/config/CORSConfiguration.java
+++ b/components/app/src/main/java/org/trellisldp/app/config/CORSConfiguration.java
@@ -32,11 +32,11 @@ public class CORSConfiguration {
             "GET", "HEAD", "OPTIONS", "POST");
 
     private List<String> allowHeaders = asList("Content-Type", "Link", "Accept",
-            "Accept-Datetime", "Prefer", "Want-Digest", "Slug", "Digest", "Origin");
+            "Accept-Datetime", "Prefer", "Slug", "Origin");
 
     private List<String> exposeHeaders = asList("Content-Type", "Link",
             "Memento-Datetime", "Preference-Applied", "Location",
-            "Accept-Patch", "Accept-Post", "Digest", "Accept-Ranges", "ETag", "Vary");
+            "Accept-Patch", "Accept-Post", "Accept-Ranges", "ETag", "Vary");
 
     private boolean allowCredentials = true;
 
diff --git a/components/app/src/test/java/org/trellisldp/app/config/TrellisConfigurationTest.java b/components/app/src/test/java/org/trellisldp/app/config/TrellisConfigurationTest.java
index 01495586b..5da8352f1 100644
--- a/components/app/src/test/java/org/trellisldp/app/config/TrellisConfigurationTest.java
+++ b/components/app/src/test/java/org/trellisldp/app/config/TrellisConfigurationTest.java
@@ -143,7 +143,7 @@ public void testConfigurationCORS1() throws Exception {
 
         assertTrue(config.getCors().getEnabled(), "CORS not enabled!");
         assertTrue(config.getCors().getAllowOrigin().contains("*"), "'*' not in CORS allow-origin!");
-        assertTrue(config.getCors().getAllowHeaders().contains("Want-Digest"), "want-digest not in CORS allow-headers");
+        assertTrue(config.getCors().getAllowHeaders().contains("Link"), "Link not in CORS allow-headers");
         assertTrue(config.getCors().getAllowMethods().contains("PUT"), "PUT not in CORS allow-methods!");
         assertTrue(config.getCors().getExposeHeaders().contains("Memento-Datetime"),
                 "memento-datetime missing from CORS expose-headers!");
diff --git a/components/app/src/test/resources/config1.yml b/components/app/src/test/resources/config1.yml
index 5f8f0c036..7de857e57 100644
--- a/components/app/src/test/resources/config1.yml
+++ b/components/app/src/test/resources/config1.yml
@@ -77,7 +77,6 @@ cors:
         - "PATCH"
     allowHeaders:
         - "Content-Type"
-        - "Want-Digest"
         - "Link"
     exposeHeaders:
         - "Link"
diff --git a/components/file/build.gradle b/components/file/build.gradle
index f0689a53b..0fe565a9f 100644
--- a/components/file/build.gradle
+++ b/components/file/build.gradle
@@ -12,7 +12,6 @@ dependencies {
     api("org.glassfish.hk2.external:javax.inject:$javaxInjectVersion")
     api project(':trellis-api')
 
-    implementation("commons-codec:commons-codec:$commonsCodecVersion")
     implementation("commons-io:commons-io:$commonsIoVersion")
     implementation("org.apache.commons:commons-rdf-jena:$commonsRdfVersion") {
         exclude group: 'org.apache.jena', module: 'jena-osgi'
diff --git a/components/file/src/main/java/module-info.java b/components/file/src/main/java/module-info.java
index d9735ea7f..642b98d59 100644
--- a/components/file/src/main/java/module-info.java
+++ b/components/file/src/main/java/module-info.java
@@ -17,7 +17,6 @@
     requires transitive org.trellisldp.api;
     requires transitive org.trellisldp.vocabulary;
 
-    requires org.apache.commons.codec;
     requires org.apache.commons.io;
     requires org.apache.commons.rdf.api;
     requires org.apache.commons.rdf.jena;
diff --git a/components/file/src/main/java/org/trellisldp/file/FileBinaryService.java b/components/file/src/main/java/org/trellisldp/file/FileBinaryService.java
index 4081ac5cc..796088c88 100644
--- a/components/file/src/main/java/org/trellisldp/file/FileBinaryService.java
+++ b/components/file/src/main/java/org/trellisldp/file/FileBinaryService.java
@@ -16,34 +16,19 @@
 import static java.nio.file.Files.copy;
 import static java.nio.file.Files.delete;
 import static java.nio.file.StandardCopyOption.REPLACE_EXISTING;
-import static java.util.Arrays.asList;
 import static java.util.Objects.requireNonNull;
 import static java.util.Optional.of;
 import static java.util.ServiceLoader.load;
 import static java.util.concurrent.CompletableFuture.supplyAsync;
-import static java.util.stream.Collectors.toSet;
-import static org.apache.commons.codec.digest.DigestUtils.updateDigest;
-import static org.apache.commons.codec.digest.MessageDigestAlgorithms.MD2;
-import static org.apache.commons.codec.digest.MessageDigestAlgorithms.MD5;
-import static org.apache.commons.codec.digest.MessageDigestAlgorithms.SHA3_256;
-import static org.apache.commons.codec.digest.MessageDigestAlgorithms.SHA3_384;
-import static org.apache.commons.codec.digest.MessageDigestAlgorithms.SHA3_512;
-import static org.apache.commons.codec.digest.MessageDigestAlgorithms.SHA_1;
-import static org.apache.commons.codec.digest.MessageDigestAlgorithms.SHA_256;
-import static org.apache.commons.codec.digest.MessageDigestAlgorithms.SHA_384;
-import static org.apache.commons.codec.digest.MessageDigestAlgorithms.SHA_512;
 import static org.slf4j.LoggerFactory.getLogger;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.UncheckedIOException;
 import java.net.URI;
-import java.security.MessageDigest;
 import java.util.Iterator;
 import java.util.ServiceLoader;
-import java.util.Set;
 import java.util.concurrent.CompletionStage;
 import java.util.function.Supplier;
 
@@ -61,24 +46,6 @@
 
 /**
  * A {@link BinaryService} implementation that stores LDP-NR resources as files on a local filesystem.
- *
- * <p>This service supports the following digest algorithms:
- * <ul>
- * <li>MD5</li>
- * <li>MD2</li>
- * <li>SHA</li>
- * <li>SHA-1</li>
- * <li>SHA-256</li>
- * <li>SHA-384</li>
- * <li>SHA-512</li>
- * </ul>
- *
- * <p>When running under JDK 9+, the following additional digest algorithms are supported:
- * <ul>
- * <li>SHA3-256</li>
- * <li>SHA3-384</li>
- * <li>SHA3-512</li>
- * </ul>
  */
 public class FileBinaryService implements BinaryService {
 
@@ -92,14 +59,9 @@ public class FileBinaryService implements BinaryService {
     public static final String CONFIG_FILE_BINARY_LENGTH = "trellis.file.binary.length";
 
     private static final Logger LOGGER = getLogger(FileBinaryService.class);
-    private static final String SHA = "SHA";
     private static final int DEFAULT_HIERARCHY = 3;
     private static final int DEFAULT_LENGTH = 2;
 
-    private static final Set<String> algorithms = asList(MD5, MD2, SHA, SHA_1, SHA_256, SHA_384, SHA_512,
-            SHA3_256, SHA3_384, SHA3_512).stream()
-        .collect(toSet());
-
     private final String basePath;
     private final Supplier<String> idSupplier;
 
@@ -176,16 +138,6 @@ public CompletionStage<Void> setContent(final BinaryMetadata metadata, final Inp
         });
     }
 
-    @Override
-    public CompletionStage<MessageDigest> calculateDigest(final IRI identifier, final MessageDigest algorithm) {
-        return supplyAsync(() -> computeDigest(identifier, algorithm));
-    }
-
-    @Override
-    public Set<String> supportedAlgorithms() {
-        return algorithms;
-    }
-
     @Override
     public String generateIdentifier() {
         return idSupplier.get();
@@ -198,14 +150,6 @@ private File getFileFromIdentifier(final IRI identifier) {
             .orElseThrow(() -> new IllegalArgumentException("Could not create File object from IRI: " + identifier));
     }
 
-    private MessageDigest computeDigest(final IRI identifier, final MessageDigest algorithm) {
-        try (final InputStream input = new FileInputStream(getFileFromIdentifier(identifier))) {
-            return updateDigest(algorithm, input);
-        } catch (final IOException ex) {
-            throw new UncheckedIOException("Error computing digest", ex);
-        }
-    }
-
     private static String trimStart(final String str, final String trim) {
         if (str.startsWith(trim)) {
             return trimStart(str.substring(trim.length()), trim);
diff --git a/components/file/src/test/java/org/trellisldp/file/FileBinaryServiceTest.java b/components/file/src/test/java/org/trellisldp/file/FileBinaryServiceTest.java
index 3d215042a..57385969c 100644
--- a/components/file/src/test/java/org/trellisldp/file/FileBinaryServiceTest.java
+++ b/components/file/src/test/java/org/trellisldp/file/FileBinaryServiceTest.java
@@ -14,10 +14,7 @@
 package org.trellisldp.file;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
-import static java.util.Base64.getEncoder;
-import static org.apache.commons.codec.digest.DigestUtils.getDigest;
 import static org.junit.jupiter.api.Assertions.*;
-import static org.junit.jupiter.api.condition.JRE.JAVA_8;
 import static org.mockito.Mockito.mock;
 
 import java.io.ByteArrayInputStream;
@@ -25,7 +22,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.math.BigInteger;
-import java.security.MessageDigest;
 import java.security.SecureRandom;
 import java.util.concurrent.CompletionException;
 
@@ -36,7 +32,6 @@
 import org.junit.jupiter.api.AfterAll;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.condition.DisabledOnJre;
 import org.trellisldp.api.Binary;
 import org.trellisldp.api.BinaryMetadata;
 import org.trellisldp.api.BinaryService;
@@ -65,15 +60,6 @@ public static void cleanUp() {
         System.clearProperty(FileBinaryService.CONFIG_FILE_BINARY_BASE_PATH);
     }
 
-    @Test
-    public void testSupportedAlgorithms() {
-        final BinaryService service = new FileBinaryService();
-        assertTrue(service.supportedAlgorithms().contains("SHA"));
-        assertTrue(service.supportedAlgorithms().contains("SHA-1"));
-        assertTrue(service.supportedAlgorithms().contains("SHA-256"));
-        assertTrue(service.supportedAlgorithms().contains("MD5"));
-    }
-
     @Test
     public void testFilePurge() {
         final BinaryService service = new FileBinaryService();
@@ -171,38 +157,6 @@ public void testGetFileSkipContentError() throws Exception {
             }).toCompletableFuture().join());
     }
 
-    @Test
-    public void testBase64Digest() throws IOException {
-        final BinaryService service = new FileBinaryService();
-        assertEquals("oZ1Y1O/8vs39RH31fh9lrA==", service.calculateDigest(file, getDigest("MD5"))
-                        .thenApply(MessageDigest::digest).thenApply(getEncoder()::encodeToString)
-                        .toCompletableFuture().join(), "Bad MD5 digest!");
-        assertEquals("QJuYLse9SK/As177lt+rSfixyH0=", service.calculateDigest(file, getDigest("SHA-1"))
-                        .thenApply(MessageDigest::digest).thenApply(getEncoder()::encodeToString)
-                        .toCompletableFuture().join(), "Bad SHA digest!");
-        assertThrows(CompletionException.class, () ->
-                service.calculateDigest(rdf.createIRI("file:///" + randomFilename()), getDigest("MD5"))
-                .toCompletableFuture().join(), "Computing digest on invalid file should throw an exception!");
-    }
-
-    @Test
-    @DisabledOnJre(JAVA_8)
-    public void testJdk9Digests() throws IOException {
-        final BinaryService service = new FileBinaryService();
-        assertEquals("FQgyH2yU2NhyMTZ7YDDKwV5vcWUBM1zq0uoIYUiHH+4=",
-                        service.calculateDigest(file, getDigest("SHA3-256")).thenApply(MessageDigest::digest)
-                                        .thenApply(getEncoder()::encodeToString).toCompletableFuture().join(),
-                        "Bad SHA3-256 digest!");
-        assertEquals("746UDLrFXM61gzI0FnoVT2S0Z7EmQUfhHnoSYwkR2MHzbBe6j9rMigQBfR8ApZUA",
-                        service.calculateDigest(file, getDigest("SHA3-384")).thenApply(MessageDigest::digest)
-                                        .thenApply(getEncoder()::encodeToString).toCompletableFuture().join(),
-                        "Bad SHA3-384 digest!");
-        assertEquals("Ecu/R0kV4eL0J/VOpyVA2Lz0T6qsJj9ioQ+QorJDztJeMj6uhf6zqyhZnu9zMYiwrkX8U4oWiZMDT/0fWjOyYg==",
-                        service.calculateDigest(file, getDigest("SHA3-512")).thenApply(MessageDigest::digest)
-                                        .thenApply(getEncoder()::encodeToString).toCompletableFuture().join(),
-                        "Bad SHA3-512 digest!");
-    }
-
     @Test
     public void testBadIdentifier() {
         final BinaryService service = new FileBinaryService();
diff --git a/components/test/src/main/java/org/trellisldp/test/LdpBinaryTests.java b/components/test/src/main/java/org/trellisldp/test/LdpBinaryTests.java
index 2e231883d..2164854ae 100644
--- a/components/test/src/main/java/org/trellisldp/test/LdpBinaryTests.java
+++ b/components/test/src/main/java/org/trellisldp/test/LdpBinaryTests.java
@@ -23,9 +23,7 @@
 import static org.junit.jupiter.api.Assertions.*;
 import static org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS;
 import static org.trellisldp.api.TrellisUtils.getInstance;
-import static org.trellisldp.http.core.HttpConstants.DIGEST;
 import static org.trellisldp.http.core.HttpConstants.SLUG;
-import static org.trellisldp.http.core.HttpConstants.WANT_DIGEST;
 import static org.trellisldp.http.core.RdfMediaType.APPLICATION_SPARQL_UPDATE;
 import static org.trellisldp.http.core.RdfMediaType.TEXT_TURTLE_TYPE;
 import static org.trellisldp.test.TestUtils.readEntityAsGraph;
@@ -127,23 +125,6 @@ default void testPostBinary() {
         }
     }
 
-    /**
-     * Test creating a new binary via POST with a digest header.
-     */
-    @Test
-    @DisplayName("Test creating a new binary via POST with a digest header")
-    default void testPostBinaryWithDigest() {
-        // POST an LDP-NR
-        try (final Response res = target().request().header(DIGEST, "md5=bUMuG430lSc5B2PWyoNIgA==")
-                .header(SLUG, generateRandomValue(getClass().getSimpleName()))
-                .post(entity(CONTENT, TEXT_PLAIN))) {
-            assertAll("Check POSTing LDP-NR with digest", checkNonRdfResponse(res, null));
-            final String resource = res.getLocation().toString();
-            assertTrue(resource.startsWith(getBaseURL()), "Check the response location");
-            assertTrue(resource.length() > getBaseURL().length(), "Check for a nested response location");
-        }
-    }
-
     /**
      * Test modifying a binary's description via PATCH.
      */
@@ -211,44 +192,4 @@ default void testBinaryIsInContainer() {
                         rdf.createIRI(getResourceLocation())), "Check for an ldp:contains triple");
         }
     }
-
-    /**
-     * Test that the SHA digest is generated.
-     */
-    @Test
-    @DisplayName("Test that the SHA digest is generated")
-    default void testBinaryWantDigestSha() {
-        // Test the SHA-1 algorithm
-        try (final Response res = target(getResourceLocation()).request().header(WANT_DIGEST, "SHA,MD5").get()) {
-            assertAll("Check binary with SHA-1 digest", checkNonRdfResponse(res, TEXT_PLAIN_TYPE));
-            assertEquals("sha=Z5pg2cWB1IqkKKMjh57cQKAeKp0=", res.getHeaderString(DIGEST), "Check the SHA digest value");
-        }
-    }
-
-    /**
-     * Test that the SHA-256 digest is generated.
-     */
-    @Test
-    @DisplayName("Test that the SHA-256 digest is generated")
-    default void testBinaryWantDigestSha256() {
-        // Test the SHA-256 algorithm
-        try (final Response res = target(getResourceLocation()).request().header(WANT_DIGEST, "SHA-256").get()) {
-            assertAll("Check binary with SHA-256 digest", checkNonRdfResponse(res, TEXT_PLAIN_TYPE));
-            assertEquals("sha-256=wZXqBpAjgZLSoADF419CRpJCurDcagOwnb/8VAiiQXA=", res.getHeaderString(DIGEST),
-                    "Check the SHA-256 digest value");
-        }
-    }
-
-    /**
-     * Test that an unknown digest is ignored.
-     */
-    @Test
-    @DisplayName("Test that an unknown digest is ignored")
-    default void testBinaryWantDigestUnknown() {
-        // Test an unknown digest algorithm
-        try (final Response res = target(getResourceLocation()).request().header(WANT_DIGEST, "FOO").get()) {
-            assertAll("Check binary with unknown digest", checkNonRdfResponse(res, TEXT_PLAIN_TYPE));
-            assertNull(res.getHeaderString(DIGEST), "Check that no Digest header is present");
-        }
-    }
 }
diff --git a/core/api/src/main/java/org/trellisldp/api/BinaryService.java b/core/api/src/main/java/org/trellisldp/api/BinaryService.java
index f11ac457c..6e0fb666b 100644
--- a/core/api/src/main/java/org/trellisldp/api/BinaryService.java
+++ b/core/api/src/main/java/org/trellisldp/api/BinaryService.java
@@ -14,9 +14,6 @@
 package org.trellisldp.api;
 
 import java.io.InputStream;
-import java.security.DigestInputStream;
-import java.security.MessageDigest;
-import java.util.Set;
 import java.util.concurrent.CompletionStage;
 
 import org.apache.commons.rdf.api.IRI;
@@ -39,21 +36,6 @@ public interface BinaryService extends RetrievalService<Binary> {
      */
     CompletionStage<Void> setContent(BinaryMetadata metadata, InputStream stream);
 
-    /**
-     * Set the content for a binary object using a digest algorithm.
-     *
-     * @implSpec The default implementation will compute a digest while processing the {@code InputStream}.
-     * @param metadata the binary metadata
-     * @param stream the context
-     * @param algorithm the digest algorithm
-     * @return the new completion stage containing the server-computed digest.
-     */
-    default CompletionStage<MessageDigest> setContent(final BinaryMetadata metadata, final InputStream stream,
-                    final MessageDigest algorithm) {
-        final DigestInputStream input = new DigestInputStream(stream, algorithm);
-        return setContent(metadata, input).thenApply(future -> input.getMessageDigest());
-    }
-
     /**
      * Purge the content from its corresponding datastore.
      *
@@ -65,24 +47,6 @@ default CompletionStage<MessageDigest> setContent(final BinaryMetadata metadata,
      */
     CompletionStage<Void> purgeContent(IRI identifier);
 
-    /**
-     * Calculate the digest for a binary object.
-     *
-     * @apiNote As per RFC 3230, the digest value is calculated over the entire resource,
-     *          not just the HTTP payload.
-     * @param identifier the identifier
-     * @param algorithm the algorithm
-     * @return the new completion stage containing a computed digest for the binary resource
-     */
-    CompletionStage<MessageDigest> calculateDigest(IRI identifier, MessageDigest algorithm);
-
-    /**
-     * Get a list of supported algorithms.
-     *
-     * @return the supported digest algorithms
-     */
-    Set<String> supportedAlgorithms();
-
     /**
      * Get a new identifier.
      *
diff --git a/core/api/src/test/java/org/trellisldp/api/BinaryServiceTest.java b/core/api/src/test/java/org/trellisldp/api/BinaryServiceTest.java
index 2fd473936..b0fe59d03 100644
--- a/core/api/src/test/java/org/trellisldp/api/BinaryServiceTest.java
+++ b/core/api/src/test/java/org/trellisldp/api/BinaryServiceTest.java
@@ -14,9 +14,7 @@
 package org.trellisldp.api;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
-import static java.util.Base64.getEncoder;
 import static java.util.concurrent.CompletableFuture.completedFuture;
-import static org.apache.commons.io.IOUtils.readLines;
 import static org.junit.jupiter.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
@@ -25,7 +23,6 @@
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.security.MessageDigest;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.rdf.api.IRI;
@@ -53,8 +50,6 @@ public class BinaryServiceTest {
     @BeforeEach
     public void setUp() {
         initMocks(this);
-        doCallRealMethod().when(mockBinaryService).setContent(any(BinaryMetadata.class),
-                any(InputStream.class), any(MessageDigest.class));
     }
 
     @Test
@@ -67,20 +62,4 @@ public void testGetContent() throws IOException {
             assertEquals("FooBar", IOUtils.toString(content, UTF_8), "Binary content did not match");
         }
     }
-
-    @Test
-    public void testSetContent() throws Exception {
-        final ByteArrayInputStream inputStream = new ByteArrayInputStream("FooBar".getBytes(UTF_8));
-        when(mockBinaryService.setContent(any(BinaryMetadata.class), any(InputStream.class)))
-            .thenAnswer(inv -> {
-                readLines((InputStream) inv.getArguments()[1], UTF_8);
-                return completedFuture(null);
-            });
-        assertDoesNotThrow(mockBinaryService
-                        .setContent(BinaryMetadata.builder(identifier).build(), inputStream,
-                                        MessageDigest.getInstance("MD5"))
-                        .thenApply(MessageDigest::digest).thenApply(getEncoder()::encodeToString)
-                        .thenAccept(digest -> assertEquals("8yom4qOoqjOM13tuEmPFNQ==", digest))
-                        .toCompletableFuture()::join);
-    }
 }
diff --git a/core/http/src/main/java/org/trellisldp/http/CrossOriginResourceSharingFilter.java b/core/http/src/main/java/org/trellisldp/http/CrossOriginResourceSharingFilter.java
index 1f2416da5..930ffbfa0 100644
--- a/core/http/src/main/java/org/trellisldp/http/CrossOriginResourceSharingFilter.java
+++ b/core/http/src/main/java/org/trellisldp/http/CrossOriginResourceSharingFilter.java
@@ -90,10 +90,10 @@ private CrossOriginResourceSharingFilter(final Configuration config) {
              populateFieldNames(config.getOrDefault(CONFIG_HTTP_CORS_ALLOW_METHODS,
                      "GET,HEAD,OPTIONS,POST,PUT,PATCH,DELETE")),
              populateFieldNames(config.getOrDefault(CONFIG_HTTP_CORS_ALLOW_HEADERS,
-                     "Content-Type,Link,Accept,Accept-DateTIme,Prefer,Want-Digest,Slug,Digest,Origin")),
+                     "Content-Type,Link,Accept,Accept-DateTime,Prefer,Slug,Origin")),
              populateFieldNames(config.getOrDefault(CONFIG_HTTP_CORS_EXPOSE_HEADERS,
                      "Content-Type,Link,Memento-Datetime,Preference-Applied,Location,Accept-Patch,Accept-Post," +
-                     "Digest,Accept-Ranges,ETag,Vary")),
+                     "Accept-Ranges,ETag,Vary")),
              config.getOrDefault(CONFIG_HTTP_CORS_ALLOW_CREDENTIALS, Boolean.class, Boolean.TRUE),
              config.getOrDefault(CONFIG_HTTP_CORS_MAX_AGE, Integer.class, 180));
     }
diff --git a/core/http/src/main/java/org/trellisldp/http/TrellisHttpFilter.java b/core/http/src/main/java/org/trellisldp/http/TrellisHttpFilter.java
index 1915e4409..7fccf307d 100644
--- a/core/http/src/main/java/org/trellisldp/http/TrellisHttpFilter.java
+++ b/core/http/src/main/java/org/trellisldp/http/TrellisHttpFilter.java
@@ -27,7 +27,6 @@
 import static javax.ws.rs.core.Response.status;
 import static javax.ws.rs.core.UriBuilder.fromUri;
 import static org.trellisldp.http.core.HttpConstants.ACCEPT_DATETIME;
-import static org.trellisldp.http.core.HttpConstants.DIGEST;
 import static org.trellisldp.http.core.HttpConstants.EXT;
 import static org.trellisldp.http.core.HttpConstants.PATCH;
 import static org.trellisldp.http.core.HttpConstants.RANGE;
@@ -45,7 +44,6 @@
 import javax.ws.rs.ext.Provider;
 
 import org.trellisldp.http.core.AcceptDatetime;
-import org.trellisldp.http.core.Digest;
 import org.trellisldp.http.core.Range;
 import org.trellisldp.http.core.Version;
 
@@ -83,9 +81,6 @@ public void filter(final ContainerRequestContext ctx) throws IOException {
             }
         });
 
-        ofNullable(ctx.getHeaderString(DIGEST)).filter(x -> isNull(Digest.valueOf(x))).ifPresent(x ->
-            ctx.abortWith(status(BAD_REQUEST).build()));
-
         ofNullable(ctx.getUriInfo().getQueryParameters().getFirst("version")).ifPresent(x -> {
             // Check well-formedness
             if (isNull(Version.valueOf(x))) {
diff --git a/core/http/src/main/java/org/trellisldp/http/TrellisHttpResource.java b/core/http/src/main/java/org/trellisldp/http/TrellisHttpResource.java
index c3f787ffb..c619fa838 100644
--- a/core/http/src/main/java/org/trellisldp/http/TrellisHttpResource.java
+++ b/core/http/src/main/java/org/trellisldp/http/TrellisHttpResource.java
@@ -379,7 +379,7 @@ private CompletionStage<ResponseBuilder> fetchResource(final TrellisRequest req)
             return trellis.getMementoService().get(identifier, req.getVersion().getInstant())
                 .thenApply(getHandler::initialize).thenApply(getHandler::standardHeaders)
                 .thenCombine(trellis.getMementoService().mementos(identifier), getHandler::addMementoHeaders)
-                .thenCompose(getHandler::getRepresentation);
+                .thenApply(getHandler::getRepresentation);
 
         // Fetch a timemap
         } else if (TIMEMAP.equals(req.getExt())) {
@@ -409,7 +409,7 @@ private CompletionStage<ResponseBuilder> fetchResource(final TrellisRequest req)
         return trellis.getResourceService().get(identifier).thenApply(getHandler::initialize)
             .thenApply(getHandler::standardHeaders)
             .thenCombine(trellis.getMementoService().mementos(identifier), getHandler::addMementoHeaders)
-            .thenCompose(getHandler::getRepresentation);
+            .thenApply(getHandler::getRepresentation);
     }
 
     private CompletionStage<? extends Resource> fetchTrellisResource(final IRI identifier, final Version version) {
diff --git a/core/http/src/main/java/org/trellisldp/http/core/Digest.java b/core/http/src/main/java/org/trellisldp/http/core/Digest.java
deleted file mode 100644
index 8ec171d87..000000000
--- a/core/http/src/main/java/org/trellisldp/http/core/Digest.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.trellisldp.http.core;
-
-/**
- * A class representing an HTTP Digest header.
- *
- * @author acoburn
- *
- * @see <a href="https://tools.ietf.org/html/rfc3230">RFC 3230</a>
- */
-public class Digest {
-
-    private final String algorithm;
-
-    private final String digestValue;
-
-    /**
-     * Create a Digest header representation.
-     *
-     * @param algorithm the algorithm
-     * @param digestValue the digest
-     */
-    public Digest(final String algorithm, final String digestValue) {
-        this.algorithm = algorithm;
-        this.digestValue = digestValue;
-    }
-
-    /**
-     * Get the algorithm.
-     *
-     * @return the algorithms
-     */
-    public String getAlgorithm() {
-        return algorithm;
-    }
-
-    /**
-     * Get the digest value.
-     *
-     * @return the digest
-     */
-    public String getDigest() {
-        return digestValue;
-    }
-
-    /**
-     * Get a Digest object from a string-based header value.
-     *
-     * @param value the header value
-     * @return a Digest object or null if the value is invalid
-     */
-    public static Digest valueOf(final String value) {
-        final String[] parts = value.split("=", 2);
-        if (parts.length == 2) {
-            return new Digest(parts[0], parts[1]);
-        }
-        return null;
-    }
-}
diff --git a/core/http/src/main/java/org/trellisldp/http/core/HttpConstants.java b/core/http/src/main/java/org/trellisldp/http/core/HttpConstants.java
index a0e6ffb24..0c5f2cfae 100644
--- a/core/http/src/main/java/org/trellisldp/http/core/HttpConstants.java
+++ b/core/http/src/main/java/org/trellisldp/http/core/HttpConstants.java
@@ -73,9 +73,6 @@ public final class HttpConstants {
     /** The Trellis ext parameter value used for accessing the description of an LDP-NR. **/
     public static final String DESCRIPTION = "description";
 
-    /** The name of the HTTP response header used to communicate instance digest values. **/
-    public static final String DIGEST = "Digest";
-
     /** The Memento link parameter indicating the beginning range of a TimeMap. **/
     public static final String FROM = "from";
 
@@ -118,9 +115,6 @@ public final class HttpConstants {
     /** The Memento link relation for TimeMap resources. **/
     public static final String TIMEMAP = "timemap";
 
-    /** The name of the HTTP request header used to request an instance digest. **/
-    public static final String WANT_DIGEST = "Want-Digest";
-
     /** The Memento link parameter indicating the ending range of a TimeMap. **/
     public static final String UNTIL = "until";
 
diff --git a/core/http/src/main/java/org/trellisldp/http/core/TrellisRequest.java b/core/http/src/main/java/org/trellisldp/http/core/TrellisRequest.java
index 6da6a288b..8d84191d4 100644
--- a/core/http/src/main/java/org/trellisldp/http/core/TrellisRequest.java
+++ b/core/http/src/main/java/org/trellisldp/http/core/TrellisRequest.java
@@ -17,11 +17,9 @@
 import static javax.ws.rs.core.HttpHeaders.CONTENT_TYPE;
 import static javax.ws.rs.core.HttpHeaders.LINK;
 import static org.trellisldp.http.core.HttpConstants.ACCEPT_DATETIME;
-import static org.trellisldp.http.core.HttpConstants.DIGEST;
 import static org.trellisldp.http.core.HttpConstants.PREFER;
 import static org.trellisldp.http.core.HttpConstants.RANGE;
 import static org.trellisldp.http.core.HttpConstants.SLUG;
-import static org.trellisldp.http.core.HttpConstants.WANT_DIGEST;
 
 import java.security.Principal;
 import java.util.List;
@@ -132,24 +130,6 @@ public Prefer getPrefer() {
         return ofNullable(headers.getFirst(PREFER)).map(Prefer::valueOf).orElse(null);
     }
 
-    /**
-     * Get the Want-Digest header.
-     *
-     * @return the Want-Digest header
-     */
-    public WantDigest getWantDigest() {
-        return ofNullable(headers.getFirst(WANT_DIGEST)).map(WantDigest::new).orElse(null);
-    }
-
-    /**
-     * Get the Digest header.
-     *
-     * @return the Digest header
-     */
-    public Digest getDigest() {
-        return ofNullable(headers.getFirst(DIGEST)).map(Digest::valueOf).orElse(null);
-    }
-
     /**
      * Get the range header.
      *
diff --git a/core/http/src/main/java/org/trellisldp/http/core/WantDigest.java b/core/http/src/main/java/org/trellisldp/http/core/WantDigest.java
deleted file mode 100644
index a1cba1807..000000000
--- a/core/http/src/main/java/org/trellisldp/http/core/WantDigest.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.trellisldp.http.core;
-
-import static java.lang.Float.compare;
-import static java.lang.Float.parseFloat;
-import static java.util.Arrays.stream;
-import static java.util.Collections.emptyList;
-import static java.util.Objects.nonNull;
-import static java.util.stream.Collectors.toList;
-import static org.slf4j.LoggerFactory.getLogger;
-
-import java.util.AbstractMap.SimpleImmutableEntry;
-import java.util.List;
-import java.util.Map;
-
-import org.slf4j.Logger;
-
-/**
- * A class representing an HTTP Want-Digest header.
- *
- * @author acoburn
- *
- * @see <a href="https://tools.ietf.org/html/rfc3230">RFC 3230</a>
- */
-public class WantDigest {
-
-    private static final Logger LOGGER = getLogger(WantDigest.class);
-
-    private final List<String> algorithms;
-
-    /**
-     * Create a Want-Digest header representation.
-     *
-     * @param wantDigest the value of the Want-Digest header
-     */
-    public WantDigest(final String wantDigest) {
-        if (nonNull(wantDigest)) {
-            this.algorithms = stream(wantDigest.split(",")).map(String::trim).map(alg -> {
-                final String[] parts = alg.split(";", 2);
-                if (parts.length == 2) {
-                    return new SimpleImmutableEntry<>(parts[0], getValue(parts[1]));
-                }
-                return new SimpleImmutableEntry<>(parts[0], 1.0f);
-            }).sorted((e1, e2) -> compare(e2.getValue(), e1.getValue())).map(Map.Entry::getKey)
-            .map(String::toUpperCase).collect(toList());
-        } else {
-            this.algorithms = emptyList();
-        }
-    }
-
-    /**
-     * Fetch the list of specified algorithms in preference order.
-     *
-     * @return the algorithms
-     */
-    public List<String> getAlgorithms() {
-        return algorithms;
-    }
-
-    private float getValue(final String val) {
-        if (val.startsWith("q=")) {
-            try {
-                return parseFloat(val.substring(2));
-            } catch (final NumberFormatException ex) {
-                LOGGER.warn("Invalid q value for Want-Digest request header ({}), setting to 0.0", val);
-            }
-        } else {
-            LOGGER.warn("Invalid parameter value for Want-Digest request header ({}), setting to 0.0", val);
-        }
-        return 0.0f;
-    }
-}
diff --git a/core/http/src/main/java/org/trellisldp/http/impl/GetHandler.java b/core/http/src/main/java/org/trellisldp/http/impl/GetHandler.java
index e87919210..c2ba3040c 100644
--- a/core/http/src/main/java/org/trellisldp/http/impl/GetHandler.java
+++ b/core/http/src/main/java/org/trellisldp/http/impl/GetHandler.java
@@ -14,15 +14,11 @@
 package org.trellisldp.http.impl;
 
 import static java.lang.String.join;
-import static java.util.Base64.getEncoder;
 import static java.util.Collections.singletonList;
 import static java.util.Date.from;
 import static java.util.Objects.isNull;
 import static java.util.Objects.nonNull;
-import static java.util.Optional.empty;
 import static java.util.Optional.ofNullable;
-import static java.util.concurrent.CompletableFuture.completedFuture;
-import static java.util.function.Predicate.isEqual;
 import static java.util.stream.Collectors.joining;
 import static java.util.stream.Collectors.toList;
 import static java.util.stream.Collectors.toMap;
@@ -40,7 +36,6 @@
 import static javax.ws.rs.core.Response.Status.GONE;
 import static javax.ws.rs.core.Response.Status.NO_CONTENT;
 import static javax.ws.rs.core.Response.ok;
-import static org.apache.commons.codec.digest.DigestUtils.getDigest;
 import static org.apache.commons.rdf.api.RDFSyntax.TURTLE;
 import static org.slf4j.LoggerFactory.getLogger;
 import static org.trellisldp.api.Resource.SpecialResources.DELETED_RESOURCE;
@@ -51,14 +46,12 @@
 import static org.trellisldp.http.core.HttpConstants.ACCEPT_RANGES;
 import static org.trellisldp.http.core.HttpConstants.ACL;
 import static org.trellisldp.http.core.HttpConstants.DESCRIPTION;
-import static org.trellisldp.http.core.HttpConstants.DIGEST;
 import static org.trellisldp.http.core.HttpConstants.LINK_TEMPLATE;
 import static org.trellisldp.http.core.HttpConstants.MEMENTO_DATETIME;
 import static org.trellisldp.http.core.HttpConstants.PATCH;
 import static org.trellisldp.http.core.HttpConstants.PREFER;
 import static org.trellisldp.http.core.HttpConstants.PREFERENCE_APPLIED;
 import static org.trellisldp.http.core.HttpConstants.RANGE;
-import static org.trellisldp.http.core.HttpConstants.WANT_DIGEST;
 import static org.trellisldp.http.core.Prefer.PREFER_MINIMAL;
 import static org.trellisldp.http.core.Prefer.PREFER_REPRESENTATION;
 import static org.trellisldp.http.core.Prefer.PREFER_RETURN;
@@ -76,12 +69,10 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.security.MessageDigest;
 import java.time.Instant;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map.Entry;
-import java.util.Optional;
 import java.util.SortedSet;
 import java.util.concurrent.CompletionStage;
 import java.util.stream.Stream;
@@ -215,7 +206,7 @@ public ResponseBuilder standardHeaders(final ResponseBuilder builder) {
      * @param builder the response builder
      * @return the response builder
      */
-    public CompletionStage<ResponseBuilder> getRepresentation(final ResponseBuilder builder) {
+    public ResponseBuilder getRepresentation(final ResponseBuilder builder) {
         // Add NonRDFSource-related "describe*" link headers, provided this isn't an ACL resource
         getResource().getBinaryMetadata().filter(ds -> !ACL.equals(getRequest().getExt())).ifPresent(ds -> {
             final String base = getBaseBinaryIdentifier();
@@ -300,7 +291,7 @@ private void addAllowHeaders(final ResponseBuilder builder) {
         }
     }
 
-    private CompletionStage<ResponseBuilder> getLdpRs(final ResponseBuilder builder, final RDFSyntax syntax,
+    private ResponseBuilder getLdpRs(final ResponseBuilder builder, final RDFSyntax syntax,
             final IRI profile) {
         final Prefer prefer = ACL.equals(getRequest().getExt()) ?
             new Prefer(PREFER_REPRESENTATION, singletonList(PreferAccessControl.getIRIString()),
@@ -323,12 +314,12 @@ private CompletionStage<ResponseBuilder> getLdpRs(final ResponseBuilder builder,
                     .orElse(PREFER_REPRESENTATION)));
 
         if (ofNullable(prefer).flatMap(Prefer::getPreference).filter(PREFER_MINIMAL::equals).isPresent()) {
-            return completedFuture(builder.status(NO_CONTENT));
+            return builder.status(NO_CONTENT);
         }
 
         // Short circuit HEAD requests
         if (HEAD.equals(getRequest().getMethod())) {
-            return completedFuture(builder);
+            return builder;
         }
 
         // Stream the rdf content
@@ -345,26 +336,10 @@ public void write(final OutputStream out) throws IOException {
                 }
             }
         };
-        return completedFuture(builder.entity(stream));
+        return builder.entity(stream);
     }
 
-    private CompletionStage<Optional<String>> computeInstanceDigest(final IRI dsid) {
-        // Add instance digests, if Requested and supported
-        if (nonNull(getRequest().getWantDigest())) {
-            final Optional<String> algorithm = getRequest().getWantDigest().getAlgorithms().stream()
-                .filter(getServices().getBinaryService().supportedAlgorithms()::contains).findFirst();
-            if (algorithm.isPresent()) {
-                final String alg = algorithm.filter(isEqual("SHA").negate()).orElse("SHA-1");
-                return getServices().getBinaryService().calculateDigest(dsid, getDigest(alg))
-                    .thenApply(MessageDigest::digest)
-                    .thenApply(getEncoder()::encodeToString)
-                    .thenApply(digest -> Optional.of(algorithm.get().toLowerCase() + "=" + digest));
-            }
-        }
-        return completedFuture(empty());
-    }
-
-    private CompletionStage<ResponseBuilder> getLdpNr(final ResponseBuilder builder) {
+    private ResponseBuilder getLdpNr(final ResponseBuilder builder) {
 
         final Instant mod = getResource().getModified();
         final EntityTag etag = new EntityTag(buildEtagHash(getIdentifier() + "BINARY", mod, null));
@@ -373,7 +348,7 @@ private CompletionStage<ResponseBuilder> getLdpNr(final ResponseBuilder builder)
         final IRI dsid = getResource().getBinaryMetadata().map(BinaryMetadata::getIdentifier).orElse(null);
 
         // Add standard headers
-        builder.header(VARY, RANGE).header(VARY, WANT_DIGEST).header(ACCEPT_RANGES, "bytes").tag(etag)
+        builder.header(VARY, RANGE).header(ACCEPT_RANGES, "bytes").tag(etag)
             .header(ALLOW, isMemento ? join(",", GET, HEAD, OPTIONS) : join(",", GET, HEAD, OPTIONS, PUT, DELETE));
 
         // Stream the binary content
@@ -387,8 +362,7 @@ public void write(final OutputStream out) throws IOException {
             }
         };
 
-        return computeInstanceDigest(dsid).thenAccept(digest -> digest.ifPresent(d -> builder.header(DIGEST, d)))
-            .thenApply(future -> builder.entity(stream));
+        return builder.entity(stream);
     }
 
     private CompletionStage<InputStream> getBinaryStream(final IRI dsid, final TrellisRequest req) {
diff --git a/core/http/src/main/java/org/trellisldp/http/impl/MutatingLdpHandler.java b/core/http/src/main/java/org/trellisldp/http/impl/MutatingLdpHandler.java
index fb34a4136..ec17a8de8 100644
--- a/core/http/src/main/java/org/trellisldp/http/impl/MutatingLdpHandler.java
+++ b/core/http/src/main/java/org/trellisldp/http/impl/MutatingLdpHandler.java
@@ -14,14 +14,10 @@
 package org.trellisldp.http.impl;
 
 import static java.util.Arrays.asList;
-import static java.util.Base64.getEncoder;
-import static java.util.Objects.isNull;
 import static java.util.Objects.nonNull;
-import static java.util.Optional.of;
 import static java.util.Optional.ofNullable;
 import static java.util.concurrent.CompletableFuture.allOf;
 import static java.util.concurrent.CompletableFuture.completedFuture;
-import static java.util.function.Predicate.isEqual;
 import static java.util.stream.Collectors.toList;
 import static javax.ws.rs.core.Response.Status.CONFLICT;
 import static javax.ws.rs.core.Response.status;
@@ -33,8 +29,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
 import java.util.Objects;
 import java.util.concurrent.CompletionStage;
 import java.util.stream.Stream;
@@ -57,7 +51,6 @@
 import org.trellisldp.api.RuntimeTrellisException;
 import org.trellisldp.api.ServiceBundler;
 import org.trellisldp.api.Session;
-import org.trellisldp.http.core.Digest;
 import org.trellisldp.http.core.TrellisRequest;
 import org.trellisldp.vocabulary.AS;
 import org.trellisldp.vocabulary.LDP;
@@ -243,32 +236,6 @@ protected CompletionStage<Void> persistContent(final BinaryMetadata metadata) {
                         .whenComplete(HttpUtils.closeInputStreamAsync(entity));
     }
 
-    protected CompletionStage<Void> persistContent(final BinaryMetadata metadata, final Digest digest) {
-        if (isNull(digest)) {
-            return persistContent(metadata);
-        }
-        try {
-            final String alg = of(digest).map(Digest::getAlgorithm).map(String::toUpperCase)
-                .filter(isEqual("SHA").negate()).orElse("SHA-1");
-            return getServices().getBinaryService().setContent(metadata, entity, MessageDigest.getInstance(alg))
-                .thenApply(MessageDigest::digest)
-                .thenApply(getEncoder()::encodeToString).thenCompose(serverComputed -> {
-                    if (digest.getDigest().equals(serverComputed)) {
-                        LOGGER.debug("Successfully persisted digest-verified bitstream: {}", metadata.getIdentifier());
-                        return completedFuture(null);
-                    }
-                    return getServices().getBinaryService().purgeContent(metadata.getIdentifier())
-                        .thenAccept(future -> {
-                            throw new BadRequestException(
-                                    "Supplied digest value does not match the server-computed digest: "
-                                    + serverComputed);
-                    });
-                });
-        } catch (final NoSuchAlgorithmException ex) {
-            throw new BadRequestException("Invalid digest algorithm: " + ex.getMessage());
-        }
-    }
-
     protected Metadata.Builder metadataBuilder(final IRI identifier, final IRI ixnModel, final TrellisDataset mutable) {
         final Metadata.Builder builder = Metadata.builder(identifier).interactionModel(ixnModel);
         mutable.asDataset().getGraph(Trellis.PreferUserManaged).ifPresent(graph -> {
diff --git a/core/http/src/main/java/org/trellisldp/http/impl/PostHandler.java b/core/http/src/main/java/org/trellisldp/http/impl/PostHandler.java
index 8eb072953..057fcd9f1 100644
--- a/core/http/src/main/java/org/trellisldp/http/impl/PostHandler.java
+++ b/core/http/src/main/java/org/trellisldp/http/impl/PostHandler.java
@@ -176,7 +176,7 @@ private CompletionStage<ResponseBuilder> handleResourceCreation(final TrellisDat
             // Persist the content
             final BinaryMetadata binary = BinaryMetadata.builder(binaryLocation).mimeType(mimeType)
                             .hints(getRequest().getHeaders()).build();
-            persistPromise = persistContent(binary, getRequest().getDigest());
+            persistPromise = persistContent(binary);
 
             metadata = metadataBuilder(internalId, ldpType, mutable).container(parentIdentifier).binary(binary);
             builder.link(getIdentifier() + "?ext=description", "describedby");
diff --git a/core/http/src/main/java/org/trellisldp/http/impl/PutHandler.java b/core/http/src/main/java/org/trellisldp/http/impl/PutHandler.java
index e2bac2bfb..2824acc8d 100644
--- a/core/http/src/main/java/org/trellisldp/http/impl/PutHandler.java
+++ b/core/http/src/main/java/org/trellisldp/http/impl/PutHandler.java
@@ -208,7 +208,7 @@ private CompletionStage<ResponseBuilder> handleResourceUpdate(final TrellisDatas
             // Persist the content
             final BinaryMetadata binary = BinaryMetadata.builder(binaryLocation).mimeType(mimeType)
                             .hints(getRequest().getHeaders()).build();
-            persistPromise = persistContent(binary, getRequest().getDigest());
+            persistPromise = persistContent(binary);
 
             metadata = metadataBuilder(internalId, ldpType, mutable).binary(binary);
             builder.link(getIdentifier() + "?ext=description", "describedby");
diff --git a/core/http/src/test/java/org/trellisldp/http/AbstractTrellisHttpResourceTest.java b/core/http/src/test/java/org/trellisldp/http/AbstractTrellisHttpResourceTest.java
index 9fd9f0bd1..4bbcc028a 100644
--- a/core/http/src/test/java/org/trellisldp/http/AbstractTrellisHttpResourceTest.java
+++ b/core/http/src/test/java/org/trellisldp/http/AbstractTrellisHttpResourceTest.java
@@ -21,6 +21,7 @@
 import static java.time.format.DateTimeFormatter.RFC_1123_DATE_TIME;
 import static java.util.Arrays.asList;
 import static java.util.Arrays.stream;
+import static java.util.Collections.singletonList;
 import static java.util.Date.from;
 import static java.util.Objects.nonNull;
 import static java.util.Optional.empty;
@@ -68,14 +69,12 @@
 import static org.trellisldp.http.core.HttpConstants.ACCEPT_POST;
 import static org.trellisldp.http.core.HttpConstants.ACCEPT_RANGES;
 import static org.trellisldp.http.core.HttpConstants.APPLICATION_LINK_FORMAT;
-import static org.trellisldp.http.core.HttpConstants.DIGEST;
 import static org.trellisldp.http.core.HttpConstants.LINK_TEMPLATE;
 import static org.trellisldp.http.core.HttpConstants.MEMENTO_DATETIME;
 import static org.trellisldp.http.core.HttpConstants.PATCH;
 import static org.trellisldp.http.core.HttpConstants.PREFER;
 import static org.trellisldp.http.core.HttpConstants.RANGE;
 import static org.trellisldp.http.core.HttpConstants.SLUG;
-import static org.trellisldp.http.core.HttpConstants.WANT_DIGEST;
 import static org.trellisldp.http.core.RdfMediaType.APPLICATION_LD_JSON;
 import static org.trellisldp.http.core.RdfMediaType.APPLICATION_LD_JSON_TYPE;
 import static org.trellisldp.http.core.RdfMediaType.APPLICATION_N_TRIPLES;
@@ -92,7 +91,6 @@
 
 import java.io.IOException;
 import java.io.InputStream;
-import java.security.MessageDigest;
 import java.time.Instant;
 import java.util.Collections;
 import java.util.List;
@@ -379,42 +377,6 @@ public void testGetBinary() throws IOException {
         assertEquals("Some input stream", entity, "Incorrect entity value!");
     }
 
-    @Test
-    public void testGetBinaryDigestInvalid() throws IOException {
-        final Response res = target(BINARY_PATH).request().header(WANT_DIGEST, "FOO").get();
-
-        assertEquals(SC_OK, res.getStatus(), "Unexpected response code!");
-        assertNull(res.getHeaderString(DIGEST), "Unexpected Digest header!");
-        assertAll("Check Binary response", checkBinaryResponse(res));
-
-        final String entity = IOUtils.toString((InputStream) res.getEntity(), UTF_8);
-        assertEquals("Some input stream", entity, "Incorrect entity value!");
-    }
-
-    @Test
-    public void testGetBinaryDigestMd5() throws IOException {
-        final Response res = target(BINARY_PATH).request().header(WANT_DIGEST, "MD5").get();
-
-        assertEquals(SC_OK, res.getStatus(), "Unexpected response code!");
-        assertEquals("md5=Q29tcHV0ZWREaWdlc3Q=", res.getHeaderString(DIGEST), "Incorrect Digest header value!");
-        assertAll("Check Binary response", checkBinaryResponse(res));
-
-        final String entity = IOUtils.toString((InputStream) res.getEntity(), UTF_8);
-        assertEquals("Some input stream", entity, "Incorrect entity value!");
-    }
-
-    @Test
-    public void testGetBinaryDigestSha1() throws IOException {
-        final Response res = target(BINARY_PATH).request().header(WANT_DIGEST, "SHA").get();
-
-        assertEquals(SC_OK, res.getStatus(), "Unexpected response code!");
-        assertEquals("sha=Q29tcHV0ZWREaWdlc3Q=", res.getHeaderString(DIGEST), "Incorrect Digest header value!");
-        assertAll("Check Binary response", checkBinaryResponse(res));
-
-        final String entity = IOUtils.toString((InputStream) res.getEntity(), UTF_8);
-        assertEquals("Some input stream", entity, "Incorrect entity value!");
-    }
-
     @Test
     public void testGetBinaryRange() throws IOException {
         final Response res = target(BINARY_PATH).request().header(RANGE, "bytes=3-10").get();
@@ -435,17 +397,6 @@ public void testGetBinaryErrorSkip() throws IOException {
         assertEquals(SC_INTERNAL_SERVER_ERROR, res.getStatus(), "Unexpected response code!");
     }
 
-    @Test
-    public void testGetBinaryDigestError() throws Exception {
-        when(mockBinaryService.calculateDigest(eq(binaryInternalIdentifier), any(MessageDigest.class)))
-            .thenAnswer(inv ->
-                supplyAsync(() -> {
-                    throw new RuntimeTrellisException("Expected exception");
-                }));
-        final Response res = target(BINARY_PATH).request().header(WANT_DIGEST, "MD5").get();
-        assertEquals(SC_INTERNAL_SERVER_ERROR, res.getStatus(), "Unexpected response code!");
-    }
-
     @Test
     public void testGetVersionError() {
         final Response res = target(BINARY_PATH).queryParam("version", "looking at my history").request().get();
@@ -485,7 +436,7 @@ public void testGetBinaryVersion() throws IOException {
         assertNotNull(res.getHeaderString(MEMENTO_DATETIME), "Missing Memento-Datetime header!");
         assertEquals(time, parse(res.getHeaderString(MEMENTO_DATETIME), RFC_1123_DATE_TIME).toInstant(),
                 "Incorrect Memento-Datetime header value!");
-        assertAll("Check Vary headers", checkVary(res, asList(RANGE, WANT_DIGEST)));
+        assertAll("Check Vary headers", checkVary(res, singletonList(RANGE)));
 
         final String entity = IOUtils.toString((InputStream) res.getEntity(), UTF_8);
         assertEquals("Some input stream", entity, "Incorrect entity value!");
@@ -1373,73 +1324,6 @@ public void testPostBinary() {
         assertAll("Check LDP type Link headers", checkLdpTypeHeaders(res, LDP.NonRDFSource));
     }
 
-    @Test
-    public void testPostBinaryWithInvalidDigest() {
-        when(mockResource.getInteractionModel()).thenReturn(LDP.Container);
-        when(mockMementoService.get(eq(rdf.createIRI(TRELLIS_DATA_PREFIX + RESOURCE_PATH + "/newresource")),
-                    any(Instant.class))).thenAnswer(inv -> completedFuture(MISSING_RESOURCE));
-        final Response res = target(RESOURCE_PATH).request().header(SLUG, "newresource")
-            .header(DIGEST, "md5=blahblah").post(entity("some data.", TEXT_PLAIN_TYPE));
-
-        assertEquals(SC_BAD_REQUEST, res.getStatus(), "Unexpected response code!");
-    }
-
-    @Test
-    public void testPostUnparseableDigest() {
-        final Response res = target(RESOURCE_PATH).request()
-            .header(DIGEST, "digest this, man!").post(entity("some data.", TEXT_PLAIN_TYPE));
-
-        assertEquals(SC_BAD_REQUEST, res.getStatus(), "Unexpected response code!");
-    }
-
-    @Test
-    public void testPostBinaryWithInvalidDigestType() {
-        when(mockResource.getInteractionModel()).thenReturn(LDP.Container);
-        when(mockMementoService.get(eq(rdf.createIRI(TRELLIS_DATA_PREFIX + RESOURCE_PATH + "/newresource")),
-                    any(Instant.class))).thenAnswer(inv -> completedFuture(MISSING_RESOURCE));
-        final Response res = target(RESOURCE_PATH).request().header(SLUG, "newresource")
-            .header(DIGEST, "uh=huh").post(entity("some data.", TEXT_PLAIN_TYPE));
-
-        assertEquals(SC_BAD_REQUEST, res.getStatus(), "Unexpected response code!");
-    }
-
-    @Test
-    public void testPostBinaryWithMd5Digest() {
-        when(mockResource.getInteractionModel()).thenReturn(LDP.Container);
-        when(mockMementoService.get(eq(rdf.createIRI(TRELLIS_DATA_PREFIX + RESOURCE_PATH + "/newresource")),
-                    any(Instant.class))).thenAnswer(inv -> completedFuture(MISSING_RESOURCE));
-        final Response res = target(RESOURCE_PATH).request().header(DIGEST, "md5=BJozgIQwPzzVzSxvjQsWkA==")
-            .header(SLUG, "newresource").post(entity("some data.", TEXT_PLAIN_TYPE));
-
-        assertEquals(SC_CREATED, res.getStatus(), "Unexpected response code!");
-        assertAll("Check LDP type Link headers", checkLdpTypeHeaders(res, LDP.NonRDFSource));
-    }
-
-    @Test
-    public void testPostBinaryWithSha1Digest() {
-        when(mockResource.getInteractionModel()).thenReturn(LDP.Container);
-        when(mockMementoService.get(eq(rdf.createIRI(TRELLIS_DATA_PREFIX + RESOURCE_PATH + "/newresource")),
-                    any(Instant.class))).thenAnswer(inv -> completedFuture(MISSING_RESOURCE));
-        final Response res = target(RESOURCE_PATH).request().header(DIGEST, "sha=3VWEuvPnAM6riDQJUu4TG7A4Ots=")
-            .header(SLUG, "newresource").post(entity("some data.", TEXT_PLAIN_TYPE));
-
-        assertEquals(SC_CREATED, res.getStatus(), "Unexpected response code!");
-        assertAll("Check LDP type Link headers", checkLdpTypeHeaders(res, LDP.NonRDFSource));
-    }
-
-    @Test
-    public void testPostBinaryWithSha256Digest() {
-        when(mockResource.getInteractionModel()).thenReturn(LDP.Container);
-        when(mockMementoService.get(eq(rdf.createIRI(TRELLIS_DATA_PREFIX + RESOURCE_PATH + "/newresource")),
-                    any(Instant.class))).thenAnswer(inv -> completedFuture(MISSING_RESOURCE));
-        final Response res = target(RESOURCE_PATH).request()
-            .header(DIGEST, "sha-256=voCCIRTNXosNlEgQ/7IuX5dFNvFQx5MfG/jy1AKiLMU=")
-            .header(SLUG, "newresource").post(entity("some data.", TEXT_PLAIN_TYPE));
-
-        assertEquals(SC_CREATED, res.getStatus(), "Unexpected response code!");
-        assertAll("Check LDP type Link headers", checkLdpTypeHeaders(res, LDP.NonRDFSource));
-    }
-
     @Test
     public void testPostTimeMap() {
         final Response res = target(RESOURCE_PATH).queryParam("ext", "timemap").request()
@@ -1784,32 +1668,6 @@ public void testPutBinary() {
         assertAll("Check LDP type Link headers", checkLdpTypeHeaders(res, LDP.NonRDFSource));
     }
 
-    @Test
-    public void testPutBinaryWithInvalidDigest() {
-        final Response res = target(BINARY_PATH).request().header(DIGEST, "md5=blahblah")
-            .put(entity("some data.", TEXT_PLAIN_TYPE));
-
-        assertEquals(SC_BAD_REQUEST, res.getStatus(), "Unexpected response code!");
-    }
-
-    @Test
-    public void testPutBinaryWithMd5Digest() {
-        final Response res = target(BINARY_PATH).request().header(DIGEST, "md5=BJozgIQwPzzVzSxvjQsWkA==")
-            .put(entity("some data.", TEXT_PLAIN_TYPE));
-
-        assertEquals(SC_NO_CONTENT, res.getStatus(), "Unexpected response code!");
-        assertAll("Check LDP type Link headers", checkLdpTypeHeaders(res, LDP.NonRDFSource));
-    }
-
-    @Test
-    public void testPutBinaryWithSha1Digest() {
-        final Response res = target(BINARY_PATH).request().header(DIGEST, "sha=3VWEuvPnAM6riDQJUu4TG7A4Ots=")
-            .put(entity("some data.", TEXT_PLAIN_TYPE));
-
-        assertEquals(SC_NO_CONTENT, res.getStatus(), "Unexpected response code!");
-        assertAll("Check LDP type Link headers", checkLdpTypeHeaders(res, LDP.NonRDFSource));
-    }
-
     @Test
     public void testPutBinaryToACL() {
         final Response res = target(BINARY_PATH).queryParam("ext", "acl").request()
@@ -1945,16 +1803,6 @@ public void testPutPreconditionFailed2() {
         assertEquals(SC_PRECONDITION_FAILED, res.getStatus(), "Unexpected response code!");
     }
 
-    @Test
-    public void testPutBinaryWithSha256Digest() {
-        final Response res = target(BINARY_PATH).request()
-            .header(DIGEST, "sha-256=voCCIRTNXosNlEgQ/7IuX5dFNvFQx5MfG/jy1AKiLMU=")
-            .put(entity("some data.", TEXT_PLAIN_TYPE));
-
-        assertEquals(SC_NO_CONTENT, res.getStatus(), "Unexpected response code!");
-        assertAll("Check LDP type Link headers", checkLdpTypeHeaders(res, LDP.NonRDFSource));
-    }
-
     @Test
     public void testPutSlash() {
         final Response res = target(RESOURCE_PATH + "/").request()
@@ -2404,7 +2252,7 @@ private Stream<Quad> getPreferQuads() {
 
     private Stream<Executable> checkVary(final Response res, final List<String> vary) {
         final List<String> vheaders = res.getStringHeaders().get(VARY);
-        return Stream.of(RANGE, WANT_DIGEST, ACCEPT_DATETIME, PREFER).map(header -> vary.contains(header)
+        return Stream.of(RANGE, ACCEPT_DATETIME, PREFER).map(header -> vary.contains(header)
                 ? () -> assertTrue(vheaders.contains(header), "Missing Vary header: " + header)
                 : () -> assertFalse(vheaders.contains(header), "Unexpected Vary header: " + header));
     }
@@ -2470,7 +2318,7 @@ private Stream<Executable> checkBinaryResponse(final Response res) {
                 () -> assertTrue(res.getMediaType().isCompatible(TEXT_PLAIN_TYPE), "Incompatible content-type!"),
                 () -> assertNotNull(res.getHeaderString(ACCEPT_RANGES), "Missing Accept-Ranges header!"),
                 () -> assertNull(res.getHeaderString(MEMENTO_DATETIME), "Unexpected Memento-Datetime header!"),
-                () -> assertAll("Check Vary header", checkVary(res, asList(RANGE, WANT_DIGEST, ACCEPT_DATETIME))),
+                () -> assertAll("Check Vary header", checkVary(res, asList(RANGE, ACCEPT_DATETIME))),
                 () -> assertAll("Check allowed methods",
                                 checkAllowedMethods(res, asList(PUT, DELETE, GET, HEAD, OPTIONS))),
                 () -> assertAll("Check LDP type Link headers", checkLdpTypeHeaders(res, LDP.NonRDFSource)));
diff --git a/core/http/src/test/java/org/trellisldp/http/BaseTrellisHttpResourceTest.java b/core/http/src/test/java/org/trellisldp/http/BaseTrellisHttpResourceTest.java
index da4d5d099..2ecc6726e 100644
--- a/core/http/src/test/java/org/trellisldp/http/BaseTrellisHttpResourceTest.java
+++ b/core/http/src/test/java/org/trellisldp/http/BaseTrellisHttpResourceTest.java
@@ -17,7 +17,6 @@
 import static java.time.Instant.MAX;
 import static java.time.Instant.ofEpochSecond;
 import static java.util.Arrays.asList;
-import static java.util.Base64.getDecoder;
 import static java.util.Collections.emptySortedSet;
 import static java.util.Optional.empty;
 import static java.util.Optional.of;
@@ -40,7 +39,6 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
-import java.security.MessageDigest;
 import java.time.Instant;
 import java.util.HashSet;
 import java.util.Set;
@@ -147,9 +145,6 @@ abstract class BaseTrellisHttpResourceTest extends JerseyTest {
     @Mock
     protected Binary mockBinary;
 
-    @Mock
-    protected MessageDigest mockDigest;
-
     @Mock
     protected AccessControlService mockAccessControlService;
 
@@ -270,18 +265,9 @@ private void setUpMementoService() {
     }
 
     private void setUpBinaryService() throws Exception {
-        when(mockBinaryService.supportedAlgorithms()).thenReturn(new HashSet<>(asList("MD5", "SHA-1", "SHA")));
-        when(mockDigest.digest()).thenReturn(getDecoder().decode("Q29tcHV0ZWREaWdlc3Q="));
-        when(mockBinaryService.calculateDigest(eq(binaryInternalIdentifier), any(MessageDigest.class)))
-            .thenReturn(completedFuture(mockDigest));
         when(mockBinaryService.get(eq(binaryInternalIdentifier))).thenAnswer(inv -> completedFuture(mockBinary));
         when(mockBinary.getContent(eq(3), eq(10))).thenReturn(new ByteArrayInputStream("e input".getBytes(UTF_8)));
         when(mockBinary.getContent()).thenReturn(new ByteArrayInputStream("Some input stream".getBytes(UTF_8)));
-        when(mockBinaryService.setContent(any(BinaryMetadata.class), any(InputStream.class), any()))
-            .thenAnswer(inv -> {
-                readLines((InputStream) inv.getArguments()[1], UTF_8);
-                return completedFuture(null);
-            });
         when(mockBinaryService.setContent(any(BinaryMetadata.class), any(InputStream.class)))
         .thenAnswer(inv -> {
             readLines((InputStream) inv.getArguments()[1], UTF_8);
@@ -289,8 +275,6 @@ private void setUpBinaryService() throws Exception {
         });
         when(mockBinaryService.purgeContent(any(IRI.class))).thenReturn(completedFuture(null));
         when(mockBinaryService.generateIdentifier()).thenReturn(RANDOM_VALUE);
-        doCallRealMethod().when(mockBinaryService)
-            .setContent(any(BinaryMetadata.class), any(InputStream.class), any());
     }
 
     private void setUpResources() {
diff --git a/core/http/src/test/java/org/trellisldp/http/CrossOriginResourceSharingFilterDefaultTest.java b/core/http/src/test/java/org/trellisldp/http/CrossOriginResourceSharingFilterDefaultTest.java
index 9003d10ba..a1078f0a6 100644
--- a/core/http/src/test/java/org/trellisldp/http/CrossOriginResourceSharingFilterDefaultTest.java
+++ b/core/http/src/test/java/org/trellisldp/http/CrossOriginResourceSharingFilterDefaultTest.java
@@ -108,7 +108,7 @@ public void testCorsPreflight() {
 
         final List<String> headers = stream(res.getHeaderString("Access-Control-Allow-Headers").split(","))
             .collect(toList());
-        assertEquals(9L, headers.size(), "Incorrect count of -Allow-Headers values!");
+        assertEquals(7L, headers.size(), "Incorrect count of -Allow-Headers values!");
         assertTrue(headers.contains("accept"), "accept missing from -Allow-Headers!");
         assertTrue(headers.contains("link"), "link missing from -Allow-Headers!");
         assertTrue(headers.contains("content-type"), "content-type missing from -Allow-Headers!");
diff --git a/core/http/src/test/java/org/trellisldp/http/core/DigestTest.java b/core/http/src/test/java/org/trellisldp/http/core/DigestTest.java
deleted file mode 100644
index 521f9ca95..000000000
--- a/core/http/src/test/java/org/trellisldp/http/core/DigestTest.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.trellisldp.http.core;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-import org.junit.jupiter.api.Test;
-
-/**
- * @author acoburn
- */
-public class DigestTest {
-
-    @Test
-    public void testDigest() {
-        final Digest d = Digest.valueOf("md5=HUXZLQLMuI/KZ5KDcJPcOA==");
-        assertEquals("md5", d.getAlgorithm(), "check algorithm name");
-        assertEquals("HUXZLQLMuI/KZ5KDcJPcOA==", d.getDigest(), "check digest value");
-    }
-
-    @Test
-    public void testDigest2() {
-        final Digest d = new Digest("md5", "HUXZLQLMuI/KZ5KDcJPcOA==");
-        assertEquals("md5", d.getAlgorithm(), "Check md5 algorithm name");
-        assertEquals("HUXZLQLMuI/KZ5KDcJPcOA==", d.getDigest(), "Check digest value");
-    }
-
-    @Test
-    public void testInvalidDigest() {
-        assertNull(Digest.valueOf("blah"), "Check parsing invalid digest");
-    }
-}
diff --git a/core/http/src/test/java/org/trellisldp/http/core/WantDigestTest.java b/core/http/src/test/java/org/trellisldp/http/core/WantDigestTest.java
deleted file mode 100644
index 8462db12f..000000000
--- a/core/http/src/test/java/org/trellisldp/http/core/WantDigestTest.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.trellisldp.http.core;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-import org.junit.jupiter.api.Test;
-
-/**
- * @author acoburn
- */
-public class WantDigestTest {
-
-    @Test
-    public void testWantDigest1() {
-        final WantDigest wantDigest = new WantDigest("md5, sha-1");
-        assertEquals(2, wantDigest.getAlgorithms().size(), "Check algorithm list");
-        assertEquals("MD5", wantDigest.getAlgorithms().get(0), "Check presence of MD5");
-        assertEquals("SHA-1", wantDigest.getAlgorithms().get(1), "Check presence of SHA-1");
-    }
-
-    @Test
-    public void testWantDigest2() {
-        final WantDigest wantDigest = new WantDigest("sha-1, md5");
-        assertEquals(2, wantDigest.getAlgorithms().size(), "Check algorithm list");
-        assertEquals("SHA-1", wantDigest.getAlgorithms().get(0), "Check that sha-1 is first");
-        assertEquals("MD5", wantDigest.getAlgorithms().get(1), "Check that md5 is second");
-    }
-
-    @Test
-    public void testWantDigest3() {
-        final WantDigest wantDigest = new WantDigest("sha-1;q=0.3, md5;q=1");
-        assertEquals(2, wantDigest.getAlgorithms().size(), "Check algorithm list");
-        assertEquals("MD5", wantDigest.getAlgorithms().get(0), "Check that md5 is first");
-        assertEquals("SHA-1", wantDigest.getAlgorithms().get(1), "Check that sha-1 is second");
-    }
-
-    @Test
-    public void testWantDigest4() {
-        final WantDigest wantDigest = new WantDigest(null);
-        assertTrue(wantDigest.getAlgorithms().isEmpty(), "Check parsing null value");
-    }
-
-    @Test
-    public void testWantDigest5() {
-        final WantDigest wantDigest = new WantDigest("sha-1;q=0.3, md5;q=blah");
-        assertEquals(2, wantDigest.getAlgorithms().size(), "Check algorithm list");
-        assertEquals("SHA-1", wantDigest.getAlgorithms().get(0), "Check that sha-1 is first");
-        assertEquals("MD5", wantDigest.getAlgorithms().get(1), "Check that md5 is second");
-    }
-
-    @Test
-    public void testWantDigest6() {
-        final WantDigest wantDigest = new WantDigest("sha-1;q=0.3, md5;p=1.0");
-        assertEquals(2, wantDigest.getAlgorithms().size(), "Check algorithm list");
-        assertEquals("SHA-1", wantDigest.getAlgorithms().get(0), "Check that sha-1 is first");
-        assertEquals("MD5", wantDigest.getAlgorithms().get(1), "Check that md5 is second");
-    }
-}
diff --git a/core/http/src/test/java/org/trellisldp/http/impl/BaseTestHandler.java b/core/http/src/test/java/org/trellisldp/http/impl/BaseTestHandler.java
index c8b736ff1..b202bfc4d 100644
--- a/core/http/src/test/java/org/trellisldp/http/impl/BaseTestHandler.java
+++ b/core/http/src/test/java/org/trellisldp/http/impl/BaseTestHandler.java
@@ -50,7 +50,6 @@
 
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
-import java.security.MessageDigest;
 import java.time.Instant;
 import java.util.HashSet;
 import java.util.List;
@@ -131,9 +130,6 @@ abstract class BaseTestHandler {
     @Mock
     protected Binary mockBinary;
 
-    @Mock
-    protected MessageDigest mockDigest;
-
     @Mock
     protected Resource mockResource, mockParent;
 
@@ -232,24 +228,13 @@ private void setUpBinaryService() throws Exception {
         when(mockBinary.getContent(eq(3), eq(10))).thenReturn(new ByteArrayInputStream("e input".getBytes(UTF_8)));
         when(mockBinary.getContent()).thenReturn(new ByteArrayInputStream("Some input stream".getBytes(UTF_8)));
         when(mockBinaryService.generateIdentifier()).thenReturn("file:///" + randomUUID());
-        when(mockBinaryService.supportedAlgorithms()).thenReturn(new HashSet<>(asList("MD5", "SHA-1")));
-        when(mockDigest.digest()).thenReturn("computed-digest".getBytes(UTF_8));
-        when(mockBinaryService.calculateDigest(any(IRI.class), any(MessageDigest.class)))
-            .thenReturn(completedFuture(mockDigest));
         when(mockBinaryService.get(any(IRI.class))).thenAnswer(inv -> completedFuture(mockBinary));
         when(mockBinaryService.purgeContent(any(IRI.class))).thenReturn(completedFuture(null));
-        when(mockBinaryService.setContent(any(BinaryMetadata.class), any(InputStream.class), any()))
-            .thenAnswer(inv -> {
-                readLines((InputStream) inv.getArguments()[1], UTF_8);
-                return completedFuture(null);
-            });
         when(mockBinaryService.setContent(any(BinaryMetadata.class), any(InputStream.class)))
         .thenAnswer(inv -> {
             readLines((InputStream) inv.getArguments()[1], UTF_8);
             return completedFuture(null);
         });
-        doCallRealMethod().when(mockBinaryService)
-            .setContent(any(BinaryMetadata.class), any(InputStream.class), any());
     }
 
     private void setUpBundler() {
diff --git a/core/http/src/test/java/org/trellisldp/http/impl/GetHandlerTest.java b/core/http/src/test/java/org/trellisldp/http/impl/GetHandlerTest.java
index aa31ed07a..2736c01ff 100644
--- a/core/http/src/test/java/org/trellisldp/http/impl/GetHandlerTest.java
+++ b/core/http/src/test/java/org/trellisldp/http/impl/GetHandlerTest.java
@@ -56,7 +56,6 @@
 import static org.trellisldp.http.core.HttpConstants.PREFER;
 import static org.trellisldp.http.core.HttpConstants.PREFERENCE_APPLIED;
 import static org.trellisldp.http.core.HttpConstants.RANGE;
-import static org.trellisldp.http.core.HttpConstants.WANT_DIGEST;
 import static org.trellisldp.http.core.RdfMediaType.APPLICATION_LD_JSON;
 import static org.trellisldp.http.core.RdfMediaType.APPLICATION_LD_JSON_TYPE;
 import static org.trellisldp.http.core.RdfMediaType.APPLICATION_N_TRIPLES;
@@ -101,7 +100,7 @@ public void testGetLdprs() {
 
         final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, false, true, true, null, null);
         final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource)))
-            .toCompletableFuture().join().build();
+            .build();
 
         assertEquals(OK, res.getStatusInfo(), "Incorrect response type!");
         assertEquals(APPLICATION_SPARQL_UPDATE, res.getHeaderString(ACCEPT_PATCH), "Incorrect Accept-Patch header!");
@@ -121,7 +120,6 @@ public void testGetLdprs() {
 
         final List<Object> varies = res.getHeaders().get(VARY);
         assertFalse(varies.contains(RANGE), "Unexpected Vary: range header!");
-        assertFalse(varies.contains(WANT_DIGEST), "Unexpected Vary: want-digest header!");
         assertTrue(varies.contains(ACCEPT_DATETIME), "Unexpected Vary: accept-datetime header!");
         assertTrue(varies.contains(PREFER), "Unexpected Vary: prefer header!");
     }
@@ -134,7 +132,7 @@ public void testGetPreferLdprs() {
 
         final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, false, true, true, null, null);
         final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource)))
-            .toCompletableFuture().join().build();
+            .build();
 
         assertEquals(OK, res.getStatusInfo(), "Incorrect response status!");
         assertEquals("text/ldpatch", res.getHeaderString(ACCEPT_PATCH), "Incorrect Accept-Patch header!");
@@ -151,7 +149,7 @@ public void testGetPreferLdprs() {
     public void testGetVersionedLdprs() {
         final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, true, true, true, null, null);
         final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource)))
-            .toCompletableFuture().join().build();
+            .build();
 
         assertEquals(OK, res.getStatusInfo(), "Incorrect response code!");
         assertEquals(from(time), res.getLastModified(), "Incorrect modified date!");
@@ -174,7 +172,6 @@ public void testGetVersionedLdprs() {
         final List<Object> varies = res.getHeaders().get(VARY);
         assertTrue(varies.contains(PREFER), "Missing Vary: prefer header!");
         assertFalse(varies.contains(RANGE), "Unexpected Vary: range header!");
-        assertFalse(varies.contains(WANT_DIGEST), "Unexpected Vary: want-digest header!");
         assertFalse(varies.contains(ACCEPT_DATETIME), "Unexpected Vary: accept-datetime header!");
     }
 
@@ -190,7 +187,7 @@ public void testExtraLinks() {
 
         final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, false, true, true, null, baseUrl);
         final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource)))
-            .toCompletableFuture().join().build();
+            .build();
 
         assertEquals(OK, res.getStatusInfo(), "Incorrect response code!");
         assertTrue(res.getLinks().stream().anyMatch(hasType(SKOS.Concept)), "Missing extra type link header!");
@@ -206,7 +203,7 @@ public void testNotAcceptableLdprs() {
         final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, false, true, true, null, baseUrl);
 
         final Response res = assertThrows(NotAcceptableException.class, () ->
-                unwrapAsyncError(handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource)))),
+                handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource))),
                 "No error thrown when given an unaccepable media type!").getResponse();
         assertEquals(NOT_ACCEPTABLE, res.getStatusInfo(), "Incorrect response code!");
     }
@@ -218,7 +215,7 @@ public void testMinimalLdprs() {
 
         final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, false, true, true, null, baseUrl);
         final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource)))
-            .toCompletableFuture().join().build();
+            .build();
 
         assertEquals(NO_CONTENT, res.getStatusInfo(), "Incorrect response code!");
         assertEquals(from(time), res.getLastModified(), "Incorrect modified date!");
@@ -241,7 +238,6 @@ public void testMinimalLdprs() {
         assertTrue(varies.contains(ACCEPT_DATETIME), "Missing Vary: accept-datetime header!");
         assertTrue(varies.contains(PREFER), "Missing Vary: prefer header!");
         assertFalse(varies.contains(RANGE), "Unexpected Vary: range header!");
-        assertFalse(varies.contains(WANT_DIGEST), "Unexpected Vary: want-digest header!");
     }
 
     @Test
@@ -254,7 +250,7 @@ public void testGetLdpc() {
         final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, false, true, true, null, null);
 
         final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource)))
-            .toCompletableFuture().join().build();
+            .build();
         assertEquals(OK, res.getStatusInfo(), "Incorrect response code");
         assertEquals(APPLICATION_SPARQL_UPDATE, res.getHeaderString(ACCEPT_PATCH), "Incorrect Accept-Patch header!");
         assertEquals(from(time), res.getLastModified(), "Incorrect modified date!");
@@ -286,7 +282,6 @@ public void testGetLdpc() {
         assertTrue(varies.contains(ACCEPT_DATETIME), "Missing Vary: accept-datetime header!");
         assertTrue(varies.contains(PREFER), "Missing Vary: prefer header!");
         assertFalse(varies.contains(RANGE), "Unexpected Vary: range header!");
-        assertFalse(varies.contains(WANT_DIGEST), "Unexpected Vary: want-digest header!");
     }
 
     @Test
@@ -297,7 +292,7 @@ public void testGetHTML() {
 
         final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, false, true, true, null, null);
         final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource)))
-            .toCompletableFuture().join().build();
+            .build();
 
         assertEquals(OK, res.getStatusInfo(), "Incorrect response code!");
         assertEquals(APPLICATION_SPARQL_UPDATE, res.getHeaderString(ACCEPT_PATCH), "Incorrect Accept-Patch header!");
@@ -315,7 +310,7 @@ public void testGetBinaryDescription() {
 
         final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, false, true, true, null, null);
         final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource)))
-            .toCompletableFuture().join().build();
+            .build();
 
         assertAll("Check binary description", checkBinaryDescription(res));
     }
@@ -328,7 +323,7 @@ public void testGetBinaryDescription2() {
 
         final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, false, true, true, null, null);
         final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource)))
-            .toCompletableFuture().join().build();
+            .build();
 
         assertAll("Check binary description", checkBinaryDescription(res));
     }
@@ -356,7 +351,7 @@ public void testGetBinary() throws IOException {
 
         final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, false, true, true, null, baseUrl);
         final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource)))
-            .toCompletableFuture().join().build();
+            .build();
 
         assertEquals(OK, res.getStatusInfo(), "Incorrect response code!");
         assertEquals(-1, res.getLength(), "Incorrect response length!");
@@ -379,7 +374,7 @@ public void testGetAcl() {
 
         final GetHandler handler = new GetHandler(mockTrellisRequest, mockBundler, false, true, true, null, baseUrl);
         final Response res = handler.getRepresentation(handler.standardHeaders(handler.initialize(mockResource)))
-            .toCompletableFuture().join().build();
+            .build();
 
         assertEquals(OK, res.getStatusInfo(), "Incorrect response code!");
         assertAll("Check LDP type link headers", checkLdpType(res, LDP.RDFSource));
diff --git a/core/http/src/test/java/org/trellisldp/http/impl/PostHandlerTest.java b/core/http/src/test/java/org/trellisldp/http/impl/PostHandlerTest.java
index 3bbe9f8a5..7230a4f7b 100644
--- a/core/http/src/test/java/org/trellisldp/http/impl/PostHandlerTest.java
+++ b/core/http/src/test/java/org/trellisldp/http/impl/PostHandlerTest.java
@@ -40,7 +40,6 @@
 import javax.ws.rs.BadRequestException;
 import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.Response;
-import javax.ws.rs.core.Response.ResponseBuilder;
 
 import org.apache.commons.rdf.api.Dataset;
 import org.apache.commons.rdf.api.IRI;
@@ -50,7 +49,6 @@
 import org.trellisldp.api.BinaryMetadata;
 import org.trellisldp.api.Metadata;
 import org.trellisldp.audit.DefaultAuditService;
-import org.trellisldp.http.core.Digest;
 import org.trellisldp.vocabulary.DC;
 import org.trellisldp.vocabulary.LDP;
 
@@ -185,7 +183,7 @@ public void testRdfEntity() throws IOException {
         assertEquals(create(baseUrl + path), res.getLocation(), "Incorrect Location header!");
         assertAll("Check LDP type Link headers", checkLdpType(res, LDP.RDFSource));
 
-        verify(mockBinaryService, never()).setContent(any(BinaryMetadata.class), any(InputStream.class), any());
+        verify(mockBinaryService, never()).setContent(any(BinaryMetadata.class), any(InputStream.class));
         verify(mockIoService).read(any(InputStream.class), eq(TURTLE), eq(baseUrl + path));
         verify(mockResourceService).create(any(Metadata.class), any(Dataset.class));
     }
@@ -204,48 +202,6 @@ public void testBinaryEntity() throws IOException {
         assertAll("Check Binary response", checkBinaryEntityResponse());
     }
 
-    @Test
-    public void testEntityWithDigest() throws IOException {
-        when(mockTrellisRequest.getContentType()).thenReturn("text/plain");
-        when(mockTrellisRequest.getDigest()).thenReturn(new Digest("md5", "1VOyRwUXW1CPdC5nelt7GQ=="));
-
-        final PostHandler handler = buildPostHandler("/simpleData.txt", "resource-with-entity", null);
-        final Response res = handler.createResource(handler.initialize(mockParent, MISSING_RESOURCE))
-            .toCompletableFuture().join().build();
-
-        assertEquals(CREATED, res.getStatusInfo(), "Incorrect response code!");
-        assertEquals(create(baseUrl + "resource-with-entity"), res.getLocation(), "Incorrect Location hearder!");
-        assertAll("Check LDP type Link headers", checkLdpType(res, LDP.NonRDFSource));
-        assertAll("Check Binary response", checkBinaryEntityResponse());
-    }
-
-    @Test
-    public void testEntityBadDigest() throws IOException {
-        when(mockTrellisRequest.getContentType()).thenReturn("text/plain");
-        when(mockTrellisRequest.getDigest()).thenReturn(new Digest("md5", "blahblah"));
-
-        final PostHandler handler = buildPostHandler("/simpleData.txt", "bad-digest", null);
-
-        final Response res = handler.createResource(handler.initialize(mockParent, MISSING_RESOURCE))
-                .thenApply(ResponseBuilder::build)
-                .exceptionally(err -> of(err).map(Throwable::getCause).filter(WebApplicationException.class::isInstance)
-                    .map(WebApplicationException.class::cast).orElseGet(() -> new WebApplicationException(err))
-                    .getResponse()).toCompletableFuture().join();
-        assertEquals(BAD_REQUEST, res.getStatusInfo(), "Incorrect response type!");
-    }
-
-    @Test
-    public void testBadDigest() throws IOException {
-        when(mockTrellisRequest.getContentType()).thenReturn("text/plain");
-        when(mockTrellisRequest.getDigest()).thenReturn(new Digest("foo", "blahblahblah"));
-
-        final PostHandler handler = buildPostHandler("/simpleData.txt", "bad-digest", null);
-
-        final Response res = assertThrows(BadRequestException.class, () ->
-                handler.createResource(handler.initialize(mockParent, MISSING_RESOURCE))).getResponse();
-        assertEquals(BAD_REQUEST, res.getStatusInfo(), "Incorrect response code!");
-    }
-
     @Test
     public void testError() throws IOException {
         when(mockResourceService.create(any(Metadata.class), any(Dataset.class))).thenReturn(asyncException());
diff --git a/core/http/src/test/java/org/trellisldp/http/impl/PutHandlerTest.java b/core/http/src/test/java/org/trellisldp/http/impl/PutHandlerTest.java
index 46f0fd4ca..6163a5993 100644
--- a/core/http/src/test/java/org/trellisldp/http/impl/PutHandlerTest.java
+++ b/core/http/src/test/java/org/trellisldp/http/impl/PutHandlerTest.java
@@ -101,7 +101,7 @@ public void testPutLdpResourceDefaultType() {
         assertEquals(NO_CONTENT, res.getStatusInfo(), "Incorrect response type");
         assertAll("Check LDP type Link headers", checkLdpType(res, LDP.RDFSource));
 
-        verify(mockBinaryService, never()).setContent(any(BinaryMetadata.class), any(InputStream.class), any());
+        verify(mockBinaryService, never()).setContent(any(BinaryMetadata.class), any(InputStream.class));
         verify(mockIoService).read(any(InputStream.class), eq(TURTLE), eq(baseUrl + "resource"));
     }
 
@@ -118,7 +118,7 @@ public void testPutLdpResourceContainer() {
         assertEquals(NO_CONTENT, res.getStatusInfo(), "Incorrect response code");
         assertAll("Check LDP type Link headers", checkLdpType(res, LDP.Container));
 
-        verify(mockBinaryService, never()).setContent(any(BinaryMetadata.class), any(InputStream.class), any());
+        verify(mockBinaryService, never()).setContent(any(BinaryMetadata.class), any(InputStream.class));
         verify(mockIoService).read(any(InputStream.class), eq(TURTLE), eq(baseUrl + "resource"));
     }
 
@@ -282,7 +282,7 @@ private Stream<Executable> checkRdfPut(final Response res) {
         return Stream.of(
                 () -> assertAll("Check LDP type Link headers", checkLdpType(res, LDP.RDFSource)),
                 () -> verify(mockBinaryService, never().description("Binary service shouldn't have been called!"))
-                             .setContent(any(BinaryMetadata.class), any(InputStream.class), any()),
+                             .setContent(any(BinaryMetadata.class), any(InputStream.class)),
                 () -> verify(mockIoService, description("IOService should have been called with an RDF resource"))
                              .read(any(InputStream.class), any(RDFSyntax.class), anyString()));
     }
diff --git a/platform/karaf/src/main/resources/features.xml b/platform/karaf/src/main/resources/features.xml
index c93197a7b..34f21597c 100644
--- a/platform/karaf/src/main/resources/features.xml
+++ b/platform/karaf/src/main/resources/features.xml
@@ -36,7 +36,6 @@
     <feature dependency="true">trellis-vocabulary</feature>
 
     <bundle dependency="true">mvn:org.apache.tamaya/tamaya-api/${tamayaVersion}</bundle>
-    <bundle dependency="true">mvn:commons-codec/commons-codec/${commonsCodecVersion}</bundle>
     <bundle dependency="true">mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.javax-inject/1_2</bundle>
 
     <bundle>mvn:org.trellisldp/trellis-file/${project.version}</bundle>
diff --git a/platform/webapp/src/main/resources/META-INF/javaconfiguration.properties b/platform/webapp/src/main/resources/META-INF/javaconfiguration.properties
index 2da9a921c..8ae994b14 100644
--- a/platform/webapp/src/main/resources/META-INF/javaconfiguration.properties
+++ b/platform/webapp/src/main/resources/META-INF/javaconfiguration.properties
@@ -25,7 +25,7 @@ trellis.http.cache.maxage=86400
 trellis.webapp.cors.enabled=true
 trellis.http.cors.alloworigin=*
 trellis.http.cors.allowmethods=PUT,DELETE,PATCH,GET,HEAD,OPTIONS,POST
-trellis.http.cors.allowheaders=Content-Type,Link,Accept,Accept-Datetime,Prefer,Want-Digest,Slug,Digest,Origin
-trellis.http.cors.exposeheaders=Content-Type,Link,Memento-Datetime,Preference-Applied,Location,Accept-Patch,Accept-Post,Digest,Accept-Range,ETag,Vary
+trellis.http.cors.allowheaders=Content-Type,Link,Accept,Accept-Datetime,Prefer,Slug,Origin
+trellis.http.cors.exposeheaders=Content-Type,Link,Memento-Datetime,Preference-Applied,Location,Accept-Patch,Accept-Post,Accept-Range,ETag,Vary
 trellis.http.cors.allowcredentials=false
 trellis.http.cors.maxage=180