diff --git a/pydynamo/__init__.py b/pydynamo/__init__.py
index b630547564d94a5ba381a488a671ee99738d8356..530db54fd92661d58cd242f6ba2d4ab8d7043b0d 100644
--- a/pydynamo/__init__.py
+++ b/pydynamo/__init__.py
@@ -2,8 +2,7 @@
 
 __version__ = "0.1"
 
-from pydynamo.core import parse_system
-from pydynamo.core.parse_system import new_cst_politic
+from pydynamo.core.parse_system import new_cst_politic, new_system, system_from_lines, system_from_fun, system_from_file
 # import pydynamo.core.system
 from pydynamo.core.plot_system import plot_system, show_pyvis, plot_tabhl
 # import pydynamo.core.dynamo_converter
@@ -13,12 +12,12 @@ from .world2 import w2_code, w2_defs, scales_w2
 
 
 def get_w3():
-    w3 = parse_system.system_from_lines(w3_code)
+    w3 = system_from_lines(w3_code)
     w3.add_comments(w3_defs)
     return w3
 
 def get_w2():
-    w2 = parse_system.system_from_lines(w2_code)
+    w2 = system_from_lines(w2_code)
     w2.add_comments(w2_defs)
     return w2
 
diff --git a/pydynamo/core/parse_system.py b/pydynamo/core/parse_system.py
index d238fc60258f298202111f634d19baaa03ea4e02..f03918ca63e2d31c19ab81dd8569d50148ade994 100644
--- a/pydynamo/core/parse_system.py
+++ b/pydynamo/core/parse_system.py
@@ -149,3 +149,12 @@ def change_var_to_cst(s, var):
     #         new_raw_line = re.sub(f'(?<!\w){var}(?!\w)', f'{var}.k', args['raw_line'])
     #         args['raw_line'] = new_raw_line
     #         args['line'] = new_line   
+
+def new_system(raw):
+    """returns a new System object from the data included in raw"""
+    if callable(raw):
+        return system_from_fun(raw)
+    elif isinstance(raw, list):
+        return system_from_lines(raw)
+    elif isinstance(raw, str):
+        return system_from_file(raw)