diff --git a/catalog/src/main/java/org/killbill/billing/catalog/DefaultDuration.java b/catalog/src/main/java/org/killbill/billing/catalog/DefaultDuration.java
index b7e5fd4..5f76433 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/DefaultDuration.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/DefaultDuration.java
@@ -150,9 +150,8 @@ public class DefaultDuration extends ValidatingConfig<StandaloneCatalog> impleme
case YEARS:
return new Period().withYears(number);
case UNLIMITED:
- return new Period().withYears(100);
default:
- return new Period();
+ throw new IllegalStateException("Unexpected duration unit " + unit);
}
}
diff --git a/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlan.java b/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlan.java
index 5f2e9ea..0d1757f 100644
--- a/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlan.java
+++ b/catalog/src/main/java/org/killbill/billing/catalog/DefaultPlan.java
@@ -45,6 +45,7 @@ import org.killbill.billing.catalog.api.PlanPhasePriceOverride;
import org.killbill.billing.catalog.api.PriceList;
import org.killbill.billing.catalog.api.Product;
import org.killbill.billing.catalog.api.Recurring;
+import org.killbill.billing.catalog.api.TimeUnit;
import org.killbill.xmlloader.ValidatingConfig;
import org.killbill.xmlloader.ValidationError;
import org.killbill.xmlloader.ValidationErrors;
@@ -272,7 +273,8 @@ public class DefaultPlan extends ValidatingConfig<StandaloneCatalog> implements
}
}
final Recurring recurring = phase.getRecurring();
- if (recurring == null || recurring.getRecurringPrice() == null || recurring.getRecurringPrice().isZero()) {
+ if (phase.getDuration().getUnit() != TimeUnit.UNLIMITED &&
+ (recurring == null || recurring.getRecurringPrice() == null || recurring.getRecurringPrice().isZero())) {
try {
result = phase.getDuration().addToDateTime(result);
} catch (final CatalogApiException ignored) {