diff --git a/src/client.rs b/src/client.rs
index b9933c0..cbe1548 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -137,7 +137,6 @@
 
         let root = local
             .fetch_metadata(
-                &Role::Root,
                 &MetadataPath::from_role(&Role::Root),
                 &MetadataVersion::Number(1),
                 &config.max_root_size,
@@ -146,7 +145,6 @@
             )
             .or_else(|_| {
                 local.fetch_metadata(
-                    &Role::Root,
                     &MetadataPath::from_role(&Role::Root),
                     &MetadataVersion::Number(1),
                     &config.max_root_size,
@@ -184,7 +182,6 @@
 
         let root = local
             .fetch_metadata(
-                &Role::Root,
                 &MetadataPath::from_role(&Role::Root),
                 &MetadataVersion::Number(1),
                 &config.max_root_size,
@@ -193,7 +190,6 @@
             )
             .or_else(|_| {
                 remote.fetch_metadata(
-                    &Role::Root,
                     &MetadataPath::from_role(&Role::Root),
                     &MetadataVersion::Number(1),
                     &config.max_root_size,
@@ -270,7 +266,6 @@
         U: PathTranslator,
     {
         let latest_root = repo.fetch_metadata(
-            &Role::Root,
             &MetadataPath::from_role(&Role::Root),
             &MetadataVersion::None,
             &config.max_root_size,
@@ -295,7 +290,6 @@
 
         for i in (tuf.root().version() + 1)..latest_version {
             let signed = repo.fetch_metadata(
-                &Role::Root,
                 &MetadataPath::from_role(&Role::Root),
                 &MetadataVersion::Number(i),
                 &config.max_root_size,
@@ -322,7 +316,6 @@
         U: PathTranslator,
     {
         let ts = repo.fetch_metadata(
-            &Role::Timestamp,
             &MetadataPath::from_role(&Role::Timestamp),
             &MetadataVersion::None,
             &config.max_timestamp_size,
@@ -357,7 +350,6 @@
         };
 
         let snap = repo.fetch_metadata(
-            &Role::Snapshot,
             &MetadataPath::from_role(&Role::Snapshot),
             &version,
             &Some(snapshot_description.size()),
@@ -401,7 +393,6 @@
         };
 
         let targets = repo.fetch_metadata(
-            &Role::Targets,
             &MetadataPath::from_role(&Role::Targets),
             &version,
             &Some(targets_description.size()),
@@ -516,7 +507,6 @@
 
                 let signed_meta = match local
                     .fetch_metadata::<TargetsMetadata>(
-                        &Role::Targets,
                         delegation.role(),
                         &MetadataVersion::None,
                         &Some(role_meta.size()),
@@ -525,7 +515,6 @@
                     )
                     .or_else(|_| {
                         remote.fetch_metadata::<TargetsMetadata>(
-                            &Role::Targets,
                             delegation.role(),
                             &version,
                             &Some(role_meta.size()),
@@ -547,7 +536,6 @@
                 match tuf.update_delegation(delegation.role(), &signed_meta) {
                     Ok(_) => {
                         match local.store_metadata(
-                            &Role::Targets,
                             delegation.role(),
                             &MetadataVersion::None,
                             &signed_meta,
@@ -816,7 +804,6 @@
             .unwrap();
 
         repo.store_metadata(
-            &Role::Root,
             &MetadataPath::from_role(&Role::Root),
             &MetadataVersion::Number(1),
             &root,
@@ -838,7 +825,6 @@
         root.add_signature(&KEYS[0]).unwrap();
 
         repo.store_metadata(
-            &Role::Root,
             &MetadataPath::from_role(&Role::Root),
             &MetadataVersion::Number(2),
             &root,
@@ -860,13 +846,11 @@
         root.add_signature(&KEYS[1]).unwrap();
 
         repo.store_metadata(
-            &Role::Root,
             &MetadataPath::from_role(&Role::Root),
             &MetadataVersion::Number(3),
             &root,
         ).unwrap();
         repo.store_metadata(
-            &Role::Root,
             &MetadataPath::from_role(&Role::Root),
             &MetadataVersion::None,
             &root,
diff --git a/src/repository.rs b/src/repository.rs
index e0d36a8..313069f 100644
--- a/src/repository.rs
+++ b/src/repository.rs
@@ -15,7 +15,7 @@
 use crypto::{self, HashAlgorithm, HashValue};
 use error::Error;
 use interchange::DataInterchange;
-use metadata::{SignedMetadata, MetadataVersion, Role, Metadata, TargetPath, TargetDescription,
+use metadata::{SignedMetadata, MetadataVersion, Metadata, TargetPath, TargetDescription,
                MetadataPath};
 use util::SafeReader;
 
@@ -37,7 +37,6 @@
     /// hashes of the metadata to match.
     fn store_metadata<M>(
         &mut self,
-        role: &Role,
         meta_path: &MetadataPath,
         version: &MetadataVersion,
         metadata: &SignedMetadata<D, M>,
@@ -48,7 +47,6 @@
     /// Fetch signed metadata.
     fn fetch_metadata<M>(
         &mut self,
-        role: &Role,
         meta_path: &MetadataPath,
         version: &MetadataVersion,
         max_size: &Option<usize>,
@@ -72,21 +70,13 @@
     ) -> Result<SafeReader<Self::TargetRead>>;
 
     /// Perform a sanity check that `M`, `Role`, and `MetadataPath` all desrcribe the same entity.
-    fn check<M>(role: &Role, meta_path: &MetadataPath) -> Result<()>
+    fn check<M>(meta_path: &MetadataPath) -> Result<()>
     where
         M: Metadata,
     {
-        if role != &M::role() {
-            return Err(Error::IllegalArgument(format!(
-                "Attempted to store {} metadata as {}.",
-                M::role(),
-                role
-            )));
-        }
-
-        if !role.fuzzy_matches_path(meta_path) {
+        if !M::role().fuzzy_matches_path(meta_path) {
             return Err(Error::IllegalArgument(
-                format!("Role {} does not match path {:?}", role, meta_path),
+                format!("Role {} does not match path {:?}", M::role(), meta_path),
             ));
         }
 
@@ -134,7 +124,6 @@
 
     fn store_metadata<M>(
         &mut self,
-        role: &Role,
         meta_path: &MetadataPath,
         version: &MetadataVersion,
         metadata: &SignedMetadata<D, M>,
@@ -142,7 +131,7 @@
     where
         M: Metadata,
     {
-        Self::check::<M>(role, meta_path)?;
+        Self::check::<M>(meta_path)?;
         let components = meta_path.components::<D>(version);
 
         let mut path = self.local_path.join("metadata");
@@ -168,7 +157,6 @@
     /// Fetch signed metadata.
     fn fetch_metadata<M>(
         &mut self,
-        role: &Role,
         meta_path: &MetadataPath,
         version: &MetadataVersion,
         max_size: &Option<usize>,
@@ -178,7 +166,7 @@
     where
         M: Metadata,
     {
-        Self::check::<M>(role, meta_path)?;
+        Self::check::<M>(meta_path)?;
 
         let mut path = self.local_path.join("metadata");
         path.extend(meta_path.components::<D>(&version));
@@ -338,7 +326,6 @@
     /// This always returns `Err` as storing over HTTP is not yet supported.
     fn store_metadata<M>(
         &mut self,
-        _: &Role,
         _: &MetadataPath,
         _: &MetadataVersion,
         _: &SignedMetadata<D, M>,
@@ -353,7 +340,6 @@
 
     fn fetch_metadata<M>(
         &mut self,
-        role: &Role,
         meta_path: &MetadataPath,
         version: &MetadataVersion,
         max_size: &Option<usize>,
@@ -363,7 +349,7 @@
     where
         M: Metadata,
     {
-        Self::check::<M>(role, meta_path)?;
+        Self::check::<M>(meta_path)?;
 
         let resp = self.get(
             &self.metadata_prefix,
@@ -452,7 +438,6 @@
 
     fn store_metadata<M>(
         &mut self,
-        role: &Role,
         meta_path: &MetadataPath,
         version: &MetadataVersion,
         metadata: &SignedMetadata<D, M>,
@@ -460,7 +445,7 @@
     where
         M: Metadata,
     {
-        Self::check::<M>(role, meta_path)?;
+        Self::check::<M>(meta_path)?;
         let mut buf = Vec::new();
         D::to_writer(&mut buf, metadata)?;
         let _ = self.metadata.insert(
@@ -472,7 +457,6 @@
 
     fn fetch_metadata<M>(
         &mut self,
-        role: &Role,
         meta_path: &MetadataPath,
         version: &MetadataVersion,
         max_size: &Option<usize>,
@@ -482,7 +466,7 @@
     where
         M: Metadata,
     {
-        Self::check::<M>(role, meta_path)?;
+        Self::check::<M>(meta_path)?;
 
         match self.metadata.get(&(meta_path.clone(), version.clone())) {
             Some(bytes) => {
diff --git a/tests/simple_example.rs b/tests/simple_example.rs
index fe7a89c..fc06d14 100644
--- a/tests/simple_example.rs
+++ b/tests/simple_example.rs
@@ -9,7 +9,7 @@
 use tuf::client::{Client, Config, PathTranslator};
 use tuf::crypto::{PrivateKey, SignatureScheme, KeyId, HashAlgorithm};
 use tuf::interchange::{DataInterchange, Json};
-use tuf::metadata::{RoleDefinition, RootMetadata, Role, MetadataVersion, MetadataPath,
+use tuf::metadata::{RoleDefinition, RootMetadata, MetadataVersion, MetadataPath,
                     SignedMetadata, TargetDescription, VirtualTargetPath, TargetsMetadata,
                     MetadataDescription, SnapshotMetadata, TimestampMetadata, TargetPath};
 use tuf::repository::{EphemeralRepository, Repository};
@@ -108,13 +108,11 @@
     let signed = SignedMetadata::<Json, RootMetadata>::new(&root, &root_key)?;
 
     remote.store_metadata(
-        &Role::Root,
         &MetadataPath::new("root".into())?,
         &MetadataVersion::Number(1),
         &signed,
     )?;
     remote.store_metadata(
-        &Role::Root,
         &MetadataPath::new("root".into())?,
         &MetadataVersion::None,
         &signed,
@@ -134,13 +132,11 @@
     let signed = SignedMetadata::<Json, TargetsMetadata>::new(&targets, &targets_key)?;
 
     remote.store_metadata(
-        &Role::Targets,
         &MetadataPath::new("targets".into())?,
         &MetadataVersion::Number(1),
         &signed,
     )?;
     remote.store_metadata(
-        &Role::Targets,
         &MetadataPath::new("targets".into())?,
         &MetadataVersion::None,
         &signed,
@@ -159,13 +155,11 @@
     let signed = SignedMetadata::<Json, SnapshotMetadata>::new(&snapshot, &snapshot_key)?;
 
     remote.store_metadata(
-        &Role::Snapshot,
         &MetadataPath::new("snapshot".into())?,
         &MetadataVersion::Number(1),
         &signed,
     )?;
     remote.store_metadata(
-        &Role::Snapshot,
         &MetadataPath::new("snapshot".into())?,
         &MetadataVersion::None,
         &signed,
@@ -180,13 +174,11 @@
     let signed = SignedMetadata::<Json, TimestampMetadata>::new(&timestamp, &timestamp_key)?;
 
     remote.store_metadata(
-        &Role::Timestamp,
         &MetadataPath::new("timestamp".into())?,
         &MetadataVersion::Number(1),
         &signed,
     )?;
     remote.store_metadata(
-        &Role::Timestamp,
         &MetadataPath::new("timestamp".into())?,
         &MetadataVersion::None,
         &signed,
