diff --git a/dask_geopandas/core.py b/dask_geopandas/core.py
index 022be1a..6dea435 100644
--- a/dask_geopandas/core.py
+++ b/dask_geopandas/core.py
@@ -153,9 +153,14 @@ class _Frame(dd.core._Frame, OperatorMethodMixin):
 
     def set_crs(self, value, allow_override=False):
         """Set the value of the crs on a new object"""
-        return self.map_partitions(
+        new = self.map_partitions(
             _set_crs, value, allow_override, enforce_metadata=False
         )
+        if self.spatial_partitions is not None:
+            new.spatial_partitions = self.spatial_partitions.set_crs(
+                value, allow_override=allow_override
+            )
+        return new
 
     def to_crs(self, crs=None, epsg=None):
         token = f"{self._name}-to_crs"

diff --git a/tests/test_core.py b/tests/test_core.py
index f882443..2ff7a94 100644
--- a/tests/test_core.py
+++ b/tests/test_core.py
@@ -8,7 +8,7 @@ import dask.dataframe as dd
 from dask.dataframe.core import Scalar
 import dask_geopandas
 
-from geopandas.testing import assert_geodataframe_equal
+from geopandas.testing import assert_geodataframe_equal, assert_geoseries_equal
 
 
 @pytest.fixture
@@ -363,6 +363,25 @@ def test_copy_spatial_partitions(geodf_points):
     )
 
 
+def test_set_crs_sets_spatial_partition_crs(geodf_points):
+    dask_obj = dask_geopandas.from_geopandas(geodf_points, npartitions=2)
+
+    dask_obj.calculate_spatial_partitions()
+    dask_obj = dask_obj.set_crs("epsg:4326")
+
+    assert dask_obj.crs == dask_obj.spatial_partitions.crs
+
+
+def test_propagate_on_set_crs(geodf_points):
+    dask_obj = dask_geopandas.from_geopandas(geodf_points, npartitions=2)
+
+    dask_obj.calculate_spatial_partitions()
+    result = dask_obj.set_crs("epsg:4326").spatial_partitions
+    expected = dask_obj.spatial_partitions.set_crs("epsg:4326")
+
+    assert_geoseries_equal(result, expected)
+
+
 @pytest.mark.skipif(
     LooseVersion(geopandas.__version__) <= LooseVersion("0.8.1"),
     reason="geopandas 0.8 has bug in apply",

BUG: preserve spatial_partitions in GeoDataFrame.set_crs
Currently, using `set_crs` doesn't preserve the spatial partitions (similar as `copy`, see https://github.com/geopandas/dask-geopandas/pull/56):

```python
import geopandas
import dask_geopandas

gdf = geopandas.read_file(geopandas.datasets.get_path("naturalearth_lowres"))
# remove the crs for purpose of the reproducible example
gdf.crs = None

# create partitioned dataframe + calculate spatial partitions
ddf = dask_geopandas.from_geopandas(gdf, npartitions=4)
ddf.calculate_spatial_partitions()

>>> ddf.spatial_partitions
0    POLYGON ((-68.149 -55.612, -68.640 -55.580, -6...
1    POLYGON ((18.465 -29.045, 16.345 -28.577, -77....
2    POLYGON ((166.740 -22.400, -8.899 36.869, -9.5...
3    POLYGON ((-180.000 -90.000, -180.000 -84.713, ...
dtype: geometry
>>> ddf = ddf.set_crs("EPSG:4326")
>>> ddf.spatial_partitions is None
True
```
tests/test_core.py::test_set_crs_sets_spatial_partition_crs tests/test_core.py::test_propagate_on_set_crs
tests/test_core.py::test_geoseries_properties[area] tests/test_core.py::test_geoseries_properties[geom_type] tests/test_core.py::test_geoseries_properties[type] tests/test_core.py::test_geoseries_properties[length] tests/test_core.py::test_geoseries_properties[is_valid] tests/test_core.py::test_geoseries_properties[is_empty] tests/test_core.py::test_geoseries_properties[is_simple] tests/test_core.py::test_geoseries_properties[is_ring] tests/test_core.py::test_geoseries_properties[has_z] tests/test_core.py::test_geoseries_properties[boundary] tests/test_core.py::test_geoseries_properties[centroid] tests/test_core.py::test_geoseries_properties[convex_hull] tests/test_core.py::test_geoseries_properties[envelope] tests/test_core.py::test_geoseries_properties[exterior] tests/test_core.py::test_geoseries_properties[interiors] tests/test_core.py::test_geoseries_properties[bounds] tests/test_core.py::test_geoseries_properties[total_bounds] tests/test_core.py::test_geoseries_properties[geometry] tests/test_core.py::test_geoseries_unary_union tests/test_core.py::test_geoseries_points_attrs[x] tests/test_core.py::test_geoseries_points_attrs[y] tests/test_core.py::test_points_from_xy tests/test_core.py::test_geodataframe_crs tests/test_core.py::test_geoseries_crs tests/test_core.py::test_project tests/test_core.py::test_elemwise_methods[contains] tests/test_core.py::test_elemwise_methods[geom_equals] tests/test_core.py::test_elemwise_methods[geom_almost_equals] tests/test_core.py::test_elemwise_methods[crosses] tests/test_core.py::test_elemwise_methods[disjoint] tests/test_core.py::test_elemwise_methods[intersects] tests/test_core.py::test_elemwise_methods[overlaps] tests/test_core.py::test_elemwise_methods[touches] tests/test_core.py::test_elemwise_methods[within] tests/test_core.py::test_elemwise_methods[distance] tests/test_core.py::test_elemwise_methods[relate] tests/test_core.py::test_geom_equals_exact tests/test_core.py::test_operator_methods[difference] tests/test_core.py::test_operator_methods[symmetric_difference] tests/test_core.py::test_operator_methods[union] tests/test_core.py::test_operator_methods[intersection] tests/test_core.py::test_meth_with_args_and_kwargs[representative_point-options0] tests/test_core.py::test_meth_with_args_and_kwargs[buffer-options1] tests/test_core.py::test_meth_with_args_and_kwargs[simplify-options2] tests/test_core.py::test_meth_with_args_and_kwargs[interpolate-options3] tests/test_core.py::test_meth_with_args_and_kwargs[affine_transform-options4] tests/test_core.py::test_meth_with_args_and_kwargs[translate-options5] tests/test_core.py::test_meth_with_args_and_kwargs[rotate-options6] tests/test_core.py::test_meth_with_args_and_kwargs[scale-options7] tests/test_core.py::test_meth_with_args_and_kwargs[skew-options8] tests/test_core.py::test_explode_geoseries tests/test_core.py::test_explode_geodf tests/test_core.py::test_get_geometry_property_on_geodf tests/test_core.py::test_to_crs_geodf tests/test_core.py::test_to_crs_geoseries tests/test_core.py::test_copy_spatial_partitions tests/test_core.py::test_geoseries_apply tests/test_core.py::test_geodataframe_html_repr