diff --git a/stix2/patterns.py b/stix2/patterns.py
index 23ce71b..3f9cbd9 100644
--- a/stix2/patterns.py
+++ b/stix2/patterns.py
@@ -147,6 +147,9 @@ class ListConstant(_Constant):
 
 
 def make_constant(value):
+    if isinstance(value, _Constant):
+        return value
+
     try:
         return parse_into_datetime(value)
     except ValueError:

diff --git a/stix2/test/test_pattern_expressions.py b/stix2/test/test_pattern_expressions.py
index 74a7d0f..14e3774 100644
--- a/stix2/test/test_pattern_expressions.py
+++ b/stix2/test/test_pattern_expressions.py
@@ -372,3 +372,9 @@ def test_invalid_startstop_qualifier():
         stix2.StartStopQualifier(datetime.date(2016, 6, 1),
                                  'foo')
     assert 'is not a valid argument for a Start/Stop Qualifier' in str(excinfo)
+
+
+def test_make_constant_already_a_constant():
+    str_const = stix2.StringConstant('Foo')
+    result = stix2.patterns.make_constant(str_const)
+    assert result is str_const

make_constant() should check if value is already a constant
``` python
>>> from stix2.patterns import StringConstant
>>> from stix2.patterns import make_constant
>>> a = StringConstant('foo')
>>> make_constant(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/lu/Projects/cti-python-stix2/stix2/patterns.py", line 166, in make_constant
    raise ValueError("Unable to create a constant from %s" % value)
ValueError: Unable to create a constant from 'foo'
```
stix2/test/test_pattern_expressions.py::test_make_constant_already_a_constant
stix2/test/test_pattern_expressions.py::test_create_comparison_expression stix2/test/test_pattern_expressions.py::test_boolean_expression stix2/test/test_pattern_expressions.py::test_boolean_expression_with_parentheses stix2/test/test_pattern_expressions.py::test_hash_followed_by_registryKey_expression_python_constant stix2/test/test_pattern_expressions.py::test_hash_followed_by_registryKey_expression stix2/test/test_pattern_expressions.py::test_file_observable_expression stix2/test/test_pattern_expressions.py::test_multiple_file_observable_expression[AndObservationExpression-AND] stix2/test/test_pattern_expressions.py::test_multiple_file_observable_expression[OrObservationExpression-OR] stix2/test/test_pattern_expressions.py::test_root_types stix2/test/test_pattern_expressions.py::test_artifact_payload stix2/test/test_pattern_expressions.py::test_greater_than_python_constant stix2/test/test_pattern_expressions.py::test_greater_than stix2/test/test_pattern_expressions.py::test_less_than stix2/test/test_pattern_expressions.py::test_greater_than_or_equal stix2/test/test_pattern_expressions.py::test_less_than_or_equal stix2/test/test_pattern_expressions.py::test_not stix2/test/test_pattern_expressions.py::test_and_observable_expression stix2/test/test_pattern_expressions.py::test_invalid_and_observable_expression stix2/test/test_pattern_expressions.py::test_hex stix2/test/test_pattern_expressions.py::test_multiple_qualifiers stix2/test/test_pattern_expressions.py::test_set_op stix2/test/test_pattern_expressions.py::test_timestamp stix2/test/test_pattern_expressions.py::test_boolean stix2/test/test_pattern_expressions.py::test_binary stix2/test/test_pattern_expressions.py::test_list stix2/test/test_pattern_expressions.py::test_list2 stix2/test/test_pattern_expressions.py::test_invalid_constant_type stix2/test/test_pattern_expressions.py::test_invalid_integer_constant stix2/test/test_pattern_expressions.py::test_invalid_timestamp_constant stix2/test/test_pattern_expressions.py::test_invalid_float_constant stix2/test/test_pattern_expressions.py::test_boolean_constant[True-True0] stix2/test/test_pattern_expressions.py::test_boolean_constant[False-False0] stix2/test/test_pattern_expressions.py::test_boolean_constant[True-True1] stix2/test/test_pattern_expressions.py::test_boolean_constant[False-False1] stix2/test/test_pattern_expressions.py::test_boolean_constant[true-True] stix2/test/test_pattern_expressions.py::test_boolean_constant[false-False] stix2/test/test_pattern_expressions.py::test_boolean_constant[t-True] stix2/test/test_pattern_expressions.py::test_boolean_constant[f-False] stix2/test/test_pattern_expressions.py::test_boolean_constant[T-True] stix2/test/test_pattern_expressions.py::test_boolean_constant[F-False] stix2/test/test_pattern_expressions.py::test_boolean_constant[1-True] stix2/test/test_pattern_expressions.py::test_boolean_constant[0-False] stix2/test/test_pattern_expressions.py::test_invalid_boolean_constant stix2/test/test_pattern_expressions.py::test_invalid_hash_constant[MD5-zzz] stix2/test/test_pattern_expressions.py::test_invalid_hash_constant[ssdeep-zzz==] stix2/test/test_pattern_expressions.py::test_invalid_hex_constant stix2/test/test_pattern_expressions.py::test_invalid_binary_constant stix2/test/test_pattern_expressions.py::test_escape_quotes_and_backslashes stix2/test/test_pattern_expressions.py::test_like stix2/test/test_pattern_expressions.py::test_issuperset stix2/test/test_pattern_expressions.py::test_repeat_qualifier stix2/test/test_pattern_expressions.py::test_invalid_repeat_qualifier stix2/test/test_pattern_expressions.py::test_invalid_within_qualifier stix2/test/test_pattern_expressions.py::test_startstop_qualifier stix2/test/test_pattern_expressions.py::test_invalid_startstop_qualifier