diff --git a/platform/platform-impl/src/com/intellij/ide/actions/AboutPopup.java b/platform/platform-impl/src/com/intellij/ide/actions/AboutPopup.java
index 159b741dba9d904d2e569bbe32cadded1b95cb48..580d23109faedb41906ca76a3684310bfc5a8184 100644
--- a/platform/platform-impl/src/com/intellij/ide/actions/AboutPopup.java
+++ b/platform/platform-impl/src/com/intellij/ide/actions/AboutPopup.java
@@ -39,6 +39,7 @@ import com.intellij.ui.JBColor;
 import com.intellij.ui.LicensingFacade;
 import com.intellij.ui.UI;
 import com.intellij.ui.awt.RelativePoint;
+import com.intellij.util.Alarm;
 import com.intellij.util.text.DateFormatUtil;
 import com.intellij.util.ui.GraphicsUtil;
 import com.intellij.util.ui.JBUI;
@@ -135,6 +136,8 @@ public class AboutPopup {
     private final List<Link> myLinks = new ArrayList<Link>();
     private Link myActiveLink;
     private boolean myShowCopy = false;
+    private float myShowCopyAlpha;
+    private Alarm myAlarm = new Alarm();
 
     public InfoSurface(Icon image) {
       ApplicationInfoImpl appInfo = (ApplicationInfoImpl)ApplicationInfoEx.getInstanceEx();
@@ -208,11 +211,25 @@ public class AboutPopup {
           }
         }
 
+        final static double maxAlpha = 0.5;
+        final static double fadeStep = 0.05;
+        final static int animationDelay = 15;
+
         @Override
         public void mouseEntered(MouseEvent e) {
           if (!myShowCopy) {
             myShowCopy = true;
-            repaint();
+            myAlarm.cancelAllRequests();
+            myAlarm.addRequest(new Runnable() {
+              @Override
+              public void run() {
+                if (myShowCopyAlpha < maxAlpha) {
+                  myShowCopyAlpha += fadeStep;
+                  repaint();
+                  myAlarm.addRequest(this, animationDelay);
+                }
+              }
+            }, animationDelay);
           }
         }
 
@@ -220,7 +237,17 @@ public class AboutPopup {
         public void mouseExited(MouseEvent e) {
           if (myShowCopy) {
             myShowCopy = false;
-            repaint();
+            myAlarm.cancelAllRequests();
+            myAlarm.addRequest(new Runnable() {
+              @Override
+              public void run() {
+                if (myShowCopyAlpha > 0) {
+                  myShowCopyAlpha -= fadeStep;
+                  repaint();
+                  myAlarm.addRequest(this, animationDelay);
+                }
+              }
+            }, animationDelay);
           }
         }
       });
@@ -351,7 +378,7 @@ public class AboutPopup {
         x = indentX;
         y = indentY;
         ApplicationInfoEx appInfo = (ApplicationInfoEx)ApplicationInfo.getInstance();
-        boolean showCopyButton = myShowCopy;
+        boolean showCopyButton = myShowCopy || myShowCopyAlpha > 0;
         for (AboutBoxLine line : lines) {
           final String s = line.getText();
           setFont(line.isBold() ? myBoldFont : myFont);
@@ -371,7 +398,7 @@ public class AboutPopup {
             g2.setFont(myFont);
             g2.setColor(myLinkColor);
             final int xOffset = myImage.getIconWidth() - width - 10;
-            final GraphicsConfig config = GraphicsUtil.paintWithAlpha(g2, 0.5f);
+            final GraphicsConfig config = GraphicsUtil.paintWithAlpha(g2, myShowCopyAlpha);
             g2.drawString(copyString, xOffset, yBase + y);
             config.restore();
             myLinks.add(new Link(new Rectangle(xOffset, yBase + y - fontAscent, width, fontHeight), COPY_URL));