diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml
index 8c39e88be..9ec9c06e8 100644
--- a/.github/workflows/maven.yml
+++ b/.github/workflows/maven.yml
@@ -21,10 +21,10 @@ jobs:
         docker-img:
           - docker.io/arangodb/arangodb:3.8.7
           - docker.io/arangodb/arangodb:3.9.3
-          - docker.io/arangodb/arangodb-preview:3.10-nightly
+          - docker.io/arangodb/arangodb-preview:3.10.0-beta.1
           - docker.io/arangodb/enterprise:3.8.7
           - docker.io/arangodb/enterprise:3.9.3
-          - docker.io/arangodb/enterprise-preview:3.10-nightly
+          - docker.io/arangodb/enterprise-preview:3.10.0-beta.1
         topology:
           - single
           - cluster
diff --git a/src/main/java/com/arangodb/entity/arangosearch/CollectionLink.java b/src/main/java/com/arangodb/entity/arangosearch/CollectionLink.java
index adf57d9da..246662ec9 100644
--- a/src/main/java/com/arangodb/entity/arangosearch/CollectionLink.java
+++ b/src/main/java/com/arangodb/entity/arangosearch/CollectionLink.java
@@ -35,11 +35,13 @@ public class CollectionLink {
     private Boolean trackListPositions;
     private StoreValuesType storeValues;
     private final Collection<FieldLink> fields;
+    private final Collection<FieldLink> nested;
 
     private CollectionLink(final String name) {
         super();
         this.name = name;
         fields = new ArrayList<>();
+        nested = new ArrayList<>();
         analyzers = new ArrayList<>();
     }
 
@@ -100,6 +102,16 @@ public CollectionLink fields(final FieldLink... fields) {
         return this;
     }
 
+    /**
+     * @param nested A list of nested fields
+     * @return link
+     * @since ArangoDB 3.10
+     */
+    public CollectionLink nested(final FieldLink... nested) {
+        this.nested.addAll(Arrays.asList(nested));
+        return this;
+    }
+
     public String getName() {
         return name;
     }
@@ -124,4 +136,8 @@ public Collection<FieldLink> getFields() {
         return fields;
     }
 
+    public Collection<FieldLink> getNested() {
+        return nested;
+    }
+
 }
\ No newline at end of file
diff --git a/src/main/java/com/arangodb/entity/arangosearch/FieldLink.java b/src/main/java/com/arangodb/entity/arangosearch/FieldLink.java
index d6bf26381..69d37b634 100644
--- a/src/main/java/com/arangodb/entity/arangosearch/FieldLink.java
+++ b/src/main/java/com/arangodb/entity/arangosearch/FieldLink.java
@@ -12,11 +12,13 @@ public class FieldLink {
     private Boolean trackListPositions;
     private StoreValuesType storeValues;
     private final Collection<FieldLink> fields;
+    private final Collection<FieldLink> nested;
 
     private FieldLink(final String name) {
         super();
         this.name = name;
         fields = new ArrayList<>();
+        nested = new ArrayList<>();
         analyzers = new ArrayList<>();
     }
 
@@ -77,6 +79,16 @@ public FieldLink fields(final FieldLink... fields) {
         return this;
     }
 
+    /**
+     * @param nested A list of nested fields
+     * @return link
+     * @since ArangoDB 3.10
+     */
+    public FieldLink nested(final FieldLink... nested) {
+        this.nested.addAll(Arrays.asList(nested));
+        return this;
+    }
+
     public String getName() {
         return name;
     }
@@ -101,4 +113,7 @@ public Collection<FieldLink> getFields() {
         return fields;
     }
 
+    public Collection<FieldLink> getNested() {
+        return nested;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/arangodb/internal/velocypack/VPackDeserializers.java b/src/main/java/com/arangodb/internal/velocypack/VPackDeserializers.java
index 5c72b8e0e..3971cac66 100644
--- a/src/main/java/com/arangodb/internal/velocypack/VPackDeserializers.java
+++ b/src/main/java/com/arangodb/internal/velocypack/VPackDeserializers.java
@@ -221,6 +221,13 @@ public class VPackDeserializers {
                         link.fields(deserializeField(fieldsIterator.next()));
                     }
                 }
+                final VPackSlice nested = value.get("nested");
+                if (nested.isObject()) {
+                    final Iterator<Entry<String, VPackSlice>> fieldsIterator = nested.objectIterator();
+                    while (fieldsIterator.hasNext()) {
+                        link.nested(deserializeField(fieldsIterator.next()));
+                    }
+                }
                 properties.addLink(link);
             }
         }
