diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java
index ca640a73f6da632d360aaf77c5596094f2abcd64..f5f128e4ee70a18005fad3d400dc4c567c42f1cd 100644
--- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java
+++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java
@@ -21,8 +21,7 @@ import android.view.SurfaceView;
 import android.view.WindowManager;
 import android.widget.EditText;
 
-public class ChessTrackActivity extends Activity implements
-		CvCameraViewListener {
+public class ChessTrackActivity extends Activity implements CvCameraViewListener {
 
 	private static final String TAG = "CHESSTRACK::Activity";
 	private static final String IPV4_REGEX = "^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$";
@@ -39,10 +38,10 @@ public class ChessTrackActivity extends Activity implements
 	private Manager _manager;
 	private MenuItem _mItemCalibrar;
 	private MenuItem _mItemServer;
+	private MenuItem _mItemJugar;
 	private int _estado;
 
-	private final BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(
-			this) {
+	private final BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
 
 		@Override
 		public void onManagerConnected(int status) {
@@ -51,11 +50,11 @@ public class ChessTrackActivity extends Activity implements
 				Log.i(TAG, "OpenCV loaded successfully");
 				_mOpenCvCameraView.enableView();
 			}
-				break;
+			break;
 			default: {
 				super.onManagerConnected(status);
 			}
-				break;
+			break;
 			}
 		}
 	};
@@ -63,8 +62,7 @@ public class ChessTrackActivity extends Activity implements
 	@Override
 	public void onResume() {
 		super.onResume();
-		OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this,
-				mLoaderCallback);
+		OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_9, this, mLoaderCallback);
 	}
 
 	@Override
@@ -92,10 +90,10 @@ public class ChessTrackActivity extends Activity implements
 		alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
 			@Override
 			public void onClick(DialogInterface dialog, int whichButton) {
-				_manager.setConnection("192.168.1.101", 5555); //FIXME DELETE !!!! 
+				_manager.setConnection("192.168.1.101", 5555); // FIXME DELETE
+				// !!!!
 				Editable value = input.getText();
-				if (value == null || value.toString().equals("")
-						|| !value.toString().matches(IPV4_REGEX)) {
+				if (value == null || value.toString().equals("") || !value.toString().matches(IPV4_REGEX)) {
 					Log.i(TAG, "INPUT= not valid IP" + value.toString());
 					getServerIp();
 				} else {
@@ -123,8 +121,7 @@ public class ChessTrackActivity extends Activity implements
 			public void onClick(DialogInterface dialog, int whichButton) {
 				Editable value = input.getText();
 				Log.i(TAG, "INPUT=" + value.toString());
-				if (value == null || value.toString().equals("")
-						|| !value.toString().matches(PORT_REGEX)) {
+				if (value == null || value.toString().equals("") || !value.toString().matches(PORT_REGEX)) {
 					Log.i(TAG, "INPUT= not valid PORT" + value.toString());
 					getServerPort(ip);
 				} else {
@@ -145,6 +142,7 @@ public class ChessTrackActivity extends Activity implements
 		Log.i(TAG, "called onCreateOptionsMenu");
 		_mItemCalibrar = menu.add("Calibrar..");
 		_mItemServer = menu.add("Conectar Server");
+		_mItemJugar = menu.add("Jugar!!!");
 		return true;
 	}
 
@@ -157,6 +155,9 @@ public class ChessTrackActivity extends Activity implements
 			}
 		} else if (item == _mItemServer) {
 			getServerIp();
+		} else if (item == _mItemJugar) {
+			_estado = JUGAR;
+
 		}
 		return true;
 	}
@@ -195,15 +196,16 @@ public class ChessTrackActivity extends Activity implements
 			case CALIBRAR:
 				Log.i(TAG, "calibrando...");
 				if (_manager.calibrar(inputFrame)) {
-					_estado = JUGAR;
+					//					_estado = JUGAR;
+					_estado = IDLE;
 				} else {
 					_estado = IDLE;
 				}
 				break;
 			case JUGAR:
 				Log.i(TAG, "jugando...");
-				return _manager.processFrame(inputFrame);
-				// break;
+				_manager.processFrame(inputFrame);
+				break;
 			case IDLE:
 				break;
 			}
diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/DetectorOclusion.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/DetectorOclusion.java
index daa47d24eb9cbdfcdd162e3a2f2e029834d416b3..9ee874593e2ad7b8c05c1cc561035062d2e694c3 100644
--- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/DetectorOclusion.java
+++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/DetectorOclusion.java
@@ -5,7 +5,7 @@ import org.opencv.core.CvType;
 import org.opencv.core.Mat;
 import org.opencv.core.Scalar;
 import org.opencv.core.Size;
-import org.opencv.imgproc.*;
+import org.opencv.imgproc.Imgproc;
 import org.opencv.video.BackgroundSubtractorMOG2;
 
 import android.util.Log;
@@ -19,7 +19,7 @@ public class DetectorOclusion {
 	private static final int ENVIAR_TABLERO = 3;
 	private static final int START = -1;
 
-	private Mat _fgMaskMOG2;
+	private final Mat _fgMaskMOG2;
 	private Mat _resultado;
 	private BackgroundSubtractorMOG2 _pMOG2;
 	private final Mat _morphKernel;
@@ -48,6 +48,9 @@ public class DetectorOclusion {
 	}
 
 	public boolean hayNuevoTableroValido(Mat inputFrame) {
+		if (_estadoACTUAL == START){
+			_pMOG2 = new BackgroundSubtractorMOG2(); // MOG2 approach
+		}
 		Log.i(TAG, "Procesar!");
 
 		Log.i(TAG, "Region SIZE=" + inputFrame.size());
diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/Manager.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/Manager.java
index 40e50b3262b976864d0c84de86b4336641fad370..5790a3889c86819b32453f54adcf923ce46069e5 100644
--- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/Manager.java
+++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/Manager.java
@@ -38,7 +38,7 @@ public class Manager {
 		_salida = NOT;
 		_adquisicion = null;
 		_client = null;
-		_debug = true;
+		_debug = false;
 	}
 
 	public static Manager getInstance() {
@@ -110,18 +110,18 @@ public class Manager {
 			break;
 		case JUGANDO:
 			Log.i(TAG, "Jugando");
-			//if (_detectorOclusion.hayNuevoTableroValido(region)) {
+			if (_detectorOclusion.hayNuevoTableroValido(region)) {
 				Log.i(TAG, "Tablero Valido");
 				// llamar al modelador
 				Mat aux = _modelador.getMatrizFichas(region);
 				Log.i(TAG, "MATRIZ=" + aux.dump());
-				region = _modelador.dibujarEscaquesSobel(2);
+				//region = _modelador.dibujarEscaquesSobel(2);
 
 				if (_salida == OK) {
 					_client.SendData("Nuevo Tablero Valido!\n");
 					_client.SendData(" ".concat(aux.dump().concat("\n")));
 				}
-			//}
+			}
 			break;
 		}