diff --git a/Tests/Integration/Features/FeatureContainerTest.php b/Tests/Integration/Features/FeatureContainerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..b117fcfccc882d0be88ca127a0e0aa381e35a61a
--- /dev/null
+++ b/Tests/Integration/Features/FeatureContainerTest.php
@@ -0,0 +1,55 @@
+<?php
+
+
+namespace calderawp\CalderaFormsQuery\Tests\Integration\Features;
+
+
+use calderawp\CalderaFormsQuery\Features\FeatureContainer;
+use calderawp\CalderaFormsQuery\Tests\Integration\IntegrationTestCase;
+
+class FeatureContainerTest extends IntegrationTestCase
+{
+
+	/**
+	 * Test the table names
+	 *
+	 * @covers FeatureContainer::getQueries()
+	 * @covers FeatureContainer::bindServices()
+	 */
+	public function testTableNames()
+	{
+		$container = $this->containerFactory();
+
+		//Select entry
+		$this->assertEquals( $this->entryTableName(),
+			$container
+				->getQueries()
+				->entrySelect()
+				->getTableName()
+		);
+
+		//Select entry value
+		$this->assertEquals( $this->entryValueTableName(),
+			$container
+				->getQueries()
+				->entryValuesSelect()
+				->getTableName()
+		);
+
+		//Delete entry
+		$this->assertEquals( $this->entryTableName(),
+			$container
+				->getQueries()
+				->entryDelete()
+				->getTableName()
+		);
+
+		//Delete entry values
+		$this->assertEquals( $this->entryValueTableName(),
+			$container
+				->getQueries()
+				->entryValueDelete()
+				->getTableName()
+		);
+	}
+}
\ No newline at end of file
diff --git a/Tests/Integration/Features/QueryByUserIdTest.php b/Tests/Integration/Features/QueryByUserIdTest.php
index 0347b9c9f22b25be46dda6f87067675a609dd1e1..897712ce526dead44ed3bc2d1555dc1700d0360d 100644
--- a/Tests/Integration/Features/QueryByUserIdTest.php
+++ b/Tests/Integration/Features/QueryByUserIdTest.php
@@ -11,23 +11,20 @@ class QueryByUserIdTest extends IntegrationTestCase
 
 	use CanCreateEntryWithEmailField;
 
-	/**
-	 * Test selecting by entry ID
-	 *
-	 * @covers CreatesSelectQueries::selectByUserId()
-	 */
+
 	public function testByUserId()
 	{
-		$email = 'nom@noms.noms';
+		$container = $this->containerFactory();
+
 		//Create an entry for a known user.
+		$email = 'nom@noms.noms';
 		$userId = $this->factory()->user->create(
 			[ 'user_email' => $email ]
 		);
 		wp_set_current_user( $userId );
 		$entryId = $this->createEntryWithEmail( $email );
-		$queries = $this->selectQueriesFactory();
 
-		$results = $queries->selectByUserId( $userId );
+		$results = $container->selectByUserId( $userId );
 		$this->assertEquals( $entryId, $results[0]['entry']->id);
 		$this->assertEquals( $entryId, $results[0]['entry']->id);
 
@@ -42,5 +39,6 @@ class QueryByUserIdTest extends IntegrationTestCase
 
 		$this->assertTrue( $found );
 
+
 	}
 }
\ No newline at end of file
diff --git a/Tests/Traits/HasFactories.php b/Tests/Traits/HasFactories.php
index 1c948f23dde7bd4d69cff796d5b181b971ebb4d4..6bd08f14b634ba330a137e6fc13a7180aa2de511 100644
--- a/Tests/Traits/HasFactories.php
+++ b/Tests/Traits/HasFactories.php
@@ -3,7 +3,9 @@
 
 namespace calderawp\CalderaFormsQuery\Tests\Traits;
 
+use calderawp\CalderaContainers\Service\Container;
 use calderawp\CalderaFormsQuery\DeleteQueries;
+use calderawp\CalderaFormsQuery\Features\FeatureContainer;
 use calderawp\CalderaFormsQuery\SelectQueries;
 use calderawp\CalderaFormsQuery\Tests\Unit\Features\QueriesTest;
 
@@ -102,6 +104,17 @@ trait HasFactories
 		);
 	}
 
