diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java
index 940c5f4a1fad9bb4bd30764f2c359bcebaaf906b..a1371cff1224ec92327af1575fa6332cf351d906 100644
--- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java
+++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/ChessTrackActivity.java
@@ -12,6 +12,7 @@ import uy.edu.fing.chesstrack.communication.Client;
 import uy.edu.fing.chesstrack.modulomodelador.Modelador;
 import uy.edu.fing.chesstrack.modulovision.Adquisicion;
 import uy.edu.fing.chesstrack.modulovision.Calibracion;
+import uy.edu.fing.chesstrack.modulovision.imgproc.BackgroundSupress;
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.content.DialogInterface;
@@ -24,50 +25,47 @@ import android.view.Menu;
 import android.view.MenuItem;
 import android.view.SurfaceView;
 import android.view.WindowManager;
-import android.widget.Button;
 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})$";
 	private static final String PORT_REGEX = "^(\\d{4,5})$";
-	private static final String welcomeMSG = ""
+	private static final String WELCOME_MSG = ""
 			+ "--------------------------------------------------------------------------\n"
 			+ "  .:: CHESSTRACK ::. seguimiento de una partida de Ajedrez\n"
 			+ "\n"
-			+ "                                           Aylen Ricca - Nicolas Furquez\n"
+			+ "                                           					 TImag 2014\n"
+			+ "                                           Nicolas Furquez - Aylen Ricca\n"
 			+ "--------------------------------------------------------------------------\n";
 
-	private CameraBridgeViewBase mOpenCvCameraView;
-	// private JavaCameraView mOpenCvCameraView;
-
-	private Adquisicion adq;
-	private Calibracion calibrar;
-	private Button btnCalibrar;
-	private Client ClientCommunication;
-	private MenuItem mItemCalibrar;
-	private MenuItem mItemServer;
-	// TODO es chancho pero ver luego
-	private Mat frame;
-	private boolean isUsed;
-	private boolean isCalibrada;
-
-	private final BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(
-			this) {
+	private CameraBridgeViewBase _mOpenCvCameraView;
+	// private JavaCameraView _mOpenCvCameraView;
+
+	private Adquisicion _adquisicion;
+	private BackgroundSupress _analizador;
+	private Client _client;
+	private MenuItem _mItemCalibrar;
+	private MenuItem _mItemServer;
+	private Mat _frame;
+	private boolean _isUsed;
+	private boolean _isCalibrada;
+
+	private final BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
+
 		@Override
 		public void onManagerConnected(int status) {
 			switch (status) {
 			case LoaderCallbackInterface.SUCCESS: {
 				Log.i(TAG, "OpenCV loaded successfully");
-				mOpenCvCameraView.enableView();
+				_mOpenCvCameraView.enableView();
 			}
-			break;
+				break;
 			default: {
 				super.onManagerConnected(status);
 			}
-			break;
+				break;
 			}
 		}
 	};
@@ -75,30 +73,24 @@ CvCameraViewListener {
 	@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
 	public void onCreate(Bundle savedInstanceState) {
 		Log.i(TAG, "called onCreate");
 		super.onCreate(savedInstanceState);
+
 		getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
 		setContentView(R.layout.chess_track_layout);
-		mOpenCvCameraView = (JavaCameraView) findViewById(R.id.chess_track_layout);
-		mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
-		mOpenCvCameraView.setCvCameraViewListener(this);
+		_mOpenCvCameraView = (JavaCameraView) findViewById(R.id.chess_track_layout);
+		_mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
+		_mOpenCvCameraView.setCvCameraViewListener(this);
 
 		Modelador.getInstance();
-		try {
-			isUsed = false;
-			isCalibrada = false;
-
-		} catch (Exception e) {
-			// TODO Auto-generated catch block
-			e.printStackTrace();
-		}
-		//		getServerIp();
+		//_analizador = new BackgroundSupress();
+		_isUsed = false;
+		_isCalibrada = false;
 	}
 
 	public void getServerIp() {
@@ -113,7 +105,8 @@ CvCameraViewListener {
 			@Override
 			public void onClick(DialogInterface dialog, int whichButton) {
 				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 {
@@ -125,13 +118,6 @@ CvCameraViewListener {
 			}
 		});
 
-		/*
-		 * alert.setNegativeButton("Cancel", new
-		 * DialogInterface.OnClickListener() { public void
-		 * onClick(DialogInterface dialog, int whichButton) { // no server
-		 * communication -- FIXME do not send info to client } });
-		 */
-
 		alert.show();
 	}
 
@@ -157,9 +143,9 @@ CvCameraViewListener {
 
 					int port = Integer.parseInt(value.toString());
 					Log.i(TAG, "PORT=" + port);
-					// ClientCommunication = Client.getInstance();
-					// ClientCommunication.EstablishConnection(ip, port);
-					// ClientCommunication.SendData(welcomeMSG);
+					_client = Client.getInstance();
+					_client.EstablishConnection(ip, port);
+					_client.SendData(WELCOME_MSG);
 				}
 			}
 		});
