diff --git a/lib/main.dart b/lib/main.dart
index d4a19fef476ef41e4a700568cd16cd03b44d7bdd..94454852dc55301082bc9cd8cdaa6896197150f6 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -3,6 +3,7 @@ import 'package:article_flutter_riverpod/article_02/consumer_example.dart';
 import 'package:article_flutter_riverpod/article_02/parent_example.dart';
 import 'package:article_flutter_riverpod/article_02/stateful_example.dart';
 import 'package:article_flutter_riverpod/article_02/stateless_example.dart';
+import 'package:article_flutter_riverpod/presentation/smaller_stateful_example.dart';
 import 'package:flutter/material.dart';
 import 'package:go_router/go_router.dart';
 
@@ -25,6 +26,12 @@ final examples = [
     path: 'stateful',
     builder: (_) => const StatefulExample(),
   ),
+  Example(
+    title: 'Stateful (smaller)',
+    icon: Icons.add_circle_outline,
+    path: 'smaller-stateful',
+    builder: (_) => const SmallerStatefulExample(),
+  ),
   Example(
     title: 'Parent ProviderScope',
     icon: Icons.child_care,
diff --git a/lib/presentation/smaller_stateful_example.dart b/lib/presentation/smaller_stateful_example.dart
new file mode 100644
index 0000000000000000000000000000000000000000..a6d421798827f55e5e81bbe38a6428c6d18ced22
--- /dev/null
+++ b/lib/presentation/smaller_stateful_example.dart
@@ -0,0 +1,55 @@
+import 'package:flutter/material.dart';
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+
+final countServiceProvider = StateNotifierProvider<CountService, int>((ref) => CountService(42)); // <1>
+
+class CountService extends StateNotifier<int> {
+  CountService(int firstValue) : super(firstValue);
+
+  void increment() {
+    state++;
+  }
+}
+
+class SmallerStatefulExample extends StatelessWidget {
+  const SmallerStatefulExample({Key? key}) : super(key: key);
+
+  @override
+  Widget build(BuildContext context) {
+    return const ProviderScope(
+      child: Counter(),
+    );
+  }
+}
+
+class Counter extends ConsumerStatefulWidget { // <2>
+  const Counter({Key? key}) : super(key: key);
+
+  @override
+  ConsumerState<Counter> createState() => _CounterState(); // <3>
+}
+
+class _CounterState extends ConsumerState<Counter> { // <4>
+  late int firstValue;
+
+  @override
+  void initState() {
+    super.initState();
+    firstValue = ref.read(countServiceProvider); // <5>
+  }
+
+  @override
+  Widget build(BuildContext context) { // <6>
+    final currentValue = ref.watch(countServiceProvider); // <7>
+
+    return Column(
+      mainAxisSize: MainAxisSize.min,
+      children: [
+        ElevatedButton( // <8>
+          onPressed: () => ref.read(countServiceProvider.notifier).increment(), // <9>
+          child: Text("Increment $firstValue -> $currentValue"),
+        ),
+      ],
+    );
+  }
+}
diff --git a/test/presentation/listener_test.dart b/test/presentation/listener_test.dart
new file mode 100644
index 0000000000000000000000000000000000000000..8caefbbf5600dfe99d528162731fcac5b1509f04
--- /dev/null
+++ b/test/presentation/listener_test.dart
@@ -0,0 +1,27 @@
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import '../utils.dart';
+
+final intProvider = StateProvider<int>((_) => 13); // <1>
+
+void main() {
+  test('doit écouter un état', () {
+    const defaultValue = -1;
+
+    // given:
+    final container = createContainer();
+
+    var intValue = defaultValue; // <2>
+    container.listen<int>(intProvider, (_, next) => intValue = next);
+
+    // expect:
+    expect(intValue, equals(defaultValue)); // <3>
+
+    // when:
+    container.read(intProvider.notifier).state = 42; // <4>
+
+    // then:
+    expect(intValue, equals(42)); // <5>
+  });
+}