diff --git a/src/main/antlr/com/google/gwtorm/schema/Query.g b/src/main/antlr/com/google/gwtorm/schema/Query.g
index ce13198..b5e7a49 100644
--- a/src/main/antlr/com/google/gwtorm/schema/Query.g
+++ b/src/main/antlr/com/google/gwtorm/schema/Query.g
@@ -32,8 +32,6 @@
   ID;
   PLACEHOLDER;
   COMMA;
-  ASC;
-  DESC;
   LIMIT;
   CONSTANT_INTEGER;
   CONSTANT_STRING;
@@ -150,17 +148,7 @@
   ;
 
 orderBy
-  : ORDER^ BY! fieldSort (COMMA! fieldSort)*
-  ;
-
-fieldSort
-  : field sortDirection^
-  | field -> ^(ASC field)
-  ;
-
-sortDirection
-  : ASC
-  | DESC
+  : ORDER^ BY! field (COMMA! field)*
   ;
 
 limit
@@ -214,8 +202,6 @@
 ORDER: 'ORDER' ;
 BY:    'BY'    ;
 AND:   'AND'   ;
-ASC:   'ASC'   ;
-DESC:  'DESC'  ;
 LIMIT: 'LIMIT' ;
 TRUE:  'true'  ;
 FALSE: 'false' ;
diff --git a/src/main/java/com/google/gwtorm/client/Query.java b/src/main/java/com/google/gwtorm/client/Query.java
index 6e7bc9a..d22324f 100644
--- a/src/main/java/com/google/gwtorm/client/Query.java
+++ b/src/main/java/com/google/gwtorm/client/Query.java
@@ -35,7 +35,7 @@
  *
  * <pre>
  * [WHERE &lt;condition&gt; [AND &lt;condition&gt; ...]]
- * [ORDER BY &lt;property&gt; [ASC | DESC] [, &lt;property&gt; [ASC | DESC] ...]]
+ * [ORDER BY &lt;property&gt; [, &lt;property&gt; ...]]
  * [LIMIT { &lt;count&gt; | ? }]
  *
  * &lt;condition&gt; := &lt;property&gt; { &lt; | &lt;= | &gt; | &gt;= | = | != } &lt;value&gt;
diff --git a/src/main/java/com/google/gwtorm/schema/QueryModel.java b/src/main/java/com/google/gwtorm/schema/QueryModel.java
index c24bc2b..d737f16 100644
--- a/src/main/java/com/google/gwtorm/schema/QueryModel.java
+++ b/src/main/java/com/google/gwtorm/schema/QueryModel.java
@@ -220,8 +220,7 @@
       case QueryParser.ORDER:
         fmt.buf.append(" ORDER BY ");
         for (int i = 0; i < node.getChildCount(); i++) {
-          final Tree sortOrder = node.getChild(i);
-          final Tree id = sortOrder.getChild(0);
+          final Tree id = node.getChild(i);
           if (i > 0) {
             fmt.buf.append(',');
           }
@@ -232,9 +231,6 @@
               fmt.buf.append(fmt.tableAlias);
               fmt.buf.append('.');
               fmt.buf.append(cItr.next().getColumnName());
-              if (sortOrder.getType() == QueryParser.DESC) {
-                fmt.buf.append(" DESC");
-              }
               if (cItr.hasNext()) {
                 fmt.buf.append(',');
               }
@@ -243,9 +239,6 @@
             fmt.buf.append(fmt.tableAlias);
             fmt.buf.append('.');
             fmt.buf.append(col.getColumnName());
-            if (sortOrder.getType() == QueryParser.DESC) {
-              fmt.buf.append(" DESC");
-            }
           }
         }
         break;
diff --git a/src/test/java/com/google/gwtorm/data/PersonAccess.java b/src/test/java/com/google/gwtorm/data/PersonAccess.java
index 7df107e..594d588 100644
--- a/src/test/java/com/google/gwtorm/data/PersonAccess.java
+++ b/src/test/java/com/google/gwtorm/data/PersonAccess.java
@@ -30,10 +30,6 @@
   @Query("WHERE age > ? ORDER BY age")
   ResultSet<TestPerson> olderThan(int age) throws OrmException;
 
-  @Query("WHERE name != ? AND age > ? ORDER BY name DESC")
-  ResultSet<TestPerson> notPerson(TestPerson.Key key, int age)
-      throws OrmException;
-
   @Query("WHERE name = 'bob' LIMIT ?")
   ResultSet<TestPerson> firstNBob(int n) throws OrmException;
 
