@Override
    public boolean read( File file, HashMap< String, HashMap< String, String > > tags )
    {
        try
        {
            BufferedReader br = new BufferedReader( new FileReader( file ) ); // reads data from the file

            Map< String, HashMap< String, String > > data = new HashMap<>(); // contains all of the read data

            String currentTag = null; // the name of the current property

            String line; // the last read line
            while ( ( line = br.readLine() ) != null )
            {

                line = line.trim();

                // stop the reading
                if ( line.equals( "[END]" ) )
                {
                    currentTag = null;
                    continue;
                }

                if ( currentTag != null )
                {

                    HashMap< String, String > props = data.get( currentTag );

                    String[] split = line.split( "=" ); // split it between key and value
                    props.put( split[ 0 ], split[ 1 ] ); // add the key and value to the map
                }
                else
                {
                    // beings with a '[' and ends with an ']'
                    if ( line.startsWith( "[" ) && line.endsWith( String.format( "]" ) ) )
                    {
                        currentTag = line.substring( 1, line.lastIndexOf( "]" ) ); // change the current property
                        data.put( currentTag, new HashMap< String, String >() );
                    }
                }
            }

            br.close(); // close the stream

            // change the data
            tags.clear(); // remove all previous entries
            tags.putAll( data ); // put all the new data into this map

            return true;
        }
        catch ( IOException e )
        {
            Lumberjack.error( "PTCF", "An error occurred while reading file \"%s\"!", file.getPath() );
            Lumberjack.throwable( "PTCF", e );
            return false;
        }
    }