diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImplRestore.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImplRestore.java
index 1082f0d0c..3db9e5379 100644
--- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImplRestore.java
+++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/VersionManagerImplRestore.java
@@ -22,6 +22,7 @@ import javax.jcr.ItemExistsException;
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
 import javax.jcr.UnsupportedRepositoryOperationException;
+import javax.jcr.nodetype.ConstraintViolationException;
 import javax.jcr.version.OnParentVersionAction;
 import javax.jcr.version.Version;
 import javax.jcr.version.VersionException;
@@ -407,7 +408,13 @@ abstract public class VersionManagerImplRestore extends VersionManagerImplBase {
         for (PropertyState prop: state.getProperties()) {
             Name propName = prop.getName();
             if (!propNames.contains(propName)) {
-                int opv = state.getDefinition(prop).getOnParentVersion();
+                int opv;
+                try {
+                    opv = state.getDefinition(prop).getOnParentVersion();
+                } catch (ConstraintViolationException ignore) {
+                    // N/P definition no longer exists (like from a mixin on N but not on F, already removed above)
+                    opv = OnParentVersionAction.ABORT;
+                }
                 if (opv == OnParentVersionAction.COPY
                         || opv == OnParentVersionAction.VERSION
                         || opv == OnParentVersionAction.ABORT) {
diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/RestoreTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/RestoreTest.java
index 8679ab2a9..9b8e13224 100644
--- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/RestoreTest.java
+++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/RestoreTest.java
@@ -21,6 +21,7 @@ import org.apache.jackrabbit.core.UserTransactionImpl;
 
 import javax.jcr.Node;
 import javax.jcr.version.Version;
+import javax.jcr.version.VersionManager;
 
 /**
  * Test case for JCR-1476.
@@ -39,4 +40,22 @@ public class RestoreTest extends AbstractJCRTest {
         assertEquals("Wrong version restored", versionName, n.getBaseVersion().getName());
         tx.commit();
     }
+
+    public void testRestoreToNodeWithAnUnknownPropertyType() throws Exception {
+        // create n from a type without jcr:title and no matching residual properties, unlike default nt:unstructured
+        Node n = testRootNode.addNode(nodeName1, "nt:query");
+        n.addMixin(mixVersionable);
+        superuser.save();
+        VersionManager versionManager = superuser.getWorkspace().getVersionManager();
+        Version v10 = versionManager.checkin(n.getPath());
+        versionManager.checkout(n.getPath());
+        // use mix:title to allow adding property jcr:title
+        n.addMixin("mix:title");
+        // add jcr:title property which is *not* allowed by the frozen node its type alone (nt:query)
+        n.setProperty("jcr:title", "title");
+        superuser.save();
+        // restore base version without mix:title mixin, removing jcr:title property
+        versionManager.restore(v10, true);
+        assertFalse(n.hasProperty("jcr:title"));
+    }
 }