+	/**
+	 * @return FeatureContainer
+	 */
+	protected function containerFactory()
+	{
+		return new FeatureContainer(
+			new Container(),
+			$this->getWPDB()
+		);
+	}
+
 	/**
 	 * Gets a WPDB instance
 	 *
diff --git a/Tests/Unit/Features/FeatureContainerTest.php b/Tests/Unit/Features/FeatureContainerTest.php
index 300c1ce39750e20028551bab2aaf17f8c152748b..82c21510a3c398e6b5a026e8f1c28fdc01430dda 100644
--- a/Tests/Unit/Features/FeatureContainerTest.php
+++ b/Tests/Unit/Features/FeatureContainerTest.php
@@ -16,6 +16,7 @@ class FeatureContainerTest extends TestCase
 {
 
 	/**
+	 * Test getting the main MySQL Builder
 	 *
 	 * @covers FeatureContainer::getBuilder()
 	 * @covers FeatureContainer::bindServices()
@@ -42,6 +43,7 @@ class FeatureContainerTest extends TestCase
 	}
 
 	/**
+	 * Test getting the main query builder
 	 *
 	 * @covers FeatureContainer::bindServices()
 	 * @covers FeatureContainer::getQueries()
@@ -51,7 +53,6 @@ class FeatureContainerTest extends TestCase
 		$serviceContainer = new TheServiceContainer();
 		$container = new FeatureContainer($serviceContainer, $this->getWPDB());
 
-
 		$this->assertTrue(
 			is_a(
 				$container->getQueries(),
@@ -64,4 +65,48 @@ class FeatureContainerTest extends TestCase
 			$container->getQueries()
 		);
 	}
+
+	/**
+	 * Test the table names
+	 *
+	 * @covers FeatureContainer::getQueries()
+	 * @covers FeatureContainer::bindServices()
+	 */
+	public function testTableNames()
+	{
+		$container = $this->containerFactory();
+
+		//Select entry
+		$this->assertEquals( $this->entryTableName(),
+			$container
+				->getQueries()
+				->entrySelect()
+				->getTableName()
+		);
+
+		//Select entry value
+		$this->assertEquals( $this->entryValueTableName(),
+			$container
+				->getQueries()
+				->entryValuesSelect()
+				->getTableName()
+		);
+
+		//Delete entry
+		$this->assertEquals( $this->entryTableName(),
+			$container
+				->getQueries()
+				->entryDelete()
+				->getTableName()
+		);
+
+		//Delete entry values
+		$this->assertEquals( $this->entryValueTableName(),
+			$container
+				->getQueries()
+				->entryValueDelete()
+				->getTableName()
+		);
+	}
+
 }
\ No newline at end of file
diff --git a/Tests/Unit/TestCase.php b/Tests/Unit/TestCase.php
index 3040fb6ca1d74bd22a38b12d20d36e9d8d9505b0..df3ec4c9a29900e67d6fc4550e7d9789446c29c9 100755
--- a/Tests/Unit/TestCase.php
+++ b/Tests/Unit/TestCase.php
@@ -17,5 +17,8 @@ use PHPUnit\Framework\TestCase as FrameworkTestCase;
  */
 abstract class TestCase extends FrameworkTestCase
 {
+	//Factories go in this trait so they are share with integration tests
 	use HasFactories;
+
+
 }
