diff --git a/frontend/src/metabase-lib/lib/metadata/Metadata.js b/frontend/src/metabase-lib/lib/metadata/Metadata.js
index 2a2eb8a208ac33c6dbae7782678ac4055234cae5..f268e06cad2cf6b5ea4775cde8df0439a30246c0 100644
--- a/frontend/src/metabase-lib/lib/metadata/Metadata.js
+++ b/frontend/src/metabase-lib/lib/metadata/Metadata.js
@@ -44,6 +44,14 @@ export default class Metadata extends Base {
     return (Object.values(this.segments): Segment[]);
   }
 
+  segment(segmentId): ?Segment {
+    return (segmentId != null && this.segments[segmentId]) || null;
+  }
+
+  metric(metricId): ?Metric {
+    return (metricId != null && this.metrics[metricId]) || null;
+  }
+
   database(databaseId): ?Database {
     return (databaseId != null && this.databases[databaseId]) || null;
   }
diff --git a/frontend/src/metabase-lib/lib/queries/StructuredQuery.js b/frontend/src/metabase-lib/lib/queries/StructuredQuery.js
index 0ab5d5a636cdd8c3afdc4180f68b489316f659f3..0054527f5a31a601142a8f9160924b4938e12d29 100644
--- a/frontend/src/metabase-lib/lib/queries/StructuredQuery.js
+++ b/frontend/src/metabase-lib/lib/queries/StructuredQuery.js
@@ -49,6 +49,8 @@ import AggregationWrapper from "./Aggregation";
 import AggregationOption from "metabase-lib/lib/metadata/AggregationOption";
 import Utils from "metabase/lib/utils";
 
+import { isSegmentFilter } from "metabase/lib/query/filter";
+
 export const STRUCTURED_QUERY_TEMPLATE = {
   database: null,
   type: "query",
@@ -478,6 +480,20 @@ export default class StructuredQuery extends AtomicQuery {
     return this.table().segments.filter(sgmt => sgmt.is_active === true);
   }
 
+  /**
+   *  @returns @type {Segment}s that are currently applied to the question
+   */
+  segments() {
+    return this.filters()
+      .filter(f => isSegmentFilter(f))
+      .map(segmentFilter => {
+        // segment id is stored as the second part of the filter clause
+        // e.x. ["SEGMENT", 1]
+        const segmentId = segmentFilter[1];
+        return this.metadata().segment(segmentId);
+      });
+  }
+
   /**
    * @returns whether a new filter can be added or not
    */
diff --git a/frontend/test/metabase-lib/queries/StructuredQuery.unit.spec.js b/frontend/test/metabase-lib/queries/StructuredQuery.unit.spec.js
index f44f1434b1e19463a35d2f76c88ad9b1eb5483f8..2364743f8f839c5961344f0fb369f9445498791f 100644
--- a/frontend/test/metabase-lib/queries/StructuredQuery.unit.spec.js
+++ b/frontend/test/metabase-lib/queries/StructuredQuery.unit.spec.js
@@ -14,6 +14,7 @@ import {
   PRODUCT_TILE_FIELD_ID,
 } from "__support__/sample_dataset_fixture";
 
+import Segment from "metabase-lib/lib/metadata/Segment";
 import StructuredQuery from "metabase-lib/lib/queries/StructuredQuery";
 
 function makeDatasetQuery(query) {
@@ -380,6 +381,16 @@ describe("StructuredQuery unit tests", () => {
       pending();
     });
 
+    describe("segments", () => {
+      it("should list any applied segments that are currently active filters", () => {
+        const queryWithSegmentFilter = query.addFilter(["SEGMENT", 1]);
+        // expect there to be segments
+        expect(queryWithSegmentFilter.segments().length).toBe(1);
+        // and they should actually be segments
+        expect(queryWithSegmentFilter.segments()[0]).toBeInstanceOf(Segment);
+      });
+    });
+
     describe("canAddFilter", () => {
       pending();
     });