diff --git a/src/client.rs b/src/client.rs
index b9933c0..145ccae 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -28,7 +28,8 @@
 //!         .map(|k| KeyId::from_string(k).unwrap())
 //!         .collect();
 //!
-//!     let local = FileSystemRepository::<Json>::new(PathBuf::from("~/.rustup"));
+//!     let local = FileSystemRepository::<Json>::new(PathBuf::from("~/.rustup"))
+//!         .unwrap();
 //!
 //!     let remote = HttpRepository::new(
 //!         Url::parse("https://static.rust-lang.org/").unwrap(),
@@ -131,10 +132,7 @@
     ///
     /// **WARNING**: This method offers weaker security guarantees than the related method
     /// `with_root_pinned`.
-    pub fn new(config: Config<T>, mut local: L, mut remote: R) -> Result<Self> {
-        local.initialize()?;
-        remote.initialize()?;
-
+    pub fn new(config: Config<T>, mut local: L, remote: R) -> Result<Self> {
         let root = local
             .fetch_metadata(
                 &Role::Root,
@@ -179,9 +177,6 @@
         I: IntoIterator<Item = &'a KeyId>,
         T: PathTranslator,
     {
-        local.initialize()?;
-        remote.initialize()?;
-
         let root = local
             .fetch_metadata(
                 &Role::Root,
diff --git a/src/repository.rs b/src/repository.rs
index 160aecd..1bfe691 100644
--- a/src/repository.rs
+++ b/src/repository.rs
@@ -28,9 +28,6 @@
     /// The type returned when reading a target.
     type TargetRead: Read;
 
-    /// Initialize the repository.
-    fn initialize(&mut self) -> Result<()>;
-
     /// Store signed metadata.
     ///
     /// Note: This **MUST** canonicalize the bytes before storing them as a read will expect the
@@ -108,11 +105,17 @@
     D: DataInterchange,
 {
     /// Create a new repository on the local file system.
-    pub fn new(local_path: PathBuf) -> Self {
-        FileSystemRepository {
+    pub fn new(local_path: PathBuf) -> Result<Self> {
+        for p in &["metadata", "targets", "temp"] {
+            DirBuilder::new().recursive(true).create(
+                local_path.join(p),
+            )?
+        }
+
+        Ok(FileSystemRepository {
             local_path,
             interchange: PhantomData,
-        }
+        })
     }
 }
 
@@ -122,16 +125,6 @@
 {
     type TargetRead = File;
 
-    fn initialize(&mut self) -> Result<()> {
-        for p in &["metadata", "targets", "temp"] {
-            DirBuilder::new().recursive(true).create(
-                self.local_path.join(p),
-            )?
-        }
-
-        Ok(())
-    }
-
     fn store_metadata<M>(
         &mut self,
         role: &Role,
@@ -331,10 +324,6 @@
 {
     type TargetRead = Response;
 
-    fn initialize(&mut self) -> Result<()> {
-        Ok(())
-    }
-
     /// This always returns `Err` as storing over HTTP is not yet supported.
     fn store_metadata<M>(
         &mut self,
@@ -446,10 +435,6 @@
 {
     type TargetRead = Cursor<Vec<u8>>;
 
-    fn initialize(&mut self) -> Result<()> {
-        Ok(())
-    }
-
     fn store_metadata<M>(
         &mut self,
         role: &Role,
@@ -540,7 +525,6 @@
     #[test]
     fn ephemeral_repo_targets() {
         let mut repo = EphemeralRepository::<Json>::new();
-        repo.initialize().unwrap();
 
         let data: &[u8] = b"like tears in the rain";
         let target_description = TargetDescription::from_reader(data, &[HashAlgorithm::Sha256])
@@ -562,8 +546,7 @@
     #[test]
     fn file_system_repo_targets() {
         let temp_dir = TempDir::new("rust-tuf").unwrap();
-        let mut repo = FileSystemRepository::<Json>::new(temp_dir.path().to_path_buf());
-        repo.initialize().unwrap();
+        let mut repo = FileSystemRepository::<Json>::new(temp_dir.path().to_path_buf()).unwrap();
 
         // test that init worked
         assert!(temp_dir.path().join("metadata").exists());
