diff --git a/services/src/main/java/org/keycloak/services/resources/admin/UserFederationProviderResource.java b/services/src/main/java/org/keycloak/services/resources/admin/UserFederationProviderResource.java
index f8cb9e1..54ab772 100755
--- a/services/src/main/java/org/keycloak/services/resources/admin/UserFederationProviderResource.java
+++ b/services/src/main/java/org/keycloak/services/resources/admin/UserFederationProviderResource.java
@@ -26,6 +26,8 @@ import org.keycloak.mappers.UserFederationMapper;
 import org.keycloak.mappers.UserFederationMapperFactory;
 import org.keycloak.models.KeycloakSession;
 import org.keycloak.models.KeycloakSessionFactory;
+import org.keycloak.models.ModelDuplicateException;
+import org.keycloak.models.ModelException;
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.UserFederationMapperModel;
 import org.keycloak.models.UserFederationProvider;
@@ -41,6 +43,7 @@ import org.keycloak.representations.idm.ConfigPropertyRepresentation;
 import org.keycloak.representations.idm.UserFederationMapperRepresentation;
 import org.keycloak.representations.idm.UserFederationMapperTypeRepresentation;
 import org.keycloak.representations.idm.UserFederationProviderRepresentation;
+import org.keycloak.services.ErrorResponse;
 import org.keycloak.services.ErrorResponseException;
 import org.keycloak.services.ServicesLogger;
 import org.keycloak.services.managers.UsersSyncManager;
