Haven't tested it but the code itself looks clean and structured. Good job .