def create(self, instance, parameters, existing):
        """ Create the instance
        
        Args:
            instance (AtlasServiceInstance.Instance): Existing or New instance
            parameters (dict): Parameters for the instance
            existing (bool): Create an instance on an existing Atlas cluster
        
        Returns:
            ProvisionedServiceSpec: Status
            
        Raises:
            ErrInstanceAlreadyExists: If instance exists but with different parameters
            ErrClusterNotFound: Cluster does not exist
        """
        
        if not instance.isProvisioned():
            # Set parameters
            instance.parameters = parameters
            
            # Existing cluster
            if existing and not self.backend.atlas.Clusters.is_existing_cluster(instance.parameters[self.backend.config.PARAMETER_CLUSTER]):
                # We need to use an existing cluster that is not available !
                raise ErrClusterNotFound(instance.parameters[self.backend.config.PARAMETER_CLUSTER])
            elif not existing:
                # We need to create a new cluster
                # We should not reach this code because the AtlasBroker.provision should
                # raise an ErrPlanUnsupported before.
                raise NotImplementedError()
            
            result = self.backend.storage.store(instance)
            
            # Provision done
            return ProvisionedServiceSpec(ProvisionState.SUCCESSFUL_CREATED,
                                      "",
                                      str(result))
        
        elif instance.parameters == parameters:
            # Identical so nothing to do
            return ProvisionedServiceSpec(ProvisionState.IDENTICAL_ALREADY_EXISTS,
                                        "",
                                        "duplicate")
        
        else:
            # Different parameters ...
            raise ErrInstanceAlreadyExists()