diff --git a/planetstack/dmdot b/planetstack/dmdot
index 0075f59..4353793 100755
--- a/planetstack/dmdot
+++ b/planetstack/dmdot
@@ -10,39 +10,61 @@
 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "planetstack.settings")
 
 from django.db.models.fields.related import ForeignKey
-from core.models import *
 
-try:
-	output = sys.args[1]
-except:
-	output = '-json'
+# defaults
+app = "core"
+output = "-json"
 
-g = globals()
+# syntax: dmdot [-json | -dot] [app_name]
+
+# poor man's argument parser
+for arg in sys.argv[1:]:
+    if arg.startswith("-"):
+        output = arg
+    else:
+        app = arg
+
+app = app + ".models"
+#models_module = imp.load_source(app, ".")
+models_module = __import__(app)
+for part in app.split(".")[1:]:
+    models_module = getattr(models_module,part)
+
+PlCoreBase = getattr(models_module,"PlCoreBase")
+
 model_classes = []
 class_names = []
-
-for c in g.values():
+lower_class_names = {}
+for classname in dir(models_module):
+        c = getattr(models_module, classname, None)
 	if type(c)==type(PlCoreBase):
 		model_classes.append(c)
 		class_names.append(c.__name__)
+                lower_class_names[c.__name__.lower()] = c
 
+# django doesn't use the correct case in field.name.title() for objects that
+# have CamelCased class names. So, compare everything in lower case.
 
 if (output=='-dot'):
 	print "digraph plstack {";
 	for c in model_classes:
 		fields = c._meta.fields
 		for f in fields:
-			if type(f)==ForeignKey and f.name.title() in class_names:
-				print '\t"%s"->"%s";'%(c.__name__,f.name.title())
+			if type(f)==ForeignKey and f.name.lower() in lower_class_names:
+                                linked_class = lower_class_names[f.name.lower()]
+				print '\t"%s"->"%s";'%(c.__name__,linked_class.__name__)
 	print "}\n";
 elif (output=='-json'):
 	d = {}
 	for c in model_classes:
 		fields = c._meta.fields
 		for f in fields:
-			if type(f)==ForeignKey and f.name.title() in class_names:
+			if type(f)==ForeignKey and f.name.lower() in lower_class_names:
+                                linked_class = lower_class_names[f.name.lower()]
 				try:
-					d[c.__name__].append(f.name.title())
+					d[c.__name__].append(linked_class.__name__)
 				except KeyError:
-					d[c.__name__]=[f.name.title()]
+					d[c.__name__]=[linked_class.__name__]
 	print json.dumps(d,indent=4)
+	
+	
