diff --git a/prices/src/lib.rs b/prices/src/lib.rs
index b727568dd0a5210ae8aab486eb4d1f51865bea03..5597d7885c038fc16f6ef4ad1e0cc6564dbe065b 100644
--- a/prices/src/lib.rs
+++ b/prices/src/lib.rs
@@ -2,12 +2,14 @@
 
 use frame_support::{decl_module, decl_storage, Parameter};
 use orml_traits::{DataProvider, PriceProvider};
-use sr_primitives::traits::{MaybeSerializeDeserialize, Member, SimpleArithmetic, Zero};
+use orml_utilities::FixedU128;
+use sr_primitives::traits::{MaybeSerializeDeserialize, Member};
+
+pub type Price = FixedU128;
 
 pub trait Trait: frame_system::Trait {
 	type CurrencyId: Parameter + Member + Copy + MaybeSerializeDeserialize;
-	type Price: Parameter + Member + Zero + SimpleArithmetic + Copy + Ord;
-	type Source: DataProvider<Self::CurrencyId, Self::Price>;
+	type Source: DataProvider<Self::CurrencyId, Price>;
 }
 
 mod mock;
@@ -23,14 +25,11 @@ decl_module! {
 
 impl<T: Trait> Module<T> {}
 
-impl<T: Trait> PriceProvider<T::CurrencyId, T::Price> for Module<T> {
-	fn get_price(base: T::CurrencyId, quote: T::CurrencyId) -> Option<T::Price> {
-		if let (Some(base_price), Some(quote_price)) = (T::Source::get(&base), (T::Source::get(&quote))) {
-			if !base_price.is_zero() {
-				return Some(quote_price / base_price);
-			}
-		}
+impl<T: Trait> PriceProvider<T::CurrencyId, Price> for Module<T> {
+	fn get_price(base_currency_id: T::CurrencyId, quote_currency_id: T::CurrencyId) -> Option<Price> {
+		let base_price = T::Source::get(&base_currency_id)?;
+		let quote_price = T::Source::get(&quote_currency_id)?;
 
-		None
+		quote_price.checked_div(&base_price)
 	}
 }
diff --git a/prices/src/mock.rs b/prices/src/mock.rs
index aee5056ddea7e41316b16645b49e902cb859c645..5e4e9d5542f56e6187c7fe7fe856473323f12e31 100644
--- a/prices/src/mock.rs
+++ b/prices/src/mock.rs
@@ -44,16 +44,15 @@ impl frame_system::Trait for Runtime {
 	type Version = ();
 }
 
-type Price = u32;
 type CurrencyId = u32;
 
 pub struct MockDataProvider;
 impl DataProvider<CurrencyId, Price> for MockDataProvider {
 	fn get(currency: &CurrencyId) -> Option<Price> {
 		match currency {
-			0 => Some(0),
-			1 => Some(1),
-			2 => Some(2),
+			0 => Some(Price::from_parts(0)),
+			1 => Some(Price::from_parts(1)),
+			2 => Some(Price::from_parts(2)),
 			_ => None,
 		}
 	}
@@ -61,7 +60,6 @@ impl DataProvider<CurrencyId, Price> for MockDataProvider {
 
 impl Trait for Runtime {
 	type CurrencyId = CurrencyId;
-	type Price = Price;
 	type Source = MockDataProvider;
 }
 
diff --git a/prices/src/tests.rs b/prices/src/tests.rs
index ac07fc9e81258f7b2de7b0d42e6f4e68c3aa7e30..f241d15a3b603c5d3383f962aba7669b32d2e08f 100644
--- a/prices/src/tests.rs
+++ b/prices/src/tests.rs
@@ -8,7 +8,7 @@ use mock::{ExtBuilder, PricesModule};
 #[test]
 fn get_price_should_work() {
 	ExtBuilder::default().build().execute_with(|| {
-		assert_eq!(PricesModule::get_price(1, 2), Some(2));
+		assert_eq!(PricesModule::get_price(1, 2), Some(Price::from_rational(2, 1)));
 	});
 }
 
@@ -25,6 +25,6 @@ fn price_is_none_should_not_panic() {
 fn price_is_zero_should_not_panic() {
 	ExtBuilder::default().build().execute_with(|| {
 		assert_eq!(PricesModule::get_price(0, 0), None);
-		assert_eq!(PricesModule::get_price(1, 0), Some(0));
+		assert_eq!(PricesModule::get_price(1, 0), Some(Price::from_parts(0)));
 	});
 }