diff --git a/substrate/node/runtime/src/lib.rs b/substrate/node/runtime/src/lib.rs
index d1b9abd4cf1bf0a6e8cfe31cdf430196fe9c3f13..0c5cdefd96f8c702c82b0ac234af5567cb864d6a 100644
--- a/substrate/node/runtime/src/lib.rs
+++ b/substrate/node/runtime/src/lib.rs
@@ -80,7 +80,7 @@ pub const VERSION: RuntimeVersion = RuntimeVersion {
 	// implementation changes and behavior does not, then leave spec_version as
 	// is and increment impl_version.
 	spec_version: 151,
-	impl_version: 151,
+	impl_version: 152,
 	apis: RUNTIME_API_VERSIONS,
 };
 
diff --git a/substrate/srml/aura/src/lib.rs b/substrate/srml/aura/src/lib.rs
index e02a2e1f0a0ec67192d52461ad1e1cd5fec6d918..4df832912a54383b700a80505789996079a1cbdf 100644
--- a/substrate/srml/aura/src/lib.rs
+++ b/substrate/srml/aura/src/lib.rs
@@ -258,7 +258,7 @@ impl<T: Trait> Module<T> {
 
 	fn on_timestamp_set(now: T::Moment, slot_duration: T::Moment) {
 		let last = Self::last();
-		<Self as Store>::LastTimestamp::put(now.clone());
+		<Self as Store>::LastTimestamp::put(now);
 
 		if last.is_zero() {
 			return;
@@ -266,7 +266,7 @@ impl<T: Trait> Module<T> {
 
 		assert!(!slot_duration.is_zero(), "Aura slot duration cannot be zero.");
 
-		let last_slot = last / slot_duration.clone();
+		let last_slot = last / slot_duration;
 		let cur_slot = now / slot_duration;
 
 		assert!(last_slot < cur_slot, "Only one block may be authored per slot.");
diff --git a/substrate/srml/democracy/src/lib.rs b/substrate/srml/democracy/src/lib.rs
index d4cfedc37bdb2a107a5423c18bdf4fabed359a00..f1265438f29fc5408191b98eeea867b7ff36a357 100644
--- a/substrate/srml/democracy/src/lib.rs
+++ b/substrate/srml/democracy/src/lib.rs
@@ -946,12 +946,12 @@ impl<T: Trait> Module<T> {
 		if (now % T::LaunchPeriod::get()).is_zero() {
 			// Errors come from the queue being empty. we don't really care about that, and even if
 			// we did, there is nothing we can do here.
-			let _ = Self::launch_next(now.clone());
+			let _ = Self::launch_next(now);
 		}
 
 		// tally up votes for any expiring referenda.
 		for (index, info) in Self::maturing_referenda_at(now).into_iter() {
-			Self::bake_referendum(now.clone(), index, info)?;
+			Self::bake_referendum(now, index, info)?;
 		}
 
 		for (proposal, index) in <DispatchQueue<T>>::take(now).into_iter().filter_map(|x| x) {
diff --git a/substrate/srml/staking/src/lib.rs b/substrate/srml/staking/src/lib.rs
index a4d1ed88abfb8f61208fcf45aab3e480b666390f..2e46d6b2b4a49e1741ac766d77304df26f9d3195 100644
--- a/substrate/srml/staking/src/lib.rs
+++ b/substrate/srml/staking/src/lib.rs
@@ -1179,7 +1179,7 @@ impl<T: Trait> Module<T> {
 		let rewards = CurrentEraRewards::take();
 		let now = T::Time::now();
 		let previous_era_start = <CurrentEraStart<T>>::mutate(|v| {
-			rstd::mem::replace(v, now.clone())
+			rstd::mem::replace(v, now)
 		});
 		let era_duration = now - previous_era_start;
 		if !era_duration.is_zero() {
diff --git a/substrate/srml/support/src/traits.rs b/substrate/srml/support/src/traits.rs
index cca9fd2b10376d92c8fac652aff730a0ea59732c..37262cdfcb51edf0ea1b69d0429c4260c249ee34 100644
--- a/substrate/srml/support/src/traits.rs
+++ b/substrate/srml/support/src/traits.rs
@@ -620,7 +620,7 @@ bitmask! {
 }
 
 pub trait Time {
-	type Moment: SimpleArithmetic + Codec + Clone + Default;
+	type Moment: SimpleArithmetic + Codec + Clone + Default + Copy;
 
 	fn now() -> Self::Moment;
 }
diff --git a/substrate/srml/timestamp/src/lib.rs b/substrate/srml/timestamp/src/lib.rs
index 78a741aff48a5516c6f683058ba832c146073384..1b03b5b9af79f5038381cdd21e0c60d8d43f64af 100644
--- a/substrate/srml/timestamp/src/lib.rs
+++ b/substrate/srml/timestamp/src/lib.rs
@@ -195,9 +195,9 @@ macro_rules! impl_timestamp_set {
 	);
 
 	( $($t:ident)* ) => {
-		impl<Moment: Clone, $($t: OnTimestampSet<Moment>),*> OnTimestampSet<Moment> for ($($t,)*) {
+		impl<Moment: Copy, $($t: OnTimestampSet<Moment>),*> OnTimestampSet<Moment> for ($($t,)*) {
 			fn on_timestamp_set(moment: Moment) {
-				$($t::on_timestamp_set(moment.clone());)*
+				$($t::on_timestamp_set(moment);)*
 			}
 		}
 	}
@@ -209,7 +209,7 @@ for_each_tuple!(impl_timestamp_set);
 pub trait Trait: system::Trait {
 	/// Type used for expressing timestamp.
 	type Moment: Parameter + Default + SimpleArithmetic
-		+ Scale<Self::BlockNumber, Output = Self::Moment>;
+		+ Scale<Self::BlockNumber, Output = Self::Moment> + Copy;
 
 	/// Something which can be notified when the timestamp is set. Set this to `()` if not needed.
 	type OnTimestampSet: OnTimestampSet<Self::Moment>;
@@ -246,7 +246,7 @@ decl_module! {
 				Self::now().is_zero() || now >= Self::now() + T::MinimumPeriod::get(),
 				"Timestamp must increment by at least <MinimumPeriod> between sequential blocks"
 			);
-			<Self as Store>::Now::put(now.clone());
+			<Self as Store>::Now::put(now);
 			<Self as Store>::DidUpdate::put(true);
 
 			<T::OnTimestampSet as OnTimestampSet<_>>::on_timestamp_set(now);