diff --git a/docs/api/JuliaFEM.abaqus_reader.md b/docs/api/JuliaFEM.abaqus_reader.md
new file mode 100644
index 0000000..dd7c3a0
--- /dev/null
+++ b/docs/api/JuliaFEM.abaqus_reader.md
@@ -0,0 +1,14 @@
+# JuliaFEM.abaqus_reader
+
+## Internal
+
+---
+
+
+#### add_handler(section, function_name) [¶](#method__add_handler.1)
+Register new handler for parser
+
+
+*source:*
+[JuliaFEM/src/abaqus_reader.jl:18](https://github.com/JuliaFEM/JuliaFEM.jl/tree/b8194d0c137963b44aab6b223a22491f9b0f7774/src/abaqus_reader.jl#L18)
+
diff --git a/docs/api/JuliaFEM.elasticity_solver.md b/docs/api/JuliaFEM.elasticity_solver.md
new file mode 100644
index 0000000..2125f1a
--- /dev/null
+++ b/docs/api/JuliaFEM.elasticity_solver.md
@@ -0,0 +1,154 @@
+# JuliaFEM.elasticity_solver
+
+## Internal
+
+---
+
+
+#### assemble!(fe, eldofs_, I, V) [¶](#method__assemble.1)
+Assemble global RHS to I,V ready for sparse format
+
+Parameters
+----------
+fe : local vector
+eldofs_ : Array
+ degrees of freedom
+I,V : Arrays for sparse matrix
+
+Notes
+-----
+eldofs can also be node ids for convenience. In that case dimension
+is calculated and eldofs are "extended" to problem dimension.
+
+
+*source:*
+[JuliaFEM/src/elasticity_solver.jl:171](https://github.com/JuliaFEM/JuliaFEM.jl/tree/b8194d0c137963b44aab6b223a22491f9b0f7774/src/elasticity_solver.jl#L171)
+
+---
+
+
+#### assemble!(ke, eldofs_, I, J, V) [¶](#method__assemble.2)
+Assemble global stiffness matrix to I,J,V ready for sparse format
+
+Parameters
+----------
+ke : local matrix
+eldofs_ : Array
+ degrees of freedom
+I,J,V : Arrays for sparse matrix
+
+Notes
+-----
+eldofs can also be node ids for convenience. In that case dimension
+is calculated and eldofs are "extended" to problem dimension.
+
+
+*source:*
+[JuliaFEM/src/elasticity_solver.jl:130](https://github.com/JuliaFEM/JuliaFEM.jl/tree/b8194d0c137963b44aab6b223a22491f9b0f7774/src/elasticity_solver.jl#L130)
+
+---
+
+
+#### calc_local_matrices!(X, u, R, Kt, N, dNdchi, lambda_, mu_, ipoints, iweights) [¶](#method__calc_local_matrices.1)
+Calculate local tangent stiffness matrix and residual force vector R = T - F
+
+
+*source:*
+[JuliaFEM/src/elasticity_solver.jl:68](https://github.com/JuliaFEM/JuliaFEM.jl/tree/b8194d0c137963b44aab6b223a22491f9b0f7774/src/elasticity_solver.jl#L68)
+
+---
+
+
+#### eliminate_boundary_conditions(dirichletbc, I, J, V) [¶](#method__eliminate_boundary_conditions.1)
+Eliminate Dirichlet boundary conditions from matrix
+
+Parameters
+----------
+dirichletbc : array [dim x nnodes]
+I, J, V : sparse matrix arrays
+
+Returns
+-------
+I, J, V : boundary conditions removed
+
+Notes
+-----
+pros:
+- matrix assembly remains positive definite
+cons:
+- maybe inefficient because of extra sparse matrix operations. (It's hard to remove stuff from sparse matrix.)
+- if u != 0 in dirichlet boundary requires extra care
+
+Raises
+------
+Exception, if displacement boundary conditions given, i.e.
+DX=2 for some node, for example.
+
+
+
+*source:*
+[JuliaFEM/src/elasticity_solver.jl:218](https://github.com/JuliaFEM/JuliaFEM.jl/tree/b8194d0c137963b44aab6b223a22491f9b0f7774/src/elasticity_solver.jl#L218)
+
+---
+
+
+#### eliminate_boundary_conditions(dirichletbc, I, V) [¶](#method__eliminate_boundary_conditions.2)
+Eliminate Dirichlet boundary conditions from vector
+
+Parameters
+----------
+dirichletbc : array [dim x nnodes]
+I, V : sparse vector arrays
+
+Returns
+-------
+I, V : boundary conditions removed
+
+Notes
+-----
+pros:
+- matrix assembly remains positive definite
+cons:
+- maybe inefficient because of extra sparse matrix operations. (It's hard to remove stuff from sparse matrix.)
+- if u != 0 in dirichlet boundary requires extra care
+
+Raises
+------
+Exception, if displacement boundary conditions given, i.e.
+DX=2 for some node, for example.
+
+
+*source:*
+[JuliaFEM/src/elasticity_solver.jl:257](https://github.com/JuliaFEM/JuliaFEM.jl/tree/b8194d0c137963b44aab6b223a22491f9b0f7774/src/elasticity_solver.jl#L257)
+
+---
+
+
+#### interpolate{T<:Real}(field::Array{T<:Real, 1}, basis::Function, ip) [¶](#method__interpolate.1)
+Interpolate field variable using basis functions f for point ip.
+This function tries to be as general as possible and allows interpolating
+lot of different fields.
+
+Parameters
+----------
+field :: Array{Number, dim}
+ Field variable
+basis :: Function
+ Basis functions
+ip :: Array{Number, 1}
+ Point to interpolate
+
+
+*source:*
+[JuliaFEM/src/elasticity_solver.jl:30](https://github.com/JuliaFEM/JuliaFEM.jl/tree/b8194d0c137963b44aab6b223a22491f9b0f7774/src/elasticity_solver.jl#L30)
+
+---
+
+
+#### solve_elasticity_increment!(X, u, du, elmap, nodalloads, dirichletbc, lambda, mu, N, dNdchi, ipoints, iweights) [¶](#method__solve_elasticity_increment.1)
+Solve one increment of elasticity problem
+
+
+*source:*
+[JuliaFEM/src/elasticity_solver.jl:278](https://github.com/JuliaFEM/JuliaFEM.jl/tree/b8194d0c137963b44aab6b223a22491f9b0f7774/src/elasticity_solver.jl#L278)
+
diff --git a/docs/api/JuliaFEM.interfaces.md b/docs/api/JuliaFEM.interfaces.md
new file mode 100644
index 0000000..7ab90e5
--- /dev/null
+++ b/docs/api/JuliaFEM.interfaces.md
@@ -0,0 +1,19 @@
+# JuliaFEM.interfaces
+
+## Exported
+
+---
+
+
+#### solve_elasticity_interface!() [¶](#method__solve_elasticity_interface.1)
+This is generic interface that reads data from data model, solves elasticity
+problem and updates model.
+
+Parameters
+----------
+model : to be defined
+
+
+*source:*
+[JuliaFEM/src/interfaces.jl:22](https://github.com/JuliaFEM/JuliaFEM.jl/tree/b8194d0c137963b44aab6b223a22491f9b0f7774/src/interfaces.jl#L22)
+
diff --git a/docs/api/JuliaFEM.md b/docs/api/JuliaFEM.md
new file mode 100644
index 0000000..fb09699
--- /dev/null
+++ b/docs/api/JuliaFEM.md
@@ -0,0 +1,2 @@
+# JuliaFEM
+
diff --git a/docs/api/JuliaFEM.xdmf.md b/docs/api/JuliaFEM.xdmf.md
new file mode 100644
index 0000000..df1875a
--- /dev/null
+++ b/docs/api/JuliaFEM.xdmf.md
@@ -0,0 +1,2 @@
+# JuliaFEM.xdmf
+
diff --git a/docs/build_api.jl b/docs/build_api.jl
index c1fcf84..c0275ee 100644
--- a/docs/build_api.jl
+++ b/docs/build_api.jl
@@ -53,7 +53,7 @@ cd(dirname(@__FILE__)) do
# Generate and save the contents of docstrings as markdown files.
index = Index()
for mod in modules
- Lexicon.update!(index, save(joinpath(api_directory, "$(mod).rst"), mod))
+ Lexicon.update!(index, save(joinpath(api_directory, "$(mod).md"), mod))
end
save(joinpath(api_directory, "index.rst"), index)
diff --git a/src/xdmf.jl b/src/xdmf.jl
index 2b2eef8..a175fb7 100644
--- a/src/xdmf.jl
+++ b/src/xdmf.jl
@@ -44,7 +44,16 @@ VERSION < v"0.4-" && using Docile
# > #define XDMF_3DSMESH 0x1100
# > #define XDMF_3DRECTMESH 0x1101
# > #define XDMF_3DCORECTMESH 0x1102
+"""
+Build a new model for outout
+Parameters
+----------
+
+Example
+-------
+ >>> xdmf_new_model()
+"""
function xdmf_new_model(xdmf_version="2.1")
xdoc = XMLDocument()
xroot = create_root(xdoc, "Xdmf")