diff --git a/querydsl-scala/.cache b/querydsl-scala/.cache
new file mode 100644
index 000000000..df3c359d0
Binary files /dev/null and b/querydsl-scala/.cache differ
diff --git a/querydsl-scala/pom.xml b/querydsl-scala/pom.xml
index 23a1da8bc..071d822d2 100644
--- a/querydsl-scala/pom.xml
+++ b/querydsl-scala/pom.xml
@@ -15,7 +15,7 @@
jar
- 2.8.1
+ 2.9.1
3.5.1-Final
4.0.2.GA
diff --git a/querydsl-scala/src/main/scala/com/mysema/query/scala/Helpers.scala b/querydsl-scala/src/main/scala/com/mysema/query/scala/Helpers.scala
new file mode 100644
index 000000000..25b5e0cd4
--- /dev/null
+++ b/querydsl-scala/src/main/scala/com/mysema/query/scala/Helpers.scala
@@ -0,0 +1,51 @@
+package com.mysema.query.scala
+
+import scala.collection.JavaConversions._
+import com.mysema.query._
+import com.mysema.query.types._
+
+object Helpers {
+
+ implicit def toRichSimpleProjectable[T](p: SimpleProjectable[T]) = new RichSimpleProjectable(p)
+
+ implicit def toRichProjectable(p: Projectable) = new RichProjectable(p)
+
+}
+
+class RichSimpleProjectable[T](private val p: SimpleProjectable[T]) {
+
+ def select: List[T] = p.list.toList
+
+ def single: Option[T] = Option(p.singleResult())
+
+ def unique: Option[T] = Option(p.uniqueResult())
+
+}
+
+class RichProjectable(private val p: Projectable) {
+
+ def select[T](expr: Expression[T]): List[T] = p.list(expr).toList
+
+ def select[T,U](expr1: Expression[T], expr2: Expression[U]): List[(T,U)] = {
+ p.list(expr1, expr2).toList map(r => (r(0).asInstanceOf[T], r(1).asInstanceOf[U]))
+ }
+
+ def select[T,U,V](expr1: Expression[T], expr2: Expression[U], expr3: Expression[V]): List[(T,U,V)] = {
+ p.list(expr1, expr2, expr3).toList map(r => (r(0).asInstanceOf[T], r(1).asInstanceOf[U], r(2).asInstanceOf[V]))
+ }
+
+ def select[T,U,V,W](expr1: Expression[T], expr2: Expression[U], expr3: Expression[V], expr4: Expression[W]): List[(T,U,V,W)] = {
+ p.list(expr1, expr2, expr3, expr4)
+ .map(r => (r(0).asInstanceOf[T], r(1).asInstanceOf[U], r(2).asInstanceOf[V], r(3).asInstanceOf[W])).toList
+ }
+
+ // TODO : generalize this
+ def selectGrouped[K,T,V](expr1: Expression[K], expr2: Expression[T], expr3: Expression[V]): List[(T,List[V])] = {
+ select(expr1, expr2, expr3).groupBy(_._1).map(_._2).map(r => (r(0)._2, r.map(_._3))).toList
+ }
+
+ def single[T](expr: Expression[T]): Option[T] = Option(p.singleResult(expr))
+
+ def unique[T](expr: Expression[T]): Option[T] = Option(p.uniqueResult(expr))
+
+}
diff --git a/querydsl-scala/src/main/scala/com/mysema/query/scala/Queries.scala b/querydsl-scala/src/main/scala/com/mysema/query/scala/Queries.scala
deleted file mode 100644
index c6dfb8ca5..000000000
--- a/querydsl-scala/src/main/scala/com/mysema/query/scala/Queries.scala
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.mysema.query.scala;
-
-import com.mysema.query._;
-import com.mysema.query.types._;
-
-object Queries {
-
- implicit def toScalaProjectable(qry: Projectable) = new ScalaProjectable(qry)
-
- implicit def toScalaProjectable[T](qry: SimpleProjectable[T]) = new SimpleScalaProjectable[T](qry);
-
-}
-
-class ScalaProjectable(val qry: Projectable) {
-
- def unique[T](e: Expression[T]) = Option(qry.uniqueResult(e))
-
- def single[T](e: Expression[T]) = Option(qry.singleResult(e))
-
-}
-
-class SimpleScalaProjectable[T](val qry: SimpleProjectable[T]) {
-
- def unique = Option(qry.uniqueResult())
-
- def single = Option(qry.singleResult())
-
-}
\ No newline at end of file
diff --git a/querydsl-scala/src/test/scala/com/mysema/query/scala/QueriesTest.scala b/querydsl-scala/src/test/scala/com/mysema/query/scala/HelpersTest.scala
similarity index 95%
rename from querydsl-scala/src/test/scala/com/mysema/query/scala/QueriesTest.scala
rename to querydsl-scala/src/test/scala/com/mysema/query/scala/HelpersTest.scala
index 502eb6657..53a06422d 100644
--- a/querydsl-scala/src/test/scala/com/mysema/query/scala/QueriesTest.scala
+++ b/querydsl-scala/src/test/scala/com/mysema/query/scala/HelpersTest.scala
@@ -2,7 +2,7 @@ package com.mysema.query.scala;
//import com.mysema.query._
import com.mysema.query.types._
-import com.mysema.query.scala.Queries._
+import com.mysema.query.scala.Helpers._
import com.mysema.query.scala.Conversions._
import com.mysema.query.jpa.impl.JPAQuery