diff --git a/src/main/java/net/hydromatic/linq4j/expressions/DeclarationExpression.java b/src/main/java/net/hydromatic/linq4j/expressions/DeclarationExpression.java
index 6689538..fd24012 100644
--- a/src/main/java/net/hydromatic/linq4j/expressions/DeclarationExpression.java
+++ b/src/main/java/net/hydromatic/linq4j/expressions/DeclarationExpression.java
@@ -17,8 +17,6 @@
 */
 package net.hydromatic.linq4j.expressions;
 
-import java.lang.reflect.Type;
-
 /**
  * Expression that declares and optionally initializes a variable.
  *
@@ -37,6 +35,18 @@
         this.parameter = parameter;
         this.initializer = initializer;
     }
+
+    @Override
+    void accept(ExpressionWriter writer, int lprec, int rprec) {
+        writer.append(parameter.type)
+            .append(' ')
+            .append(parameter.name);
+        if (initializer != null) {
+            writer.append(" = ")
+                .append(initializer);
+        }
+        writer.append(';');
+    }
 }
 
 // End DeclarationExpression.java
diff --git a/src/main/java/net/hydromatic/linq4j/expressions/ExpressionWriter.java b/src/main/java/net/hydromatic/linq4j/expressions/ExpressionWriter.java
index 6ff5a05..077e7d6 100644
--- a/src/main/java/net/hydromatic/linq4j/expressions/ExpressionWriter.java
+++ b/src/main/java/net/hydromatic/linq4j/expressions/ExpressionWriter.java
@@ -151,6 +151,8 @@
             }
             if (o instanceof Expression) {
                 ((Expression) o).accept(this, 0, 0);
+            } else if (o instanceof MemberDeclaration) {
+                ((MemberDeclaration) o).accept(this);
             } else {
                 append(o);
             }
diff --git a/src/main/java/net/hydromatic/linq4j/expressions/MemberDeclaration.java b/src/main/java/net/hydromatic/linq4j/expressions/MemberDeclaration.java
index 972b32f..e48a1e7 100644
--- a/src/main/java/net/hydromatic/linq4j/expressions/MemberDeclaration.java
+++ b/src/main/java/net/hydromatic/linq4j/expressions/MemberDeclaration.java
@@ -21,6 +21,7 @@
  * Declaration of a member of a class.
  */
 public abstract class MemberDeclaration {
+    public abstract void accept(ExpressionWriter expressionWriter);
 }
 
 // End MemberDeclaration.java
diff --git a/src/main/java/net/hydromatic/linq4j/expressions/MethodDeclaration.java b/src/main/java/net/hydromatic/linq4j/expressions/MethodDeclaration.java
index 8d85888..5b522bb 100644
--- a/src/main/java/net/hydromatic/linq4j/expressions/MethodDeclaration.java
+++ b/src/main/java/net/hydromatic/linq4j/expressions/MethodDeclaration.java
@@ -43,6 +43,11 @@
         this.parameters = parameters;
         this.body = body;
     }
+
+    @Override
+    public void accept(ExpressionWriter expressionWriter) {
+        throw new RuntimeException("todo:");
+    }
 }
 
 // End MethodDeclaration.java
diff --git a/src/main/java/net/hydromatic/linq4j/expressions/NewExpression.java b/src/main/java/net/hydromatic/linq4j/expressions/NewExpression.java
index f76e1ae..d7b7095 100644
--- a/src/main/java/net/hydromatic/linq4j/expressions/NewExpression.java
+++ b/src/main/java/net/hydromatic/linq4j/expressions/NewExpression.java
@@ -43,6 +43,16 @@
         this.arguments = arguments;
         this.memberDeclarations = memberDeclarations;
     }
+
+    @Override
+    void accept(ExpressionWriter writer, int lprec, int rprec) {
+        writer.append("new ")
+            .append(constructor.getDeclaringClass())
+            .list("(\n", ",\n", ")", arguments);
+        if (memberDeclarations != null) {
+            writer.list("{\n", "\n\n", "}", memberDeclarations);
+        }
+    }
 }
 
 // End NewExpression.java
diff --git a/src/main/java/net/hydromatic/linq4j/expressions/Types.java b/src/main/java/net/hydromatic/linq4j/expressions/Types.java
index 976ab1a..c9beb17 100644
--- a/src/main/java/net/hydromatic/linq4j/expressions/Types.java
+++ b/src/main/java/net/hydromatic/linq4j/expressions/Types.java
@@ -245,7 +245,7 @@
         Type type, Class... argumentTypes)
     {
         final Class clazz = toClass(type);
-        for (Constructor constructor : clazz.getConstructors()) {
+        for (Constructor constructor : clazz.getDeclaredConstructors()) {
             if (allAssignable(
                 constructor.isVarArgs(),
                 constructor.getParameterTypes(),
diff --git a/src/test/java/net/hydromatic/linq4j/test/ExpressionTest.java b/src/test/java/net/hydromatic/linq4j/test/ExpressionTest.java
index e7a1cc0..615bfd9 100644
--- a/src/test/java/net/hydromatic/linq4j/test/ExpressionTest.java
+++ b/src/test/java/net/hydromatic/linq4j/test/ExpressionTest.java
@@ -327,6 +327,7 @@
                                         String.class),
                                     "toUpperCase",
                                     Collections.<Expression>emptyList()))))));
+        if (false)
         assertEquals(
             "xxx",
             Expressions.toString(e));
