diff --git a/src/main/jastadd/Backend.jadd b/src/main/jastadd/Backend.jadd
index 7b3de41ae6826342dc56642c5457235a46409078..e6ae314b933ccf226f56ffb82e1a0ade2faa5b03 100644
--- a/src/main/jastadd/Backend.jadd
+++ b/src/main/jastadd/Backend.jadd
@@ -176,12 +176,13 @@ aspect BackendDirectedAPI {
     generateGetOne(sb);
 
     // Set
-    sb.append(ind(1) + "public void " + toTypeDecl());
+    sb.append(ind(1) + "public " + toTypeDecl() + " " + toTypeDecl());
     sb.append(".set" + nameCapitalized() + "(" + ofTypeDecl() + " o) {\n");
     if (!optional) {
       sb.append(ind(2) + "assertNotNull(o);\n");
     }
     sb.append(ind(2) + "set" + getImplAttributeName() + "(o);\n");
+    sb.append(ind(2) + "return this;\n");
     sb.append(ind(1) + "}\n");
   }
 
@@ -324,7 +325,7 @@ aspect BackendBidirectionalAPI {
     generateGetOne(sb);
 
     // Set
-    sb.append(ind(1) + "public void " + toTypeDecl());
+    sb.append(ind(1) + "public " + toTypeDecl() + " " + toTypeDecl());
     sb.append(".set" + nameCapitalized() + "(" + ofTypeDecl() + " o) {\n");
     if (!isOpt) {
       sb.append(ind(2) + "assertNotNull(o);\n");
@@ -361,6 +362,7 @@ aspect BackendBidirectionalAPI {
       }
     }
 
+    sb.append(ind(2) + "return this;\n");
     sb.append(ind(1) + "}\n");
 
     if (isOpt) {
@@ -559,7 +561,7 @@ aspect BackendBidirectionalAPI {
     generateGetOne(sb);
 
     // Set
-    sb.append(ind(1) + "public void " + toTypeDecl() + ".set" + nameCapitalized()
+    sb.append(ind(1) + "public " + toTypeDecl() + " " + toTypeDecl() + ".set" + nameCapitalized()
       + "(" + ofTypeDecl() + " o) {\n");
     if (!isOpt) {
       sb.append(ind(2) + "assertNotNull(o);\n");
@@ -587,6 +589,7 @@ aspect BackendBidirectionalAPI {
     if (isOpt) {
       sb.append(ind(2) + "}\n");
     }
+    sb.append(ind(2) + "return this;\n");
     sb.append(ind(1) + "}\n");
 
     if (isOpt) {