public JSONObject parseUserMangaListXML(InputStream inputXML) throws MALException, IOException {
		// My storage variables
		final ArrayList<Manga> myManga = new ArrayList<Manga>();
		final JSONObject mangaListData = new JSONObject();
		final Manga currentManga = new Manga();
		final User currentUser = new User();
		
		// XML nodes to detect
		RootElement root = new RootElement(MYANIMELIST);
		Element manga = root.getChild(MANGA);
		Element user = root.getChild(MYINFO);
		
		// Set parse events for myinfo node
		user.getChild(USER_ID).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentUser.setId(Integer.parseInt(body));
			}
		});
		user.getChild(USER_NAME).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentUser.setName(body);
			}
		});
		user.getChild(USER_READING).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentUser.setMangaReading(Integer.parseInt(body));
			}
		});
		user.getChild(USER_COMPLETED).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentUser.setMangaCompleted(Integer.parseInt(body));
			}
		});
		user.getChild(USER_ONHOLD).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentUser.setMangaOnhold(Integer.parseInt(body));
			}
		});
		user.getChild(USER_DROPPED).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentUser.setMangaDropped(Integer.parseInt(body));
			}
		});
		user.getChild(USER_PLANTOREAD).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentUser.setMangaPlanToRead(Integer.parseInt(body));
			}
		});
		user.getChild(USER_DAYS_SPENT_READING).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentUser.setMangaDaysSpentReading(Double.parseDouble(body));
			}
		});
		
		// Set parse events for manga node
		manga.setEndElementListener(new EndElementListener() {
			public void end() {
				myManga.add(currentManga.copy());
			}
		});
		manga.getChild(SERIES_MANGADB_ID).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentManga.setId(Integer.parseInt(body));
			}
		});
		manga.getChild(SERIES_TITLE).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentManga.setTitle(body);
			}
		});
		manga.getChild(SERIES_SYNONYMS).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				if(body.equals("")) {
					currentManga.setSynonyms(new String[0]);
				} else {
					currentManga.setSynonyms(body.split(";\\s"));
				}
			}
		});
		manga.getChild(SERIES_TYPE).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentManga.setType(Integer.parseInt(body));
			}
		});
		manga.getChild(SERIES_CHAPTERS).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentManga.setChapters(Integer.parseInt(body));
			}
		});
		manga.getChild(SERIES_VOLUMES).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentManga.setVolumes(Integer.parseInt(body));
			}
		});
		manga.getChild(SERIES_STATUS).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentManga.setStatus(Integer.parseInt(body));
			}
		});
		manga.getChild(SERIES_START).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				if(body.equals("0000-00-00") == false) {
					currentManga.setStart(Date.valueOf(body));
				}
			}
		});
		manga.getChild(SERIES_END).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				if(body.equals("0000-00-00") == false) {
					currentManga.setEnd(Date.valueOf(body));
				}
			}
		});
		manga.getChild(SERIES_IMAGE).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentManga.setImageUrl(body);
			}
		});
		manga.getChild(MY_ID).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentManga.setUserListId(Integer.parseInt(body));
			}
		});
		manga.getChild(MY_READ_CHAPTERS).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentManga.setUserChaptersRead(Integer.parseInt(body));
			}
		});
		manga.getChild(MY_READ_VOLUMES).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentManga.setUserVolumesRead(Integer.parseInt(body));
			}
		});
		manga.getChild(MY_START_DATE).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				if(body.equals("0000-00-00") == false) {
					currentManga.setUserStart(Date.valueOf(body));
				}
			}
		});
		manga.getChild(MY_FINISH_DATE).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				if(body.equals("0000-00-00") == false) {
					currentManga.setUserFinish(Date.valueOf(body));
				}
			}
		});
		manga.getChild(MY_SCORE).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentManga.setUserScore(Integer.parseInt(body));
			}
		});
		manga.getChild(MY_STATUS).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				final int userStatus = Integer.parseInt(body);
				currentManga.setPreviousUserStatus(userStatus);
				currentManga.setUserStatus(userStatus);
			}
		});
		manga.getChild(MY_REREADING).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				if(body.equals("1")) {
					currentManga.setUserEnableRereading(true);
				} else {
					currentManga.setUserEnableRereading(false);
				}
			}
		});
		manga.getChild(MY_LAST_UPDATED).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentManga.setUserLastUpdated(body);
			}
		});
		manga.getChild(MY_TAGS).setEndTextElementListener(new EndTextElementListener() {
			public void end(String body) {
				currentManga.setUserTags(body);
			}
		});
		
		try {
			Xml.parse(inputXML, Xml.Encoding.UTF_8, root.getContentHandler());
			mangaListData.put("user", currentUser);
			mangaListData.put("manga", myManga);
		} catch (Exception e) {
			throw new MALException(e);
		} finally {
			if(inputXML != null)
				inputXML.close();
		}
		
		return mangaListData;
	}