diff --git a/core/src/main/kotlin/net/corda/core/contracts/DummyContractV2.kt b/core/src/main/kotlin/net/corda/core/contracts/DummyContractV2.kt
deleted file mode 100644
index a0c4386236..0000000000
--- a/core/src/main/kotlin/net/corda/core/contracts/DummyContractV2.kt
+++ /dev/null
@@ -1,60 +0,0 @@
-package net.corda.core.contracts
-
-import net.corda.core.crypto.SecureHash
-import net.corda.core.identity.AbstractParty
-import net.corda.core.transactions.WireTransaction
-import net.corda.flows.ContractUpgradeFlow
-
-// The dummy contract doesn't do anything useful. It exists for testing purposes.
-val DUMMY_V2_PROGRAM_ID = DummyContractV2()
-
-/**
- * Dummy contract state for testing of the upgrade process.
- */
-// DOCSTART 1
-class DummyContractV2 : UpgradedContract<DummyContract.State, DummyContractV2.State> {
-    override val legacyContract = DummyContract::class.java
-
-    data class State(val magicNumber: Int = 0, val owners: List<AbstractParty>) : ContractState {
-        override val contract = DUMMY_V2_PROGRAM_ID
-        override val participants: List<AbstractParty> = owners
-    }
-
-    interface Commands : CommandData {
-        class Create : TypeOnlyCommandData(), Commands
-        class Move : TypeOnlyCommandData(), Commands
-    }
-
-    override fun upgrade(state: DummyContract.State): DummyContractV2.State {
-        return DummyContractV2.State(state.magicNumber, state.participants)
-    }
-
-    override fun verify(tx: TransactionForContract) {
-        if (tx.commands.any { it.value is UpgradeCommand }) ContractUpgradeFlow.verify(tx)
-        // Other verifications.
-    }
-
-    // The "empty contract"
-    override val legalContractReference: SecureHash = SecureHash.sha256("")
-    // DOCEND 1
-    /**
-     * Generate an upgrade transaction from [DummyContract].
-     *
-     * Note: This is a convenience helper method used for testing only.
-     *
-     * @return a pair of wire transaction, and a set of those who should sign the transaction for it to be valid.
-     */
-    fun generateUpgradeFromV1(vararg states: StateAndRef<DummyContract.State>): Pair<WireTransaction, Set<AbstractParty>> {
-        val notary = states.map { it.state.notary }.single()
-        require(states.isNotEmpty())
-
-        val signees: Set<AbstractParty> = states.flatMap { it.state.data.participants }.distinct().toSet()
-        return Pair(TransactionType.General.Builder(notary).apply {
-            states.forEach {
-                addInputState(it)
-                addOutputState(upgrade(it.state.data))
-                addCommand(UpgradeCommand(DUMMY_V2_PROGRAM_ID.javaClass), signees.map { it.owningKey }.toList())
-            }
-        }.toWireTransaction(), signees)
-    }
-}
diff --git a/core/src/main/kotlin/net/corda/core/contracts/DummyLinearContract.kt b/core/src/main/kotlin/net/corda/core/contracts/DummyLinearContract.kt
deleted file mode 100644
index a2bffbe78d..0000000000
--- a/core/src/main/kotlin/net/corda/core/contracts/DummyLinearContract.kt
+++ /dev/null
@@ -1,60 +0,0 @@
-package net.corda.core.contracts
-
-import net.corda.core.contracts.clauses.Clause
-import net.corda.core.contracts.clauses.FilterOn
-import net.corda.core.contracts.clauses.verifyClause
-import net.corda.core.crypto.SecureHash
-import net.corda.core.crypto.containsAny
-import net.corda.core.identity.AbstractParty
-import net.corda.core.schemas.*
-import java.security.PublicKey
-import java.time.Instant
-import java.time.LocalDateTime
-import java.time.ZoneOffset
-
-class DummyLinearContract : Contract {
-    override val legalContractReference: SecureHash = SecureHash.sha256("Test")
-
-    val clause: Clause<State, CommandData, Unit> = LinearState.ClauseVerifier()
-    override fun verify(tx: TransactionForContract) = verifyClause(tx,
-            FilterOn(clause, { states -> states.filterIsInstance<State>() }),
-            emptyList())
-
-    data class State(
-            override val linearId: UniqueIdentifier = UniqueIdentifier(),
-            override val contract: Contract = DummyLinearContract(),
-            override val participants: List<AbstractParty> = listOf(),
-            val linearString: String = "ABC",
-            val linearNumber: Long = 123L,
-            val linearTimestamp: Instant = LocalDateTime.now().toInstant(ZoneOffset.UTC),
-            val linearBoolean: Boolean = true,
-            val nonce: SecureHash = SecureHash.randomSHA256()) : LinearState, QueryableState {
-
-        override fun isRelevant(ourKeys: Set<PublicKey>): Boolean {
-            return participants.any { it.owningKey.containsAny(ourKeys) }
-        }
-
-        override fun supportedSchemas(): Iterable<MappedSchema> = listOf(DummyLinearStateSchemaV1, DummyLinearStateSchemaV2)
-
-        override fun generateMappedObject(schema: MappedSchema): PersistentState {
-            return when (schema) {
-                is DummyLinearStateSchemaV1 -> DummyLinearStateSchemaV1.PersistentDummyLinearState(
-                    externalId = linearId.externalId,
-                    uuid = linearId.id,
-                    linearString = linearString,
-                    linearNumber = linearNumber,
-                    linearTimestamp = linearTimestamp,
-                    linearBoolean = linearBoolean
-                )
-                is DummyLinearStateSchemaV2 -> DummyLinearStateSchemaV2.PersistentDummyLinearState(
-                        uid = linearId,
-                        linearString = linearString,
-                        linearNumber = linearNumber,
-                        linearTimestamp = linearTimestamp,
-                        linearBoolean = linearBoolean
-                )
-                else -> throw IllegalArgumentException("Unrecognised schema $schema")
-            }
-        }
-    }
-}
\ No newline at end of file
diff --git a/core/src/main/kotlin/net/corda/core/contracts/DummyState.kt b/core/src/main/kotlin/net/corda/core/contracts/DummyState.kt
deleted file mode 100644
index 1498b8c379..0000000000
--- a/core/src/main/kotlin/net/corda/core/contracts/DummyState.kt
+++ /dev/null
@@ -1,12 +0,0 @@
-package net.corda.core.contracts
-
-import net.corda.core.identity.AbstractParty
-
-/**
- * Dummy state for use in testing. Not part of any contract, not even the [DummyContract].
- */
-data class DummyState(val magicNumber: Int = 0) : ContractState {
-    override val contract = DUMMY_PROGRAM_ID
-    override val participants: List<AbstractParty>
-        get() = emptyList()
-}
diff --git a/core/src/main/kotlin/net/corda/core/contracts/DummyContract.kt b/core/src/main/kotlin/net/corda/core/contracts/testing/DummyContract.kt
similarity index 90%
rename from core/src/main/kotlin/net/corda/core/contracts/DummyContract.kt
rename to core/src/main/kotlin/net/corda/core/contracts/testing/DummyContract.kt
index 31e85f859c..5edc0d4f19 100644
--- a/core/src/main/kotlin/net/corda/core/contracts/DummyContract.kt
+++ b/core/src/main/kotlin/net/corda/core/contracts/testing/DummyContract.kt
@@ -1,5 +1,6 @@
-package net.corda.core.contracts
+package net.corda.core.contracts.testing
 
+import net.corda.core.contracts.*
 import net.corda.core.crypto.SecureHash
 import net.corda.core.identity.AbstractParty
 import net.corda.core.identity.Party
@@ -55,8 +56,8 @@ data class DummyContract(override val legalContractReference: SecureHash = Secur
             }
         }
 
