diff --git a/src/main/java/org/apache/sling/sitemap/builder/extensions/GoogleImageExtension.java b/src/main/java/org/apache/sling/sitemap/builder/extensions/GoogleImageExtension.java
index aa30078..68bbe1e 100644
--- a/src/main/java/org/apache/sling/sitemap/builder/extensions/GoogleImageExtension.java
+++ b/src/main/java/org/apache/sling/sitemap/builder/extensions/GoogleImageExtension.java
@@ -20,6 +20,7 @@
 
 import org.apache.sling.sitemap.builder.Extension;
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.osgi.annotation.versioning.ProviderType;
 
 /**
@@ -34,15 +35,15 @@
     GoogleImageExtension setUrl(@NotNull String location);
 
     @NotNull
-    GoogleImageExtension setCaption(String caption);
+    GoogleImageExtension setCaption(@Nullable String caption);
 
     @NotNull
-    GoogleImageExtension setGeoLocation(String geoLocation);
+    GoogleImageExtension setGeoLocation(@Nullable String geoLocation);
 
     @NotNull
-    GoogleImageExtension setTitle(String title);
+    GoogleImageExtension setTitle(@Nullable String title);
 
     @NotNull
-    GoogleImageExtension setLicense(String licenseLocation);
+    GoogleImageExtension setLicense(@Nullable String licenseLocation);
 
 }
diff --git a/src/main/java/org/apache/sling/sitemap/builder/extensions/GoogleNewsExtension.java b/src/main/java/org/apache/sling/sitemap/builder/extensions/GoogleNewsExtension.java
index aa97aac..04f0db0 100644
--- a/src/main/java/org/apache/sling/sitemap/builder/extensions/GoogleNewsExtension.java
+++ b/src/main/java/org/apache/sling/sitemap/builder/extensions/GoogleNewsExtension.java
@@ -20,6 +20,7 @@
 
 import org.apache.sling.sitemap.builder.Extension;
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.osgi.annotation.versioning.ProviderType;
 
 import java.time.LocalDate;
@@ -82,14 +83,14 @@
     GoogleNewsExtension setTitle(@NotNull String title);
 
     @NotNull
-    GoogleNewsExtension setAccessRestriction(AccessRestriction accessRestriction);
+    GoogleNewsExtension setAccessRestriction(@Nullable AccessRestriction accessRestriction);
 
     @NotNull
-    GoogleNewsExtension setGenres(Collection<Genre> genres);
+    GoogleNewsExtension setGenres(@Nullable Collection<Genre> genres);
 
     @NotNull
-    GoogleNewsExtension setKeywords(Collection<String> keywords);
+    GoogleNewsExtension setKeywords(@Nullable Collection<String> keywords);
 
     @NotNull
-    GoogleNewsExtension setStockTickers(Collection<String> stockTickers);
+    GoogleNewsExtension setStockTickers(@Nullable Collection<String> stockTickers);
 }
diff --git a/src/main/java/org/apache/sling/sitemap/builder/extensions/GoogleVideoExtension.java b/src/main/java/org/apache/sling/sitemap/builder/extensions/GoogleVideoExtension.java
index ffb6b85..9644700 100644
--- a/src/main/java/org/apache/sling/sitemap/builder/extensions/GoogleVideoExtension.java
+++ b/src/main/java/org/apache/sling/sitemap/builder/extensions/GoogleVideoExtension.java
@@ -118,7 +118,7 @@
      * @return
      */
     @NotNull
-    GoogleVideoExtension setUrl(String contentLocation);
+    GoogleVideoExtension setUrl(@Nullable String contentLocation);
 
     /**
      * {@code player_loc}
@@ -127,37 +127,37 @@
      * @return
      */
     @NotNull
-    GoogleVideoExtension setPlayerUrl(String playerLocation);
+    GoogleVideoExtension setPlayerUrl(@Nullable String playerLocation);
 
     @NotNull
