* #24007 Fixed build process
diff --git a/src/com/savoirfairelinux/sflphone/client/BubblesViewActivity.java b/src/com/savoirfairelinux/sflphone/client/BubblesViewActivity.java
index bcd358f..c1d9e13 100644
--- a/src/com/savoirfairelinux/sflphone/client/BubblesViewActivity.java
+++ b/src/com/savoirfairelinux/sflphone/client/BubblesViewActivity.java
@@ -25,15 +25,12 @@
 
     BubbleModel model;
 
-    int num_bubble;
-
     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.bubbleview_layout);
 
-        num_bubble = 0;
         model = new BubbleModel();
         DisplayMetrics metrics = getResources().getDisplayMetrics();
         screenCenter = new PointF(metrics.widthPixels / 2, metrics.heightPixels / 3);
@@ -41,17 +38,23 @@
         // model.listBubbles.add(new Bubble(this, metrics.widthPixels / 2, metrics.heightPixels / 4, 150, R.drawable.me));
         // model.listBubbles.add(new Bubble(this, metrics.widthPixels / 2, metrics.heightPixels / 4 * 3, 150, R.drawable.callee));
 
-        Button b = (Button) findViewById(R.id.add_bubble);
         view = (BubblesView) findViewById(R.id.main_view);
         view.setModel(model);
 
-        b.setOnClickListener(new OnClickListener() {
+        ((Button) findViewById(R.id.add_bubble)).setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View v) {
                 addBubble();
             }
         });
 
+        ((Button) findViewById(R.id.remove_bubble)).setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                removeBubble();
+            }
+        });
+
     }
 
     public void addBubble() {
@@ -61,18 +64,50 @@
         DisplayMetrics metrics = getResources().getDisplayMetrics();
         Bubble b = new Bubble(this, metrics.widthPixels / 3, metrics.heightPixels / 4 * 3, 150, -1);
         model.listBubbles.add(b);
-        num_bubble++;
-        angle_part = 360 / num_bubble;
-        
+
+        angle_part = 360 / model.listBubbles.size();
+
         double dX = 0;
         double dY = 0;
-        for(int i = 0; i < model.listBubbles.size() ; ++i){
+        for (int i = 0; i < model.listBubbles.size(); ++i) {
             dX = Math.cos(Math.toRadians(angle_part * i)) * radiusCalls;
             dY = Math.sin(Math.toRadians(angle_part * i)) * radiusCalls;
-            Log.i(TAG,"dX "+dX+ " dY "+dY);
-            model.listBubbles.get(i).setAttractor(new PointF((int)dX + screenCenter.x, (int)dY + screenCenter.y));
+            Log.i(TAG, "dX " + dX + " dY " + dY);
+            model.listBubbles.get(i).setAttractor(new PointF((int) dX + screenCenter.x, (int) dY + screenCenter.y));
         }
-       
+
+        // listBubbles.get(listBubbles.size() - 1).setRegion(width, height);
+    }
+
+    public void removeBubble() {
+        
+        if (model.listBubbles.isEmpty()) {
+            return;
+        }
+        /*
+         * Bubble.Builder builder = new Bubble.Builder(getContext()); builder.setRadiusPixels(200).setX(200).setY(300);
+         */
+        // DisplayMetrics metrics = getResources().getDisplayMetrics();
+        // Bubble b = new Bubble(this, metrics.widthPixels / 3, metrics.heightPixels / 4 * 3, 150, -1);
+        synchronized (model) {
+            model.listBubbles.remove(model.listBubbles.size() - 1);
+        }
+
+        if (model.listBubbles.isEmpty()) {
+            return;
+        }
+
+        angle_part = 360 / model.listBubbles.size();
+
+        Log.i(TAG, "Angle:" + angle_part);
+        double dX = 0;
+        double dY = 0;
+        for (int i = 0; i < model.listBubbles.size(); ++i) {
+            dX = Math.cos(Math.toRadians(angle_part * i)) * radiusCalls;
+            dY = Math.sin(Math.toRadians(angle_part * i)) * radiusCalls;
+            Log.i(TAG, "dX " + dX + " dY " + dY);
+            model.listBubbles.get(i).setAttractor(new PointF((int) dX + screenCenter.x, (int) dY + screenCenter.y));
+        }
 
         // listBubbles.get(listBubbles.size() - 1).setRegion(width, height);
     }
diff --git a/src/com/savoirfairelinux/sflphone/model/BubblesView.java b/src/com/savoirfairelinux/sflphone/model/BubblesView.java
index 3ce9439..87d44fe 100644
--- a/src/com/savoirfairelinux/sflphone/model/BubblesView.java
+++ b/src/com/savoirfairelinux/sflphone/model/BubblesView.java
@@ -202,9 +202,11 @@
 		{

 			canvas.drawColor(Color.WHITE);

 

-			for(int i=0, n=model.listBubbles.size(); i<n; i++) {

-				Bubble b = model.listBubbles.get(i);

-				canvas.drawBitmap(b.getBitmap(), null, b.getBounds(), null);

+			for(int i=0 ; i<model.listBubbles.size(); i++) {

+			    synchronized (model) {

+			        Bubble b = model.listBubbles.get(i);

+	                canvas.drawBitmap(b.getBitmap(), null, b.getBounds(), null);

+                }

 			}

 		}

 	}