diff --git a/lib/inventree/model.dart b/lib/inventree/model.dart
index cc4c8e13..df0f1174 100644
--- a/lib/inventree/model.dart
+++ b/lib/inventree/model.dart
@@ -13,35 +13,35 @@ import 'package:http/http.dart' as http;
 class InvenTreeObject {
 
   // Override the endpoint URL for each subclass
-  String _URL = "";
+  String URL = "";
 
   // JSON data which defines this object
-  Map<String, dynamic> _data = {};
+  Map<String, dynamic> jsondata = {};
 
   // Accessor for the API
   var api = InvenTreeAPI();
 
   // Default empty object constructor
   InvenTreeObject() {
-    _data.clear();
+    jsondata.clear();
   }
 
   // Construct an InvenTreeObject from a JSON data object
   InvenTreeObject.fromJson(Map<String, dynamic> json) {
 
     // Store the json object
-    _data = json;
+    jsondata = json;
 
   }
 
-  int get pk => _data['pk'] ?? -1;
+  int get pk => jsondata['pk'] ?? -1;
 
   // Some common accessors
-  String get name => _data['name'] ?? '';
+  String get name => jsondata['name'] ?? '';
 
-  String get description => _data['description'] ?? '';
+  String get description => jsondata['description'] ?? '';
 
-  int get parentId => _data['parent'] ?? -1;
+  int get parentId => jsondata['parent'] ?? -1;
 
   // Create a new object from JSON data (not a constructor!)
   InvenTreeObject _createFromJson(Map<String, dynamic> json) {
@@ -52,7 +52,7 @@ class InvenTreeObject {
       return obj;
   }
 
-  String get url{ return path.join(_URL, pk.toString()); }
+  String get url{ return path.join(URL, pk.toString()); }
 
   // Return list of objects from the database, with optional filters
   Future<List<InvenTreeObject>> list({Map<String, String> filters}) async {
@@ -61,12 +61,12 @@ class InvenTreeObject {
       filters = {};
     }
 
-    print("Listing endpoint: " + _URL);
+    print("Listing endpoint: " + URL);
 
     // TODO - Add "timeout"
     // TODO - Add error catching
 
-    var response = await InvenTreeAPI().get(_URL, params:filters);
+    var response = await InvenTreeAPI().get(URL, params:filters);
 
     // A list of "InvenTreeObject" items
     List<InvenTreeObject> results = new List<InvenTreeObject>();
@@ -78,6 +78,10 @@ class InvenTreeObject {
 
     final data = json.decode(response.body);
 
+    // TODO - handle possible error cases:
+    // - No data receieved
+    // - Data is not a list of maps
+
     for (var d in data) {
 
       // Create a new object (of the current class type
@@ -103,50 +107,3 @@ class InvenTreeObject {
 }
 
 
-class InvenTreePartCategory extends InvenTreeObject {
-  @override
-  String _URL = "part/category/";
-
-  String get pathstring => _data['pathstring'] ?? '';
-
-  InvenTreePartCategory() : super();
-
-  InvenTreePartCategory.fromJson(Map<String, dynamic> json) : super.fromJson(json) {
-
-  }
-
-  @override
-  InvenTreeObject _createFromJson(Map<String, dynamic> json) {
-    var cat = InvenTreePartCategory.fromJson(json);
-
-    // TODO ?
-
-    return cat;
-  }
-}
-
-
-class InvenTreePart extends InvenTreeObject {
-
-  @override
-  String _URL = "part/";
-
-  int get categoryId => _data['category'] as int ?? -1;
-
-  String get categoryName => _data['category__name'] ?? '';
-
-  InvenTreePart() : super();
-
-  InvenTreePart.fromJson(Map<String, dynamic> json) : super.fromJson(json) {
-    // TODO
-  }
-
-  @override
-  InvenTreeObject _createFromJson(Map<String, dynamic> json) {
-
-    var part = InvenTreePart.fromJson(json);
-
-    return part;
-
-  }
-}
\ No newline at end of file
diff --git a/lib/inventree/part.dart b/lib/inventree/part.dart
new file mode 100644
index 00000000..6db94090
--- /dev/null
+++ b/lib/inventree/part.dart
@@ -0,0 +1,55 @@
+import 'package:InvenTree/api.dart';
+
+import 'model.dart';
+import 'dart:convert';
+
+import 'package:path/path.dart' as path;
+import 'package:http/http.dart' as http;
+
+class InvenTreePartCategory extends InvenTreeObject {
+  @override
+  String URL = "part/category/";
+
+  String get pathstring => jsondata['pathstring'] ?? '';
+
+  InvenTreePartCategory() : super();
+
+  InvenTreePartCategory.fromJson(Map<String, dynamic> json) : super.fromJson(json) {
+
+  }
+
+  @override
+  InvenTreeObject _createFromJson(Map<String, dynamic> json) {
+    var cat = InvenTreePartCategory.fromJson(json);
+
+    // TODO ?
+
+    return cat;
+  }
+}
+
+
+class InvenTreePart extends InvenTreeObject {
+
+  @override
+  String URL = "part/";
+
+  int get categoryId => jsondata['category'] as int ?? -1;
+
+  String get categoryName => jsondata['category__name'] ?? '';
+
+  InvenTreePart() : super();
+
+  InvenTreePart.fromJson(Map<String, dynamic> json) : super.fromJson(json) {
+    // TODO
+  }
+
+  @override
+  InvenTreeObject _createFromJson(Map<String, dynamic> json) {
+
+    var part = InvenTreePart.fromJson(json);
+
+    return part;
+
+  }
+}
\ No newline at end of file