diff --git a/.travis.yml b/.travis.yml
index ab8e29d813e2023312d37e05d343101f2cd029d1..9e39083a0044adf446c6b7ad910074363486391b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -216,9 +216,9 @@ matrix:
         - ENV_CMAKE_OPTIONS="-DOpenCL_LIBRARY=${OPENCL_ROOT}/lib/libOpenCL.so -DOpenCL_INCLUDE_DIR=${OPENCL_ROOT}/include"
 
 before_install:
-    #install maven 3.5.0
-    - export M2_HOME=$HOME/apache-maven-3.5.0
-    - if [ ! -d $M2_HOME/bin ]; then curl https://archive.apache.org/dist/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz | tar zxf - -C $HOME; fi
+    #install maven 3.5.4
+    - export M2_HOME=$HOME/apache-maven-3.5.4
+    - if [ ! -d $M2_HOME/bin ]; then curl https://archive.apache.org/dist/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz | tar zxf - -C $HOME; fi
     - export PATH=$M2_HOME/bin:$PATH
 
     # Install dependencies
diff --git a/pom.xml b/pom.xml
index 7ba0cd6f10e7d7f1e06bcde10ea3106c83b7ebd4..f07238aea4f6ff8aa8a1c09942ebe88d6585fb95 100644
--- a/pom.xml
+++ b/pom.xml
@@ -98,6 +98,11 @@
             <artifactId>bcel</artifactId>
             <version>6.2</version>
         </dependency>
+        <dependency>
+            <groupId>org.scala-lang</groupId>
+            <artifactId>scala-library</artifactId>
+            <version>2.12.6</version>
+        </dependency>
     </dependencies>
 
     <build>
@@ -107,6 +112,22 @@
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
             </plugin>