@@ -99,31 +102,43 @@ public class UserFederationProviderResource {
     @PUT
     @NoCache
     @Consumes(MediaType.APPLICATION_JSON)
-    public void updateProviderInstance(UserFederationProviderRepresentation rep) {
+    public Response updateProviderInstance(UserFederationProviderRepresentation rep) {
         auth.requireManage();
 
         if (federationProviderModel == null) {
             throw new NotFoundException("Could not find federation provider");
         }
 
-        String displayName = rep.getDisplayName();
-        if (displayName != null && displayName.trim().equals("")) {
-            displayName = null;
-        }
-        UserFederationProviderModel model = new UserFederationProviderModel(rep.getId(), rep.getProviderName(), rep.getConfig(), rep.getPriority(), displayName,
-                rep.getFullSyncPeriod(), rep.getChangedSyncPeriod(), rep.getLastSync());
-
-        UserFederationProvidersResource.validateFederationProviderConfig(session, auth, realm, model);
+        try {
+            String displayName = rep.getDisplayName();
+            if (displayName != null && displayName.trim().equals("")) {
+                displayName = null;
+            }
+            UserFederationProviderModel model = new UserFederationProviderModel(rep.getId(), rep.getProviderName(), rep.getConfig(), rep.getPriority(), displayName,
+                    rep.getFullSyncPeriod(), rep.getChangedSyncPeriod(), rep.getLastSync());
 
-        realm.updateUserFederationProvider(model);
-        new UsersSyncManager().notifyToRefreshPeriodicSync(session, realm, model, false);
-        boolean kerberosCredsAdded = UserFederationProvidersResource.checkKerberosCredential(session, realm, model);
-        if (kerberosCredsAdded) {
-            ServicesLogger.LOGGER.addedKerberosToRealmCredentials();
-        }
+            UserFederationProvidersResource.validateFederationProviderConfig(session, auth, realm, model);
 
-        adminEvent.operation(OperationType.UPDATE).resourcePath(uriInfo).representation(rep).success();
+            realm.updateUserFederationProvider(model);
+            new UsersSyncManager().notifyToRefreshPeriodicSync(session, realm, model, false);
+            boolean kerberosCredsAdded = UserFederationProvidersResource.checkKerberosCredential(session, realm, model);
+            if (kerberosCredsAdded) {
+                ServicesLogger.LOGGER.addedKerberosToRealmCredentials();
+            }
 
+            adminEvent.operation(OperationType.UPDATE).resourcePath(uriInfo).representation(rep).success();
+            return Response.noContent().build();
+        } catch (ModelDuplicateException e) {
+            if (session.getTransactionManager().isActive()) {
+                session.getTransactionManager().setRollbackOnly();
+            }
+            return ErrorResponse.exists("Federation provider exists with same name.");
+        } catch (ModelException me) {
+            if (session.getTransactionManager().isActive()) {
+                session.getTransactionManager().setRollbackOnly();
+            }
+            return ErrorResponse.error("Unable to update federation provider.", Response.Status.INTERNAL_SERVER_ERROR);
+        }
     }
 
     /**
                 
                
                    
                    diff --git a/services/src/main/java/org/keycloak/services/resources/admin/UserFederationProvidersResource.java b/services/src/main/java/org/keycloak/services/resources/admin/UserFederationProvidersResource.java
index 4333c93..8a70463 100755
--- a/services/src/main/java/org/keycloak/services/resources/admin/UserFederationProvidersResource.java
+++ b/services/src/main/java/org/keycloak/services/resources/admin/UserFederationProvidersResource.java
@@ -26,6 +26,8 @@ import org.keycloak.events.admin.ResourceType;
 import org.keycloak.mappers.FederationConfigValidationException;
 import org.keycloak.models.AuthenticationExecutionModel;
 import org.keycloak.models.KeycloakSession;
+import org.keycloak.models.ModelDuplicateException;
+import org.keycloak.models.ModelException;
 import org.keycloak.models.RealmModel;
 import org.keycloak.models.UserFederationProvider;
 import org.keycloak.models.UserFederationProviderFactory;
@@ -40,6 +42,7 @@ import org.keycloak.representations.idm.ConfigPropertyRepresentation;
 import org.keycloak.representations.idm.CredentialRepresentation;
 import org.keycloak.representations.idm.UserFederationProviderFactoryRepresentation;
 import org.keycloak.representations.idm.UserFederationProviderRepresentation;
+import org.keycloak.services.ErrorResponse;
 import org.keycloak.services.ErrorResponseException;
 import org.keycloak.services.ServicesLogger;
 import org.keycloak.services.managers.UsersSyncManager;
@@ -196,26 +199,38 @@ public class UserFederationProvidersResource {
     public Response createProviderInstance(UserFederationProviderRepresentation rep) {
         auth.requireManage();
 
-        String displayName = rep.getDisplayName();
-        if (displayName != null && displayName.trim().equals("")) {
-            displayName = null;
-        }
+        try {
+            String displayName = rep.getDisplayName();
+            if (displayName != null && displayName.trim().equals("")) {
+                displayName = null;
+            }
 
-        UserFederationProviderModel tempModel = new UserFederationProviderModel(null, rep.getProviderName(), rep.getConfig(), rep.getPriority(), displayName, rep.getFullSyncPeriod(), rep.getChangedSyncPeriod(), rep.getLastSync());
-        validateFederationProviderConfig(session, auth, realm, tempModel);
+            UserFederationProviderModel tempModel = new UserFederationProviderModel(null, rep.getProviderName(), rep.getConfig(), rep.getPriority(), displayName, rep.getFullSyncPeriod(), rep.getChangedSyncPeriod(), rep.getLastSync());
+            validateFederationProviderConfig(session, auth, realm, tempModel);
 
-        UserFederationProviderModel model = realm.addUserFederationProvider(rep.getProviderName(), rep.getConfig(), rep.getPriority(), displayName,
-                rep.getFullSyncPeriod(), rep.getChangedSyncPeriod(), rep.getLastSync());
-        new UsersSyncManager().notifyToRefreshPeriodicSync(session, realm, model, false);
-        boolean kerberosCredsAdded = checkKerberosCredential(session, realm, model);
-        if (kerberosCredsAdded) {
-            ServicesLogger.LOGGER.addedKerberosToRealmCredentials();
-        }
+            UserFederationProviderModel model = realm.addUserFederationProvider(rep.getProviderName(), rep.getConfig(), rep.getPriority(), displayName,
+                    rep.getFullSyncPeriod(), rep.getChangedSyncPeriod(), rep.getLastSync());
+            new UsersSyncManager().notifyToRefreshPeriodicSync(session, realm, model, false);
+            boolean kerberosCredsAdded = checkKerberosCredential(session, realm, model);
+            if (kerberosCredsAdded) {
+                ServicesLogger.LOGGER.addedKerberosToRealmCredentials();
+            }
 
-        rep.setId(model.getId());
-        adminEvent.operation(OperationType.CREATE).resourcePath(uriInfo, model.getId()).representation(rep).success();
+            rep.setId(model.getId());
+            adminEvent.operation(OperationType.CREATE).resourcePath(uriInfo, model.getId()).representation(rep).success();
 
-        return Response.created(uriInfo.getAbsolutePathBuilder().path(model.getId()).build()).build();
+            return Response.created(uriInfo.getAbsolutePathBuilder().path(model.getId()).build()).build();
+        } catch (ModelDuplicateException e) {
+            if (session.getTransactionManager().isActive()) {
+                session.getTransactionManager().setRollbackOnly();
+            }
+            return ErrorResponse.exists("Federation provider exists with same name.");
+        } catch (ModelException me){
+            if (session.getTransactionManager().isActive()) {
+                session.getTransactionManager().setRollbackOnly();
+            }
+            return ErrorResponse.error("Could not create federation provider.", Response.Status.INTERNAL_SERVER_ERROR);
+        }
     }
 
     /**