diff --git a/src/com/savoirfairelinux/sflphone/client/CallActivity.java b/src/com/savoirfairelinux/sflphone/client/CallActivity.java
index abe5303..de48f9e 100644
--- a/src/com/savoirfairelinux/sflphone/client/CallActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/CallActivity.java
@@ -114,8 +114,8 @@
 
 				switch (view.getId()) {
 				case R.id.ongoingcall_pane:
-					// getFragmentManager().findFragmentById(R.id.calllist_pane).setHasOptionsMenu(false);
-					// getFragmentManager().findFragmentById(R.id.ongoingcall_pane).setHasOptionsMenu(true);
+					Log.i(TAG,"PANEL CLOSED DRAWING SHOULD RESTART");
+					mCurrentCallFragment.getBubbleView().restartDrawing();
 					break;
 				default:
 					break;
diff --git a/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java b/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java
index 8945f4f..e8df782 100644
--- a/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java
+++ b/src/com/savoirfairelinux/sflphone/fragments/CallFragment.java
@@ -371,5 +371,10 @@
 	{
 	}
 
+    public BubblesView getBubbleView() {
+        return view;
+        
+    }
+
 
 }
diff --git a/src/com/savoirfairelinux/sflphone/model/BubblesView.java b/src/com/savoirfairelinux/sflphone/model/BubblesView.java
index d760102..367ee9f 100644
--- a/src/com/savoirfairelinux/sflphone/model/BubblesView.java
+++ b/src/com/savoirfairelinux/sflphone/model/BubblesView.java
@@ -13,7 +13,6 @@
 import android.util.Log;
 import android.view.GestureDetector;
 import android.view.GestureDetector.OnGestureListener;
-import android.view.GestureDetector.SimpleOnGestureListener;
 import android.view.MotionEvent;
 import android.view.SurfaceHolder;
 import android.view.SurfaceView;
@@ -29,6 +28,8 @@
     private Paint attractor_paint = new Paint();
     private Paint name_paint = new Paint(Paint.ANTI_ALIAS_FLAG);
 
+    private GestureDetector gDetector;
+
     private float density;
     private float textDensity;
 
@@ -123,81 +124,6 @@
         thread = null;
     }
 
-    private GestureDetector gDetector;
-
-    @Override
-    public boolean onTouch(View v, MotionEvent event) {
-        Log.w(TAG, "onTouch " + event.getAction());
-        
-        int action = event.getActionMasked();
-//
-//        synchronized (model) {
-//            List<Bubble> bubbles = model.getBubbles();
-//            final int n_bubbles = bubbles.size();
-//
-//            if (action == MotionEvent.ACTION_DOWN) {
-//                for (int i = 0; i < n_bubbles; i++) {
-//                    Bubble b = bubbles.get(i);
-//                    if (b.intersects(event.getX(), event.getY())) {
-//                        b.dragged = true;
-//                        b.last_drag = System.nanoTime();
-//                        b.setPos(event.getX(), event.getY());
-//                        b.target_scale = .8f;
-//                        dragging_bubble = true;
-//                    }
-//                }
-//            } else if (action == MotionEvent.ACTION_MOVE) {
-//                long now = System.nanoTime();
-//                for (int i = 0; i < n_bubbles; i++) {
-//                    Bubble b = bubbles.get(i);
-//                    if (b.dragged) {
-//                        float x = event.getX(), y = event.getY();
-//                        float dt = (float) ((now - b.last_drag) / 1000000000.);
-//                        float dx = x - b.getPosX(), dy = y - b.getPosY();
-//                        b.last_drag = now;
-//
-//                        b.setPos(event.getX(), event.getY());
-//                        /*
-//                         * int hn = event.getHistorySize() - 2; Log.w(TAG, "event.getHistorySize() : " + event.getHistorySize()); if(hn > 0) { float
-//                         * dx = x-event.getHistoricalX(hn); float dy = y-event.getHistoricalY(hn); float dt = event.getHistoricalEventTime(hn)/1000.f;
-//                         */
-//                        b.speed.x = dx / dt;
-//                        b.speed.y = dy / dt;
-//                        // Log.w(TAG, "onTouch dx:" + b.speed.x + " dy:" + b.speed.y);
-//                        // }
-//                        return true;
-//                    }
-//                }
-//            } else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
-//                for (int i = 0; i < n_bubbles; i++) {
-//                    Bubble b = bubbles.get(i);
-//                    if (b.dragged) {
-//                        b.dragged = false;
-//                        b.target_scale = 1.f;
-//                    }
-//                }
-//                dragging_bubble = false;
-//            }
-//        }
-//
-//        return true;
-        
-        if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
-            List<Bubble> bubbles = model.getBubbles();
-            final int n_bubbles = bubbles.size();
-            for (int i = 0; i < n_bubbles; i++) {
-                Bubble b = bubbles.get(i);
-                if (b.dragged) {
-                    b.dragged = false;
-                    b.target_scale = 1.f;
-                }
-            }
-            dragging_bubble = false;
-        }
-        
-        return gDetector.onTouchEvent(event);
-    }
-
     public boolean isDraggingBubble() {
         return dragging_bubble;
     }
