diff --git a/libs/surfaceflinger/BootAnimation.cpp b/libs/surfaceflinger/BootAnimation.cpp
index 2b30336..03edbf3 100644
--- a/libs/surfaceflinger/BootAnimation.cpp
+++ b/libs/surfaceflinger/BootAnimation.cpp
@@ -187,44 +187,20 @@
 }
 
 bool BootAnimation::android() {
-    initTexture(&mAndroid[0], mAssets, "images/android_320x480.png");
-    initTexture(&mAndroid[1], mAssets, "images/boot_robot.png");
-    initTexture(&mAndroid[2], mAssets, "images/boot_robot_glow.png");
-
-    // erase screen
-    glDisable(GL_SCISSOR_TEST);
-    glBindTexture(GL_TEXTURE_2D, mAndroid[0].name);
+    initTexture(&mAndroid[0], mAssets, "images/android-logo-mask.png");
+    initTexture(&mAndroid[1], mAssets, "images/android-logo-shine.png");
 
     // clear screen
+    glDisable(GL_DITHER);
+    glDisable(GL_SCISSOR_TEST);
     glClear(GL_COLOR_BUFFER_BIT);
     eglSwapBuffers(mDisplay, mSurface);
 
     // wait ~1s
-    usleep(800000);
 
-    // fade in
-    glEnable(GL_BLEND);
-    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-    glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
-    const int steps = 8;
-    for (int i = 1; i < steps; i++) {
-        float fade = i / float(steps);
-        glColor4f(1, 1, 1, fade * fade);
-        glClear(GL_COLOR_BUFFER_BIT);
-        glDrawTexiOES(0, 0, 0, mAndroid[0].w, mAndroid[0].h);
-        eglSwapBuffers(mDisplay, mSurface);
-    }
-
-    // draw last frame
-    glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
-    glDisable(GL_BLEND);
-    glDrawTexiOES(0, 0, 0, mAndroid[0].w, mAndroid[0].h);
-    eglSwapBuffers(mDisplay, mSurface);
-
-    // update rect for the robot
-    const int x = mWidth - mAndroid[1].w - 33;
-    const int y = (mHeight - mAndroid[1].h) / 2 - 1;
-    const Rect updateRect(x, y, x + mAndroid[1].w, y + mAndroid[1].h);
+    const GLint xc = (mWidth  - mAndroid[0].w) / 2;
+    const GLint yc = (mHeight - mAndroid[0].h) / 2;
+    const Rect updateRect(xc, yc, xc + mAndroid[0].w, yc + mAndroid[0].h);
 
     // draw and update only what we need
     mNativeWindowSurface->setSwapRectangle(updateRect.left,
@@ -234,166 +210,31 @@
     glScissor(updateRect.left, mHeight - updateRect.bottom, updateRect.width(),
             updateRect.height());
 
+    // Blend state
+    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+    glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
+
     const nsecs_t startTime = systemTime();
     do {
-        // glow speed and shape
-        nsecs_t time = systemTime() - startTime;
-        float t = ((4.0f / (360.0f * us2ns(16667))) * time);
-        t = t - floorf(t);
-        const float fade = 0.5f + 0.5f * sinf(t * 2 * M_PI);
+        double time = systemTime() - startTime;
+        float t = 4.0f * float(time / us2ns(16667)) / mAndroid[1].w;
+        GLint offset = (1 - (t - floorf(t))) * mAndroid[1].w;
+        GLint x = xc - offset;
 
-        // fade the glow in and out
         glDisable(GL_BLEND);
-        glBindTexture(GL_TEXTURE_2D, mAndroid[2].name);
-        glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
-        glColor4f(fade, fade, fade, fade);
-        glDrawTexiOES(updateRect.left, mHeight - updateRect.bottom, 0,
-                updateRect.width(), updateRect.height());
-
-        // draw the robot
-        glEnable(GL_BLEND);
         glBindTexture(GL_TEXTURE_2D, mAndroid[1].name);
-        glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
-        glDrawTexiOES(updateRect.left, mHeight - updateRect.bottom, 0,
-                updateRect.width(), updateRect.height());
+        glDrawTexiOES(x,                 yc, 0, mAndroid[1].w, mAndroid[1].h);
+        glDrawTexiOES(x + mAndroid[1].w, yc, 0, mAndroid[1].w, mAndroid[1].h);
 
-        // make sure sleep a lot to not take too much CPU away from 
-        // the boot process. With this "glow" animation there is no
-        // visible difference. 
-        usleep(16667 * 4);
+        glEnable(GL_BLEND);
+        glBindTexture(GL_TEXTURE_2D, mAndroid[0].name);
+        glDrawTexiOES(xc, yc, 0, mAndroid[0].w, mAndroid[0].h);
 
         eglSwapBuffers(mDisplay, mSurface);
     } while (!exitPending());
 
     glDeleteTextures(1, &mAndroid[0].name);
     glDeleteTextures(1, &mAndroid[1].name);
-    glDeleteTextures(1, &mAndroid[2].name);
-    return false;
-}
-
-bool BootAnimation::cylon() {
-    // initialize the textures...
-    initTexture(&mLeftTrail, mAssets, "images/cylon_left.png");
-    initTexture(&mRightTrail, mAssets, "images/cylon_right.png");
-    initTexture(&mBrightSpot, mAssets, "images/cylon_dot.png");
-
-    int w = mWidth;
-    int h = mHeight;
-
-    const Point c(w / 2, h / 2);
-    const GLint amplitude = 60;
-    const int scx = c.x - amplitude - mBrightSpot.w / 2;
-    const int scy = c.y - mBrightSpot.h / 2;
-    const int scw = amplitude * 2 + mBrightSpot.w;
-    const int sch = mBrightSpot.h;
-    const Rect updateRect(scx, h - scy - sch, scx + scw, h - scy);
-
-    // erase screen
-    glDisable(GL_SCISSOR_TEST);
-    glClear(GL_COLOR_BUFFER_BIT);
-
-    eglSwapBuffers(mDisplay, mSurface);
-
-    glClear(GL_COLOR_BUFFER_BIT);
-
-    mNativeWindowSurface->setSwapRectangle(updateRect.left,
-            updateRect.top, updateRect.width(), updateRect.height());
-
-    glEnable(GL_SCISSOR_TEST);
-    glEnable(GL_BLEND);
-    glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
-
-    // clear the screen to white
-    Point p;
-    float t = 0;
-    float alpha = 1.0f;
-    const nsecs_t startTime = systemTime();
-    nsecs_t fadeTime = 0;
-
-    do {
-        // Set scissor in interesting area
-        glScissor(scx, scy, scw, sch);
-
-        // erase screen
-        glClear(GL_COLOR_BUFFER_BIT);
-
-        // compute wave
-        const float a = (t * 2 * M_PI) - M_PI / 2;
-        const float sn = sinf(a);
-        const float cs = cosf(a);
-        GLint x = GLint(amplitude * sn);
-        float derivative = cs;
-
-        glTexEnvx(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
-
-        if (derivative > 0) {
-            // vanishing trail...
-            p.x = (-amplitude + c.x) - mBrightSpot.w / 2;
-            p.y = c.y - mLeftTrail.h / 2;
-            float fade = 2.0f * (0.5f - t);
-            //fade *= fade;
-            glColor4f(fade, fade, fade, fade);
-            glBindTexture(GL_TEXTURE_2D, mLeftTrail.name);
-            glDrawTexiOES(p.x, p.y, 0, mLeftTrail.w, mLeftTrail.h);
-
-            // trail...
-            p.x = (x + c.x) - (mRightTrail.w + mBrightSpot.w / 2) + 16;
-            p.y = c.y - mRightTrail.h / 2;
-            fade = t < 0.25f ? t * 4.0f : 1.0f;
-            fade *= fade;
-            glColor4f(fade, fade, fade, fade);
-            glBindTexture(GL_TEXTURE_2D, mRightTrail.name);
-            glDrawTexiOES(p.x, p.y, 0, mRightTrail.w, mRightTrail.h);
-        } else {
-            // vanishing trail..
-            p.x = (amplitude + c.x) - (mRightTrail.w + mBrightSpot.w / 2) + 16;
-            p.y = c.y - mRightTrail.h / 2;
-            float fade = 2.0f * (0.5f - (t - 0.5f));
-            //fade *= fade;
-            glColor4f(fade, fade, fade, fade);
-            glBindTexture(GL_TEXTURE_2D, mRightTrail.name);
-            glDrawTexiOES(p.x, p.y, 0, mRightTrail.w, mRightTrail.h);
-
-            // trail...
-            p.x = (x + c.x) - mBrightSpot.w / 2;
-            p.y = c.y - mLeftTrail.h / 2;
-            fade = t < 0.5f + 0.25f ? (t - 0.5f) * 4.0f : 1.0f;
-            fade *= fade;
-            glColor4f(fade, fade, fade, fade);
-            glBindTexture(GL_TEXTURE_2D, mLeftTrail.name);
-            glDrawTexiOES(p.x, p.y, 0, mLeftTrail.w, mLeftTrail.h);
-        }
-
-        const Point p(x + c.x - mBrightSpot.w / 2, c.y - mBrightSpot.h / 2);
-        glBindTexture(GL_TEXTURE_2D, mBrightSpot.name);
-        glColor4f(1, 0.5, 0.5, 1);
-        glDrawTexiOES(p.x, p.y, 0, mBrightSpot.w, mBrightSpot.h);
-
-        // update animation
-        nsecs_t time = systemTime() - startTime;
-        t = ((4.0f / (360.0f * us2ns(16667))) * time);
-        t = t - floorf(t);
-
-        eglSwapBuffers(mDisplay, mSurface);
-
-        if (exitPending()) {
-            if (fadeTime == 0) {
-                fadeTime = time;
-            }
-            time -= fadeTime;
-            alpha = 1.0f - ((float(time) * 6.0f) / float(s2ns(1)));
-
-            session()->openTransaction();
-            mFlingerSurface->setAlpha(alpha * alpha);
-            session()->closeTransaction();
-        }
-    } while (alpha > 0);
-
-    // cleanup
-    glFinish();
-    glDeleteTextures(1, &mLeftTrail.name);
-    glDeleteTextures(1, &mRightTrail.name);
-    glDeleteTextures(1, &mBrightSpot.name);
     return false;
 }
 
