2.4.12
- Features
  - New config option 'ssl_disable_protocols'. Pre-set to disable
    SSLv2 and v3 in SSL mode
  - Ruby: support Ruby 2.1 threading API
- Bugfixes
  - Fix memory corruption due to a malloc made with the wrong size
  - iniparser: dictionary_set' must return a value (David Holm)

2.4.11
- Features
  - Bindings: EndPointReference.selector_names() for Python
- Bugfixes
  - URI parsing: Disallow comma to separate selectors in resource uri,
      only ampersand is allowed. (issue #38)
  - Bindings: Fix Ruby doc generation

2.4.10
- Features
  - Allow to pass EndPointReference instances as invoke() parameters
    via ClientOptions.add_property

2.4.9
- Bugfixes
  - make finding libssl.so.* more robust

2.4.8
- Features
  - Add Fujitsu namespace, cim schema SVS
- Bugfixes
  - client: copy key/value data for options, selectors, and properties
  - fix .spec file for RHEL/Fedora builds

2.4.7
- Bugfixes
  - file authenticator: allow password hash of up to 128 characters
  - libu: don't exit() on malloc errors

2.4.6
- Features
  - Support large hashes (like SHA512) in file authentication
  - use constant-time password compare to prevent brute-force attacks
  - Create server-plugin-ruby as separate RPM
  - Add Unisys namespace and CIM class prefix 'SPAR'
  - Alias openwsman and openwsmand systemd services
  - Also create respective rc-commands: rcopenwsman, rcopenwsmand
    (SUSE only)
- Bugfixes
  - Fix crash on invalide resource URI  
  - Fix resource namespace for DCIM_ classes

2.4.5
- Features
  - enforce SSL operation in systemd service
  - Add /usr/sbin/rcopenwsman for systemd environments
  - New environment variable 'OPENWSMAN_CURL_TRANSPORT_SSLVERSION' to
    select SSL protocol version. Set it to 'tlsv1.2' for TLS-v1.2
    (anstein)
- Bugfixes
  - Fix memory leaks in redirect plugin (Praveen K Paladugu)
  - shttpd: Improve error reporting if SSL context fails
  - Builds on Fedora 20 now

2.4.4
- Security update
  - ws_xml_make_default_prefix() can overflow buf parameter via sprintf()
  - ws_xml_make_default_prefix() can overflow buf parameter via sprintf()
  - wsmc_create_request() potential buf[20] overflow via WSMAN_ACTION_RENEW
  - LocalSubscriptionOpUpdate() unchecked fopen()
  - Incorrect order of sanity guards in wsman_get_fault_status_from_doc()
  - Unchecked memory allocation in wsman_init_plugins(), p->ifc
  - Unchecked memory allocation in mem_double(), newptr
  - Unchecked memory allocation in dictionary_new(), d, d->val, d->key, d->hash
  - Unchecked memory allocation in u_error_new(), *error
  - sighup_handler() in wsmand.c uses unsafe functions in a signal handler
- Features
  - add rcopenwsman command to systemd environments
  - add rcopenwsmand command for backwards compatibility
- Bindings
  - support rdoc 2.1 in Ruby bindings
  - cmake: use PYTHON_INCLUDE_DIRS

2.4.3
- Bugfixes
  - Fix bindings for Java 1.5
  - Raise exception if client creation fails (bindings)

2.4.2
- Standards compliance
  - Honor WS-Management 1.1.1 standard (line 739)
    Disable multiple MessageID checks
- Bugfixes
  - Fix crash in redirect module (typo)

2.4.1
- Build fixes
  - Builds now on SLES11 (cmake 2.4), Fedora 18
  - Fedora 19
    - needs rubypick package
    - has empty ruby_version in CONFIG
  - fix Ruby gem, include version.rb

2.4.0
- Features
  - Add support for OptionSet in SOAP header (breaks ABI)
  - Increase soversion of libwsman_client to 2.0.0
  - new function wsmc_add_option
  - Redirect plugin: Added facilities to import the redirection
    details from an included file (Praveen K Paladugu)
- Bugfixes
  - wsman_transport_set_verify_host passed wrong values to CURL
  - recognize 'Msvc' (Hyper V) and 'DCIM' (Dell Drac) CIM schemata
  - xml_parser_element_dump: fix pointer (github issue #8)
- Bindings
  - Ruby: Fix Ruby 1.9 threading locks for wsmc_action_* functions
  - Ruby: API change: Transport.verify_{host,peer}? return Boolean now
      Transport.verify_peer -> Transport.verify_peer?
      Transport.verify_host -> Transport.verify_host?
  - Support for OptionSet
    - ClientOptions#add_option
    - ClientOptions#options= (Ruby)
  - XmlDoc#to_s returns non-indented xml representation
  - Ruby: Accessors for OptionSet, Selectors, and Properties
    - ClientOptions#options
    - ClientOptions#properties
    - ClientOptions#selectors
  - Define security delivery modes (WSMAN_DELIVERY_SEC_*)
  - Vastly improved bindings documentation
  - Generate documenation with rdoc 1.9
  - Windows Remote Shell client implementation (see ruby/tests/winrs.rb)

2.3.7
- Bugfixes
  - Generate pkgconfig (.pc) files correctly
  - Require SWIG > 2.0.4 for building

2.3.6
- Features
  - Plugins: Ability to redirect requests to a different WS-Management
    server (Praveen Paladugu)
- Bugfixes
  - Fix xml namespace in Fault message (Praveen Paladugu)
  - Pass correct key values when creating a Cim_IndicationSubscription
    (Santosh Bidaralli)
  - verify_class_namespace: properly check for 'CIM' class schema
    (Mayur Bhosle)
  - Fix MaxElements namespace in Pull context (Praveen Paladugu)
- Bindings
  - Ruby: fix crash in Options destructor
  - Ruby: mark passing arrays via invoke as unsupported
- Building
  - new cmake option: BUILD_BINDINGS (defaults to yes)
  - honor BUILD_TESTS for all test directories 
  - fix MaxcOS build (Dan Villiom Podlaski Christiansen)
          
2.3.5
- Bugfixes
  - Release serializer lock only after use (Satya Chittidi)

2.3.4
- Bugfixes
  - Adapt to Swig 2.0.5 bugfix for renamed construtors/destructors.
- Bindings
  - SwigClass.. variables are static now

2.3.3
- Bugfixes
  - Assume 'XPath' as default filter dialect, not 'WQL' (Zoltan Micskei)
  - Fixed enumeration with selector filter returning only one instance. (Zoltan Micskei)
  - mark XPath filtering as not supported (in sfcc)
- Bindings
  - Adapt to Ruby 1.9
  - Disable RDoc for Ruby 1.9
  - WsXmlDoc.to_xml - enforce utf-8 encoding
  - Properly create AssociationInstances(CIM References) /
    AssociatedInstances(CIM Associations) filter
  
2.3.2
- Bugfixes
  - Assume 'XPath' as default filter dialect, not 'WQL' (Zoltan Micskei)
- Bindings
  - Add ClientOptions#flags() (read) and ClientOptions#reset_flags()
  - Add Openwsman#uri_prefix
  - Add Openwsman#create_doc_from_string
  - Provide full EndPointReference handling

2.3.1
- Features
  - switch default CIMOM connection to https on port 5989
    with PAM authentication (this now reflects the default sfcb config)
- Bindings
  - Ruby: Add Openwsman#epr_uri_for
- Bugfixes
  - Fix build issues in .spec file

2.3.0
- Features
  - openSUSE: support systemd
  - provider getter functions for all client and client option string
    values
  - Add ssl-related config options in [cim] section, see openwsman.conf
    ssl = yes/no
    verify_cert = yes/no
    trust_store = /etc/ssl/certs
- Bugfixes
  - Enum/Pull: Fix envelope maxsize handling, return partial result
  - Fix memleaks in client and client option string setters
    (Matthias Bolte)
  - All string value getters (for client and client_opt) return
    copies now
    (found by Matthias Bolte)
  - Define and use PLUGIN_API_VERSION for the server-side plugins
  - Handle optional arguments propertly during client endpoint URI
    creation (Matthias Bolte)
  - Make calls to 'identify' repeatable
  - Destroy serializer lock and client mutex at exit (Bing Liu)
  - Fix leak in wsmc_release (Sanjeev Putta)
  - Allow to reset transport credentials to NULL (Matthias Bolte)
  - Plug memory leaks in wsman-client-transport (Found by Suneet
    Chandok, improved by Matthias Bolte)
  - print warning if event delivery fails
- Bindings
  - Provide Ruby bindings also as GEM
    (-> https://rubygems.org/gems/openwsman)
  - Add Openwsman#create_doc_from_file to read xml files
  - Add XmlNode#next to iterate over children with identical name
  - Add Openwsman#erb_prefix_for to return EPR uri prefixes for
    different CIM schema
  - Ruby: Provide a default implementation of auth_request_callback
  - Ruby: Support Ruby 1.9
  - Expose Openwsman version as OPENWSMAN_VERSION, OPENWSMAN_MAJOR,
    OPENWSMAN_MINOR, OPENWSMAN_PATCH
  - Ruby: expand XmlNode#each to iterate over multiple children of
    same name
  - new test tool: winenum.rb, to enumerate WINRM instances
  - update documentation: Add note about escaping selector values

2.2.7
- Features
  - Rename openwsman-client to libwsman_clientpp since it only
    includes C++ bindings. Split off libwsman_clientpp-devel.
    Move openwsman_client.conf to libwsman1.
  - Performance improvements for Enum (optimized) and Pull requests
    (Srinivas Thirumalaa)
- Bindings
  - Fix all tests
  - Enhance client function documentation
  - Add max_elements, max_envelope_size, fragment, and timeout
    to Options
  - Use optimized enumeration in tests
- Bugfixes
  - Fix memory leaks in wsmc_action_enumerate_and_pull and wsmc_release
    (Matthias Bolte)
  - Fix possible corruption in ws_serializer_free_mem
    (Matthias Bolte)
  - Fix recognition of ntlm and gss-negotiate auth methods when checking
    server-requested vs. client-offered methods.
- Developer
  - Enable client tests
  - Improve Windows build (Matthias Bolte)
  - Reduce libu exposure in the public API (Matthias Bolte)

2.2.6
- Features
  - Add array support for indications (Suresh Sundriyal)
  - Add indication_baseclass_namespace (Till Steinbach, Suresh Sundriyal)
- Bugfix
  - Correctly prefix /etc when CMAKE_INSTALL_PREFIX is not /usr (Chris Poblete)

2.2.5
- Features
  - Clean up cmake variable names (kkaempf)
  - Add --version option to display version and build timestamp (Chris Poblete)
  - Support array representation in XML bindings (multiple children with same name) (kkaempf)
  - Support array type in PUT operation (Chris Poblete)
- Bindings
  - more Ruby examples to access winrm (kkaempf)
  - replace to_s with to_xml when a XML representation is returned (kkaempf)
- Bugfixes
  - Always return the current instance representation after PUT (Chris Poblete)
  - Issue wsman:MaxElements only for Enumerate and OptimizeEnumeration (Chris Poblete)
  - Ensure all array elements have same type on invoke (Chris Poblete)
  - Compile with -DNO_SSL_CALLBACK on Fedora [curl-Bugs-1924441] (Vitezslav Crhonek)

2.2.4
- Features
  - Build with cmake (kkaempf)
    building with 'autotools' is now deprecated and will be
    removed in future versions
  - Java client bindings (kkaempf)
  - enforce manual creation of certificate (to get sufficient
    entropy for randomness) (Praveen Paladugu)
- Bugfixes
  - fix pam config on RHEL/Fedora (kkaempf

2.2.3.9
- Bugfix release:
  - bindings (kkaempf)
    - make all constants uppercase
    - optionally pass code, code_detail, and message to WsmanStatus()
      constructor
    - Pass XmlDoc to Fault() constructor
    - Fix exceptions for Perl and Python
    - Ruby: Alias XmlDoc.foo to XmlDoc.body.foo
    - Ruby: Create bindings documentation
    - Java: Enable and fix for jdk 1.6.0 (unpackaged)
    - fix pam config on RHEL/Fedora
  - Fix Fedora/RH build (kkaempf)
  - Use floor() instead of round() (Suresh Sundriyal)
  - Reuse username/password if auth_request_func is not set (Arun Venkatachalam)
  - Catch invalid reference parameters (report bad EPR values) (kkaempf)
  - fix Windows build (Trevor Witten)
  - fix ssl (certificate thumbprint) callback check (Arun Venkatachalam)

2.2.3 final
- Bugfix release:
  - cleanup: access CMPIString by macro, not by casted direct member access 
  - fix connection error msg: rc.msg is a CMPIString, not a char* (kkaempf)
  - fix for OperationTimeout parsing (Chris Poblete)

2.2.3pre
- Bugfix release:
  - fix Windows build (forum.openwsman.org)
  - fix to build with non-standard subscriptions dir (Chris Poblete)
  - accept OperationTimeout values as outlined in Section 3.2.6.1
    of http://www.w3.org/TR/xmlschema-2 (Chris Poblete)
  - fall back to IPv4 if IPv6 unsupported (Arun Venkatachalam)
  - make IPv4 vs. IPv6 configurable (kkaempf)
  - support invoking a method with array type parameter/arguments
    (Chris Poblete, bnc#581414)
  - include instance namespace in the EPR response (Chris Poblete)
  - fix crash in (unhandled) Array argument (Suresh Sundriyal)
  - handle MaxElements in Pull operations (Chris Poblete, kkaempf, bnc#581731)
  - fix building with ssl when openssl/ssl.h is available (Chris Poblete)
  - make plugin directory configurable (Chris Poblete)
  - fix "WXF Invalid Representation" error when sending a Create instance request
    using the WinRm client (Trevor Witten)
  - add ExcludeNilProperties option to suppress nil properties per request
    (Chris Poblete, kkaempf)

2.2.2
- Bugfix release:
  - fix init.d script to run on non-LSB systems (bnc#571873, Chandrasekhar_R@Dell.com)
  - Clean up CMake build (kkaempf)
  - Fix build for RHEL5, Fedora 11+12, CentOS 5
  - Fix host certificate check in eventing, enable only if the
    verify_host flag is set (bnc#569611, A_Venkatachalam@Dell.com)
  - adapt bindings/ruby/helpers.c to Swig 1.3.40 class variable name
    change
  - fix bindings to accept ints (enums can't be expressed)

2.2.1-1
- fix NULL pointer dereference in PullResponse (bnc#572553, Suresh Sundriyal)

2.2.1
- Major changes:
  - Enumeration timeout fixed, resulting in --enum-idle-timeout option
    to openwsmand taking seconds (instead of miliseconds) now
  - Client side CRL (certificate revocation list) support
    (Arun Venkatachalam)
  - split off client config as /etc/openwsman/openwsman_client.conf
  - Fix upper limit check for threads and their stack usage (Suresh Sundriyal)
    (Allowing to confine memory usage in the 10-20MB range!)
    Reintroduce max_thread config file parameter and two new parameters
    * max_connections_per_thread
    * thread_stack_size
- Minor changes:
  - require swig 1.3.30 or later (rhel5 users: upgrade !)
  - clean up fault generation in CIM backend (Suresh Sundriyal)
  - fix various memory leaks (Suresh Sundriyal)
  - fix Python bindings build (kkaempf)
  - Fix security risk when listing indication subscriptions (Suresh Sundriyal)
  - Fix xml namespace for enumeration and subscription filters (kkaempf)
  - Fix class names for swig bindings, makes Python bindings
    operational (kkaempf)
  - Use same encoding for faults as in incoming msg (bug305, kkaempf)
  - Make WS-Enumeration pull response comply to WS-Enumeration sequence
    ordering (Suresh Sundriyal)

2.2.0
- Major changes:
  - Adapt IANA ports of 5985 (http) and 5986 (https)
  - Change the Ruby bindings module name to 'Openwsman'
  - Change the Ruby plugin module name to 'Openwsman'
  - IPv6 support (A_Venkatachalam@Dell.com)
  - preliminary support for wbem intrinsic operations
    'EnumerateClassNames' and 'GetClass' (kkaempf@suse.de)
    (needs fixed sblim-sfcc, see www.openwsman.org for details)
- Minor changes:
  - Perl example code added (by warptrosse@gmail.com)
  - Fixes to the CMake build environment
  - Fixes to the sfcc backend (argument handling, xml escaping)
  - Fix segfault when HTTP Content-Type not set (ssundriy@vmware.com)
  - Many other bug fixes, e.g.
    297: More detailed http status codes
    309: Use correct namespace for detecting Filter node
    288: CIM Provider Faults not getting propagated to client 
    279: Openwsman server is adding extra CRLF

2.1.1
- Support SUNpro C compiler
- Add SWIG server-side plugin support (Klaus Kaempf)
- Add Perl client bindings (Klaus Kaempf)
- Client bindings cleanup and improvements (Klaus Kaempf)

2.1.0
- Security related fixes
- Many bug fixes related to http stack
- GSSAPI support (thanks to Paul Moore)

2.0.1
- Added Java bindings
- Set proxy in C++ bindings
- Fixed SelectorSet Filter 
- Added SelectorSet filter support to C++ interface
- SelecorFilter does not need __cimnamespace


2.0.0
- minor bug fixes

2.0.0b2
 * Support SelectorSet Dialect
 * Improved Filter API
 * Improved EPR API
 * Enahnced bindings to support filters
 * Initial cmake support (Thanks to Klaus Kaempf)
 * Many other bug fixes

2.0.0b1

 * Use latest shttpd code base
 * Fixed SSL related issues with shttpd.
 * Ruby bindings using swig now and part of openwsman
 * Python bindings update
 * serialize/de-serialize APIs updated. 
   Make serialize/de-serialize APIs independent of server related structure; 
   New APIs of 
	do_serialize_real32, 
	do_serialize_real64, 
	do_serialize_int8 , 
	do_serialize_int16, 
	do_serialize_int32 and 
	do_serialize_int64 added.
 * secure eventing delivery support in WS-Eventing server code and related
   options added in client code. 
 * WS-Eventing client interfaces updated to make it more general.
 * Source indication namespace configuration supported so that the 
   namespace of subscription related classes can be different from that of indication class.
 * Anonymous identify and custom identify file supported. 
 * Many other bug fixings. 

1.5.1

    * Fixed compilation client library on windows
    * Fixed crash in CIM plugin
    * Fixed serialization in client library 

1.5.0

Openwsman 1.5 is an interim stable release toward 2.0 with all completed features since 1.0. This release serves as a checkpoint to evaluate implemented and outstanding features and to take care of bugs instead of waiting until the beta phase of 2.0.

    * Structure Improvements
          o New file structure. Header files separated from source file
          o wsman_util library integrated into main library
          o CIM client library (relying on SFCC) is part of the CIM plugin now 
    * Openwsman Server:
          o Rename server binary to openwsmand to avoid conflicts (wsmand is very generic)
          o Accept indications 
    * Openwsman Client:
          o Added --encoding options to choose encoding type of sent and received messages
          o Added options to support eventing
          o Load custom method parameters from external file 
    * WS-Eventing Phase 1
          o Subscribe, Unsubscribe, Renew commands supported
          o Heartbeat message supported. The granularity is 1 second.
          o Four kinds of delivery modes supported: Push, PushWithAck, Pull, Events
          o Extensible subscription storage mechanism and local subscription storage implemented
          o If the delivery mode is PushWithAck or Events and there is no acknowledgment response from the event sink, the subscription will be terminated.
          o Expired subscription will be deleted from the storage.
          o Subscription with no expiry time will be kept until the service restarts. When the service restarts, all expired and non-expiry subscriptions will be deleted.
          o If the delivery mode is set to Pull, the number of events kept in the service is limited. Any events over that limit will be discarded.
          o Initial CIM indication support in the CIM plugin 
    * XML abstraction layer and parser improvements
    * Language Bindings:
          o Python 
    * Better support for windows authentication and client API support on windows
    * Windows Client-side WS-Eventing support:
    * C++ Bindings (Interface use mostly on windows)
          o Connect using proxy server.
          o Support replacing user name without the need to call constructor. Added api - void SetUserName?(const char *user_name)
          o Support replacing password without the need to call constructor. Added api - void SetPassword?(const char *password)
          o Add mechanism to extract error message (as string) using the error code inside the GeneralWsmanExeption?.
          o Fixed bugs related to Kerberos communication in windows transport client 
    * Integration with CIMOMs:
          o Sfc Broker (Support local and CIMXML communication): Now it is possible to choose backend in the configuration file
          o Openwbem (External Request handler) 

    * Many many other fixes and improvements 

1.2.0

    * Fixed memory leaks in client, cpp client
    * cleanup API to support external plugins and openwbem request handler
    * General cleanup and minor fixes 
1.1.0 

Thread saftey: Moved static variables to client struct
TLS Support: Support mutual authentication on Linux and Windows
C++ client improvements
API changes: Fixed long names and modified prefix of client API function
Filtering: Assoc./References Support improved 

1.0.0 

First major release
0.7.5

Bug fix release
0.7.4

Bug fix release
0.7.3

Bug fix release
0.7.2

Bug fix release
0.7.1

Bug fix release
0.7.0

    * Enumeration Expiry support and timeout handler added
    * C++ Wrapper library added
    * Enhanced low-level API to support different types of data, now operations and actions requiring input (payload) accept:
          o Text
          o XML
          o Serialized data 
    * Simple C API with Sessions support added
    * Serialization, Reworked and enhanced, added the following:
          o Date/Time Serialization
          o EPR Serialization 
    * Create and Delete are now supported on the server level and the CIM plugin
    * Namespace and resource URI handling is now stricter now allowing the use of random namespaces (they have to be defined in the configuration file)
    * Transport using native interface on windows (not curl)
    * Unified error handling for Windows and Linux
    * Enahncements to make client compile and work on Windows
    * Single Client API header
    * Many bugs and spec conformance issues fixed 

0.6.1

The updates in this version of Openwsman have been focused on WS-CIM and WS-Management specification compliance.

Interoperability with other WS-Management implementations was done at the Management Developers Conference (MDC) 2006. The issues found at the MDC have been corrected in this release.
0.6.0
0.5.1

0.5.0

0.4.2
    * Removed env_t and replaced it with SoapH
    * removing iWsDoc. Using WsXmlDocH everywhere
    * improved create request routine for transfer put

0.4.1
    * 
    
0.4.0
    * Standalone http server (replace libsoup), libsoup server still available using config options, however it will no longer be supported
    * Support for both Basic and Diegst at the same time
    * Command line client
	* Client now uses curl
	* Added additional debuging options( save output to file, step operatings)
    * WS-CIM Compliance
	- Added support for namespaces as selectors
	- Full polymorphism support
    * CIM Plugin
	- Authentication with CIMOM using basic authentication
	- Multiple vendor namespace now supported
	- Vendor namespaces are configured in master config file
	- Default CIM namespace configurable in master config file
    * PAM Support
    * Removed dependency on Glib2
    * New command line parser for client and server
    * Improved client interface
    * Test clients added
    * CUnit testing added (more tests to follow)
    * Functional testing scripts added (more comliance tests to follow)
    * Compliance with WS-Management specification
	- Authenticate with same credentials when enumerating
	- More Header checks
    * Updated Fault table
    * Many memory leak fixes
    * Plugin reads configuration data from master config file
	
0.3.2

    * Parse SSL port correctly
    * Invoke CIM methods with right variables. 

0.3.1

    * fixed bug with null array value in cim access library: #24 

0.3.0

    * Code Cleanup
    * Optimize code size
    * RPM Support using SUSE build services
    * Further modularization
    * More WS-Management specification conformance
    * Utility Library (glib replacement in core library)
    * Basic CIM Binding support (Polymorphism)
    * Many bug fixes, see report for more details. 

0.2.0

    * This is a cleanup release with many bug fixes and the following additional features:
    * RPM support
    * Core library split into functional sub libraries for server, client and utility functions.

0.1.0 
    * This is the first release defaulting to support the WS-management specification from the DMTF (version 1.0, currently draft). Support for the June 2005 specification has been disabled. You will not be able to send requests to Windows 2003 R2 or Vista with WS-Man support unless those have the new WS-Management stack from Microsoft.

    * This release also added some new options to the client and removed many command line options from the service. Those options are now part of the configuration file used for the service. 
0.09:
    * Support DMTF draft specification (Work in Progress)
    * Optimized enumeration
    * EPR enumeration
    * EPR And Object Enumeration
    * Estimate Item Count in Enumeration
    
0.07:
    * Various fixes to generic CIM plugin
    * Eliminated memory leaks in various location
    * Removed obsolete code which was inherited from the reference implementation this project is based on
    * Added support for custom methods: It is now possible to invoke custom methods (Extrinsic CIM operations).
    * Capture errors and status codes from the CIM library as WS-Management faults
    * Moved all CIM client library dependencies to the cim client interface library to be able to support other client libraries (i.e. OpenWBEM client interface ) in the future.
    * Changed command line options for the client to accomodate new actions and custom methods.

