diff --git a/README.md b/README.md
index 0f62079b354e65626eb906c822c551f75485334f..319f19e0393cbaca858aec3bd1ff65ff9a395088 100644
--- a/README.md
+++ b/README.md
@@ -76,4 +76,4 @@ MOOSE can also read .swc files from NeuroMorpho.org.
 
 # Documentation
 
-Complete MOOSE Documentation can be found at -  http://moose.ncbs.res.in/content/view/5/6/
+Complete MOOSE Documentation can be found at -  https://moose.ncbs.res.in/?q=documentation
diff --git a/docs/introduction/install/index.rst b/docs/introduction/install/index.rst
index 430ed780435930d8f739a55f4423a333355313fe..b53e792779a74b1f71b337ca51613e01d7a90a10 100644
--- a/docs/introduction/install/index.rst
+++ b/docs/introduction/install/index.rst
@@ -78,21 +78,9 @@ Next, you need to install required dependencies.
 - cmake (version 2.8 or higher)
 - gsl-1.16 or higher `download <ftp://ftp.gnu.org/gnu/gsl/>`_.
 - libhdf5 development package.
-- libsbml (5.9.0, optional).  `download <https://sourceforge.net/projects/sbml/files/libsbml/5.9.0/stable/>`_
 - python development package
 - numpy 
 
