diff --git a/src/main/java/org/apache/sling/commons/clam/internal/ClamdService.java b/src/main/java/org/apache/sling/commons/clam/internal/ClamdService.java
index ef23eb8..581dc0d 100644
--- a/src/main/java/org/apache/sling/commons/clam/internal/ClamdService.java
+++ b/src/main/java/org/apache/sling/commons/clam/internal/ClamdService.java
@@ -25,6 +25,7 @@
 import java.net.Socket;
 import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.sling.commons.clam.ClamService;
@@ -53,6 +54,10 @@
 
     private ClamdServiceConfiguration configuration;
 
+    private static final byte[] PING_COMMAND = "nPING\n".getBytes(StandardCharsets.US_ASCII);
+
+    private static final byte[] PONG_REPLY = "PONG\n".getBytes(StandardCharsets.US_ASCII);
+
     private static final byte[] INSTREAM_COMMAND = "nINSTREAM\n".getBytes(StandardCharsets.US_ASCII);
 
     private static final String OK_REPLY_PATTERN = "stream: OK";
@@ -85,7 +90,7 @@
 
     private void configure(final ClamdServiceConfiguration configuration) {
         this.configuration = configuration;
-        // TODO play ping pong on configuration change
+        playPingPong();
     }
 
     @Override
@@ -100,6 +105,36 @@
         }
     }
 
+    private byte[] doPing() throws IOException {
+        logger.info("pinging clam daemon at {}:{}", configuration.clamd_host(), configuration.clamd_port());
+        try (final Socket socket = new Socket(configuration.clamd_host(), configuration.clamd_port());
+             final OutputStream out = new BufferedOutputStream(socket.getOutputStream());
+             final InputStream in = socket.getInputStream()) {
+
+            socket.setSoTimeout(configuration.connection_timeout());
+
+            // send command
+            out.write(PING_COMMAND);
+            out.flush();
+
+            return IOUtils.toByteArray(in);
+        }
+    }
+
+    private void playPingPong() {
+        try {
+            final byte[] reply = doPing();
+            if (Arrays.equals(reply, PONG_REPLY)) {
+                logger.info("clam daemon replied with PONG");
+            } else {
+                final String message = new String(reply, StandardCharsets.US_ASCII);
+                logger.error("clam daemon replied with unknown message: {}", message);
+            }
+        } catch (IOException e) {
+            logger.error("pinging clam daemon failed: {}", e.getMessage());
+        }
+    }
+
     /**
      * man (8) clamd
      * INSTREAM
