Index: src/com/example/helloandroid/Game.java
===================================================================
--- src/com/example/helloandroid/Game.java	(revision b6a9b5f04771a141224e9fb6a56ffe9b8099efb9)
+++ src/com/example/helloandroid/Game.java	(revision 5053d901dba69d758c57cb533a762e700f66a613)
@@ -6,4 +6,5 @@
 import android.view.Menu;
 import android.view.MenuItem;
+import android.view.MotionEvent;
 import android.view.Window;
 import android.widget.TextView;
Index: src/com/example/helloandroid/GameView.java
===================================================================
--- src/com/example/helloandroid/GameView.java	(revision b6a9b5f04771a141224e9fb6a56ffe9b8099efb9)
+++ src/com/example/helloandroid/GameView.java	(revision 5053d901dba69d758c57cb533a762e700f66a613)
@@ -17,4 +17,5 @@
 import android.util.Log;
 import android.view.KeyEvent;
+import android.view.MotionEvent;
 import android.view.SurfaceHolder;
 import android.view.SurfaceView;
@@ -170,5 +171,8 @@
         private double mY;
         
-        private ArrayList<Planet> planets;
+        public Object planetsLock;
+        
+        public ArrayList<Planet> planets;
+        public Planet planetSelected;
 
         public DrawingThread(SurfaceHolder surfaceHolder, Context context,
@@ -215,6 +219,9 @@
             mHeading = 0;
             mEngineFiring = true;
+        
+            planetsLock = new Object();
             
             planets = new ArrayList<Planet>();
+            planetSelected = null;
         }
 
@@ -463,5 +470,5 @@
             }
         }
