diff --git a/modules/islandora_videojs/islandora_videojs.info.yml b/modules/islandora_videojs/islandora_videojs.info.yml
new file mode 100644
index 00000000..f5f41547
--- /dev/null
+++ b/modules/islandora_videojs/islandora_videojs.info.yml
@@ -0,0 +1,7 @@
+name: 'Islandora Videojs'
+description: 'Islandora Videojs overrides'
+type: module
+package: Islandora
+core: 8.x
+dependencies:
+  - islandora
diff --git a/modules/islandora_videojs/islandora_videojs.module b/modules/islandora_videojs/islandora_videojs.module
new file mode 100644
index 00000000..6bacaf22
--- /dev/null
+++ b/modules/islandora_videojs/islandora_videojs.module
@@ -0,0 +1,107 @@
+<?php
+
+/**
+ * @file
+ * Contains islandora_videojs.module.
+ *
+ * This file is part of the Islandora Project.
+ *
+ * (c) Islandora Foundation
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+use Drupal\Core\Routing\RouteMatchInterface;
+
+/**
+ * Implements hook_help().
+ */
+function islandora_videojs_help($route_name, RouteMatchInterface $route_match) {
+  switch ($route_name) {
+    // Main module help for the islandora module.
+    case 'help.page.islandora_videojs':
+      $output = '';
+      $output .= '<h3>' . t('About') . '</h3>';
+      $output .= '<p>' . t('Islandora Videojs overrides.') . '</p>';
+      $output .= '<p>' . t('Customizes videojs.') . '</p>';
+      return $output;
+
+    default:
+  }
+}
+
+function islandora_videojs_theme_registry_alter(&$theme_registry) {
+  $module_path = drupal_get_path('module', 'islandora_videojs');
+
+  // Use the templates in my module's template folder.
+  $theme_registry['videojs'] = $theme_registry['videojs'];
+  $theme_registry['videojs']['path'] = $module_path . '/templates';
+  $theme_registry['videojs']['template'] = 'videojs';
+}
+
+
+/**
+* videojs theme override
+*/
+function islandora_videojs_theme($existing, $type, $theme, $path) {
+  $transcript_urls = get_transcript_urls();
+  return array(
+    'videojs' => array(
+      'variables' => array('items' => NULL, 'player_attributes' => NULL, 'mimes' => NULL, 'transcript_urls' => $transcript_urls),
+      'base hook' => 'videojs'
+    ),
+  );
+}
+
+/**
+* returns the urls of the transcript of a repository item
+*/
+function get_transcript_urls() {
+  // Get the nid
+  $node = \Drupal::routeMatch()->getParameter('node');
+  $nid = NULL;
+  if ($node instanceof \Drupal\node\NodeInterface) {
+    $nid = $node->id();
+  }
+
+  $transcript_urls = array();
+
+  if ($nid != NULL) {
+    // media url
+    global $base_url;
+    $media_url = $base_url. '/node/' . $nid . '/media';
+
+    try {
+        $media_client = new \GuzzleHttp\Client();
+        $media_response = $media_client->request('GET', $media_url, [
+            'http_errors' => false,
+            'auth' => ['admin', 'islandora'],
+            'query' => ['_format' => 'json']
+        ]);
+        $code = $media_response->getStatusCode();
+
+        if ($code = 200) {
+
+        // Loop through media to find the transcripts
+        $media_list = (string) $media_response->getBody();
+        $media_list = json_decode($media_list, true);
+        foreach ($media_list as $media) {
+          if ($media['field_media_use'][0]['url'] == "/taxonomy/term/20") {
+             $file_url = $media['field_media_file'][0]['url'];
+             $transcript_urls[] = $file_url;
+          }
+        }
+        }
+    }
+    catch (\Exception $e) {
+      \Drupal::logger('islandora_videojs')->notice("Error in getting transcripts: " . $e->getMessage());
+    }
+
+  }
+
+  return $transcript_urls;
+}
+
+
+
diff --git a/modules/islandora_videojs/templates/videojs.html.twig b/modules/islandora_videojs/templates/videojs.html.twig
new file mode 100644
index 00000000..57abbbda
--- /dev/null
+++ b/modules/islandora_videojs/templates/videojs.html.twig
@@ -0,0 +1,26 @@
+{#
+/**
+ * @file
+ * Default theme implementation to display a formatted video field.
+ *
+ * Available variables:
+ * - items: A collection of videos.
+ * - player_attributes: Player options including the following:
+ *   - width: The width of the video (if known).
+ *   - height: The height of the video (if known).
+ *   - autoplay: Autoplay on or off
+ *
+ * @ingroup themeable
+ */
+#}
+<h3>Videojs Test </h3>
+<video data-setup="{}" class="video-js vjs-default-skin" preload="{{ player_attributes.preload }}" {{ player_attributes.controls ? 'controls' : '' }} style="width:{{ player_attributes.width }}px;height:{{ player_attributes.height }}px;" {{ player_attributes.autoplay ? 'autoplay' : '' }} {{ player_attributes.loop ? 'loop' : '' }} {{ player_attributes.muted ? 'muted' : '' }}>
+  {% for user in items %}
+    <source src="{{ user }}" type="{{ mimes[ loop.index - 1 ] }}"/>
+  {% endfor %}
+
+  {% for transcript_url in transcript_urls %}
+    <track srclang="en" label="English" kind="captions" src="{{ transcript_url }}" default />
+  {% endfor %}
+
+</video>