diff --git a/release-log.txt b/release-log.txt
index 56be318..0bfac32 100644
--- a/release-log.txt
+++ b/release-log.txt
@@ -1,18 +1,10 @@
 Apache Atlas Release Notes
 ==========================
 
---trunk - unreleased
-
-INCOMPATIBLE CHANGES:
-
-ALL CHANGES:
-
-ATLAS-10 Update trunk version to 0.6-incubating-SNAPSHOT (shwethags)
-
 --Release 0.5-incubating
 
 ALL CHANGES:
-
+ATLAS-17 Parameterize schema API query per typeName (shwethags)
 ATLAS-18 Build fails because of a missing artifact (Ajay Yadava via Venkatesh Seetharam)
 ATLAS-13 Add project website (Venkatesh Seetharam)
 ATLAS-12 Update the copyright in Notice and License files (Venkatesh Seetharam)
diff --git a/repository/src/main/java/org/apache/atlas/discovery/HiveLineageService.java b/repository/src/main/java/org/apache/atlas/discovery/HiveLineageService.java
index 9764f8f..76d94a3 100644
--- a/repository/src/main/java/org/apache/atlas/discovery/HiveLineageService.java
+++ b/repository/src/main/java/org/apache/atlas/discovery/HiveLineageService.java
@@ -32,6 +32,7 @@
 import org.apache.atlas.repository.EntityNotFoundException;
 import org.apache.atlas.repository.MetadataRepository;
 import org.apache.atlas.repository.graph.GraphProvider;
+import org.apache.atlas.typesystem.persistence.ReferenceableInstance;
 import org.apache.commons.configuration.PropertiesConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -53,26 +54,27 @@
     private static final Option<List<String>> SELECT_ATTRIBUTES =
             Some.<List<String>>apply(List.<String>fromArray(new String[]{"name"}));
 
+    public static final String HIVE_TABLE_SCHEMA_QUERY_PREFIX = "atlas.lineage.hive.table.schema.query.";
+
     private static final String HIVE_TABLE_TYPE_NAME;
     private static final String HIVE_PROCESS_TYPE_NAME;
     private static final String HIVE_PROCESS_INPUT_ATTRIBUTE_NAME;
     private static final String HIVE_PROCESS_OUTPUT_ATTRIBUTE_NAME;
 
-    private static final String HIVE_TABLE_SCHEMA_QUERY;
     private static final String HIVE_TABLE_EXISTS_QUERY;
 
+    private static final PropertiesConfiguration propertiesConf;
+
     static {
         // todo - externalize this using type system - dog food
         try {
-            PropertiesConfiguration conf = PropertiesUtil.getApplicationProperties();
-            HIVE_TABLE_TYPE_NAME = conf.getString("atlas.lineage.hive.table.type.name", "DataSet");
-            HIVE_PROCESS_TYPE_NAME = conf.getString("atlas.lineage.hive.process.type.name", "Process");
-            HIVE_PROCESS_INPUT_ATTRIBUTE_NAME = conf.getString("atlas.lineage.hive.process.inputs.name", "inputs");
-            HIVE_PROCESS_OUTPUT_ATTRIBUTE_NAME = conf.getString("atlas.lineage.hive.process.outputs.name", "outputs");
+            propertiesConf = PropertiesUtil.getApplicationProperties();
+            HIVE_TABLE_TYPE_NAME = propertiesConf.getString("atlas.lineage.hive.table.type.name", "DataSet");
+            HIVE_PROCESS_TYPE_NAME = propertiesConf.getString("atlas.lineage.hive.process.type.name", "Process");
+            HIVE_PROCESS_INPUT_ATTRIBUTE_NAME = propertiesConf.getString("atlas.lineage.hive.process.inputs.name", "inputs");
+            HIVE_PROCESS_OUTPUT_ATTRIBUTE_NAME = propertiesConf.getString("atlas.lineage.hive.process.outputs.name", "outputs");
 
-            HIVE_TABLE_SCHEMA_QUERY =
-                    conf.getString("atlas.lineage.hive.table.schema.query", "hive_table where name=\"%s\", columns");
-            HIVE_TABLE_EXISTS_QUERY = conf.getString("atlas.lineage.hive.table.exists.query",
+            HIVE_TABLE_EXISTS_QUERY = propertiesConf.getString("atlas.lineage.hive.table.exists.query",
                     "from " + HIVE_TABLE_TYPE_NAME + " where name=\"%s\"");
         } catch (AtlasException e) {
             throw new RuntimeException(e);
@@ -195,9 +197,10 @@
     public String getSchema(String tableName) throws AtlasException {
         LOG.info("Fetching schema for tableName={}", tableName);
         ParamChecker.notEmpty(tableName, "table name cannot be null");
-        validateTableExists(tableName);
+        String typeName = validateTableExists(tableName);
 
-        final String schemaQuery = String.format(HIVE_TABLE_SCHEMA_QUERY, tableName);
+        final String schemaQuery =
+                String.format(propertiesConf.getString(HIVE_TABLE_SCHEMA_QUERY_PREFIX + typeName), tableName);
         return discoveryService.searchByDSL(schemaQuery);
     }
 
@@ -206,11 +209,14 @@
      *
      * @param tableName table name
      */
-    private void validateTableExists(String tableName) throws AtlasException {
+    private String validateTableExists(String tableName) throws AtlasException {
         final String tableExistsQuery = String.format(HIVE_TABLE_EXISTS_QUERY, tableName);
         GremlinQueryResult queryResult = discoveryService.evaluate(tableExistsQuery);
         if (!(queryResult.rows().length() > 0)) {
             throw new EntityNotFoundException(tableName + " does not exist");
         }
+
+        ReferenceableInstance referenceable = (ReferenceableInstance)queryResult.rows().apply(0);
+        return referenceable.getTypeName();
     }
 }
diff --git a/repository/src/test/resources/application.properties b/repository/src/test/resources/application.properties
index 32d40b0..20c0c51 100755
--- a/repository/src/test/resources/application.properties
+++ b/repository/src/test/resources/application.properties
@@ -36,7 +36,7 @@
 #atlas.lineage.hive.process.outputs.name=outputs
 
 ## Schema
-#atlas.lineage.hive.table.schema.query=hive_table where name=?, columns
+atlas.lineage.hive.table.schema.query.hive_table=hive_table where name='%s'\, columns
 
 
 #########  Security Properties  #########
diff --git a/src/conf/application.properties b/src/conf/application.properties
index 5818701..6c4c7d2 100755
--- a/src/conf/application.properties
+++ b/src/conf/application.properties
@@ -36,7 +36,8 @@
 #atlas.lineage.hive.process.outputs.name=outputs
 
 ## Schema
-#atlas.lineage.hive.table.schema.query=hive_table where name=?, columns
+atlas.lineage.hive.table.schema.query.hive_table=hive_table where name='%s'\, columns
+atlas.lineage.hive.table.schema.query.Table=Table where name='%s'\, columns
 
 
 #########  Security Properties  #########
diff --git a/webapp/src/main/resources/application.properties b/webapp/src/main/resources/application.properties
index 9ade2a7..c9b8408 100755
--- a/webapp/src/main/resources/application.properties
+++ b/webapp/src/main/resources/application.properties
@@ -36,7 +36,7 @@
 #atlas.lineage.hive.process.outputs.name=outputs
 
 ## Schema
-#atlas.lineage.hive.table.schema.query=hive_table where name=?, columns
+atlas.lineage.hive.table.schema.query.hive_table=hive_table where name='%s'\, columns
 
 
 #########  Security Properties  #########
