diff --git a/requirements-swh.txt b/requirements-swh.txt
--- a/requirements-swh.txt
+++ b/requirements-swh.txt
@@ -3,5 +3,5 @@
 swh.model >= 0.3.0
 swh.scheduler >= 0.1.1
 swh.search >= 0.0.4
-swh.storage >= 0.1.1
-swh.vault >= 0.0.33
\ No newline at end of file
+swh.storage >= 0.2.0
+swh.vault >= 0.0.33
diff --git a/swh/web/tests/api/views/test_origin.py b/swh/web/tests/api/views/test_origin.py
--- a/swh/web/tests/api/views/test_origin.py
+++ b/swh/web/tests/api/views/test_origin.py
@@ -1,4 +1,4 @@
-# Copyright (C) 2015-2019  The Software Heritage developers
+# Copyright (C) 2015-2020  The Software Heritage developers
 # See the AUTHORS file at the top-level directory of this distribution
 # License: GNU Affero General Public License version 3, or any later version
 # See top-level LICENSE file for more information
@@ -7,9 +7,10 @@
 import pytest
 from requests.utils import parse_header_links
 
-from swh.model.model import Origin
+from swh.model.model import Origin, OriginVisitStatus
 
 from swh.storage.exc import StorageDBError, StorageAPIError
+from swh.storage.utils import now
 
 from swh.web.api.utils import enrich_origin_visit, enrich_origin
 from swh.web.common.exc import BadInputExc
@@ -104,12 +105,14 @@
             new_origin.url, visit_date, type="git"
         )
         archive_data.snapshot_add([new_snapshots[i]])
-        archive_data.origin_visit_update(
-            new_origin.url,
-            origin_visit.visit,
+        visit_status = OriginVisitStatus(
+            origin=new_origin.url,
+            visit=origin_visit.visit,
+            date=now(),
             status="full",
             snapshot=new_snapshots[i].id,
         )
+        archive_data.origin_visit_status_add([visit_status])
 
     all_visits = list(reversed(get_origin_visits(new_origin.to_dict())))
 
@@ -150,12 +153,14 @@
             new_origin.url, visit_date, type="git"
         )
         archive_data.snapshot_add([new_snapshots[i]])
-        archive_data.origin_visit_update(
-            new_origin.url,
-            origin_visit.visit,
+        visit_status = OriginVisitStatus(
+            origin=new_origin.url,
+            visit=origin_visit.visit,
+            date=now(),
             status="full",
             snapshot=new_snapshots[i].id,
         )
+        archive_data.origin_visit_status_add([visit_status])
 
     all_visits = list(reversed(get_origin_visits(new_origin.to_dict())))
 
@@ -197,9 +202,14 @@
         )
         visit_id = origin_visit.visit
         archive_data.snapshot_add([new_snapshots[i]])
