diff --git a/DESCRIPTION b/DESCRIPTION
index f62fff49383167024761eb0b76f5f7f0670e788b..9aa324e719a4d579d4d39fdfac9f50ba7afc0791 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,8 +1,8 @@
 Package: sybil
 Type: Package
 Title: Efficient Constrained Based Modelling in R
-Version: 2.0.3
-Date: 2017-07-12
+Version: 2.1.0
+Date: 2017-07-21
 Authors@R: c(
 	     person(c("C.", "Jonathan"), "Fritzemeier", role = c("cre", "ctb"), email = "clausjonathan.fritzemeier@uni-duesseldorf.de"),
 	     person("Gabriel", "Gelius-Dietrich", role = c("aut")),
@@ -21,7 +21,8 @@ URL:
 Description: This Systems Biology Library for R implements algorithms for constraint based analyses of metabolic networks (e.g. flux-balance analysis (FBA), minimization of metabolic adjustment (MOMA), regulatory on/off minimization (ROOM), robustness analysis and flux variability analysis). Most of the current LP/MILP solvers are supported via additional packages.
 LazyLoad: yes
 License: GPL-3 | file LICENSE
-Collate: generics.R validmodelorg.R validoptsol.R validreactId.R
+Collate: generics.R validmodelorg.R validoptsol.R validreactId.R validreact.R
+        reactClass.R
         validreactId_Exch.R validsysBiolAlg.R addAlgorithm.R
         addExchReact.R addReact.R addSolver.R blockedReact.R
         bracket_pairs.R ceilValues.R changeBounds.R changeGPR.R
@@ -53,7 +54,8 @@ Collate: generics.R validmodelorg.R validoptsol.R validreactId.R
         sysBiolAlg_lmomaClass.R sysBiolAlg_momaClass.R
         sysBiolAlg_mtfClass.R sysBiolAlg_mtfEasyConstraintClass.R
         sysBiolAlg_roomClass.R sybilLogClass.R upgradeModelorg.R
-Packaged: 2017-07-12 12:34:14 UTC; jonathan
+        mergeReact2Modelorg.R
+Packaged: 2017-07-21 12:34:14 UTC; jonathan
 Author: C. Jonathan Fritzemeier [cre, ctb],
   Gabriel Gelius-Dietrich [aut],
   Rajen Piernikarczyk [ctb],
diff --git a/NAMESPACE b/NAMESPACE
index e782ef4835465a07be574fe5c2c7610ae3cb85da..b750218c1187f48e7e88423bd85e7d3971599a43 100644
--- a/NAMESPACE
+++ b/NAMESPACE
@@ -11,6 +11,7 @@ importFrom("utils", "compareVersion")
 
 exportPattern("^[^\\.]")
 
+
 exportClass(
 checksol,
 fluxDistribution,
@@ -30,6 +31,7 @@ optsol_robAna,
 optsol,
 pointerToProb,
 ppProc,
+react,
 reactId,
 sybilError,
 sybilLog
diff --git a/R/addReact.R b/R/addReact.R
index 35e6a252a998e9d3147ebc08b7916fbdc6b9b35d..915a5af624f8fa8a62d32441aa33a8aa1d4c13e6 100644
--- a/R/addReact.R
+++ b/R/addReact.R
@@ -31,19 +31,20 @@
 # The algorithm is (more or less) the same.
 
 
-addReact <- function(model,
-                     id,
-                     met,
-                     Scoef,
-                     reversible = FALSE,
-                     lb = 0,
-                     ub = SYBIL_SETTINGS("MAXIMUM"),
-                     obj = 0,
-                     subSystem = NA,
-                     gprAssoc = NA,
-                     reactName = NA,
-                     metName = NA,
-                     metComp = NA) {
+setMethod("addReact", signature(model = "modelorg"),
+	function(model,
+			id,
+			met,
+			Scoef,
+			reversible = FALSE,
+			lb = 0,
+			ub = SYBIL_SETTINGS("MAXIMUM"),
+			obj = 0,
+			subSystem = NA,
+			gprAssoc = NA,
+			reactName = NA,
+			metName = NA,
+			metComp = NA) {
 
   
     # ------------------------------------------------------------------------ #
@@ -410,5 +411,5 @@ addReact <- function(model,
 
     return(mod_out)
 
-}
+})
 
diff --git a/R/checksolClass.R b/R/checksolClass.R
index 8659abf9d89d79f9a54084dcd679d4039ae23067..3f8c08ad95f321ec85e9e0f8c2d482bd9ab53ccc 100644
--- a/R/checksolClass.R
+++ b/R/checksolClass.R
@@ -62,7 +62,7 @@ setMethod("num_of_prob", signature(object = "checksol"),
           }
 )
 
-setReplaceMethod("num_of_prob", signature = (object = "checksol"),
+setReplaceMethod("num_of_prob", signature(object = "checksol"),
                  function(object, value) {
                      object@num_of_prob <- value
                      return(object)
@@ -77,7 +77,7 @@ setMethod("exit_code", signature(object = "checksol"),
           }
 )
 
-setReplaceMethod("exit_code", signature = (object = "checksol"),
+setReplaceMethod("exit_code", signature(object = "checksol"),
                  function(object, value) {
                      object@exit_code <- value
                      return(object)
@@ -92,7 +92,7 @@ setMethod("exit_num", signature(object = "checksol"),
           }
 )
 
-setReplaceMethod("exit_num", signature = (object = "checksol"),
+setReplaceMethod("exit_num", signature(object = "checksol"),
                  function(object, value) {
                      object@exit_num <- value
                      return(object)
@@ -107,7 +107,7 @@ setMethod("exit_meaning", signature(object = "checksol"),
           }
 )
 
-setReplaceMethod("exit_meaning", signature = (object = "checksol"),
+setReplaceMethod("exit_meaning", signature(object = "checksol"),
                  function(object, value) {
                      object@exit_meaning <- value
                      return(object)
@@ -122,7 +122,7 @@ setMethod("status_code", signature(object = "checksol"),
           }
 )
 
-setReplaceMethod("status_code", signature = (object = "checksol"),
+setReplaceMethod("status_code", signature(object = "checksol"),
                  function(object, value) {
                      object@status_code <- value
                      return(object)
@@ -137,7 +137,7 @@ setMethod("status_num", signature(object = "checksol"),
           }
 )
 
-setReplaceMethod("status_num", signature = (object = "checksol"),
+setReplaceMethod("status_num", signature(object = "checksol"),
                  function(object, value) {
                      object@status_num <- value
                      return(object)
@@ -153,7 +153,7 @@ setMethod("status_meaning", signature(object = "checksol"),
           }
 )
 
-setReplaceMethod("status_meaning", signature = (object = "checksol"),
+setReplaceMethod("status_meaning", signature(object = "checksol"),
                  function(object, value) {
                      object@status_meaning <- value
                      return(object)
diff --git a/R/fluxDistributionClass.R b/R/fluxDistributionClass.R
index d716d5da1082b61923ed360f871e5ce618201b05..ef3e4466e7cf69ae2ac56e6b567d760f14d26711 100644
--- a/R/fluxDistributionClass.R
+++ b/R/fluxDistributionClass.R
@@ -72,7 +72,7 @@ setMethod("fluxes", signature(object = "fluxDistribution"),
           }
 )
 
-setReplaceMethod("fluxes", signature = (object = "fluxDistribution"),
+setReplaceMethod("fluxes", signature(object = "fluxDistribution"),
                  function(object, value) {
                      object@fluxes <- value
                      return(object)
diff --git a/R/generics.R b/R/generics.R
index af64b93398d579728264339f40fbcd40d648d6bd..b294389bfb4364df658d908bb0f6cffb79de20bf 100644
--- a/R/generics.R
+++ b/R/generics.R
@@ -38,6 +38,10 @@ setGeneric(name = "addColsToProb",
            def  = function(lp, ...) { standardGeneric("addColsToProb") }
 )
 
+setGeneric(name = "addReact",
+           def  = function(model, ...) { standardGeneric("addReact") }
+)
+
 setGeneric(name = "addRows",
            def  = function(lp, nrows, ...) { standardGeneric("addRows") }
 )
@@ -351,6 +355,10 @@ setGeneric(name = "getObjVal",
            def  = function(lp) { standardGeneric("getObjVal") }
 )
 
+setGeneric(name = "getReaction",
+           def  = function(X, ...) { standardGeneric("getReaction") }
+)
+
 setGeneric(name = "getRedCosts",
            def  = function(lp) { standardGeneric("getRedCosts") }
 )
@@ -389,6 +397,13 @@ setGeneric(name = "gprRules<-",
            def  = function(object, value) { standardGeneric("gprRules<-") }
 )
 
+setGeneric(name = "gprRule",
+           def  = function(object) { standardGeneric("gprRule") }
+)
+setGeneric(name = "gprRule<-",
+           def  = function(object, value) { standardGeneric("gprRule<-") }
+)
+
 setGeneric(name = "hasEffect",
            def  = function(object) { standardGeneric("hasEffect") }
 )
@@ -869,6 +884,13 @@ setGeneric(name = "S<-",
            def  = function(object, value) { standardGeneric("S<-") }
 )
 
+setGeneric(name = "s",
+           def  = function(object) { standardGeneric("s") }
+)
+setGeneric(name = "s<-",
+           def  = function(object, value) { standardGeneric("s<-") }
+)
+
 setGeneric(name = "scaleProb",
            def  = function(lp, ...) { standardGeneric("scaleProb") }
 )
diff --git a/R/mergeReact2Modelorg.R b/R/mergeReact2Modelorg.R
new file mode 100644
index 0000000000000000000000000000000000000000..2f4f58644c0da9e9e241016d26b6baaad8734285
--- /dev/null
+++ b/R/mergeReact2Modelorg.R
@@ -0,0 +1,162 @@
+#  mergeReact2Modelorg.R
+#  FBA and friends with R.
+#
+#  Copyright (C) 2010-2017 Claus Jonathan Fritzemeier, Dpt. for Computational Cell Biology,
+#  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/>.
+
+
+# mergeReact2Modelorg
+
+
+################################################
+# Function: mergeReact2Modelorg
+#
+# Merge react objects into modelorg object
+#
+# Takes a list of react class instances and returns a modelorg object by 
+# merging the reactions into one model.
+
+
+#------------------------------------------------------------------------------#
+#               definition of the class mergeReact2Modelorg                    #
+#------------------------------------------------------------------------------#
+
+
+mergeReact2Modelorg <- function(reactList = NULL, id="newModel", name=""){
+	
+	stopifnot(!is.null(reactList))
+	
+	morg <- new("modelorg", id=id, name=name)
+	
+	reacts <- sapply(reactList, react_id)
+	if(anyDuplicated(reacts)){
+		stop("reaction ids have to be unique.")
+	}
+	react_id(morg) <- reacts
+	react_num(morg) <- length(reacts)
+	
+	met_id <- unique(unlist(lapply(reactList, met_id)))
+	met_id(morg) <- met_id
+	met_num(morg) <- length(met_id(morg))
+	
+	# collecting metabolite names and verifying identical assignments
+	met_name <- character(length(met_id))
+	names(met_name) <- met_id
+	for(r in reactList){
+		if(!all(met_name[met_id(r)] == "" | met_name[met_id(r)] == met_name(r))){
+			stop("different metabolite names for same met_id")
+		}
+		met_name[met_id(r)] <- met_name(r)
+	}
+	met_name(morg) <- met_name
+	
+	# collecting metabolite compartments and verifying identical assignments
+	met_comp <- character(length(met_id))
+	names(met_comp) <- met_id
+	for(r in reactList){
+		stopifnot(all(met_comp[met_id(r)] == "" | met_comp[met_id(r)] == met_comp(r)))
+		met_comp[met_id(r)] <- met_comp(r)
+	}
+	mod_compart(morg) <- unique(met_comp)
+	met_comp(morg) <- match(met_comp, mod_compart(morg))
+	
+	S <- Matrix(0, nrow=length(met_id), ncol=length(reacts))
+	for(j in seq(along=reactList)){
+		r <- reactList[[j]]
+		i <- match(met_id(r), met_id)
+		S[i, j] <- s(r)
+	}
+	S(morg) <- S
+	
+	subs <- lapply(reactList, subSys)
+	subsUnique <- unique(unlist(subs))
+	
+	subSys <- Matrix(F, ncol=length(subsUnique), nrow=length(reacts))
+	for(i in seq(along=reactList)){
+		ss <- setdiff(subSys(r), "")
+		if(length(ss)> 0 ){
+			j <- match(ss, subsUnique)
+			subSys[i, j] <- T
+		}
+	}
+	colnames(subSys) <- subsUnique
+	subSys(morg) <- subSys
+	
+	gprRules(morg) <- sapply(reactList, gprRule)
+	gpr(morg) <- sapply(reactList, gpr)
+	genes(morg) <- lapply(reactList, genes)
+	allGenes(morg) <- setdiff(unique(unlist(genes(morg))), "")
+	
+	
+	# built react_attr frame:
+	if(all(sapply(reactList, function(x) nrow(react_attr(x))==0))){
+		react_attr(morg) <- data.frame()
+	}else{
+		reactAttrList <- lapply(reactList, function(x){
+			df <- react_attr(x)
+			df$react_id <- react_id(x)
+			df
+		})
+		reactAttr <- Reduce(function(x, y) merge(x, y, by=intersect(colnames(x), colnames(y)), suffixes=c("", ""), all=TRUE), reactAttrList)
+		reactAttr <- reactAttr[match(react_id(morg), reactAttr$react_id), ]
+		reactAttr <- reactAttr[, setdiff(colnames(reactAttr), "react_id"), drop=F]
+		react_attr(morg) <- reactAttr
+	}
+	
+	# built met_attr frame:
+	if(all(sapply(reactList, function(x) nrow(met_attr(x))==0))){
+		met_attr(morg) <- data.frame()
+	}else{
+		metAttrList <- lapply(reactList, function(x){
+			df <- met_attr(x)
+			df$met_id <- met_id(x)
+			df
+		})
+		metAttr <- Reduce(function(x, y) merge(x, y, by=intersect(colnames(x), colnames(y)), suffixes=c("", ""), all=TRUE), metAttrList)
+		metAttr <- metAttr[match(met_id(morg), metAttr$met_id), ]
+		metAttr <- metAttr[, setdiff(colnames(metAttr), "met_id"), drop=F]
+		met_attr(morg) <- metAttr
+	}
+	
+	
+	# built comp_attr frame:
+	if(all(sapply(reactList, function(x) nrow(comp_attr(x))==0))){
+		comp_attr(morg) <- data.frame()
+	}else{
+		compAttrList <- lapply(reactList, function(x){
+			df <- comp_attr(x)
+			df
+		})
+		compAttr <- Reduce(function(x, y) merge(x, y, by=intersect(colnames(x), colnames(y)), suffixes=c("", ""), all=TRUE), compAttrList)
+		compAttr <- compAttr[match(mod_compart(morg), compAttr$comp_id), ]
+		compAttr <- compAttr[, setdiff(colnames(compAttr), "comp_id"), drop=F]
+		comp_attr(morg) <- compAttr
+	}
+	
+	mod_attr(morg)   <- data.frame()
+	stopifnot(validObject(morg, "modelorg"))
+	return(morg)
+}
+
+
+
+
+
+
diff --git a/R/modelorgClass.R b/R/modelorgClass.R
index 5cd4063e5cd24ab01b9f406e35558bea526576d4..4f6bcf46cca68dffdae5fd47d81366924196d3b3 100644
--- a/R/modelorgClass.R
+++ b/R/modelorgClass.R
@@ -105,7 +105,7 @@ modelorg <- function(id, name, subSys = NULL, compartment = NULL) {
 #------------------------------------------------------------------------------#
 
 setMethod(f = "initialize",
-          signature = "modelorg",
+          signature("modelorg"),
           definition = function(.Object, id, name,
                                 subSys = NULL, compartment = NULL) {
 
@@ -147,7 +147,7 @@ setMethod("mod_id", signature(object = "modelorg"),
           }
 )
 
-setReplaceMethod("mod_id", signature = (object = "modelorg"),
+setReplaceMethod("mod_id", signature(object = "modelorg"),
                  function(object, value) {
                      object@mod_id <- value
                      return(object)
@@ -162,7 +162,7 @@ setMethod("mod_key", signature(object = "modelorg"),
           }
 )
 
-setReplaceMethod("mod_key", signature = (object = "modelorg"),
+setReplaceMethod("mod_key", signature(object = "modelorg"),
                  function(object, value) {
                      object@mod_key <- value
                      return(object)
@@ -177,7 +177,7 @@ setMethod("mod_name", signature(object = "modelorg"),
           }
 )
 
-setReplaceMethod("mod_name", signature = (object = "modelorg"),
+setReplaceMethod("mod_name", signature(object = "modelorg"),
                  function(object, value) {
                      object@mod_name <- value
                      return(object)
@@ -192,7 +192,7 @@ setMethod("mod_desc", signature(object = "modelorg"),
           }
 )
 
-setReplaceMethod("mod_desc", signature = (object = "modelorg"),
+setReplaceMethod("mod_desc", signature(object = "modelorg"),
                  function(object, value) {
                      object@mod_desc <- value
                      return(object)
@@ -965,7 +965,68 @@ setMethod("printMetabolite", signature(object = "modelorg"),
 
     }
 )
+#------------------------------------------------------------------------------#
 
+setMethod("getReaction", signature(X = "modelorg"),
+	function(X, j = NULL, drop=T, tol = SYBIL_SETTINGS("TOLERANCE")) {
+		# translate reaction id's to indices
+		cj <- checkReactId(X, react = j)
+		if (!is(cj, "reactId")) {
+			stop("check argument j")
+		}
+		else {
+			cn <- react_pos(cj)
+		}
+		rl <- lapply(cn, function(r){
+			s <- S(X)[,r]
+			
+			if(nrow(met_attr(X))>0){
+				ma <- met_attr(X)[abs(s) > tol, , drop=F]
+			}else{
+				ma <- data.frame()
+			}
+			if(nrow(react_attr(X))>0){
+				ra <- react_attr(X)[r, , drop=F]
+			}else{
+				ra <- data.frame()
+			}
+			if(nrow(comp_attr(X))>0){
+				comp <- unique(met_comp(X)[abs(s) > tol])
+				ca <- comp_attr(X)[comp, , drop=F]
+				ca$comp_id <- mod_compart(X)[comp]
+			}else{
+				ca <- data.frame()
+			}
+			
+			new("react",
+				id=react_id(X)[r],
+				name=react_name(X)[r],
+				rev=react_rev(X)[r],
+				met_id=met_id(X)[abs(s) > tol],
+				met_name=met_name(X)[abs(s) > tol],
+				met_comp=mod_compart(X)[met_comp(X)[abs(s) > tol]],
+				s=s[abs(s) > tol],
+				lowbnd=lowbnd(X)[r],
+				uppbnd=uppbnd(X)[r],
+				obj_coef=obj_coef(X)[r],
+				gprRule=gprRules(X)[r],
+				genes=genes(X)[[r]],
+				gpr = gpr(X)[r],
+				subSys = colnames(subSys(X))[subSys(X)[r,]],
+				met_attr = ma,
+				react_attr = ra,
+				comp_attr = ca
+			)
+		})
+		
+		if(length(rl) == 1 && drop){
+			return(rl[[1]])
+		}
+		
+		names(rl) <- react_id(X)[cn]
+		return(rl)
+	}
+)
 
 #------------------------------------------------------------------------------#
 
diff --git a/R/modelorg_irrevClass.R b/R/modelorg_irrevClass.R
index 9c1850bf56295974228f01cd2a9dc903b6e69852..673ffe6f3d29e722eeb3b22c278260846bb1d9d7 100644
--- a/R/modelorg_irrevClass.R
+++ b/R/modelorg_irrevClass.R
@@ -83,7 +83,7 @@ setMethod("irrev", signature(object = "modelorg_irrev"),
           }
 )
 
-setReplaceMethod("irrev", signature = (object = "modelorg_irrev"),
+setReplaceMethod("irrev", signature(object = "modelorg_irrev"),
                  function(object, value) {
                      object@irrev <- value
                      return(object)
@@ -98,7 +98,7 @@ setMethod("matchrev", signature(object = "modelorg_irrev"),
           }
 )
 
-setReplaceMethod("matchrev", signature = (object = "modelorg_irrev"),
+setReplaceMethod("matchrev", signature(object = "modelorg_irrev"),
                  function(object, value) {
                      object@matchrev <- value
                      return(object)
@@ -113,7 +113,7 @@ setMethod("rev2irrev", signature(object = "modelorg_irrev"),
          }
 )
 
-setReplaceMethod("rev2irrev", signature = (object = "modelorg_irrev"),
+setReplaceMethod("rev2irrev", signature(object = "modelorg_irrev"),
                 function(object, value) {
                     object@rev2irrev <- value
                     return(object)
@@ -128,7 +128,7 @@ setMethod("irrev2rev", signature(object = "modelorg_irrev"),
          }
 )
 
-setReplaceMethod("irrev2rev", signature = (object = "modelorg_irrev"),
+setReplaceMethod("irrev2rev", signature(object = "modelorg_irrev"),
                 function(object, value) {
                     object@irrev2rev<- value
                     return(object)
diff --git a/R/netFluxClass.R b/R/netFluxClass.R
index 624bf6cabdd3177cea41ad2e7d3568649856abb6..4f9d281d5e79c27af5311617adb452b8a92c9365 100644
--- a/R/netFluxClass.R
+++ b/R/netFluxClass.R
@@ -75,7 +75,7 @@ setMethod("react_id", signature(object = "netFlux"),
           }
 )
 
-setReplaceMethod("react_id", signature = (object = "netFlux"),
+setReplaceMethod("react_id", signature(object = "netFlux"),
                  function(object, value) {
                      object@react_id <- value
                      return(object)
diff --git a/R/optsolClass.R b/R/optsolClass.R
index 1311b7127d07ae6b558e00d0badea6d79c4c854c..bf550387a659023f4d1e601dbd5ad772ea0ac59e 100644
--- a/R/optsolClass.R
+++ b/R/optsolClass.R
@@ -78,7 +78,7 @@ setMethod("mod_id", signature(object = "optsol"),
           }
 )
 
-setReplaceMethod("mod_id", signature = (object = "optsol"),
+setReplaceMethod("mod_id", signature(object = "optsol"),
                  function(object, value) {
                      object@mod_id <- value
                      return(object)
@@ -93,7 +93,7 @@ setMethod("mod_key", signature(object = "optsol"),
           }
 )
 
-setReplaceMethod("mod_key", signature = (object = "optsol"),
+setReplaceMethod("mod_key", signature(object = "optsol"),
                  function(object, value) {
                      object@mod_key <- value
                      return(object)
@@ -108,7 +108,7 @@ setMethod("solver", signature(object = "optsol"),
           }
 )
 
-setReplaceMethod("solver", signature = (object = "optsol"),
+setReplaceMethod("solver", signature(object = "optsol"),
                  function(object, value) {
                      object@solver <- value
                      return(object)
@@ -123,7 +123,7 @@ setMethod("method", signature(object = "optsol"),
           }
 )
 
-setReplaceMethod("method", signature = (object = "optsol"),
+setReplaceMethod("method", signature(object = "optsol"),
                  function(object, value) {
                      object@method <- value
                      return(object)
@@ -138,7 +138,7 @@ setMethod("algorithm", signature(object = "optsol"),
           }
 )
 
-setReplaceMethod("algorithm", signature = (object = "optsol"),
+setReplaceMethod("algorithm", signature(object = "optsol"),
                  function(object, value) {
                      object@algorithm <- value
                      return(object)
@@ -153,7 +153,7 @@ setMethod("num_of_prob", signature(object = "optsol"),
           }
 )
 
-setReplaceMethod("num_of_prob", signature = (object = "optsol"),
+setReplaceMethod("num_of_prob", signature(object = "optsol"),
                  function(object, value) {
                      object@num_of_prob <- value
                      return(object)
@@ -168,7 +168,7 @@ setMethod("lp_num_cols", signature(object = "optsol"),
           }
 )
 
-setReplaceMethod("lp_num_cols", signature = (object = "optsol"),
+setReplaceMethod("lp_num_cols", signature(object = "optsol"),
                  function(object, value) {
                      object@lp_num_cols <- value
                      return(object)
@@ -183,7 +183,7 @@ setMethod("lp_num_rows", signature(object = "optsol"),
           }
 )
 
-setReplaceMethod("lp_num_rows", signature = (object = "optsol"),
+setReplaceMethod("lp_num_rows", signature(object = "optsol"),
                  function(object, value) {
                      object@lp_num_rows <- value
                      return(object)
@@ -240,7 +240,7 @@ setMethod("lp_obj", signature(object = "optsol"),
           }
 )
 
-setReplaceMethod("lp_obj", signature = (object = "optsol"),
+setReplaceMethod("lp_obj", signature(object = "optsol"),
                  function(object, value) {
                      object@lp_obj <- value
                      return(object)
@@ -255,7 +255,7 @@ setMethod("lp_ok", signature(object = "optsol"),
           }
 )
 
-setReplaceMethod("lp_ok", signature = (object = "optsol"),
+setReplaceMethod("lp_ok", signature(object = "optsol"),
                  function(object, value) {
                      object@lp_ok <- value
                      return(object)
@@ -270,7 +270,7 @@ setMethod("lp_stat", signature(object = "optsol"),
           }
 )
 
-setReplaceMethod("lp_stat", signature = (object = "optsol"),
+setReplaceMethod("lp_stat", signature(object = "optsol"),
                  function(object, value) {
                      object@lp_stat <- value
                      return(object)
@@ -315,7 +315,7 @@ setMethod("fldind", signature(object = "optsol"),
           }
 )
 
-setReplaceMethod("fldind", signature = (object = "optsol"),
+setReplaceMethod("fldind", signature(object = "optsol"),
                  function(object, value) {
                      object@fldind <- value
                      return(object)
@@ -330,7 +330,7 @@ setMethod("fluxdist", signature(object = "optsol"),
           }
 )
 
-setReplaceMethod("fluxdist", signature = (object = "optsol"),
+setReplaceMethod("fluxdist", signature(object = "optsol"),
                  function(object, value) {
                      object@fluxdist <- value
                      return(object)
@@ -345,7 +345,7 @@ setMethod("fluxes", signature(object = "optsol"),
           }
 )
 
-setReplaceMethod("fluxes", signature = (object = "optsol"),
+setReplaceMethod("fluxes", signature(object = "optsol"),
                  function(object, value) {
                      fluxes(object@fluxdist) <- value
                      return(object)
@@ -360,7 +360,7 @@ setMethod("alg_par", signature(object = "optsol"),
           }
 )
 
-setReplaceMethod("alg_par", signature = (object = "optsol"),
+setReplaceMethod("alg_par", signature(object = "optsol"),
                  function(object, value) {
                      object@alg_par <- value
                      return(object)
diff --git a/R/optsol_blockedReactClass.R b/R/optsol_blockedReactClass.R
index 37e6970abe2d71f21858c7666aea2209683c6046..e50af4a78659450e0b7e96c1769d50e5cb28b374 100644
--- a/R/optsol_blockedReactClass.R
+++ b/R/optsol_blockedReactClass.R
@@ -50,7 +50,7 @@ setMethod("blocked", signature(object = "optsol_blockedReact"),
           }
 )
 
-setReplaceMethod("blocked", signature = (object = "optsol_blockedReact"),
+setReplaceMethod("blocked", signature(object = "optsol_blockedReact"),
                  function(object, value) {
                      object@blocked <- value
                      return(object)
@@ -65,7 +65,7 @@ setMethod("react", signature(object = "optsol_blockedReact"),
           }
 )
 
-setReplaceMethod("react", signature = (object = "optsol_blockedReact"),
+setReplaceMethod("react", signature(object = "optsol_blockedReact"),
                  function(object, value) {
                      object@react <- value
                      return(object)
diff --git a/R/optsol_fluxVarClass.R b/R/optsol_fluxVarClass.R
index 5ad34c5814348395e36515d48da4e9473a0cb5c9..cc8399415b03c6e34eb5e7b2e46795ac500bd5b3 100644
--- a/R/optsol_fluxVarClass.R
+++ b/R/optsol_fluxVarClass.R
@@ -48,7 +48,7 @@ setMethod("react", signature(object = "optsol_fluxVar"),
           }
 )
 
-setReplaceMethod("react", signature = (object = "optsol_fluxVar"),
+setReplaceMethod("react", signature(object = "optsol_fluxVar"),
                  function(object, value) {
                      object@react <- value
                      return(object)
diff --git a/R/optsol_fluxdelClass.R b/R/optsol_fluxdelClass.R
index 1017db274df1fcc453c6dc1bc0fc4f8890dad984..e59efea8aa28661b093ed915fc275c3e2762a5e4 100644
--- a/R/optsol_fluxdelClass.R
+++ b/R/optsol_fluxdelClass.R
@@ -50,7 +50,7 @@ setMethod("chlb", signature(object = "optsol_fluxdel"),
           }
 )
 
-setReplaceMethod("chlb", signature = (object = "optsol_fluxdel"),
+setReplaceMethod("chlb", signature(object = "optsol_fluxdel"),
                  function(object, value) {
                      object@chlb <- value
                      return(object)
@@ -65,7 +65,7 @@ setMethod("chub", signature(object = "optsol_fluxdel"),
           }
 )
 
-setReplaceMethod("chub", signature = (object = "optsol_fluxdel"),
+setReplaceMethod("chub", signature(object = "optsol_fluxdel"),
                  function(object, value) {
                      object@chub <- value
                      return(object)
@@ -80,7 +80,7 @@ setMethod("dels", signature(object = "optsol_fluxdel"),
           }
 )
 
-setReplaceMethod("dels", signature = (object = "optsol_fluxdel"),
+setReplaceMethod("dels", signature(object = "optsol_fluxdel"),
                  function(object, value) {
                      object@dels <- value
                      return(object)
@@ -111,7 +111,7 @@ setMethod("lethal", signature(object = "optsol_fluxdel"),
 )
 
 
-#setMethod("ind2id", signature = (object = "optsol_fluxdel"),
+#setMethod("ind2id", signature(object = "optsol_fluxdel"),
 #                 function(object, slotN) {
 #                     out <- NULL
 #                     switch (slotN,
@@ -136,7 +136,7 @@ setMethod("lethal", signature(object = "optsol_fluxdel"),
 #)
 
 
-setMethod("deleted", signature = (object = "optsol_fluxdel"),
+setMethod("deleted", signature(object = "optsol_fluxdel"),
                  function(object, i) {
                      value <- dels(object)[i, ]
                      return(value)
diff --git a/R/optsol_genedelClass.R b/R/optsol_genedelClass.R
index d58f040bd1a54a271dce4f0573bcaa30f30db48d..eba63cc64d5737ee216120797f784818c5235f46 100644
--- a/R/optsol_genedelClass.R
+++ b/R/optsol_genedelClass.R
@@ -49,7 +49,7 @@ setMethod("fluxdels", signature(object = "optsol_genedel"),
           }
 )
 
-setReplaceMethod("fluxdels", signature = (object = "optsol_genedel"),
+setReplaceMethod("fluxdels", signature(object = "optsol_genedel"),
                  function(object, value) {
                      object@fluxdels <- value
                      return(object)
@@ -64,7 +64,7 @@ setMethod("hasEffect", signature(object = "optsol_genedel"),
           }
 )
 
-setReplaceMethod("hasEffect", signature = (object = "optsol_genedel"),
+setReplaceMethod("hasEffect", signature(object = "optsol_genedel"),
                  function(object, value) {
                      object@hasEffect <- value
                      return(object)
@@ -76,7 +76,7 @@ setReplaceMethod("hasEffect", signature = (object = "optsol_genedel"),
 #                               other methods                                  #
 #------------------------------------------------------------------------------#
 
-#setMethod("ind2id", signature = (object = "optsol_genedel"),
+#setMethod("ind2id", signature(object = "optsol_genedel"),
 #                 function(object, slotN) {
 #                     out <- NULL
 #                     switch (slotN,
@@ -107,7 +107,7 @@ setReplaceMethod("hasEffect", signature = (object = "optsol_genedel"),
 #)
 
 
-setMethod("deleted", signature = (object = "optsol_genedel"),
+setMethod("deleted", signature(object = "optsol_genedel"),
                  function(object, i) {
                      value <- fluxdels(object)[[i]]
                      return(value)
diff --git a/R/optsol_optimizeProbClass.R b/R/optsol_optimizeProbClass.R
index 3c45d48cab9220c839a5dbae593153fc0ccf9e01..ca7880b28e75f12bf5dc59662c59bd30566fd289 100644
--- a/R/optsol_optimizeProbClass.R
+++ b/R/optsol_optimizeProbClass.R
@@ -92,7 +92,7 @@ setMethod("preProc", signature(object = "optsol_optimizeProb"),
           }
 )
 
-setReplaceMethod("preProc", signature = (object = "optsol_optimizeProb"),
+setReplaceMethod("preProc", signature(object = "optsol_optimizeProb"),
                  function(object, value) {
                      object@preProc <- value
                      return(object)
@@ -107,7 +107,7 @@ setMethod("postProc", signature(object = "optsol_optimizeProb"),
           }
 )
 
-setReplaceMethod("postProc", signature = (object = "optsol_optimizeProb"),
+setReplaceMethod("postProc", signature(object = "optsol_optimizeProb"),
                  function(object, value) {
                      object@postProc <- value
                      return(object)
diff --git a/R/optsol_phppClass.R b/R/optsol_phppClass.R
index 9d788ff27d711534eb78f92107d77680613d5a76..e8a6ae4c25eaed6d84a1cfa91b8dab3781b327eb 100644
--- a/R/optsol_phppClass.R
+++ b/R/optsol_phppClass.R
@@ -50,7 +50,7 @@ setMethod("ctrlfl", signature(object = "optsol_phpp"),
           }
 )
 
-setReplaceMethod("ctrlfl", signature = (object = "optsol_phpp"),
+setReplaceMethod("ctrlfl", signature(object = "optsol_phpp"),
                  function(object, value) {
                      object@ctrlflm <- value
                      return(object)
diff --git a/R/optsol_robAnaClass.R b/R/optsol_robAnaClass.R
index 18ca6899a69ea4d2862ee6ccb6aafa2b28f63674..b1baf8c83c0fd301edbc12b699943cdc79f10634 100644
--- a/R/optsol_robAnaClass.R
+++ b/R/optsol_robAnaClass.R
@@ -49,7 +49,7 @@ setMethod("ctrlr", signature(object = "optsol_robAna"),
           }
 )
 
-setReplaceMethod("ctrlr", signature = (object = "optsol_robAna"),
+setReplaceMethod("ctrlr", signature(object = "optsol_robAna"),
                  function(object, value) {
                      object@ctrlr <- value
                      return(object)
@@ -64,7 +64,7 @@ setMethod("ctrlfl", signature(object = "optsol_robAna"),
           }
 )
 
-setReplaceMethod("ctrlfl", signature = (object = "optsol_robAna"),
+setReplaceMethod("ctrlfl", signature(object = "optsol_robAna"),
                  function(object, value) {
                      object@ctrlfl <- value
                      return(object)
diff --git a/R/ppProcClass.R b/R/ppProcClass.R
index a38a12228c8beb0fb9f0be83aefa803c101ceb65..b9282cbeb3b5bd3f7a0824ad5c0547e731a9cdb6 100644
--- a/R/ppProcClass.R
+++ b/R/ppProcClass.R
@@ -68,7 +68,7 @@ setMethod("cmd", signature(object = "ppProc"),
           }
 )
 
-setReplaceMethod("cmd", signature = (object = "ppProc"),
+setReplaceMethod("cmd", signature(object = "ppProc"),
                  function(object, value) {
                      object@cmd <- value
                      return(object)
@@ -83,7 +83,7 @@ setMethod("pa", signature(object = "ppProc"),
           }
 )
 
-setReplaceMethod("pa", signature = (object = "ppProc"),
+setReplaceMethod("pa", signature(object = "ppProc"),
                  function(object, value) {
                      object@pa <- value
                      return(object)
@@ -98,7 +98,7 @@ setMethod("ind", signature(object = "ppProc"),
           }
 )
 
-setReplaceMethod("ind", signature = (object = "ppProc"),
+setReplaceMethod("ind", signature(object = "ppProc"),
                  function(object, value) {
                      object@ind <- value
                      return(object)
diff --git a/R/reactClass.R b/R/reactClass.R
new file mode 100644
index 0000000000000000000000000000000000000000..029bf1a85c45af831ff15eb9384169be999280ad
--- /dev/null
+++ b/R/reactClass.R
@@ -0,0 +1,489 @@
+#  reactClass.R
+#  FBA and friends with R.
+#
+#  Copyright (C) 2010-2017 Claus Jonathan Fritzemeier, Dpt. for Computational Cell Biology,
+#  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/>.
+
+
+# reactClass
+
+
+#------------------------------------------------------------------------------#
+#					   definition of the class react						#
+#------------------------------------------------------------------------------#
+
+setClass("react",
+	representation(
+		 react_rev	  = "logical",	   # vector reversibilities
+		 react_id	  = "character",   # reaction id
+		 react_name	  = "character",   # reaction name
+		 react_single = "logical",	   # reaction using metabolites appearing only once in S
+		 react_de	  = "logical",	   # reaction using dead end metabolites
+		 react_attr	  = "data.frame",  # reaction attributes
+		 met_id		  = "character",   # metabolites used in this reaction
+		 met_comp	  = "character",   # compartments of metabolites
+		 met_name	  = "character",   # metabolite names
+		 met_attr	  = "data.frame",  # metabolite attributes
+		 comp_attr	  = "data.frame",  # compartment attributes
+		 s			  = "numeric",	   # matrix S
+		 lowbnd		  = "numeric",	   # reaction lower bound
+		 uppbnd		  = "numeric",	   # reaction upper bound
+		 obj_coef	  = "numeric",	   # objective coefficient
+		 gprRule	  = "character",
+		 genes		  = "character",
+		 gpr		  = "character",
+		 subSys		  = "character"
+
+	),
+	validity = .validreact
+)
+
+
+#------------------------------------------------------------------------------#
+#							 default constructor							   #
+#------------------------------------------------------------------------------#
+
+setMethod(f = "initialize",
+			signature = "react",
+			definition = function(.Object, 
+								id,
+								name="",
+								rev=TRUE,
+								single=NA,
+								de=NA,
+								met_id,
+								met_name=NULL,
+								met_comp=NULL,
+								s,
+								lowbnd=-1000,
+								uppbnd=1000,
+								obj_coef=0,
+								gprRule="",
+								genes="",
+								gpr = "",
+								subSys = "",
+								met_attr = data.frame(),
+								react_attr = data.frame(),
+								comp_attr = data.frame()
+								) {
+			stopifnot(!missing(id))
+			stopifnot(!missing(met_id))
+			stopifnot(!missing(s))
+			
+			.Object@react_id <- id
+			.Object@react_name <- name
+			.Object@react_rev <- rev
+			.Object@react_single <- single
+			.Object@react_de <- de
+			.Object@met_id <- met_id
+			.Object@met_comp <- met_comp
+			.Object@met_name <- met_name
+			.Object@s <- s
+			.Object@lowbnd <- lowbnd
+			.Object@uppbnd <- uppbnd
+			.Object@obj_coef <- obj_coef
+			.Object@gprRule <- gprRule
+			.Object@genes <- genes
+			.Object@gpr <- gpr
+			.Object@subSys <- subSys
+			
+			.Object@met_attr <- met_attr
+			.Object@react_attr <- react_attr
+			.Object@comp_attr <- comp_attr
+			return(.Object)
+		  }
+)
+
+
+#------------------------------------------------------------------------------#
+#							 setters and getters							   #
+#------------------------------------------------------------------------------#
+
+# metabolite id's
+setMethod("met_id", signature(object = "react"),
+		  function(object) {
+			  return(object@met_id)
+		  }
+)
+
+setReplaceMethod("met_id", signature(object = "react"),
+		  function(object, value) {
+			  object@met_id <- value
+			  return(object)
+		  }
+)
+
+
+# metabolite names
+setMethod("met_name", signature(object = "react"),
+		  function(object) {
+			  return(object@met_name)
+		  }
+)
+
+setReplaceMethod("met_name", signature(object = "react"),
+		  function(object, value) {
+			  object@met_name <- value
+			  return(object)
+		  }
+)
+
+
+# metabolites compartments
+setMethod("met_comp", signature(object = "react"),
+		  function(object) {
+			  return(object@met_comp)
+		  }
+)
+
+setReplaceMethod("met_comp", signature(object = "react"),
+		  function(object, value) {
+			  object@met_comp <- value
+			  return(object)
+		  }
+)
+
+
+# reversibilities
+setMethod("react_rev", signature(object = "react"),
+		  function(object) {
+			  return(object@react_rev)
+		  }
+)
+
+setReplaceMethod("react_rev", signature(object = "react"),
+		  function(object, value) {
+			  object@react_rev <- value
+			  return(object)
+		  }
+)
+
+
+# reaction id's
+setMethod("react_id", signature(object = "react"),
+		  function(object) {
+			  return(object@react_id)
+		  }
+)
+
+setReplaceMethod("react_id", signature(object = "react"),
+		  function(object, value) {
+			  object@react_id <- value
+			  return(object)
+		  }
+)
+
+
+# reaction names
+setMethod("react_name", signature(object = "react"),
+		  function(object) {
+			  return(object@react_name)
+		  }
+)
+
+setReplaceMethod("react_name", signature(object = "react"),
+		  function(object, value) {
+			  object@react_name <- value
+			  return(object)
+		  }
+)
+
+
+# singletons
+setMethod("react_single", signature(object = "react"),
+		  function(object) {
+			  return(object@react_single)
+		  }
+)
+
+setReplaceMethod("react_single", signature(object = "react"),
+		  function(object, value) {
+			  object@react_single <- value
+			  return(object)
+		  }
+)
+
+
+# dead ends
+setMethod("react_de", signature(object = "react"),
+		  function(object) {
+			  return(object@react_de)
+		  }
+)
+
+setReplaceMethod("react_de", signature(object = "react"),
+		  function(object, value) {
+			  object@react_de <- value
+			  return(object)
+		  }
+)
+
+
+# stoichiometric matrix
+setMethod("s", signature(object = "react"),
+		  function(object) {
+			  return(object@s)
+		  }
+)
+
+setReplaceMethod("s", signature(object = "react"),
+		  function(object, value) {
+			  object@s <- value
+			  return(object)
+		  }
+)
+
+# lower bounds
+setMethod("lowbnd", signature(object = "react"),
+		  function(object) {
+			  return(object@lowbnd)
+		  }
+)
+
+setReplaceMethod("lowbnd", signature(object = "react"),
+		  function(object, value) {
+			  object@lowbnd <- value
+			  return(object)
+		  }
+)
+
+# upper bounds
+setMethod("uppbnd", signature(object = "react"),
+		  function(object) {
+			  return(object@uppbnd)
+		  }
+)
+
+setReplaceMethod("uppbnd", signature(object = "react"),
+		  function(object, value) {
+			  object@uppbnd <- value
+			  return(object)
+		  }
+)
+
+
+# objective coefficient
+setMethod("obj_coef", signature(object = "react"),
+		  function(object) {
+			  return(object@obj_coef)
+		  }
+)
+
+setReplaceMethod("obj_coef", signature(object = "react"),
+		  function(object, value) {
+			  object@obj_coef <- value
+			  return(object)
+		  }
+)
+
+
+# gprRules
+setMethod("gprRule", signature(object = "react"),
+		  function(object) {
+			  return(object@gprRule)
+		  }
+)
+
+setReplaceMethod("gprRule", signature(object = "react"),
+		  function(object, value) {
+			  object@gprRule <- value
+			  return(object)
+		  }
+)
+
+
+# genes
+setMethod("genes", signature(object = "react"),
+		  function(object) {
+			  return(object@genes)
+		  }
+)
+
+setReplaceMethod("genes", signature(object = "react"),
+		  function(object, value) {
+			  object@genes <- value
+			  return(object)
+		  }
+)
+
+
+# gpr associations
+setMethod("gpr", signature(object = "react"),
+		  function(object) {
+			  return(object@gpr)
+		  }
+)
+
+setReplaceMethod("gpr", signature(object = "react"),
+		  function(object, value) {
+			  object@gpr <- value
+			  return(object)
+		  }
+)
+
+
+# reaction sub systems
+setMethod("subSys", signature(object = "react"),
+		  function(object) {
+			  return(object@subSys)
+		  }
+)
+
+setReplaceMethod("subSys", signature(object = "react"),
+		  function(object, value) {
+			  object@subSys <- value
+			  return(object)
+		  }
+)
+
+
+# metabolites attributes
+setMethod("met_attr", signature(object = "react"),
+          function(object) {
+              return(object@met_attr)
+          }
+)
+
+setReplaceMethod("met_attr", signature(object = "react"),
+          function(object, value) {
+              object@met_attr <- value
+              return(object)
+          }
+)
+
+# reaction attributes
+setMethod("react_attr", signature(object = "react"),
+          function(object) {
+              return(object@react_attr)
+          }
+)
+
+setReplaceMethod("react_attr", signature(object = "react"),
+          function(object, value) {
+              object@react_attr <- value
+              return(object)
+          }
+)
+
+# compartment attributes
+setMethod("comp_attr", signature(object = "react"),
+          function(object) {
+              return(object@comp_attr)
+          }
+)
+
+setReplaceMethod("comp_attr", signature(object = "react"),
+          function(object, value) {
+              object@comp_attr <- value
+              return(object)
+          }
+)
+
+# model attributes
+setMethod("mod_attr", signature(object = "react"),
+          function(object) {
+              return(object@mod_attr)
+          }
+)
+
+setReplaceMethod("mod_attr", signature(object = "react"),
+          function(object, value) {
+              object@mod_attr <- value
+              return(object)
+          }
+)
+
+
+
+#------------------------------------------------------------------------------#
+#								other methods								   #
+#------------------------------------------------------------------------------#
+
+setMethod("show", signature(object = "react"),
+	function(object) {
+		cat("react id:              ", react_id(object), "\n")
+		cat("react name:            ", react_name(object), "\n")
+		cat("stoichiometry:\n")
+		print(data.frame(met_id=met_id(object), s_coef=s(object)))
+		cat("lower bound:           ", lowbnd(object), "\n")
+		cat("upper bound:           ", uppbnd(object), "\n")
+		cat("objective function:    ", obj_coef(object), "\n")
+	}
+)
+
+
+#------------------------------------------------------------------------------#
+
+# print reactions
+setMethod("printReaction", signature(object = "react"),
+	function(object, printOut = TRUE, ...) {
+	
+		mat <- s(object)
+		reaction <- character(1)
+
+		for (j in seq(along = cind)) {
+		
+			met <- met_id(object)
+			nzv <- mat
+			
+			ed <- nzv < 0
+			pd <- nzv > 0
+
+			if (sum(ed) > 0) {
+				educt	<- paste(paste("(", abs(nzv[ed]), ")", sep = ""),
+								 met[ed], collapse = " + ")
+			}
+			else {
+				educt = ""
+			}
+
+			if (sum(pd) > 0) {
+				product <- paste(paste("(", nzv[pd], ")", sep = ""),
+								 met[pd], collapse = " + ")
+			}
+			else {
+				product = ""
+			}
+			
+			arrow	<- ifelse(react_rev(object)[cind[j]], " <==> ", " --> ")
+			
+			reaction[j] <- paste(react_id(check)[j],
+								 paste(educt, product, sep = arrow), sep = "\t")
+		}
+
+		if (isTRUE(printOut)) {
+		   cat("abbreviation\tequation", reaction, sep = "\n", ...)
+		}
+		
+		return(invisible(reaction))
+
+	}
+)
+
+
+
+
+
+
+
+
+
+
+
diff --git a/R/reactIdClass.R b/R/reactIdClass.R
index ca6b6d5783a80a4b80988c941ffd1ce14d30dbd1..eadcfe4f423000e65743150f3c841d6d92a952ef 100644
--- a/R/reactIdClass.R
+++ b/R/reactIdClass.R
@@ -77,7 +77,7 @@ setMethod("mod_id", signature(object = "reactId"),
           }
 )
 
-setReplaceMethod("mod_id", signature = (object = "reactId"),
+setReplaceMethod("mod_id", signature(object = "reactId"),
                  function(object, value) {
                      object@mod_id <- value
                      return(object)
@@ -92,7 +92,7 @@ setMethod("mod_key", signature(object = "reactId"),
           }
 )
 
-setReplaceMethod("mod_key", signature = (object = "reactId"),
+setReplaceMethod("mod_key", signature(object = "reactId"),
                  function(object, value) {
                      object@mod_key <- value
                      return(object)
@@ -107,7 +107,7 @@ setMethod("react_pos", signature(object = "reactId"),
           }
 )
 
-setReplaceMethod("react_pos", signature = (object = "reactId"),
+setReplaceMethod("react_pos", signature(object = "reactId"),
                  function(object, value) {
                      object@react_pos <- value
                      return(object)
@@ -122,7 +122,7 @@ setMethod("react_id", signature(object = "reactId"),
           }
 )
 
-setReplaceMethod("react_id", signature = (object = "reactId"),
+setReplaceMethod("react_id", signature(object = "reactId"),
                  function(object, value) {
                      object@react_id <- value
                      return(object)
diff --git a/R/reactId_ExchClass.R b/R/reactId_ExchClass.R
index a09be51c779fa9ecddc50d599593ee6e3d0d2156..cb7669cafed8a54b8c1503b9d4bf6c4af9fc8d51 100644
--- a/R/reactId_ExchClass.R
+++ b/R/reactId_ExchClass.R
@@ -92,7 +92,7 @@ setMethod("met_pos", signature(object = "reactId_Exch"),
           }
 )
 
-setReplaceMethod("met_pos", signature = (object = "reactId_Exch"),
+setReplaceMethod("met_pos", signature(object = "reactId_Exch"),
                  function(object, value) {
                      object@met_pos <- value
                      return(object)
@@ -107,7 +107,7 @@ setMethod("met_id", signature(object = "reactId_Exch"),
           }
 )
 
-setReplaceMethod("met_id", signature = (object = "reactId_Exch"),
+setReplaceMethod("met_id", signature(object = "reactId_Exch"),
                  function(object, value) {
                      object@met_id <- value
                      return(object)
@@ -122,7 +122,7 @@ setMethod("lowbnd", signature(object = "reactId_Exch"),
           }
 )
 
-setReplaceMethod("lowbnd", signature = (object = "reactId_Exch"),
+setReplaceMethod("lowbnd", signature(object = "reactId_Exch"),
                  function(object, value) {
                      object@lowbnd <- value
                      return(object)
@@ -137,7 +137,7 @@ setMethod("uppbnd", signature(object = "reactId_Exch"),
           }
 )
 
-setReplaceMethod("uppbnd", signature = (object = "reactId_Exch"),
+setReplaceMethod("uppbnd", signature(object = "reactId_Exch"),
                  function(object, value) {
                      object@uppbnd <- value
                      return(object)
@@ -152,7 +152,7 @@ setMethod("uptake", signature(object = "reactId_Exch"),
           }
 )
 
-setReplaceMethod("uptake", signature = (object = "reactId_Exch"),
+setReplaceMethod("uptake", signature(object = "reactId_Exch"),
                  function(object, value) {
                      object@uptake <- value
                      return(object)
diff --git a/R/summaryOptsolClass.R b/R/summaryOptsolClass.R
index ef779e9a1c0eb936b2ca2a55013ddc699e05ca37..66d61113d03af391fcc3201bb0116c27a33b9ade 100644
--- a/R/summaryOptsolClass.R
+++ b/R/summaryOptsolClass.R
@@ -108,7 +108,7 @@ setMethod("mod_id", signature(object = "summaryOptsol"),
           }
 )
 
-setReplaceMethod("mod_id", signature = (object = "summaryOptsol"),
+setReplaceMethod("mod_id", signature(object = "summaryOptsol"),
                  function(object, value) {
                      object@mod_id <- value
                      return(object)
@@ -123,7 +123,7 @@ setMethod("mod_key", signature(object = "summaryOptsol"),
           }
 )
 
-setReplaceMethod("mod_key", signature = (object = "summaryOptsol"),
+setReplaceMethod("mod_key", signature(object = "summaryOptsol"),
                  function(object, value) {
                      object@mod_key <- value
                      return(object)
@@ -138,7 +138,7 @@ setMethod("mod_obj", signature(object = "summaryOptsol"),
           }
 )
 
-setReplaceMethod("mod_obj", signature = (object = "summaryOptsol"),
+setReplaceMethod("mod_obj", signature(object = "summaryOptsol"),
                  function(object, value) {
                      object@mod_obj <- value
                      return(object)
diff --git a/R/sysBiolAlgClass.R b/R/sysBiolAlgClass.R
index 44a6b565456a4f54fb49138c45262d798c00f55e..882ad7897a3fb07a41cba6e83ee1760ae560770a 100644
--- a/R/sysBiolAlgClass.R
+++ b/R/sysBiolAlgClass.R
@@ -186,7 +186,7 @@ setMethod("algorithm", signature(object = "sysBiolAlg"),
           }
 )
 
-setReplaceMethod("algorithm", signature = (object = "sysBiolAlg"),
+setReplaceMethod("algorithm", signature(object = "sysBiolAlg"),
                  function(object, value) {
                      object@algorithm <- value
                      return(object)
@@ -201,7 +201,7 @@ setMethod("nr", signature(object = "sysBiolAlg"),
           }
 )
 
-setReplaceMethod("nr", signature = (object = "sysBiolAlg"),
+setReplaceMethod("nr", signature(object = "sysBiolAlg"),
                  function(object, value) {
                      object@nr <- value
                      return(object)
@@ -216,7 +216,7 @@ setMethod("nc", signature(object = "sysBiolAlg"),
           }
 )
 
-setReplaceMethod("nc", signature = (object = "sysBiolAlg"),
+setReplaceMethod("nc", signature(object = "sysBiolAlg"),
                  function(object, value) {
                      object@nc <- value
                      return(object)
@@ -231,7 +231,7 @@ setMethod("fldind", signature(object = "sysBiolAlg"),
           }
 )
 
-setReplaceMethod("fldind", signature = (object = "sysBiolAlg"),
+setReplaceMethod("fldind", signature(object = "sysBiolAlg"),
                  function(object, value) {
                      object@fldind <- value
                      return(object)
@@ -246,7 +246,7 @@ setMethod("alg_par", signature(object = "sysBiolAlg"),
           }
 )
 
-setReplaceMethod("alg_par", signature = (object = "sysBiolAlg"),
+setReplaceMethod("alg_par", signature(object = "sysBiolAlg"),
                  function(object, value) {
                      object@alg_par <- value
                      return(object)
diff --git a/R/validreact.R b/R/validreact.R
new file mode 100644
index 0000000000000000000000000000000000000000..0036dd2923c5e198c89c3f2053862ee09d1a6752
--- /dev/null
+++ b/R/validreact.R
@@ -0,0 +1,112 @@
+#  validreact.R
+#  FBA and friends with R.
+#
+#  Copyright (C) 2010-2017 Claus Jonathan Fritzemeier, Dpt. for Computational Cell Biology,
+#  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/>.
+
+
+# validreact
+
+
+################################################
+# Function: .validreact
+#
+# Validity checking of an object of class react.
+#
+# Returns TRUE if the model is valid, otherwise
+# a character String containing a description of
+# the error.
+
+
+.validreact <- function(object) {
+	# data has to have the same length or to be NULL
+	if(!is(object, "react")){
+		"object is not of react class"
+	}
+	
+	if(length(object@id) != 1){
+		return("id has to be length 1")
+	}
+	if(length(object@name) != 1){
+		return("id has to be length 1")
+	}
+	
+	met_count <- length(object@s)
+	if(met_comp < 1){
+		return("reactions have to have at least one metabolite")
+	}
+	if(length(object@met_id) == met_count){
+		return("s, met_id, met_name, and met_comp have to have the same length")
+	}
+	if(length(object@met_name) == met_count && !is.null(object@met_name)){
+		return("s, met_id, met_name, and met_comp have to have the same length")
+	}
+	if(length(object@met_comp) == met_count && !is.null(object@met_comp)){
+		return("s, met_id, met_name, and met_comp have to have the same length")
+	}
+	
+	if(length(object@id)!=1){
+		return("length of id has to be 1")
+	}
+	if(length(object@rev)!=1){
+		return("length of rev has to be 1")
+	}
+	if(length(object@name)!=1){
+		return("length of name has to be 1")
+	}
+	if(length(object@lowbnd)!=1){
+		return("length of lowbnd has to be 1")
+	}
+	if(length(object@uppbnd)!=1){
+		return("length of uppbnd has to be 1")
+	}
+	if(length(object@obj_coef)!=1){
+		return("length of obj_coef has to be 1")
+	}
+	
+	if(!is.null(gprRule) && length(object@gprRule)!=1){
+		return("if not NULL, the length of gprRule has to be 1")
+	}
+	if(!is.null(genes) && length(object@genes)!=1){
+		return("if not NULL, the length of genes has to be 1")
+	}
+	if(!is.null(gpr) && length(object@gpr)!=1){
+		return("if not NULL, the length of gpr has to be 1")
+	}
+	if(!is.null(subSys) && length(object@subSys)!=1){
+		return("if not NULL, the length of subSys has to be 1")
+	}
+	
+	return(TRUE)
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/inst/NEWS.Rd b/inst/NEWS.Rd
index ad994a13064b08be28cccc42414a6bea5794904b..a841bbcceea70a93215c48610080d7a5e0496487 100644
--- a/inst/NEWS.Rd
+++ b/inst/NEWS.Rd
@@ -6,7 +6,18 @@
 
 \newcommand{\CRANpkg}{\href{http://CRAN.R-project.org/package=#1}{\pkg{#1}}}
 
-\section{Changes in version 2.0.3 2017-07-12}{
+\section{Changes in version 2.1.0 2017-07-17}{
+  \itemize{
+  	\item \code{addReact} is now a method of the \code{modelorg} class.
+  	\item Preparation for \code{sybilNLO}.
+  	\item New reaction object for easy merging and splitting of models. See \code{reactClass}.
+  	\item Typo in setting methods generated an character vector \code{object}.
+  	\
+  }
+}
+% ---------------------------------------------------------------------------- %
+
+\section{Changes in version 2.0.3 2017-04-20}{
   \itemize{
   	\item The function \code{genrateWT} caused a problem when setting only \code{solverParm} and no solver.
   	\item \code{rmReact} handles now \code{react_attr} and \code{met_attr} corretly, if there is just one column.