Contains some added function by myself