Repository: focus-shift/jollyday
Pull request #705 (2024-12-23 10:40:19)

Improve SPI package javadoc
<!--

Thanks for contributing.
Please review the following notes before submitting you pull request.

Please look for other issues or pull requests which already work on this topic. Is somebody already on it? Do you need to synchronize?

# Security Vulnerabilities

🛑 STOP! 🛑 If your contribution fixes a security vulnerability, please do not submit it.
Instead, please write an E-Mail to to one of the maintainer with all the information
to recreate the security vulnerability.

# Describing Your Changes

If, having reviewed the notes above, you're ready to submit your pull request, please
provide a brief description of the proposed changes.

If they:
 🐞 fix a bug, please describe the broken behaviour and how the changes fix it.
    Please label with 'type: bug' and 'status: new'
    
 🎁 make an enhancement, please describe the new functionality and why you believe it's useful.
    Please label with 'type: enhancement' and 'status: new'
 
If your pull request relates to any existing issues,
please reference them by using the issue number prefixed with #.

-->


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [51.7% Duplication on New Code](https://sonarcloud.io/component_measures?id=focus-shift_jollyday&pullRequest=705&metric=new_duplicated_lines_density&view=list) (required ≤ 3%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [50.3% Duplication on New Code](https://sonarcloud.io/component_measures?id=focus-shift_jollyday&pullRequest=705&metric=new_duplicated_lines_density&view=list) (required ≤ 3%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [47.1% Duplication on New Code](https://sonarcloud.io/component_measures?id=focus-shift_jollyday&pullRequest=705&metric=new_duplicated_lines_density&view=list) (required ≤ 3%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [45.1% Duplication on New Code](https://sonarcloud.io/component_measures?id=focus-shift_jollyday&pullRequest=705&metric=new_duplicated_lines_density&view=list) (required ≤ 3%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [45.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=focus-shift_jollyday&pullRequest=705&metric=new_duplicated_lines_density&view=list) (required ≤ 3%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [43.1% Duplication on New Code](https://sonarcloud.io/component_measures?id=focus-shift_jollyday&pullRequest=705&metric=new_duplicated_lines_density&view=list) (required ≤ 3%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [42.2% Duplication on New Code](https://sonarcloud.io/component_measures?id=focus-shift_jollyday&pullRequest=705&metric=new_duplicated_lines_density&view=list) (required ≤ 3%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [40.7% Duplication on New Code](https://sonarcloud.io/component_measures?id=focus-shift_jollyday&pullRequest=705&metric=new_duplicated_lines_density&view=list) (required ≤ 3%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [39.7% Duplication on New Code](https://sonarcloud.io/component_measures?id=focus-shift_jollyday&pullRequest=705&metric=new_duplicated_lines_density&view=list) (required ≤ 3%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [38.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=focus-shift_jollyday&pullRequest=705&metric=new_duplicated_lines_density&view=list) (required ≤ 3%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [0.0% Coverage on New Code](https://sonarcloud.io/component_measures?id=focus-shift_jollyday&pullRequest=705&metric=new_coverage&view=list) (required ≥ 80%)  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [34.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=focus-shift_jollyday&pullRequest=705&metric=new_duplicated_lines_density&view=list) (required ≤ 3%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [38.0% Duplication on New Code](https://sonarcloud.io/component_measures?id=focus-shift_jollyday&pullRequest=705&metric=new_duplicated_lines_density&view=list) (required ≤ 3%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705)


sonarqubecloud[bot]: ## [![Quality Gate Failed](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/checks/QualityGateBadge/qg-failed-20px.png 'Quality Gate Failed')](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705) **Quality Gate failed**  
Failed conditions  
![](https://sonarsource.github.io/sonarcloud-github-static-resources/v2/common/failed-16px.png '') [37.7% Duplication on New Code](https://sonarcloud.io/component_measures?id=focus-shift_jollyday&pullRequest=705&metric=new_duplicated_lines_density&view=list) (required ≤ 3%)  
  
[See analysis details on SonarQube Cloud](https://sonarcloud.io/dashboard?id=focus-shift_jollyday&pullRequest=705)



Patch:
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/functions/CreateHoliday.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/functions/CreateHoliday.java
index 05b22ef3..1c085ff6 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/functions/CreateHoliday.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/functions/CreateHoliday.java
@@ -16,6 +16,6 @@ public class CreateHoliday implements Function<Described, Holiday> {
 
   @Override
   public Holiday apply(final Described described) {
-    return new Holiday(localDate, described.descriptionPropertiesKey(), described.officiality());
+    return new Holiday(localDate, described.descriptionPropertiesKey(), described.holidayType());
   }
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/functions/FindWeekDayInMonth.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/functions/FindWeekDayInMonth.java
index 2399ea2e..c6bfbb02 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/functions/FindWeekDayInMonth.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/functions/FindWeekDayInMonth.java
@@ -7,7 +7,7 @@ import java.time.LocalDate;
 import java.time.Year;
 import java.util.function.Function;
 
-import static de.focus_shift.jollyday.core.spi.Occurrance.LAST;
+import static de.focus_shift.jollyday.core.spi.Occurrence.LAST;
 import static java.time.temporal.TemporalAdjusters.dayOfWeekInMonth;
 import static java.time.temporal.TemporalAdjusters.lastInMonth;
 
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/functions/MoveDateRelative.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/functions/MoveDateRelative.java
index 4a0aa6b6..9a34fd69 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/functions/MoveDateRelative.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/functions/MoveDateRelative.java
@@ -6,7 +6,7 @@ import de.focus_shift.jollyday.core.spi.Movable;
 import java.time.LocalDate;
 import java.util.function.Function;
 
-import static de.focus_shift.jollyday.core.spi.With.NEXT;
+import static de.focus_shift.jollyday.core.spi.Movable.MovingCondition.With.NEXT;
 import static java.time.temporal.TemporalAdjusters.nextOrSame;
 import static java.time.temporal.TemporalAdjusters.previousOrSame;
 
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/impl/RelativeToFixedParser.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/impl/RelativeToFixedParser.java
index 4815ea23..b880316e 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/impl/RelativeToFixedParser.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/impl/RelativeToFixedParser.java
@@ -28,13 +28,15 @@ public class RelativeToFixedParser implements HolidayParser {
         LocalDate fixed = new FixedToLocalDate(year).apply(rf.date());
         if (rf.weekday() != null) {
           // if weekday is set -> move to weekday
-          DayOfWeek day = rf.weekday();
-          int direction = (rf.when() == Relation.BEFORE ? -1 : 1);
+          final DayOfWeek day = rf.weekday();
+          final int direction = (rf.when() == Relation.BEFORE ? -1 : 1);
           // don't test start day
           fixed = fixed.plusDays(direction);
+
           while (fixed.getDayOfWeek() != day) {
             fixed = fixed.plusDays(direction);
           }
+
         } else if (rf.days() != null) {
           // if number of days set -> move number of days
           fixed = fixed.plus(rf.when() == Relation.BEFORE ? rf.days().negated() : rf.days());
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/predicates/ValidMovingCondition.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/predicates/ValidMovingCondition.java
index 4f293626..a0653fec 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/predicates/ValidMovingCondition.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/parser/predicates/ValidMovingCondition.java
@@ -1,12 +1,12 @@
 package de.focus_shift.jollyday.core.parser.predicates;
 
-import de.focus_shift.jollyday.core.spi.MovingCondition;
+import de.focus_shift.jollyday.core.spi.Movable;
 
 import java.time.LocalDate;
 import java.util.Objects;
 import java.util.function.Predicate;
 
-public class ValidMovingCondition implements Predicate<MovingCondition> {
+public class ValidMovingCondition implements Predicate<Movable.MovingCondition> {
 
   private final LocalDate date;
 
@@ -15,7 +15,7 @@ public class ValidMovingCondition implements Predicate<MovingCondition> {
   }
 
   @Override
-  public boolean test(final MovingCondition movingCondition) {
+  public boolean test(final Movable.MovingCondition movingCondition) {
     return Objects.equals(date.getDayOfWeek(), movingCondition.substitute());
   }
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/ChristianHoliday.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/ChristianHoliday.java
index c2705224..4b5980c9 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/ChristianHoliday.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/ChristianHoliday.java
@@ -2,8 +2,62 @@ package de.focus_shift.jollyday.core.spi;
 
 import java.time.chrono.Chronology;
 
+/**
+ * Represents the configuration of a christian holiday that can be
+ *
+ * <ul>
+ *   <li>Movable</li>
+ *   <li>Limited</li>
+ *   <li>Described</li>
+ * </ul>
+ * <p>
+ * and has a special {@link ChristianHolidayType} and a chronology based on {@link Chronology}.
+ * <p>
+ * Two chronologies are supported:
+ * <ul>
+ *   <li>ISO</li>
+ *   <li>Julian</li>
+ * </ul>
+ * <p>
+ * Example: All christian holidays are relative to Easter Sunday e.g. carnival is 47 days after Easter Sunday.
+ * <p>
+ * The {@link de.focus_shift.jollyday.core.parser.impl.ChristianHolidayParser} is used.
+ */
 public interface ChristianHoliday extends Limited, Described, Movable {
+
+  enum ChristianHolidayType {
+    GOOD_FRIDAY,
+    EASTER_MONDAY,
+    ASCENSION_DAY,
+    WHIT_MONDAY,
+    CORPUS_CHRISTI,
+    MAUNDY_THURSDAY,
+    ASH_WEDNESDAY,
+    MARDI_GRAS,
+    GENERAL_PRAYER_DAY,
+    CLEAN_MONDAY,
+    SHROVE_MONDAY,
+    PENTECOST,
+    CARNIVAL,
+    EASTER_SATURDAY,
+    EASTER_TUESDAY,
+    SACRED_HEART,
+    EASTER,
+    PENTECOST_MONDAY,
+    WHIT_SUNDAY
+  }
+
+  /**
+   * Describes the {@link ChristianHolidayType}
+   *
+   * @return the type of the christian holiday
+   */
   ChristianHolidayType type();
 
+  /**
+   * Describes the {@link Chronology} of the christian holiday
+   *
+   * @return the chronology of the christian holiday
+   */
   Chronology chronology();
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/ChristianHolidayType.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/ChristianHolidayType.java
deleted file mode 100644
index ec70c331..00000000
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/ChristianHolidayType.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package de.focus_shift.jollyday.core.spi;
-
-public enum ChristianHolidayType {
-  GOOD_FRIDAY,
-  EASTER_MONDAY,
-  ASCENSION_DAY,
-  WHIT_MONDAY,
-  CORPUS_CHRISTI,
-  MAUNDY_THURSDAY,
-  ASH_WEDNESDAY,
-  MARDI_GRAS,
-  GENERAL_PRAYER_DAY,
-  CLEAN_MONDAY,
-  SHROVE_MONDAY,
-  PENTECOST,
-  CARNIVAL,
-  EASTER_SATURDAY,
-  EASTER_TUESDAY,
-  SACRED_HEART,
-  EASTER,
-  PENTECOST_MONDAY,
-  WHIT_SUNDAY
-}
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Configuration.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Configuration.java
index fba908d6..3a1d024f 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Configuration.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Configuration.java
@@ -3,16 +3,45 @@ package de.focus_shift.jollyday.core.spi;
 import java.util.stream.Stream;
 
 /**
- * Represents the configuration.
+ * Represents the holiday configuration, meta information like the hierarchy and description
+ * and the sub configuration for a specific {@link de.focus_shift.jollyday.core.HolidayCalendar}.
+ * <ul>
+ *   <li>The `holidays` contains the holiday configuration for every holiday.</li>
+ *   <li>The `hierarchy` contains the ISO 3166-1 alpha-2 for countries or ISO 3166-2 code for subdivisions.</li>
+ *   <li>The `description` contains further information.</li>
+ *   <li>The `subConfiguration` contains the holiday configuration for subdivisions, cities, ... of the main configuration.</li>
+ * </ul>
  */
 public interface Configuration {
 
-  Holidays holidays();
-
-  Stream<Configuration> subConfigurations();
-
+  /**
+   * Contains the ISO 3166-1 alpha-2 for countries or ISO 3166-2 code for subdivisions
+   *
+   * @return the code of this configuration
+   */
   String hierarchy();
 
+  /**
+   * Contains further information like the name.
+   *
+   * @return the description of this configuration
+   */
   String description();
 
+  /**
+   * Contains all holiday configuration of different types like {@link Fixed} or {@link ChristianHoliday} e.g.
+   *
+   * @return all holiday configuration for this {@link de.focus_shift.jollyday.core.HolidayCalendar}
+   */
+  Holidays holidays();
+
+  /**
+   * Contains the holiday configuration for subdivisions, cities, ... of the main configuration.
+   * The hierarchy is built on top of the iso standard. For germany e.g. there is a main configuration for Germany
+   * and 16 sub configurations for the subdivisions.
+   *
+   * @return all configurations for the next hierarchy level like subdivisions or cities.
+   */
+  Stream<Configuration> subConfigurations();
+
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/ConfigurationService.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/ConfigurationService.java
index cb43f482..ccfcd22b 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/ConfigurationService.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/ConfigurationService.java
@@ -3,9 +3,19 @@ package de.focus_shift.jollyday.core.spi;
 import de.focus_shift.jollyday.core.ManagerParameter;
 
 /**
- * Service to provide the serialised configuration from XML files.
+ * This interface provides the way to receive the serialized holiday configuration
+ * on the base of the xml files for a specific country or special calendar.
  */
 public interface ConfigurationService {
 
+  /**
+   * Returns the configuration based on the {@link ManagerParameter}.
+   * <p>
+   * In most cases the configuration is based on the countries ISO code 3166.
+   *
+   * @param parameter to identify the country or special calendar configuration
+   * @return the holiday configuration of a country
+   */
   Configuration getConfiguration(ManagerParameter parameter);
+
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Described.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Described.java
index 635de5a2..353d383c 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Described.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Described.java
@@ -2,8 +2,25 @@ package de.focus_shift.jollyday.core.spi;
 
 import de.focus_shift.jollyday.core.HolidayType;
 
+/**
+ * Provides the functionality to describe a holiday with a
+ * name represented by the `descriptionPropertiesKey` and a
+ * `holidayType` holiday type that can be one of the provides {@link HolidayType}s
+ */
 public interface Described {
+
+  /**
+   * The properties key will be used to translate the holiday into the requested language
+   *
+   * @return the properties key to use to translate
+   */
   String descriptionPropertiesKey();
 
-  HolidayType officiality();
+  /**
+   * Represents the type of the holiday.
+   * Different holiday types are available in {@link HolidayType}
+   *
+   * @return the holiday type
+   */
+  HolidayType holidayType();
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/EthiopianOrthodoxHoliday.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/EthiopianOrthodoxHoliday.java
index 17251000..3294d1b6 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/EthiopianOrthodoxHoliday.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/EthiopianOrthodoxHoliday.java
@@ -1,5 +1,29 @@
 package de.focus_shift.jollyday.core.spi;
 
+/**
+ * Represents the configuration of an ethiopian orthodox holiday that can be
+ *
+ * <ul>
+ *   <li>Limited</li>
+ *   <li>Described</li>
+ * </ul>
+ * <p>
+ * and has a special {@link EthiopianOrthodoxHolidayType}.
+ * <p>
+ * The {@link de.focus_shift.jollyday.core.parser.impl.EthiopianOrthodoxHolidayParser} is used.
+ */
 public interface EthiopianOrthodoxHoliday extends Described, Limited {
+
+  enum EthiopianOrthodoxHolidayType {
+    TIMKAT,
+    ENKUTATASH,
+    MESKEL
+  }
+
+  /**
+   * Describes the {@link EthiopianOrthodoxHolidayType}
+   *
+   * @return the type of the ethiopian orthodox holiday
+   */
   EthiopianOrthodoxHolidayType type();
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/EthiopianOrthodoxHolidayType.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/EthiopianOrthodoxHolidayType.java
deleted file mode 100644
index 1923be4c..00000000
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/EthiopianOrthodoxHolidayType.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package de.focus_shift.jollyday.core.spi;
-
-public enum EthiopianOrthodoxHolidayType {
-  TIMKAT,
-  ENKUTATASH,
-  MESKEL
-}
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Fixed.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Fixed.java
index 008ed99f..0bbac3c5 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Fixed.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Fixed.java
@@ -2,6 +2,28 @@ package de.focus_shift.jollyday.core.spi;
 
 import java.time.MonthDay;
 
+/**
+ * Represents the configuration of a holiday that can be
+ *
+ * <ul>
+ *   <li>Movable</li>
+ *   <li>Limited</li>
+ *   <li>Described</li>
+ * </ul>
+ * <p>
+ * and occurs on the same day and month on every year.
+ * <p>
+ * Example: A holiday on the first January, like New Year.
+ * <p>
+ * The {@link de.focus_shift.jollyday.core.parser.impl.FixedParser} is used.
+ */
 public interface Fixed extends Described, Movable, Limited {
+
+  /**
+   * Contains the information on which day and month this holiday occurs.
+   *
+   * @return month and day on which this holiday will occur
+   */
   MonthDay day();
+
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/FixedWeekdayBetweenFixed.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/FixedWeekdayBetweenFixed.java
index 374e1110..66e794c6 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/FixedWeekdayBetweenFixed.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/FixedWeekdayBetweenFixed.java
@@ -2,10 +2,42 @@ package de.focus_shift.jollyday.core.spi;
 
 import java.time.DayOfWeek;
 
+/**
+ * Represents the configuration of a fixed weekday holiday between two other {@link Fixed} holidays/days that can be
+ *
+ * <ul>
+ *   <li>Limited</li>
+ *   <li>Described</li>
+ * </ul>
+ * <p>
+ * The `from` and `to` describes the date range in which the `weekday` is a holiday.
+ * <p>
+ * Example: The holiday is the Saturday between the first January and the 10th January.
+ * If there are multiple Saturdays between the two dates all will be returned.
+ * <p>
+ * The {@link de.focus_shift.jollyday.core.parser.impl.FixedWeekdayBetweenFixedParser} is used.
+ */
 public interface FixedWeekdayBetweenFixed extends Described, Limited {
+
+  /**
+   * Start of the date range in which the weekday occurs
+   *
+   * @return the {@link Fixed} start date of the date range
+   */
   Fixed from();
 
+  /**
+   * End of the date range in which the weekday occurs
+   *
+   * @return the {@link Fixed} end date of the date range
+   */
   Fixed to();
 
+  /**
+   * The weekday which represents the holiday between from and to
+   *
+   * @return the weekday for the holiday
+   */
   DayOfWeek weekday();
+
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/FixedWeekdayInMonth.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/FixedWeekdayInMonth.java
index b1c7da63..529cece7 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/FixedWeekdayInMonth.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/FixedWeekdayInMonth.java
@@ -3,10 +3,39 @@ package de.focus_shift.jollyday.core.spi;
 import java.time.DayOfWeek;
 import java.time.Month;
 
+/**
+ * Represents the configuration of a holiday that has a fixed weekday in a month based on its occurrence that can be
+ *
+ * <ul>
+ *   <li>Limited</li>
+ *   <li>Described</li>
+ * </ul>
+ * <p>
+ * Example: The first Saturday in January.
+ * <p>
+ * The {@link de.focus_shift.jollyday.core.parser.impl.FixedWeekdayInMonthParser} is used.
+ */
 public interface FixedWeekdayInMonth extends Described, Limited {
+
+  /**
+   * Describes the day of the week, like Monday, Tuesday, ...
+   *
+   * @return the weekday on which the holiday occurs
+   */
   DayOfWeek weekday();
 
+  /**
+   * Describes the month in which the holiday will occur.
+   *
+   * @return the month in which the holiday occurs
+   */
   Month month();
 
-  Occurrance which();
+  /**
+   * Describes on which weekday the holiday occurs, like the first or second
+   *
+   * @return the occurrence
+   */
+  Occurrence which();
+
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/FixedWeekdayRelativeToFixed.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/FixedWeekdayRelativeToFixed.java
index 64ebe557..e593890f 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/FixedWeekdayRelativeToFixed.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/FixedWeekdayRelativeToFixed.java
@@ -2,12 +2,52 @@ package de.focus_shift.jollyday.core.spi;
 
 import java.time.DayOfWeek;
 
+/**
+ * Represents the configuration of a holiday that occurs on a fixed weekday
+ * relative to a {@link Fixed} holiday that can be
+ *
+ * <ul>
+ *   <li>Limited</li>
+ *   <li>Described</li>
+ * </ul>
+ * <p>
+ * Example: A holiday on the first thursday after the second april.
+ * In this example the
+ * `first` is the which (occurrence)
+ * `thursday` is thr weekday (dayOfWeek)
+ * `after` is the when (relation)
+ * `day` is the second april (fixed)
+ * <p>
+ * The {@link de.focus_shift.jollyday.core.parser.impl.FixedWeekdayRelativeToFixedParser} is used.
+ */
 public interface FixedWeekdayRelativeToFixed extends Described, Limited {
+
+  /**
+   * Describes the anchor the new holiday
+   *
+   * @return the fixed holiday
+   */
   Fixed day();
 
-  Occurrance which();
+  /**
+   * Describes, based on the anchor (day), on which occurrence the new holiday will occur
+   *
+   * @return the occurrence, like the first
+   */
+  Occurrence which();
 
+  /**
+   * Describes, based on the anchor (day), on which weekday the new holiday will occur
+   *
+   * @return the weekday
+   */
   DayOfWeek weekday();
 
+  /**
+   * Describes, based on the anchor (day), the relation like before, after, ... the new holiday will occur
+   *
+   * @return the relation to the anchor
+   */
   Relation when();
+
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Holidays.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Holidays.java
index 954ae305..594346b4 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Holidays.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Holidays.java
@@ -2,26 +2,80 @@ package de.focus_shift.jollyday.core.spi;
 
 import java.util.List;
 
+/**
+ * Represents the configurations for all holidays
+ * for a specific country or special calendar.
+ */
 public interface Holidays {
 
+  /**
+   * see {@link Fixed}
+   *
+   * @return list of all fixed holidays
+   */
   List<Fixed> fixed();
 
+    /**
+   * see {@link RelativeToFixed}
+   *
+   * @return list of relativeToFixed configurations
+   */
   List<RelativeToFixed> relativeToFixed();
 
+    /**
+   * see {@link RelativeToWeekdayInMonth}
+   *
+   * @return list of all relativeToWeekdayInMonth configurations
+   */
   List<RelativeToWeekdayInMonth> relativeToWeekdayInMonth();
 
+    /**
+   * see {@link FixedWeekdayInMonth}
+   *
+   * @return list of all fixedWeekdays configurations
+   */
   List<FixedWeekdayInMonth> fixedWeekdays();
 
+    /**
+   * see {@link ChristianHoliday}
+   *
+   * @return list of all christianHolidays configurations
+   */
   List<ChristianHoliday> christianHolidays();
 
+    /**
+   * see {@link IslamicHoliday}
+   *
+   * @return list of islamicHolidays fixed configurations
+   */
   List<IslamicHoliday> islamicHolidays();
 
+    /**
+   * see {@link FixedWeekdayBetweenFixed}
+   *
+   * @return list of all fixedWeekdayBetweenFixed configurations
+   */
   List<FixedWeekdayBetweenFixed> fixedWeekdayBetweenFixed();
 
+    /**
+   * see {@link FixedWeekdayRelativeToFixed}
+   *
+   * @return list of all fixedWeekdayRelativeToFixed configurations
+   */
   List<FixedWeekdayRelativeToFixed> fixedWeekdayRelativeToFixed();
 
+    /**
+   * see {@link EthiopianOrthodoxHoliday}
+   *
+   * @return list of all ethiopianOrthodoxHolidays configurations
+   */
   List<EthiopianOrthodoxHoliday> ethiopianOrthodoxHolidays();
 
+    /**
+   * see {@link RelativeToEasterSunday}
+   *
+   * @return list of all relativeToEasterSunday configurations
+   */
   List<RelativeToEasterSunday> relativeToEasterSunday();
 
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/IslamicHoliday.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/IslamicHoliday.java
index 1d4b1485..cfc5f8b7 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/IslamicHoliday.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/IslamicHoliday.java
@@ -1,5 +1,42 @@
 package de.focus_shift.jollyday.core.spi;
 
+/**
+ * Represents the configuration of an islamic holiday that can be
+ *
+ * <ul>
+ *   <li>Movable</li>
+ *   <li>Limited</li>
+ *   <li>Described</li>
+ * </ul>
+ * <p>
+ * and has a special {@link IslamicHolidayType}.
+ * <p>
+ * The {@link de.focus_shift.jollyday.core.parser.impl.IslamicHolidayParser} is used.
+ */
 public interface IslamicHoliday extends Described, Limited, Movable {
+
+  enum IslamicHolidayType {
+    NEWYEAR,
+    ASCHURA,
+    MAWLID_AN_NABI,
+    LAILAT_AL_MIRAJ,
+    LAILAT_AL_BARAT,
+    RAMADAN,
+    LAILAT_AL_QADR,
+    RAMADAN_END,
+    ID_AL_FITR,
+    ID_AL_FITR_2,
+    ID_AL_FITR_3,
+    ARAFAAT,
+    ID_UL_ADHA,
+    ID_UL_ADHA_2,
+    ID_UL_ADHA_3
+  }
+
+  /**
+   * Describes the {@link IslamicHolidayType}
+   *
+   * @return the type of the islamic holiday
+   */
   IslamicHolidayType type();
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/IslamicHolidayType.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/IslamicHolidayType.java
deleted file mode 100644
index 55312a34..00000000
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/IslamicHolidayType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package de.focus_shift.jollyday.core.spi;
-
-public enum IslamicHolidayType {
-  NEWYEAR,
-  ASCHURA,
-  MAWLID_AN_NABI,
-  LAILAT_AL_MIRAJ,
-  LAILAT_AL_BARAT,
-  RAMADAN,
-  LAILAT_AL_QADR,
-  RAMADAN_END,
-  ID_AL_FITR,
-  ID_AL_FITR_2,
-  ID_AL_FITR_3,
-  ARAFAAT,
-  ID_UL_ADHA,
-  ID_UL_ADHA_2,
-  ID_UL_ADHA_3
-}
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Limited.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Limited.java
index bacade4a..eeb7454d 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Limited.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Limited.java
@@ -2,10 +2,55 @@ package de.focus_shift.jollyday.core.spi;
 
 import java.time.Year;
 
+/**
+ * Provides the functionality to limit the years a holiday will occur.
+ * By default, a holiday will occur on every year it is requested until
+ * this interface will be used and valid from or valid to is set, then the
+ * holiday will only occur in this year's. If the cycle is set, a holiday will
+ * only occur in the years represented by the cycle.
+ * <p>
+ * Example:
+ * if a holiday is only valid from 1900 until 1910 and a cycle from five years
+ * is configured, then the holiday will occur in the years:
+ * <ul>
+ *   <li>1900</li>
+ *   <li>1905</li>
+ *   <li>1910</li>
+ * </ul>
+ */
 public interface Limited {
+
+  enum YearCycle {
+    EVERY_YEAR,
+    ODD_YEARS,
+    EVEN_YEARS,
+    TWO_YEARS,
+    THREE_YEARS,
+    FOUR_YEARS,
+    FIVE_YEARS,
+    SIX_YEARS
+  }
+
+  /**
+   * Describes the first year a holiday is valid (inclusive)
+   *
+   * @return the first valid year of a holiday
+   */
   Year validFrom();
 
+  /**
+   * Describes the last year a holiday is valid (inclusive)
+   *
+   * @return the last valid year of a holiday
+   */
   Year validTo();
 
+  /**
+   * Describes the cycle a holiday is valid in between the
+   * years given bei from and to.
+   *
+   * @return the cycle to limit a holiday between from and to
+   */
   YearCycle cycle();
+
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Movable.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Movable.java
index 0e68b015..2341b390 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Movable.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Movable.java
@@ -1,7 +1,63 @@
 package de.focus_shift.jollyday.core.spi;
 
+import java.time.DayOfWeek;
 import java.util.List;
 
+/**
+ * Provides the functionality to move a holiday based on the {@link MovingCondition}s
+ * to another day of the week.
+ */
 public interface Movable {
+
+  /**
+   * Describes the different moving conditions that
+   * have been configured for a specific holiday.
+   *
+   * @return the configured {@link MovingCondition} for this holiday
+   */
   List<MovingCondition> conditions();
+
+  /**
+   * Describes how a holiday, that implements the {@link Movable} interface,
+   * can be moved from a day of a week to another day of a week.
+   * <p>
+   * Examples:
+   * <ul>
+   *   <li>A holiday that falls on a Sunday (weekday) can be moved to the next (with) Monday (substitute).</li>
+   *   <li>A holiday that falls on a Saturday (weekday) can be moved to the previous (with) Friday (substitute).</li>
+   * </ul>
+   */
+  interface MovingCondition {
+
+    enum With {
+
+      /* Moves the holiday to the next weekday */
+      NEXT,
+
+      /* Moves the holiday to the previous weekday */
+      PREVIOUS
+    }
+
+    /**
+     * Represents the day of the week as trigger to move the holiday if the holiday would
+     * occur oh this weekday.
+     *
+     * @return the weekday on which the holiday will be moved to another weekday
+     */
+    DayOfWeek weekday();
+
+    /**
+     * Represents if the holiday will be moved to the previous or next weekday.
+     *
+     * @return the rule in which direction (next or previous) the holiday will be moved.
+     */
+    With with();
+
+    /**
+     * Represents the substitution weekday for the holiday
+     *
+     * @return the weekday the holiday will be moved to
+     */
+    DayOfWeek substitute();
+  }
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/MovingCondition.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/MovingCondition.java
deleted file mode 100644
index c1ac6eac..00000000
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/MovingCondition.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package de.focus_shift.jollyday.core.spi;
-
-import java.time.DayOfWeek;
-
-public interface MovingCondition {
-  DayOfWeek substitute();
-
-  With with();
-
-  DayOfWeek weekday();
-}
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Occurrance.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Occurrence.java
similarity index 78%
rename from jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Occurrance.java
rename to jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Occurrence.java
index b27b16b3..54e50e58 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Occurrance.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/Occurrence.java
@@ -1,6 +1,6 @@
 package de.focus_shift.jollyday.core.spi;
 
-public enum Occurrance {
+public enum Occurrence {
   FIRST,
   SECOND,
   THIRD,
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/RelativeToEasterSunday.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/RelativeToEasterSunday.java
index 66f6d31d..7fec04bd 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/RelativeToEasterSunday.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/RelativeToEasterSunday.java
@@ -4,8 +4,34 @@ import org.threeten.extra.Days;
 
 import java.time.chrono.Chronology;
 
+/**
+ * Represents the configuration of a holiday that is in relation to Easter Sunday and can be
+ *
+ * <ul>
+ *   <li>Limited</li>
+ *   <li>Described</li>
+ * </ul>
+ * <p>
+ * Example: A holiday 42 days after Easter Sunday.
+ * <p>
+ * The difference to {@link ChristianHoliday} is that these holidays are based on Easter Sunday but no christian holidays.
+ * <p>
+ * The {@link de.focus_shift.jollyday.core.parser.impl.RelativeToEasterSundayParser} is used.
+ */
 public interface RelativeToEasterSunday extends Described, Limited {
+
+  /**
+   * Describes the {@link Chronology} of the holiday
+   *
+   * @return the chronology of the holiday
+   */
   Chronology chronology();
 
+  /**
+   * Describes the number of days that will be added to Easter Sunday.
+   *
+   * @return the additional number of days
+   */
   Days days();
+
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/RelativeToFixed.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/RelativeToFixed.java
index 70d459c8..f424ea9c 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/RelativeToFixed.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/RelativeToFixed.java
@@ -4,12 +4,56 @@ import org.threeten.extra.Days;
 
 import java.time.DayOfWeek;
 
+/**
+ * Represents the configuration of a holiday that is in relation to a {@link Fixed} date.
+ * <p>
+ * <ul>
+ *   <li>If only weekday is set it will use the weekday.</li>
+ *   <li>If only days is set is not set it will use days.</li>
+ *   <li>If both is set it will use the weekday.</li>
+ * </ul>
+ * <p>
+ * and can be
+ *
+ * <ul>
+ *   <li>Limited</li>
+ *   <li>Described</li>
+ * </ul>
+ * <p>
+ * Example:
+ * A holiday on tuesday before the second friday in october
+ * A holiday on 3 days after the second friday in october
+ * <p>
+ * The {@link de.focus_shift.jollyday.core.parser.impl.RelativeToFixedParser} is used.
+ */
 public interface RelativeToFixed extends Described, Limited {
-  Fixed date();
 
+  /**
+   * Describes the weekday on which the new holiday occurs
+   *
+   * @return the weekday of the new holiday
+   */
   DayOfWeek weekday();
 
+  /**
+   * Describes the days in relation to the fixed date of the new holiday
+   *
+   * @return the days to shift
+   */
+  Days days();
+
+  /**
+   * Describes the relation of the new holiday to the fixed date
+   *
+   * @return the relation
+   */
   Relation when();
 
-  Days days();
+  /**
+   * Describes the anchor date for the relation of the new holiday
+   *
+   * @return anchor date for the new holiday
+   */
+  Fixed date();
+
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/RelativeToWeekdayInMonth.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/RelativeToWeekdayInMonth.java
index 4b4c384a..96cc14d4 100644
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/RelativeToWeekdayInMonth.java
+++ b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/RelativeToWeekdayInMonth.java
@@ -2,10 +2,40 @@ package de.focus_shift.jollyday.core.spi;
 
 import java.time.DayOfWeek;
 
+/**
+ * Represents the configuration of a holiday that occurs on a weekday in relation
+ * to a fixed weekday in a month that can be
+ *
+ * <ul>
+ *   <li>Limited</li>
+ *   <li>Described</li>
+ * </ul>
+ * <p>
+ * Example: A holiday on tuesday before the second friday in october
+ * <p>
+ * The {@link de.focus_shift.jollyday.core.parser.impl.RelativeToWeekdayInMonthParser} is used.
+ */
 public interface RelativeToWeekdayInMonth extends Described, Limited {
-  FixedWeekdayInMonth weekdayInMonth();
 
+  /**
+   * Describes the weekday on which the new holiday occurs
+   *
+   * @return the weekday of the new holiday
+   */
   DayOfWeek weekday();
 
+  /**
+   * Describes the relation of the new holiday to the `weekdayInMonth`
+   *
+   * @return the relation
+   */
   Relation when();
+
+  /**
+   * Describes the fixed weekday in month that is the anchor in relation to the new holiday
+   *
+   * @return the anchor for the relation to the new holiday
+   */
+  FixedWeekdayInMonth weekdayInMonth();
+
 }
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/With.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/With.java
deleted file mode 100644
index 84b5cb2b..00000000
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/With.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package de.focus_shift.jollyday.core.spi;
-
-public enum With {
-  NEXT,
-  PREVIOUS
-}
diff --git a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/YearCycle.java b/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/YearCycle.java
deleted file mode 100644
index 723d2c6b..00000000
--- a/jollyday-core/src/main/java/de/focus_shift/jollyday/core/spi/YearCycle.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package de.focus_shift.jollyday.core.spi;
-
-public enum YearCycle {
-  EVERY_YEAR,
-  ODD_YEARS,
-  EVEN_YEARS,
-  TWO_YEARS,
-  THREE_YEARS,
-  FOUR_YEARS,
-  FIVE_YEARS,
-  SIX_YEARS
-}
diff --git a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonChristianHoliday.java b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonChristianHoliday.java
index 733c2cb1..120d8033 100644
--- a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonChristianHoliday.java
+++ b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonChristianHoliday.java
@@ -2,9 +2,6 @@ package de.focus_shift.jollyday.jackson;
 
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.ChristianHoliday;
-import de.focus_shift.jollyday.core.spi.ChristianHolidayType;
-import de.focus_shift.jollyday.core.spi.MovingCondition;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 import de.focus_shift.jollyday.jackson.mapping.ChronologyType;
 import org.threeten.extra.chrono.JulianChronology;
 
@@ -15,19 +12,32 @@ import java.util.List;
 
 import static java.util.stream.Collectors.toList;
 
-public class JacksonChristianHoliday implements ChristianHoliday {
+/**
+ * see {@link ChristianHoliday}
+ */
+class JacksonChristianHoliday implements ChristianHoliday {
 
   private final de.focus_shift.jollyday.jackson.mapping.ChristianHoliday christianHoliday;
 
-  public JacksonChristianHoliday(de.focus_shift.jollyday.jackson.mapping.ChristianHoliday christianHoliday) {
+  JacksonChristianHoliday(de.focus_shift.jollyday.jackson.mapping.ChristianHoliday christianHoliday) {
     this.christianHoliday = christianHoliday;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public ChristianHolidayType type() {
     return ChristianHolidayType.valueOf(christianHoliday.getType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Chronology chronology() {
     return christianHoliday.getChronology() == ChronologyType.JULIAN
@@ -35,18 +45,33 @@ public class JacksonChristianHoliday implements ChristianHoliday {
       : IsoChronology.INSTANCE;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return christianHoliday.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return christianHoliday.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(christianHoliday.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return christianHoliday.getValidFrom() == null
@@ -54,6 +79,11 @@ public class JacksonChristianHoliday implements ChristianHoliday {
       : Year.of(christianHoliday.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return christianHoliday.getValidTo() == null
@@ -61,6 +91,11 @@ public class JacksonChristianHoliday implements ChristianHoliday {
       : Year.of(christianHoliday.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return christianHoliday.getEvery() == null
@@ -68,6 +103,11 @@ public class JacksonChristianHoliday implements ChristianHoliday {
       : YearCycle.valueOf(christianHoliday.getEvery().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<MovingCondition> conditions() {
     return christianHoliday.getMovingCondition().stream()
diff --git a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonConfiguration.java b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonConfiguration.java
index 68d3d4eb..746b8d7b 100644
--- a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonConfiguration.java
+++ b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonConfiguration.java
@@ -5,7 +5,9 @@ import de.focus_shift.jollyday.core.spi.Holidays;
 
 import java.util.stream.Stream;
 
-
+/**
+ * see {@link Configuration}
+ */
 public class JacksonConfiguration implements Configuration {
 
   private final de.focus_shift.jollyday.jackson.mapping.Configuration xmlConfiguration;
@@ -14,21 +16,41 @@ public class JacksonConfiguration implements Configuration {
     this.xmlConfiguration = xmlConfiguration;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Holidays holidays() {
     return new JacksonHolidays(xmlConfiguration.getHolidays());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Stream<Configuration> subConfigurations() {
     return xmlConfiguration.getSubConfigurations().stream().map(JacksonConfiguration::new);
   }
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
 
   @Override
   public String hierarchy() {
     return xmlConfiguration.getHierarchy();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String description() {
     return xmlConfiguration.getDescription();
diff --git a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonConfigurationService.java b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonConfigurationService.java
index 1dc94140..442c1d62 100644
--- a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonConfigurationService.java
+++ b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonConfigurationService.java
@@ -7,11 +7,18 @@ import de.focus_shift.jollyday.core.spi.ConfigurationService;
 import java.io.InputStream;
 import java.net.URL;
 
-
+/**
+ * see {@link ConfigurationService}
+ */
 public class JacksonConfigurationService implements ConfigurationService {
 
   private static final XMLUtil xmlUtil = new XMLUtil();
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Configuration getConfiguration(ManagerParameter parameter) {
     final URL resourceUrl = parameter.createResourceUrl();
diff --git a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonEthiopianOrthodoxHoliday.java b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonEthiopianOrthodoxHoliday.java
index b5536c75..84091294 100644
--- a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonEthiopianOrthodoxHoliday.java
+++ b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonEthiopianOrthodoxHoliday.java
@@ -2,36 +2,57 @@ package de.focus_shift.jollyday.jackson;
 
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.EthiopianOrthodoxHoliday;
-import de.focus_shift.jollyday.core.spi.EthiopianOrthodoxHolidayType;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 
 import java.time.Year;
 
-public class JacksonEthiopianOrthodoxHoliday implements EthiopianOrthodoxHoliday {
+/**
+ * see {@link EthiopianOrthodoxHoliday}
+ */
+class JacksonEthiopianOrthodoxHoliday implements EthiopianOrthodoxHoliday {
 
   private final de.focus_shift.jollyday.jackson.mapping.EthiopianOrthodoxHoliday ethiopianOrthodoxHoliday;
 
-  public JacksonEthiopianOrthodoxHoliday(de.focus_shift.jollyday.jackson.mapping.EthiopianOrthodoxHoliday ethiopianOrthodoxHoliday) {
+  JacksonEthiopianOrthodoxHoliday(de.focus_shift.jollyday.jackson.mapping.EthiopianOrthodoxHoliday ethiopianOrthodoxHoliday) {
     this.ethiopianOrthodoxHoliday = ethiopianOrthodoxHoliday;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return ethiopianOrthodoxHoliday.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return ethiopianOrthodoxHoliday.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(ethiopianOrthodoxHoliday.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public EthiopianOrthodoxHolidayType type() {
     return EthiopianOrthodoxHolidayType.valueOf(ethiopianOrthodoxHoliday.getType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return ethiopianOrthodoxHoliday.getValidFrom() == null
@@ -39,6 +60,11 @@ public class JacksonEthiopianOrthodoxHoliday implements EthiopianOrthodoxHoliday
       : Year.of(ethiopianOrthodoxHoliday.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return ethiopianOrthodoxHoliday.getValidTo() == null
@@ -46,6 +72,11 @@ public class JacksonEthiopianOrthodoxHoliday implements EthiopianOrthodoxHoliday
       : Year.of(ethiopianOrthodoxHoliday.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return ethiopianOrthodoxHoliday.getEvery() == null
diff --git a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonFixed.java b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonFixed.java
index a42012a6..e9f15636 100644
--- a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonFixed.java
+++ b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonFixed.java
@@ -2,8 +2,6 @@ package de.focus_shift.jollyday.jackson;
 
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.Fixed;
-import de.focus_shift.jollyday.core.spi.MovingCondition;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 
 import java.time.MonthDay;
 import java.time.Year;
@@ -11,34 +9,56 @@ import java.util.List;
 
 import static java.util.stream.Collectors.toList;
 
-
-public class JacksonFixed implements Fixed {
+/**
+ * see {@link Fixed}
+ */
+class JacksonFixed implements Fixed {
 
   private final XMLUtil xmlUtil = new XMLUtil();
 
   private final de.focus_shift.jollyday.jackson.mapping.Fixed fixed;
 
-  public JacksonFixed(de.focus_shift.jollyday.jackson.mapping.Fixed fixed) {
+  JacksonFixed(de.focus_shift.jollyday.jackson.mapping.Fixed fixed) {
     this.fixed = fixed;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public MonthDay day() {
     return MonthDay.of(xmlUtil.getMonth(fixed.getMonth()), fixed.getDay());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return fixed.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return fixed.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(fixed.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return fixed.getValidFrom() == null
@@ -46,6 +66,11 @@ public class JacksonFixed implements Fixed {
       : Year.of(fixed.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return fixed.getValidTo() == null
@@ -53,6 +78,11 @@ public class JacksonFixed implements Fixed {
       : Year.of(fixed.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return fixed.getEvery() == null
@@ -60,6 +90,11 @@ public class JacksonFixed implements Fixed {
       : YearCycle.valueOf(fixed.getEvery().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<MovingCondition> conditions() {
     return fixed.getMovingCondition().stream()
diff --git a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonFixedWeekdayBetweenFixed.java b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonFixedWeekdayBetweenFixed.java
index e4918a6e..e23755e9 100644
--- a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonFixedWeekdayBetweenFixed.java
+++ b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonFixedWeekdayBetweenFixed.java
@@ -3,47 +3,78 @@ package de.focus_shift.jollyday.jackson;
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.Fixed;
 import de.focus_shift.jollyday.core.spi.FixedWeekdayBetweenFixed;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 
 import java.time.DayOfWeek;
 import java.time.Year;
 
-
-public class JacksonFixedWeekdayBetweenFixed implements FixedWeekdayBetweenFixed {
+/**
+ * see {@link FixedWeekdayBetweenFixed}
+ */
+class JacksonFixedWeekdayBetweenFixed implements FixedWeekdayBetweenFixed {
 
   private final de.focus_shift.jollyday.jackson.mapping.FixedWeekdayBetweenFixed fixedWeekdayBetweenFixed;
 
-  public JacksonFixedWeekdayBetweenFixed(de.focus_shift.jollyday.jackson.mapping.FixedWeekdayBetweenFixed fixedWeekdayInMonth) {
+  JacksonFixedWeekdayBetweenFixed(de.focus_shift.jollyday.jackson.mapping.FixedWeekdayBetweenFixed fixedWeekdayInMonth) {
     this.fixedWeekdayBetweenFixed = fixedWeekdayInMonth;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Fixed from() {
     return new JacksonFixed(fixedWeekdayBetweenFixed.getFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Fixed to() {
     return new JacksonFixed(fixedWeekdayBetweenFixed.getTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public DayOfWeek weekday() {
     return DayOfWeek.valueOf(fixedWeekdayBetweenFixed.getWeekday().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return fixedWeekdayBetweenFixed.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return fixedWeekdayBetweenFixed.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(fixedWeekdayBetweenFixed.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return fixedWeekdayBetweenFixed.getValidFrom() == null
@@ -51,6 +82,11 @@ public class JacksonFixedWeekdayBetweenFixed implements FixedWeekdayBetweenFixed
       : Year.of(fixedWeekdayBetweenFixed.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return fixedWeekdayBetweenFixed.getValidTo() == null
@@ -58,6 +94,11 @@ public class JacksonFixedWeekdayBetweenFixed implements FixedWeekdayBetweenFixed
       : Year.of(fixedWeekdayBetweenFixed.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return fixedWeekdayBetweenFixed.getEvery() == null
diff --git a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonFixedWeekdayInMonth.java b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonFixedWeekdayInMonth.java
index a853ff70..539ecda6 100644
--- a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonFixedWeekdayInMonth.java
+++ b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonFixedWeekdayInMonth.java
@@ -2,48 +2,80 @@ package de.focus_shift.jollyday.jackson;
 
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.FixedWeekdayInMonth;
-import de.focus_shift.jollyday.core.spi.Occurrance;
-import de.focus_shift.jollyday.core.spi.YearCycle;
+import de.focus_shift.jollyday.core.spi.Occurrence;
 
 import java.time.DayOfWeek;
 import java.time.Month;
 import java.time.Year;
 
-public class JacksonFixedWeekdayInMonth implements FixedWeekdayInMonth {
+/**
+ * see {@link FixedWeekdayInMonth}
+ */
+class JacksonFixedWeekdayInMonth implements FixedWeekdayInMonth {
 
   private final de.focus_shift.jollyday.jackson.mapping.FixedWeekdayInMonth fixedWeekdayInMonth;
 
-  public JacksonFixedWeekdayInMonth(de.focus_shift.jollyday.jackson.mapping.FixedWeekdayInMonth fixedWeekdayInMonth) {
+  JacksonFixedWeekdayInMonth(de.focus_shift.jollyday.jackson.mapping.FixedWeekdayInMonth fixedWeekdayInMonth) {
     this.fixedWeekdayInMonth = fixedWeekdayInMonth;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public DayOfWeek weekday() {
     return DayOfWeek.valueOf(fixedWeekdayInMonth.getWeekday().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Month month() {
     return Month.valueOf(fixedWeekdayInMonth.getMonth().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public Occurrance which() {
-    return Occurrance.valueOf(fixedWeekdayInMonth.getWhich().name());
+  public Occurrence which() {
+    return Occurrence.valueOf(fixedWeekdayInMonth.getWhich().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return fixedWeekdayInMonth.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return fixedWeekdayInMonth.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(fixedWeekdayInMonth.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return fixedWeekdayInMonth.getValidFrom() == null
@@ -51,6 +83,11 @@ public class JacksonFixedWeekdayInMonth implements FixedWeekdayInMonth {
       : Year.of(fixedWeekdayInMonth.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return fixedWeekdayInMonth.getValidTo() == null
@@ -58,6 +95,11 @@ public class JacksonFixedWeekdayInMonth implements FixedWeekdayInMonth {
       : Year.of(fixedWeekdayInMonth.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return fixedWeekdayInMonth.getEvery() == null
diff --git a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonFixedWeekdayRelativeToFixed.java b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonFixedWeekdayRelativeToFixed.java
index f61d0a12..7a314863 100644
--- a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonFixedWeekdayRelativeToFixed.java
+++ b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonFixedWeekdayRelativeToFixed.java
@@ -3,54 +3,90 @@ package de.focus_shift.jollyday.jackson;
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.Fixed;
 import de.focus_shift.jollyday.core.spi.FixedWeekdayRelativeToFixed;
-import de.focus_shift.jollyday.core.spi.Occurrance;
+import de.focus_shift.jollyday.core.spi.Occurrence;
 import de.focus_shift.jollyday.core.spi.Relation;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 
 import java.time.DayOfWeek;
 import java.time.Year;
 
-
-public class JacksonFixedWeekdayRelativeToFixed implements FixedWeekdayRelativeToFixed {
+/**
+ * see {@link FixedWeekdayRelativeToFixed}
+ */
+class JacksonFixedWeekdayRelativeToFixed implements FixedWeekdayRelativeToFixed {
 
   private final de.focus_shift.jollyday.jackson.mapping.FixedWeekdayRelativeToFixed fixedWeekdayRelativeToFixed;
 
-  public JacksonFixedWeekdayRelativeToFixed(de.focus_shift.jollyday.jackson.mapping.FixedWeekdayRelativeToFixed fixedWeekdayRelativeToFixed) {
+  JacksonFixedWeekdayRelativeToFixed(de.focus_shift.jollyday.jackson.mapping.FixedWeekdayRelativeToFixed fixedWeekdayRelativeToFixed) {
     this.fixedWeekdayRelativeToFixed = fixedWeekdayRelativeToFixed;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public DayOfWeek weekday() {
     return DayOfWeek.valueOf(fixedWeekdayRelativeToFixed.getWeekday().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Relation when() {
     return Relation.valueOf(fixedWeekdayRelativeToFixed.getWhen().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Fixed day() {
     return new JacksonFixed(fixedWeekdayRelativeToFixed.getDay());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public Occurrance which() {
-    return Occurrance.valueOf(fixedWeekdayRelativeToFixed.getWhich().name());
+  public Occurrence which() {
+    return Occurrence.valueOf(fixedWeekdayRelativeToFixed.getWhich().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return fixedWeekdayRelativeToFixed.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return fixedWeekdayRelativeToFixed.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(fixedWeekdayRelativeToFixed.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return fixedWeekdayRelativeToFixed.getValidFrom() == null
@@ -58,6 +94,11 @@ public class JacksonFixedWeekdayRelativeToFixed implements FixedWeekdayRelativeT
       : Year.of(fixedWeekdayRelativeToFixed.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return fixedWeekdayRelativeToFixed.getValidTo() == null
@@ -65,6 +106,11 @@ public class JacksonFixedWeekdayRelativeToFixed implements FixedWeekdayRelativeT
       : Year.of(fixedWeekdayRelativeToFixed.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return fixedWeekdayRelativeToFixed.getEvery() == null
diff --git a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonHolidays.java b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonHolidays.java
index 80c832e6..9f0f98c9 100644
--- a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonHolidays.java
+++ b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonHolidays.java
@@ -6,69 +6,122 @@ import de.focus_shift.jollyday.core.spi.Fixed;
 import de.focus_shift.jollyday.core.spi.FixedWeekdayBetweenFixed;
 import de.focus_shift.jollyday.core.spi.FixedWeekdayInMonth;
 import de.focus_shift.jollyday.core.spi.FixedWeekdayRelativeToFixed;
+import de.focus_shift.jollyday.core.spi.Holidays;
 import de.focus_shift.jollyday.core.spi.IslamicHoliday;
 import de.focus_shift.jollyday.core.spi.RelativeToEasterSunday;
 import de.focus_shift.jollyday.core.spi.RelativeToFixed;
 import de.focus_shift.jollyday.core.spi.RelativeToWeekdayInMonth;
-import de.focus_shift.jollyday.jackson.mapping.Holidays;
 
 import java.util.List;
 
 import static java.util.stream.Collectors.toList;
 
-public class JacksonHolidays implements de.focus_shift.jollyday.core.spi.Holidays {
+/**
+ * see {@link }
+ */
+public class JacksonHolidays implements Holidays {
 
-  private final Holidays holidays;
+  private final de.focus_shift.jollyday.jackson.mapping.Holidays holidays;
 
-  public JacksonHolidays(Holidays holidays) {
+  public JacksonHolidays(de.focus_shift.jollyday.jackson.mapping.Holidays holidays) {
     this.holidays = holidays;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<Fixed> fixed() {
     return holidays.getFixed().stream().map(JacksonFixed::new).collect(toList());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<RelativeToFixed> relativeToFixed() {
     return holidays.getRelativeToFixed().stream().map(JacksonRelativeToFixed::new).collect(toList());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<RelativeToWeekdayInMonth> relativeToWeekdayInMonth() {
     return holidays.getRelativeToWeekdayInMonth().stream().map(JacksonRelativeToWeekdayInMonth::new).collect(toList());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<FixedWeekdayInMonth> fixedWeekdays() {
     return holidays.getFixedWeekday().stream().map(JacksonFixedWeekdayInMonth::new).collect(toList());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<ChristianHoliday> christianHolidays() {
     return holidays.getChristianHoliday().stream().map(JacksonChristianHoliday::new).collect(toList());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<IslamicHoliday> islamicHolidays() {
     return holidays.getIslamicHoliday().stream().map(JacksonIslamicHoliday::new).collect(toList());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<FixedWeekdayBetweenFixed> fixedWeekdayBetweenFixed() {
     return holidays.getFixedWeekdayBetweenFixed().stream().map(JacksonFixedWeekdayBetweenFixed::new).collect(toList());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<FixedWeekdayRelativeToFixed> fixedWeekdayRelativeToFixed() {
     return holidays.getFixedWeekdayRelativeToFixed().stream().map(JacksonFixedWeekdayRelativeToFixed::new).collect(toList());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<EthiopianOrthodoxHoliday> ethiopianOrthodoxHolidays() {
     return holidays.getEthiopianOrthodoxHoliday().stream().map(JacksonEthiopianOrthodoxHoliday::new).collect(toList());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<RelativeToEasterSunday> relativeToEasterSunday() {
     return holidays.getRelativeToEasterSunday().stream().map(JacksonRelativeToEasterSunday::new).collect(toList());
diff --git a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonIslamicHoliday.java b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonIslamicHoliday.java
index 9e8c9de9..8bf8a0f7 100644
--- a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonIslamicHoliday.java
+++ b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonIslamicHoliday.java
@@ -2,41 +2,60 @@ package de.focus_shift.jollyday.jackson;
 
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.IslamicHoliday;
-import de.focus_shift.jollyday.core.spi.IslamicHolidayType;
-import de.focus_shift.jollyday.core.spi.MovingCondition;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 
 import java.time.Year;
 import java.util.List;
 
 import static java.util.stream.Collectors.toList;
 
-
-public class JacksonIslamicHoliday implements IslamicHoliday {
+/**
+ * see {@link IslamicHoliday}
+ */
+class JacksonIslamicHoliday implements IslamicHoliday {
 
   private final de.focus_shift.jollyday.jackson.mapping.IslamicHoliday islamicHoliday;
 
-  public JacksonIslamicHoliday(de.focus_shift.jollyday.jackson.mapping.IslamicHoliday christianHoliday) {
+  JacksonIslamicHoliday(de.focus_shift.jollyday.jackson.mapping.IslamicHoliday christianHoliday) {
     this.islamicHoliday = christianHoliday;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public IslamicHolidayType type() {
     return IslamicHolidayType.valueOf(islamicHoliday.getType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return islamicHoliday.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return islamicHoliday.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(islamicHoliday.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return islamicHoliday.getValidFrom() == null
@@ -44,6 +63,11 @@ public class JacksonIslamicHoliday implements IslamicHoliday {
       : Year.of(islamicHoliday.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return islamicHoliday.getValidTo() == null
@@ -51,6 +75,11 @@ public class JacksonIslamicHoliday implements IslamicHoliday {
       : Year.of(islamicHoliday.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return islamicHoliday.getEvery() == null
@@ -58,6 +87,11 @@ public class JacksonIslamicHoliday implements IslamicHoliday {
       : YearCycle.valueOf(islamicHoliday.getEvery().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<MovingCondition> conditions() {
     return islamicHoliday.getMovingCondition().stream()
diff --git a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonMovingCondition.java b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonMovingCondition.java
index 21ec52b7..ac911087 100644
--- a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonMovingCondition.java
+++ b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonMovingCondition.java
@@ -1,28 +1,45 @@
 package de.focus_shift.jollyday.jackson;
 
-import de.focus_shift.jollyday.core.spi.MovingCondition;
-import de.focus_shift.jollyday.core.spi.With;
+import de.focus_shift.jollyday.core.spi.Movable;
 
 import java.time.DayOfWeek;
 
-public class JacksonMovingCondition implements MovingCondition {
+/**
+ * see {@link de.focus_shift.jollyday.core.spi.Movable.MovingCondition}
+ */
+class JacksonMovingCondition implements Movable.MovingCondition {
 
   private final de.focus_shift.jollyday.jackson.mapping.MovingCondition movingCondition;
 
-  public JacksonMovingCondition(de.focus_shift.jollyday.jackson.mapping.MovingCondition jacksonMovingCondition) {
+  JacksonMovingCondition(de.focus_shift.jollyday.jackson.mapping.MovingCondition jacksonMovingCondition) {
     this.movingCondition = jacksonMovingCondition;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public DayOfWeek substitute() {
     return DayOfWeek.valueOf(movingCondition.getSubstitute().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public With with() {
     return With.valueOf(movingCondition.getWith().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public DayOfWeek weekday() {
     return DayOfWeek.valueOf(movingCondition.getWeekday().name());
diff --git a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonRelativeToEasterSunday.java b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonRelativeToEasterSunday.java
index 831f123c..1286056d 100644
--- a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonRelativeToEasterSunday.java
+++ b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonRelativeToEasterSunday.java
@@ -2,7 +2,6 @@ package de.focus_shift.jollyday.jackson;
 
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.RelativeToEasterSunday;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 import de.focus_shift.jollyday.jackson.mapping.ChronologyType;
 import org.threeten.extra.Days;
 import org.threeten.extra.chrono.JulianChronology;
@@ -11,26 +10,44 @@ import java.time.Year;
 import java.time.chrono.Chronology;
 import java.time.chrono.IsoChronology;
 
-public class JacksonRelativeToEasterSunday implements RelativeToEasterSunday {
+/**
+ * see {@link RelativeToEasterSunday}
+ */
+class JacksonRelativeToEasterSunday implements RelativeToEasterSunday {
 
   private final de.focus_shift.jollyday.jackson.mapping.RelativeToEasterSunday relativeToEasterSunday;
 
-  public JacksonRelativeToEasterSunday(de.focus_shift.jollyday.jackson.mapping.RelativeToEasterSunday relativeToEasterSunday) {
+  JacksonRelativeToEasterSunday(de.focus_shift.jollyday.jackson.mapping.RelativeToEasterSunday relativeToEasterSunday) {
     this.relativeToEasterSunday = relativeToEasterSunday;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return relativeToEasterSunday.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return relativeToEasterSunday.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(relativeToEasterSunday.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return relativeToEasterSunday.getValidFrom() == null
@@ -38,6 +55,11 @@ public class JacksonRelativeToEasterSunday implements RelativeToEasterSunday {
       : Year.of(relativeToEasterSunday.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return relativeToEasterSunday.getValidTo() == null
@@ -45,6 +67,11 @@ public class JacksonRelativeToEasterSunday implements RelativeToEasterSunday {
       : Year.of(relativeToEasterSunday.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return relativeToEasterSunday.getEvery() == null
@@ -52,11 +79,21 @@ public class JacksonRelativeToEasterSunday implements RelativeToEasterSunday {
       : YearCycle.valueOf(relativeToEasterSunday.getEvery().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Chronology chronology() {
     return relativeToEasterSunday.getChronology() == ChronologyType.JULIAN ? JulianChronology.INSTANCE : IsoChronology.INSTANCE;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Days days() {
     return Days.of(relativeToEasterSunday.getDays());
diff --git a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonRelativeToFixed.java b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonRelativeToFixed.java
index 3778af54..6b1dc83f 100644
--- a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonRelativeToFixed.java
+++ b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonRelativeToFixed.java
@@ -4,25 +4,37 @@ import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.Fixed;
 import de.focus_shift.jollyday.core.spi.Relation;
 import de.focus_shift.jollyday.core.spi.RelativeToFixed;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 import org.threeten.extra.Days;
 
 import java.time.DayOfWeek;
 import java.time.Year;
 
-public class JacksonRelativeToFixed implements RelativeToFixed {
+/**
+ * see {@link RelativeToFixed}
+ */
+class JacksonRelativeToFixed implements RelativeToFixed {
 
   private final de.focus_shift.jollyday.jackson.mapping.RelativeToFixed relativeToFixed;
 
-  public JacksonRelativeToFixed(de.focus_shift.jollyday.jackson.mapping.RelativeToFixed relativeToFixed) {
+  JacksonRelativeToFixed(de.focus_shift.jollyday.jackson.mapping.RelativeToFixed relativeToFixed) {
     this.relativeToFixed = relativeToFixed;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Fixed date() {
     return new JacksonFixed(relativeToFixed.getDate());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public DayOfWeek weekday() {
     return relativeToFixed.getWeekday() == null
@@ -30,6 +42,11 @@ public class JacksonRelativeToFixed implements RelativeToFixed {
       : DayOfWeek.valueOf(relativeToFixed.getWeekday().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Relation when() {
     return relativeToFixed.getWhen() == null
@@ -37,6 +54,11 @@ public class JacksonRelativeToFixed implements RelativeToFixed {
       : Relation.valueOf(relativeToFixed.getWhen().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Days days() {
     return relativeToFixed.getDays() == null
@@ -44,18 +66,33 @@ public class JacksonRelativeToFixed implements RelativeToFixed {
       : Days.of(relativeToFixed.getDays());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return relativeToFixed.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return relativeToFixed.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(relativeToFixed.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return relativeToFixed.getValidFrom() == null
@@ -63,6 +100,11 @@ public class JacksonRelativeToFixed implements RelativeToFixed {
       : Year.of(relativeToFixed.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return relativeToFixed.getValidTo() == null
@@ -70,6 +112,11 @@ public class JacksonRelativeToFixed implements RelativeToFixed {
       : Year.of(relativeToFixed.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return relativeToFixed.getEvery() == null
diff --git a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonRelativeToWeekdayInMonth.java b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonRelativeToWeekdayInMonth.java
index 55bade30..3a4107bb 100644
--- a/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonRelativeToWeekdayInMonth.java
+++ b/jollyday-jackson/src/main/java/de/focus_shift/jollyday/jackson/JacksonRelativeToWeekdayInMonth.java
@@ -4,47 +4,78 @@ import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.FixedWeekdayInMonth;
 import de.focus_shift.jollyday.core.spi.Relation;
 import de.focus_shift.jollyday.core.spi.RelativeToWeekdayInMonth;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 
 import java.time.DayOfWeek;
 import java.time.Year;
 
-
-public class JacksonRelativeToWeekdayInMonth implements RelativeToWeekdayInMonth {
+/**
+ * see {@link RelativeToWeekdayInMonth}
+ */
+class JacksonRelativeToWeekdayInMonth implements RelativeToWeekdayInMonth {
 
   private final de.focus_shift.jollyday.jackson.mapping.RelativeToWeekdayInMonth relativeToWeekdayInMonth;
 
-  public JacksonRelativeToWeekdayInMonth(de.focus_shift.jollyday.jackson.mapping.RelativeToWeekdayInMonth relativeToWeekdayInMonth) {
+  JacksonRelativeToWeekdayInMonth(de.focus_shift.jollyday.jackson.mapping.RelativeToWeekdayInMonth relativeToWeekdayInMonth) {
     this.relativeToWeekdayInMonth = relativeToWeekdayInMonth;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public FixedWeekdayInMonth weekdayInMonth() {
     return new JacksonFixedWeekdayInMonth(relativeToWeekdayInMonth.getFixedWeekday());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public DayOfWeek weekday() {
     return DayOfWeek.valueOf(relativeToWeekdayInMonth.getWeekday().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Relation when() {
     return Relation.valueOf(relativeToWeekdayInMonth.getWhen().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return relativeToWeekdayInMonth.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return relativeToWeekdayInMonth.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(relativeToWeekdayInMonth.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return relativeToWeekdayInMonth.getValidFrom() == null
@@ -52,6 +83,11 @@ public class JacksonRelativeToWeekdayInMonth implements RelativeToWeekdayInMonth
       : Year.of(relativeToWeekdayInMonth.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return relativeToWeekdayInMonth.getValidTo() == null
@@ -59,6 +95,11 @@ public class JacksonRelativeToWeekdayInMonth implements RelativeToWeekdayInMonth
       : Year.of(relativeToWeekdayInMonth.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return relativeToWeekdayInMonth.getEvery() == null
diff --git a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbChristianHoliday.java b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbChristianHoliday.java
index 56edc035..adffc2b2 100644
--- a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbChristianHoliday.java
+++ b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbChristianHoliday.java
@@ -2,9 +2,6 @@ package de.focus_shift.jollyday.jaxb;
 
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.ChristianHoliday;
-import de.focus_shift.jollyday.core.spi.ChristianHolidayType;
-import de.focus_shift.jollyday.core.spi.MovingCondition;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 import org.threeten.extra.chrono.JulianChronology;
 
 import java.time.Year;
@@ -15,12 +12,14 @@ import java.util.List;
 import static de.focus_shift.jollyday.jaxb.mapping.ChronologyType.JULIAN;
 import static java.util.stream.Collectors.toList;
 
-
-public class JaxbChristianHoliday implements ChristianHoliday {
+/**
+ * see {@link ChristianHoliday}
+ */
+class JaxbChristianHoliday implements ChristianHoliday {
 
   private final de.focus_shift.jollyday.jaxb.mapping.ChristianHoliday christianHoliday;
 
-  public JaxbChristianHoliday(de.focus_shift.jollyday.jaxb.mapping.ChristianHoliday christianHoliday) {
+  JaxbChristianHoliday(de.focus_shift.jollyday.jaxb.mapping.ChristianHoliday christianHoliday) {
     this.christianHoliday = christianHoliday;
   }
 
@@ -29,6 +28,11 @@ public class JaxbChristianHoliday implements ChristianHoliday {
     return ChristianHolidayType.valueOf(christianHoliday.getType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Chronology chronology() {
     return christianHoliday.getChronology() == JULIAN
@@ -36,18 +40,33 @@ public class JaxbChristianHoliday implements ChristianHoliday {
       : IsoChronology.INSTANCE;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return christianHoliday.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return christianHoliday.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(christianHoliday.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return christianHoliday.getValidFrom() == null
@@ -55,6 +74,11 @@ public class JaxbChristianHoliday implements ChristianHoliday {
       : Year.of(christianHoliday.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return christianHoliday.getValidTo() == null
@@ -62,6 +86,11 @@ public class JaxbChristianHoliday implements ChristianHoliday {
       : Year.of(christianHoliday.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return christianHoliday.getEvery() == null
@@ -69,6 +98,11 @@ public class JaxbChristianHoliday implements ChristianHoliday {
       : YearCycle.valueOf(christianHoliday.getEvery().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<MovingCondition> conditions() {
     return christianHoliday.getMovingCondition().stream()
diff --git a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbConfiguration.java b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbConfiguration.java
index 9771725e..3e4f67a6 100644
--- a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbConfiguration.java
+++ b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbConfiguration.java
@@ -5,12 +5,14 @@ import de.focus_shift.jollyday.core.spi.Holidays;
 
 import java.util.stream.Stream;
 
-
-public class JaxbConfiguration implements Configuration {
+/**
+ * see {@link Configuration}
+ */
+class JaxbConfiguration implements Configuration {
 
   private final de.focus_shift.jollyday.jaxb.mapping.Configuration xmlConfiguration;
 
-  public JaxbConfiguration(de.focus_shift.jollyday.jaxb.mapping.Configuration xmlConfiguration) {
+  JaxbConfiguration(de.focus_shift.jollyday.jaxb.mapping.Configuration xmlConfiguration) {
     this.xmlConfiguration = xmlConfiguration;
   }
 
diff --git a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbConfigurationService.java b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbConfigurationService.java
index 048200dc..23211299 100644
--- a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbConfigurationService.java
+++ b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbConfigurationService.java
@@ -7,11 +7,18 @@ import de.focus_shift.jollyday.core.spi.ConfigurationService;
 import java.io.InputStream;
 import java.net.URL;
 
-
+/**
+ * see {@link ConfigurationService}
+ */
 public class JaxbConfigurationService implements ConfigurationService {
 
   private static final XMLUtil xmlUtil = new XMLUtil();
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Configuration getConfiguration(ManagerParameter parameter) {
     final URL resourceUrl = parameter.createResourceUrl();
diff --git a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbEthiopianOrthodoxHoliday.java b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbEthiopianOrthodoxHoliday.java
index 3933786e..7f522083 100644
--- a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbEthiopianOrthodoxHoliday.java
+++ b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbEthiopianOrthodoxHoliday.java
@@ -2,36 +2,57 @@ package de.focus_shift.jollyday.jaxb;
 
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.EthiopianOrthodoxHoliday;
-import de.focus_shift.jollyday.core.spi.EthiopianOrthodoxHolidayType;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 
 import java.time.Year;
 
-public class JaxbEthiopianOrthodoxHoliday implements EthiopianOrthodoxHoliday {
+/**
+ * see {@link EthiopianOrthodoxHoliday}
+ */
+class JaxbEthiopianOrthodoxHoliday implements EthiopianOrthodoxHoliday {
 
   private final de.focus_shift.jollyday.jaxb.mapping.EthiopianOrthodoxHoliday ethiopianOrthodoxHoliday;
 
-  public JaxbEthiopianOrthodoxHoliday(de.focus_shift.jollyday.jaxb.mapping.EthiopianOrthodoxHoliday ethiopianOrthodoxHoliday) {
+  JaxbEthiopianOrthodoxHoliday(de.focus_shift.jollyday.jaxb.mapping.EthiopianOrthodoxHoliday ethiopianOrthodoxHoliday) {
     this.ethiopianOrthodoxHoliday = ethiopianOrthodoxHoliday;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return ethiopianOrthodoxHoliday.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return ethiopianOrthodoxHoliday.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(ethiopianOrthodoxHoliday.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public EthiopianOrthodoxHolidayType type() {
     return EthiopianOrthodoxHolidayType.valueOf(ethiopianOrthodoxHoliday.getType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return ethiopianOrthodoxHoliday.getValidFrom() == null
@@ -39,6 +60,11 @@ public class JaxbEthiopianOrthodoxHoliday implements EthiopianOrthodoxHoliday {
       : Year.of(ethiopianOrthodoxHoliday.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return ethiopianOrthodoxHoliday.getValidTo() == null
@@ -46,6 +72,11 @@ public class JaxbEthiopianOrthodoxHoliday implements EthiopianOrthodoxHoliday {
       : Year.of(ethiopianOrthodoxHoliday.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return ethiopianOrthodoxHoliday.getEvery() == null
diff --git a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbFixed.java b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbFixed.java
index 2f731401..ff2a818e 100644
--- a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbFixed.java
+++ b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbFixed.java
@@ -2,8 +2,6 @@ package de.focus_shift.jollyday.jaxb;
 
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.Fixed;
-import de.focus_shift.jollyday.core.spi.MovingCondition;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 
 import java.time.MonthDay;
 import java.time.Year;
@@ -11,34 +9,56 @@ import java.util.List;
 
 import static java.util.stream.Collectors.toList;
 
-
-public class JaxbFixed implements Fixed {
+/**
+ * see {@link Fixed}
+ */
+class JaxbFixed implements Fixed {
 
   private final XMLUtil xmlUtil = new XMLUtil();
 
   private final de.focus_shift.jollyday.jaxb.mapping.Fixed fixed;
 
-  public JaxbFixed(de.focus_shift.jollyday.jaxb.mapping.Fixed fixed) {
+  JaxbFixed(de.focus_shift.jollyday.jaxb.mapping.Fixed fixed) {
     this.fixed = fixed;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public MonthDay day() {
     return MonthDay.of(xmlUtil.getMonth(fixed.getMonth()), fixed.getDay());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return fixed.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return fixed.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(fixed.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return fixed.getValidFrom() == null
@@ -46,12 +66,22 @@ public class JaxbFixed implements Fixed {
       : Year.of(fixed.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return fixed.getValidTo() == null
       ? null
       : Year.of(fixed.getValidTo());
   }
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
 
   @Override
   public YearCycle cycle() {
@@ -60,6 +90,11 @@ public class JaxbFixed implements Fixed {
       : YearCycle.valueOf(fixed.getEvery().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<MovingCondition> conditions() {
     return fixed.getMovingCondition().stream()
diff --git a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbFixedWeekdayBetweenFixed.java b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbFixedWeekdayBetweenFixed.java
index b810801f..c4b61bbe 100644
--- a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbFixedWeekdayBetweenFixed.java
+++ b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbFixedWeekdayBetweenFixed.java
@@ -3,47 +3,78 @@ package de.focus_shift.jollyday.jaxb;
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.Fixed;
 import de.focus_shift.jollyday.core.spi.FixedWeekdayBetweenFixed;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 
 import java.time.DayOfWeek;
 import java.time.Year;
 
-
-public class JaxbFixedWeekdayBetweenFixed implements FixedWeekdayBetweenFixed {
+/**
+ * see {@link FixedWeekdayBetweenFixed}
+ */
+class JaxbFixedWeekdayBetweenFixed implements FixedWeekdayBetweenFixed {
 
   private final de.focus_shift.jollyday.jaxb.mapping.FixedWeekdayBetweenFixed fixedWeekdayBetweenFixed;
 
-  public JaxbFixedWeekdayBetweenFixed(de.focus_shift.jollyday.jaxb.mapping.FixedWeekdayBetweenFixed fixedWeekdayInMonth) {
+  JaxbFixedWeekdayBetweenFixed(de.focus_shift.jollyday.jaxb.mapping.FixedWeekdayBetweenFixed fixedWeekdayInMonth) {
     this.fixedWeekdayBetweenFixed = fixedWeekdayInMonth;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Fixed from() {
     return new JaxbFixed(fixedWeekdayBetweenFixed.getFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Fixed to() {
     return new JaxbFixed(fixedWeekdayBetweenFixed.getTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public DayOfWeek weekday() {
     return DayOfWeek.valueOf(fixedWeekdayBetweenFixed.getWeekday().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return fixedWeekdayBetweenFixed.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return fixedWeekdayBetweenFixed.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(fixedWeekdayBetweenFixed.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return fixedWeekdayBetweenFixed.getValidFrom() == null
@@ -51,6 +82,11 @@ public class JaxbFixedWeekdayBetweenFixed implements FixedWeekdayBetweenFixed {
       : Year.of(fixedWeekdayBetweenFixed.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return fixedWeekdayBetweenFixed.getValidTo() == null
@@ -58,6 +94,11 @@ public class JaxbFixedWeekdayBetweenFixed implements FixedWeekdayBetweenFixed {
       : Year.of(fixedWeekdayBetweenFixed.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return fixedWeekdayBetweenFixed.getEvery() == null
diff --git a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbFixedWeekdayInMonth.java b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbFixedWeekdayInMonth.java
index bef324c0..c6108ca5 100644
--- a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbFixedWeekdayInMonth.java
+++ b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbFixedWeekdayInMonth.java
@@ -2,18 +2,20 @@ package de.focus_shift.jollyday.jaxb;
 
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.FixedWeekdayInMonth;
-import de.focus_shift.jollyday.core.spi.Occurrance;
-import de.focus_shift.jollyday.core.spi.YearCycle;
+import de.focus_shift.jollyday.core.spi.Occurrence;
 
 import java.time.DayOfWeek;
 import java.time.Month;
 import java.time.Year;
 
-public class JaxbFixedWeekdayInMonth implements FixedWeekdayInMonth {
+/**
+ * see {@link FixedWeekdayInMonth}
+ */
+class JaxbFixedWeekdayInMonth implements FixedWeekdayInMonth {
 
   private final de.focus_shift.jollyday.jaxb.mapping.FixedWeekdayInMonth fixedWeekdayInMonth;
 
-  public JaxbFixedWeekdayInMonth(de.focus_shift.jollyday.jaxb.mapping.FixedWeekdayInMonth fixedWeekdayInMonth) {
+  JaxbFixedWeekdayInMonth(de.focus_shift.jollyday.jaxb.mapping.FixedWeekdayInMonth fixedWeekdayInMonth) {
     this.fixedWeekdayInMonth = fixedWeekdayInMonth;
   }
 
@@ -28,8 +30,8 @@ public class JaxbFixedWeekdayInMonth implements FixedWeekdayInMonth {
   }
 
   @Override
-  public Occurrance which() {
-    return Occurrance.valueOf(fixedWeekdayInMonth.getWhich().name());
+  public Occurrence which() {
+    return Occurrence.valueOf(fixedWeekdayInMonth.getWhich().name());
   }
 
   @Override
@@ -38,7 +40,7 @@ public class JaxbFixedWeekdayInMonth implements FixedWeekdayInMonth {
   }
 
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return fixedWeekdayInMonth.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(fixedWeekdayInMonth.getLocalizedType().name());
diff --git a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbFixedWeekdayRelativeToFixed.java b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbFixedWeekdayRelativeToFixed.java
index 3d4a4299..3001b17a 100644
--- a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbFixedWeekdayRelativeToFixed.java
+++ b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbFixedWeekdayRelativeToFixed.java
@@ -3,54 +3,90 @@ package de.focus_shift.jollyday.jaxb;
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.Fixed;
 import de.focus_shift.jollyday.core.spi.FixedWeekdayRelativeToFixed;
-import de.focus_shift.jollyday.core.spi.Occurrance;
+import de.focus_shift.jollyday.core.spi.Occurrence;
 import de.focus_shift.jollyday.core.spi.Relation;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 
 import java.time.DayOfWeek;
 import java.time.Year;
 
-
-public class JaxbFixedWeekdayRelativeToFixed implements FixedWeekdayRelativeToFixed {
+/**
+ * see {@link FixedWeekdayRelativeToFixed}
+ */
+class JaxbFixedWeekdayRelativeToFixed implements FixedWeekdayRelativeToFixed {
 
   private final de.focus_shift.jollyday.jaxb.mapping.FixedWeekdayRelativeToFixed fixedWeekdayRelativeToFixed;
 
-  public JaxbFixedWeekdayRelativeToFixed(de.focus_shift.jollyday.jaxb.mapping.FixedWeekdayRelativeToFixed fixedWeekdayRelativeToFixed) {
+  JaxbFixedWeekdayRelativeToFixed(de.focus_shift.jollyday.jaxb.mapping.FixedWeekdayRelativeToFixed fixedWeekdayRelativeToFixed) {
     this.fixedWeekdayRelativeToFixed = fixedWeekdayRelativeToFixed;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public DayOfWeek weekday() {
     return DayOfWeek.valueOf(fixedWeekdayRelativeToFixed.getWeekday().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Relation when() {
     return Relation.valueOf(fixedWeekdayRelativeToFixed.getWhen().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Fixed day() {
     return new JaxbFixed(fixedWeekdayRelativeToFixed.getDay());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public Occurrance which() {
-    return Occurrance.valueOf(fixedWeekdayRelativeToFixed.getWhich().name());
+  public Occurrence which() {
+    return Occurrence.valueOf(fixedWeekdayRelativeToFixed.getWhich().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return fixedWeekdayRelativeToFixed.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return fixedWeekdayRelativeToFixed.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(fixedWeekdayRelativeToFixed.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return fixedWeekdayRelativeToFixed.getValidFrom() == null
@@ -58,6 +94,11 @@ public class JaxbFixedWeekdayRelativeToFixed implements FixedWeekdayRelativeToFi
       : Year.of(fixedWeekdayRelativeToFixed.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return fixedWeekdayRelativeToFixed.getValidTo() == null
@@ -65,6 +106,11 @@ public class JaxbFixedWeekdayRelativeToFixed implements FixedWeekdayRelativeToFi
       : Year.of(fixedWeekdayRelativeToFixed.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return fixedWeekdayRelativeToFixed.getEvery() == null
diff --git a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbHolidays.java b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbHolidays.java
index 0162c216..58b8f307 100644
--- a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbHolidays.java
+++ b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbHolidays.java
@@ -16,7 +16,9 @@ import java.util.List;
 
 import static java.util.stream.Collectors.toList;
 
-
+/**
+ * see {@link Holidays}
+ */
 public class JaxbHolidays implements Holidays {
 
   private final de.focus_shift.jollyday.jaxb.mapping.Holidays holidays;
@@ -25,46 +27,91 @@ public class JaxbHolidays implements Holidays {
     this.holidays = holidays;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<Fixed> fixed() {
     return holidays.getFixed().stream().map(JaxbFixed::new).collect(toList());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<RelativeToFixed> relativeToFixed() {
     return holidays.getRelativeToFixed().stream().map(JaxbRelativeToFixed::new).collect(toList());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<RelativeToWeekdayInMonth> relativeToWeekdayInMonth() {
     return holidays.getRelativeToWeekdayInMonth().stream().map(JaxbRelativeToWeekdayInMonth::new).collect(toList());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<FixedWeekdayInMonth> fixedWeekdays() {
     return holidays.getFixedWeekday().stream().map(JaxbFixedWeekdayInMonth::new).collect(toList());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<ChristianHoliday> christianHolidays() {
     return holidays.getChristianHoliday().stream().map(JaxbChristianHoliday::new).collect(toList());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<IslamicHoliday> islamicHolidays() {
     return holidays.getIslamicHoliday().stream().map(JaxbIslamicHoliday::new).collect(toList());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<FixedWeekdayBetweenFixed> fixedWeekdayBetweenFixed() {
     return holidays.getFixedWeekdayBetweenFixed().stream().map(JaxbFixedWeekdayBetweenFixed::new).collect(toList());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<FixedWeekdayRelativeToFixed> fixedWeekdayRelativeToFixed() {
     return holidays.getFixedWeekdayRelativeToFixed().stream().map(JaxbFixedWeekdayRelativeToFixed::new).collect(toList());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<EthiopianOrthodoxHoliday> ethiopianOrthodoxHolidays() {
     return holidays.getEthiopianOrthodoxHoliday().stream().map(JaxbEthiopianOrthodoxHoliday::new).collect(toList());
diff --git a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbIslamicHoliday.java b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbIslamicHoliday.java
index 4a45094b..3ca8347e 100644
--- a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbIslamicHoliday.java
+++ b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbIslamicHoliday.java
@@ -2,41 +2,60 @@ package de.focus_shift.jollyday.jaxb;
 
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.IslamicHoliday;
-import de.focus_shift.jollyday.core.spi.IslamicHolidayType;
-import de.focus_shift.jollyday.core.spi.MovingCondition;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 
 import java.time.Year;
 import java.util.List;
 
 import static java.util.stream.Collectors.toList;
 
-
-public class JaxbIslamicHoliday implements IslamicHoliday {
+/**
+ * see {@link IslamicHoliday}
+ */
+class JaxbIslamicHoliday implements IslamicHoliday {
 
   private final de.focus_shift.jollyday.jaxb.mapping.IslamicHoliday islamicHoliday;
 
-  public JaxbIslamicHoliday(de.focus_shift.jollyday.jaxb.mapping.IslamicHoliday christianHoliday) {
+  JaxbIslamicHoliday(de.focus_shift.jollyday.jaxb.mapping.IslamicHoliday christianHoliday) {
     this.islamicHoliday = christianHoliday;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public IslamicHolidayType type() {
     return IslamicHolidayType.valueOf(islamicHoliday.getType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return islamicHoliday.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return islamicHoliday.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(islamicHoliday.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return islamicHoliday.getValidFrom() == null
@@ -44,6 +63,11 @@ public class JaxbIslamicHoliday implements IslamicHoliday {
       : Year.of(islamicHoliday.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return islamicHoliday.getValidTo() == null
@@ -51,6 +75,11 @@ public class JaxbIslamicHoliday implements IslamicHoliday {
       : Year.of(islamicHoliday.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return islamicHoliday.getEvery() == null
@@ -58,6 +87,11 @@ public class JaxbIslamicHoliday implements IslamicHoliday {
       : YearCycle.valueOf(islamicHoliday.getEvery().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public List<MovingCondition> conditions() {
     return islamicHoliday.getMovingCondition().stream()
diff --git a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbMovingCondition.java b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbMovingCondition.java
index d22e088b..42d7fc7b 100644
--- a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbMovingCondition.java
+++ b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbMovingCondition.java
@@ -1,29 +1,45 @@
 package de.focus_shift.jollyday.jaxb;
 
-import de.focus_shift.jollyday.core.spi.MovingCondition;
-import de.focus_shift.jollyday.core.spi.With;
+import de.focus_shift.jollyday.core.spi.Movable;
 
 import java.time.DayOfWeek;
 
-
-public class JaxbMovingCondition implements MovingCondition {
+/**
+ * see {@link de.focus_shift.jollyday.core.spi.Movable.MovingCondition}
+ */
+class JaxbMovingCondition implements Movable.MovingCondition {
 
   private final de.focus_shift.jollyday.jaxb.mapping.MovingCondition movingCondition;
 
-  public JaxbMovingCondition(de.focus_shift.jollyday.jaxb.mapping.MovingCondition jaxbMovingCondition) {
+  JaxbMovingCondition(de.focus_shift.jollyday.jaxb.mapping.MovingCondition jaxbMovingCondition) {
     this.movingCondition = jaxbMovingCondition;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public DayOfWeek substitute() {
     return DayOfWeek.valueOf(movingCondition.getSubstitute().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public With with() {
     return With.valueOf(movingCondition.getWith().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public DayOfWeek weekday() {
     return DayOfWeek.valueOf(movingCondition.getWeekday().name());
diff --git a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbRelativeToEasterSunday.java b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbRelativeToEasterSunday.java
index 4c971cc2..cabd85c6 100644
--- a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbRelativeToEasterSunday.java
+++ b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbRelativeToEasterSunday.java
@@ -2,7 +2,6 @@ package de.focus_shift.jollyday.jaxb;
 
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.RelativeToEasterSunday;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 import de.focus_shift.jollyday.jaxb.mapping.ChronologyType;
 import org.threeten.extra.Days;
 import org.threeten.extra.chrono.JulianChronology;
@@ -11,27 +10,44 @@ import java.time.Year;
 import java.time.chrono.Chronology;
 import java.time.chrono.IsoChronology;
 
-
-public class JaxbRelativeToEasterSunday implements RelativeToEasterSunday {
+/**
+ * see {@link RelativeToEasterSunday}
+ */
+class JaxbRelativeToEasterSunday implements RelativeToEasterSunday {
 
   private final de.focus_shift.jollyday.jaxb.mapping.RelativeToEasterSunday relativeToEasterSunday;
 
-  public JaxbRelativeToEasterSunday(de.focus_shift.jollyday.jaxb.mapping.RelativeToEasterSunday relativeToEasterSunday) {
+  JaxbRelativeToEasterSunday(de.focus_shift.jollyday.jaxb.mapping.RelativeToEasterSunday relativeToEasterSunday) {
     this.relativeToEasterSunday = relativeToEasterSunday;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return relativeToEasterSunday.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return relativeToEasterSunday.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(relativeToEasterSunday.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return relativeToEasterSunday.getValidFrom() == null
@@ -39,6 +55,11 @@ public class JaxbRelativeToEasterSunday implements RelativeToEasterSunday {
       : Year.of(relativeToEasterSunday.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return relativeToEasterSunday.getValidTo() == null
@@ -46,6 +67,11 @@ public class JaxbRelativeToEasterSunday implements RelativeToEasterSunday {
       : Year.of(relativeToEasterSunday.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return relativeToEasterSunday.getEvery() == null
@@ -53,11 +79,21 @@ public class JaxbRelativeToEasterSunday implements RelativeToEasterSunday {
       : YearCycle.valueOf(relativeToEasterSunday.getEvery().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Chronology chronology() {
     return relativeToEasterSunday.getChronology() == ChronologyType.JULIAN ? JulianChronology.INSTANCE : IsoChronology.INSTANCE;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Days days() {
     return Days.of(relativeToEasterSunday.getDays());
diff --git a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbRelativeToFixed.java b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbRelativeToFixed.java
index a95c2db2..098dfb93 100644
--- a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbRelativeToFixed.java
+++ b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbRelativeToFixed.java
@@ -4,25 +4,37 @@ import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.Fixed;
 import de.focus_shift.jollyday.core.spi.Relation;
 import de.focus_shift.jollyday.core.spi.RelativeToFixed;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 import org.threeten.extra.Days;
 
 import java.time.DayOfWeek;
 import java.time.Year;
 
-public class JaxbRelativeToFixed implements RelativeToFixed {
+/**
+ * see {@link RelativeToFixed}
+ */
+class JaxbRelativeToFixed implements RelativeToFixed {
 
   private final de.focus_shift.jollyday.jaxb.mapping.RelativeToFixed relativeToFixed;
 
-  public JaxbRelativeToFixed(de.focus_shift.jollyday.jaxb.mapping.RelativeToFixed relativeToFixed) {
+  JaxbRelativeToFixed(de.focus_shift.jollyday.jaxb.mapping.RelativeToFixed relativeToFixed) {
     this.relativeToFixed = relativeToFixed;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Fixed date() {
     return new JaxbFixed(relativeToFixed.getDate());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public DayOfWeek weekday() {
     return relativeToFixed.getWeekday() == null
@@ -30,6 +42,11 @@ public class JaxbRelativeToFixed implements RelativeToFixed {
       : DayOfWeek.valueOf(relativeToFixed.getWeekday().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Relation when() {
     return relativeToFixed.getWhen() == null
@@ -37,6 +54,11 @@ public class JaxbRelativeToFixed implements RelativeToFixed {
       : Relation.valueOf(relativeToFixed.getWhen().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Days days() {
     return relativeToFixed.getDays() == null
@@ -44,18 +66,33 @@ public class JaxbRelativeToFixed implements RelativeToFixed {
       : Days.of(relativeToFixed.getDays());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return relativeToFixed.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return relativeToFixed.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(relativeToFixed.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return relativeToFixed.getValidFrom() == null
@@ -63,6 +100,11 @@ public class JaxbRelativeToFixed implements RelativeToFixed {
       : Year.of(relativeToFixed.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return relativeToFixed.getValidTo() == null
@@ -70,6 +112,11 @@ public class JaxbRelativeToFixed implements RelativeToFixed {
       : Year.of(relativeToFixed.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return relativeToFixed.getEvery() == null
diff --git a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbRelativeToWeekdayInMonth.java b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbRelativeToWeekdayInMonth.java
index 0051644b..e45f3b5b 100644
--- a/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbRelativeToWeekdayInMonth.java
+++ b/jollyday-jaxb/src/main/java/de/focus_shift/jollyday/jaxb/JaxbRelativeToWeekdayInMonth.java
@@ -4,47 +4,78 @@ import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.FixedWeekdayInMonth;
 import de.focus_shift.jollyday.core.spi.Relation;
 import de.focus_shift.jollyday.core.spi.RelativeToWeekdayInMonth;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 
 import java.time.DayOfWeek;
 import java.time.Year;
 
-
-public class JaxbRelativeToWeekdayInMonth implements RelativeToWeekdayInMonth {
+/**
+ * see {@link RelativeToWeekdayInMonth}
+ */
+class JaxbRelativeToWeekdayInMonth implements RelativeToWeekdayInMonth {
 
   private final de.focus_shift.jollyday.jaxb.mapping.RelativeToWeekdayInMonth relativeToWeekdayInMonth;
 
-  public JaxbRelativeToWeekdayInMonth(de.focus_shift.jollyday.jaxb.mapping.RelativeToWeekdayInMonth relativeToWeekdayInMonth) {
+  JaxbRelativeToWeekdayInMonth(de.focus_shift.jollyday.jaxb.mapping.RelativeToWeekdayInMonth relativeToWeekdayInMonth) {
     this.relativeToWeekdayInMonth = relativeToWeekdayInMonth;
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public FixedWeekdayInMonth weekdayInMonth() {
     return new JaxbFixedWeekdayInMonth(relativeToWeekdayInMonth.getFixedWeekday());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public DayOfWeek weekday() {
     return DayOfWeek.valueOf(relativeToWeekdayInMonth.getWeekday().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Relation when() {
     return Relation.valueOf(relativeToWeekdayInMonth.getWhen().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public String descriptionPropertiesKey() {
     return relativeToWeekdayInMonth.getDescriptionPropertiesKey();
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
-  public HolidayType officiality() {
+  public HolidayType holidayType() {
     return relativeToWeekdayInMonth.getLocalizedType() == null
       ? HolidayType.PUBLIC_HOLIDAY
       : HolidayType.valueOf(relativeToWeekdayInMonth.getLocalizedType().name());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validFrom() {
     return relativeToWeekdayInMonth.getValidFrom() == null
@@ -52,6 +83,11 @@ public class JaxbRelativeToWeekdayInMonth implements RelativeToWeekdayInMonth {
       : Year.of(relativeToWeekdayInMonth.getValidFrom());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public Year validTo() {
     return relativeToWeekdayInMonth.getValidTo() == null
@@ -59,6 +95,11 @@ public class JaxbRelativeToWeekdayInMonth implements RelativeToWeekdayInMonth {
       : Year.of(relativeToWeekdayInMonth.getValidTo());
   }
 
+  /**
+   * {@inheritDoc}
+   *
+   * @return {@inheritDoc}
+   */
   @Override
   public YearCycle cycle() {
     return relativeToWeekdayInMonth.getEvery() == null


Test patch:
diff --git a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/functions/CreateHolidayTest.java b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/functions/CreateHolidayTest.java
index 0894d7e0..4e260d98 100644
--- a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/functions/CreateHolidayTest.java
+++ b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/functions/CreateHolidayTest.java
@@ -22,7 +22,7 @@ class CreateHolidayTest {
       }
 
       @Override
-      public HolidayType officiality() {
+      public HolidayType holidayType() {
         return HolidayType.PUBLIC_HOLIDAY;
       }
     };
diff --git a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/functions/FindWeekDayInMonthTest.java b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/functions/FindWeekDayInMonthTest.java
index 53655f97..cb76e1f9 100644
--- a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/functions/FindWeekDayInMonthTest.java
+++ b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/functions/FindWeekDayInMonthTest.java
@@ -2,8 +2,7 @@ package de.focus_shift.jollyday.core.parser.functions;
 
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.FixedWeekdayInMonth;
-import de.focus_shift.jollyday.core.spi.Occurrance;
-import de.focus_shift.jollyday.core.spi.YearCycle;
+import de.focus_shift.jollyday.core.spi.Occurrence;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.CsvSource;
 
@@ -25,7 +24,7 @@ class FindWeekDayInMonthTest {
     "FOURTH,2024-03-25",
     "LAST,2024-03-25",
   })
-  void ensureToFindFixedWeekdayInMonth(final Occurrance occurrance, final LocalDate expectedLocalDate) {
+  void ensureToFindFixedWeekdayInMonth(final Occurrence occurrance, final LocalDate expectedLocalDate) {
 
     final FixedWeekdayInMonth fixedWeekdayInMonth = new FixedWeekdayInMonth() {
       @Override
@@ -54,7 +53,7 @@ class FindWeekDayInMonthTest {
       }
 
       @Override
-      public Occurrance which() {
+      public Occurrence which() {
         return occurrance;
       }
 
@@ -64,7 +63,7 @@ class FindWeekDayInMonthTest {
       }
 
       @Override
-      public HolidayType officiality() {
+      public HolidayType holidayType() {
         return null;
       }
     };
diff --git a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/functions/FixedToLocalDateTest.java b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/functions/FixedToLocalDateTest.java
index 205dbee6..eebabbb5 100644
--- a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/functions/FixedToLocalDateTest.java
+++ b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/functions/FixedToLocalDateTest.java
@@ -2,8 +2,6 @@ package de.focus_shift.jollyday.core.parser.functions;
 
 import de.focus_shift.jollyday.core.HolidayType;
 import de.focus_shift.jollyday.core.spi.Fixed;
-import de.focus_shift.jollyday.core.spi.MovingCondition;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 import org.junit.jupiter.api.Test;
 
 import java.time.LocalDate;
@@ -51,7 +49,7 @@ class FixedToLocalDateTest {
       }
 
       @Override
-      public HolidayType officiality() {
+      public HolidayType holidayType() {
         return null;
       }
     };
diff --git a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/functions/MoveDateRelativeTest.java b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/functions/MoveDateRelativeTest.java
index 57589c6d..ab3d23e4 100644
--- a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/functions/MoveDateRelativeTest.java
+++ b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/functions/MoveDateRelativeTest.java
@@ -1,8 +1,6 @@
 package de.focus_shift.jollyday.core.parser.functions;
 
 import de.focus_shift.jollyday.core.spi.Movable;
-import de.focus_shift.jollyday.core.spi.MovingCondition;
-import de.focus_shift.jollyday.core.spi.With;
 import org.junit.jupiter.api.Test;
 
 import java.time.DayOfWeek;
@@ -18,7 +16,7 @@ class MoveDateRelativeTest {
   @Test
   void ensureToConvertMovableToNextLocalDate() {
 
-    final MovingCondition movingCondition = new MovingCondition() {
+    final Movable.MovingCondition movingCondition = new Movable.MovingCondition() {
       @Override
       public DayOfWeek substitute() {
         return DayOfWeek.WEDNESDAY;
@@ -47,7 +45,7 @@ class MoveDateRelativeTest {
   @Test
   void ensureToConvertMovableToPreviousLocalDate() {
 
-    final MovingCondition movingCondition = new MovingCondition() {
+    final Movable.MovingCondition movingCondition = new Movable.MovingCondition() {
       @Override
       public DayOfWeek substitute() {
         return DayOfWeek.WEDNESDAY;
@@ -76,7 +74,7 @@ class MoveDateRelativeTest {
   @Test
   void ensureToReturnProvidedLocalDateIfMovingConditionIsFalse() {
 
-    final MovingCondition movingCondition = new MovingCondition() {
+    final Movable.MovingCondition movingCondition = new Movable.MovingCondition() {
       @Override
       public DayOfWeek substitute() {
         return null;
diff --git a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/impl/IslamicHolidayParserTest.java b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/impl/IslamicHolidayParserTest.java
index 9602474b..6508d6c5 100644
--- a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/impl/IslamicHolidayParserTest.java
+++ b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/impl/IslamicHolidayParserTest.java
@@ -3,9 +3,7 @@ package de.focus_shift.jollyday.core.parser.impl;
 import de.focus_shift.jollyday.core.Holiday;
 import de.focus_shift.jollyday.core.spi.Holidays;
 import de.focus_shift.jollyday.core.spi.IslamicHoliday;
-import de.focus_shift.jollyday.core.spi.IslamicHolidayType;
-import de.focus_shift.jollyday.core.spi.MovingCondition;
-import de.focus_shift.jollyday.core.spi.With;
+import de.focus_shift.jollyday.core.spi.Movable;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.Mock;
@@ -15,7 +13,7 @@ import java.time.DayOfWeek;
 import java.time.Year;
 import java.util.List;
 
-import static de.focus_shift.jollyday.core.spi.YearCycle.EVERY_YEAR;
+import static de.focus_shift.jollyday.core.spi.Limited.YearCycle.EVERY_YEAR;
 import static org.assertj.core.api.Assertions.assertThat;
 import static org.mockito.Mockito.when;
 
@@ -30,7 +28,7 @@ class IslamicHolidayParserTest {
   @Test
   void ensureThatIslamicHolidaysAreMovable() {
 
-    final MovingCondition movingCondition = new MovingCondition() {
+    final Movable.MovingCondition movingCondition = new Movable.MovingCondition() {
       @Override
       public DayOfWeek substitute() {
         return DayOfWeek.SUNDAY;
@@ -49,7 +47,7 @@ class IslamicHolidayParserTest {
 
     final IslamicHolidayParser sut = new IslamicHolidayParser();
     when(holidays.islamicHolidays()).thenReturn(List.of(islamicHoliday));
-    when(islamicHoliday.type()).thenReturn(IslamicHolidayType.ID_UL_ADHA_2);
+    when(islamicHoliday.type()).thenReturn(IslamicHoliday.IslamicHolidayType.ID_UL_ADHA_2);
     when(islamicHoliday.conditions()).thenReturn(List.of(movingCondition));
     when(islamicHoliday.cycle()).thenReturn(EVERY_YEAR);
 
diff --git a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/predicates/ValidCycleTest.java b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/predicates/ValidCycleTest.java
index b3b3fc4f..c901771f 100644
--- a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/predicates/ValidCycleTest.java
+++ b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/predicates/ValidCycleTest.java
@@ -2,7 +2,6 @@ package de.focus_shift.jollyday.core.parser.predicates;
 
 
 import de.focus_shift.jollyday.core.spi.Limited;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 import net.jqwik.api.Arbitraries;
 import net.jqwik.api.Arbitrary;
 import net.jqwik.api.ForAll;
@@ -98,7 +97,7 @@ class ValidCycleTest {
   }
 
   @Property
-  void ensureLimitedWithCycleYearsWithValidFrom(@ForAll @YearRange(min = 1901) Year year, @ForAll("onlyYearBased") YearCycle cycle) {
+  void ensureLimitedWithCycleYearsWithValidFrom(@ForAll @YearRange(min = 1901) Year year, @ForAll("onlyYearBased") Limited.YearCycle cycle) {
 
     final int modulo = getModulo(cycle);
 
@@ -124,7 +123,7 @@ class ValidCycleTest {
   }
 
   @Property
-  void ensureLimitedForTwoYearReturnsTrueWithValidTo(@ForAll @YearRange(max = 2013) Year year, @ForAll("onlyYearBased") YearCycle cycle) {
+  void ensureLimitedForTwoYearReturnsTrueWithValidTo(@ForAll @YearRange(max = 2013) Year year, @ForAll("onlyYearBased") Limited.YearCycle cycle) {
 
     final int modulo = getModulo(cycle);
 
@@ -150,11 +149,11 @@ class ValidCycleTest {
   }
 
   @Provide
-  Arbitrary<YearCycle> onlyYearBased() {
-    return Arbitraries.of(YearCycle.TWO_YEARS, YearCycle.THREE_YEARS, YearCycle.FOUR_YEARS, YearCycle.FIVE_YEARS, YearCycle.SIX_YEARS);
+  Arbitrary<Limited.YearCycle> onlyYearBased() {
+    return Arbitraries.of(Limited.YearCycle.TWO_YEARS, Limited.YearCycle.THREE_YEARS, Limited.YearCycle.FOUR_YEARS, Limited.YearCycle.FIVE_YEARS, Limited.YearCycle.SIX_YEARS);
   }
 
-  private static int getModulo(YearCycle cycle) {
+  private static int getModulo(Limited.YearCycle cycle) {
     int modulo = 0;
     switch (cycle) {
       case TWO_YEARS:
diff --git a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/predicates/ValidFromToTest.java b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/predicates/ValidFromToTest.java
index eaf92590..9684c71d 100644
--- a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/predicates/ValidFromToTest.java
+++ b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/predicates/ValidFromToTest.java
@@ -1,7 +1,6 @@
 package de.focus_shift.jollyday.core.parser.predicates;
 
 import de.focus_shift.jollyday.core.spi.Limited;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 import net.jqwik.api.ForAll;
 import net.jqwik.api.Property;
 import net.jqwik.time.api.constraints.YearRange;
diff --git a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/predicates/ValidLimitationTest.java b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/predicates/ValidLimitationTest.java
index 6a659667..e247f857 100644
--- a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/predicates/ValidLimitationTest.java
+++ b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/predicates/ValidLimitationTest.java
@@ -1,7 +1,6 @@
 package de.focus_shift.jollyday.core.parser.predicates;
 
 import de.focus_shift.jollyday.core.spi.Limited;
-import de.focus_shift.jollyday.core.spi.YearCycle;
 import org.junit.jupiter.api.Test;
 
 import java.time.Year;
diff --git a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/predicates/ValidMovingConditionTest.java b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/predicates/ValidMovingConditionTest.java
index 8004b341..b689c1d4 100644
--- a/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/predicates/ValidMovingConditionTest.java
+++ b/jollyday-core/src/test/java/de/focus_shift/jollyday/core/parser/predicates/ValidMovingConditionTest.java
@@ -1,7 +1,6 @@
 package de.focus_shift.jollyday.core.parser.predicates;
 
-import de.focus_shift.jollyday.core.spi.MovingCondition;
-import de.focus_shift.jollyday.core.spi.With;
+import de.focus_shift.jollyday.core.spi.Movable;
 import org.junit.jupiter.api.Test;
 
 import java.time.DayOfWeek;
@@ -14,7 +13,7 @@ class ValidMovingConditionTest {
   @Test
   void ensureValidMovingConditionOnlyOnSameSubstitution() {
 
-    final MovingCondition movingCondition = new MovingCondition() {
+    final Movable.MovingCondition movingCondition = new Movable.MovingCondition() {
       @Override
       public DayOfWeek substitute() {
         return DayOfWeek.MONDAY;
@@ -38,7 +37,7 @@ class ValidMovingConditionTest {
   @Test
   void ensureNotValidMovingConditionOnDifferentSubstitution() {
 
-    final MovingCondition movingCondition = new MovingCondition() {
+    final Movable.MovingCondition movingCondition = new Movable.MovingCondition() {
       @Override
       public DayOfWeek substitute() {
         return DayOfWeek.TUESDAY;
diff --git a/jollyday-tests/src/test/java/de/focus_shift/jollyday/tests/CalendarCheckerApi.java b/jollyday-tests/src/test/java/de/focus_shift/jollyday/tests/CalendarCheckerApi.java
index ab90d254..9086800e 100644
--- a/jollyday-tests/src/test/java/de/focus_shift/jollyday/tests/CalendarCheckerApi.java
+++ b/jollyday-tests/src/test/java/de/focus_shift/jollyday/tests/CalendarCheckerApi.java
@@ -15,7 +15,7 @@ public interface CalendarCheckerApi {
    * <p>
    * Calling multiple methods on the returned {@link CalendarChecker} is safe as it only interacts with the {@link CalendarCheckerApi}
    * <p>
-   * Examples:
+   * Example:
    * <pre><code class='java'> // you can chain multiple holiday checks
    * assertFor(GERMANY)
    *   .hasFixedHoliday("NEW_YEAR", JANUARY, 1).and()