diff --git a/src/ray/cg/demos/demo9/Demo9.java b/src/ray/cg/demos/demo9/Demo9.java
index fda4b12..eadfde2 100644
--- a/src/ray/cg/demos/demo9/Demo9.java
+++ b/src/ray/cg/demos/demo9/Demo9.java
@@ -1,32 +1,23 @@
 /*
-DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
-Version 2, December 2004
-
-Copyright (C) 2014 Johan Maasing
-
-Everyone is permitted to copy and distribute verbatim or modified
-copies of this license document, and changing it is allowed as long
-as the name is changed.
-
-DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
-0. You just DO WHAT THE FUCK YOU WANT TO.
-http://en.wikipedia.org/wiki/WTFPL
-*/
+ * DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE Version 2, December 2004
+ * 
+ * Copyright (C) 2014 Johan Maasing
+ * 
+ * Everyone is permitted to copy and distribute verbatim or modified copies of
+ * this license document, and changing it is allowed as long as the name is
+ * changed.
+ * 
+ * DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING,
+ * DISTRIBUTION AND MODIFICATION
+ * 
+ * 0. You just DO WHAT THE FUCK YOU WANT TO. http://en.wikipedia.org/wiki/WTFPL
+ */
 
 package ray.cg.demos.demo9;
 
-import com.jogamp.common.nio.Buffers;
-import com.jogamp.newt.event.WindowAdapter;
-import com.jogamp.newt.event.WindowEvent;
-import com.jogamp.newt.opengl.GLWindow;
-import com.jogamp.opengl.util.Animator;
-import com.jogamp.opengl.util.glsl.ShaderCode;
-import com.jogamp.opengl.util.glsl.ShaderProgram;
-import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.nio.FloatBuffer;
+
 import javax.media.nativewindow.WindowClosingProtocol;
 import javax.media.opengl.DebugGL4;
 import javax.media.opengl.GL;
@@ -38,49 +29,59 @@ import javax.media.opengl.GLException;
 import javax.media.opengl.GLProfile;
 import javax.media.opengl.TraceGL4;
 
