diff --git a/rslib/src/scheduler/answering/learn.rs b/rslib/src/scheduler/answering/learn.rs
new file mode 100644
index 000000000..245552005
--- /dev/null
+++ b/rslib/src/scheduler/answering/learn.rs
@@ -0,0 +1,59 @@
+// Copyright: Ankitects Pty Ltd and contributors
+// License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
+
+use crate::{
+ card::{CardQueue, CardType},
+ prelude::*,
+ scheduler::states::{CardState, IntervalKind, LearnState, NewState},
+};
+
+use super::{CardStateUpdater, RevlogEntryPartial};
+
+impl CardStateUpdater {
+ pub(super) fn apply_new_state(
+ &mut self,
+ current: CardState,
+ next: NewState,
+ ) -> Result