diff --git a/spec/jastadd/Backend.jadd b/spec/jastadd/Backend.jadd
index d9da1c4ef99e9ff0d081994bcd326aebfc00075d..e0427142ce76675290b38b5560a4497c3e442bd6 100644
--- a/spec/jastadd/Backend.jadd
+++ b/spec/jastadd/Backend.jadd
@@ -138,11 +138,7 @@ aspect BackendDirectedAPI {
 	public void OptionalRelationComponent.generateDirectedAPI(StringBuilder sb) {
 		generateDirectedZeroOneAPI(sb, true);
 		
-		// has
-		sb.append(ind(1) + "public boolean " + toTypeDecl());
-		sb.append(".has" + nameCapitalized() + "() {\n");
-		sb.append(ind(2) + "return " + name() + "() != null;\n");
-		sb.append(ind(1) + "}\n");
+		generateExtraOptAPI(sb);
 	}
 	public void RelationComponent.generateDirectedZeroOneAPI(StringBuilder sb, boolean optional) {
 		// Get
@@ -191,6 +187,20 @@ aspect BackendDirectedAPI {
 		sb.append(ind(2) + "}\n");
 		sb.append(ind(1) + "}\n");
 	}
+
+	public void RelationComponent.generateExtraOptAPI(StringBuilder sb) {
+		// has
+		sb.append(ind(1) + "public boolean " + toTypeDecl());
+		sb.append(".has" + nameCapitalized() + "() {\n");
+		sb.append(ind(2) + "return " + name() + "() != null;\n");
+		sb.append(ind(1) + "}\n");
+
+		// clear
+		sb.append(ind(1) + "public void " + toTypeDecl());
+		sb.append(".clear" + nameCapitalized() + "() {\n");
+		sb.append(ind(2) + "set" + nameCapitalized() + "(null);\n");
+		sb.append(ind(1) + "}\n");
+	}
 }
 
 aspect BackendBidirectionalAPI {
@@ -264,11 +274,7 @@ aspect BackendBidirectionalAPI {
 		sb.append(ind(1) + "}\n");
 
 		if (isOpt) {
-			// has
-			sb.append(ind(1) + "public boolean " + toTypeDecl());
-			sb.append(".has" + nameCapitalized() + "() {\n");
-			sb.append(ind(2) + "return " + name() + "() != null;\n");
-			sb.append(ind(1) + "}\n");
+			generateExtraOptAPI(sb);
 		}
 	}
 
@@ -397,12 +403,8 @@ aspect BackendBidirectionalAPI {
 		}
 		sb.append(ind(1) + "}\n");
 
-		// has
 		if (isOpt) {
-			sb.append(ind(1) + "public boolean " + toTypeDecl());
-			sb.append(".has" + nameCapitalized() + "() {\n");
-			sb.append(ind(2) + "return " + name() + "() != null;\n");
-			sb.append(ind(1) + "}\n");
+			generateExtraOptAPI(sb);
 		}
 	}
 }
diff --git a/test/Test.java b/test/Test.java
index 1d1a1d7233cdbeea11fec5560be5dd7a327fe715..bf24395a361fdc9d59fff5f00c052381f452bede 100644
--- a/test/Test.java
+++ b/test/Test.java
@@ -73,7 +73,7 @@ public class Test {
 		assertSame(a1.di2(), b2);
 		assertSame(a2.di2(), b2);
 
-		a2.setDi2(null);
+		a2.clearDi2();
 
 		assertSame(a1.di2(), b2);
 		assertNull(a2.di2());
@@ -353,7 +353,7 @@ public class Test {
 		assertEquals(b2.bi6(), Arrays.asList());
 		assertEquals(b3.bi6(), Arrays.asList(a1, a3));
 
-		a2.setBi6(null);
+		a2.clearBi6();
 
 		assertSame(a1.bi6(), b3);
 		assertNull(a2.bi6());