 			(conj (saveMeshMap (pop meshMapVec)) (createMyItemVector (.getKey (last meshMapVec)) (vec (.getValue (last meshMapVec))))))
 	))
 
+;; Save Tools for Groups
+(defn createGroupVector [groupItemListVec allItemsList]
+	"Converts a GroupItem into a savable vector."
+	(if (= (.length groupItemListVec) 0)
+		(vector)
+		(if (= (.length groupItemListVec) 1)
+			(vector (.indexOf allItemsList (first groupItemListVec)))
+			(conj (createGroupVector (pop groupItemListVec) allItemsList) (.indexOf allItemsList (last groupItemListVec))))
+	))
+
+(defn saveGroupsList [groupsListVec allItemsList]
+	"Saves all groups of the given groupsList (as vector) in EDN format."
+	(if (= (.length groupsListVec) 0)
+		(vector)
+		(if (= (.length groupsListVec) 1)
+			(vector (createGroupVector (vec (.getItems (first groupsListVec))) allItemsList))
+			(conj (saveGroupsList (pop groupsListVec) allItemsList) (createGroupVector (vec (.getItems (last groupsListVec))) allItemsList)))
+	))
+
 ;; Save Tools for Cameras
 (defn cameraToVector [cam]
 	"Converts a Camera into a savable vector."


;; Save Tools for Items
(defn meshToVector [mesh]
	"Converts Meshes into a savable vector. Special Meshes not yet supported."
	(println "Mesh to vector called with " (.getClass mesh))
	(if (= (.getClass mesh) gameEngine.meshs.Mesh) ;; If custom Mesh
		(let [material (.getMaterial mesh)

				(loadMeshMap (pop meshMapVec) world)))
	))

;; Load Tools for Groups
(defn createNGroups [n world]
	"Creates n groups in the world."
	(println "createNGroups called with " n world)
	(if (= n 0)
		nil
		(do
			(ItemManagement/createGroup world)
			(createNGroups (- n 1) world))
	))


(defn addItemsToGroup [groupItemsList groupId world]
	"Adds items from the groupItemsList vector to the group corresponding to the given groupId."
	(println "addItemsToGroup called with " groupItemsList groupId world)
	(cond (> (.size groupItemsList) 0)
		(let [groupsList (.getListGroup world)
					itemsList (.getListItems (.getSceneVertex world))]
			(addItem (.get groupsList groupId) (.get itemsList (first groupItemsList)))
			(addItemsToGroup (rest groupItemsList) groupId world))
	))


(defn addItemsToGroups [groupsList curId world]
	"Adds items from the groupsList vector to corresponding groups."
	(println "addItemsToGroups called with " groupsList curId world)
	(cond (> (.length groupsList) 0)
		(do
			(addItemsToGroup (lazy-seq (last groupsList)) curId world)
			(addItemsToGroups (pop groupsList) (- curId 1) world))
	))

;; Load Tools for Cameras
(defn addCameras [cameraList world index]
	"Adds all cameras contained in the provided list to the World."