diff --git a/src/CanCollectResults.php b/src/CanCollectResults.php
new file mode 100644
index 0000000000000000000000000000000000000000..33b5b78d8cecce47907560c0e7a01dd44a7f1a98
--- /dev/null
+++ b/src/CanCollectResults.php
@@ -0,0 +1,70 @@
+<?php
+
+
+namespace calderawp\CalderaFormsQuery;
+
+
+trait CanCollectResults
+{
+	/**
+	 * Collect results using  Caldera_Forms_Entry_Entry and Caldera_Forms_Entry_Field to represent values
+	 *
+	 * @param \stdClass[] $entriesValues
+	 * @return array
+	 */
+	private function collectResults($entriesValues)
+	{
+		$results = [];
+		foreach ($entriesValues as $entry) {
+			$this->resetEntryValueGenerator();
+			$entry = new \Caldera_Forms_Entry_Entry($entry);
+			$this
+				->getEntryValueGenerator()
+				->queryByEntryId($entry->id);
+			$entriesValues =$this->getResults(
+				$this->getEntryValueGenerator()
+					->getPreparedSql()
+			);
+
+			$entryValuesPrepared = $this->collectEntryValues($entriesValues);
+			$results[] = [
+				'entry' => $entry,
+				'values' => $entryValuesPrepared
+			];
+		}
+		return $results;
+	}
+
+	/**
+	 * Collect entry values as Caldera_Forms_Entry_Field objects
+	 *
+	 * @param \stdClass[] $entriesValues
+	 * @return array
+	 */
+	private function collectEntryValues($entriesValues): array
+	{
+		$entryValuesPrepared = [];
+		if (!empty($entriesValues)) {
+			foreach ($entriesValues as $entryValue) {
+				$entryValuesPrepared[] = new \Caldera_Forms_Entry_Field($entryValue);
+			}
+		}
+		return $entryValuesPrepared;
+	}
+
+	/**
+	 * Reset entry generator
+	 */
+	private function resetEntryGenerator()
+	{
+		$this->entryGenerator->resetQuery();
+	}
+
+	/**
+	 * Reset entry value generator
+	 */
+	private function resetEntryValueGenerator()
+	{
+		$this->entryValueGenerator->resetQuery();
+	}
+}
\ No newline at end of file
diff --git a/src/CreatesSelectQueries.php b/src/CreatesSelectQueries.php
index 0c1f9ea3b7431a6fa1d93c1827fd81addf2d5fb8..eb588228d3c44a749beaf9e4da6757229baf9f16 100644
--- a/src/CreatesSelectQueries.php
+++ b/src/CreatesSelectQueries.php
@@ -9,7 +9,7 @@ use calderawp\CalderaFormsQuery\Select\EntryValues;
 /**
  * Interface QueriesEntries
  *
- * Interface that all classes that query for entries MUST impliment
+ * Interface that all classes that query for entries MUST implement
  */
 interface CreatesSelectQueries extends GetsResults
 {
@@ -25,4 +25,10 @@ interface CreatesSelectQueries extends GetsResults
 	 * @return Entry
 	 */
 	public function getEntryGenerator();
+
+	/**
+	 * @param $sql
+	 * @return \stdClass[]
+	 */
+	public function getResults($sql);
 }
diff --git a/src/Features/FeatureContainer.php b/src/Features/FeatureContainer.php
index 7fb00dd827be15d99909c2c89c3f159e67ef4961..c3ae76eb215c8587ef7f05292b6acbefd26a43f8 100644
--- a/src/Features/FeatureContainer.php
+++ b/src/Features/FeatureContainer.php
@@ -7,12 +7,16 @@ namespace calderawp\CalderaFormsQuery\Features;
 use calderawp\CalderaContainers\Container;
 use calderawp\CalderaContainers\Interfaces\ServiceContainer;
 
+use calderawp\CalderaFormsQuery\Delete\DeleteQueryBuilder;
+use calderawp\CalderaFormsQuery\Delete\DoesDeleteQuery;
 use calderawp\CalderaFormsQuery\DeleteQueries;
 use calderawp\CalderaFormsQuery\MySqlBuilder;
 use calderawp\CalderaFormsQuery\Delete\Entry as EntryDelete;
 use \calderawp\CalderaFormsQuery\Delete\EntryValues as EntryValuesDelete;
+use calderawp\CalderaFormsQuery\Select\DoesSelectQuery;
 use \calderawp\CalderaFormsQuery\Select\Entry as EntrySelect;
 use \calderawp\CalderaFormsQuery\Select\EntryValues as EntryValueSelect;
+use calderawp\CalderaFormsQuery\Select\SelectQueryBuilder;
 use calderawp\CalderaFormsQuery\SelectQueries;
 
 class FeatureContainer extends Container
