Index: jackrabbit-core/src/main/resources-filtered/org/apache/jackrabbit/core/repository.properties
===================================================================
--- jackrabbit-core/src/main/resources-filtered/org/apache/jackrabbit/core/repository.properties	(revision 1202130)
+++ jackrabbit-core/src/main/resources-filtered/org/apache/jackrabbit/core/repository.properties	(working copy)
@@ -35,3 +35,6 @@
 
 # The descriptor for the version of this repository implementation.
 jcr.repository.version = ${pom.version}
+
+# The repository supports the AdditionalEventInfo extension
+org.apache.jackrabbit.spi.commons.AdditionalEventInfo = true
Index: jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
===================================================================
--- jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java	(revision 1202201)
+++ jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java	(working copy)
@@ -244,7 +244,7 @@
     /** Repository descriptors. */
     private final Map<String, QValue[]> descriptors =
             new HashMap<String, QValue[]>();
-
+    
     /**
      * Same as {@link #RepositoryServiceImpl(String, IdFactory, NameFactory, PathFactory, QValueFactory, int, int)}
      * using {@link ItemInfoCacheImpl#DEFAULT_CACHE_SIZE)} as size for the item
@@ -2021,11 +2021,30 @@
         checkEventFilterSupport(filters);
     }
 
+    private Boolean remoteServerSupportsObservationExtensions = null;
+    
+    private boolean doesRemoteServerSupportObservationExtensions() {
+        if (remoteServerSupportsObservationExtensions == null) {
+            remoteServerSupportsObservationExtensions = false;
+            try {
+                QValue[] support = this.getRepositoryDescriptors().get("org.apache.jackrabbit.spi.commons.AdditionalEventInfo");
+                remoteServerSupportsObservationExtensions = support != null
+                        && support.length == 1 ? support[0].getBoolean()
+                        : false;
+            } catch (RepositoryException ex) {
+                log.warn("Checking for remote observation extensions", ex);
+            }
+        }
+        return remoteServerSupportsObservationExtensions;
+    }    
+
     private void checkEventFilterSupport(EventFilter[] filters) throws UnsupportedRepositoryOperationException {
         for (EventFilter ef : filters) {
             if (ef instanceof EventFilterImpl) {
                 EventFilterImpl efi = (EventFilterImpl)ef;
-                // TODO: add code that verifies that the remote server can send node type information
+                if (efi.getNodeTypeNames() != null && ! doesRemoteServerSupportObservationExtensions()) {
+                    throw new UnsupportedRepositoryOperationException("The remote server does not support the Observation extensions needed to filter on node types");
+                }
                 if (efi.getNoLocal()) {
                     throw new UnsupportedRepositoryOperationException("This SPI implementation does not support filtering using the 'noLocal' flag (see issue JCR-2542)");
                 }