diff --git a/src/test/java/com/google/gwtorm/schema/QueryParserTest.java b/src/test/java/com/google/gwtorm/schema/QueryParserTest.java
index c050ede..01e12b6 100644
--- a/src/test/java/com/google/gwtorm/schema/QueryParserTest.java
+++ b/src/test/java/com/google/gwtorm/schema/QueryParserTest.java
@@ -120,33 +120,27 @@
     assertEquals(1, t.getChildCount());
 
     final Tree a = t.getChild(0);
-    assertEquals(QueryParser.ASC, a.getType());
-    assertEquals(1, a.getChildCount());
-    assertEquals(QueryParser.ID, a.getChild(0).getType());
-    assertTrue(a.getChild(0) instanceof QueryParser.Column);
-    assertEquals("a", a.getChild(0).getText());
+    assertEquals(QueryParser.ID, a.getType());
+    assertTrue(a instanceof QueryParser.Column);
+    assertEquals("a", a.getText());
   }
 
   public void testOrderByAB() throws QueryParseException {
-    final Tree t = parse("ORDER BY a DESC, b ASC");
+    final Tree t = parse("ORDER BY a, b");
     assertNotNull(t);
     assertEquals(QueryParser.ORDER, t.getType());
     assertEquals(2, t.getChildCount());
     {
       final Tree a = t.getChild(0);
-      assertEquals(QueryParser.DESC, a.getType());
-      assertEquals(1, a.getChildCount());
-      assertEquals(QueryParser.ID, a.getChild(0).getType());
-      assertTrue(a.getChild(0) instanceof QueryParser.Column);
-      assertEquals("a", a.getChild(0).getText());
+      assertEquals(QueryParser.ID, a.getType());
+      assertTrue(a instanceof QueryParser.Column);
+      assertEquals("a", a.getText());
     }
     {
       final Tree b = t.getChild(1);
-      assertEquals(QueryParser.ASC, b.getType());
-      assertEquals(1, b.getChildCount());
-      assertEquals(QueryParser.ID, b.getChild(0).getType());
-      assertTrue(b.getChild(0) instanceof QueryParser.Column);
-      assertEquals("b", b.getChild(0).getText());
+      assertEquals(QueryParser.ID, b.getType());
+      assertTrue(b instanceof QueryParser.Column);
+      assertEquals("b", b.getText());
     }
   }
 
@@ -166,10 +160,7 @@
       assertEquals(QueryParser.ORDER, o.getType());
       assertEquals(1, o.getChildCount());
 
-      final Tree a = o.getChild(0);
-      assertEquals(QueryParser.ASC, a.getType());
-      assertEquals(1, a.getChildCount());
-      final Tree aId = a.getChild(0);
+      final Tree aId = o.getChild(0);
       assertEquals(QueryParser.ID, aId.getType());
       assertTrue(aId instanceof QueryParser.Column);
       assertEquals("a", aId.getText());
diff --git a/src/test/java/com/google/gwtorm/server/PhoneBookDbTestCase.java b/src/test/java/com/google/gwtorm/server/PhoneBookDbTestCase.java
index 2099303..c3f5c08 100644
--- a/src/test/java/com/google/gwtorm/server/PhoneBookDbTestCase.java
+++ b/src/test/java/com/google/gwtorm/server/PhoneBookDbTestCase.java
@@ -279,21 +279,6 @@
     assertEquals(all.get(2).name(), r.get(1).name());
   }
 
-  public void testFetchNotPerson() throws Exception {
-    final PhoneBookDb schema = openAndCreate();
-    final ArrayList<TestPerson> all = new ArrayList<TestPerson>();
-    all.add(new TestPerson(new TestPerson.Key("Bob"), 18));
-    all.add(new TestPerson(new TestPerson.Key("Mary"), 22));
-    all.add(new TestPerson(new TestPerson.Key("Zak"), 33));
-    schema.people().insert(all);
-
-    final List<TestPerson> r =
-        schema.people().notPerson(new TestPerson.Key("Mary"), 10).toList();
-    assertEquals(2, r.size());
-    assertEquals(all.get(2).name(), r.get(0).name());
-    assertEquals(all.get(0).name(), r.get(1).name());
-  }
-
   public void testBooleanType() throws Exception {
     final PhoneBookDb schema = openAndCreate();
     final TestPerson bob = new TestPerson(new TestPerson.Key("Bob"), 18);
