diff --git a/R/upgradeModelorg.R b/R/upgradeModelorg.R
new file mode 100644
index 0000000000000000000000000000000000000000..809c1c811a53cabd2919c5ed4aff120ea812d78c
--- /dev/null
+++ b/R/upgradeModelorg.R
@@ -0,0 +1,84 @@
+#  upgradeModelorg.R
+#  FBA and friends with R.
+#
+#  Copyright (C) 2010-2016 Claus Jonathan Fritzemeier, Dpt. for Bioinformatics,
+#  Institute for Informatics, Heinrich-Heine-University, Duesseldorf, Germany.
+#  All right reserved.
+#  Email: clausjonathan.fritzemeier@uni-duesseldorf.de
+#
+#  This file is part of sybil.
+#
+#  Sybil is free software: you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation, either version 3 of the License, or
+#  (at your option) any later version.
+#
+#  Sybil is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with sybil.  If not, see <http://www.gnu.org/licenses/>.
+
+
+################################################
+# Function: upgradeModelorg
+#
+# Takes an instance of a old modelorg version and returns one updated to the
+# current version.
+#
+
+
+upgradeModelorg <- function(object){
+	stopifnot(is(object, "modelorg"))
+	
+	if(!.hasSlot(object, "version") || compareVersion(version(object), "2.0") == -1){
+		# object is from a time before versions were introduced.
+		
+		# just add version slot
+		object@version <- "2.0"
+		
+		# update gprRules to new format
+		rules <- lapply(gpr(object), .parseBoolean)
+		if(length(rules) == 0){
+			genes(object) <- list()
+			gprRules(object) <- character(0)
+		}else{
+			genes(object) <- lapply(rules, "[[", "gene")
+			gprRules(object) <- sapply(rules, "[[", "rule")
+		}
+		
+		
+		# set attribute slots
+		react_attr(object) <- data.frame()
+		comp_attr(object) <- data.frame()
+		met_attr(object) <- data.frame()
+		mod_attr(object) <- data.frame()
+		
+		#recursively upgrade to latest version.
+		return(upgradeModelorg(object))
+	}
+	
+	if(compareVersion(version(object), SYBIL_SETTINGS("MODELORG_VERSION")) == 0){
+		stopifnot(validObject(object))
+		return(object)
+	}
+	
+	stop("unsupported version of modelorg")
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+