-    GoogleVideoExtension setDuration(Integer duration);
+    GoogleVideoExtension setDuration(@Nullable Integer duration);
 
     @NotNull
-    GoogleVideoExtension setExpirationDate(LocalDate date);
+    GoogleVideoExtension setExpirationDate(@Nullable LocalDate date);
 
     @NotNull
-    GoogleVideoExtension setExpirationDate(OffsetDateTime date);
+    GoogleVideoExtension setExpirationDate(@Nullable OffsetDateTime date);
 
     @NotNull
-    GoogleVideoExtension setRating(Float rating);
+    GoogleVideoExtension setRating(@Nullable Float rating);
 
     @NotNull
-    GoogleVideoExtension setViewCount(Integer viewCount);
+    GoogleVideoExtension setViewCount(@Nullable Integer viewCount);
 
     @NotNull
-    GoogleVideoExtension setPublicationDate(LocalDate date);
+    GoogleVideoExtension setPublicationDate(@Nullable LocalDate date);
 
     @NotNull
-    GoogleVideoExtension setPublicationDate(OffsetDateTime date);
+    GoogleVideoExtension setPublicationDate(@Nullable OffsetDateTime date);
 
     @NotNull
-    GoogleVideoExtension setTags(Collection<String> tags);
+    GoogleVideoExtension setTags(@Nullable Collection<String> tags);
 
     @NotNull
-    GoogleVideoExtension setCategory(String category);
+    GoogleVideoExtension setCategory(@Nullable String category);
 
     @NotNull