-        fun move(prior: StateAndRef<DummyContract.SingleOwnerState>, newOwner: AbstractParty) = move(listOf(prior), newOwner)
-        fun move(priors: List<StateAndRef<DummyContract.SingleOwnerState>>, newOwner: AbstractParty): TransactionBuilder {
+        fun move(prior: StateAndRef<SingleOwnerState>, newOwner: AbstractParty) = move(listOf(prior), newOwner)
+        fun move(priors: List<StateAndRef<SingleOwnerState>>, newOwner: AbstractParty): TransactionBuilder {
             require(priors.isNotEmpty())
             val priorState = priors[0].state.data
             val (cmd, state) = priorState.withNewOwner(newOwner)
diff --git a/core/src/main/kotlin/net/corda/core/contracts/testing/DummyContractV2.kt b/core/src/main/kotlin/net/corda/core/contracts/testing/DummyContractV2.kt
new file mode 100644
index 0000000000..5e6be3631e
--- /dev/null
+++ b/core/src/main/kotlin/net/corda/core/contracts/testing/DummyContractV2.kt
@@ -0,0 +1,55 @@
+package net.corda.core.contracts.testing
+
+// The dummy contract doesn't do anything useful. It exists for testing purposes.
+val DUMMY_V2_PROGRAM_ID = net.corda.core.contracts.testing.DummyContractV2()
+
+/**
+ * Dummy contract state for testing of the upgrade process.
+ */
+// DOCSTART 1
+class DummyContractV2 : net.corda.core.contracts.UpgradedContract<DummyContract.State, DummyContractV2.State> {
+    override val legacyContract = DummyContract::class.java
+
+    data class State(val magicNumber: Int = 0, val owners: List<net.corda.core.identity.AbstractParty>) : net.corda.core.contracts.ContractState {
+        override val contract = net.corda.core.contracts.testing.DUMMY_V2_PROGRAM_ID
+        override val participants: List<net.corda.core.identity.AbstractParty> = owners
+    }
+
+    interface Commands : net.corda.core.contracts.CommandData {
+        class Create : net.corda.core.contracts.TypeOnlyCommandData(), net.corda.core.contracts.testing.DummyContractV2.Commands
+        class Move : net.corda.core.contracts.TypeOnlyCommandData(), net.corda.core.contracts.testing.DummyContractV2.Commands
+    }
+
+    override fun upgrade(state: DummyContract.State): net.corda.core.contracts.testing.DummyContractV2.State {
+        return net.corda.core.contracts.testing.DummyContractV2.State(state.magicNumber, state.participants)
+    }
+
+    override fun verify(tx: net.corda.core.contracts.TransactionForContract) {
+        if (tx.commands.any { it.value is net.corda.core.contracts.UpgradeCommand }) net.corda.flows.ContractUpgradeFlow.Companion.verify(tx)
+        // Other verifications.
+    }
+
+    // The "empty contract"
+    override val legalContractReference: net.corda.core.crypto.SecureHash = net.corda.core.crypto.SecureHash.Companion.sha256("")
+    // DOCEND 1
+    /**
+     * Generate an upgrade transaction from [DummyContract].
+     *
+     * Note: This is a convenience helper method used for testing only.
+     *
+     * @return a pair of wire transaction, and a set of those who should sign the transaction for it to be valid.
+     */
+    fun generateUpgradeFromV1(vararg states: net.corda.core.contracts.StateAndRef<DummyContract.State>): Pair<net.corda.core.transactions.WireTransaction, Set<net.corda.core.identity.AbstractParty>> {
+        val notary = states.map { it.state.notary }.single()
+        require(states.isNotEmpty())
+
+        val signees: Set<net.corda.core.identity.AbstractParty> = states.flatMap { it.state.data.participants }.distinct().toSet()
+        return Pair(net.corda.core.contracts.TransactionType.General.Builder(notary).apply {
+            states.forEach {
+                addInputState(it)
+                addOutputState(upgrade(it.state.data))
+                addCommand(net.corda.core.contracts.UpgradeCommand(DUMMY_V2_PROGRAM_ID.javaClass), signees.map { it.owningKey }.toList())
+            }
+        }.toWireTransaction(), signees)
+    }
+}
diff --git a/core/src/main/kotlin/net/corda/core/contracts/testing/DummyLinearContract.kt b/core/src/main/kotlin/net/corda/core/contracts/testing/DummyLinearContract.kt
new file mode 100644
index 0000000000..2723de3a61
--- /dev/null
+++ b/core/src/main/kotlin/net/corda/core/contracts/testing/DummyLinearContract.kt
@@ -0,0 +1,54 @@
+package net.corda.core.contracts.testing
+
+import net.corda.core.contracts.CommandData
+import net.corda.core.contracts.clauses.FilterOn
+import net.corda.core.crypto.containsAny
+import net.corda.core.schemas.testing.DummyLinearStateSchemaV1
+import net.corda.core.schemas.testing.DummyLinearStateSchemaV2
+
+class DummyLinearContract : net.corda.core.contracts.Contract {
+    override val legalContractReference: net.corda.core.crypto.SecureHash = net.corda.core.crypto.SecureHash.Companion.sha256("Test")
+
+    val clause: net.corda.core.contracts.clauses.Clause<State, CommandData, Unit> = net.corda.core.contracts.LinearState.ClauseVerifier()
+    override fun verify(tx: net.corda.core.contracts.TransactionForContract) = net.corda.core.contracts.clauses.verifyClause(tx,
+            FilterOn(clause, { states -> states.filterIsInstance<State>() }),
+            emptyList())
+
+    data class State(
+            override val linearId: net.corda.core.contracts.UniqueIdentifier = net.corda.core.contracts.UniqueIdentifier(),
+            override val contract: net.corda.core.contracts.Contract = net.corda.core.contracts.testing.DummyLinearContract(),
+            override val participants: List<net.corda.core.identity.AbstractParty> = listOf(),
+            val linearString: String = "ABC",
+            val linearNumber: Long = 123L,
+            val linearTimestamp: java.time.Instant = java.time.LocalDateTime.now().toInstant(java.time.ZoneOffset.UTC),
+            val linearBoolean: Boolean = true,
+            val nonce: net.corda.core.crypto.SecureHash = net.corda.core.crypto.SecureHash.Companion.randomSHA256()) : net.corda.core.contracts.LinearState, net.corda.core.schemas.QueryableState {
+
+        override fun isRelevant(ourKeys: Set<java.security.PublicKey>): Boolean {
+            return participants.any { it.owningKey.containsAny(ourKeys) }
+        }
+
+        override fun supportedSchemas(): Iterable<net.corda.core.schemas.MappedSchema> = listOf(DummyLinearStateSchemaV1, DummyLinearStateSchemaV2)
+
+        override fun generateMappedObject(schema: net.corda.core.schemas.MappedSchema): net.corda.core.schemas.PersistentState {
+            return when (schema) {
+                is DummyLinearStateSchemaV1 -> DummyLinearStateSchemaV1.PersistentDummyLinearState(
+                        externalId = linearId.externalId,
+                        uuid = linearId.id,
+                        linearString = linearString,
+                        linearNumber = linearNumber,
+                        linearTimestamp = linearTimestamp,
+                        linearBoolean = linearBoolean
+                )
+                is DummyLinearStateSchemaV2 -> DummyLinearStateSchemaV2.PersistentDummyLinearState(
+                        uid = linearId,
+                        linearString = linearString,
+                        linearNumber = linearNumber,
+                        linearTimestamp = linearTimestamp,
+                        linearBoolean = linearBoolean
+                )
+                else -> throw IllegalArgumentException("Unrecognised schema $schema")
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/core/src/main/kotlin/net/corda/core/contracts/testing/DummyState.kt b/core/src/main/kotlin/net/corda/core/contracts/testing/DummyState.kt
new file mode 100644
index 0000000000..6c852bb33d
--- /dev/null
+++ b/core/src/main/kotlin/net/corda/core/contracts/testing/DummyState.kt
@@ -0,0 +1,10 @@
+package net.corda.core.contracts.testing
+
+/**
+ * Dummy state for use in testing. Not part of any contract, not even the [DummyContract].
+ */
+data class DummyState(val magicNumber: Int = 0) : net.corda.core.contracts.ContractState {
+    override val contract = DUMMY_PROGRAM_ID
+    override val participants: List<net.corda.core.identity.AbstractParty>
+        get() = emptyList()
+}
diff --git a/core/src/main/kotlin/net/corda/core/crypto/CryptoUtils.kt b/core/src/main/kotlin/net/corda/core/crypto/CryptoUtils.kt
index 02d0c11627..2094a526c7 100644
--- a/core/src/main/kotlin/net/corda/core/crypto/CryptoUtils.kt
+++ b/core/src/main/kotlin/net/corda/core/crypto/CryptoUtils.kt
@@ -2,41 +2,11 @@
 
 package net.corda.core.crypto
 
-import net.corda.core.identity.AnonymousParty
 import net.corda.core.identity.Party
-import net.corda.core.serialization.CordaSerializable
 import net.corda.core.serialization.OpaqueBytes
 import java.math.BigInteger
 import java.security.*
 
-@CordaSerializable
-object NullPublicKey : PublicKey, Comparable<PublicKey> {
-    override fun getAlgorithm() = "NULL"
-    override fun getEncoded() = byteArrayOf(0)
-    override fun getFormat() = "NULL"
-    override fun compareTo(other: PublicKey): Int = if (other == NullPublicKey) 0 else -1
-    override fun toString() = "NULL_KEY"
-}
-
-val NULL_PARTY = AnonymousParty(NullPublicKey)
-
-// TODO: Clean up this duplication between Null and Dummy public key
-@CordaSerializable
-@Deprecated("Has encoding format problems, consider entropyToKeyPair() instead")
-class DummyPublicKey(val s: String) : PublicKey, Comparable<PublicKey> {
-    override fun getAlgorithm() = "DUMMY"
-    override fun getEncoded() = s.toByteArray()
-    override fun getFormat() = "ASN.1"
-    override fun compareTo(other: PublicKey): Int = BigInteger(encoded).compareTo(BigInteger(other.encoded))
-    override fun equals(other: Any?) = other is DummyPublicKey && other.s == s
-    override fun hashCode(): Int = s.hashCode()
-    override fun toString() = "PUBKEY[$s]"
-}
-
-/** A signature with a key and value of zero. Useful when you want a signature object that you know won't ever be used. */
-@CordaSerializable
-object NullSignature : DigitalSignature.WithKey(NullPublicKey, ByteArray(32))
-
 /**
  * Utility to simplify the act of signing a byte array.
  * @param bytesToSign the data/message to be signed in [ByteArray] form (usually the Merkle root).
diff --git a/core/src/main/kotlin/net/corda/core/crypto/testing/DummyKeys.kt b/core/src/main/kotlin/net/corda/core/crypto/testing/DummyKeys.kt
new file mode 100644
index 0000000000..8b699ef38d
--- /dev/null
+++ b/core/src/main/kotlin/net/corda/core/crypto/testing/DummyKeys.kt
@@ -0,0 +1,35 @@
+package net.corda.core.crypto.testing
+
+import net.corda.core.crypto.DigitalSignature
+import net.corda.core.identity.AnonymousParty
+import net.corda.core.serialization.CordaSerializable
+import java.math.BigInteger
+import java.security.PublicKey
+
+@CordaSerializable
+object NullPublicKey : PublicKey, Comparable<PublicKey> {
+    override fun getAlgorithm() = "NULL"
+    override fun getEncoded() = byteArrayOf(0)
+    override fun getFormat() = "NULL"
+    override fun compareTo(other: PublicKey): Int = if (other == NullPublicKey) 0 else -1
+    override fun toString() = "NULL_KEY"
+}
+
+val NULL_PARTY = AnonymousParty(NullPublicKey)
+
+// TODO: Clean up this duplication between Null and Dummy public key
+@CordaSerializable
+@Deprecated("Has encoding format problems, consider entropyToKeyPair() instead")
+class DummyPublicKey(val s: String) : PublicKey, Comparable<PublicKey> {
+    override fun getAlgorithm() = "DUMMY"
+    override fun getEncoded() = s.toByteArray()
+    override fun getFormat() = "ASN.1"
+    override fun compareTo(other: PublicKey): Int = BigInteger(encoded).compareTo(BigInteger(other.encoded))
+    override fun equals(other: Any?) = other is DummyPublicKey && other.s == s
+    override fun hashCode(): Int = s.hashCode()
+    override fun toString() = "PUBKEY[$s]"
+}
+
+/** A signature with a key and value of zero. Useful when you want a signature object that you know won't ever be used. */
+@CordaSerializable
+object NullSignature : DigitalSignature.WithKey(NullPublicKey, ByteArray(32))
\ No newline at end of file
diff --git a/core/src/main/kotlin/net/corda/core/schemas/DummyLinearStateSchemaV2.kt b/core/src/main/kotlin/net/corda/core/schemas/DummyLinearStateSchemaV2.kt
deleted file mode 100644
index 247c061a0f..0000000000
--- a/core/src/main/kotlin/net/corda/core/schemas/DummyLinearStateSchemaV2.kt
+++ /dev/null
@@ -1,29 +0,0 @@
-package net.corda.core.schemas
-
-import net.corda.node.services.vault.schemas.jpa.CommonSchemaV1
-import javax.persistence.Column
-import javax.persistence.Entity
-import javax.persistence.Table
-
-/**
- * Second version of a cash contract ORM schema that extends the common
- * [VaultLinearState] abstract schema
- */
-object DummyLinearStateSchemaV2 : net.corda.core.schemas.MappedSchema(schemaFamily = DummyLinearStateSchema.javaClass, version = 2,
-                                               mappedTypes = listOf(PersistentDummyLinearState::class.java)) {
-    @Entity
-    @Table(name = "dummy_linear_states_v2")
-    class PersistentDummyLinearState(
-            @Column(name = "linear_string") var linearString: String,
-
-            @Column(name = "linear_number") var linearNumber: Long,
-
-            @Column(name = "linear_timestamp") var linearTimestamp: java.time.Instant,
-
-            @Column(name = "linear_boolean") var linearBoolean: Boolean,
-
-            /** parent attributes */
-            @Transient
-            val uid: net.corda.core.contracts.UniqueIdentifier
-    ) : CommonSchemaV1.LinearState(uid = uid)
-}
diff --git a/core/src/main/kotlin/net/corda/core/schemas/DummyDealStateSchemaV1.kt b/core/src/main/kotlin/net/corda/core/schemas/testing/DummyDealStateSchemaV1.kt
similarity index 76%
rename from core/src/main/kotlin/net/corda/core/schemas/DummyDealStateSchemaV1.kt
rename to core/src/main/kotlin/net/corda/core/schemas/testing/DummyDealStateSchemaV1.kt
index e26382143f..4b7a2a5b68 100644
--- a/core/src/main/kotlin/net/corda/core/schemas/DummyDealStateSchemaV1.kt
+++ b/core/src/main/kotlin/net/corda/core/schemas/testing/DummyDealStateSchemaV1.kt
@@ -1,4 +1,4 @@
-package net.corda.core.schemas
+package net.corda.core.schemas.testing
 
 /**
  * An object used to fully qualify the [DummyDealStateSchema] family name (i.e. independent of version).
@@ -9,7 +9,7 @@ object DummyDealStateSchema
  * First version of a cash contract ORM schema that maps all fields of the [DummyDealState] contract state as it stood
  * at the time of writing.
  */
-object DummyDealStateSchemaV1 : net.corda.core.schemas.MappedSchema(schemaFamily = net.corda.core.schemas.DummyDealStateSchema.javaClass, version = 1, mappedTypes = listOf(net.corda.core.schemas.DummyDealStateSchemaV1.PersistentDummyDealState::class.java)) {
+object DummyDealStateSchemaV1 : net.corda.core.schemas.MappedSchema(schemaFamily = net.corda.core.schemas.testing.DummyDealStateSchema.javaClass, version = 1, mappedTypes = listOf(net.corda.core.schemas.testing.DummyDealStateSchemaV1.PersistentDummyDealState::class.java)) {
     @javax.persistence.Entity
     @javax.persistence.Table(name = "dummy_deal_states")
     class PersistentDummyDealState(
diff --git a/core/src/main/kotlin/net/corda/core/schemas/DummyLinearStateSchemaV1.kt b/core/src/main/kotlin/net/corda/core/schemas/testing/DummyLinearStateSchemaV1.kt
similarity index 92%
rename from core/src/main/kotlin/net/corda/core/schemas/DummyLinearStateSchemaV1.kt
rename to core/src/main/kotlin/net/corda/core/schemas/testing/DummyLinearStateSchemaV1.kt
index a0c3c82649..3a0b8e3a66 100644
--- a/core/src/main/kotlin/net/corda/core/schemas/DummyLinearStateSchemaV1.kt
+++ b/core/src/main/kotlin/net/corda/core/schemas/testing/DummyLinearStateSchemaV1.kt
@@ -1,5 +1,7 @@
-package net.corda.core.schemas
+package net.corda.core.schemas.testing
 
+import net.corda.core.schemas.MappedSchema
+import net.corda.core.schemas.PersistentState
 import java.time.Instant
 import java.util.*
 import javax.persistence.Column
diff --git a/core/src/main/kotlin/net/corda/core/schemas/testing/DummyLinearStateSchemaV2.kt b/core/src/main/kotlin/net/corda/core/schemas/testing/DummyLinearStateSchemaV2.kt
new file mode 100644
index 0000000000..ec2f36d86c
--- /dev/null
+++ b/core/src/main/kotlin/net/corda/core/schemas/testing/DummyLinearStateSchemaV2.kt
@@ -0,0 +1,24 @@
+package net.corda.core.schemas.testing
+
+/**
+ * Second version of a cash contract ORM schema that extends the common
+ * [VaultLinearState] abstract schema
+ */
+object DummyLinearStateSchemaV2 : net.corda.core.schemas.MappedSchema(schemaFamily = DummyLinearStateSchema.javaClass, version = 2,
+        mappedTypes = listOf(net.corda.core.schemas.testing.DummyLinearStateSchemaV2.PersistentDummyLinearState::class.java)) {
+    @javax.persistence.Entity
+    @javax.persistence.Table(name = "dummy_linear_states_v2")
+    class PersistentDummyLinearState(
+            @javax.persistence.Column(name = "linear_string") var linearString: String,
+
+            @javax.persistence.Column(name = "linear_number") var linearNumber: Long,
+
+            @javax.persistence.Column(name = "linear_timestamp") var linearTimestamp: java.time.Instant,
+
+            @javax.persistence.Column(name = "linear_boolean") var linearBoolean: Boolean,
+
+            /** parent attributes */
+            @Transient
+            val uid: net.corda.core.contracts.UniqueIdentifier
+    ) : net.corda.node.services.vault.schemas.jpa.CommonSchemaV1.LinearState(uid = uid)
+}
diff --git a/core/src/main/kotlin/net/corda/core/utilities/TestConstants.kt b/core/src/main/kotlin/net/corda/core/utilities/TestConstants.kt
index 6861fa7fc0..b42a903493 100644
--- a/core/src/main/kotlin/net/corda/core/utilities/TestConstants.kt
+++ b/core/src/main/kotlin/net/corda/core/utilities/TestConstants.kt
@@ -3,6 +3,7 @@
 package net.corda.core.utilities
 
 import net.corda.core.crypto.*
+import net.corda.core.crypto.testing.DummyPublicKey
 import net.corda.core.identity.Party
 import net.corda.core.identity.PartyAndCertificate
 import org.bouncycastle.asn1.x500.X500Name
diff --git a/core/src/test/kotlin/net/corda/core/contracts/DummyContractV2Tests.kt b/core/src/test/kotlin/net/corda/core/contracts/DummyContractV2Tests.kt
index dfe175ded2..802d275bd5 100644
--- a/core/src/test/kotlin/net/corda/core/contracts/DummyContractV2Tests.kt
+++ b/core/src/test/kotlin/net/corda/core/contracts/DummyContractV2Tests.kt
@@ -1,9 +1,10 @@
 package net.corda.core.contracts
 
+import net.corda.core.contracts.testing.DummyContract
+import net.corda.core.contracts.testing.DummyContractV2
 import net.corda.core.crypto.SecureHash
 import net.corda.core.utilities.ALICE
 import net.corda.core.utilities.DUMMY_NOTARY
-import net.corda.testing.ALICE_PUBKEY
 import org.junit.Test
 import kotlin.test.assertEquals
 import kotlin.test.assertTrue
diff --git a/core/src/test/kotlin/net/corda/core/contracts/TransactionGraphSearchTests.kt b/core/src/test/kotlin/net/corda/core/contracts/TransactionGraphSearchTests.kt
index c4557fd75d..aaa09b7ef5 100644
--- a/core/src/test/kotlin/net/corda/core/contracts/TransactionGraphSearchTests.kt
+++ b/core/src/test/kotlin/net/corda/core/contracts/TransactionGraphSearchTests.kt
@@ -1,5 +1,7 @@
 package net.corda.core.contracts
 
+import net.corda.core.contracts.testing.DummyContract
+import net.corda.core.contracts.testing.DummyState
 import net.corda.core.crypto.newSecureRandom
 import net.corda.core.transactions.SignedTransaction
 import net.corda.core.transactions.WireTransaction
@@ -10,7 +12,6 @@ import net.corda.testing.MEGA_CORP_PUBKEY
 import net.corda.testing.node.MockServices
 import net.corda.testing.node.MockTransactionStorage
 import org.junit.Test
-import java.security.KeyPair
 import kotlin.test.assertEquals
 
 class TransactionGraphSearchTests {
diff --git a/core/src/test/kotlin/net/corda/core/contracts/TransactionTests.kt b/core/src/test/kotlin/net/corda/core/contracts/TransactionTests.kt
index 61750d7619..c42ffb4a28 100644
--- a/core/src/test/kotlin/net/corda/core/contracts/TransactionTests.kt
+++ b/core/src/test/kotlin/net/corda/core/contracts/TransactionTests.kt
@@ -1,6 +1,7 @@
 package net.corda.core.contracts
 
 import net.corda.contracts.asset.DUMMY_CASH_ISSUER_KEY
+import net.corda.core.contracts.testing.DummyContract
 import net.corda.core.crypto.CompositeKey
 import net.corda.core.crypto.SecureHash
 import net.corda.core.crypto.generateKeyPair
diff --git a/core/src/test/kotlin/net/corda/core/contracts/clauses/VerifyClausesTests.kt b/core/src/test/kotlin/net/corda/core/contracts/clauses/VerifyClausesTests.kt
index 5a7aba240c..076d7e2854 100644
--- a/core/src/test/kotlin/net/corda/core/contracts/clauses/VerifyClausesTests.kt
+++ b/core/src/test/kotlin/net/corda/core/contracts/clauses/VerifyClausesTests.kt
@@ -1,6 +1,10 @@
 package net.corda.core.contracts.clauses
 
-import net.corda.core.contracts.*
+import net.corda.core.contracts.AuthenticatedObject
+import net.corda.core.contracts.CommandData
+import net.corda.core.contracts.ContractState
+import net.corda.core.contracts.TransactionForContract
+import net.corda.core.contracts.testing.DummyContract
 import net.corda.core.crypto.SecureHash
 import org.junit.Test
 import kotlin.test.assertFailsWith
diff --git a/core/src/test/kotlin/net/corda/core/flows/CollectSignaturesFlowTests.kt b/core/src/test/kotlin/net/corda/core/flows/CollectSignaturesFlowTests.kt
index 91672d3133..fdc472ab1e 100644
--- a/core/src/test/kotlin/net/corda/core/flows/CollectSignaturesFlowTests.kt
+++ b/core/src/test/kotlin/net/corda/core/flows/CollectSignaturesFlowTests.kt
@@ -2,9 +2,9 @@ package net.corda.core.flows
 
 import co.paralleluniverse.fibers.Suspendable
 import net.corda.core.contracts.Command
-import net.corda.core.contracts.DummyContract
 import net.corda.core.contracts.TransactionType
 import net.corda.core.contracts.requireThat
+import net.corda.core.contracts.testing.DummyContract
 import net.corda.core.getOrThrow
 import net.corda.core.identity.Party
 import net.corda.core.transactions.SignedTransaction
@@ -13,7 +13,6 @@ import net.corda.flows.CollectSignaturesFlow
 import net.corda.flows.FinalityFlow
 import net.corda.flows.SignTransactionFlow
 import net.corda.testing.MINI_CORP_KEY
-import net.corda.testing.MINI_CORP_PUBKEY
 import net.corda.testing.node.MockNetwork
 import net.corda.testing.node.MockServices
 import org.junit.After
diff --git a/core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowTest.kt b/core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowTest.kt
index 38289537f1..d8661ac41c 100644
--- a/core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowTest.kt
+++ b/core/src/test/kotlin/net/corda/core/flows/ContractUpgradeFlowTest.kt
@@ -3,6 +3,8 @@ package net.corda.core.flows
 import co.paralleluniverse.fibers.Suspendable
 import net.corda.contracts.asset.Cash
 import net.corda.core.contracts.*
+import net.corda.core.contracts.testing.DummyContract
+import net.corda.core.contracts.testing.DummyContractV2
 import net.corda.core.crypto.SecureHash
 import net.corda.core.getOrThrow
 import net.corda.core.identity.AbstractParty
diff --git a/core/src/test/kotlin/net/corda/core/flows/ResolveTransactionsFlowTest.kt b/core/src/test/kotlin/net/corda/core/flows/ResolveTransactionsFlowTest.kt
index 8dccc62f9a..852c14b4fb 100644
--- a/core/src/test/kotlin/net/corda/core/flows/ResolveTransactionsFlowTest.kt
+++ b/core/src/test/kotlin/net/corda/core/flows/ResolveTransactionsFlowTest.kt
@@ -1,7 +1,6 @@
 package net.corda.core.flows
 
-import net.corda.core.contracts.DummyContract
-import net.corda.core.crypto.NullSignature
+import net.corda.core.contracts.testing.DummyContract
 import net.corda.core.crypto.SecureHash
 import net.corda.core.getOrThrow
 import net.corda.core.identity.Party
diff --git a/docs/source/example-code/src/main/java/net/corda/docs/FlowCookbookJava.java b/docs/source/example-code/src/main/java/net/corda/docs/FlowCookbookJava.java
index b50156b057..6392a4e133 100644
--- a/docs/source/example-code/src/main/java/net/corda/docs/FlowCookbookJava.java
+++ b/docs/source/example-code/src/main/java/net/corda/docs/FlowCookbookJava.java
@@ -7,6 +7,8 @@ import net.corda.contracts.asset.Cash;
 import net.corda.core.contracts.*;
 import net.corda.core.contracts.TransactionType.General;
 import net.corda.core.contracts.TransactionType.NotaryChange;
+import net.corda.core.contracts.testing.DummyContract;
+import net.corda.core.contracts.testing.DummyState;
 import net.corda.core.crypto.SecureHash;
 import net.corda.core.flows.*;
 import net.corda.core.identity.Party;
diff --git a/docs/source/example-code/src/main/kotlin/net/corda/docs/FlowCookbook.kt b/docs/source/example-code/src/main/kotlin/net/corda/docs/FlowCookbook.kt
index e906651f32..fa25e494e8 100644
--- a/docs/source/example-code/src/main/kotlin/net/corda/docs/FlowCookbook.kt
+++ b/docs/source/example-code/src/main/kotlin/net/corda/docs/FlowCookbook.kt
@@ -5,6 +5,8 @@ import net.corda.contracts.asset.Cash
 import net.corda.core.contracts.*
 import net.corda.core.contracts.TransactionType.General
 import net.corda.core.contracts.TransactionType.NotaryChange
+import net.corda.core.contracts.testing.DummyContract
+import net.corda.core.contracts.testing.DummyState
 import net.corda.core.crypto.SecureHash
 import net.corda.core.flows.*
 import net.corda.core.identity.Party
diff --git a/finance/src/main/java/net/corda/contracts/JavaCommercialPaper.java b/finance/src/main/java/net/corda/contracts/JavaCommercialPaper.java
index bc1d505ff9..07b071c98e 100644
--- a/finance/src/main/java/net/corda/contracts/JavaCommercialPaper.java
+++ b/finance/src/main/java/net/corda/contracts/JavaCommercialPaper.java
@@ -1,27 +1,36 @@
 package net.corda.contracts;
 
-import co.paralleluniverse.fibers.*;
-import com.google.common.collect.*;
-import kotlin.*;
-import net.corda.contracts.asset.*;
+import co.paralleluniverse.fibers.Suspendable;
+import com.google.common.collect.ImmutableList;
+import kotlin.Pair;
+import kotlin.Unit;
+import net.corda.contracts.asset.CashKt;
 import net.corda.core.contracts.*;
-import net.corda.core.contracts.Contract;
-import net.corda.core.contracts.TransactionForContract.*;
-import net.corda.core.contracts.clauses.*;
-import net.corda.core.crypto.*;
+import net.corda.core.contracts.TransactionForContract.InOutGroup;
+import net.corda.core.contracts.clauses.AnyOf;
+import net.corda.core.contracts.clauses.Clause;
+import net.corda.core.contracts.clauses.ClauseVerifier;
+import net.corda.core.contracts.clauses.GroupClauseVerifier;
+import net.corda.core.crypto.SecureHash;
+import net.corda.core.crypto.testing.NullPublicKey;
 import net.corda.core.identity.AbstractParty;
 import net.corda.core.identity.AnonymousParty;
 import net.corda.core.identity.Party;
-import net.corda.core.node.services.*;
-import net.corda.core.transactions.*;
-import org.jetbrains.annotations.*;
+import net.corda.core.node.services.VaultService;
+import net.corda.core.transactions.TransactionBuilder;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
-import java.time.*;
-import java.util.*;
-import java.util.stream.*;
+import java.time.Instant;
+import java.util.Collections;
+import java.util.Currency;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
-import static kotlin.collections.CollectionsKt.*;
-import static net.corda.core.contracts.ContractsDSL.*;
+import static kotlin.collections.CollectionsKt.single;
+import static net.corda.core.contracts.ContractsDSL.requireSingleCommand;
+import static net.corda.core.contracts.ContractsDSL.requireThat;
 
 
 /**
diff --git a/finance/src/main/kotlin/net/corda/contracts/CommercialPaperLegacy.kt b/finance/src/main/kotlin/net/corda/contracts/CommercialPaperLegacy.kt
index c8beea5c0e..0c3811556b 100644
--- a/finance/src/main/kotlin/net/corda/contracts/CommercialPaperLegacy.kt
+++ b/finance/src/main/kotlin/net/corda/contracts/CommercialPaperLegacy.kt
@@ -3,8 +3,8 @@ package net.corda.contracts
 import co.paralleluniverse.fibers.Suspendable
 import net.corda.contracts.asset.sumCashBy
 import net.corda.core.contracts.*
-import net.corda.core.crypto.NULL_PARTY
 import net.corda.core.crypto.SecureHash
+import net.corda.core.crypto.testing.NULL_PARTY
 import net.corda.core.identity.AbstractParty
 import net.corda.core.identity.Party
 import net.corda.core.node.services.VaultService
diff --git a/finance/src/main/kotlin/net/corda/contracts/DummyDealContract.kt b/finance/src/main/kotlin/net/corda/contracts/DummyDealContract.kt
index 04ca026671..39041fbef5 100644
--- a/finance/src/main/kotlin/net/corda/contracts/DummyDealContract.kt
+++ b/finance/src/main/kotlin/net/corda/contracts/DummyDealContract.kt
@@ -3,13 +3,14 @@ package net.corda.contracts
 import net.corda.core.contracts.Contract
 import net.corda.core.contracts.TransactionForContract
 import net.corda.core.contracts.UniqueIdentifier
-import net.corda.core.crypto.*
+import net.corda.core.crypto.SecureHash
+import net.corda.core.crypto.containsAny
 import net.corda.core.identity.AbstractParty
 import net.corda.core.identity.Party
-import net.corda.core.schemas.DummyDealStateSchemaV1
 import net.corda.core.schemas.MappedSchema
 import net.corda.core.schemas.PersistentState
 import net.corda.core.schemas.QueryableState
+import net.corda.core.schemas.testing.DummyDealStateSchemaV1
 import net.corda.core.transactions.TransactionBuilder
 import java.security.PublicKey
 
diff --git a/finance/src/main/kotlin/net/corda/contracts/asset/Cash.kt b/finance/src/main/kotlin/net/corda/contracts/asset/Cash.kt
index 62458b59da..f47fb51ec1 100644
--- a/finance/src/main/kotlin/net/corda/contracts/asset/Cash.kt
+++ b/finance/src/main/kotlin/net/corda/contracts/asset/Cash.kt
@@ -8,7 +8,11 @@ import net.corda.core.contracts.clauses.AllOf
 import net.corda.core.contracts.clauses.FirstOf
 import net.corda.core.contracts.clauses.GroupClauseVerifier
 import net.corda.core.contracts.clauses.verifyClause
-import net.corda.core.crypto.*
+import net.corda.core.crypto.SecureHash
+import net.corda.core.crypto.entropyToKeyPair
+import net.corda.core.crypto.newSecureRandom
+import net.corda.core.crypto.testing.NULL_PARTY
+import net.corda.core.crypto.toBase58String
 import net.corda.core.identity.AbstractParty
 import net.corda.core.identity.Party
 import net.corda.core.schemas.MappedSchema
diff --git a/finance/src/main/kotlin/net/corda/contracts/asset/Obligation.kt b/finance/src/main/kotlin/net/corda/contracts/asset/Obligation.kt
index 1af1959760..cfd6abdab3 100644
--- a/finance/src/main/kotlin/net/corda/contracts/asset/Obligation.kt
+++ b/finance/src/main/kotlin/net/corda/contracts/asset/Obligation.kt
@@ -8,9 +8,9 @@ import net.corda.contracts.asset.Obligation.Lifecycle.NORMAL
 import net.corda.contracts.clause.*
 import net.corda.core.contracts.*
 import net.corda.core.contracts.clauses.*
-import net.corda.core.crypto.NULL_PARTY
 import net.corda.core.crypto.SecureHash
 import net.corda.core.crypto.entropyToKeyPair
+import net.corda.core.crypto.testing.NULL_PARTY
 import net.corda.core.identity.AbstractParty
 import net.corda.core.identity.AnonymousParty
 import net.corda.core.identity.Party
diff --git a/finance/src/main/kotlin/net/corda/contracts/testing/VaultFiller.kt b/finance/src/main/kotlin/net/corda/contracts/testing/VaultFiller.kt
index b7fdd8c06f..923a545d52 100644
--- a/finance/src/main/kotlin/net/corda/contracts/testing/VaultFiller.kt
+++ b/finance/src/main/kotlin/net/corda/contracts/testing/VaultFiller.kt
@@ -7,6 +7,7 @@ import net.corda.contracts.DealState
 import net.corda.contracts.DummyDealContract
 import net.corda.contracts.asset.*
 import net.corda.core.contracts.*
+import net.corda.core.contracts.testing.DummyLinearContract
 import net.corda.core.identity.AbstractParty
 import net.corda.core.identity.AnonymousParty
 import net.corda.core.identity.Party
diff --git a/finance/src/test/kotlin/net/corda/contracts/asset/CashTests.kt b/finance/src/test/kotlin/net/corda/contracts/asset/CashTests.kt
index 6dff6c60e2..27f355d1a7 100644
--- a/finance/src/test/kotlin/net/corda/contracts/asset/CashTests.kt
+++ b/finance/src/test/kotlin/net/corda/contracts/asset/CashTests.kt
@@ -2,6 +2,7 @@ package net.corda.contracts.asset
 
 import net.corda.contracts.testing.fillWithSomeTestCash
 import net.corda.core.contracts.*
+import net.corda.core.contracts.testing.DummyState
 import net.corda.core.crypto.SecureHash
 import net.corda.core.crypto.generateKeyPair
 import net.corda.core.identity.AbstractParty
diff --git a/finance/src/test/kotlin/net/corda/contracts/asset/ObligationTests.kt b/finance/src/test/kotlin/net/corda/contracts/asset/ObligationTests.kt
index 7b9d18161f..8cb3d8f677 100644
--- a/finance/src/test/kotlin/net/corda/contracts/asset/ObligationTests.kt
+++ b/finance/src/test/kotlin/net/corda/contracts/asset/ObligationTests.kt
@@ -4,8 +4,9 @@ import net.corda.contracts.Commodity
 import net.corda.contracts.NetType
 import net.corda.contracts.asset.Obligation.Lifecycle
 import net.corda.core.contracts.*
-import net.corda.core.crypto.NULL_PARTY
+import net.corda.core.contracts.testing.DummyState
 import net.corda.core.crypto.SecureHash
+import net.corda.core.crypto.testing.NULL_PARTY
 import net.corda.core.identity.AbstractParty
 import net.corda.core.identity.AnonymousParty
 import net.corda.core.serialization.OpaqueBytes
diff --git a/finance/src/test/kotlin/net/corda/contracts/testing/Generators.kt b/finance/src/test/kotlin/net/corda/contracts/testing/Generators.kt
index fe65daa626..1ca4c5d998 100644
--- a/finance/src/test/kotlin/net/corda/contracts/testing/Generators.kt
+++ b/finance/src/test/kotlin/net/corda/contracts/testing/Generators.kt
@@ -9,7 +9,7 @@ import net.corda.core.contracts.Command
 import net.corda.core.contracts.CommandData
 import net.corda.core.contracts.ContractState
 import net.corda.core.contracts.TransactionType
-import net.corda.core.crypto.NullSignature
+import net.corda.core.crypto.testing.NullSignature
 import net.corda.core.identity.AnonymousParty
 import net.corda.core.testing.*
 import net.corda.core.transactions.SignedTransaction
diff --git a/node-schemas/src/test/kotlin/net/corda/node/services/vault/schemas/VaultSchemaTest.kt b/node-schemas/src/test/kotlin/net/corda/node/services/vault/schemas/VaultSchemaTest.kt
index b54cb0d961..5d552f6a9e 100644
--- a/node-schemas/src/test/kotlin/net/corda/node/services/vault/schemas/VaultSchemaTest.kt
+++ b/node-schemas/src/test/kotlin/net/corda/node/services/vault/schemas/VaultSchemaTest.kt
@@ -8,7 +8,7 @@ import io.requery.rx.KotlinRxEntityStore
 import io.requery.sql.*
 import io.requery.sql.platform.Generic
 import net.corda.core.contracts.*
-import net.corda.core.contracts.TimeWindow
+import net.corda.core.contracts.testing.DummyContract
 import net.corda.core.crypto.CompositeKey
 import net.corda.core.crypto.SecureHash
 import net.corda.core.crypto.generateKeyPair
@@ -21,7 +21,10 @@ import net.corda.core.schemas.requery.converters.VaultStateStatusConverter
 import net.corda.core.serialization.deserialize
 import net.corda.core.serialization.serialize
 import net.corda.core.transactions.LedgerTransaction
-import net.corda.core.utilities.*
+import net.corda.core.utilities.ALICE
+import net.corda.core.utilities.BOB
+import net.corda.core.utilities.DUMMY_NOTARY
+import net.corda.core.utilities.DUMMY_NOTARY_KEY
 import net.corda.node.services.vault.schemas.requery.*
 import org.h2.jdbcx.JdbcDataSource
 import org.junit.After
diff --git a/node/src/integration-test/kotlin/net/corda/node/services/BFTNotaryServiceTests.kt b/node/src/integration-test/kotlin/net/corda/node/services/BFTNotaryServiceTests.kt
index 35527d3f78..d0aeb6547b 100644
--- a/node/src/integration-test/kotlin/net/corda/node/services/BFTNotaryServiceTests.kt
+++ b/node/src/integration-test/kotlin/net/corda/node/services/BFTNotaryServiceTests.kt
@@ -2,10 +2,15 @@ package net.corda.node.services
 
 import com.google.common.net.HostAndPort
 import com.nhaarman.mockito_kotlin.whenever
-import net.corda.core.*
-import net.corda.core.contracts.*
+import net.corda.core.ErrorOr
+import net.corda.core.contracts.ContractState
+import net.corda.core.contracts.StateRef
+import net.corda.core.contracts.TransactionType
+import net.corda.core.contracts.testing.DummyContract
 import net.corda.core.crypto.CompositeKey
 import net.corda.core.crypto.SecureHash
+import net.corda.core.div
+import net.corda.core.getOrThrow
 import net.corda.core.identity.Party
 import net.corda.core.node.services.ServiceInfo
 import net.corda.flows.NotaryError
@@ -20,11 +25,12 @@ import net.corda.node.utilities.ServiceIdentityGenerator
 import net.corda.node.utilities.transaction
 import net.corda.testing.node.MockNetwork
 import org.bouncycastle.asn1.x500.X500Name
-import org.junit.Ignore
 import org.junit.After
+import org.junit.Ignore
 import org.junit.Test
 import java.nio.file.Files
-import kotlin.test.*
+import kotlin.test.assertEquals
+import kotlin.test.assertTrue
 
 class BFTNotaryServiceTests {
     companion object {
diff --git a/node/src/integration-test/kotlin/net/corda/node/services/RaftNotaryServiceTests.kt b/node/src/integration-test/kotlin/net/corda/node/services/RaftNotaryServiceTests.kt
index c170de0647..6fe61fb40d 100644
--- a/node/src/integration-test/kotlin/net/corda/node/services/RaftNotaryServiceTests.kt
+++ b/node/src/integration-test/kotlin/net/corda/node/services/RaftNotaryServiceTests.kt
@@ -1,10 +1,10 @@
 package net.corda.node.services
 
 import com.google.common.util.concurrent.Futures
-import net.corda.core.contracts.DummyContract
 import net.corda.core.contracts.StateAndRef
 import net.corda.core.contracts.StateRef
 import net.corda.core.contracts.TransactionType
+import net.corda.core.contracts.testing.DummyContract
 import net.corda.core.getOrThrow
 import net.corda.core.identity.Party
 import net.corda.core.map
diff --git a/node/src/test/java/net/corda/node/services/vault/VaultQueryJavaTests.java b/node/src/test/java/net/corda/node/services/vault/VaultQueryJavaTests.java
index 305a14407a..38deb5639a 100644
--- a/node/src/test/java/net/corda/node/services/vault/VaultQueryJavaTests.java
+++ b/node/src/test/java/net/corda/node/services/vault/VaultQueryJavaTests.java
@@ -1,43 +1,59 @@
 package net.corda.node.services.vault;
 
-import com.google.common.collect.*;
-import kotlin.*;
-import net.corda.contracts.*;
-import net.corda.contracts.asset.*;
+import com.google.common.collect.ImmutableSet;
+import kotlin.Pair;
+import net.corda.contracts.DealState;
+import net.corda.contracts.asset.Cash;
 import net.corda.core.contracts.*;
-import net.corda.core.crypto.*;
-import net.corda.core.identity.*;
+import net.corda.core.contracts.testing.DummyLinearContract;
+import net.corda.core.crypto.SecureHash;
+import net.corda.core.identity.AbstractParty;
 import net.corda.core.messaging.DataFeed;
-import net.corda.core.node.services.*;
+import net.corda.core.node.services.Vault;
+import net.corda.core.node.services.VaultQueryException;
+import net.corda.core.node.services.VaultQueryService;
+import net.corda.core.node.services.VaultService;
 import net.corda.core.node.services.vault.*;
-import net.corda.core.node.services.vault.QueryCriteria.*;
-import net.corda.core.schemas.*;
-import net.corda.core.serialization.*;
-import net.corda.core.transactions.*;
-import net.corda.node.services.database.*;
-import net.corda.node.services.schema.*;
-import net.corda.schemas.*;
-import net.corda.testing.node.*;
-import org.jetbrains.annotations.*;
-import org.jetbrains.exposed.sql.*;
-import org.junit.*;
+import net.corda.core.node.services.vault.QueryCriteria.LinearStateQueryCriteria;
+import net.corda.core.node.services.vault.QueryCriteria.VaultCustomQueryCriteria;
+import net.corda.core.node.services.vault.QueryCriteria.VaultQueryCriteria;
+import net.corda.core.schemas.MappedSchema;
+import net.corda.core.schemas.testing.DummyLinearStateSchemaV1;
+import net.corda.core.serialization.OpaqueBytes;
+import net.corda.core.transactions.SignedTransaction;
+import net.corda.core.transactions.WireTransaction;
+import net.corda.node.services.database.HibernateConfiguration;
+import net.corda.node.services.schema.NodeSchemaService;
+import net.corda.schemas.CashSchemaV1;
+import net.corda.testing.node.MockServices;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.exposed.sql.Database;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
 import rx.Observable;
 
-import java.io.*;
-import java.lang.reflect.*;
+import java.io.Closeable;
+import java.io.IOException;
+import java.lang.reflect.Field;
 import java.util.*;
-import java.util.stream.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
 
-import static net.corda.contracts.asset.CashKt.*;
+import static net.corda.contracts.asset.CashKt.getDUMMY_CASH_ISSUER;
+import static net.corda.contracts.asset.CashKt.getDUMMY_CASH_ISSUER_KEY;
 import static net.corda.contracts.testing.VaultFiller.*;
-import static net.corda.core.node.services.vault.QueryCriteriaKt.*;
-import static net.corda.core.node.services.vault.QueryCriteriaUtilsKt.*;
-import static net.corda.core.utilities.TestConstants.*;
-import static net.corda.node.utilities.DatabaseSupportKt.*;
+import static net.corda.core.node.services.vault.QueryCriteriaKt.and;
+import static net.corda.core.node.services.vault.QueryCriteriaKt.or;
+import static net.corda.core.node.services.vault.QueryCriteriaUtilsKt.getMAX_PAGE_SIZE;
+import static net.corda.core.utilities.TestConstants.getDUMMY_NOTARY;
+import static net.corda.node.utilities.DatabaseSupportKt.configureDatabase;
 import static net.corda.node.utilities.DatabaseSupportKt.transaction;
-import static net.corda.testing.CoreTestUtils.*;
-import static net.corda.testing.node.MockServicesKt.*;
-import static org.assertj.core.api.Assertions.*;
+import static net.corda.testing.CoreTestUtils.getMEGA_CORP;
+import static net.corda.testing.CoreTestUtils.getMEGA_CORP_KEY;
+import static net.corda.testing.node.MockServicesKt.makeTestDataSourceProperties;
+import static org.assertj.core.api.Assertions.assertThat;
 
 public class VaultQueryJavaTests {
 
diff --git a/node/src/test/kotlin/net/corda/node/services/NotaryChangeTests.kt b/node/src/test/kotlin/net/corda/node/services/NotaryChangeTests.kt
index 206cccccb4..4ff4962f76 100644
--- a/node/src/test/kotlin/net/corda/node/services/NotaryChangeTests.kt
+++ b/node/src/test/kotlin/net/corda/node/services/NotaryChangeTests.kt
@@ -1,6 +1,7 @@
 package net.corda.node.services
 
 import net.corda.core.contracts.*
+import net.corda.core.contracts.testing.DummyContract
 import net.corda.core.crypto.generateKeyPair
 import net.corda.core.getOrThrow
 import net.corda.core.identity.Party
diff --git a/node/src/test/kotlin/net/corda/node/services/database/HibernateConfigurationTest.kt b/node/src/test/kotlin/net/corda/node/services/database/HibernateConfigurationTest.kt
index 4cf8b2746b..ff5bfa324c 100644
--- a/node/src/test/kotlin/net/corda/node/services/database/HibernateConfigurationTest.kt
+++ b/node/src/test/kotlin/net/corda/node/services/database/HibernateConfigurationTest.kt
@@ -10,9 +10,9 @@ import net.corda.core.contracts.*
 import net.corda.core.crypto.toBase58String
 import net.corda.core.node.services.Vault
 import net.corda.core.node.services.VaultService
-import net.corda.core.schemas.DummyLinearStateSchemaV1
-import net.corda.core.schemas.DummyLinearStateSchemaV2
 import net.corda.core.schemas.PersistentStateRef
+import net.corda.core.schemas.testing.DummyLinearStateSchemaV1
+import net.corda.core.schemas.testing.DummyLinearStateSchemaV2
 import net.corda.core.serialization.deserialize
 import net.corda.core.serialization.storageKryo
 import net.corda.core.transactions.SignedTransaction
diff --git a/node/src/test/kotlin/net/corda/node/services/database/RequeryConfigurationTest.kt b/node/src/test/kotlin/net/corda/node/services/database/RequeryConfigurationTest.kt
index b1b482261a..1ad35060e0 100644
--- a/node/src/test/kotlin/net/corda/node/services/database/RequeryConfigurationTest.kt
+++ b/node/src/test/kotlin/net/corda/node/services/database/RequeryConfigurationTest.kt
@@ -3,12 +3,12 @@ package net.corda.node.services.database
 import io.requery.Persistable
 import io.requery.kotlin.eq
 import io.requery.sql.KotlinEntityDataStore
-import net.corda.core.contracts.DummyContract
 import net.corda.core.contracts.StateRef
 import net.corda.core.contracts.TransactionType
+import net.corda.core.contracts.testing.DummyContract
 import net.corda.core.crypto.DigitalSignature
-import net.corda.core.crypto.NullPublicKey
 import net.corda.core.crypto.SecureHash
+import net.corda.core.crypto.testing.NullPublicKey
 import net.corda.core.crypto.toBase58String
 import net.corda.core.identity.AnonymousParty
 import net.corda.core.node.services.Vault
diff --git a/node/src/test/kotlin/net/corda/node/services/events/ScheduledFlowTests.kt b/node/src/test/kotlin/net/corda/node/services/events/ScheduledFlowTests.kt
index f818364974..e271045133 100644
--- a/node/src/test/kotlin/net/corda/node/services/events/ScheduledFlowTests.kt
+++ b/node/src/test/kotlin/net/corda/node/services/events/ScheduledFlowTests.kt
@@ -2,6 +2,7 @@ package net.corda.node.services.events
 
 import co.paralleluniverse.fibers.Suspendable
 import net.corda.core.contracts.*
+import net.corda.core.contracts.testing.DummyContract
 import net.corda.core.crypto.containsAny
 import net.corda.core.flows.FlowInitiator
 import net.corda.core.flows.FlowLogic
diff --git a/node/src/test/kotlin/net/corda/node/services/persistence/DBTransactionStorageTests.kt b/node/src/test/kotlin/net/corda/node/services/persistence/DBTransactionStorageTests.kt
index 24c2b17dba..232db57467 100644
--- a/node/src/test/kotlin/net/corda/node/services/persistence/DBTransactionStorageTests.kt
+++ b/node/src/test/kotlin/net/corda/node/services/persistence/DBTransactionStorageTests.kt
@@ -3,8 +3,8 @@ package net.corda.node.services.persistence
 import net.corda.core.contracts.StateRef
 import net.corda.core.contracts.TransactionType
 import net.corda.core.crypto.DigitalSignature
-import net.corda.core.crypto.NullPublicKey
 import net.corda.core.crypto.SecureHash
+import net.corda.core.crypto.testing.NullPublicKey
 import net.corda.core.toFuture
 import net.corda.core.transactions.SignedTransaction
 import net.corda.core.transactions.WireTransaction
diff --git a/node/src/test/kotlin/net/corda/node/services/statemachine/FlowFrameworkTests.kt b/node/src/test/kotlin/net/corda/node/services/statemachine/FlowFrameworkTests.kt
index 409ae70201..54f97ba873 100644
--- a/node/src/test/kotlin/net/corda/node/services/statemachine/FlowFrameworkTests.kt
+++ b/node/src/test/kotlin/net/corda/node/services/statemachine/FlowFrameworkTests.kt
@@ -7,11 +7,14 @@ import net.corda.contracts.asset.Cash
 import net.corda.core.*
 import net.corda.core.contracts.ContractState
 import net.corda.core.contracts.DOLLARS
-import net.corda.core.contracts.DummyState
 import net.corda.core.contracts.StateAndRef
+import net.corda.core.contracts.testing.DummyState
 import net.corda.core.crypto.SecureHash
 import net.corda.core.crypto.generateKeyPair
-import net.corda.core.flows.*
+import net.corda.core.flows.FlowException
+import net.corda.core.flows.FlowLogic
+import net.corda.core.flows.FlowSessionException
+import net.corda.core.flows.InitiatingFlow
 import net.corda.core.identity.Party
 import net.corda.core.messaging.MessageRecipients
 import net.corda.core.node.services.PartyInfo
diff --git a/node/src/test/kotlin/net/corda/node/services/transactions/NotaryServiceTests.kt b/node/src/test/kotlin/net/corda/node/services/transactions/NotaryServiceTests.kt
index 45ed3fc9d5..deaa8bc278 100644
--- a/node/src/test/kotlin/net/corda/node/services/transactions/NotaryServiceTests.kt
+++ b/node/src/test/kotlin/net/corda/node/services/transactions/NotaryServiceTests.kt
@@ -1,10 +1,10 @@
 package net.corda.node.services.transactions
 
 import com.google.common.util.concurrent.ListenableFuture
-import net.corda.core.contracts.DummyContract
 import net.corda.core.contracts.StateAndRef
 import net.corda.core.contracts.StateRef
 import net.corda.core.contracts.TransactionType
+import net.corda.core.contracts.testing.DummyContract
 import net.corda.core.crypto.DigitalSignature
 import net.corda.core.getOrThrow
 import net.corda.core.node.services.ServiceInfo
diff --git a/node/src/test/kotlin/net/corda/node/services/transactions/ValidatingNotaryServiceTests.kt b/node/src/test/kotlin/net/corda/node/services/transactions/ValidatingNotaryServiceTests.kt
index 3d6f495650..267632521a 100644
--- a/node/src/test/kotlin/net/corda/node/services/transactions/ValidatingNotaryServiceTests.kt
+++ b/node/src/test/kotlin/net/corda/node/services/transactions/ValidatingNotaryServiceTests.kt
@@ -1,7 +1,11 @@
 package net.corda.node.services.transactions
 
 import com.google.common.util.concurrent.ListenableFuture
-import net.corda.core.contracts.*
+import net.corda.core.contracts.Command
+import net.corda.core.contracts.StateAndRef
+import net.corda.core.contracts.StateRef
+import net.corda.core.contracts.TransactionType
+import net.corda.core.contracts.testing.DummyContract
 import net.corda.core.crypto.DigitalSignature
 import net.corda.core.getOrThrow
 import net.corda.core.node.services.ServiceInfo
diff --git a/node/src/test/kotlin/net/corda/node/services/vault/VaultQueryTests.kt b/node/src/test/kotlin/net/corda/node/services/vault/VaultQueryTests.kt
index 3183a5546a..f36e44708e 100644
--- a/node/src/test/kotlin/net/corda/node/services/vault/VaultQueryTests.kt
+++ b/node/src/test/kotlin/net/corda/node/services/vault/VaultQueryTests.kt
@@ -8,13 +8,14 @@ import net.corda.contracts.asset.Cash
 import net.corda.contracts.asset.DUMMY_CASH_ISSUER
 import net.corda.contracts.testing.*
 import net.corda.core.contracts.*
+import net.corda.core.contracts.testing.DummyLinearContract
 import net.corda.core.crypto.entropyToKeyPair
 import net.corda.core.days
 import net.corda.core.identity.Party
 import net.corda.core.node.services.*
 import net.corda.core.node.services.vault.*
 import net.corda.core.node.services.vault.QueryCriteria.*
-import net.corda.core.schemas.DummyLinearStateSchemaV1
+import net.corda.core.schemas.testing.DummyLinearStateSchemaV1
 import net.corda.core.seconds
 import net.corda.core.serialization.OpaqueBytes
 import net.corda.core.transactions.SignedTransaction
@@ -706,7 +707,7 @@ class VaultQueryTests {
             }
 
             assertThat(states).hasSize(20)
-            assertThat(metadata.first().contractStateClassName).isEqualTo("net.corda.core.contracts.DummyLinearContract\$State")
+            assertThat(metadata.first().contractStateClassName).isEqualTo("net.corda.core.contracts.testing.DummyLinearContract\$State")
             assertThat(metadata.first().status).isEqualTo(Vault.StateStatus.UNCONSUMED) // 0 = UNCONSUMED
             assertThat(metadata.last().contractStateClassName).isEqualTo("net.corda.contracts.DummyDealContract\$State")
             assertThat(metadata.last().status).isEqualTo(Vault.StateStatus.CONSUMED)    // 1 = CONSUMED
diff --git a/node/src/test/kotlin/net/corda/node/services/vault/VaultWithCashTest.kt b/node/src/test/kotlin/net/corda/node/services/vault/VaultWithCashTest.kt
index e857b2f5ca..5e08269b5b 100644
--- a/node/src/test/kotlin/net/corda/node/services/vault/VaultWithCashTest.kt
+++ b/node/src/test/kotlin/net/corda/node/services/vault/VaultWithCashTest.kt
@@ -7,6 +7,7 @@ import net.corda.contracts.testing.fillWithSomeTestCash
 import net.corda.contracts.testing.fillWithSomeTestDeals
 import net.corda.contracts.testing.fillWithSomeTestLinearStates
 import net.corda.core.contracts.*
+import net.corda.core.contracts.testing.DummyLinearContract
 import net.corda.core.identity.AnonymousParty
 import net.corda.core.node.services.VaultService
 import net.corda.core.node.services.consumedStates
@@ -22,7 +23,8 @@ import net.corda.testing.MEGA_CORP
 import net.corda.testing.MEGA_CORP_KEY
 import net.corda.testing.node.MockServices
 import net.corda.testing.node.makeTestDataSourceProperties
-import org.assertj.core.api.Assertions.*
+import org.assertj.core.api.Assertions.assertThat
+import org.assertj.core.api.Assertions.assertThatThrownBy
 import org.jetbrains.exposed.sql.Database
 import org.junit.After
 import org.junit.Before
diff --git a/samples/notary-demo/src/main/kotlin/net/corda/notarydemo/flows/DummyIssueAndMove.kt b/samples/notary-demo/src/main/kotlin/net/corda/notarydemo/flows/DummyIssueAndMove.kt
index cb7bb6196c..bfd75f00d5 100644
--- a/samples/notary-demo/src/main/kotlin/net/corda/notarydemo/flows/DummyIssueAndMove.kt
+++ b/samples/notary-demo/src/main/kotlin/net/corda/notarydemo/flows/DummyIssueAndMove.kt
@@ -1,10 +1,10 @@
 package net.corda.notarydemo.flows
 
 import co.paralleluniverse.fibers.Suspendable
-import net.corda.core.contracts.DummyContract
-import net.corda.core.identity.Party
+import net.corda.core.contracts.testing.DummyContract
 import net.corda.core.flows.FlowLogic
 import net.corda.core.flows.StartableByRPC
+import net.corda.core.identity.Party
 import net.corda.core.transactions.SignedTransaction
 import java.util.*
 
diff --git a/test-utils/src/main/kotlin/net/corda/testing/TestDSL.kt b/test-utils/src/main/kotlin/net/corda/testing/TestDSL.kt
index b132d6516f..a12f813779 100644
--- a/test-utils/src/main/kotlin/net/corda/testing/TestDSL.kt
+++ b/test-utils/src/main/kotlin/net/corda/testing/TestDSL.kt
@@ -2,13 +2,13 @@ package net.corda.testing
 
 import net.corda.core.contracts.*
 import net.corda.core.crypto.*
+import net.corda.core.crypto.testing.NullSignature
 import net.corda.core.identity.Party
 import net.corda.core.node.ServiceHub
 import net.corda.core.serialization.serialize
 import net.corda.core.transactions.SignedTransaction
 import net.corda.core.transactions.TransactionBuilder
 import net.corda.core.transactions.WireTransaction
-import net.corda.core.utilities.DUMMY_NOTARY_KEY
 import java.io.InputStream
 import java.security.KeyPair
 import java.security.PublicKey
diff --git a/test-utils/src/main/kotlin/net/corda/testing/TransactionDSLInterpreter.kt b/test-utils/src/main/kotlin/net/corda/testing/TransactionDSLInterpreter.kt
index b806e699de..4e8d63212a 100644
--- a/test-utils/src/main/kotlin/net/corda/testing/TransactionDSLInterpreter.kt
+++ b/test-utils/src/main/kotlin/net/corda/testing/TransactionDSLInterpreter.kt
@@ -1,6 +1,7 @@
 package net.corda.testing
 
 import net.corda.core.contracts.*
+import net.corda.core.contracts.testing.DummyContract
 import net.corda.core.crypto.SecureHash
 import net.corda.core.identity.Party
 import net.corda.core.seconds
diff --git a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/NotaryTest.kt b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/NotaryTest.kt
index 00c1773c6b..5638dc8e1b 100644
--- a/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/NotaryTest.kt
+++ b/tools/loadtest/src/main/kotlin/net/corda/loadtest/tests/NotaryTest.kt
@@ -6,7 +6,7 @@ import net.corda.client.mock.pickOne
 import net.corda.client.mock.replicate
 import net.corda.contracts.asset.DUMMY_CASH_ISSUER
 import net.corda.contracts.asset.DUMMY_CASH_ISSUER_KEY
-import net.corda.core.contracts.DummyContract
+import net.corda.core.contracts.testing.DummyContract
 import net.corda.core.flows.FlowException
 import net.corda.core.messaging.startFlow
 import net.corda.core.success
diff --git a/verifier/src/integration-test/kotlin/net/corda/verifier/GeneratedLedger.kt b/verifier/src/integration-test/kotlin/net/corda/verifier/GeneratedLedger.kt
index 78a84a497d..8962c5d230 100644
--- a/verifier/src/integration-test/kotlin/net/corda/verifier/GeneratedLedger.kt
+++ b/verifier/src/integration-test/kotlin/net/corda/verifier/GeneratedLedger.kt
@@ -2,7 +2,11 @@ package net.corda.verifier
 
 import net.corda.client.mock.*
 import net.corda.core.contracts.*
-import net.corda.core.crypto.*
+import net.corda.core.contracts.testing.DummyContract
+import net.corda.core.crypto.SecureHash
+import net.corda.core.crypto.X509Utilities
+import net.corda.core.crypto.entropyToKeyPair
+import net.corda.core.crypto.sha256
 import net.corda.core.identity.AbstractParty
 import net.corda.core.identity.AnonymousParty
 import net.corda.core.identity.Party