+            <plugin>
+                <groupId>net.alchim31.maven</groupId>
+                <artifactId>scala-maven-plugin</artifactId>
+                <version>3.4.1</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>compile</goal>
+                            <goal>testCompile</goal>
+                        </goals>
+                    </execution>
+                </executions>
+                <configuration>
+                    <scalaVersion>2.12.6</scalaVersion>
+                </configuration>
+            </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-source-plugin</artifactId>
diff --git a/src/main/java/com/aparapi/internal/instruction/ExpressionList.java b/src/main/java/com/aparapi/internal/instruction/ExpressionList.java
index 4aa24b5028a0ba2b1bb4eac0f8b09f0b2526c1c0..c7d38b13445944ce97d6095f85c216711483c731 100644
--- a/src/main/java/com/aparapi/internal/instruction/ExpressionList.java
+++ b/src/main/java/com/aparapi/internal/instruction/ExpressionList.java
@@ -813,7 +813,8 @@ public class ExpressionList{
                 logger.fine("Scope block from " + startPc + " to  " + (tail.getThisPC() + tail.getLength()));
                 for (Instruction i = head; i != null; i = i.getNextPC()) {
                     if (i.getThisPC() == startPc) {
-                        final Instruction startInstruction = i.getRootExpr().getPrevExpr();
+                        final Instruction j = i.getRootExpr().getPrevExpr();
+                        final Instruction startInstruction =  j == null ? i : j;
                         logger.fine("Start = " + startInstruction);
 
                         addAsComposites(ByteCode.COMPOSITE_ARBITRARY_SCOPE, startInstruction.getPrevExpr(), null);
diff --git a/src/main/java/com/aparapi/internal/instruction/InstructionSet.java b/src/main/java/com/aparapi/internal/instruction/InstructionSet.java
index cc331733f2696dffdd509c804ccd1d31cc63ee92..9fe5a71a74e1bb327066b78bd0d737cb55d48563 100644
--- a/src/main/java/com/aparapi/internal/instruction/InstructionSet.java
+++ b/src/main/java/com/aparapi/internal/instruction/InstructionSet.java
@@ -1276,7 +1276,7 @@ public class InstructionSet{
       @Override public boolean isDeclaration() {
          LocalVariableInfo lvi = method.getLocalVariableTableEntry().getVariable(getThisPC() + getLength(),
                getLocalVariableTableIndex());
-         return (lvi != null) && (lvi.getStart() == getThisPC() + getLength());
+             return (lvi != null) && (lvi.getStart() == getThisPC() + getLength() || lvi.getStart() == getThisPC());
       }
 
       @Override public String getDescription() {
diff --git a/src/test/scala/com/aparapi/SimpleScalaTest.scala b/src/test/scala/com/aparapi/SimpleScalaTest.scala
new file mode 100644
index 0000000000000000000000000000000000000000..945598aca92b077192276f0a1d38765162299ae4
--- /dev/null
+++ b/src/test/scala/com/aparapi/SimpleScalaTest.scala
@@ -0,0 +1,86 @@
+package com.aparapi
+
+import com.aparapi.codegen.Diff
+import com.aparapi.internal.model.ClassModel
+import com.aparapi.internal.writer.KernelWriter
+import org.junit.Test
+
+import scala.util.Random
+
+class SimpleScalaTest {
+  def runKernel(inA: Array[Float], inB: Array[Float]): Array[Float] = {
+    val result = new Array[Float](inA.length)
+    val kernel = new Kernel() {
+      override def run() {
+        val i = getGlobalId()
+        result(i) = ((inA(i) + inB(i)) / (inA(i) / inB(i))) * ((inA(i) - inB(i)) / (inA(
+          i) * inB(i))) -
+          ((inB(i) - inA(i)) * (inB(i) + inA(i))) * ((inB(i) - inA(i)) / (inB(i) * inA(
+            i)))
+      }
+    }
+
+    kernel.execute(inA.length)
+    result
+  }
+
+  def generateCL(inA: Array[Float], inB: Array[Float]): String = {
+    val result = new Array[Float](inA.length)
+    val kernel = new Kernel() {
+      override def run() {
+        val i = getGlobalId()
+        result(i) = ((inA(i) + inB(i)) / (inA(i) / inB(i))) * ((inA(i) - inB(i)) / (inA(
+          i) * inB(i))) -
+          ((inB(i) - inA(i)) * (inB(i) + inA(i))) * ((inB(i) - inA(i)) / (inB(i) * inA(
+            i)))
+      }
+    }
+
+    val classModel = ClassModel.createClassModel(kernel.getClass)
+
+    val entryPoint = classModel.getEntrypoint("run", kernel)
+    KernelWriter.writeToString(entryPoint)
+  }
+
+  @Test def testKernel(): Unit = {
+    val a = Array.fill(50000)(Random.nextFloat())
+    val b = Array.fill(50000)(Random.nextFloat())
+    assert(runKernel(a, b).length == 50000)
+  }
+
+  @Test def testCL(): Unit = {
+    val a = Array.fill(50000)(Random.nextFloat())
+    val b = Array.fill(50000)(Random.nextFloat())
+    val expected =
+      """typedef struct This_s{
+                       |   __global float *result$2;
+                       |   __global float *inA$2;
+                       |   __global float *inB$2;
+                       |   int passid;
+                       |}This;
+                       |int get_pass_id(This *this){
+                       |   return this->passid;
+                       |}
+                       |__kernel void run(
+                       |   __global float *result$2,
+                       |   __global float *inA$2,
+                       |   __global float *inB$2,
+                       |   int passid
+                       |){
+                       |   This thisStruct;
+                       |   This* this=&thisStruct;
+                       |   this->result$2 = result$2;
+                       |   this->inA$2 = inA$2;
+                       |   this->inB$2 = inB$2;
+                       |   this->passid = passid;
+                       |   {
+                       |      {
+                       |         int i = get_global_id(0);
+                       |         this->result$2[i]  = (((this->inA$2[i] + this->inB$2[i]) / (this->inA$2[i] / this->inB$2[i])) * ((this->inA$2[i] - this->inB$2[i]) / (this->inA$2[i] * this->inB$2[i]))) - (((this->inB$2[i] - this->inA$2[i]) * (this->inB$2[i] + this->inA$2[i])) * ((this->inB$2[i] - this->inA$2[i]) / (this->inB$2[i] * this->inA$2[i])));
+                       |      }
+                       |      return;
+                       |   }
+                       |}""".stripMargin
+    assert(Diff.same(expected, generateCL(a, b)))
+  }
+}