diff --git a/graphics/java/android/renderscript/Element.java b/graphics/java/android/renderscript/Element.java
index 66b1ccb..1324179 100644
--- a/graphics/java/android/renderscript/Element.java
+++ b/graphics/java/android/renderscript/Element.java
@@ -269,12 +269,10 @@
 
     /////////////////////////////////////////
     public static Element createUser(RenderScript rs, DataType dt) {
-        //android.util.Log.e("rs", "createUser " + dt.mID);
         return new Element(rs, dt, DataKind.USER, false, 1);
     }
 
     public static Element createVector(RenderScript rs, DataType dt, int size) {
-        //android.util.Log.e("rs", "createVector " + dt.mID + ", " + size);
         if (size < 2 || size > 4) {
             throw new IllegalArgumentException("Bad size");
         }
@@ -282,12 +280,10 @@
     }
 
     public static Element createIndex(RenderScript rs) {
-        android.util.Log.e("rs", "createIndex ");
         return new Element(rs, DataType.UNSIGNED_16, DataKind.INDEX, false, 1);
     }
 
     public static Element createAttrib(RenderScript rs, DataType dt, DataKind dk, int size) {
-        android.util.Log.e("rs", "createAttrib " + dt.mID + ", " + dk.mID + ", " + size);
         if (!(dt == DataType.FLOAT_32 ||
               dt == DataType.UNSIGNED_8 ||
               dt == DataType.UNSIGNED_16 ||
@@ -336,7 +332,6 @@
     }
 
     public static Element createPixel(RenderScript rs, DataType dt, DataKind dk) {
-        android.util.Log.e("rs", "createPixel " + dt.mID + ", " + dk.mID);
         if (!(dk == DataKind.PIXEL_L ||
               dk == DataKind.PIXEL_A ||
               dk == DataKind.PIXEL_LA ||
diff --git a/graphics/java/android/renderscript/SimpleMesh.java b/graphics/java/android/renderscript/SimpleMesh.java
index 8589a3e..4a217a9 100644
--- a/graphics/java/android/renderscript/SimpleMesh.java
+++ b/graphics/java/android/renderscript/SimpleMesh.java
@@ -340,8 +340,6 @@
             }
             mElement = b.create();
 
-            android.util.Log.e("rs", "sm create  size=" + (mVtxCount / floatCount) + ", count=" + mVtxCount);
-
             Builder smb = new Builder(mRS);
             smb.addVertexType(mElement, mVtxCount / floatCount);
             smb.setIndexType(Element.createIndex(mRS), mIndexCount);
diff --git a/libs/rs/rsElement.cpp b/libs/rs/rsElement.cpp
index 79ff35a..9944c0e 100644
--- a/libs/rs/rsElement.cpp
+++ b/libs/rs/rsElement.cpp
@@ -108,7 +108,6 @@
     for (size_t ct=0; ct < count; ct++) {
         e->mFields[ct].e.set(ein[ct]);
         e->mFields[ct].name.setTo(nin[ct], lengths[ct]);
-        LOGE("element %p %s", ein[ct], e->mFields[ct].name.string());
     }
 
     return e;