@@ -284,6 +291,13 @@ protected static FieldLink deserializeField(final Entry<String, VPackSlice> fiel
                 link.fields(deserializeField(fieldsIterator.next()));
             }
         }
+        final VPackSlice nested = value.get("nested");
+        if (nested.isObject()) {
+            final Iterator<Entry<String, VPackSlice>> fieldsIterator = nested.objectIterator();
+            while (fieldsIterator.hasNext()) {
+                link.nested(deserializeField(fieldsIterator.next()));
+            }
+        }
         return link;
     }
 
diff --git a/src/main/java/com/arangodb/internal/velocypack/VPackSerializers.java b/src/main/java/com/arangodb/internal/velocypack/VPackSerializers.java
index 4d786183d..467b1add6 100644
--- a/src/main/java/com/arangodb/internal/velocypack/VPackSerializers.java
+++ b/src/main/java/com/arangodb/internal/velocypack/VPackSerializers.java
@@ -184,6 +184,7 @@ public class VPackSerializers {
                     builder.add("storeValues", storeValues.name().toLowerCase(Locale.ENGLISH));
                 }
                 serializeFieldLinks(builder, collectionLink.getFields());
+                serializeNested(builder, collectionLink.getNested());
                 builder.close();
             }
             builder.close();
@@ -229,31 +230,44 @@ public class VPackSerializers {
     private static void serializeFieldLinks(final VPackBuilder builder, final Collection<FieldLink> links) {
         if (!links.isEmpty()) {
             builder.add("fields", ValueType.OBJECT);
-            for (final FieldLink fieldLink : links) {
-                builder.add(fieldLink.getName(), ValueType.OBJECT);
-                final Collection<String> analyzers = fieldLink.getAnalyzers();
-                if (!analyzers.isEmpty()) {
-                    builder.add("analyzers", ValueType.ARRAY);
-                    for (final String analyzer : analyzers) {
-                        builder.add(analyzer);
-                    }
-                    builder.close();
-                }
-                final Boolean includeAllFields = fieldLink.getIncludeAllFields();
-                if (includeAllFields != null) {
-                    builder.add("includeAllFields", includeAllFields);
-                }
-                final Boolean trackListPositions = fieldLink.getTrackListPositions();
-                if (trackListPositions != null) {
-                    builder.add("trackListPositions", trackListPositions);
-                }
-                final StoreValuesType storeValues = fieldLink.getStoreValues();
-                if (storeValues != null) {
-                    builder.add("storeValues", storeValues.name().toLowerCase(Locale.ENGLISH));
+            serializeFields(builder, links);
+            builder.close();
+        }
+    }
+
+    private static void serializeNested(final VPackBuilder builder, final Collection<FieldLink> nested) {
+        if (!nested.isEmpty()) {
+            builder.add("nested", ValueType.OBJECT);
+            serializeFields(builder, nested);
+            builder.close();
+        }
+    }
+
+    private static void serializeFields(final VPackBuilder builder, final Collection<FieldLink> links){
+        for (final FieldLink fieldLink : links) {
+            builder.add(fieldLink.getName(), ValueType.OBJECT);
+            final Collection<String> analyzers = fieldLink.getAnalyzers();
+            if (!analyzers.isEmpty()) {
+                builder.add("analyzers", ValueType.ARRAY);
+                for (final String analyzer : analyzers) {
+                    builder.add(analyzer);
                 }
-                serializeFieldLinks(builder, fieldLink.getFields());
                 builder.close();
             }
+            final Boolean includeAllFields = fieldLink.getIncludeAllFields();
+            if (includeAllFields != null) {
+                builder.add("includeAllFields", includeAllFields);
+            }
+            final Boolean trackListPositions = fieldLink.getTrackListPositions();
+            if (trackListPositions != null) {
+                builder.add("trackListPositions", trackListPositions);
+            }
+            final StoreValuesType storeValues = fieldLink.getStoreValues();
+            if (storeValues != null) {
+                builder.add("storeValues", storeValues.name().toLowerCase(Locale.ENGLISH));
+            }
+            serializeFieldLinks(builder, fieldLink.getFields());
+            serializeNested(builder, fieldLink.getNested());
             builder.close();
         }
     }
diff --git a/src/test/java/com/arangodb/ArangoSearchTest.java b/src/test/java/com/arangodb/ArangoSearchTest.java
index 3a3d66ce8..cb4489ca8 100644
--- a/src/test/java/com/arangodb/ArangoSearchTest.java
+++ b/src/test/java/com/arangodb/ArangoSearchTest.java
@@ -754,19 +754,20 @@ void enhancedTextAnalyzerTyped(ArangoDatabase db) {
     void arangoSearchOptions(ArangoDatabase db) {
         assumeTrue(isAtLeastVersion(3, 4));
         String viewName = "view-" + rnd();
-        ArangoSearchCreateOptions options = new ArangoSearchCreateOptions()
-                .link(
-                        CollectionLink.on(COLL_1)
-                                .analyzers("identity")
-                                .fields(
-                                        FieldLink.on("id")
-                                                .analyzers("identity")
-                                )
-                                .includeAllFields(true)
-                                .storeValues(StoreValuesType.ID)
-                                .trackListPositions(false)
-
-                );
+        FieldLink field = FieldLink.on("f1");
+        if (isEnterprise()) {
+            field.nested(FieldLink.on("f2"));
+        }
+        CollectionLink link = CollectionLink.on(COLL_1)
+                .analyzers("identity")
+                .fields(field)
+                .includeAllFields(true)
+                .storeValues(StoreValuesType.ID)
+                .trackListPositions(false);
+        if (isEnterprise()) {
+            link.nested(FieldLink.on("f3"));
+        }
+        ArangoSearchCreateOptions options = new ArangoSearchCreateOptions().link(link);
 
         final ArangoSearch view = db.arangoSearch(viewName);
         view.create(options);
@@ -776,13 +777,27 @@ void arangoSearchOptions(ArangoDatabase db) {
         assertThat(properties.getId()).isNotNull();
         assertThat(properties.getName()).isEqualTo(viewName);
         assertThat(properties.getType()).isEqualTo(ViewType.ARANGO_SEARCH);
+        assertThat(properties.getLinks()).isNotEmpty();
+
+        CollectionLink createdLink = properties.getLinks().iterator().next();
+        assertThat(createdLink.getName()).isEqualTo(COLL_1);
+        assertThat(createdLink.getAnalyzers()).contains("identity");
+        assertThat(createdLink.getIncludeAllFields()).isTrue();
+        assertThat(createdLink.getStoreValues()).isEqualTo(StoreValuesType.ID);
+        assertThat(createdLink.getTrackListPositions()).isFalse();
+        if (isEnterprise() && isAtLeastVersion(3, 10)) {
+            assertThat(createdLink.getNested()).isNotEmpty();
+            FieldLink nested = createdLink.getNested().iterator().next();
+            assertThat(nested.getName()).isEqualTo("f3");
+        }
 
-        CollectionLink link = properties.getLinks().iterator().next();
-        assertThat(link.getAnalyzers()).contains("identity");
-        assertThat(link.getName()).isEqualTo(COLL_1);
-        assertThat(link.getIncludeAllFields()).isTrue();
-        assertThat(link.getStoreValues()).isEqualTo(StoreValuesType.ID);
-        assertThat(link.getTrackListPositions()).isFalse();
+        FieldLink fieldLink = createdLink.getFields().iterator().next();
+        assertThat(fieldLink.getName()).isEqualTo("f1");
+        if (isEnterprise() && isAtLeastVersion(3, 10)) {
+            assertThat(fieldLink.getNested()).isNotEmpty();
+            FieldLink nested = fieldLink.getNested().iterator().next();
+            assertThat(nested.getName()).isEqualTo("f2");
+        }
     }
 
     @ParameterizedTest(name = "{index}")