diff --git a/ethcore/src/engines/mod.rs b/ethcore/src/engines/mod.rs
index e52db90fb..47a12435d 100644
--- a/ethcore/src/engines/mod.rs
+++ b/ethcore/src/engines/mod.rs
@@ -20,13 +20,15 @@ mod null_engine;
mod instant_seal;
mod basic_authority;
mod bft;
+mod signed_vote;
pub use self::null_engine::NullEngine;
pub use self::instant_seal::InstantSeal;
pub use self::basic_authority::BasicAuthority;
pub use self::bft::BFT;
+pub use self::signed_vote::VoteError;
-use common::*;
+use common::{HashMap, SemanticVersion, Header, EnvInfo, Address, Builtin, BTreeMap, U256, Bytes, SignedTransaction, Error};
use account_provider::AccountProvider;
use block::ExecutedBlock;
use spec::CommonParams;
diff --git a/ethcore/src/engines/signed_vote.rs b/ethcore/src/engines/signed_vote.rs
new file mode 100644
index 000000000..694b7cc9b
--- /dev/null
+++ b/ethcore/src/engines/signed_vote.rs
@@ -0,0 +1,101 @@
+// Copyright 2015, 2016 Ethcore (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 .
+
+//! Voting on hashes, where each vote has to come from a set of public keys.
+
+use common::*;
+use account_provider::AccountProvider;
+use block::*;
+use spec::CommonParams;
+use engines::Engine;
+use evm::Schedule;
+use ethjson;
+
+/// Signed voting on hashes.
+#[derive(Debug)]
+pub struct SignedVote {
+ /// Voter public keys.
+ pub voters: HashSet
,
+ /// Number of voters.
+ pub voter_n: usize,
+ /// Threshold vote number for success.
+ pub threshold: usize,
+ /// Votes.
+ votes: RwLock>>,
+ /// Winner hash, set after enough votes are reached.
+ winner: RwLock