diff --git a/SocrataSelectQuery.inc b/SocrataSelectQuery.inc
index f9cc019..c64232e 100644
--- a/SocrataSelectQuery.inc
+++ b/SocrataSelectQuery.inc
@@ -75,8 +75,21 @@ class SocrataSelectQuery extends SelectQueryExtender {
     return "{$components['scheme']}://{$components['host']}/api/views/{$components['dataset_id']}/rows.{$format}?accessType=DOWNLOAD";
   }
 
+  /**
+   * Return Socrata metadata URL.
+   *
+   * @param $format string
+   *
+   * @return string
+   */
+  public function getMetaDataUrl() {
+    $source = isset($this->source) ? $this->source : $this->getSource();
+    $components = socrata_components_from_endpoint($source->endpoint);
+
+    return "{$components['scheme']}://{$components['host']}/api/views/{$components['dataset_id']}.json";
+  }
 
-  public function execute() {
+  public function execute($type = NULL) {
     $retval = FALSE;
 
     $source = $this->getSource();
@@ -115,8 +128,13 @@ class SocrataSelectQuery extends SelectQueryExtender {
         $retval = FALSE;
 
         // Construct URL
-        $soda_url = $this->getCurlUrl();
-        //$soda_url = url($endpoint, array('query' => $params, 'absolute' => TRUE));
+        if ($type == 'metadata') {
+          $soda_url = $this->getMetaDataURL();
+        }
+        else {
+          $soda_url = $this->getCurlUrl();
+          //$soda_url = url($endpoint, array('query' => $params, 'absolute' => TRUE));
+        }
         _socrata_dbg($soda_url);
 
         curl_setopt($ch, CURLOPT_URL, $soda_url);
diff --git a/socrata_views/socrata_views.module b/socrata_views/socrata_views.module
index e7f9a67..813b3b0 100644
--- a/socrata_views/socrata_views.module
+++ b/socrata_views/socrata_views.module
@@ -112,6 +112,10 @@ function socrata_views_data() {
     $resp = $query->execute();
 
     if ($resp !== FALSE && !empty($resp['fields'])) {
+      // Also get the metadata.
+      $resp_metadata = $query->execute('metadata');
+      $metadata_field_list = $resp_metadata['data']['columns'];
+
       // Define basic table info
       $tables[$source_name] = array();
       $table = &$tables[$source_name];
@@ -129,12 +133,22 @@ function socrata_views_data() {
       );
 
       // Add fields to table
-      foreach ($resp['fields'] as $field_name => $field_type) {
+      foreach ($resp['fields'] as $field_machine_name => $field_type) {
         $field_options = array(
           'dataset' => $dataset,
           'soda2_type' => $field_type,
         );
-        $handlers = _socrata_views_handlers($field_name, $field_type, $field_options);
+        $handlers = _socrata_views_handlers($field_machine_name, $field_type, $field_options);
+
+        // Get human-readable field name from metadata.
+        $field_name = $field_machine_name;
+        foreach($metadata_field_list as $metadata_field) {
+          if ($field_machine_name == $metadata_field['fieldName']) {
+            $field_name = $metadata_field['name'];
+            continue;
+          }
+        }
+
         $field_def = array_merge_recursive(
           $handlers,
           array(
@@ -146,7 +160,7 @@ function socrata_views_data() {
           )
         );
 
-        $table[$field_name] = $field_def;
+        $table[$field_machine_name] = $field_def;
       }
 
       // Add result id field since we have to define at least one initial field
