--- a/src/profile-preferences.ui	2014-04-11 16:21:45.676434294 +0200
+++ b/src/profile-preferences.ui	2014-04-11 16:25:02.817411798 +0200
@@ -1051,6 +1051,7 @@
                                             <property name="can_focus">True</property>
                                             <property name="receives_default">False</property>
                                             <property name="title" translatable="yes">Choose Terminal Background Color</property>
+                                            <property name="use_alpha">True</property>
                                           </object>
                                           <packing>
                                             <property name="left_attach">1</property>
--- a/src/terminal-screen.c	2014-04-11 16:21:45.676434294 +0200
+++ b/src/terminal-screen.c	2014-04-11 16:25:02.817411798 +0200
@@ -875,6 +875,10 @@
   GdkRGBA fg, bg, bold, theme_fg, theme_bg;
   GdkRGBA *boldp;
   GtkStyleContext *context;
+  
+  GtkCssProvider *provider;
+  GdkDisplay *display;
+  GdkScreen *gdkscreen;
 
   context = gtk_widget_get_style_context (widget);
   gtk_style_context_get_color (context, GTK_STATE_FLAG_NORMAL, &theme_fg);
@@ -898,6 +902,26 @@
   vte_terminal_set_colors_rgba (VTE_TERMINAL (screen), &fg, &bg,
                                 colors, n_colors);
   vte_terminal_set_color_bold_rgba (VTE_TERMINAL (screen), boldp);
+  vte_terminal_set_background_saturation (VTE_TERMINAL (screen), 1.0 - bg.alpha); /* normal color */
+  vte_terminal_set_opacity (VTE_TERMINAL (screen), bg.alpha * 0xffff);
+  provider = gtk_css_provider_new ();
+  display = gdk_display_get_default ();
+  gdkscreen = gdk_display_get_default_screen (display);
+
+  gtk_style_context_add_provider_for_screen (gdkscreen,
+                                 GTK_STYLE_PROVIDER (provider),
+                                 GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+
+  gtk_css_provider_load_from_data (GTK_CSS_PROVIDER(provider),
+                                   bg.alpha < 1 ? " TerminalWindow {\n"
+                                   "   background-color: transparent;\n"  /* transparent background */
+                                   "}\n"
+                                   " TerminalWindow .menubar {\n"
+                                   "   background-color: @theme_bg_color;\n"  /* fix transparent menubar */
+                                   "}\n" : " TerminalWindow {\n"
+                                   "   background-color: @theme_bg_color;\n"  /* opaque background */
+                                   "}\n", -1, NULL);
+  g_object_unref (provider);
 }
 
 void
--- a/src/terminal-window.c	2014-03-03 21:48:49.000000000 +0100
+++ b/src/terminal-window.c	2014-04-11 16:23:43.565018866 +0200
@@ -2253,9 +2253,17 @@
 {
   TerminalWindow *window = TERMINAL_WINDOW (widget);
   TerminalWindowPrivate *priv = window->priv;
+  GdkScreen *screen;
+  GdkVisual *visual;
   GtkAllocation widget_allocation;
 
   gtk_widget_get_allocation (widget, &widget_allocation);
+  screen = gtk_widget_get_screen (widget);
+  /* Set RGBA visual if possible so VTE can use real transparency */
+  visual = gdk_screen_get_rgba_visual (screen);
+  if (visual == NULL)
+    visual = gdk_screen_get_system_visual (screen);    
+  gtk_widget_set_visual (widget, visual);
 
   _terminal_debug_print (TERMINAL_DEBUG_GEOMETRY,
                          "[window %p] realize, size %d : %d at (%d, %d)\n",
