diff --git a/CS_CodeGen.jrag b/CS_CodeGen.jrag
index dcfeddcf8e678064c2853491f54dbfe15dc28284..aef757ec79eb4a4389acfc3254eb24054f611bca 100644
--- a/CS_CodeGen.jrag
+++ b/CS_CodeGen.jrag
@@ -23,6 +23,10 @@ aspect CS_CodeGenEnv {
 
       public CS_printer(File f) {
   	file = f;
+        File parentFile = f.getParentFile();
+        if(parentFile != null) {
+            parentFile.mkdirs();
+        }
       }
 
      public CS_printer(PrintStream out) {
@@ -140,6 +144,16 @@ aspect CS_CodeGenEnv {
       println("}");
     }
 
+    public void print_block_begin() {
+      println("{");
+      indent();
+    }
+
+    public void print_block_end() {
+      unindent();
+      println("}");
+    }
+
     public String getUnique(Object o) {
       String result = (String)unique.get(o);
       if (result == null) {
@@ -419,8 +433,7 @@ aspect CS_Class {
     for (int i = 0 ; i < getNumExp() ; i++) {
       String limit = getExp(i).CS_emitEncoder(env, 
 					      name + ".GetLength(" + i + ")");
-      env.println("{");
-      env.indent();
+      env.print_block_begin();
       env.println("int i_" + (baseDepth + i) + "_max = " + limit + ";");
     }
     String index = null;
@@ -435,9 +448,8 @@ aspect CS_Class {
     getType().CS_emitEncoder(env, name + "[" + index + "]");
     for (int i = 0 ; i < getNumExp() ; i++) {
       env.print_for_end();
+      env.print_block_end();
     }
-    env.unindent();
-    env.println("}");
   }
   
   public String Exp.CS_emitEncoder(CS_env env, String name) {
diff --git a/Java_CodeGen.jrag b/Java_CodeGen.jrag
index b614e03531705df1e0fd85adef07757f82586ca1..40c0e1b26c42550424a5dfdf07b715b5a04b5e53 100644
--- a/Java_CodeGen.jrag
+++ b/Java_CodeGen.jrag
@@ -23,6 +23,10 @@ aspect Java_CodeGenEnv {
 
       public Java_printer(File f) {
   	file = f;
+        File parentFile = f.getParentFile();
+        if(parentFile != null) {
+            parentFile.mkdirs();
+        }
       }
 
      public Java_printer(PrintStream out) {
@@ -140,6 +144,16 @@ aspect Java_CodeGenEnv {
       println("}");
     }
 
+    public void print_block_begin() {
+      println("{");
+      indent();
+    }
+
+    public void print_block_end() {
+      unindent();
+      println("}");
+    }
+
     public String getUnique(Object o) {
       String result = (String)unique.get(o);
       if (result == null) {
@@ -445,8 +459,7 @@ aspect Java_Class {
     String prefix = "";
     for (int i = 0 ; i < getNumExp() ; i++) {
       String limit = getExp(i).Java_emitEncoder(env, name + prefix);
-      env.println("{");
-      env.indent();
+      env.print_block_begin();
       env.println("int i_" + (baseDepth + i) + "_max = " + limit + ";");
       prefix = prefix + "[0]";
     }
@@ -457,9 +470,8 @@ aspect Java_Class {
     getType().Java_emitEncoder(env, name);
     for (int i = 0 ; i < getNumExp() ; i++) {
       env.print_for_end();
+      env.print_block_end();
     }
-    env.unindent();
-    env.println("}");
   }
   
   public String Exp.Java_emitEncoder(Java_env env, String name) {