-
+        
         /* Callback invoked when the surface dimensions change. */
         public void setSurfaceSize(int width, int height) {
@@ -475,17 +482,19 @@
                 Random rand = new Random();
 
-                for(int x=0; x<15; x++) {
-                	Planet p = new Planet(rand.nextInt(45)+5, rand.nextInt(mCanvasWidth), rand.nextInt(mCanvasHeight));
-                	
-                	if(Planet.collisionDetected(p, planets)) {
-                		x--;
-                	}else if(p.getX()-p.getRadius() < 0 || mCanvasWidth<=p.getX()+p.getRadius() ||
-                			 p.getY()-p.getRadius() < 0 || mCanvasHeight<=p.getY()+p.getRadius()) {
-                		x--;
-                	}else {
-                		p.setNumShips(rand.nextInt(150));
-                		p.setFaction(rand.nextInt(5));
-                		planets.add(p);
-                	}
+                synchronized(planetsLock) {
+	                for(int x=0; x<15; x++) {
+	                	Planet p = new Planet(rand.nextInt(45)+5, rand.nextInt(mCanvasWidth), rand.nextInt(mCanvasHeight));
+	                	
+	                	if(Planet.collisionDetected(p, planets)) {
+	                		x--;
+	                	}else if(p.getX()-p.getRadius() < 0 || mCanvasWidth<=p.getX()+p.getRadius() ||
+	                			 p.getY()-p.getRadius() < 0 || mCanvasHeight<=p.getY()+p.getRadius()) {
+	                		x--;
+	                	}else {
+	                		p.setNumShips(rand.nextInt(150));
+	                		p.setFaction(rand.nextInt(5));
+	                		planets.add(p);
+	                	}
+	                }
                 }
                 	
@@ -569,14 +578,15 @@
          */
         private void doDraw(Canvas canvas) {
-            // Draw the background image. Operations on the Canvas accumulate
-            // so this is like clearing the screen.
+        	canvas.drawBitmap(mBackgroundImage, 0, 0, null);
+        	synchronized(planetsLock) {
+        		for(Planet p : planets) {
+            		p.draw(canvas, mLinePaint, mTextPaint);
+            	}
+        	}
             
-        	//Log.i("Gencon", "doDraw called");
+        	if(planetSelected != null) {
+    			planetSelected.drawSelectionCircle(canvas);
+    		}
         	
-        	canvas.drawBitmap(mBackgroundImage, 0, 0, null);
-            for(Planet p : planets) {
-            	p.draw(canvas, mLinePaint, mTextPaint);
-            }
-            
             int yTop = mCanvasHeight - ((int) mY + mLanderHeight / 2);
             int xLeft = (int) mX - mLanderWidth / 2;
@@ -585,14 +595,8 @@
             canvas.save();
             canvas.rotate((float)mHeading, (float)mX, mCanvasHeight - (float)mY);
-            if (mMode == STATE_LOSE) {
-                //mCrashedImage.setBounds(xLeft, yTop, xLeft + mLanderWidth, yTop + mLanderHeight);
-                //mCrashedImage.draw(canvas);
-            } else if (mEngineFiring) {
-                //mFiringImage.setBounds(xLeft, yTop, xLeft + mLanderWidth, yTop + mLanderHeight);
-                //mFiringImage.draw(canvas);
-            } else {
-                mLanderImage.setBounds(xLeft, yTop, xLeft + mLanderWidth, yTop + mLanderHeight);
-                mLanderImage.draw(canvas);
-            }
+            
+            mLanderImage.setBounds(xLeft, yTop, xLeft + mLanderWidth, yTop + mLanderHeight);
+            mLanderImage.draw(canvas);
+                
             canvas.restore();
         }
@@ -655,6 +659,8 @@
             }
 
-            for(Planet p : planets) {
-            	p.update();
+            synchronized(planetsLock) {
+            	for(Planet p : planets) {
+            		p.update();
+            	}
             }
             
@@ -740,4 +746,25 @@
     }
 
+    @Override public boolean onTouchEvent(MotionEvent event) {
+    	Log.i("Gencon", "Detected touch event");
+    	
+    	synchronized(thread.planetsLock) {
+    		if(thread.planetSelected != null) {
+    			thread.planetSelected.unselect();
+    			thread.planetSelected = null;
+    		}
+    		
+	        for(Planet p : thread.planets) {
+	        	if(p.contains((int)event.getX(), (int)event.getY())) {
+	        		p.select();
+	        		thread.planetSelected = p;
+	        		break;
+	        	}
+	        }
+    	}
+        
+        return true;
+    }
+    
     /**
      * Fetches the animation thread corresponding to this LunarView.
Index: src/com/example/helloandroid/Planet.java
===================================================================
--- src/com/example/helloandroid/Planet.java	(revision b6a9b5f04771a141224e9fb6a56ffe9b8099efb9)
+++ src/com/example/helloandroid/Planet.java	(revision 5053d901dba69d758c57cb533a762e700f66a613)
@@ -3,9 +3,9 @@
 import java.util.ArrayList;
 
+import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Paint;
 import android.graphics.Paint.FontMetrics;
-import android.util.Log;
 
 public class Planet {
@@ -16,5 +16,7 @@
 	int faction;
 	int numShips;
-
+	boolean selected;
+	private Bitmap selection;
+	
 	public Planet(int radius, int x, int y) {
 		this.radius = radius;
@@ -23,6 +25,29 @@
 		faction = 0;
 		numShips = 0;
+		selected = false;
 		
 		regenRate = 0;	//change this to some expression / funcion call
+		
+		int size = getRadius()+15;
+		
+		selection = Bitmap.createBitmap(size*2, size*2, Bitmap.Config.ARGB_8888);
+		Canvas c = new Canvas(selection);
+		c.drawColor(Color.argb(0, 0, 0, 0));
+		
+		Paint p = new Paint();
+        p.setAntiAlias(true);
+		
+		p.setColor(Color.argb(255, 255, 255, 255));
+		c.drawCircle(size, size, getRadius()+11, p);
+		
+		p.setColor(Color.argb(255, 100, 100, 100));
+		c.drawCircle(size, size, getRadius()+5, p);
+		
+		for(int i=0; i<size*2; i++) {
+			for(int j=0; j<size*2; j++) {
+				if(selection.getPixel(i,j) == Color.argb(255, 100, 100, 100))
+					selection.setPixel(i, j, Color.argb(0, 0, 0, 0));
+			}
+		}
 	}
 	
@@ -43,4 +68,8 @@
 	}
 	
+	public boolean isSelected() {
+		return selected;
+	}
+	
 	public void setNumShips(int num) {
 		numShips = num;
@@ -51,8 +80,20 @@
 	}
 	
+	public void select() {
+		selected = true;
+	}
+	
+	public void unselect() {
+		selected = false;
+	}
+	
 	public void draw(Canvas canvas, Paint linePaint, Paint textPaint) {
 		FontMetrics metrics = textPaint.getFontMetrics();
 		
 		int c, prevC = linePaint.getColor();
+		
+		if(selected) {
+			//drawSelectionCircle(canvas);
+		}
 		
 		switch(faction) {
@@ -84,4 +125,10 @@
 	}
 	
+	public void drawSelectionCircle(Canvas canvas) {
+		int size = getRadius()+15;
+		
+		canvas.drawBitmap(selection, x-size, y-size, null);
+	}
+	
 	public void update() {
 		if(faction != 0)
@@ -92,4 +139,10 @@
 	public void sendFleet(Planet p, int numShips) {
 		
+	}
+	
+	public boolean contains(int x, int y) {
+		double dist = Math.sqrt(Math.pow(this.x-x, 2) + Math.pow(this.y-y, 2));
+		
+		return dist <= this.radius;
 	}
 	