@@ -205,6 +131,7 @@
     class BubblesThread extends Thread {
         private boolean running = false;
         private SurfaceHolder surfaceHolder;
+        public Boolean suspendFlag = false;
 
         BubbleModel model = null;
 
@@ -221,17 +148,33 @@
             while (running) {
                 Canvas c = null;
                 try {
-                    c = surfaceHolder.lockCanvas(null);
 
-                    // for the case the surface is destroyed while already in the loop
-                    if (c == null || model == null)
-                        continue;
+                    if (suspendFlag) {
+                        synchronized (this) {
+                            while (suspendFlag) {
+                                try {
+                                    wait();
+                                } catch (InterruptedException e) {
+                                    // TODO Auto-generated catch block
+                                    e.printStackTrace();
+                                }
+                            }
+                        }
+                    } else {
+                        Log.i(TAG,"drawing");
+                        c = surfaceHolder.lockCanvas(null);
 
-                    synchronized (surfaceHolder) {
-                        // Log.w(TAG, "Thread doDraw");
-                        model.update();
-                        doDraw(c);
+                        // for the case the surface is destroyed while already in the loop
+                        if (c == null || model == null)
+                            continue;
+
+                        synchronized (surfaceHolder) {
+                            // Log.w(TAG, "Thread doDraw");
+                            model.update();
+                            doDraw(c);
+                        }
                     }
+
                 } finally {
                     if (c != null)
                         surfaceHolder.unlockCanvasAndPost(c);
@@ -239,6 +182,13 @@
             }
         }
 
+        public void setPaused(boolean wantToPause) {
+            synchronized (this) {
+                suspendFlag = wantToPause;
+                notify();
+            }
+        }
+
         public void setRunning(boolean b) {
             running = b;
         }
@@ -283,6 +233,38 @@
         }
     }
 
+    @Override
+    public boolean onTouch(View v, MotionEvent event) {
+        Log.w(TAG, "onTouch " + event.getAction());
+
+        int action = event.getActionMasked();
+
+        if (action == MotionEvent.ACTION_UP) {
+            if (thread.suspendFlag) {
+                Log.i(TAG, "Relaunch drawing thread");
+                thread.setPaused(false);
+            }
+
+            List<Bubble> bubbles = model.getBubbles();
+            final int n_bubbles = bubbles.size();
+            for (int i = 0; i < n_bubbles; i++) {
+                Bubble b = bubbles.get(i);
+                if (b.dragged) {
+                    b.dragged = false;
+                    b.target_scale = 1.f;
+                }
+            }
+            dragging_bubble = false;
+        } else if (action != MotionEvent.ACTION_DOWN && !isDraggingBubble() && !thread.suspendFlag) {
+
+            Log.i(TAG, "Not dragging thread should be stopped");
+            thread.setPaused(true);
+            // thread.holdDrawing();
+        }
+
+        return gDetector.onTouchEvent(event);
+    }
+
     class MyOnGestureListener implements OnGestureListener {
         @Override
         public boolean onDown(MotionEvent event) {
@@ -355,4 +337,11 @@
         }
     }
 
+    public void restartDrawing() {
+        if (thread != null && thread.suspendFlag) {
+            Log.i(TAG, "Relaunch drawing thread");
+            thread.setPaused(false);
+        }
+    }
+
 }
