diff --git a/loopy/kernel/creation.py b/loopy/kernel/creation.py
index 7acb53f8e1e71b8999e9e9123d1cc0a0bee91f02..4a08c28bd8091425293892384e01d20447413cd5 100644
--- a/loopy/kernel/creation.py
+++ b/loopy/kernel/creation.py
@@ -1004,7 +1004,7 @@ def _find_existentially_quantified_inames(dom_str):
 
 
 def parse_domains(domains, defines):
-    if isinstance(domains, str):
+    if isinstance(domains, (isl.BasicSet, str)):
         domains = [domains]
 
     result = []
diff --git a/loopy/kernel/tools.py b/loopy/kernel/tools.py
index a65e7fb4ceefd28a909dcb6cee24ea437f15a60e..fbc4238c21e966cb61d1c074ce6924fd9af26084 100644
--- a/loopy/kernel/tools.py
+++ b/loopy/kernel/tools.py
@@ -107,7 +107,7 @@ def get_arguments_with_incomplete_dtype(knl):
             if arg.dtype is None]
 
 
-def add_and_infer_dtypes(knl, dtype_dict):
+def add_and_infer_dtypes(knl, dtype_dict, expect_completion=False):
     processed_dtype_dict = {}
 
     for k, v in six.iteritems(dtype_dict):
@@ -119,7 +119,7 @@ def add_and_infer_dtypes(knl, dtype_dict):
     knl = add_dtypes(knl, processed_dtype_dict)
 
     from loopy.type_inference import infer_unknown_types
-    return infer_unknown_types(knl, expect_completion=True)
+    return infer_unknown_types(knl, expect_completion=expect_completion)
 
 
 def _add_and_infer_dtypes_overdetermined(knl, dtype_dict):