+import com.jogamp.common.nio.Buffers;
+import com.jogamp.newt.event.WindowAdapter;
+import com.jogamp.newt.event.WindowEvent;
+import com.jogamp.newt.opengl.GLWindow;
+import com.jogamp.opengl.util.Animator;
+import com.jogamp.opengl.util.glsl.ShaderCode;
+import com.jogamp.opengl.util.glsl.ShaderProgram;
+
 /**
-*
-* @author Johan Maasing <johan@zoom.nu>
-*/
+ *
+ * @author Johan Maasing <johan@zoom.nu>
+ * @author Raymond L. Rivera <ray.l.rivera@gmail.com>
+ */
 public class Demo9 {
-
 	// http://www.opengl.org/wiki/Vertex_Specification
 	final int[] vas = new int[1];
-	final int[] vbos = new int[1];
+	final int[] vbos = new int[2];
 	private int shaderPosition;
+	private int shaderOffset;
+	private FloatBuffer offsetAttrib;
 
 	private int flatColorShaderProgram = 0;
 	private Animator animator;
 	private GLWindow glWindow;
 	private boolean windowDestroyed = false;
 
-	// formatter:off
-	private static final float[] two_triangles = new float[]{
+	// @formatter:off
+	private static final float[] frontTriangle = new float[] {
 		-1.0f, -1.0f, 0.1f,
-		1.0f, 1.0f, 0.1f,
-		0.0f, 1.0f, 0.1f, 
-		1.0f, -1.0f, 0.7f,
-		0.0f, 1.0f, 0.7f,
-		-1.0f, 1.0f, 0.7f
+		 1.0f,  1.0f, 0.1f,
+		 0.0f,  1.0f, 0.1f
+	};
+	private static final float[] backTriangle = new float[] {
+		 1.0f, -1.0f, 0.3f,
+		 0.0f,  1.0f, 0.3f,
+		-1.0f,  1.0f, 0.3f
 	};
 
-	private final String vertShader
-			= "#version 410 core\n"
+	private final String vertShader =
+			"#version 410 core\n"
 			+ "in vec3 position;\n"
-			+ "out vec2 uv ;\n"
+			+ "in vec3 offset;\n"
 			+ "void main(void)\n"
 			+ "{"
-			+ "   uv = (position.xy + 1.0f)/2.0f;"
-			+ "   gl_Position = vec4(position, 1.0f) ; \n"
+			+ "   gl_Position = vec4(position + offset, 1.0f);\n"
 			+ "}";
 
-	private final String flatColorfragShader
-			= "#version 410 core\n"
-			+ "in vec2 uv;\n"
-			+ "layout(location = 0) out vec4 fragColor ;\n"
+	private final String flatColorfragShader =
+			"#version 410 core\n"
+			+ "layout(location = 0) out vec4 fragColor;\n"
 			+ "void main(void)\n"
 			+ "{"
-			+ "   fragColor = vec4(gl_FragCoord.z,gl_FragCoord.z,gl_FragCoord.z, 1.0) ; \n"
+			+ "   fragColor = vec4(gl_FragCoord.z,gl_FragCoord.z,gl_FragCoord.z, 1.0);\n"
 			+ "}";
 	// formatter:on
 
@@ -115,6 +116,7 @@ public class Demo9 {
 		this.glWindow.setFullscreen(false);
 		this.glWindow.setDefaultCloseOperation(WindowClosingProtocol.WindowClosingMode.DISPOSE_ON_CLOSE);
 		this.glWindow.addWindowListener(new WindowAdapter() {
+
 			@Override
 			public void windowDestroyNotify(WindowEvent we) {
 				if (!windowDestroyed) {
@@ -123,6 +125,7 @@ public class Demo9 {
 			}
 		});
 		this.glWindow.addGLEventListener(new GLEventListener() {
+
 			@Override
 			public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
 				GL gl = drawable.getGL();
@@ -166,22 +169,28 @@ public class Demo9 {
 		gl.glCullFace(GL4.GL_BACK);
 		gl.glFrontFace(GL4.GL_CCW);
 		gl.glEnable(GL4.GL_DEPTH_TEST);
-       gl.glDepthFunc(GL4.GL_LEQUAL);
-		
-		// Compile and link the shader then query the shader for the location of the vertex input variable
+		gl.glDepthFunc(GL4.GL_LEQUAL);
+
+		// Compile and link the shader then query the shader for the location of
+		// the vertex input variable
 		final ShaderCode vertexShader = compileShader(gl, vertShader, GL4.GL_VERTEX_SHADER);
 		final ShaderCode flatColorFragmentShader = compileShader(gl, flatColorfragShader, GL4.GL_FRAGMENT_SHADER);
 		this.flatColorShaderProgram = linkShader(gl, vertexShader, flatColorFragmentShader);
 		this.shaderPosition = gl.glGetAttribLocation(this.flatColorShaderProgram, "position");
-		
+		this.shaderOffset = gl.glGetAttribLocation(this.flatColorShaderProgram, "offset");
+
+		this.offsetAttrib = FloatBuffer.allocate(3);
+		offsetAttrib.put(0, 0.0f);
+		offsetAttrib.put(1, 0.0f);
+
 		// Create the mesh
-		createBuffer(gl, shaderPosition, two_triangles, 3);
+		createBuffer(gl, shaderPosition, frontTriangle, backTriangle, 3);
 	}
 
 	public ShaderCode compileShader(final GL4 gl4, final String source, final int shaderType) throws IOException {
 
 		final String[][] sources = new String[1][1];
-		sources[0] = new String[]{source};
+		sources[0] = new String[] { source };
 		ShaderCode shaderCode = new ShaderCode(shaderType, sources.length, sources);
 		final boolean compiled = shaderCode.compile(gl4, System.err);
 		if (!compiled) {
@@ -191,7 +200,8 @@ public class Demo9 {
 		return shaderCode;
 	}
 
-	private int linkShader(GL4 gl, final ShaderCode vertexShader, final ShaderCode textureFragmentShader) throws GLException {
+	private int linkShader(GL4 gl, final ShaderCode vertexShader, final ShaderCode textureFragmentShader)
+			throws GLException {
 		ShaderProgram program = new ShaderProgram();
 		program.init(gl);
 		program.add(vertexShader);
@@ -214,17 +224,39 @@ public class Demo9 {
 		gl.glUseProgram(this.flatColorShaderProgram);
 		gl.glBindVertexArray(this.vas[0]);
 		gl.glEnableVertexAttribArray(this.shaderPosition);
-		gl.glDrawArrays(GL4.GL_TRIANGLES, 0, 6);
+
+		gl.glBindBuffer(GL4.GL_ARRAY_BUFFER, vbos[0]);
+		gl.glVertexAttribPointer(0, 3, GL4.GL_FLOAT, false, 0, 0);
+		offsetAttrib.put(2, 0.3f);
+		gl.glVertexAttrib4fv(shaderOffset, offsetAttrib);
+		gl.glDrawArrays(GL4.GL_TRIANGLES, 0, 3);
+
+		gl.glBindBuffer(GL4.GL_ARRAY_BUFFER, vbos[1]);
+		gl.glVertexAttribPointer(0, 3, GL4.GL_FLOAT, false, 0, 0);
+		gl.glEnableVertexAttribArray(shaderPosition);
+		double dt = System.currentTimeMillis() / 950.0;
+		double dz = Math.sin(1.3f * dt) * 0.5f;
+		offsetAttrib.put(2, (float) dz);
+		gl.glVertexAttrib4fv(shaderOffset, offsetAttrib);
+		gl.glDrawArrays(GL4.GL_TRIANGLES, 0, 3);
 	}
 
-	public void createBuffer(final GL4 gl, final int shaderAttribute, float[] values, final int valuesPerVertex) {
+	public void createBuffer(final GL4 gl, final int shaderAttribute, float[] values1, float[] values2,
+			final int valuesPerVertex) {
 		gl.glGenVertexArrays(this.vas.length, this.vas, 0);
 		gl.glBindVertexArray(this.vas[0]);
 		gl.glGenBuffers(this.vbos.length, this.vbos, 0);
+
 		gl.glBindBuffer(GL4.GL_ARRAY_BUFFER, this.vbos[0]);
-		FloatBuffer fbVertices = Buffers.newDirectFloatBuffer(values);
-		final int bufferSizeInBytes = values.length * Buffers.SIZEOF_FLOAT;
+		FloatBuffer fbVertices = Buffers.newDirectFloatBuffer(values1);
+		int bufferSizeInBytes = values1.length * Buffers.SIZEOF_FLOAT;
+		gl.glBufferData(GL4.GL_ARRAY_BUFFER, bufferSizeInBytes, fbVertices, GL4.GL_STATIC_DRAW);
+		gl.glVertexAttribPointer(shaderAttribute, valuesPerVertex, GL4.GL_FLOAT, false, 0, 0);
+
+		gl.glBindBuffer(GL4.GL_ARRAY_BUFFER, this.vbos[1]);
+		fbVertices = Buffers.newDirectFloatBuffer(values2);
+		bufferSizeInBytes = values2.length * Buffers.SIZEOF_FLOAT;
 		gl.glBufferData(GL4.GL_ARRAY_BUFFER, bufferSizeInBytes, fbVertices, GL4.GL_STATIC_DRAW);
 		gl.glVertexAttribPointer(shaderAttribute, valuesPerVertex, GL4.GL_FLOAT, false, 0, 0);
 	}
-}
\ No newline at end of file
+}