@@ -170,40 +156,34 @@ CvCameraViewListener {
 	@Override
 	public boolean onCreateOptionsMenu(Menu menu) {
 		Log.i(TAG, "called onCreateOptionsMenu");
-		mItemCalibrar = menu.add("Calibrar..");
-		mItemServer = menu.add("Conectar Server");
-
+		_mItemCalibrar = menu.add("Calibrar..");
+		_mItemServer = menu.add("Conectar Server");
 		return true;
 	}
 
 	@Override
 	public boolean onOptionsItemSelected(MenuItem item) {
 		Log.i(TAG, "Menu Item selected " + item);
-		if (item == mItemCalibrar) {
-			isUsed = true;
-			if (frame != null) {
-				if (Calibracion.getInstance().calibrar(frame)) {
-
-					ToneGenerator toneG = new ToneGenerator(
-							AudioManager.STREAM_ALARM, 50);
-					toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD,
-							200); // 200 is duration in ms
+		if (item == _mItemCalibrar) {
+			_isUsed = true;
+			if (_frame != null) {
+				if (Calibracion.getInstance().calibrar(_frame)) {
+
+					ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 50);
+					toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD,200); //ms
 					try {
-						adq = new Adquisicion();
+						this._adquisicion = new Adquisicion();
 					} catch (Exception e) {
-						// TODO Auto-generated catch block
 						e.printStackTrace();
 					}
-					isCalibrada = true;
+					_isCalibrada = true;
 				} else {
-					ToneGenerator toneG = new ToneGenerator(
-							AudioManager.STREAM_ALARM, 50);
-					toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD,
-							700); // 200 is duration in ms
+					ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 50);
+					toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD,700);
 				}
 			}
-			isUsed = false;
-		}else if(item == mItemServer){
+			_isUsed = false;
+		} else if (item == _mItemServer) {
 			getServerIp();
 		}
 		return true;