@@ -44,11 +48,13 @@ class FeatureContainer extends Container
 	 */
 	protected function bindServices()
 	{
+		//@TODO move these to service provider classes
 		$this->serviceContainer->singleton( MySqlBuilder::class, function(){
 			return new MySqlBuilder();
 		});
 
 		$this->serviceContainer->bind( SelectQueries::class, function (){
+			//@TODO Factory
 			return new SelectQueries(
 				new EntrySelect(
 					$this->getBuilder(),
@@ -56,13 +62,14 @@ class FeatureContainer extends Container
 				),
 				new EntryValueSelect(
 					$this->getBuilder(),
-					$this->entryTableName()
+					$this->entryValueTableName()
 				),
 				$this->wpdb
 			);
 		});
 
 		$this->serviceContainer->bind( DeleteQueries::class, function (){
+			//@TODO Factory
 			return new DeleteQueries(
 				new EntryDelete(
 					$this->getBuilder(),
@@ -70,7 +77,7 @@ class FeatureContainer extends Container
 				),
 				new EntryValuesDelete(
 					$this->getBuilder(),
-					$this->entryTableName()
+					$this->entryValueTableName()
 				),
 				$this->wpdb
 			);
@@ -112,12 +119,25 @@ class FeatureContainer extends Container
 			->make( Queries::class );
 	}
 
-
+	/**
+	 * Select all entries and entry values by user ID
+	 *
+	 * @param int $userId
+	 * @return array
+	 */
+	public function selectByUserId($userId)
+	{
+		$query = $this
+			->getQueries()
+			->entrySelect()
+			->queryByUserId($userId);
+		return $this->collectResults( $this->select( $query ) );
+	}
 
 	/**
 	 * @return string
 	 */
-	protected function entryValueTableName(): string
+	protected function entryValueTableName()
 	{
 		return "{$this->wpdb->prefix}cf_form_entry_values";
 	}
@@ -125,9 +145,80 @@ class FeatureContainer extends Container
 	/**
 	 * @return string
 	 */
-	protected function entryTableName(): string
+	protected function entryTableName()
 	{
 		return "{$this->wpdb->prefix}cf_form_entries";
 	}
 
+	/**
+	 * Collect results using  Caldera_Forms_Entry_Entry and Caldera_Forms_Entry_Field to represent values
+	 *
+	 * @param \stdClass[] $entriesValues
+	 * @return array
+	 */
+	private function collectResults($entriesValues)
+	{
+		$results = [];
+		foreach ($entriesValues as $entry) {
+
+			$entry = new \Caldera_Forms_Entry_Entry($entry);
+			$query = $this
+				->getQueries()
+				->entryValuesSelect()
+				->queryByEntryId($entry->id);
+			$entriesValues = $this->select($query);
+
+			$entryValuesPrepared = $this->collectEntryValues($entriesValues);
+			$results[] = [
+				'entry' => $entry,
+				'values' => $entryValuesPrepared
+			];
+		}
+		return $results;
+	}
+
+	/**
+	 * Collect entry values as Caldera_Forms_Entry_Field objects
+	 *
+	 * @param \stdClass[] $entriesValues
+	 * @return array
+	 */
+	private function collectEntryValues($entriesValues): array
+	{
+		$entryValuesPrepared = [];
+		if (!empty($entriesValues)) {
+			foreach ($entriesValues as $entryValue) {
+				$entryValuesPrepared[] = new \Caldera_Forms_Entry_Field($entryValue);
+			}
+		}
+		return $entryValuesPrepared;
+	}
+
+	/**
+	 * Do a select query
+	 *
+	 * @param SelectQueryBuilder $query
+	 * @return \stdClass[]
+	 */
+	private function select(SelectQueryBuilder $query)
+	{
+		return $this
+				->getQueries()
+				->select($query);
+	}
+
+	/**
+	 * Do a delete query
+	 *
+	 * @param DeleteQueryBuilder $query
+	 * @return \stdClass[]
+	 */
+	private function delete(DeleteQueryBuilder $query)
+	{
+		return $this->
+			getQueries()
+			->delete($query);
+	}
+
+
 }
\ No newline at end of file
diff --git a/src/Features/Queries.php b/src/Features/Queries.php
index 55c0885b54e9292b99e0d62703caa9a8d6ed3317..0cd720419959bfda14413b63f729bbf2b07fbebd 100644
--- a/src/Features/Queries.php
+++ b/src/Features/Queries.php
@@ -5,10 +5,15 @@ namespace calderawp\CalderaFormsQuery\Features;
 
 use calderawp\CalderaFormsQuery\CreatesDeleteQueries;
 use calderawp\CalderaFormsQuery\CreatesSelectQueries;
+use calderawp\CalderaFormsQuery\Delete\DeleteQueryBuilder;
+use calderawp\CalderaFormsQuery\Delete\DoesDeleteQuery;
 use calderawp\CalderaFormsQuery\Delete\Entry as EntryDelete;
 use \calderawp\CalderaFormsQuery\Delete\EntryValues as EntryValuesDelete;
+use calderawp\CalderaFormsQuery\DeleteQueries;
+use calderawp\CalderaFormsQuery\Select\DoesSelectQuery;
 use \calderawp\CalderaFormsQuery\Select\Entry as EntrySelect;
 use \calderawp\CalderaFormsQuery\Select\EntryValues as EntryValueSelect;
+use calderawp\CalderaFormsQuery\Select\SelectQueryBuilder;
 
 class Queries implements DoesQueries
 {
@@ -34,6 +39,32 @@ class Queries implements DoesQueries
 		$this->deleteQueries = $deleteQueries;
 	}
 
+	/**
+	 * @param SelectQueryBuilder $query
+	 * @return \stdClass[]
+	 */
+	public function select( SelectQueryBuilder $query )
+	{
+		return $this
+			->selectQueries
+			->getResults(
+				$query->getPreparedSql()
+			);
+	}
+
+	/**
+	 * @param DeleteQueryBuilder $query
+	 * @return \stdClass[]
+	 */
+	public function delete( DeleteQueryBuilder $query )
+	{
+		return $this
+			->deleteQueries
+			->getResults(
+				$query->getPreparedSql()
+			);
+	}
+
 	/**
 	 * Create a new SELECT query for Entry table
 	 *
diff --git a/src/SelectQueries.php b/src/SelectQueries.php
index 8b355cda6ba3d45aa14cfef736f87074aa1dff94..1cc6aeb9f141fbd5a9f82af9edf4d823ef9f5781 100644
--- a/src/SelectQueries.php
+++ b/src/SelectQueries.php
@@ -62,26 +62,6 @@ class SelectQueries implements CreatesSelectQueries
 		return $this->entryGenerator;
 	}
 
-
-	/**
-	 * Get all data for a user by Id
-	 *
-	 * @param $userId
-	 * @return array
-	 */
-	public function selectByUserId($userId)
-	{
-		$this->resetEntryGenerator();
-
-		$this
-			->getEntryGenerator()
-			->queryByUserId($userId);
-
-		$entries = $this->getResults($this->getEntryGenerator()->getPreparedSql());
-
-		return $this->collectResults($entries);
-	}
-
 	/**
 	 * Reset entry generator
 	 */
@@ -98,49 +78,5 @@ class SelectQueries implements CreatesSelectQueries
 		$this->entryValueGenerator->resetQuery();
 	}
 
