diff --git a/spring-session-core/spring-session-core.gradle b/spring-session-core/spring-session-core.gradle
index 171204c9..b0ed7dfd 100644
--- a/spring-session-core/spring-session-core.gradle
+++ b/spring-session-core/spring-session-core.gradle
@@ -5,6 +5,7 @@ description = "Spring Session"
dependencies {
compile "org.springframework:spring-jcl"
+ optional "io.projectreactor:reactor-core"
optional "org.springframework:spring-context"
optional "org.springframework:spring-jdbc"
optional "org.springframework:spring-messaging"
diff --git a/spring-session-core/src/main/java/org/springframework/session/ReactorSessionRepository.java b/spring-session-core/src/main/java/org/springframework/session/ReactorSessionRepository.java
new file mode 100644
index 00000000..d7506d10
--- /dev/null
+++ b/spring-session-core/src/main/java/org/springframework/session/ReactorSessionRepository.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2014-2017 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.session;
+
+import reactor.core.publisher.Mono;
+
+/**
+ * A repository interface for managing {@link Session} instances.
+ *
+ * @param the {@link Session} type
+ * @author Rob Winch
+ * @since 2.0
+ */
+public interface ReactorSessionRepository {
+
+ /**
+ * Creates a new {@link Session} that is capable of being persisted by this
+ * {@link ReactorSessionRepository}.
+ *
+ *
+ * This allows optimizations and customizations in how the {@link Session} is + * persisted. For example, the implementation returned might keep track of the changes + * ensuring that only the delta needs to be persisted on a save. + *
+ * + * @return a new {@link Session} that is capable of being persisted by this + * {@link ReactorSessionRepository} + */ + Mono+ * Some implementations may choose to save as the {@link Session} is updated by + * returning a {@link Session} that immediately persists any changes. In this case, + * this method may not actually do anything. + *
+ * + * @param session the {@link Session} to save + */ + Mono