diff --git a/web/source/settings-panel/admin/federation.js b/web/source/settings-panel/admin/federation.js
index d57c0e1a4..7afc3c699 100644
--- a/web/source/settings-panel/admin/federation.js
+++ b/web/source/settings-panel/admin/federation.js
@@ -308,19 +308,19 @@ function InstancePageWrapped() {
 		return adminActions.updateDomainBlockVal([domain, key, val]);
 	}
 
-	const fields = formFields(alterDomain, (state) => state.admin.blockedInstances[domain]);
+	const fields = formFields(alterDomain, (state) => state.admin.newInstanceBlocks[domain]);
 
 	return <InstancePage domain={domain} Form={fields} />;
 }
 
 function InstancePage({domain, Form}) {
 	const dispatch = Redux.useDispatch();
-	const { blockedInstances } = Redux.useSelector(state => state.admin);
-	const entry = blockedInstances[domain];
+	const entry = Redux.useSelector(state => state.admin.newInstanceBlocks[domain]);
+	const [_location, setLocation] = useLocation();
 
 	React.useEffect(() => {
 		if (entry == undefined) {
-			dispatch(adminActions.newDomainBlock(domain));
+			dispatch(api.admin.getEditableDomainBlock(domain));
 		}
 	}, []);
 
@@ -328,11 +328,7 @@ function InstancePage({domain, Form}) {
 	const [statusMsg, setStatus] = React.useState("");
 
 	if (entry == undefined) {
-		if (statusMsg == "removed") {
-			return <Redirect to={base}/>;
-		} else {
-			return "Loading...";
-		}
+		return "Loading...";
 	}
 
 	const updateBlock = submit(
@@ -342,7 +338,9 @@ function InstancePage({domain, Form}) {
 
 	const removeBlock = submit(
 		() => dispatch(api.admin.removeDomainBlock(domain)),
-		{setStatus, setError, startStatus: "Removing", successStatus: "Removed!"}
+		{setStatus, setError, startStatus: "Removing", successStatus: "Removed!", onSuccess: () => {
+			setLocation(base);
+		}}
 	);
 
 	return (
diff --git a/web/source/settings-panel/lib/api/admin.js b/web/source/settings-panel/lib/api/admin.js
index 30b72f5e0..421bdf8cd 100644
--- a/web/source/settings-panel/lib/api/admin.js
+++ b/web/source/settings-panel/lib/api/admin.js
@@ -57,18 +57,28 @@ module.exports = function ({ apiCall, getChanges }) {
 		updateDomainBlock: function updateDomainBlock(domain) {
 			return function (dispatch, getState) {
 				return Promise.try(() => {
-					const state = getState().admin.blockedInstances[domain];
+					const state = getState().admin.newInstanceBlocks[domain];
 					const update = getChanges(state, {
 						formKeys: ["domain", "obfuscate", "public_comment", "private_comment"],
 					});
 
 					return dispatch(apiCall("POST", "/api/v1/admin/domain_blocks", update, "form"));
 				}).then((block) => {
-					console.log(block);
+					return Promise.all([
+						dispatch(admin.newDomainBlock([domain, block])),
+						dispatch(admin.setDomainBlock([domain, block]))
+					]);
 				});
 			};
 		},
 
+		getEditableDomainBlock: function getEditableDomainBlock(domain) {
+			return function (dispatch, getState) {
+				let data = getState().admin.blockedInstances[domain];
+				return dispatch(admin.newDomainBlock([domain, data]));
+			};
+		},
+
 		bulkDomainBlock: function bulkDomainBlock() {
 			return function (dispatch, getState) {
 				let invalidDomains = [];
@@ -138,6 +148,8 @@ module.exports = function ({ apiCall, getChanges }) {
 				return Promise.try(() => {
 					const id = getState().admin.blockedInstances[domain].id;
 					return dispatch(apiCall("DELETE", `/api/v1/admin/domain_blocks/${id}`));
+				}).then((removed) => {
+					return dispatch(admin.removeDomainBlock(removed.domain));
 				});
 			};
 		},
diff --git a/web/source/settings-panel/redux/reducers/admin.js b/web/source/settings-panel/redux/reducers/admin.js
index e534b1a3d..20d3d748d 100644
--- a/web/source/settings-panel/redux/reducers/admin.js
+++ b/web/source/settings-panel/redux/reducers/admin.js
@@ -51,6 +51,7 @@ module.exports = createSlice({
 			exportType: "plain",
 			...emptyBlock()
 		},
+		newInstanceBlocks: {},
 		emoji: {},
 		newEmoji: emptyEmojiForm()
 	},
@@ -63,20 +64,27 @@ module.exports = createSlice({
 			state.loadedBlockedInstances = true;
 		},
 
-		newDomainBlock: (state, { payload: domain }) => {
-			state.blockedInstances[domain] = {
-				domain,
-				new: true,
-				...emptyBlock()
-			};
+		newDomainBlock: (state, { payload: [domain, data] }) => {
+			if (data == undefined) {
+				data = {
+					new: true,
+					domain,
+					...emptyBlock()
+				};
+			}
+			state.newInstanceBlocks[domain] = data;
 		},
 
 		setDomainBlock: (state, { payload: [domain, data = {}] }) => {
 			state.blockedInstances[domain] = data;
 		},
 
+		removeDomainBlock: (state, {payload: domain}) => {
+			delete state.blockedInstances[domain];
+		},
+
 		updateDomainBlockVal: (state, { payload: [domain, key, val] }) => {
-			state.blockedInstances[domain][key] = val;
+			state.newInstanceBlocks[domain][key] = val;
 		},
 
 		updateBulkBlockVal: (state, { payload: [key, val] }) => {