protected function initEntityQuery()
	{
		$tag = "ListDrafter: initEntityQuery()";
		Log::debug("$tag");
		
		// convenience pointeres
		$entityBP = $this->entityBlueprint;
		$listBP = $this->listBlueprint;
		
		/*
		// Build an entity query
		*/
	  $query = new EntityQuery($this->entityBlueprint);
		
		// where
		$where = "";
		if(array_key_exists("where", $this->params))
		{
			$query->where($this->params["where"]);
		}
		
		// process filters
		$sessionFilters = Session::user("_CONDUIT_FILTERS");
		if( (!empty($sessionFilters)) && (is_array($sessionFilters)) && (count($sessionFilters)>0) )
		{
			$filterKeys = array_keys($sessionFilters);
			
			foreach($filterKeys as $keyPath)
			{
				Log::debug("$tag: Considering filter: $keyPath");
				
				$filter = $sessionFilters["$keyPath"];
				$fieldKey = $filter->getKey();
				$blueprintKey = $filter->getBlueprintKey();
				
				// should this filter be applied to our list?
				$applyFilter = false;
				
				// does this filter apply to our entity?
				if($blueprintKey == $entityBP->getKey())
				{
					if($listBP)
					{
						if($listBP->keyExists($fieldKey))
						{
							$applyFilter = true;
						}
					}
					else if($entityBP->keyExists($fieldKey))
					{
						$applyFilter = true;
					}
				}
				
				if( ($applyFilter) && ($filter->hasValue()) )
				{
					Log::debug("$tag: Applying filter: $keyPath");
					
					switch($filter->dataType)
					{
						case "string":
						case "text":
						case "enum":
							switch($filter->type)
							{
								case "like":
									$like = $filter->value["like"];
									$query->where("$keyPath LIKE '%$like%'");
									break;
								case "equals":
									$equals = $filter->value["equals"];
									$query->where("$keyPath='$equals'");
									break;
							}
							break;
						case "int":
							switch($filter->type)
							{
								case "equals":
									$equals = $filter->value["equals"];
									$query->where("$keyPath=$equals");
									break;
								case "min":
									$min = $filter->value["min"];
									$query->where("$keyPath>=$min");
									break;
								case "max":
									$max = $filter->value["max"];
									$query->where("$keyPath<=$max");
									break;
								case "range":
									$min = $filter->value["min"];
									$max = $filter->value["max"];
									if( (!empty($min) || $min==0) && (!empty($max) || $max==0) )
										$query->where("( ($keyPath>=$min) AND ($keyPath<=$max) )");
									else if( (!empty($min) || $min==0) )
										$query->where("$keyPath>=$min");
									else
										$query->where("$keyPath<=$max");
									break;
							}
							break;
						case "decimal":
						case "date":
						case "datetime":
							switch($filter->type)
							{
								case "equals":
									$equals = $filter->value["equals"];
									$query->where("$keyPath='$equals'");
									break;
								case "min":
									$min = $filter->value["min"];
									$query->where("$keyPath>='$min'");
									break;
								case "max":
									$max = $filter->value["max"];
									$query->where("$keyPath<='$max'");
									break;
								case "range":
									$min = $filter->value["min"];
									$max = $filter->value["max"];
									if( !empty($min) && !empty($max) )
										$query->where("( ($keyPath>='$min') AND ($keyPath<='$max') )");
									else if( !empty($min) )
										$query->where("$keyPath>='$min'");
									else 
										$query->where("$keyPath<='$max'");
									break;
							}
							break;
					} // END: switch($filter->dataType)
					
				} // END: if($applyFilter)
				
			} // END: foreach($filterKeys as $keyPath)
			
		} // END: if( (!empty($sessionFilters)) && (is_array($sessionFilters)) && (count($sessionFilters)>0) )
		
		// ORDER BY
		if(array_key_exists("order", $this->params))
		{
			$order = $this->params["order"];
			
			if(is_array($order))
			{
				foreach($order as $o)
				{
					$query->order($o);
				}
			}
			else
			{
				$query->order($order);
			}
		}
		
		// LIMIT (PAGING)
		if(array_key_exists("page", $this->params))
		{
			// Init page number
			$page = 1;
			if( (is_int($this->params["page"])) && ($this->params["page"]>=1) ) $page = $this->params["page"];

			// Init page limit
			$page_limit = 20; // default
			if( (array_key_exists("page_limit", $this->params)) && (is_int((int) $this->params["page_limit"])) && ($this->params["page_limit"]>=1) ) $page_limit = $this->params["page_limit"];
			else $this->params["page_limit"] = $page_limit; // init default for use by javascript
			
			// Calculate OFFSET (First row offset=0)
			$page_offset = ($page-1) * $page_limit;
			
			// Count the total number of rows that this query will produce (without LIMITs)
			$countQuery = clone $query;
			$countQuery->select("COUNT(*) AS count", true);
			$sql = new DatabaseQuery($countQuery->toString());
			
			try
			{
				$sql->doQuery();
				$row = $sql->get_next_row();
				$count = $row->count;
				Log::debug("$tag: COUNT = $count");
				// Save "count" to params (for use by javascript)
				$this->params["count"] = (int) $count;
			}
			catch(Exception $e)
			{
				Log::error("$tag: Caught: " . $e->getMessage());
			}
			
			// Add LIMIT clause to query
			$query->limit("$page_offset, $page_limit");
		}
		
		$this->entityQuery = $query;
	}