-	/**
-	 * Collect results using  Caldera_Forms_Entry_Entry and Caldera_Forms_Entry_Field to represent values
-	 *
-	 * @param \stdClass[] $entriesValues
-	 * @return array
-	 */
-	private function collectResults($entriesValues)
-	{
-		$results = [];
-		foreach ($entriesValues as $entry) {
-			$this->resetEntryValueGenerator();
-			$entry = new \Caldera_Forms_Entry_Entry($entry);
-			$this
-				->getEntryValueGenerator()
-				->queryByEntryId($entry->id);
-			$entriesValues =$this->getResults(
-				$this->getEntryValueGenerator()
-				->getPreparedSql()
-			);
-
-			$entryValuesPrepared = $this->collectEntryValues($entriesValues);
-			$results[] = [
-				'entry' => $entry,
-				'values' => $entryValuesPrepared
-			];
-		}
-		return $results;
-	}
 
-	/**
-	 * Collect entry values as Caldera_Forms_Entry_Field objects
-	 *
-	 * @param \stdClass[] $entriesValues
-	 * @return array
-	 */
-	private function collectEntryValues($entriesValues): array
-	{
-		$entryValuesPrepared = [];
-		if (!empty($entriesValues)) {
-			foreach ($entriesValues as $entryValue) {
-				$entryValuesPrepared[] = new \Caldera_Forms_Entry_Field($entryValue);
-			}
-		}
-		return $entryValuesPrepared;
-	}
 }