-.. note:: 
-    `libsml` needs to be compiled with ``zlib`` and ``lxml`` (requires ``libxml2-dev`` or ``libxml2-devel``` 
-    package) support without which, you might face link time errors. Following instructions are known to 
-    work:: 
-        $ wget http://sourceforge.net/projects/sbml/files/libsbml/5.9.0/stable/libSBML-5.9.0-core-src.tar.gz
-        $ tar -xzvf libSBML-5.9.0-core-src.tar.gz 
-        $ cd libsbml-5.9.0 
-        $ ./configure --with-zlib --with-libxml 
-        $ make 
-        $ sudo make install 
-
 Most of the dependencies can be installed using package manager.
 
 On ``Debian/Ubuntu`` 
@@ -175,7 +163,7 @@ Now you can fire up the GUI
 .. note:: 
     If you have installed ``moose`` using the package, then GUI is launched by
     running following commnad::
-        $ moosegui
+        $ moose
 
 Building moogli 
 ---------------
diff --git a/moose-core/CMakeLists.txt b/moose-core/CMakeLists.txt
index d9233825d0eeb7e1251db30af60756e003c7a624..1948958bec32f8bb981ed91d9c751e45252ba473 100644
--- a/moose-core/CMakeLists.txt
+++ b/moose-core/CMakeLists.txt
@@ -159,6 +159,8 @@ set_target_properties(libmoose PROPERTIES PREFIX "")
 
 ## Variable to collect all static libraries.
 set(STATIC_LIBRARIES "" )
+# Collect all shared libraries here.
+set(SYSTEM_SHARED_LIBS ${LibXML2_LIBRARIES})
 
 if(WITH_GSL)
     find_package(GSL 1.16)
@@ -218,12 +220,16 @@ endif(NOT HDF5_FOUND)
 if(HDF5_FOUND)
     add_definitions( -DUSE_HDF5 )
     include_directories( ${HDF5_INCLUDE_DIRS} )
-    foreach(HDF5_LIB ${HDF5_LIBRARIES})
-        get_filename_component( HDF5_LIB_EXT ${HDF5_LIB} EXT )
-        if( ${HDF5_LIB_EXT} STREQUAL ".a" )
-            list(APPEND STATIC_LIBRARIES ${HDF5_LIB} )
-        else( )
-            list(APPEND SYSTEM_SHARED_LIBS ${HDF5_LIB} )
+    foreach(HDF5_LIB ${HDF5_LIBRARIES} )
+        if(HDF5_LIB)
+            get_filename_component( HDF5_LIB_EXT ${HDF5_LIB} EXT )
+            if(HDF5_LIB_EXT)
+                if(${HDF5_LIB_EXT} STREQUAL ".a")
+                    list(APPEND STATIC_LIBRARIES ${HDF5_LIB} )
+                else( )
+                    list(APPEND SYSTEM_SHARED_LIBS ${HDF5_LIB} )
+                endif( )
+            endif()
         endif( )
     endforeach( )
 endif( HDF5_FOUND )
@@ -258,27 +264,26 @@ if(WITH_MPI)
     endif()
 endif(WITH_MPI)
 
-# These are always shared libraries.
-set(SYSTEM_SHARED_LIBS ${LibXML2_LIBRARIES})
 if(WITH_BOOST)
     list(APPEND SYSTEM_SHARED_LIBS ${LAPACK_LIBRARIES})
     list(APPEND SYSTEM_SHARED_LIBS ${Boost_LIBRARIES})
 endif(WITH_BOOST)
 
-# These libraries could be static of dynamic.
-# When building packages on OBS or launchpad, we build static library of a
-# dependencies if a correct version is not found. 
-# Here we make sure that the correct static version is linked; if a correct
-# shared version is found then link the shared version in SYSTEM_SHARED_LIBS.
+# These libraries could be static of dynamic. We need to discrimate between
+# these two types because of --whole-archive option. See
+# BhallaLab/moose-core#66,
 if(WITH_GSL)
     message(STATUS "Using STATIC gsl libraries: ${GSL_LIBRARIES}")
-
     foreach(GSL_LIB ${GSL_LIBRARIES} )
-        get_filename_component( GSL_LIB_EXT ${GSL_LIB} EXT )
-        if( GSL_LIB_EXT STREQUAL ".a" )
-            list(APPEND STATIC_LIBRARIES ${GSL_LIB})
-        else()
-            list(APPEND SYSTEM_SHARED_LIBS ${GSL_LIB})
+        if(GSL_LIB)
+            get_filename_component( GSL_LIB_EXT ${GSL_LIB} EXT )
+            if(GSL_LIB_EXT)
+                if(GSL_LIB_EXT STREQUAL ".a" )
+                    list(APPEND STATIC_LIBRARIES ${GSL_LIB})
+                else()
+                    list(APPEND SYSTEM_SHARED_LIBS ${GSL_LIB})
+                endif( )
+            endif( )
         endif( )
     endforeach( )
 endif()
@@ -343,6 +348,11 @@ list(APPEND MOOSE_LIBRARIES
     basecode
     )
 
+# Make sure to remove duplicates.
+list(REMOVE_DUPLICATES STATIC_LIBRARIES)
+if(SYSTEM_SHARED_LIBS)
+    list(REMOVE_DUPLICATES SYSTEM_SHARED_LIBS)
+endif( )
 
 # MAC linker does not understand many of gnu-ld options.
 message( STATUS "Shared libs: ${SYSTEM_SHARED_LIBS}")
diff --git a/moose-core/VERSION b/moose-core/VERSION
index 4225763f8cf3bc6309bd0d3fed4f68dde69ac351..50e47c89cafc3ec95774b3110a3dba45256d0b24 100644
--- a/moose-core/VERSION
+++ b/moose-core/VERSION
@@ -1 +1 @@
-3.1.1-40-g8fe5068
\ No newline at end of file
+3.1.1
\ No newline at end of file
diff --git a/moose-core/cmake_modules/FindGSL.cmake b/moose-core/cmake_modules/FindGSL.cmake
index b33139af67aafb535cbcedd1b24452e85ea6be73..93c2686f78e6fbbdde540e86241d0995934c8813 100644
--- a/moose-core/cmake_modules/FindGSL.cmake
+++ b/moose-core/cmake_modules/FindGSL.cmake
@@ -1,146 +1,107 @@
-## 
-## Try to find gnu scientific library GSL  
-## (see http://www.gnu.org/software/gsl/)
-## Once run this will define: 
-## 
-## GSL_FOUND       = system has GSL lib
-##
-## GSL_LIBRARIES   = full path to the libraries
-##    on Unix/Linux with additional linker flags from "gsl-config --libs"
-## 
-## CMAKE_GSL_CXX_FLAGS  = Unix compiler flags for GSL, essentially "`gsl-config --cxxflags`"
-##
-## GSL_INCLUDE_DIRS      = where to find headers 
-##
-## GSL_LINK_DIRECTORIES = link directories, useful for rpath on Unix
-## GSL_EXE_LINKER_FLAGS = rpath on Unix
-##
-## Felix Woelk 07/2004
-## minor corrections Jan Woetzel
-##
-## www.mip.informatik.uni-kiel.de
-## --------------------------------
-##
-
-message( STATUS "GSL_ROOT_DIR value $ENV{GSL_ROOT_DIR}")
+# Try to find gnu scientific library GSL  
+# (see http://www.gnu.org/software/gsl/)
+# Once run this will define: 
+# 
+# GSL_FOUND       = system has GSL lib
+#
+# GSL_VERSION       = gsl version
+#
+# GSL_LIBRARIES   =  name of the libraries.
+#
+# GSL_INCLUDE_DIRS      = where to find headers 
+# 
+# GSL_USE_STATIC_LIBRARIES = Set it ON if you want to search for static
+# libraries.
+#
+# Felix Woelk 07/2004
+# minor corrections Jan Woetzel
+#
+# www.mip.informatik.uni-kiel.de
+# --------------------------------
+#
+# Friday 18 November 2016 09:05:56 AM IST
+# MODIFICATIONS: ##   dilawars@ncbs.res.in, For the MOOSE project.
+#      This  version does not use gsl-config file.
+#
+
+# Set this envrionment variable to search in this path first.
+SET(GSL_ROOT_DIR $ENV{GSL_ROOT_DIR})
+if(GSL_ROOT_DIR)
+    message( STATUS "Debug: GSL_ROOT_DIR value ${GSL_ROOT_DIR}")
+endif(GSL_ROOT_DIR)
 
 IF(WIN32)
 
-  SET(GSL_MINGW_PREFIX "c:/msys/local" )
-  SET(GSL_MSVC_PREFIX "$ENV{LIB_DIR}")
-  FIND_LIBRARY(GSL_LIB gsl PATHS 
-    ${GSL_MINGW_PREFIX}/lib 
-    ${GSL_MSVC_PREFIX}/lib
-    )
-  #MSVC version of the lib is just called 'cblas'
-  FIND_LIBRARY(GSLCBLAS_LIB gslcblas cblas PATHS 
-    ${GSL_MINGW_PREFIX}/lib 
-    ${GSL_MSVC_PREFIX}/lib
-    )
-
-  FIND_PATH(GSL_INCLUDE_DIRS gsl/gsl_blas.h 
-    ${GSL_MINGW_PREFIX}/include 
-    ${GSL_MSVC_PREFIX}/include
-    )
+    SET(GSL_MINGW_PREFIX "c:/msys/local" )
+    SET(GSL_MSVC_PREFIX "$ENV{LIB_DIR}")
+    FIND_LIBRARY(GSL_LIB gsl PATHS 
+        ${GSL_MINGW_PREFIX}/lib 
+        ${GSL_MSVC_PREFIX}/lib
+        )
+    #MSVC version of the lib is just called 'cblas'
+    FIND_LIBRARY(GSLCBLAS_LIB gslcblas cblas PATHS 
+        ${GSL_MINGW_PREFIX}/lib 
+        ${GSL_MSVC_PREFIX}/lib
+        )
+
+    FIND_PATH(GSL_INCLUDE_DIRS gsl/gsl_blas.h 
+        ${GSL_MINGW_PREFIX}/include 
+        ${GSL_MSVC_PREFIX}/include
+        )
+
+    IF (GSL_LIB AND GSLCBLAS_LIB)
+        SET (GSL_LIBRARIES ${GSL_LIB} ${GSLCBLAS_LIB})
+    ENDIF (GSL_LIB AND GSLCBLAS_LIB)
 
-  IF (GSL_LIB AND GSLCBLAS_LIB)
-    SET (GSL_LIBRARIES ${GSL_LIB} ${GSLCBLAS_LIB})
-  ENDIF (GSL_LIB AND GSLCBLAS_LIB)
-  
 ELSE(WIN32)
-  IF(UNIX) 
-    SET(GSL_CONFIG_PREFER_PATH "$ENV{GSL_ROOT_DIR}/bin")
-    # GSL_CONFIG must be cleared. This script may be called again after installing
-    # the proper version of gsl
-    if(EXISTS "$ENV{GSL_ROOT_DIR}")
-	set(GSL_CONFIG "$ENV{GSL_ROOT_DIR}/bin/gsl-config")
-	MESSAGE(STATUS "gsl-config from environment variable: ${GSL_CONFIG}")
-	set(GSL_INCLUDE_DIRS)
-        set(GSL_LIBRARIES)
-        set(GSL_VERSION)
-        set(GSL_CONFIG_LIBS)
-    else()
-	FIND_PROGRAM(GSL_CONFIG gsl-config
-			${GSL_CONFIG_PREFER_PATH}
-			$ENV{LIB_DIR}/bin
-			/usr/local/bin/
-			/usr/bin/
-		    )
-    endif()
-    IF (GSL_CONFIG) 
-      # set CXXFLAGS to be fed into CXX_FLAGS by the user:
-      SET(GSL_CXX_FLAGS "`${GSL_CONFIG} --cflags`")
-      
-      # set INCLUDE_DIRS to prefix+include
-      EXEC_PROGRAM(${GSL_CONFIG}
-        ARGS --prefix
-        OUTPUT_VARIABLE GSL_PREFIX)
-      SET(GSL_INCLUDE_DIRS ${GSL_PREFIX}/include CACHE STRING INTERNAL)
-
-      # set link libraries and link flags
-      EXEC_PROGRAM(${GSL_CONFIG}
-          ARGS --libs
-          OUTPUT_VARIABLE GSL_LIBRARIES)
-      
-      ## extract link dirs for rpath  
-      EXEC_PROGRAM(${GSL_CONFIG}
-        ARGS --libs
-        OUTPUT_VARIABLE GSL_CONFIG_LIBS )
-
-     EXEC_PROGRAM(${GSL_CONFIG}
-         ARGS --version
-         OUTPUT_VARIABLE GSL_VERSION
-         )
-
-      ## split off the link dirs (for rpath)
-      ## use regular expression to match wildcard equivalent "-L*<endchar>"
-      ## with <endchar> is a space or a semicolon
-      STRING(REGEX MATCHALL "[-][L]([^ ;])+" 
-        GSL_LINK_DIRECTORIES_WITH_PREFIX 
-        "${GSL_CONFIG_LIBS}" )
-        #      MESSAGE("DBG  GSL_LINK_DIRECTORIES_WITH_PREFIX=${GSL_LINK_DIRECTORIES_WITH_PREFIX}")
 
-      ## remove prefix -L because we need the pure directory for LINK_DIRECTORIES
-      
-      IF (GSL_LINK_DIRECTORIES_WITH_PREFIX)
-        STRING(REGEX REPLACE "[-][L]" "" GSL_LINK_DIRECTORIES ${GSL_LINK_DIRECTORIES_WITH_PREFIX} )
-      ENDIF (GSL_LINK_DIRECTORIES_WITH_PREFIX)
-      SET(GSL_EXE_LINKER_FLAGS "-Wl,-rpath,${GSL_LINK_DIRECTORIES}" CACHE STRING INTERNAL)
-      #      MESSAGE("DBG  GSL_LINK_DIRECTORIES=${GSL_LINK_DIRECTORIES}")
-      #      MESSAGE("DBG  GSL_EXE_LINKER_FLAGS=${GSL_EXE_LINKER_FLAGS}")
+    IF(GSL_USE_STATIC_LIBRARIES)
+        SET(GSL_LIB_NAMES libgsl.a)
+        SET(GSL_CBLAS_LIB_NAMES libgslcblas.a)
+    ELSE(GSL_USE_STATIC_LIBRARIES)
+        SET(GSL_LIB_NAMES gsl)
+        SET(GSL_CBLAS_LIB_NAMES gslcblas)
+    ENDIF( )
+
+    FIND_LIBRARY(GSL_LIB 
+        NAMES ${GSL_LIB_NAMES} 
+        PATHS 
+            ${GSL_ROOT_DIR}/lib ${GSL_ROOT_DIR}/lib64
+            /opt/lib /opt/lib64
+        )
+
+    FIND_LIBRARY(GSLCBLAS_LIB 
+        NAMES ${GSL_CBLAS_LIB_NAMES}
+        PATHS 
+            ${GSL_ROOT_DIR}/lib ${GSL_ROOT_DIR}/lib64
+            /opt/lib /opt/lib64
+        )
+    IF (GSL_LIB AND GSLCBLAS_LIB)
+        SET (GSL_LIBRARIES ${GSL_LIB} ${GSLCBLAS_LIB})
+    ENDIF (GSL_LIB AND GSLCBLAS_LIB)
+
+    FIND_PATH(GSL_INCLUDE_DIRS NAMES gsl/gsl_blas.h
+        PATHS ${GSL_ROOT_DIR}/include /opt/include 
+        )
 
-      #      ADD_DEFINITIONS("-DHAVE_GSL")
-      #      SET(GSL_DEFINITIONS "-DHAVE_GSL")
-      MARK_AS_ADVANCED(
-        GSL_CXX_FLAGS
-        GSL_INCLUDE_DIRS
-        GSL_LIBRARIES
-        GSL_LINK_DIRECTORIES
-        GSL_DEFINITIONS
-      )
-      
-    ELSE(GSL_CONFIG)
 
-      IF (GSL_FIND_REQUIRED)
-         MESSAGE(FATAL_ERROR "Could not find gsl-config. Please set it manually. GSL_CONFIG=${GSL_CONFIG}")
-      ELSE (GSL_FIND_REQUIRED)
-         MESSAGE(STATUS "Could not find GSL")
-         # TODO: Avoid cmake complaints if GSL is not found
-      ENDIF (GSL_FIND_REQUIRED)
-
-    ENDIF(GSL_CONFIG)
-
-  ENDIF(UNIX)
 ENDIF(WIN32)
 
-
-IF(GSL_LIBRARIES)
-  IF(GSL_INCLUDE_DIRS OR GSL_CXX_FLAGS)
-
-    SET(GSL_FOUND 1)
-    
-    MESSAGE(STATUS "Using GSL from ${GSL_PREFIX}")
-
-  ENDIF(GSL_INCLUDE_DIRS OR GSL_CXX_FLAGS)
-ENDIF(GSL_LIBRARIES)
+# FIND version
+if(GSL_INCLUDE_DIRS)
+    file(READ "${GSL_INCLUDE_DIRS}/gsl/gsl_version.h" GSL_VERSION_TEXT)
+    string(REGEX REPLACE ".*define[ ]+GSL_MAJOR_VERSION[ ]*([0-9]+).*"  "\\1"
+        GSL_MAJOR_VERSION "${GSL_VERSION_TEXT}")
+    string(REGEX REPLACE ".*define[ ]+GSL_MINOR_VERSION[ ]*([0-9]+).*"  "\\1"
+        GSL_MINOR_VERSION "${GSL_VERSION_TEXT}")
+    set(GSL_VERSION "${GSL_MAJOR_VERSION}.${GSL_MINOR_VERSION}")
+    message(STATUS "GSL version : ${GSL_VERSION}")
+endif(GSL_INCLUDE_DIRS)
+
+IF(GSL_LIBRARIES AND GSL_VERSION)
+    IF(GSL_INCLUDE_DIRS)
+        MESSAGE(STATUS "Found GSL ${GSL_LIBRARIES}")
+        SET(GSL_FOUND 1)
+    ENDIF(GSL_INCLUDE_DIRS)
+ENDIF()