diff --git a/src/com/android/gallery3d/app/ActivityState.java b/src/com/android/gallery3d/app/ActivityState.java
index 66b4a22..867cda3 100644
--- a/src/com/android/gallery3d/app/ActivityState.java
+++ b/src/com/android/gallery3d/app/ActivityState.java
@@ -36,7 +36,8 @@
 abstract public class ActivityState {
     protected static final int FLAG_HIDE_ACTION_BAR = 1;
     protected static final int FLAG_HIDE_STATUS_BAR = 2;
-    protected static final int FLAG_SCREEN_ON = 4;
+    protected static final int FLAG_SCREEN_ON_WHEN_PLUGGED = 4;
+    protected static final int FLAG_SCREEN_ON_ALWAYS = 8;
 
     private static final int SCREEN_ON_FLAGS = (
               WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
@@ -117,7 +118,8 @@
     void setScreenOnFlags() {
         final Window win = ((Activity) mActivity).getWindow();
         final WindowManager.LayoutParams params = win.getAttributes();
-        if (mPlugged && 0 != (mFlags & FLAG_SCREEN_ON)) {
+        if ((0 != (mFlags & FLAG_SCREEN_ON_ALWAYS)) ||
+                (mPlugged && 0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED))) {
             params.flags |= SCREEN_ON_FLAGS;
         } else {
             params.flags &= ~SCREEN_ON_FLAGS;
@@ -126,7 +128,7 @@
     }
 
     protected void onPause() {
-        if (0 != (mFlags & FLAG_SCREEN_ON)) {
+        if (0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED)) {
             ((Activity) mActivity).unregisterReceiver(mPowerIntentReceiver);
         }
     }
@@ -160,7 +162,7 @@
             onStateResult(entry.requestCode, entry.resultCode, entry.resultData);
         }
 
-        if (0 != (mFlags & FLAG_SCREEN_ON)) {
+        if (0 != (mFlags & FLAG_SCREEN_ON_WHEN_PLUGGED)) {
             // we need to know whether the device is plugged in to do this correctly
             final IntentFilter filter = new IntentFilter();
             filter.addAction(Intent.ACTION_BATTERY_CHANGED);
diff --git a/src/com/android/gallery3d/app/Gallery.java b/src/com/android/gallery3d/app/Gallery.java
index bdd4a0b..468d202 100644
--- a/src/com/android/gallery3d/app/Gallery.java
+++ b/src/com/android/gallery3d/app/Gallery.java
@@ -42,6 +42,7 @@
 
 public final class Gallery extends AbstractGalleryActivity implements OnCancelListener {
     public static final String EXTRA_SLIDESHOW = "slideshow";
+    public static final String EXTRA_DREAM = "dream";
     public static final String EXTRA_CROP = "crop";
 
     public static final String ACTION_REVIEW = "com.android.camera.action.REVIEW";
@@ -145,6 +146,9 @@
             data.putString(SlideshowPage.KEY_SET_PATH, path.toString());
             data.putBoolean(SlideshowPage.KEY_RANDOM_ORDER, true);
             data.putBoolean(SlideshowPage.KEY_REPEAT, true);
+            if (intent.getBooleanExtra(EXTRA_DREAM, false)) {
+                data.putBoolean(SlideshowPage.KEY_DREAM, true);
+            }
             getStateManager().startState(SlideshowPage.class, data);
         } else {
             Bundle data = new Bundle();
diff --git a/src/com/android/gallery3d/app/SlideshowDream.java b/src/com/android/gallery3d/app/SlideshowDream.java
index c249467..9963da6 100644
--- a/src/com/android/gallery3d/app/SlideshowDream.java
+++ b/src/com/android/gallery3d/app/SlideshowDream.java
@@ -14,6 +14,7 @@
 //            Uri.fromFile(Environment.getExternalStoragePublicDirectory(
 //                        Environment.DIRECTORY_PICTURES)))
                 .putExtra(Gallery.EXTRA_SLIDESHOW, true)
+                .putExtra(Gallery.EXTRA_DREAM, true)
                 .setFlags(getIntent().getFlags());
         startActivity(i);
         finish();
diff --git a/src/com/android/gallery3d/app/SlideshowPage.java b/src/com/android/gallery3d/app/SlideshowPage.java
index 5aa3985..a6ae527 100644
--- a/src/com/android/gallery3d/app/SlideshowPage.java
+++ b/src/com/android/gallery3d/app/SlideshowPage.java
@@ -48,6 +48,7 @@
     public static final String KEY_PHOTO_INDEX = "photo-index";
     public static final String KEY_RANDOM_ORDER = "random-order";
     public static final String KEY_REPEAT = "repeat";
+    public static final String KEY_DREAM = "dream";
 
     private static final long SLIDESHOW_DELAY = 3000; // 3 seconds
 
@@ -104,7 +105,14 @@
 
     @Override
     public void onCreate(Bundle data, Bundle restoreState) {
-        mFlags |= (FLAG_HIDE_ACTION_BAR | FLAG_HIDE_STATUS_BAR | FLAG_SCREEN_ON);
+        mFlags |= (FLAG_HIDE_ACTION_BAR | FLAG_HIDE_STATUS_BAR);
+        if (data.getBoolean(KEY_DREAM)) {
+            // Dream screensaver only keeps screen on for plugged devices.
+            mFlags |= FLAG_SCREEN_ON_WHEN_PLUGGED;
+        } else {
+            // User-initiated slideshow would always keep screen on.
+            mFlags |= FLAG_SCREEN_ON_ALWAYS;
+        }
 
         mHandler = new SynchronizedHandler(mActivity.getGLRoot()) {
             @Override
