diff --git a/js/ui/workspaces.js b/js/ui/workspaces.js
index 7fa0bb1..3f1b607 100644
--- a/js/ui/workspaces.js
+++ b/js/ui/workspaces.js
@@ -54,6 +54,7 @@ function WindowClone(realWindow) {
 
 WindowClone.prototype = {
     _init : function(realWindow) {
+		 let global = Shell.Global.get ();
         this.actor = new Clutter.Clone({ source: realWindow.get_texture(),
                                          reactive: true,
                                          x: realWindow.x,
@@ -61,6 +62,11 @@ WindowClone.prototype = {
         this.actor._delegate = this;
         this.realWindow = realWindow;
         this.metaWindow = realWindow.meta_window;
+		 this.onActiveWorkspace = this.realWindow._onActiveWorkspace;
+		 this.stickyWindow = this.metaWindow.is_on_all_workspaces();
+
+		 if (this.stickyWindow && !this.onActiveWorkspace)
+			this.actor.set_opacity (100);
         this.origX = realWindow.x;
         this.origY = realWindow.y;
 
@@ -92,8 +98,9 @@ WindowClone.prototype = {
             return;
 
         this._havePointer = true;
+        // actor should not be raised due to sticked window covering minus sign
+        //actor.raise_top();
 
-        actor.raise_top();
         this._updateTitle();
     },
 
@@ -307,6 +314,10 @@ Workspace.prototype = {
         this._windowIcons = [ null ];
         for (let i = 0; i < windows.length; i++) {
             if (this._isOverviewWindow(windows[i])) {
+                // if current workspace is active mark window as inside active workspace
+                windows[i]._onActiveWorkspace = (global.screen.get_active_workspace_index () == this.workspaceNum);
+                // used for which workspace sticked window is in. get_workspace() returns -1 for sticky windows.
+                windows[i]._onWorkspace = this.workspaceNum;
                 this._addWindowClone(windows[i]);
             }
         }
@@ -326,11 +337,22 @@ Workspace.prototype = {
     },
 
     updateRemovable : function() {
+
+       let realWindowCount = 0;
+       // check if sticky windows are _onActiveWorkspace
+       // start from index one in order to pass desktop
+       for (let i = 0; i < this._windows.length; i++)
+       {
+           if (!this._windows[i].stickyWindow)
+               realWindowCount++;
+           else if (this._windows[i].onActiveWorkspace)
+               realWindowCount++;
+        }
+
         let global = Shell.Global.get();
-        let removable = (this._windows.length == 1 /* just desktop */ &&
+        let removable = (realWindowCount == 1 /* just desktop */ &&
                          this.workspaceNum != 0 &&
                          this.workspaceNum == global.screen.n_workspaces - 1);
-
         if (removable) {
             if (this._removeButton)
                 return;
@@ -343,6 +365,7 @@ Workspace.prototype = {
             this._removeButton.connect('button-release-event', Lang.bind(this, this._removeSelf));
 
             this.actor.add_actor(this._removeButton);
+            this._removeButton.raise_top();
             this._adjustRemoveButton();
             this._adjustRemoveButtonId = this.actor.connect('notify::scale-x', Lang.bind(this, this._adjustRemoveButton));
 
@@ -499,7 +522,7 @@ Workspace.prototype = {
         icon.set_position(x, y);
         icon.raise(this.actor);
         Tweener.addTween(icon,
-                         { opacity: 255,
+                         { opacity: icon.maxOpacity,
                            time: Overview.ANIMATION_TIME,
                            transition: "easeOutQuad" });
     },
@@ -740,7 +763,7 @@ Workspace.prototype = {
     // Tests if @win belongs to this workspaces
     _isMyWindow : function (win) {
         return win.get_workspace() == this.workspaceNum ||
-            (win.get_meta_window() && win.get_meta_window().is_on_all_workspaces());
+            (win.get_meta_window() && win.get_meta_window().is_on_all_workspaces());
     },
 
     // Tests if @win should be shown in the Overview
@@ -769,6 +792,12 @@ Workspace.prototype = {
                                                 keep_aspect_ratio: true });
             Shell.clutter_texture_set_from_pixbuf(iconTexture, icon);
         }
+
+        iconTexture.maxOpacity = 255;
+        // decrease opacity for sticked windows
+        if (window.meta_window.is_on_all_workspaces() && !window._onActiveWorkspace)
+            iconTexture.maxOpacity = 100;
+
         return iconTexture;
     },
 
@@ -944,6 +973,7 @@ Workspaces.prototype = {
         let global = Shell.Global.get();
         let activeWorkspaceNum = global.screen.get_active_workspace_index();
         let windowWorkspaceNum = metaWindow.get_workspace().index();
         let clone = this._lookupCloneForMetaWindow (metaWindow);
         clone.actor.raise_top();
