diff --git a/res/layout/activity_call_layout.xml b/res/layout/activity_call_layout.xml
index 595ee19..efc6f4c 100644
--- a/res/layout/activity_call_layout.xml
+++ b/res/layout/activity_call_layout.xml
@@ -40,17 +40,9 @@
         android:layout_width="300dp"
         android:layout_height="match_parent" />
 
-    <RelativeLayout
+    <FrameLayout
         android:id="@+id/ongoingcall_pane"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:layerType="hardware" >
-
-        <TextView
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_centerInParent="true"
-            android:text="No call Displayed" />
-    </RelativeLayout>
+        android:layout_height="match_parent" />
 
 </org.sflphone.views.CallPaneLayout>
\ No newline at end of file
diff --git a/src/org/sflphone/model/BubbleUser.java b/src/org/sflphone/model/BubbleUser.java
index 2cb67ff..ff968c1 100644
--- a/src/org/sflphone/model/BubbleUser.java
+++ b/src/org/sflphone/model/BubbleUser.java
@@ -113,7 +113,7 @@
 
             mSelector = new Paint();
             mSelector.setStyle(Style.FILL);
-            mSelector.setColor(mContext.getResources().getColor(R.color.sfl_light_blue));
+            mSelector.setColor(mContext.getResources().getColor(R.color.sfl_blue_9));
 
             mButtonPaint = new Paint();
 
diff --git a/src/org/sflphone/model/BubblesView.java b/src/org/sflphone/model/BubblesView.java
index bc9d78d..fe27b52 100644
--- a/src/org/sflphone/model/BubblesView.java
+++ b/src/org/sflphone/model/BubblesView.java
@@ -332,6 +332,9 @@
 
         int action = event.getActionMasked();
 
+        if (gDetector.onTouchEvent(event))
+            return true;
+
         if (action == MotionEvent.ACTION_UP) {
             if (thread.suspendFlag) {
                 Log.i(TAG, "Relaunch drawing thread");
@@ -377,7 +380,7 @@
                     // TODO
                     return true;
                 case Bubble.actions.MUTE:
-                    
+
                     return true;
                 case Bubble.actions.HANGUP:
                     try {
@@ -429,7 +432,7 @@
             // thread.holdDrawing();
         }
 
-        return gDetector.onTouchEvent(event);
+        return true;
     }
 
     private Bubble getExpandedBubble() {
@@ -468,17 +471,17 @@
         @Override
         public boolean onDown(MotionEvent event) {
             List<Bubble> bubbles = model.getBubbles();
-            
+
             Bubble target = getExpandedBubble();
-            if(target != null){
+            if (target != null) {
                 target.onDown(event);
                 return true;
             }
 
             for (int i = 0; i < bubbles.size(); i++) {
                 Bubble b = bubbles.get(i);
-                if(b.onDown(event))
-                    dragging_bubble= true;
+                if (b.onDown(event))
+                    dragging_bubble = true;
             }
 
             return true;
@@ -487,16 +490,13 @@
         @Override
         public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
             // Log.d("Main", "onFling");
-            return true;
+            return false;
         }
 
         @Override
         public void onLongPress(MotionEvent e) {
             // Log.d("Main", "onLongPress");
-            if (isDraggingBubble() && callback.getConference().isOnGoing()) {
-                Bubble b = getDraggedBubble(e);
-                b.expand(model.width, model.height);
-            }
+
         }
 
         private Bubble getDraggedBubble(MotionEvent e) {
@@ -528,7 +528,7 @@
                     b.speed.x = dx / dt;
                     b.speed.y = dy / dt;
 
-                    return true;
+                    return false;
                 }
             }
             return true;
@@ -542,8 +542,13 @@
 
         @Override
         public boolean onSingleTapUp(MotionEvent e) {
-            // Log.d("Main", "onSingleTapUp");
-            return true;
+            if (isDraggingBubble() && callback.getConference().isOnGoing()) {
+                Bubble b = getDraggedBubble(e);
+                b.expand(model.width, model.height);
+
+            }
+            return false;
+
         }
     }
 }