@@ -212,19 +192,19 @@ CvCameraViewListener {
 	@Override
 	public void onPause() {
 		super.onPause();
-		if (mOpenCvCameraView != null) {
-			mOpenCvCameraView.disableView();
+		if (_mOpenCvCameraView != null) {
+			_mOpenCvCameraView.disableView();
 		}
 	}
 
 	@Override
 	public void onDestroy() {
 		super.onDestroy();
-		if (mOpenCvCameraView != null) {
-			mOpenCvCameraView.disableView();
+		if (_mOpenCvCameraView != null) {
+			_mOpenCvCameraView.disableView();
 		}
-		if (this.ClientCommunication != null) {
-			this.ClientCommunication.Stop();
+		if (this._client != null) {
+			this._client.Stop();
 		}
 	}
 
@@ -239,21 +219,20 @@ CvCameraViewListener {
 	@Override
 	public Mat onCameraFrame(Mat inputFrame) {
 		// TODO MANEJAR ESTADOS
-		if (!isUsed) {
-			frame = inputFrame;
+		if (!_isUsed) {
+			_frame = inputFrame;	// FIXME - para qe lo guardo ??
 		}
 
-		if (isCalibrada) {
-
-			Log.i(TAG, "calibrada");
+		if (_isCalibrada) {
+			Log.i(TAG, "new _frame - calibrada");
 
-			inputFrame = adq.processFrame(inputFrame);
-			Modelador.getInstance().dividirTablero(inputFrame);
-			return Modelador.getInstance().dibujarEscaquesSobel();
-			// return inputFrame;
+			inputFrame = _adquisicion.processFrame(inputFrame);
+			if (_estado == ESTABLE){
+				//Modelador.getInstance().dividirTablero(inputFrame);
+				return Modelador.getInstance().dibujarEscaquesSobel();
+			}
+			return inputFrame;
 		}
-
 		return inputFrame;
 	}
-
 }
diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/Manager.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/Manager.java
new file mode 100644
index 0000000000000000000000000000000000000000..b465c169f6083dcc27950d3339c9abea0e53d612
--- /dev/null
+++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/Manager.java
@@ -0,0 +1,28 @@
+package uy.edu.fing.chesstrack.modulovision;
+
+public class Manager {
+
+	private static final String TAG = "MANAGER";
+	private static Manager _instance;
+	private static int _estado;
+
+	protected Manager() {
+
+	}
+
+	public static Manager getInstance() {
+		if (_instance == null) {
+			_instance = new Manager();
+		}
+		return _instance;
+	}
+
+	public static int get_estado() {
+		return _estado;
+	}
+
+	public static void set_estado(int _estado) {
+		Manager._estado = _estado;
+	}
+
+}
diff --git a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/BackgroundSupress.java b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/BackgroundSupress.java
index 697c72730d70804dde9c720ea56bbf23efec8ba2..b952e1e235db1991aec6461aeb10b9ea9b223ff2 100644
--- a/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/BackgroundSupress.java
+++ b/ProyectoAndroid/ChessTrack/src/uy/edu/fing/chesstrack/modulovision/imgproc/BackgroundSupress.java
@@ -1,10 +1,5 @@
 package uy.edu.fing.chesstrack.modulovision.imgproc;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-import java.util.Vector;
-
 import org.opencv.core.Core;
 import org.opencv.core.CvType;
 import org.opencv.core.Mat;
@@ -13,71 +8,109 @@ import org.opencv.core.Point;
 import org.opencv.core.Rect;
 import org.opencv.core.Scalar;
 import org.opencv.core.Size;
-import org.opencv.video.BackgroundSubtractorMOG;
 import org.opencv.video.BackgroundSubtractorMOG2;
 import org.opencv.imgproc.*;
 
-import uy.edu.fing.chesstrack.communication.Client;
+import uy.edu.fing.chesstrack.ChessTrackActivity;
+import uy.edu.fing.chesstrack.modulomodelador.Modelador;
+import uy.edu.fing.chesstrack.modulovision.Calibracion;
+import uy.edu.fing.chesstrack.modulovision.Manager;
 import android.graphics.SumPathEffect;
-import android.media.AudioManager;
-import android.media.ToneGenerator;
 import android.util.Log;
 
 
 public class BackgroundSupress implements ImgProcInterface {
 
 	private static final String TAG = "CHESSTRACK::BackgroundSupress";
-	private static int e = 0;
-	private final  Mat fgMaskMOG;
-	private Mat fgMaskMOG2;
-	private final Mat morphKernel;
-	private final BackgroundSubtractorMOG pMOG;
-	private BackgroundSubtractorMOG2 pMOG2;
+	private static final int OCLUSION = 1;
+	private static final int ESTABLE = 2;
+	private static final int TRANSICION = 0;
+	private static final int START = -1;
+
+	private Mat _fgMaskMOG2;
+	private BackgroundSubtractorMOG2 _pMOG2;
+	private final Mat _morphKernel;
+	//private Client _communicator;
+	private int _estadoANTERIOR;
+	private int _estadoACTUAL;
 	//private final List<MatOfPoint> contours;
-	private Client communicator;
-	private int estadoANTERIOR = 0;
-	private int estadoACTUAL = 0;
 
 	public BackgroundSupress() {
 		super();
-		morphKernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(3,3));
-		fgMaskMOG = new Mat(4,1,CvType.CV_8UC1);
-		fgMaskMOG2 = new Mat(4,1,CvType.CV_8UC1);
-		pMOG = new BackgroundSubtractorMOG(); //MOG approach
-		pMOG2 = new BackgroundSubtractorMOG2(); //MOG approach
-		Log.i(TAG, "at background supress constructor");
-		//contours = new ArrayList<MatOfPoint>();
+		Log.i(TAG, "constructor INI");
 		
-		communicator = Client.getInstance();
+		_morphKernel = Imgproc.getStructuringElement(Imgproc.MORPH_RECT,  new Size(3,3));
+		_fgMaskMOG2 = new Mat(4,1,CvType.CV_8UC1);
+		_pMOG2 = new BackgroundSubtractorMOG2();
+		_estadoACTUAL = START;
+		_estadoANTERIOR = START;
+		//_communicator = Client.getInstance();
+		//contours = new ArrayList<MatOfPoint>();
+
+		Log.i(TAG, "constructor FIN");
 	}
 
 	@Override
 	public Mat procesarImagen(Mat inputFrame) {
-		Log.i(TAG, "BackgroundS ");
+		Log.i(TAG, "procesar ");
+
+		Mat ret = Mat.zeros(Calibracion.getInstance().getImagenCalibrada().size(), CvType.CV_8UC4);
+		Rect roi = Calibracion.getRectPOI();
+		Log.i(TAG, "ROI" + roi.size());
+		
+		Mat region = ret.submat(roi);
+		
+		Mat working = inputFrame.submat(roi);
 
-		Mat copy = new Mat(inputFrame.size(),CvType.CV_8UC3);
-		inputFrame.convertTo(copy, CvType.CV_8UC3);
-		Imgproc.cvtColor(inputFrame, copy, Imgproc.COLOR_BGRA2BGR);
+//		Mat copy = new Mat(submat.size(),CvType.CV_8UC3);;
+//		submat.convertTo(copy, CvType.CV_8UC3);
 
-		pMOG.apply(copy, fgMaskMOG);
-		pMOG2.apply(copy, fgMaskMOG2,0);
-		Log.i(TAG, "Apply pMOG");
+		//Mat copy = new Mat(inputFrame.size(),CvType.CV_8UC3);
+		//inputFrame.convertTo(copy, CvType.CV_8UC3);
+		//Imgproc.cvtColor(inputFrame, copy, Imgproc.COLOR_BGRA2BGR);
 
-		Imgproc.erode(fgMaskMOG2, fgMaskMOG2, morphKernel);
+		_pMOG2.apply(working, _fgMaskMOG2);
+		Log.i(TAG, "Apply pMOG2" + _fgMaskMOG2.size());
+
+		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);
+		//Imgproc.dilate(_fgMaskMOG2, _fgMaskMOG2, _morphKernel);
 		//Log.i(TAG, "Apply dilate");
 
-		Scalar suma = Core.sumElems(fgMaskMOG2);
+		Scalar suma = Core.sumElems(_fgMaskMOG2);
 		Log.i(TAG, "SUMA = " + suma);
 
+		_estadoANTERIOR = _estadoACTUAL;
+		if (suma.val[0] > 1250000){
+			Log.i(TAG, "MANO !!!");
+
+            _estadoACTUAL = OCLUSION;
+			//_communicator.SendData("OCLUSION\n");
+            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
+				Manager.set_estado(ESTABLE);
+            }
+
+            //_communicator.SendData("ESTABLE\n");
+        }
+
 		/*double maxArea = 0;
 		MatOfPoint largestContour = null;
-		Imgproc.findContours(fgMaskMOG2, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_TC89_L1);
+		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) {
@@ -93,33 +126,7 @@ public class BackgroundSupress implements ImgProcInterface {
 			toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); // 200 is duration in ms
 		}*/
 
-		if (suma.val[0] > 100000){
-            estadoANTERIOR = estadoACTUAL;
-            estadoACTUAL = 1;
-
-			Log.i(TAG, "MANO !!!");
-			communicator.SendData("1\n");
-            Core.putText(fgMaskMOG2, "MANO !!!", new Point(50, 50),Core.FONT_HERSHEY_SIMPLEX, 0.8 , new Scalar(255,255,0));
-//			ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 50);
-//			toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); // 200 is duration in ms
-        } else {
-            estadoANTERIOR = estadoACTUAL;
-            if (estadoANTERIOR == 1){
-                // estado transicion
-            	
-                estadoACTUAL = 3;
-            }
-            if (estadoANTERIOR == 3){
-                // estado estable
-                estadoACTUAL = 2;
-                pMOG2 = new BackgroundSubtractorMOG2(); //MOG2 approach
-            }
-			Log.i(TAG, "ESTABLE !!!");
-			communicator.SendData("0\n");
-            Core.putText(fgMaskMOG2, "ESTABLE !!!", new Point(50, 50),Core.FONT_HERSHEY_SIMPLEX, 0.5 , new Scalar(255,255,0));
-        }
-
-		/*Imgproc.findContours(fgMaskMOG2, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_NONE);
+		/*Imgproc.findContours(_fgMaskMOG2, contours, new Mat(), Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_NONE);
 
 		for(int idx = 0; idx < contours.size(); idx++)
 	    {
@@ -129,16 +136,17 @@ public class BackgroundSupress implements ImgProcInterface {
 	    		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);
+	    		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 Background Sss");
-		return fgMaskMOG2;
-	}
 
+		Log.i(TAG, "END");
+		Imgproc.cvtColor(_fgMaskMOG2, region, Imgproc.COLOR_GRAY2RGBA,4);
+		return ret;
+	}
 }