diff --git a/src/main/java/net/floodlightcontroller/simpleft/FT.java b/src/main/java/net/floodlightcontroller/simpleft/FT.java
new file mode 100644
index 0000000000000000000000000000000000000000..cd2c1b961a2bdee0b7c4b85f0693e54f3593edd3
--- /dev/null
+++ b/src/main/java/net/floodlightcontroller/simpleft/FT.java
@@ -0,0 +1,331 @@
+package net.floodlightcontroller.simpleft;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+import org.projectfloodlight.openflow.protocol.OFMessage;
+import org.projectfloodlight.openflow.protocol.OFType;
+import org.sdnplatform.sync.IStoreClient;
+import org.sdnplatform.sync.IStoreListener;
+import org.sdnplatform.sync.ISyncService;
+import org.sdnplatform.sync.ISyncService.Scope;
+import org.sdnplatform.sync.Versioned;
+import org.sdnplatform.sync.error.SyncException;
+import org.sdnplatform.sync.error.UnknownStoreException;
+import org.sdnplatform.sync.internal.SyncManager;
+import org.sdnplatform.sync.internal.config.IClusterConfigProvider;
+import org.sdnplatform.sync.internal.config.Node;
+import org.sdnplatform.sync.internal.config.PropertyCCProvider;
+import org.sdnplatform.sync.internal.config.SyncStoreCCProvider;
+import org.sdnplatform.sync.internal.remote.RemoteSyncManager;
+import org.sdnplatform.sync.internal.store.IStore;
+import org.sdnplatform.sync.internal.util.CryptoUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import net.floodlightcontroller.core.FloodlightContext;
+import net.floodlightcontroller.core.IFloodlightProviderService;
+import net.floodlightcontroller.core.IOFMessageListener;
+import net.floodlightcontroller.core.IOFSwitch;
+import net.floodlightcontroller.core.internal.Controller;
+import net.floodlightcontroller.core.module.FloodlightModuleContext;
+import net.floodlightcontroller.core.module.FloodlightModuleException;
+import net.floodlightcontroller.core.module.IFloodlightModule;
+import net.floodlightcontroller.core.module.IFloodlightService;
+import net.floodlightcontroller.core.util.SingletonTask;
+import net.floodlightcontroller.debugcounter.IDebugCounterService;
+import net.floodlightcontroller.debugcounter.MockDebugCounterService;
+import net.floodlightcontroller.debugevent.IDebugEventService;
+import net.floodlightcontroller.debugevent.MockDebugEventService;
+import net.floodlightcontroller.devicemanager.internal.DeviceManagerImpl;
+import net.floodlightcontroller.devicemanager.internal.DeviceSyncRepresentation;
+import net.floodlightcontroller.storage.IStorageSourceListener;
+import net.floodlightcontroller.storage.IStorageSourceService;
+import net.floodlightcontroller.threadpool.IThreadPoolService;
+import net.floodlightcontroller.threadpool.ThreadPool;
+
+public class FT implements 
+IOFMessageListener, 
+IFloodlightModule,
+IStoreListener<String>
+{
+
+	private ISyncService syncService;
+	private IStoreClient<String, Object> storeClient;
+	private IStoreListener<String> storeListener;
+	private IClusterConfigProvider	clusterProvider;
+
+	protected FloodlightModuleContext[] moduleContexts;
+	protected SyncManager[] syncManagers;
+	protected final static ObjectMapper mapper = new ObjectMapper();
+	protected String nodeString;
+	ArrayList<Node> nodes;
+
+	ThreadPool tp;
+
+
+
+	protected static Logger logger = LoggerFactory.getLogger(FT.class);
+
+	protected static IThreadPoolService threadPoolService;
+	protected static SingletonTask testTask;	
+
+	@Override
+	public String getName() {
+		// TODO Auto-generated method stub
+		return FT.class.getSimpleName();
+	}
+
+	@Override
+	public boolean isCallbackOrderingPrereq(OFType type, String name) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	@Override
+	public boolean isCallbackOrderingPostreq(OFType type, String name) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	@Override
+	public Collection<Class<? extends IFloodlightService>> getModuleServices() {
+		// TODO Auto-generated method stub
+		Collection<Class<? extends IFloodlightService>> l = 
+				new ArrayList<Class<? extends IFloodlightService>>();
+		return l;
+
+	}
+
+	@Override
+	public Map<Class<? extends IFloodlightService>, IFloodlightService> getServiceImpls() {
+		// TODO Auto-generated method stub
+		Map<Class<? extends IFloodlightService>, IFloodlightService> m = 
+				new HashMap<Class<? extends IFloodlightService>, IFloodlightService>();
+		return m;
+
+	}
+
+	@Override
+	public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
+		// TODO Auto-generated method stub
+		Collection<Class<? extends IFloodlightService>> l =
+				new ArrayList<Class<? extends IFloodlightService>>();
+		l.add(IFloodlightProviderService.class);
+		l.add(IStorageSourceService.class);
+		l.add(ISyncService.class);
+		l.add(IThreadPoolService.class);
+
+		return l;
+	}
+
+	@Override
+	public void init(FloodlightModuleContext context)
+			throws FloodlightModuleException {
+		// TODO Auto-generated method stub
+		
+		this.syncService = context.getServiceImpl(ISyncService.class);
+		threadPoolService = context.getServiceImpl(IThreadPoolService.class);
+		
+		/*
+		tp = new ThreadPool();
+		//tp = new ThreadPool();
+
+		syncManagers = new SyncManager[2];
+		moduleContexts = new FloodlightModuleContext[2];
+
+		nodes = new ArrayList<Node>();
+		nodes.add(new Node("192.168.1.131", 6642, (short)1, (short)1));
+		nodes.add(new Node("192.168.1.131", 6643, (short)2, (short)2));
+
+		try {
+			nodeString = mapper.writeValueAsString(nodes);
+		} catch (JsonProcessingException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		logger.info("INIT FT: {}",nodeString);
+		
+		//moduleContexts[0] = new FloodlightModuleContext();
+		moduleContexts[0] = context;
+		
+		
+		logger.info("moduleContexts: {}",moduleContexts[0]);
+        tp = new ThreadPool();
+
+        syncManagers[0] = new SyncManager();
+        RemoteSyncManager remoteSyncManager = new RemoteSyncManager();
+
+        moduleContexts[0].addService(IThreadPoolService.class, tp);
+        moduleContexts[0].addConfigParam(remoteSyncManager, "persistenceEnabled", "false");
+		moduleContexts[0].addConfigParam(remoteSyncManager, "configProviders", 
+				SyncStoreCCProvider.class.getName());
+		moduleContexts[0].addConfigParam(remoteSyncManager, "nodes", nodeString);
+		moduleContexts[0].addConfigParam(remoteSyncManager, "thisNode", "0");
+		moduleContexts[0].addConfigParam(remoteSyncManager, "authScheme", "CHALLENGE_RESPONSE");
+		moduleContexts[0].addConfigParam(remoteSyncManager, "keyStorePath", 
+				"/etc/floodlight/mykey.jceks");
+		moduleContexts[0].addConfigParam(remoteSyncManager, "keyStorePassword", "passwd");
+        
+        tp.init(moduleContexts[0]);
+        remoteSyncManager.init(moduleContexts[0]);
+        tp.startUp(moduleContexts[0]);
+        remoteSyncManager.startUp(moduleContexts[0]);
+
+        try {
+			remoteSyncManager.registerStore("NIB",Scope.GLOBAL);
+		} catch (SyncException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+*/
+		/*for(int i = 0; i < 2; i++) {
+			moduleContexts[i] = new FloodlightModuleContext();
+			moduleContexts[i] = context;
+			
+			syncManagers[i] = new SyncManager();
+			moduleContexts[i].addService(IThreadPoolService.class, tp);
+			moduleContexts[i].addConfigParam(syncManagers[i], "configProviders", 
+					SyncStoreCCProvider.class.getName());
+			moduleContexts[i].addConfigParam(syncManagers[i], "nodes", nodeString);
+			moduleContexts[i].addConfigParam(syncManagers[i], "thisNode", ""+i);
+			moduleContexts[i].addConfigParam(syncManagers[i], "persistenceEnabled", "false");
+			moduleContexts[i].addConfigParam(syncManagers[i], "authScheme", "CHALLENGE_RESPONSE");
+			moduleContexts[i].addConfigParam(syncManagers[i], "keyStorePath", 
+					"/etc/floodlight/mykey.jceks");
+			
+			moduleContexts[i].addConfigParam(syncManagers[i], "keyStorePassword", "passwd");
+
+			tp.init(moduleContexts[i]);
+			syncManagers[i].init(moduleContexts[i]);
+
+	        tp.startUp(moduleContexts[i]);
+	        syncManagers[i].startUp(moduleContexts[i]);
+
+	        syncManagers[i].registerStore("global", Scope.GLOBAL);
+	        syncManagers[i].registerStore("local", Scope.LOCAL);
+	        logger.info("I: {}",i);
+		}*/
+		
+
+
+
+
+		
+	}
+
+	@Override
+	public void startUp(FloodlightModuleContext context)
+			throws FloodlightModuleException {
+
+
+		try {
+			this.syncService.registerStore("NIB", Scope.GLOBAL);
+			this.storeClient = this.syncService
+					.getStoreClient("NIB",
+							String.class,
+							Object.class);
+			this.storeClient.put("NIB", new String("Algo aqui..."));
+			this.storeClient.addStoreListener(this);
+		} catch (SyncException e) {
+			throw new FloodlightModuleException("Error while setting up sync service", e);
+		}
+
+
+		//logger.debug("Iniciado SYNC, testing now:");
+		String obj;
+		try {
+			obj = this.storeClient.getValue("NIB").toString();
+			logger.debug("Sync retrieve: {}", obj);
+			this.storeClient.put("NIB", new String("B"));
+		} catch (SyncException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
+		}
+		
+		
+		
+
+		
+		ScheduledExecutorService ses = threadPoolService.getScheduledExecutor();
+		testTask = new SingletonTask(ses, new Runnable() {
+			int counter=0;
+			@Override
+			public void run() { 
+				Random r = new Random();
+				
+				/*try {
+					//storeClient.put("NIB", new String("vl:"+r.nextInt(1000)));
+					storeClient.put("NIB", new String(""+counter++));
+					
+				} catch (SyncException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}*/
+				
+				try {
+					Versioned<Object> vObj = storeClient.get("NIB");					
+					logger.info("Versioned: {}",vObj);
+				} catch (SyncException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+
+//				IStoreClient<String, Object> storeCliAux;
+//
+//				try {
+//					storeCliAux = syncService.getStoreClient("NIB", String.class, Object.class);
+//					storeCliAux.put("k1", new String("r:"+r.nextInt(200)));
+//
+//				} catch (SyncException e) {
+//					// TODO Auto-generated catch block
+//					e.printStackTrace();
+//				}
+
+				
+				testTask.reschedule(4, TimeUnit.SECONDS);
+			}
+		});
+		testTask.reschedule(3, TimeUnit.SECONDS);
+
+	}
+
+	@Override
+	public net.floodlightcontroller.core.IListener.Command receive(
+			IOFSwitch sw, OFMessage msg, FloodlightContext cntx) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+
+
+	@Override
+	public void keysModified(Iterator<String> keys,
+			org.sdnplatform.sync.IStoreListener.UpdateType type) {
+		// TODO Auto-generated method stub
+		while(keys.hasNext()){
+			String k = keys.next();
+			try {
+				logger.debug("keysModified: Key:{}, Value:{}, Type: {}", 
+						new Object[] {k, storeClient.get(k).getValue().toString(), type.name()}
+						);
+				//logger.debug("localNodeID: {}",this.syncService.getLocalNodeId());
+			} catch (SyncException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+
+		}
+	}
+
+}
diff --git a/src/main/java/org/sdnplatform/sync/internal/config/FTCCProvider.java b/src/main/java/org/sdnplatform/sync/internal/config/FTCCProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..512d48e2e1aa3fbbbb9e79af0a99697647dd474d
--- /dev/null
+++ b/src/main/java/org/sdnplatform/sync/internal/config/FTCCProvider.java
@@ -0,0 +1,174 @@
+package org.sdnplatform.sync.internal.config;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+
+import org.python.antlr.PythonParser.print_stmt_return;
+import org.sdnplatform.sync.error.SyncException;
+import org.sdnplatform.sync.internal.SyncManager;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.databind.MappingJsonFactory;
+
+import net.floodlightcontroller.core.internal.FloodlightProvider;
+import net.floodlightcontroller.core.module.FloodlightModuleContext;
+import net.floodlightcontroller.storage.IResultSet;
+import net.floodlightcontroller.storage.IStorageSourceService;
+
+public class FTCCProvider
+    implements IClusterConfigProvider {
+    protected static final Logger logger =
+            LoggerFactory.getLogger(FTCCProvider.class.getName());
+
+    private IStorageSourceService storageSource;
+    
+	private List<Node> clusterInitialNode;
+
+    String controllerID;
+    AuthScheme authScheme;
+    String keyStorePath;
+    String keyStorePassword;
+
+    protected static final String BOOT_CONFIG = 
+    		"/src/main/resources/floodlight/storageBootstrap.properties";
+
+    // **********************
+    // IClusterConfigProvider
+    // **********************
+
+    @Override
+    public void init(SyncManager syncManager,
+                     FloodlightModuleContext context) {
+        storageSource = context.getServiceImpl(IStorageSourceService.class);
+
+        //storageSource.addListener(CONTROLLER_TABLE_NAME, this);
+
+        Map<String, String> config =
+                context.getConfigParams(FloodlightProvider.class);
+        controllerID = config.get("controllerId");
+        config = context.getConfigParams(SyncManager.class);
+        
+        logger.info("ControllerId: {}", controllerID);
+        
+        keyStorePath = config.get("keyStorePath");
+        keyStorePassword = config.get("keyStorePassword");
+        authScheme = AuthScheme.NO_AUTH;
+        try {
+            authScheme = AuthScheme.valueOf(config.get("authScheme"));
+        } catch (Exception e) {}
+        String clusterNodes = config.get("clusterNodes");
+		clusterInitialNode = jsonToNodeMap(clusterNodes, config.get("nodeId"));
+		logger.info("Initial Cluster Node: {} {}",config.get("nodeId"),clusterInitialNode);
+
+    
+    }
+
+    @Override
+    public ClusterConfig getConfig() throws SyncException {
+        if (controllerID == null) {
+            Properties bootConfig = new Properties();
+            
+        }
+        if (controllerID == null) {
+            throw new SyncException("No controller ID configured");
+        }
+        logger.info("Using controller ID: {}", controllerID);
+
+        List<Node> nodes = new ArrayList<Node>();
+        //short thisNodeId = -1;
+
+        nodes.add(new Node("192.168.1.131", 6642, (short)1, (short)1));
+        nodes.add(new Node("192.168.1.131", 6643, (short)2, (short)1));
+        ClusterConfig cc =null;
+        try {
+        	cc = new ClusterConfig(nodes, Short.parseShort(controllerID), authScheme, 
+                    keyStorePath, keyStorePassword);
+        	logger.info("ClusterConfig: {}",cc);
+        } catch (Exception e) {
+			// TODO: handle exception
+			e.printStackTrace();
+		}
+        
+        
+        
+        return cc;
+    }
+
+       /**
+	 * @param String org.sdnplatform.sync.internal.SyncManager.clusterNodes foodlightdefault.properties.
+	 * @param String controllerId
+	 * @return Map<String, Node>
+	 */
+	private static List<Node> jsonToNodeMap(String json, String controllerId) {
+		MappingJsonFactory f = new MappingJsonFactory();
+		JsonParser jp;
+		List<Node> nodes = new ArrayList<Node>();
+
+		if (json == null || json.isEmpty()) {
+			return nodes;
+		}
+
+		try {
+			try {
+				jp = f.createParser(json);
+			} catch (JsonParseException e) {
+				throw new IOException(e);
+			}
+
+			jp.nextToken();
+			if (jp.getCurrentToken() != JsonToken.START_OBJECT) {
+				throw new IOException("Expected START_OBJECT");
+			}
+
+			while (jp.nextToken() != JsonToken.END_OBJECT) {
+				if (jp.getCurrentToken() != JsonToken.FIELD_NAME) {
+					throw new IOException("Expected FIELD_NAME");
+				}
+
+				String nodeId = jp.getCurrentName();
+
+				String host=null;
+				String domainId = controllerId;
+				String [] aux;
+				int port;
+				Node node=null;
+
+				jp.nextToken();
+				if (jp.getText().equals("")) {
+					continue;
+				}
+				host = jp.getValueAsString();
+
+				aux= host.split(":");
+				host = aux[0];
+				port = Integer.parseInt(aux[1]);
+				try {
+					logger.debug("Creating node: {}:{} {} {}", 
+							new Object[]{host, port, nodeId, nodeId}
+							);
+					node = new Node(host, port, Short.parseShort(nodeId), Short.parseShort(nodeId));
+					nodes.add(node);
+				} catch(Exception e){
+					e.printStackTrace();
+				}
+
+			}
+		} catch (IOException e) {
+			logger.error("Problem: {}", e);
+		}
+		return nodes;
+	}
+
+
+   
+
+}