diff --git a/rpc/src/v1/impls/light/mod.rs b/rpc/src/v1/impls/light/mod.rs
index 71a3a497d..3a09076a9 100644
--- a/rpc/src/v1/impls/light/mod.rs
+++ b/rpc/src/v1/impls/light/mod.rs
@@ -21,6 +21,8 @@
pub mod eth;
pub mod parity;
+pub mod parity_set;
pub use self::eth::EthClient;
pub use self::parity::ParityClient;
+pub use self::parity_set::ParitySetClient;
diff --git a/rpc/src/v1/impls/light/parity_set.rs b/rpc/src/v1/impls/light/parity_set.rs
new file mode 100644
index 000000000..4741f2bc0
--- /dev/null
+++ b/rpc/src/v1/impls/light/parity_set.rs
@@ -0,0 +1,143 @@
+// Copyright 2015-2017 Parity Technologies (UK) Ltd.
+// This file is part of Parity.
+
+// Parity is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+
+// Parity is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License
+// along with Parity. If not, see .
+
+//! Parity-specific rpc interface for operations altering the settings.
+//! Implementation for light client.
+
+use std::io;
+use std::sync::{Arc, Weak};
+
+use ethcore::miner::MinerService;
+use ethcore::client::MiningBlockChainClient;
+use ethcore::mode::Mode;
+use ethsync::ManageNetwork;
+use fetch::{self, Fetch};
+use futures::{BoxFuture, Future};
+use util::sha3;
+use updater::{Service as UpdateService};
+
+use jsonrpc_core::Error;
+use v1::helpers::errors;
+use v1::traits::ParitySet;
+use v1::types::{Bytes, H160, H256, U256, ReleaseInfo};
+
+/// Parity-specific rpc interface for operations altering the settings.
+pub struct ParitySetClient {
+ net: Arc,
+ fetch: F,
+}
+
+impl ParitySetClient {
+ /// Creates new `ParitySetClient` with given `Fetch`.
+ pub fn new(net: Arc, fetch: F) -> Self {
+ ParitySetClient {
+ net: net,
+ fetch: fetch,
+ }
+ }
+}
+
+impl ParitySet for ParitySetClient {
+
+ fn set_min_gas_price(&self, _gas_price: U256) -> Result {
+ Err(errors::light_unimplemented(None))
+ }
+
+ fn set_gas_floor_target(&self, _target: U256) -> Result {
+ Err(errors::light_unimplemented(None))
+ }
+
+ fn set_gas_ceil_target(&self, _target: U256) -> Result {
+ Err(errors::light_unimplemented(None))
+ }
+
+ fn set_extra_data(&self, _extra_data: Bytes) -> Result {
+ Err(errors::light_unimplemented(None))
+ }
+
+ fn set_author(&self, _author: H160) -> Result {
+ Err(errors::light_unimplemented(None))
+ }
+
+ fn set_engine_signer(&self, _address: H160, _password: String) -> Result {
+ Err(errors::light_unimplemented(None))
+ }
+
+ fn set_transactions_limit(&self, _limit: usize) -> Result {
+ Err(errors::light_unimplemented(None))
+ }
+
+ fn set_tx_gas_limit(&self, _limit: U256) -> Result {
+ Err(errors::light_unimplemented(None))
+ }
+
+ fn add_reserved_peer(&self, peer: String) -> Result {
+ match self.net.add_reserved_peer(peer) {
+ Ok(()) => Ok(true),
+ Err(e) => Err(errors::invalid_params("Peer address", e)),
+ }
+ }
+
+ fn remove_reserved_peer(&self, peer: String) -> Result {
+ match self.net.remove_reserved_peer(peer) {
+ Ok(()) => Ok(true),
+ Err(e) => Err(errors::invalid_params("Peer address", e)),
+ }
+ }
+
+ fn drop_non_reserved_peers(&self) -> Result {
+ self.net.deny_unreserved_peers();
+ Ok(true)
+ }
+
+ fn accept_non_reserved_peers(&self) -> Result {
+ self.net.accept_unreserved_peers();
+ Ok(true)
+ }
+
+ fn start_network(&self) -> Result {
+ self.net.start_network();
+ Ok(true)
+ }
+
+ fn stop_network(&self) -> Result {
+ self.net.stop_network();
+ Ok(true)
+ }
+
+ fn set_mode(&self, mode: String) -> Result {
+ Err(errors::light_unimplemented(None))
+ }
+
+ fn hash_content(&self, url: String) -> BoxFuture {
+ self.fetch.process(self.fetch.fetch(&url).then(move |result| {
+ result
+ .map_err(errors::from_fetch_error)
+ .and_then(|response| {
+ sha3(&mut io::BufReader::new(response)).map_err(errors::from_fetch_error)
+ })
+ .map(Into::into)
+ }))
+ }
+
+ fn upgrade_ready(&self) -> Result