private synchronized void performCoordinatorElection() {
		if(Logger.DEBUG)Logger.d(TAG, "performCoordinatorElection() : isElectionFlag : " + Election.getInstance().isElectionFlag());
		
		if(this.isCoordinatorFlag()) return;
		
		if( Election.getInstance().getElectionNodeList().size() >= 0 ){
			if(Election.getInstance().isValidElection(this.getId())){
				// add node to the election list
				if(Election.getInstance().getElectionNodeList().get(getId()) == null){
					Election.getInstance().addElectionNode(this);
				}
				
				System.out.println(Election.getInstance().getElectionMessage());
				
				if(Logger.DEBUG)Logger.d(TAG, "performCoordinatorElection() :XX:" + Election.getInstance().getElectionMessage());
				if(Logger.DEBUG)Logger.d(TAG, " :: " + Resource.getInstance().getNodeList().size() + " == " + Election.getInstance().getElectionNodeList().size() );
				
				// if the Node is a last node, then end the Election
				if(Resource.getInstance().getNodeList().size() == Election.getInstance().getElectionNodeList().size()){
					// proceed to end the Election
					NodeManager.getInstance().setServerNode(Election.getInstance().endElection());
					// set the coordinator Flag for the Node
		    		NodeManager.getInstance().getServerNode().setCoordinatorFlag(true);
		    		// set the flag as Server Node started Listening on his port
		    		NodeManager.getInstance().getServerNode().setServerListening(true);
					// bind server node
		    		NodeManager.getInstance().bindServerNode();
				}
			}else{ // New TraitClientServer Node with Highest Index has been Found 
				// abort existing election
				Election.getInstance().abortElection();
				// begin new election 
				Election.getInstance().beginElection();
				Election.getInstance().addElectionNode(this);
				
				System.out.println(Election.getInstance().getElectionMessage());
				
				if(Logger.DEBUG)Logger.d(TAG, "performCoordinatorElection() :XX:" + Election.getInstance().getElectionMessage());
			}
		} 
	}