diff --git a/src/com/android/musicvis/GenericWaveRS.java b/src/com/android/musicvis/GenericWaveRS.java
index f34a4c0..6e5d8ef 100644
--- a/src/com/android/musicvis/GenericWaveRS.java
+++ b/src/com/android/musicvis/GenericWaveRS.java
@@ -60,8 +60,8 @@
     protected float [] mPointData = new float[1024*8];
 
     private Allocation mLineIdxAlloc;
-    // 2 indices per line
-    private short [] mIndexData = new short[1024*2];
+    // 2 initial, plus one for each triangle, 2 triangles per sample
+    private short [] mIndexData = new short[2+1024*2];
 
     private ProgramVertex mPVBackground;
     private ProgramVertexFixedFunction.Constants mPVAlloc;
@@ -142,8 +142,8 @@
         mLineIdxAlloc = Allocation.createSized(mRS, Element.U16(mRS), mIndexData.length,
                                                Allocation.USAGE_GRAPHICS_VERTEX |
                                                Allocation.USAGE_SCRIPT);
-        // This will be a line mesh
-        meshBuilder.addIndexSetAllocation(mLineIdxAlloc, Primitive.LINE);
+        // This will be a triangle strip mesh
+        meshBuilder.addIndexSetAllocation(mLineIdxAlloc, Primitive.TRIANGLE_STRIP);
 
         // Create the Allocation for the vertices
         mCubeMesh = meshBuilder.create();
diff --git a/src/com/android/musicvis/waveform.rs b/src/com/android/musicvis/waveform.rs
index c3d75f2..1c5116d 100644
--- a/src/com/android/musicvis/waveform.rs
+++ b/src/com/android/musicvis/waveform.rs
@@ -62,12 +62,9 @@
     float amp3 = sin(0.011f * wave3amp) * 40;
     float amp4 = sin(0.031f * wave4amp) * 20;
     // calculate how many invisible lines there are on each side
-    int skip = (1024 - gWidth) / 2;
-    if (skip < 0) skip = 0;
-    int end = 1024 - skip;
-    for (int i = skip; i < end; i++) {
-        float val = sin(0.013f * (wave1pos + i)) * amp1
-                  + sin(0.029f * (wave2pos + i)) * amp2;
+    for (int i = 0; i < 1024; i++) {
+        float val = fabs(sin(0.013f * (wave1pos + i)) * amp1
+                  + sin(0.029f * (wave2pos + i)) * amp2);
         float off = sin(0.005f * (wave3pos + i)) * amp3
                   + sin(0.017f * (wave4pos + i)) * amp4;
         if (val < 2.f && val > -2.f) val = 2.f;
@@ -89,19 +86,13 @@
 
     int i;
 
-    // calculate how many invisible lines there are on each side
-    int width = gWidth;
-    if (width > 1024) width = 1024;
-    int skip = (1024 - width) / 2;
-    int end = 1024 - skip;
-
     if (gIdle) {
 
         // idle state animation
         float *points = (float*)gPoints;
         if (fadeoutcounter > 0) {
             // fade waveform to 0
-            for (i = skip; i < end; i++) {
+            for (i = 0; i < 1024; i++) {
                 float val = fabs(points[i*8+1]);
                 val = val * FADEOUT_FACTOR;
                 if (val < 2.f) val = 2.f;
@@ -127,7 +118,7 @@
             if (waveCounter != gWaveCounter) {
                 waveCounter = gWaveCounter;
                 float *points = (float*)gPoints;
-                for (i = skip; i < end; i++) {
+                for (i = 0; i < 1024; i++) {
                     float val = fabs(points[i*8+1]);
                     points[i*8+1] = (val * (FADEIN_LENGTH - fadeincounter) + idle[i*8+1] * fadeincounter) / FADEIN_LENGTH;
                     points[i*8+5] = (-val * (FADEIN_LENGTH - fadeincounter) + idle[i*8+5] * fadeincounter) / FADEIN_LENGTH;
@@ -158,7 +149,7 @@
     rsMatrixScale(&mat1, scale, scale, scale);
     rsgProgramVertexLoadModelMatrix(&mat1);
 
-    rsgDrawMesh(gCubeMesh, 0, skip * 2, width * 2);
+    rsgDrawMesh(gCubeMesh);
 
     return 1;
 }
