diff --git a/README.md b/README.md
index deb330e..7436b2a 100644
--- a/README.md
+++ b/README.md
@@ -439,7 +439,8 @@ while it is read is left out, and the rest of the scrape continues.
`CanopyBrowseHtmlHandler` wraps it. Requests without `text/html` in `Accept` are passed through
unchanged. A browser gets a table per branch, with links into child branches and an editable field
-with a Save button per leaf.
+with a Save button per leaf. A dropdown below the title reloads the page every 1 to 60 seconds; the
+choice is kept in the browser, and no reload happens while an input has the focus.
```smalltalk
Canopy registerSystemMetrics.
diff --git a/source/Canopy-Core-Tests/CanopyBrowseHtmlHandlerTest.class.st b/source/Canopy-Core-Tests/CanopyBrowseHtmlHandlerTest.class.st
index 3aefa81..4779ee0 100644
--- a/source/Canopy-Core-Tests/CanopyBrowseHtmlHandlerTest.class.st
+++ b/source/Canopy-Core-Tests/CanopyBrowseHtmlHandlerTest.class.st
@@ -81,11 +81,33 @@ CanopyBrowseHtmlHandlerTest >> testHandleRequestEscapesHtmlSpecialCharactersInVa
] ensure: [ Canopy reset ]
]
+{ #category : 'tests' }
+CanopyBrowseHtmlHandlerTest >> testHandleRequestRendersAutoRefreshControlOnBranchPage [
+ "The dropdown sits right below the title, so it is the same place on every page."
+ | body |
+ [ self registerBrowseTestDomain.
+ body := (CanopyBrowseHtmlHandler new handleRequest: (self requestFor: #GET url: 'http://localhost/browseTest' accept: 'text/html' body: nil)) entity contents.
+ self assert: (body includesSubstring: '