-        archive_data.origin_visit_update(
-            new_origin.url, visit_id, status="full", snapshot=new_snapshots[i].id
+        visit_status = OriginVisitStatus(
+            origin=new_origin.url,
+            visit=origin_visit.visit,
+            date=now(),
+            status="full",
+            snapshot=new_snapshots[i].id,
         )
+        archive_data.origin_visit_status_add([visit_status])
         url = reverse(
             "api-1-origin-visit",
             url_args={"origin_url": new_origin.url, "visit_id": visit_id},
@@ -249,9 +259,15 @@
         visit_ids.append(origin_visit.visit)
 
     archive_data.snapshot_add([new_snapshots[0]])
-    archive_data.origin_visit_update(
-        new_origin.url, visit_ids[0], status="full", snapshot=new_snapshots[0].id
+
+    visit_status = OriginVisitStatus(
+        origin=new_origin.url,
+        visit=visit_ids[0],
+        date=now(),
+        status="full",
+        snapshot=new_snapshots[0].id,
     )
+    archive_data.origin_visit_status_add([visit_status])
 
     url = reverse("api-1-origin-visit-latest", url_args={"origin_url": new_origin.url})
 
@@ -286,9 +302,15 @@
         visit_ids.append(origin_visit.visit)
 
     archive_data.snapshot_add([new_snapshots[0]])
-    archive_data.origin_visit_update(
-        new_origin.url, visit_ids[0], status="full", snapshot=new_snapshots[0].id
+
+    visit_status = OriginVisitStatus(
+        origin=new_origin.url,
+        visit=visit_ids[0],
+        date=now(),
+        status="full",
+        snapshot=new_snapshots[0].id,
     )
+    archive_data.origin_visit_status_add([visit_status])
 
     url = reverse(
         "api-1-origin-visit-latest",
diff --git a/swh/web/tests/browse/views/test_origin.py b/swh/web/tests/browse/views/test_origin.py
--- a/swh/web/tests/browse/views/test_origin.py
+++ b/swh/web/tests/browse/views/test_origin.py
@@ -3,7 +3,6 @@
 # License: GNU Affero General Public License version 3, or any later version
 # See top-level LICENSE file for more information
 
-from datetime import datetime, timezone
 import random
 import re
 import string
@@ -13,13 +12,11 @@
 
 from hypothesis import given
 
+from swh.storage.utils import now
+
 from swh.model.hashutil import hash_to_bytes
 from swh.model.identifiers import CONTENT, DIRECTORY, RELEASE, REVISION, SNAPSHOT
-from swh.model.model import (
-    Snapshot,
-    SnapshotBranch,
-    TargetType,
-)
+from swh.model.model import Snapshot, SnapshotBranch, TargetType, OriginVisitStatus
 from swh.web.browse.snapshot_context import process_snapshot_branches
 from swh.web.common.exc import NotFoundExc
 from swh.web.common.identifiers import get_swh_persistent_id
@@ -507,9 +504,14 @@
 
     archive_data.snapshot_add([Snapshot.from_dict(snp_dict)])
     visit = archive_data.origin_visit_add(new_origin["url"], visit_dates[0], type="git")
-    archive_data.origin_visit_update(
-        new_origin["url"], visit.visit, status="partial", snapshot=snp_dict["id"]
+    visit_status = OriginVisitStatus(
+        origin=new_origin["url"],
+        visit=visit.visit,
+        date=now(),
+        status="partial",
+        snapshot=snp_dict["id"],
     )
+    archive_data.origin_visit_status_add([visit_status])
 
     url = reverse(
         "browse-origin-directory", query_params={"origin_url": new_origin["url"]}
@@ -537,9 +539,14 @@
 
     archive_data.snapshot_add([Snapshot.from_dict(snp_dict)])
     visit = archive_data.origin_visit_add(new_origin["url"], visit_dates[0], type="git")
-    archive_data.origin_visit_update(
-        new_origin["url"], visit.visit, status="full", snapshot=snp_dict["id"]
+    visit_status = OriginVisitStatus(
+        origin=new_origin["url"],
+        visit=visit.visit,
+        date=now(),
+        status="full",
+        snapshot=snp_dict["id"],
     )
+    archive_data.origin_visit_status_add([visit_status])
 
     url = reverse(
         "browse-origin-directory",
@@ -779,12 +786,15 @@
     )
     new_origin = archive_data.origin_add([new_origin])[0]
     archive_data.snapshot_add([snapshot])
-    visit = archive_data.origin_visit_add(
-        new_origin["url"], datetime.now(tz=timezone.utc), type="git"
-    )
-    archive_data.origin_visit_update(
-        new_origin["url"], visit.visit, status="full", snapshot=snapshot.id
+    visit = archive_data.origin_visit_add(new_origin["url"], now(), type="git")
+    visit_status = OriginVisitStatus(
+        origin=new_origin["url"],
+        visit=visit.visit,
+        date=now(),
+        status="partial",
+        snapshot=snapshot.id,
     )
+    archive_data.origin_visit_status_add([visit_status])
 
     url = reverse(
         "browse-origin-directory",
@@ -1258,9 +1268,14 @@
     new_origin = archive_data.origin_add([new_origin])[0]
     archive_data.snapshot_add([Snapshot.from_dict(snp_dict)])
     visit = archive_data.origin_visit_add(new_origin["url"], visit_dates[0], type="git")
-    archive_data.origin_visit_update(
-        new_origin["url"], visit.visit, status="full", snapshot=snp_dict["id"]
-    )
+    visit_status = OriginVisitStatus(
+        origin=new_origin["url"],
+        visit=visit.visit,
+        date=now(),
+        status="full",
+        snapshot=snp_dict["id"],
+    )
+    archive_data.origin_visit_status_add([visit_status])
 
     url = reverse(
         "browse-origin-branches", query_params={"origin_url": new_origin["url"]}
diff --git a/swh/web/tests/data.py b/swh/web/tests/data.py
--- a/swh/web/tests/data.py
+++ b/swh/web/tests/data.py
@@ -3,6 +3,7 @@
 # License: GNU Affero General Public License version 3, or any later version
 # See top-level LICENSE file for more information
 
+import datetime
 import os
 import random
 
@@ -12,7 +13,7 @@
 from swh.indexer.mimetype import MimetypeIndexer
 from swh.indexer.ctags import CtagsIndexer
 from swh.indexer.storage import get_indexer_storage
-from swh.model.model import Content
+from swh.model.model import Content, OriginVisitStatus
 from swh.model.hashutil import hash_to_hex, hash_to_bytes, DEFAULT_ALGORITHMS
 from swh.model.model import Directory, Origin
 from swh.loader.git.from_disk import GitLoaderFromArchive
@@ -192,13 +193,16 @@
         # storage.origin_add([{'url': url}])
         storage.origin_add([Origin(url=url)])
         search.origin_update([{"url": url, "has_visits": True}])
-        visit = storage.origin_visit_add(url, "2019-12-03 13:55:05Z", "tar")
-        storage.origin_visit_update(
-            url,
-            visit.visit,
+        date = datetime.datetime(2019, 12, 3, 13, 55, 5, tzinfo=datetime.timezone.utc)
+        visit = storage.origin_visit_add(url, date, "tar")
+        visit_status = OriginVisitStatus(
+            origin=url,
+            visit=visit.visit,
+            date=date,
             status="full",
             snapshot=hash_to_bytes("1a8893e6a86f444e8be8e7bda6cb34fb1735a00e"),
         )
+        storage.origin_visit_status_add([visit_status])
 
     contents = set()
     directories = set()