diff --git a/R/bio/cummerutils.R b/R/bio/diffex_commons.R
similarity index 67%
rename from R/bio/cummerutils.R
rename to R/bio/diffex_commons.R
index 32dbfa2bd9a5eb2e19242cbbca0ebf16f82bec0a..210566f6430899ee32896f28604626e1dd8ad0d8 100644
--- a/R/bio/cummerutils.R
+++ b/R/bio/diffex_commons.R
@@ -1,9 +1,8 @@
 
 #require(cummeRbund)
 
-
 getExpressedGenes <- function(cuff, ...){
-    fpkmMat<-repFpkmMatrix(genes(cuff))
+    fpkmMat<-cummeRbund::repFpkmMatrix(genes(cuff))
 
     rownames(filterByExpression(fpkmMat, ...))
 }
@@ -20,6 +19,7 @@ filterByExpression <- function(fpkmMat, minFPKM=1, logMode=F){
 
 guess_mart <- function(gene_id){
     an_id <-gene_id[1]
+
     if(str_detect(an_id, "ENSCAFG")){
         return("cfamiliaris_gene_ensembl")
     }else if(str_detect(an_id, "ENSMUSG")){
@@ -32,6 +32,7 @@ guess_mart <- function(gene_id){
 }
 #guess_mart("ENSCAFG00000000043")
 
+
 getGeneInfo <- function(gene_ids){
     martName <- guess_mart(gene_ids[1])
 
@@ -93,6 +94,10 @@ s1_eq_s2 <- function(s1, s2, gene_background=all_genes, ...){
 ## varargs: http://stackoverflow.com/questions/3057341/how-to-use-rs-ellipsis-feature-when-writing-your-own-function
 rintersect <- function(...){
     LDF <- list(...)
+    rintersect.list(LDF)
+}
+
+rintersect.list <- function(LDF){
     rec_intersect <- LDF[[1]]
     for (i in 2:length(LDF)) {
         rec_intersect <- intersect(rec_intersect, LDF[[i]])
@@ -101,3 +106,43 @@ rintersect <- function(...){
 }
 
 
+########################################################################################################################
+### enrichment analysis
+
+
+## http://www.bioconductor.org/packages/release/bioc/vignettes/RDAVIDWebService/inst/doc/RDavidWS-vignette.pdf
+## e.g. getClusterReport --> plot2D
+
+DEF_DAVID_ONTOLOGIES=ontologies=c("GOTERM_CC_FAT", "GOTERM_MF_FAT", "GOTERM_BP_FAT", "PANTHER_PATHWAY", "REACTOME_PATHWAY", "KEGG_PATHWAY", "GOTERM_CC_FAT", "GOTERM_MF_FAT", "GOTERM_BP_FAT")
+
+davidAnnotationChart <- function( someGenes, ontologies=DEF_DAVID_ONTOLOGIES ){
+
+    require(RDAVIDWebService) ## just works if installed on non-network-drive (e.g. /tmp/)
+
+    ## expexted to have a column with gene_id
+#    echo("processing list with", length(someGenes), "genes")
+#    someGenes <- degs$ensembl_gene_id
+
+
+    if(length(someGenes)>1500){
+        someGenes <- sample(someGenes) %>% head(1500)
+    }
+
+    david<-DAVIDWebService$new(email="brandl@mpi-cbg.de")
+
+#    getTimeOut(david)
+    setTimeOut(david, 80000) ## http://www.bioconductor.org/packages/release/bioc/vignettes/RDAVIDWebService/inst/doc/RDavidWS-vignette.pdf
+
+    result<-addList(david, someGenes, idType="ENSEMBL_GENE_ID", listName=paste0("list_", sample(10000)[1]), listType="Gene")
+
+    david %>% setAnnotationCategories(ontologies)
+
+    annoChart <-getFunctionalAnnotationChart(david)
+
+#    clusterReport <-getClusterReport(david)
+
+    unloadNamespace('RDAVIDWebService')
+
+    return(annoChart %>% subset(select=-Genes))
+}
+