diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java
index 2631d289e49dfa8e9d460e5994a7faa96caa949e..ca640a73f6da632d360aaf77c5596094f2abcd64 100644
--- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java
+++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java
@@ -92,6 +92,7 @@ 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 !!!! 
 				Editable value = input.getText();
 				if (value == null || value.toString().equals("")
 						|| !value.toString().matches(IPV4_REGEX)) {
diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/communication/Client.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/communication/Client.java
index 4645609897eaa13110c1949ad4a0e0828bed87c4..7816c24c74072fe05a1f02522373a8612d522086 100644
--- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/communication/Client.java
+++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/communication/Client.java
@@ -13,8 +13,8 @@ public class Client {
 	private static Client _clientInstance;
 
 	private Socket serverSocket;
-	private int _serverPort;
-	private String _serverIp;
+	private int _serverPort = 5556;
+	private String _serverIp = "192.168.1.101";
 
 	//private BufferedReader input;
 	private DataOutputStream output;
@@ -32,8 +32,8 @@ public class Client {
 
 	public void EstablishConnection(String serverIp, int serverPort) {
 		Log.i(TAG, "init client-server communication");
-		this._serverIp = serverIp;
-		this._serverPort = serverPort;
+		//this._serverIp = serverIp;
+		//this._serverPort = serverPort;
 
 		try {
 			Log.i(TAG, "Server on " + this._serverIp + ":" + _serverPort);
diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulomodelador/Modelador.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulomodelador/Modelador.java
index 1a45bf4d6d57f1481066eb343c3dd1a43e648cfb..a21daf892926641fda9ee8ae9e45b8e7866610c0 100644
--- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulomodelador/Modelador.java
+++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulomodelador/Modelador.java
@@ -22,7 +22,7 @@ public class Modelador {
 	//private static Modelador instance;
 
 
-	private Modelador(){
+	public Modelador(){
 		tablero = Mat.zeros(new Size(8, 8), CvType.CV_8UC1);
 		escaques = new Mat[CANT_FILAS][CANT_FILAS];
 
@@ -140,7 +140,7 @@ public class Modelador {
 				if (cant_pix_white > (50) ){
 					Imgproc.cvtColor(mIntermediateMat, subm, Imgproc.COLOR_GRAY2RGBA,4);
 				}else{
-					escaques[i][j].copyTo(subm);
+					Imgproc.cvtColor(escaques[i][j], subm, Imgproc.COLOR_GRAY2RGBA,4);
 				}
 
 			}
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 4467dc5b0d53965ed325815e5aaa639883d5e604..3caca7ea184076054147be583b15a122d7256ac6 100644
--- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/DetectorOclusion.java
+++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/DetectorOclusion.java
@@ -3,7 +3,6 @@ package uy.edu.fing.chesstrack.modulovision;
 import org.opencv.core.Core;
 import org.opencv.core.CvType;
 import org.opencv.core.Mat;
-import org.opencv.core.Point;
 import org.opencv.core.Scalar;
 import org.opencv.core.Size;
 import org.opencv.imgproc.*;
@@ -11,36 +10,35 @@ import org.opencv.video.BackgroundSubtractorMOG2;
 
 import android.util.Log;
 
-
 public class DetectorOclusion {
 
 	private static final String TAG = "CHESSTRACK::BackgroundSupress";
-	private static final int OCLUSION = 1;
-	private static final int ESTABLE = 2;
-	private static final int TRANSICION = 0;
+	private static final int OCLUSION = 0;
+	private static final int ESTABLE = 1;
+	private static final int TRANSICION = 2;
 	private static final int START = -1;
 
 	private Mat _fgMaskMOG2;
+	private Mat _resultado;
 	private BackgroundSubtractorMOG2 _pMOG2;
 	private final Mat _morphKernel;
 	private int _estadoANTERIOR;
 	private int _estadoACTUAL;
-	//private final List<MatOfPoint> contours;
 
 	public DetectorOclusion() {
 		super();
 		Log.i(TAG, "constructor INI");
-		
-		_morphKernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT,  new Size(3,3));
-		_fgMaskMOG2 = new Mat(4,1,CvType.CV_8UC1);
+
+		_morphKernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT,new Size(3, 3));
+		_fgMaskMOG2 = new Mat(4, 1, CvType.CV_8UC1);
 		_pMOG2 = new BackgroundSubtractorMOG2();
 		_estadoACTUAL = START;
-		//contours = new ArrayList<MatOfPoint>();
+		_resultado = new Mat();
 
 		Log.i(TAG, "constructor FIN");
 	}
 
-	public Mat procesarImagen(Mat inputFrame) {
+	public boolean hayNuevoTableroValido(Mat inputFrame) {
 		Log.i(TAG, "Procesar!");
 
 		Log.i(TAG, "Region SIZE=" + inputFrame.size());
@@ -49,76 +47,70 @@ public class DetectorOclusion {
 
 		Imgproc.erode(_fgMaskMOG2, _fgMaskMOG2, _morphKernel);
 		Log.i(TAG, "Apply erode");
-		
-		Imgproc.threshold(_fgMaskMOG2, _fgMaskMOG2, 200, 255, Imgproc.THRESH_BINARY);
+
+		Imgproc.threshold(_fgMaskMOG2, _fgMaskMOG2, 200, 255,Imgproc.THRESH_BINARY);
 		Log.i(TAG, "Apply threshold");
 
-		//Imgproc.dilate(_fgMaskMOG2, _fgMaskMOG2, _morphKernel);
-		//Log.i(TAG, "Apply dilate");
+		// Imgproc.dilate(_fgMaskMOG2, _fgMaskMOG2, _morphKernel);
+		// Log.i(TAG, "Apply dilate");
 
 		Scalar suma = Core.sumElems(_fgMaskMOG2);
 		Log.i(TAG, "SUMA = " + suma);
 
 		_estadoANTERIOR = _estadoACTUAL;
-		if (suma.val[0] > 1250000){
+		if (suma.val[0] > 1250000) {
 			Log.i(TAG, "MANO !!!");
 
-            _estadoACTUAL = OCLUSION;
-            Core.putText(_fgMaskMOG2, "MANO !!!", new Point(20, 20),Core.FONT_HERSHEY_SIMPLEX, 0.8 , new Scalar(255,255,0));
+			_estadoACTUAL = OCLUSION;
+			/*Core.putText(_fgMaskMOG2, "MANO !!!", new Point(20, 20),
+					Core.FONT_HERSHEY_SIMPLEX, 0.8, new Scalar(255, 255, 0));*/
 
 		} else {
 			Log.i(TAG, "ESTABLE !!!");
-			if (_estadoANTERIOR == OCLUSION){
-	            Core.putText(_fgMaskMOG2, "TRANSI !!!", new Point(20, 20),Core.FONT_HERSHEY_SIMPLEX, 0.8 , new Scalar(255,255,0));
-                _estadoACTUAL = TRANSICION;
-            }
-            if (_estadoANTERIOR == TRANSICION){
-	            Core.putText(_fgMaskMOG2, "ESTABLE !!!", new Point(20, 20),Core.FONT_HERSHEY_SIMPLEX, 0.8 , new Scalar(255,255,0));
-                _estadoACTUAL = ESTABLE;
-                _pMOG2 = new BackgroundSubtractorMOG2(); //MOG2 approach
-            }
-        }
-
-		/*double maxArea = 0;
-		MatOfPoint largestContour = null;
-		Imgproc.findContours(_fgMaskMOG2, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_TC89_L1);
-		for (MatOfPoint contour : contours) {
-		    double area = Imgproc.contourArea(contour);
-		    if (area > maxArea) {
-		        maxArea = area;
-		        largestContour = contour;
-		    }
+			if (_estadoANTERIOR == OCLUSION) {
+				/*Core.putText(_fgMaskMOG2, "TRANSI !!!", new Point(20, 20),
+						Core.FONT_HERSHEY_SIMPLEX, 0.8, new Scalar(255, 255, 0));*/
+				_estadoACTUAL = TRANSICION;
+			}
+			if (_estadoANTERIOR == TRANSICION) {
+				/*Core.putText(_fgMaskMOG2, "ESTABLE !!!", new Point(20, 20),
+						Core.FONT_HERSHEY_SIMPLEX, 0.8, new Scalar(255, 255, 0));*/
+				_estadoACTUAL = ESTABLE;
+				_pMOG2 = new BackgroundSubtractorMOG2(); // MOG2 approach
+			}
 		}
-		Log.i(TAG, "ESTABLE !!!" + maxArea);
-		if ((largestContour != null) && (maxArea > 10000)){
-			Log.i(TAG, "MANO !!!" + maxArea);
-			Rect boundingRect = Imgproc.boundingRect(largestContour);
-			ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 50);
-			toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); // 200 is duration in ms
-		}*/
-
-		/*Imgproc.findContours(_fgMaskMOG2, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_NONE);
-
-		for(int idx = 0; idx < contours.size(); idx++)
-	    {
-	    	double area = Imgproc.contourArea(contours.get(idx));
-	    	Log.i(TAG, "CONTOUR = AREA: " + area);
-	    	if ((area > 15000) && (area < 70000)){
-	    		Log.i(TAG, "DRAW !!! : " + area);
-	        	Scalar color = new Scalar(255,127,127);
-	    		Rect r = Imgproc.boundingRect(contours.get(idx));
-	    		Log.i(TAG, "3 at backgroundS "+(_fgMaskMOG2.type() == CvType.CV_8UC1));
-	    		Core.rectangle(_fgMaskMOG2, r.tl(), r.br(), color, 2, 8, 0);
-	        	//Imgproc.drawContours(_fgMaskMOG2, contours, idx, color);
-	    	}
-	    }
-
-		contours.clear();*/
 
 		Log.i(TAG, "END");
-		Mat region = new Mat();
-		Imgproc.cvtColor(_fgMaskMOG2, region, Imgproc.COLOR_GRAY2RGBA,4);
-		return region;
+		//Imgproc.cvtColor(_fgMaskMOG2, _resultado, Imgproc.COLOR_GRAY2RGBA, 4);
+		return (_estadoACTUAL == ESTABLE);
 	}
 }
 
+/*
+ * double maxArea = 0; MatOfPoint largestContour = null;
+ * Imgproc.findContours(_fgMaskMOG2, contours, new Mat(), Imgproc.RETR_LIST,
+ * Imgproc.CHAIN_APPROX_TC89_L1); for (MatOfPoint contour : contours) { double
+ * area = Imgproc.contourArea(contour); if (area > maxArea) { maxArea = area;
+ * largestContour = contour; } } Log.i(TAG, "ESTABLE !!!" + maxArea); if
+ * ((largestContour != null) && (maxArea > 10000)){ Log.i(TAG, "MANO !!!" +
+ * maxArea); Rect boundingRect = Imgproc.boundingRect(largestContour);
+ * ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 50);
+ * toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); // 200 is
+ * duration in ms }
+ */
+
+/*
+ * Imgproc.findContours(_fgMaskMOG2, contours, new Mat(), Imgproc.RETR_LIST,
+ * Imgproc.CHAIN_APPROX_NONE);
+ * 
+ * for(int idx = 0; idx < contours.size(); idx++) { double area =
+ * Imgproc.contourArea(contours.get(idx)); Log.i(TAG, "CONTOUR = AREA: " +
+ * area); if ((area > 15000) && (area < 70000)){ Log.i(TAG, "DRAW !!! : " +
+ * area); Scalar color = new Scalar(255,127,127); Rect r =
+ * Imgproc.boundingRect(contours.get(idx)); Log.i(TAG,
+ * "3 at backgroundS "+(_fgMaskMOG2.type() == CvType.CV_8UC1));
+ * Core.rectangle(_fgMaskMOG2, r.tl(), r.br(), color, 2, 8, 0);
+ * //Imgproc.drawContours(_fgMaskMOG2, contours, idx, color); } }
+ * 
+ * contours.clear();
+ */
\ No newline at end of file
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 0b3e650328f65a285b0c1507eae8c1c8b21c2898..e30c73569e36a879dd571e8680cefcfdd1ef3ee2 100644
--- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/Manager.java
+++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/Manager.java
@@ -7,6 +7,7 @@ import android.media.AudioManager;
 import android.media.ToneGenerator;
 import android.util.Log;
 import uy.edu.fing.chesstrack.communication.Client;
+import uy.edu.fing.chesstrack.modulomodelador.Modelador;
 
 public class Manager {
 
@@ -29,10 +30,11 @@ public class Manager {
 	private static Adquisicion _adquisicion;
 	private static Client _client;
 	private static DetectorOclusion _detectorOclusion;
+	private static Modelador _modelador;
 	private boolean _debug;
 
 	protected Manager() {
-		_estado = ARMANDO_TABLERO;
+		_estado = JUGANDO;
 		_salida = NOT;
 		_adquisicion = null;
 		_client = null;
@@ -62,12 +64,37 @@ public class Manager {
 		_salida = OK;
 	}
 
+	public boolean calibrar(Mat frame) {
+		Log.i(TAG, "Calibrando");
+		if (Calibracion.getInstance().calibrar(frame)) {
+			ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM,
+					50);
+			toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); // ms
+			if (_salida == OK) {
+				_client.SendData("FIN calibrar\n . . . armando tablero!\n");
+			}
+			try {
+				_adquisicion = new Adquisicion();
+				_detectorOclusion = new DetectorOclusion();
+				_modelador = new Modelador();
+			} catch (Exception e) {
+				e.printStackTrace();
+				return false;
+			}
+			return true;
+		}
+		Log.i(TAG, "No calibrado");
+		ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 50);
+		toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 700);
+		return false;
+	}
+
 	public Mat processFrame(Mat inputFrame) {
 		Log.i(TAG, "Acondicionamiento");
 		Mat region = _adquisicion.processFrame(inputFrame);
 
-		Log.i(TAG, "TYPE=" + (inputFrame.type()==CvType.CV_8UC4));
-		Log.i(TAG, "CHANNEL=" + (inputFrame.channels()==4));
+		Log.i(TAG, "TYPE=" + (inputFrame.type() == CvType.CV_8UC4));
+		Log.i(TAG, "CHANNEL=" + (inputFrame.channels() == 4));
 
 		switch (_estado) {
 		case ARMANDO_TABLERO:
@@ -78,52 +105,33 @@ public class Manager {
 			// Modelador -> genera la imagen 0-1 y se la pasa al manager
 			// Modelador.Validar
 			//
-			region = _detectorOclusion.procesarImagen(region);
 			// cuando paso a estado jugando mando al socket si salida==OK
+
 			break;
 		case JUGANDO:
 			Log.i(TAG, "Jugando");
-			// respuesta: {MANO - NO MANO}
-			// SI mano --> nada
-			// SINO matriz-0-1
-
-			// BackgoundSupress -> busca la mano y retorna si o no
-			// Modelador -> genera la imagen 0-1 y se la pasa al manager
-			// mando al cliente la MATRIZ !!
+			if (_detectorOclusion.hayNuevoTableroValido(region)) {
+				Log.i(TAG, "Tablero Valido\n");
+				// llamar al modelador
+				Mat aux = _modelador.getMatrizFichas(region);
+				Log.i(TAG, "MATRIZ=" + aux.dump());
+				region = _modelador.dibujarEscaquesSobel();
+
+				if (_salida == OK) {
+					_client.SendData("Nuevo Tablero Valido!\n");
+					_client.SendData(aux.dump().concat("\n"));
+				}
+			}
 			break;
 		}
-		
+
 		if (_debug) {
 			Mat tmp = Mat.zeros(inputFrame.size(), CvType.CV_8UC4);
 			Mat matTMP = tmp.submat(Calibracion.getRectROI());
 			region.copyTo(matTMP);
 			return tmp;
-		} 
-		return inputFrame;
-	}
-
-	public boolean calibrar(Mat frame) {
-		Log.i(TAG, "Calibrando");
-		if (Calibracion.getInstance().calibrar(frame)) {
-			ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM,
-					50);
-			toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); // ms
-			if (_salida == OK) {
-				_client.SendData("FIN calibrar\n . . . armando tablero!");
-			}
-			try {
-				_adquisicion = new Adquisicion();
-				_detectorOclusion = new DetectorOclusion();
-			} catch (Exception e) {
-				e.printStackTrace();
-				return false;
-			}
-			return true;
 		}
-		Log.i(TAG, "No calibrado");
-		ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 50);
-		toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 700);
-		return false;
+		return inputFrame;
 	}
 
 	public void destroy() {
diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/Homografia.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/Homografia.java
index b79be6f0a45585eaad0737bc06489d1d1140907f..e4d37c569470d8e58ed8bd0d912a7418a0938d45 100644
--- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/Homografia.java
+++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/Homografia.java
@@ -75,12 +75,6 @@ public class Homografia implements ImgProcInterface {
 
 		// hace la homografia con la matriz calculada en un ppio
 		Imgproc.warpPerspective(inputFrame,inputFrame, _matrizTransformada, inputFrame.size());
-
-//		Mat subMat = inputFrame.submat(_rectROI);
-//		Mat tmp = Mat.zeros(inputFrame.size(), CvType.CV_8UC4);
-//		Mat matTMP = tmp.submat(_rectROI);
-//		subMat.copyTo(matTMP);
-
 		Mat tmp = Mat.zeros(_rectROI.size(), CvType.CV_8UC4);
 		(inputFrame.submat(_rectROI)).copyTo(tmp);