-    GoogleVideoExtension setFamilyFriendly(Boolean familyFriendly);
+    GoogleVideoExtension setFamilyFriendly(@Nullable Boolean familyFriendly);
 
     /**
      * {@code restriction}
@@ -183,16 +183,16 @@
     GoogleVideoExtension addPrice(float price, @NotNull String currency, @Nullable PriceType type, @Nullable Resolution resolution);
 
     @NotNull
-    GoogleVideoExtension setRequiresSubscription(Boolean requiresSubscription);
+    GoogleVideoExtension setRequiresSubscription(@Nullable Boolean requiresSubscription);
 
     @NotNull
-    GoogleVideoExtension setUploader(String uploader);
+    GoogleVideoExtension setUploader(@Nullable String uploader);
 
     @NotNull
-    GoogleVideoExtension setUploaderUrl(String uploaderInfo);
+    GoogleVideoExtension setUploaderUrl(@Nullable String uploaderInfo);
 
     @NotNull
-    GoogleVideoExtension setLive(Boolean live);
+    GoogleVideoExtension setLive(@Nullable Boolean live);
 
 
 }
diff --git a/src/main/java/org/apache/sling/sitemap/impl/builder/extensions/GoogleImageExtensionProvider.java b/src/main/java/org/apache/sling/sitemap/impl/builder/extensions/GoogleImageExtensionProvider.java
index 9ac4cd2..cecbb17 100644
--- a/src/main/java/org/apache/sling/sitemap/impl/builder/extensions/GoogleImageExtensionProvider.java
+++ b/src/main/java/org/apache/sling/sitemap/impl/builder/extensions/GoogleImageExtensionProvider.java
@@ -22,6 +22,7 @@
 import org.apache.sling.sitemap.spi.builder.AbstractExtension;
 import org.apache.sling.sitemap.spi.builder.SitemapExtensionProvider;
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.osgi.service.component.annotations.Component;
 
 import javax.xml.stream.XMLStreamException;
@@ -67,28 +68,28 @@
 
         @Override
         @NotNull
-        public GoogleImageExtension setCaption(String caption) {
+        public GoogleImageExtension setCaption(@Nullable String caption) {
             this.caption = caption;
             return this;
         }
 
         @Override
         @NotNull
-        public GoogleImageExtension setGeoLocation(String geoLocation) {
+        public GoogleImageExtension setGeoLocation(@Nullable String geoLocation) {
             this.geoLocation = geoLocation;
             return this;
         }
 
         @Override
         @NotNull
-        public GoogleImageExtension setTitle(String title) {
+        public GoogleImageExtension setTitle(@Nullable String title) {
             this.title = title;
             return this;
         }
 
         @Override
         @NotNull
-        public GoogleImageExtension setLicense(String licenseLocation) {
+        public GoogleImageExtension setLicense(@Nullable String licenseLocation) {
             this.license = licenseLocation;
             return this;
         }
diff --git a/src/main/java/org/apache/sling/sitemap/impl/builder/extensions/GoogleNewsExtensionProvider.java b/src/main/java/org/apache/sling/sitemap/impl/builder/extensions/GoogleNewsExtensionProvider.java
index 09c37fb..c2d8af3 100644
--- a/src/main/java/org/apache/sling/sitemap/impl/builder/extensions/GoogleNewsExtensionProvider.java
+++ b/src/main/java/org/apache/sling/sitemap/impl/builder/extensions/GoogleNewsExtensionProvider.java
@@ -22,6 +22,7 @@
 import org.apache.sling.sitemap.spi.builder.AbstractExtension;
 import org.apache.sling.sitemap.spi.builder.SitemapExtensionProvider;
 import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 import org.osgi.service.component.annotations.Component;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -108,7 +109,7 @@
 
         @Override
         @NotNull
-        public GoogleNewsExtension setGenres(Collection<Genre> genres) {
+        public GoogleNewsExtension setGenres(@Nullable Collection<Genre> genres) {
             this.genres = genres != null && !genres.isEmpty()
                     ? genres.stream().map(Genre::getValue).collect(Collectors.joining(","))
                     : null;
@@ -117,7 +118,7 @@
 
         @Override
         @NotNull
-        public GoogleNewsExtension setKeywords(Collection<String> keywords) {
+        public GoogleNewsExtension setKeywords(@Nullable Collection<String> keywords) {
             this.keywords = keywords != null && !keywords.isEmpty()
                     ? String.join(",", keywords)
                     : null;
@@ -126,7 +127,7 @@
 
         @Override
         @NotNull
-        public GoogleNewsExtension setStockTickers(Collection<String> stockTickers) {
+        public GoogleNewsExtension setStockTickers(@Nullable Collection<String> stockTickers) {
             if (stockTickers != null) {
                 if (stockTickers.size() > 5) {
                     LOG.warn("Adjusting stock tickers as they are out of bounds (0,5): {}", stockTickers.size());
diff --git a/src/main/java/org/apache/sling/sitemap/impl/builder/extensions/GoogleVideoExtensionProvider.java b/src/main/java/org/apache/sling/sitemap/impl/builder/extensions/GoogleVideoExtensionProvider.java
index 4d96dee..df097d0 100644
--- a/src/main/java/org/apache/sling/sitemap/impl/builder/extensions/GoogleVideoExtensionProvider.java
+++ b/src/main/java/org/apache/sling/sitemap/impl/builder/extensions/GoogleVideoExtensionProvider.java
@@ -158,21 +158,21 @@
 
         @Override
         @NotNull
-        public GoogleVideoExtension setUrl(String contentLocation) {
+        public GoogleVideoExtension setUrl(@Nullable String contentLocation) {
             this.contentLocation = contentLocation;
             return this;
         }
 
         @Override
         @NotNull
-        public GoogleVideoExtension setPlayerUrl(String playerLocation) {
+        public GoogleVideoExtension setPlayerUrl(@Nullable String playerLocation) {
             this.playerLocation = playerLocation;
             return this;
         }
 
         @Override
         @NotNull
-        public GoogleVideoExtension setDuration(Integer duration) {
+        public GoogleVideoExtension setDuration(@Nullable Integer duration) {
             if (duration != null) {
                 if (duration < 0 || duration > 28800) {
                     LOG.warn("Adjusting duration as it is out of bounds (0, 28800): {}", duration);
@@ -187,21 +187,21 @@
 
         @Override
         @NotNull
-        public GoogleVideoExtension setExpirationDate(LocalDate date) {
+        public GoogleVideoExtension setExpirationDate(@Nullable LocalDate date) {
             this.expirationDate = date;
             return this;
         }
 
         @Override
         @NotNull
-        public GoogleVideoExtension setExpirationDate(OffsetDateTime date) {
+        public GoogleVideoExtension setExpirationDate(@Nullable OffsetDateTime date) {
             this.expirationDate = date;
             return this;
         }
 
         @Override
         @NotNull
-        public GoogleVideoExtension setRating(Float rating) {
+        public GoogleVideoExtension setRating(@Nullable Float rating) {
             if (rating != null) {
                 if (rating < 0 || rating > 5) {
                     LOG.warn("Adjusting rating as it is out of bounds (0,5): {}", rating);
@@ -216,7 +216,7 @@
 
         @Override
         @NotNull
-        public GoogleVideoExtension setViewCount(Integer viewCount) {
+        public GoogleVideoExtension setViewCount(@Nullable Integer viewCount) {
             if (viewCount != null) {
                 if (viewCount < 0) {
                     LOG.warn("Adjusting negative view count: {}", viewCount);
@@ -231,35 +231,35 @@
 
         @Override
         @NotNull
-        public GoogleVideoExtension setPublicationDate(LocalDate date) {
+        public GoogleVideoExtension setPublicationDate(@Nullable LocalDate date) {
             this.publicationDate = date;
             return this;
         }
 
         @Override
         @NotNull
-        public GoogleVideoExtension setPublicationDate(OffsetDateTime date) {
+        public GoogleVideoExtension setPublicationDate(@Nullable OffsetDateTime date) {
             this.publicationDate = date;
             return this;
         }
 
         @Override
         @NotNull
-        public GoogleVideoExtension setTags(Collection<String> tags) {
-            this.tags = new ArrayList<>(tags);
+        public GoogleVideoExtension setTags(@Nullable Collection<String> tags) {
+            this.tags = tags != null ? new ArrayList<>(tags) : null;
             return this;
         }
 
         @Override
         @NotNull
-        public GoogleVideoExtension setCategory(String category) {
+        public GoogleVideoExtension setCategory(@Nullable String category) {
             this.category = category;
             return this;
         }
 
         @Override
         @NotNull
-        public GoogleVideoExtension setFamilyFriendly(Boolean familyFriendly) {
+        public GoogleVideoExtension setFamilyFriendly(@Nullable Boolean familyFriendly) {
             this.familyFriendly = booleanToString(familyFriendly);
             return this;
         }
@@ -313,28 +313,28 @@
 
         @Override
         @NotNull
-        public GoogleVideoExtension setRequiresSubscription(Boolean requiresSubscription) {
+        public GoogleVideoExtension setRequiresSubscription(@Nullable Boolean requiresSubscription) {
             this.requiresSubscription = booleanToString(requiresSubscription);
             return this;
         }
 
         @Override
         @NotNull
-        public GoogleVideoExtension setUploader(String uploader) {
+        public GoogleVideoExtension setUploader(@Nullable String uploader) {
             this.uploader = uploader;
             return this;
         }
 
         @Override
         @NotNull
-        public GoogleVideoExtension setUploaderUrl(String uploaderInfo) {
+        public GoogleVideoExtension setUploaderUrl(@Nullable String uploaderInfo) {
             this.uploaderInfo = uploaderInfo;
             return this;
         }
 
         @Override
         @NotNull
-        public GoogleVideoExtension setLive(Boolean live) {
+        public GoogleVideoExtension setLive(@Nullable Boolean live) {
             this.live = booleanToString(live);
             return this;
         }
